mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 22:14:04 +02:00
This is the 4.19.106 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl5TfLwACgkQONu9yGCS
aT5wlRAAhZELK39c78NMCTZKHtKGLsGb2os2IiI7zIRbqNNwnvJi+jAc3kgbS9jP
+W+wnhYFtFisDvqdCQ009I6A0NA1p3Nqy166JplW0iIg1e7rgUKKUfabCN9sJmjh
HGK913cJlHwGmkSxq//sBucBwWhYYGaHec28pZ7uCFATjWrTaH3G4VrvLStuicYR
YgS9MH261tWJKJm5+V2MxnOOI0103+Uey+xVqwSnLlV+qmasxwDCMU5ae+SK7e7f
cXIkNZwvDph1zunekHg+jd64GN3GYswXVcRighWP0n7Lr+0tGPN7SY5pvZIjZLv/
sdroyrqAxytTYP32hypIUgsToVvJr7zXD09LGdsgOCKVwFVn8yl1e4zgGKH3L9Xu
OK2krI90v1MVevibyaNndZ4UDKilF75oE2YYDOFW/BU1lorFAIzk4hh15CfKc8s1
KHRjePfcgQREs/SGK8k2BAmf/JwxFN1/Ro5dl7MvKn07ZYqx6QOwUoMhgxspIntN
9TlFw6elu1RSwu2BFts9wvoHO1tr7GZBa1cVkNF8qV1rzaGVY68aLDvvHGdffD6W
JgX+BCfr6vcN7R4izak1RxzAoqDrRxS0vWoC1vVsPqeIIZydSxpYDquaFnbZm+Wc
MRuh5gpQ2PzTXuMLeBB+ig6UnzsAO3x+3yIG/l5ZmmYxJbMFBKU=
=zE/i
-----END PGP SIGNATURE-----
Merge 4.19.106 into android-4.19
Changes in 4.19.106
core: Don't skip generic XDP program execution for cloned SKBs
enic: prevent waking up stopped tx queues over watchdog reset
net/smc: fix leak of kernel memory to user space
net: dsa: tag_qca: Make sure there is headroom for tag
net/sched: matchall: add missing validation of TCA_MATCHALL_FLAGS
net/sched: flower: add missing validation of TCA_FLOWER_FLAGS
Revert "KVM: nVMX: Use correct root level for nested EPT shadow page tables"
Revert "KVM: VMX: Add non-canonical check on writes to RTIT address MSRs"
KVM: nVMX: Use correct root level for nested EPT shadow page tables
drm/gma500: Fixup fbdev stolen size usage evaluation
cpu/hotplug, stop_machine: Fix stop_machine vs hotplug order
brcmfmac: Fix use after free in brcmf_sdio_readframes()
leds: pca963x: Fix open-drain initialization
ext4: fix ext4_dax_read/write inode locking sequence for IOCB_NOWAIT
ALSA: ctl: allow TLV read operation for callback type of element in locked case
gianfar: Fix TX timestamping with a stacked DSA driver
pinctrl: sh-pfc: sh7264: Fix CAN function GPIOs
pxa168fb: Fix the function used to release some memory in an error handling path
media: i2c: mt9v032: fix enum mbus codes and frame sizes
powerpc/powernv/iov: Ensure the pdn for VFs always contains a valid PE number
gpio: gpio-grgpio: fix possible sleep-in-atomic-context bugs in grgpio_irq_map/unmap()
iommu/vt-d: Fix off-by-one in PASID allocation
char/random: silence a lockdep splat with printk()
media: sti: bdisp: fix a possible sleep-in-atomic-context bug in bdisp_device_run()
pinctrl: baytrail: Do not clear IRQ flags on direct-irq enabled pins
efi/x86: Map the entire EFI vendor string before copying it
MIPS: Loongson: Fix potential NULL dereference in loongson3_platform_init()
sparc: Add .exit.data section.
uio: fix a sleep-in-atomic-context bug in uio_dmem_genirq_irqcontrol()
usb: gadget: udc: fix possible sleep-in-atomic-context bugs in gr_probe()
usb: dwc2: Fix IN FIFO allocation
clocksource/drivers/bcm2835_timer: Fix memory leak of timer
kselftest: Minimise dependency of get_size on C library interfaces
jbd2: clear JBD2_ABORT flag before journal_reset to update log tail info when load journal
x86/sysfb: Fix check for bad VRAM size
pwm: omap-dmtimer: Simplify error handling
s390/pci: Fix possible deadlock in recover_store()
powerpc/iov: Move VF pdev fixup into pcibios_fixup_iov()
tracing: Fix tracing_stat return values in error handling paths
tracing: Fix very unlikely race of registering two stat tracers
ARM: 8952/1: Disable kmemleak on XIP kernels
ext4, jbd2: ensure panic when aborting with zero errno
ath10k: Correct the DMA direction for management tx buffers
drm/amd/display: Retrain dongles when SINK_COUNT becomes non-zero
nbd: add a flush_workqueue in nbd_start_device
KVM: s390: ENOTSUPP -> EOPNOTSUPP fixups
kconfig: fix broken dependency in randconfig-generated .config
clk: qcom: rcg2: Don't crash if our parent can't be found; return an error
drm/amdgpu: remove 4 set but not used variable in amdgpu_atombios_get_connector_info_from_object_table
drm/amdgpu: Ensure ret is always initialized when using SOC15_WAIT_ON_RREG
regulator: rk808: Lower log level on optional GPIOs being not available
net/wan/fsl_ucc_hdlc: reject muram offsets above 64K
NFC: port100: Convert cpu_to_le16(le16_to_cpu(E1) + E2) to use le16_add_cpu().
selinux: fall back to ref-walk if audit is required
arm64: dts: allwinner: H6: Add PMU mode
arm: dts: allwinner: H3: Add PMU node
selinux: ensure we cleanup the internal AVC counters on error in avc_insert()
arm64: dts: qcom: msm8996: Disable USB2 PHY suspend by core
ARM: dts: imx6: rdu2: Disable WP for USDHC2 and USDHC3
ARM: dts: imx6: rdu2: Limit USBH1 to Full Speed
PCI: iproc: Apply quirk_paxc_bridge() for module as well as built-in
media: cx23885: Add support for AVerMedia CE310B
PCI: Add generic quirk for increasing D3hot delay
PCI: Increase D3 delay for AMD Ryzen5/7 XHCI controllers
media: v4l2-device.h: Explicitly compare grp{id,mask} to zero in v4l2_device macros
reiserfs: Fix spurious unlock in reiserfs_fill_super() error handling
r8169: check that Realtek PHY driver module is loaded
fore200e: Fix incorrect checks of NULL pointer dereference
netfilter: nft_tunnel: add the missing ERSPAN_VERSION nla_policy
ALSA: usx2y: Adjust indentation in snd_usX2Y_hwdep_dsp_status
b43legacy: Fix -Wcast-function-type
ipw2x00: Fix -Wcast-function-type
iwlegacy: Fix -Wcast-function-type
rtlwifi: rtl_pci: Fix -Wcast-function-type
orinoco: avoid assertion in case of NULL pointer
ACPICA: Disassembler: create buffer fields in ACPI_PARSE_LOAD_PASS1
scsi: ufs: Complete pending requests in host reset and restore path
scsi: aic7xxx: Adjust indentation in ahc_find_syncrate
drm/mediatek: handle events when enabling/disabling crtc
ARM: dts: r8a7779: Add device node for ARM global timer
selinux: ensure we cleanup the internal AVC counters on error in avc_update()
dmaengine: Store module owner in dma_device struct
dmaengine: imx-sdma: Fix memory leak
crypto: chtls - Fixed memory leak
x86/vdso: Provide missing include file
PM / devfreq: rk3399_dmc: Add COMPILE_TEST and HAVE_ARM_SMCCC dependency
pinctrl: sh-pfc: sh7269: Fix CAN function GPIOs
reset: uniphier: Add SCSSI reset control for each channel
RDMA/rxe: Fix error type of mmap_offset
clk: sunxi-ng: add mux and pll notifiers for A64 CPU clock
ALSA: sh: Fix unused variable warnings
clk: uniphier: Add SCSSI clock gate for each channel
ALSA: sh: Fix compile warning wrt const
tools lib api fs: Fix gcc9 stringop-truncation compilation error
ACPI: button: Add DMI quirk for Razer Blade Stealth 13 late 2019 lid switch
mlx5: work around high stack usage with gcc
drm: remove the newline for CRC source name.
ARM: dts: stm32: Add power-supply for DSI panel on stm32f469-disco
usbip: Fix unsafe unaligned pointer usage
udf: Fix free space reporting for metadata and virtual partitions
staging: rtl8188: avoid excessive stack usage
IB/hfi1: Add software counter for ctxt0 seq drop
soc/tegra: fuse: Correct straps' address for older Tegra124 device trees
efi/x86: Don't panic or BUG() on non-critical error conditions
rcu: Use WRITE_ONCE() for assignments to ->pprev for hlist_nulls
Input: edt-ft5x06 - work around first register access error
x86/nmi: Remove irq_work from the long duration NMI handler
wan: ixp4xx_hss: fix compile-testing on 64-bit
ASoC: atmel: fix build error with CONFIG_SND_ATMEL_SOC_DMA=m
tty: synclinkmp: Adjust indentation in several functions
tty: synclink_gt: Adjust indentation in several functions
visorbus: fix uninitialized variable access
driver core: platform: Prevent resouce overflow from causing infinite loops
driver core: Print device when resources present in really_probe()
bpf: Return -EBADRQC for invalid map type in __bpf_tx_xdp_map
vme: bridges: reduce stack usage
drm/nouveau/secboot/gm20b: initialize pointer in gm20b_secboot_new()
drm/nouveau/gr/gk20a,gm200-: add terminators to method lists read from fw
drm/nouveau: Fix copy-paste error in nouveau_fence_wait_uevent_handler
drm/nouveau/drm/ttm: Remove set but not used variable 'mem'
drm/nouveau/fault/gv100-: fix memory leak on module unload
drm/vmwgfx: prevent memory leak in vmw_cmdbuf_res_add
usb: musb: omap2430: Get rid of musb .set_vbus for omap2430 glue
iommu/arm-smmu-v3: Use WRITE_ONCE() when changing validity of an STE
f2fs: set I_LINKABLE early to avoid wrong access by vfs
f2fs: free sysfs kobject
scsi: iscsi: Don't destroy session if there are outstanding connections
arm64: fix alternatives with LLVM's integrated assembler
drm/amd/display: fixup DML dependencies
watchdog/softlockup: Enforce that timestamp is valid on boot
f2fs: fix memleak of kobject
x86/mm: Fix NX bit clearing issue in kernel_map_pages_in_pgd
pwm: omap-dmtimer: Remove PWM chip in .remove before making it unfunctional
cmd64x: potential buffer overflow in cmd64x_program_timings()
ide: serverworks: potential overflow in svwks_set_pio_mode()
pwm: Remove set but not set variable 'pwm'
btrfs: fix possible NULL-pointer dereference in integrity checks
btrfs: safely advance counter when looking up bio csums
btrfs: device stats, log when stats are zeroed
module: avoid setting info->name early in case we can fall back to info->mod->name
remoteproc: Initialize rproc_class before use
irqchip/mbigen: Set driver .suppress_bind_attrs to avoid remove problems
ALSA: hda/hdmi - add retry logic to parse_intel_hdmi()
kbuild: use -S instead of -E for precise cc-option test in Kconfig
x86/decoder: Add TEST opcode to Group3-2
s390: adjust -mpacked-stack support check for clang 10
s390/ftrace: generate traced function stack frame
driver core: platform: fix u32 greater or equal to zero comparison
ALSA: hda - Add docking station support for Lenovo Thinkpad T420s
drm/nouveau/mmu: fix comptag memory leak
powerpc/sriov: Remove VF eeh_dev state when disabling SR-IOV
bcache: cached_dev_free needs to put the sb page
iommu/vt-d: Remove unnecessary WARN_ON_ONCE()
selftests: bpf: Reset global state between reuseport test runs
jbd2: switch to use jbd2_journal_abort() when failed to submit the commit record
jbd2: make sure ESHUTDOWN to be recorded in the journal superblock
ARM: 8951/1: Fix Kexec compilation issue.
hostap: Adjust indentation in prism2_hostapd_add_sta
iwlegacy: ensure loop counter addr does not wrap and cause an infinite loop
cifs: fix NULL dereference in match_prepath
bpf: map_seq_next should always increase position index
ceph: check availability of mds cluster on mount after wait timeout
rbd: work around -Wuninitialized warning
irqchip/gic-v3: Only provision redistributors that are enabled in ACPI
drm/nouveau/disp/nv50-: prevent oops when no channel method map provided
ftrace: fpid_next() should increase position index
trigger_next should increase position index
radeon: insert 10ms sleep in dce5_crtc_load_lut
ocfs2: fix a NULL pointer dereference when call ocfs2_update_inode_fsync_trans()
lib/scatterlist.c: adjust indentation in __sg_alloc_table
reiserfs: prevent NULL pointer dereference in reiserfs_insert_item()
bcache: explicity type cast in bset_bkey_last()
irqchip/gic-v3-its: Reference to its_invall_cmd descriptor when building INVALL
iwlwifi: mvm: Fix thermal zone registration
microblaze: Prevent the overflow of the start
brd: check and limit max_part par
drm/amdgpu/smu10: fix smu10_get_clock_by_type_with_latency
drm/amdgpu/smu10: fix smu10_get_clock_by_type_with_voltage
NFS: Fix memory leaks
help_next should increase position index
cifs: log warning message (once) if out of disk space
virtio_balloon: prevent pfn array overflow
mlxsw: spectrum_dpipe: Add missing error path
drm/amdgpu/display: handle multiple numbers of fclks in dcn_calcs.c (v2)
Linux 4.19.106
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: Ia1032b50dd82b42e13973120dcbf94ae7b864648
This commit is contained in:
commit
4dc4199770
2
Makefile
2
Makefile
|
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 19
|
||||
SUBLEVEL = 105
|
||||
SUBLEVEL = 106
|
||||
EXTRAVERSION =
|
||||
NAME = "People's Front"
|
||||
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ config ARM
|
|||
select HAVE_EBPF_JIT if !CPU_ENDIAN_BE32
|
||||
select HAVE_CONTEXT_TRACKING
|
||||
select HAVE_C_RECORDMCOUNT
|
||||
select HAVE_DEBUG_KMEMLEAK
|
||||
select HAVE_DEBUG_KMEMLEAK if !XIP_KERNEL
|
||||
select HAVE_DMA_CONTIGUOUS if MMU
|
||||
select HAVE_DYNAMIC_FTRACE if (!XIP_KERNEL) && !CPU_ENDIAN_BE32 && MMU
|
||||
select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
|
||||
|
|
@ -2008,7 +2008,7 @@ config XIP_DEFLATED_DATA
|
|||
config KEXEC
|
||||
bool "Kexec system call (EXPERIMENTAL)"
|
||||
depends on (!SMP || PM_SLEEP_SMP)
|
||||
depends on !CPU_V7M
|
||||
depends on MMU
|
||||
select KEXEC_CORE
|
||||
help
|
||||
kexec is a system call that implements the ability to shutdown your
|
||||
|
|
|
|||
|
|
@ -657,7 +657,7 @@ &usdhc2 {
|
|||
pinctrl-0 = <&pinctrl_usdhc2>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&gpio2 2 GPIO_ACTIVE_LOW>;
|
||||
wp-gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>;
|
||||
disable-wp;
|
||||
vmmc-supply = <®_3p3v_sd>;
|
||||
vqmmc-supply = <®_3p3v>;
|
||||
no-1-8-v;
|
||||
|
|
@ -670,7 +670,7 @@ &usdhc3 {
|
|||
pinctrl-0 = <&pinctrl_usdhc3>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&gpio2 0 GPIO_ACTIVE_LOW>;
|
||||
wp-gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
|
||||
disable-wp;
|
||||
vmmc-supply = <®_3p3v_sd>;
|
||||
vqmmc-supply = <®_3p3v>;
|
||||
no-1-8-v;
|
||||
|
|
@ -804,6 +804,7 @@ switchphy4: switchphy@4 {
|
|||
&usbh1 {
|
||||
vbus-supply = <®_5p0v_main>;
|
||||
disable-over-current;
|
||||
maximum-speed = "full-speed";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
|
@ -1081,7 +1082,6 @@ MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
|
|||
MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
|
||||
MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
|
||||
MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059
|
||||
MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x40010040
|
||||
MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x40010040
|
||||
>;
|
||||
};
|
||||
|
|
@ -1094,7 +1094,6 @@ MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
|
|||
MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
|
||||
MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
|
||||
MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
|
||||
MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x40010040
|
||||
MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x40010040
|
||||
|
||||
>;
|
||||
|
|
|
|||
|
|
@ -68,6 +68,14 @@ gic: interrupt-controller@f0001000 {
|
|||
<0xf0000100 0x100>;
|
||||
};
|
||||
|
||||
timer@f0000200 {
|
||||
compatible = "arm,cortex-a9-global-timer";
|
||||
reg = <0xf0000200 0x100>;
|
||||
interrupts = <GIC_PPI 11
|
||||
(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>;
|
||||
clocks = <&cpg_clocks R8A7779_CLK_ZS>;
|
||||
};
|
||||
|
||||
timer@f0000600 {
|
||||
compatible = "arm,cortex-a9-twd-timer";
|
||||
reg = <0xf0000600 0x20>;
|
||||
|
|
|
|||
|
|
@ -75,6 +75,13 @@ mmc_vcard: mmc_vcard {
|
|||
regulator-max-microvolt = <3300000>;
|
||||
};
|
||||
|
||||
vdd_dsi: vdd-dsi {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vdd_dsi";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
};
|
||||
|
||||
soc {
|
||||
dma-ranges = <0xc0000000 0x0 0x10000000>;
|
||||
};
|
||||
|
|
@ -154,6 +161,7 @@ panel-dsi@0 {
|
|||
compatible = "orisetech,otm8009a";
|
||||
reg = <0>; /* dsi virtual channel (0..3) */
|
||||
reset-gpios = <&gpioh 7 GPIO_ACTIVE_LOW>;
|
||||
power-supply = <&vdd_dsi>;
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ cpu0: cpu@0 {
|
|||
#cooling-cells = <2>;
|
||||
};
|
||||
|
||||
cpu@1 {
|
||||
cpu1: cpu@1 {
|
||||
compatible = "arm,cortex-a7";
|
||||
device_type = "cpu";
|
||||
reg = <1>;
|
||||
|
|
@ -90,7 +90,7 @@ cpu@1 {
|
|||
#cooling-cells = <2>;
|
||||
};
|
||||
|
||||
cpu@2 {
|
||||
cpu2: cpu@2 {
|
||||
compatible = "arm,cortex-a7";
|
||||
device_type = "cpu";
|
||||
reg = <2>;
|
||||
|
|
@ -100,7 +100,7 @@ cpu@2 {
|
|||
#cooling-cells = <2>;
|
||||
};
|
||||
|
||||
cpu@3 {
|
||||
cpu3: cpu@3 {
|
||||
compatible = "arm,cortex-a7";
|
||||
device_type = "cpu";
|
||||
reg = <3>;
|
||||
|
|
@ -111,6 +111,15 @@ cpu@3 {
|
|||
};
|
||||
};
|
||||
|
||||
pmu {
|
||||
compatible = "arm,cortex-a7-pmu";
|
||||
interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
|
||||
};
|
||||
|
||||
timer {
|
||||
compatible = "arm,armv7-timer";
|
||||
interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
|
||||
|
|
|
|||
|
|
@ -69,6 +69,16 @@ osc32k: osc32k_clk {
|
|||
clock-output-names = "osc32k";
|
||||
};
|
||||
|
||||
pmu {
|
||||
compatible = "arm,cortex-a53-pmu",
|
||||
"arm,armv8-pmuv3";
|
||||
interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
|
||||
};
|
||||
|
||||
psci {
|
||||
compatible = "arm,psci-0.2";
|
||||
method = "smc";
|
||||
|
|
|
|||
|
|
@ -918,6 +918,8 @@ dwc3@7600000 {
|
|||
interrupts = <0 138 IRQ_TYPE_LEVEL_HIGH>;
|
||||
phys = <&hsusb_phy2>;
|
||||
phy-names = "usb2-phy";
|
||||
snps,dis_u2_susphy_quirk;
|
||||
snps,dis_enblslpm_quirk;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -947,6 +949,8 @@ dwc3@6a00000 {
|
|||
interrupts = <0 131 IRQ_TYPE_LEVEL_HIGH>;
|
||||
phys = <&hsusb_phy1>, <&ssusb_phy_0>;
|
||||
phy-names = "usb2-phy", "usb3-phy";
|
||||
snps,dis_u2_susphy_quirk;
|
||||
snps,dis_enblslpm_quirk;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ static inline void apply_alternatives_module(void *start, size_t length) { }
|
|||
" .byte 662b-661b\n" /* source len */ \
|
||||
" .byte 664f-663f\n" /* replacement len */
|
||||
|
||||
#define ALTINSTR_ENTRY_CB(feature,cb) \
|
||||
#define ALTINSTR_ENTRY_CB(feature, cb) \
|
||||
" .word 661b - .\n" /* label */ \
|
||||
" .word " __stringify(cb) "- .\n" /* callback */ \
|
||||
" .hword " __stringify(feature) "\n" /* feature bit */ \
|
||||
|
|
@ -88,7 +88,7 @@ static inline void apply_alternatives_module(void *start, size_t length) { }
|
|||
oldinstr "\n" \
|
||||
"662:\n" \
|
||||
".pushsection .altinstructions,\"a\"\n" \
|
||||
ALTINSTR_ENTRY_CB(feature,cb) \
|
||||
ALTINSTR_ENTRY_CB(feature, cb) \
|
||||
".popsection\n" \
|
||||
"663:\n\t" \
|
||||
"664:\n\t" \
|
||||
|
|
|
|||
|
|
@ -92,7 +92,8 @@ static inline void __disable_dcache_nomsr(void)
|
|||
#define CACHE_LOOP_LIMITS(start, end, cache_line_length, cache_size) \
|
||||
do { \
|
||||
int align = ~(cache_line_length - 1); \
|
||||
end = min(start + cache_size, end); \
|
||||
if (start < UINT_MAX - cache_size) \
|
||||
end = min(start + cache_size, end); \
|
||||
start &= align; \
|
||||
} while (0)
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,9 @@ static int __init loongson3_platform_init(void)
|
|||
continue;
|
||||
|
||||
pdev = kzalloc(sizeof(struct platform_device), GFP_KERNEL);
|
||||
if (!pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
pdev->name = loongson_sysconf.sensors[i].name;
|
||||
pdev->id = loongson_sysconf.sensors[i].id;
|
||||
pdev->dev.platform_data = &loongson_sysconf.sensors[i];
|
||||
|
|
|
|||
|
|
@ -554,12 +554,6 @@ static void *eeh_rmv_device(struct eeh_dev *edev, void *userdata)
|
|||
|
||||
pci_iov_remove_virtfn(edev->physfn, pdn->vf_index);
|
||||
edev->pdev = NULL;
|
||||
|
||||
/*
|
||||
* We have to set the VF PE number to invalid one, which is
|
||||
* required to plug the VF successfully.
|
||||
*/
|
||||
pdn->pe_number = IODA_INVALID_PE;
|
||||
#endif
|
||||
if (rmv_data)
|
||||
list_add(&edev->rmv_list, &rmv_data->edev_list);
|
||||
|
|
|
|||
|
|
@ -257,9 +257,22 @@ void remove_dev_pci_data(struct pci_dev *pdev)
|
|||
continue;
|
||||
|
||||
#ifdef CONFIG_EEH
|
||||
/* Release EEH device for the VF */
|
||||
/*
|
||||
* Release EEH state for this VF. The PCI core
|
||||
* has already torn down the pci_dev for this VF, but
|
||||
* we're responsible to removing the eeh_dev since it
|
||||
* has the same lifetime as the pci_dn that spawned it.
|
||||
*/
|
||||
edev = pdn_to_eeh_dev(pdn);
|
||||
if (edev) {
|
||||
/*
|
||||
* We allocate pci_dn's for the totalvfs count,
|
||||
* but only only the vfs that were activated
|
||||
* have a configured PE.
|
||||
*/
|
||||
if (edev->pe)
|
||||
eeh_rmv_from_parent_pe(edev);
|
||||
|
||||
pdn->edev = NULL;
|
||||
kfree(edev);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1552,6 +1552,10 @@ static void pnv_ioda_setup_vf_PE(struct pci_dev *pdev, u16 num_vfs)
|
|||
|
||||
/* Reserve PE for each VF */
|
||||
for (vf_index = 0; vf_index < num_vfs; vf_index++) {
|
||||
int vf_devfn = pci_iov_virtfn_devfn(pdev, vf_index);
|
||||
int vf_bus = pci_iov_virtfn_bus(pdev, vf_index);
|
||||
struct pci_dn *vf_pdn;
|
||||
|
||||
if (pdn->m64_single_mode)
|
||||
pe_num = pdn->pe_num_map[vf_index];
|
||||
else
|
||||
|
|
@ -1564,13 +1568,11 @@ static void pnv_ioda_setup_vf_PE(struct pci_dev *pdev, u16 num_vfs)
|
|||
pe->pbus = NULL;
|
||||
pe->parent_dev = pdev;
|
||||
pe->mve_number = -1;
|
||||
pe->rid = (pci_iov_virtfn_bus(pdev, vf_index) << 8) |
|
||||
pci_iov_virtfn_devfn(pdev, vf_index);
|
||||
pe->rid = (vf_bus << 8) | vf_devfn;
|
||||
|
||||
pe_info(pe, "VF %04d:%02d:%02d.%d associated with PE#%x\n",
|
||||
hose->global_number, pdev->bus->number,
|
||||
PCI_SLOT(pci_iov_virtfn_devfn(pdev, vf_index)),
|
||||
PCI_FUNC(pci_iov_virtfn_devfn(pdev, vf_index)), pe_num);
|
||||
PCI_SLOT(vf_devfn), PCI_FUNC(vf_devfn), pe_num);
|
||||
|
||||
if (pnv_ioda_configure_pe(phb, pe)) {
|
||||
/* XXX What do we do here ? */
|
||||
|
|
@ -1584,6 +1586,15 @@ static void pnv_ioda_setup_vf_PE(struct pci_dev *pdev, u16 num_vfs)
|
|||
list_add_tail(&pe->list, &phb->ioda.pe_list);
|
||||
mutex_unlock(&phb->ioda.pe_list_mutex);
|
||||
|
||||
/* associate this pe to it's pdn */
|
||||
list_for_each_entry(vf_pdn, &pdn->parent->child_list, list) {
|
||||
if (vf_pdn->busno == vf_bus &&
|
||||
vf_pdn->devfn == vf_devfn) {
|
||||
vf_pdn->pe_number = pe_num;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
pnv_pci_ioda2_setup_dma_pe(phb, pe);
|
||||
}
|
||||
}
|
||||
|
|
@ -3004,9 +3015,6 @@ static void pnv_pci_ioda_fixup_iov_resources(struct pci_dev *pdev)
|
|||
struct pci_dn *pdn;
|
||||
int mul, total_vfs;
|
||||
|
||||
if (!pdev->is_physfn || pci_dev_is_added(pdev))
|
||||
return;
|
||||
|
||||
pdn = pci_get_pdn(pdev);
|
||||
pdn->vfs_expanded = 0;
|
||||
pdn->m64_single_mode = false;
|
||||
|
|
@ -3081,6 +3089,30 @@ static void pnv_pci_ioda_fixup_iov_resources(struct pci_dev *pdev)
|
|||
res->end = res->start - 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void pnv_pci_ioda_fixup_iov(struct pci_dev *pdev)
|
||||
{
|
||||
if (WARN_ON(pci_dev_is_added(pdev)))
|
||||
return;
|
||||
|
||||
if (pdev->is_virtfn) {
|
||||
struct pnv_ioda_pe *pe = pnv_ioda_get_pe(pdev);
|
||||
|
||||
/*
|
||||
* VF PEs are single-device PEs so their pdev pointer needs to
|
||||
* be set. The pdev doesn't exist when the PE is allocated (in
|
||||
* (pcibios_sriov_enable()) so we fix it up here.
|
||||
*/
|
||||
pe->pdev = pdev;
|
||||
WARN_ON(!(pe->flags & PNV_IODA_PE_VF));
|
||||
} else if (pdev->is_physfn) {
|
||||
/*
|
||||
* For PFs adjust their allocated IOV resources to match what
|
||||
* the PHB can support using it's M64 BAR table.
|
||||
*/
|
||||
pnv_pci_ioda_fixup_iov_resources(pdev);
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_PCI_IOV */
|
||||
|
||||
static void pnv_ioda_setup_pe_res(struct pnv_ioda_pe *pe,
|
||||
|
|
@ -3974,7 +4006,7 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np,
|
|||
ppc_md.pcibios_default_alignment = pnv_pci_default_alignment;
|
||||
|
||||
#ifdef CONFIG_PCI_IOV
|
||||
ppc_md.pcibios_fixup_sriov = pnv_pci_ioda_fixup_iov_resources;
|
||||
ppc_md.pcibios_fixup_sriov = pnv_pci_ioda_fixup_iov;
|
||||
ppc_md.pcibios_iov_resource_alignment = pnv_pci_iov_resource_alignment;
|
||||
ppc_md.pcibios_sriov_enable = pnv_pcibios_sriov_enable;
|
||||
ppc_md.pcibios_sriov_disable = pnv_pcibios_sriov_disable;
|
||||
|
|
|
|||
|
|
@ -820,24 +820,6 @@ void pnv_pci_dma_dev_setup(struct pci_dev *pdev)
|
|||
{
|
||||
struct pci_controller *hose = pci_bus_to_host(pdev->bus);
|
||||
struct pnv_phb *phb = hose->private_data;
|
||||
#ifdef CONFIG_PCI_IOV
|
||||
struct pnv_ioda_pe *pe;
|
||||
struct pci_dn *pdn;
|
||||
|
||||
/* Fix the VF pdn PE number */
|
||||
if (pdev->is_virtfn) {
|
||||
pdn = pci_get_pdn(pdev);
|
||||
WARN_ON(pdn->pe_number != IODA_INVALID_PE);
|
||||
list_for_each_entry(pe, &phb->ioda.pe_list, list) {
|
||||
if (pe->rid == ((pdev->bus->number << 8) |
|
||||
(pdev->devfn & 0xff))) {
|
||||
pdn->pe_number = pe->pe_number;
|
||||
pe->pdev = pdev;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_PCI_IOV */
|
||||
|
||||
if (phb && phb->dma_dev_setup)
|
||||
phb->dma_dev_setup(phb, pdev);
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ cflags-y += -Wa,-I$(srctree)/arch/$(ARCH)/include
|
|||
#
|
||||
cflags-$(CONFIG_FRAME_POINTER) += -fno-optimize-sibling-calls
|
||||
|
||||
ifeq ($(call cc-option-yn,-mpacked-stack),y)
|
||||
ifeq ($(call cc-option-yn,-mpacked-stack -mbackchain -msoft-float),y)
|
||||
cflags-$(CONFIG_PACK_STACK) += -mpacked-stack -D__PACK_STACK
|
||||
aflags-$(CONFIG_PACK_STACK) += -D__PACK_STACK
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -25,6 +25,12 @@ ENTRY(ftrace_stub)
|
|||
#define STACK_PTREGS (STACK_FRAME_OVERHEAD)
|
||||
#define STACK_PTREGS_GPRS (STACK_PTREGS + __PT_GPRS)
|
||||
#define STACK_PTREGS_PSW (STACK_PTREGS + __PT_PSW)
|
||||
#ifdef __PACK_STACK
|
||||
/* allocate just enough for r14, r15 and backchain */
|
||||
#define TRACED_FUNC_FRAME_SIZE 24
|
||||
#else
|
||||
#define TRACED_FUNC_FRAME_SIZE STACK_FRAME_OVERHEAD
|
||||
#endif
|
||||
|
||||
ENTRY(_mcount)
|
||||
BR_EX %r14
|
||||
|
|
@ -38,9 +44,16 @@ ENTRY(ftrace_caller)
|
|||
#if !(defined(CC_USING_HOTPATCH) || defined(CC_USING_NOP_MCOUNT))
|
||||
aghi %r0,MCOUNT_RETURN_FIXUP
|
||||
#endif
|
||||
aghi %r15,-STACK_FRAME_SIZE
|
||||
# allocate stack frame for ftrace_caller to contain traced function
|
||||
aghi %r15,-TRACED_FUNC_FRAME_SIZE
|
||||
stg %r1,__SF_BACKCHAIN(%r15)
|
||||
stg %r0,(__SF_GPRS+8*8)(%r15)
|
||||
stg %r15,(__SF_GPRS+9*8)(%r15)
|
||||
# allocate pt_regs and stack frame for ftrace_trace_function
|
||||
aghi %r15,-STACK_FRAME_SIZE
|
||||
stg %r1,(STACK_PTREGS_GPRS+15*8)(%r15)
|
||||
aghi %r1,-TRACED_FUNC_FRAME_SIZE
|
||||
stg %r1,__SF_BACKCHAIN(%r15)
|
||||
stg %r0,(STACK_PTREGS_PSW+8)(%r15)
|
||||
stmg %r2,%r14,(STACK_PTREGS_GPRS+2*8)(%r15)
|
||||
#ifdef CONFIG_HAVE_MARCH_Z196_FEATURES
|
||||
|
|
|
|||
|
|
@ -2109,7 +2109,7 @@ static int flic_ais_mode_get_all(struct kvm *kvm, struct kvm_device_attr *attr)
|
|||
return -EINVAL;
|
||||
|
||||
if (!test_kvm_facility(kvm, 72))
|
||||
return -ENOTSUPP;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
mutex_lock(&fi->ais_lock);
|
||||
ais.simm = fi->simm;
|
||||
|
|
@ -2412,7 +2412,7 @@ static int modify_ais_mode(struct kvm *kvm, struct kvm_device_attr *attr)
|
|||
int ret = 0;
|
||||
|
||||
if (!test_kvm_facility(kvm, 72))
|
||||
return -ENOTSUPP;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (copy_from_user(&req, (void __user *)attr->addr, sizeof(req)))
|
||||
return -EFAULT;
|
||||
|
|
@ -2492,7 +2492,7 @@ static int flic_ais_mode_set_all(struct kvm *kvm, struct kvm_device_attr *attr)
|
|||
struct kvm_s390_ais_all ais;
|
||||
|
||||
if (!test_kvm_facility(kvm, 72))
|
||||
return -ENOTSUPP;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (copy_from_user(&ais, (void __user *)attr->addr, sizeof(ais)))
|
||||
return -EFAULT;
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@
|
|||
#include <linux/stat.h>
|
||||
#include <linux/pci.h>
|
||||
|
||||
#include "../../../drivers/pci/pci.h"
|
||||
|
||||
#include <asm/sclp.h>
|
||||
|
||||
#define zpci_attr(name, fmt, member) \
|
||||
|
|
@ -40,31 +42,50 @@ zpci_attr(segment3, "0x%02x\n", pfip[3]);
|
|||
static ssize_t recover_store(struct device *dev, struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct kernfs_node *kn;
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
struct zpci_dev *zdev = to_zpci(pdev);
|
||||
int ret;
|
||||
int ret = 0;
|
||||
|
||||
if (!device_remove_file_self(dev, attr))
|
||||
return count;
|
||||
/* Can't use device_remove_self() here as that would lead us to lock
|
||||
* the pci_rescan_remove_lock while holding the device' kernfs lock.
|
||||
* This would create a possible deadlock with disable_slot() which is
|
||||
* not directly protected by the device' kernfs lock but takes it
|
||||
* during the device removal which happens under
|
||||
* pci_rescan_remove_lock.
|
||||
*
|
||||
* This is analogous to sdev_store_delete() in
|
||||
* drivers/scsi/scsi_sysfs.c
|
||||
*/
|
||||
kn = sysfs_break_active_protection(&dev->kobj, &attr->attr);
|
||||
WARN_ON_ONCE(!kn);
|
||||
/* device_remove_file() serializes concurrent calls ignoring all but
|
||||
* the first
|
||||
*/
|
||||
device_remove_file(dev, attr);
|
||||
|
||||
/* A concurrent call to recover_store() may slip between
|
||||
* sysfs_break_active_protection() and the sysfs file removal.
|
||||
* Once it unblocks from pci_lock_rescan_remove() the original pdev
|
||||
* will already be removed.
|
||||
*/
|
||||
pci_lock_rescan_remove();
|
||||
pci_stop_and_remove_bus_device(pdev);
|
||||
ret = zpci_disable_device(zdev);
|
||||
if (ret)
|
||||
goto error;
|
||||
if (pci_dev_is_added(pdev)) {
|
||||
pci_stop_and_remove_bus_device(pdev);
|
||||
ret = zpci_disable_device(zdev);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ret = zpci_enable_device(zdev);
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
pci_rescan_bus(zdev->bus);
|
||||
ret = zpci_enable_device(zdev);
|
||||
if (ret)
|
||||
goto out;
|
||||
pci_rescan_bus(zdev->bus);
|
||||
}
|
||||
out:
|
||||
pci_unlock_rescan_remove();
|
||||
|
||||
return count;
|
||||
|
||||
error:
|
||||
pci_unlock_rescan_remove();
|
||||
return ret;
|
||||
if (kn)
|
||||
sysfs_unbreak_active_protection(kn);
|
||||
return ret ? ret : count;
|
||||
}
|
||||
static DEVICE_ATTR_WO(recover);
|
||||
|
||||
|
|
|
|||
|
|
@ -78,8 +78,15 @@ enum {
|
|||
GPIO_FN_WDTOVF,
|
||||
|
||||
/* CAN */
|
||||
GPIO_FN_CTX1, GPIO_FN_CRX1, GPIO_FN_CTX0, GPIO_FN_CTX0_CTX1,
|
||||
GPIO_FN_CRX0, GPIO_FN_CRX0_CRX1, GPIO_FN_CRX0_CRX1_CRX2,
|
||||
GPIO_FN_CTX2, GPIO_FN_CRX2,
|
||||
GPIO_FN_CTX1, GPIO_FN_CRX1,
|
||||
GPIO_FN_CTX0, GPIO_FN_CRX0,
|
||||
GPIO_FN_CTX0_CTX1, GPIO_FN_CRX0_CRX1,
|
||||
GPIO_FN_CTX0_CTX1_CTX2, GPIO_FN_CRX0_CRX1_CRX2,
|
||||
GPIO_FN_CTX2_PJ21, GPIO_FN_CRX2_PJ20,
|
||||
GPIO_FN_CTX1_PJ23, GPIO_FN_CRX1_PJ22,
|
||||
GPIO_FN_CTX0_CTX1_PJ23, GPIO_FN_CRX0_CRX1_PJ22,
|
||||
GPIO_FN_CTX0_CTX1_CTX2_PJ21, GPIO_FN_CRX0_CRX1_CRX2_PJ20,
|
||||
|
||||
/* DMAC */
|
||||
GPIO_FN_TEND0, GPIO_FN_DACK0, GPIO_FN_DREQ0,
|
||||
|
|
|
|||
|
|
@ -172,12 +172,14 @@ SECTIONS
|
|||
}
|
||||
PERCPU_SECTION(SMP_CACHE_BYTES)
|
||||
|
||||
#ifdef CONFIG_JUMP_LABEL
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
.exit.text : {
|
||||
EXIT_TEXT
|
||||
}
|
||||
#endif
|
||||
|
||||
.exit.data : {
|
||||
EXIT_DATA
|
||||
}
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
__init_end = .;
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
#include <linux/smp.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mm_types.h>
|
||||
#include <linux/elf.h>
|
||||
|
||||
#include <asm/processor.h>
|
||||
#include <asm/vdso.h>
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ struct nmiaction {
|
|||
struct list_head list;
|
||||
nmi_handler_t handler;
|
||||
u64 max_duration;
|
||||
struct irq_work irq_work;
|
||||
unsigned long flags;
|
||||
const char *name;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -102,18 +102,22 @@ static int __init nmi_warning_debugfs(void)
|
|||
}
|
||||
fs_initcall(nmi_warning_debugfs);
|
||||
|
||||
static void nmi_max_handler(struct irq_work *w)
|
||||
static void nmi_check_duration(struct nmiaction *action, u64 duration)
|
||||
{
|
||||
struct nmiaction *a = container_of(w, struct nmiaction, irq_work);
|
||||
u64 whole_msecs = READ_ONCE(action->max_duration);
|
||||
int remainder_ns, decimal_msecs;
|
||||
u64 whole_msecs = READ_ONCE(a->max_duration);
|
||||
|
||||
if (duration < nmi_longest_ns || duration < action->max_duration)
|
||||
return;
|
||||
|
||||
action->max_duration = duration;
|
||||
|
||||
remainder_ns = do_div(whole_msecs, (1000 * 1000));
|
||||
decimal_msecs = remainder_ns / 1000;
|
||||
|
||||
printk_ratelimited(KERN_INFO
|
||||
"INFO: NMI handler (%ps) took too long to run: %lld.%03d msecs\n",
|
||||
a->handler, whole_msecs, decimal_msecs);
|
||||
action->handler, whole_msecs, decimal_msecs);
|
||||
}
|
||||
|
||||
static int nmi_handle(unsigned int type, struct pt_regs *regs)
|
||||
|
|
@ -140,11 +144,7 @@ static int nmi_handle(unsigned int type, struct pt_regs *regs)
|
|||
delta = sched_clock() - delta;
|
||||
trace_nmi_handler(a->handler, (int)delta, thishandled);
|
||||
|
||||
if (delta < nmi_longest_ns || delta < a->max_duration)
|
||||
continue;
|
||||
|
||||
a->max_duration = delta;
|
||||
irq_work_queue(&a->irq_work);
|
||||
nmi_check_duration(a, delta);
|
||||
}
|
||||
|
||||
rcu_read_unlock();
|
||||
|
|
@ -162,8 +162,6 @@ int __register_nmi_handler(unsigned int type, struct nmiaction *action)
|
|||
if (!action->handler)
|
||||
return -EINVAL;
|
||||
|
||||
init_irq_work(&action->irq_work, nmi_max_handler);
|
||||
|
||||
raw_spin_lock_irqsave(&desc->lock, flags);
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -94,11 +94,11 @@ __init int create_simplefb(const struct screen_info *si,
|
|||
if (si->orig_video_isVGA == VIDEO_TYPE_VLFB)
|
||||
size <<= 16;
|
||||
length = mode->height * mode->stride;
|
||||
length = PAGE_ALIGN(length);
|
||||
if (length > size) {
|
||||
printk(KERN_WARNING "sysfb: VRAM smaller than advertised\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
length = PAGE_ALIGN(length);
|
||||
|
||||
/* setup IORESOURCE_MEM as framebuffer memory */
|
||||
memset(&res, 0, sizeof(res));
|
||||
|
|
|
|||
|
|
@ -5302,6 +5302,9 @@ static void vmx_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0)
|
|||
|
||||
static int get_ept_level(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
/* Nested EPT currently only supports 4-level walks. */
|
||||
if (is_guest_mode(vcpu) && nested_cpu_has_ept(get_vmcs12(vcpu)))
|
||||
return 4;
|
||||
if (cpu_has_vmx_ept_5levels() && (cpuid_maxphyaddr(vcpu) > 48))
|
||||
return 5;
|
||||
return 4;
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -909,7 +909,7 @@ EndTable
|
|||
|
||||
GrpTable: Grp3_2
|
||||
0: TEST Ev,Iz
|
||||
1:
|
||||
1: TEST Ev,Iz
|
||||
2: NOT Ev
|
||||
3: NEG Ev
|
||||
4: MUL rAX,Ev
|
||||
|
|
|
|||
|
|
@ -2126,19 +2126,13 @@ int kernel_map_pages_in_pgd(pgd_t *pgd, u64 pfn, unsigned long address,
|
|||
.pgd = pgd,
|
||||
.numpages = numpages,
|
||||
.mask_set = __pgprot(0),
|
||||
.mask_clr = __pgprot(0),
|
||||
.mask_clr = __pgprot(~page_flags & (_PAGE_NX|_PAGE_RW)),
|
||||
.flags = 0,
|
||||
};
|
||||
|
||||
if (!(__supported_pte_mask & _PAGE_NX))
|
||||
goto out;
|
||||
|
||||
if (!(page_flags & _PAGE_NX))
|
||||
cpa.mask_clr = __pgprot(_PAGE_NX);
|
||||
|
||||
if (!(page_flags & _PAGE_RW))
|
||||
cpa.mask_clr = __pgprot(_PAGE_RW);
|
||||
|
||||
if (!(page_flags & _PAGE_ENC))
|
||||
cpa.mask_clr = pgprot_encrypted(cpa.mask_clr);
|
||||
|
||||
|
|
|
|||
|
|
@ -480,7 +480,6 @@ void __init efi_init(void)
|
|||
efi_char16_t *c16;
|
||||
char vendor[100] = "unknown";
|
||||
int i = 0;
|
||||
void *tmp;
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
if (boot_params.efi_info.efi_systab_hi ||
|
||||
|
|
@ -505,14 +504,16 @@ void __init efi_init(void)
|
|||
/*
|
||||
* Show what we know for posterity
|
||||
*/
|
||||
c16 = tmp = early_memremap(efi.systab->fw_vendor, 2);
|
||||
c16 = early_memremap_ro(efi.systab->fw_vendor,
|
||||
sizeof(vendor) * sizeof(efi_char16_t));
|
||||
if (c16) {
|
||||
for (i = 0; i < sizeof(vendor) - 1 && *c16; ++i)
|
||||
vendor[i] = *c16++;
|
||||
for (i = 0; i < sizeof(vendor) - 1 && c16[i]; ++i)
|
||||
vendor[i] = c16[i];
|
||||
vendor[i] = '\0';
|
||||
} else
|
||||
early_memunmap(c16, sizeof(vendor) * sizeof(efi_char16_t));
|
||||
} else {
|
||||
pr_err("Could not map the firmware vendor!\n");
|
||||
early_memunmap(tmp, 2);
|
||||
}
|
||||
|
||||
pr_info("EFI v%u.%.02u by %s\n",
|
||||
efi.systab->hdr.revision >> 16,
|
||||
|
|
@ -929,16 +930,14 @@ static void __init __efi_enter_virtual_mode(void)
|
|||
|
||||
if (efi_alloc_page_tables()) {
|
||||
pr_err("Failed to allocate EFI page tables\n");
|
||||
clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
|
||||
return;
|
||||
goto err;
|
||||
}
|
||||
|
||||
efi_merge_regions();
|
||||
new_memmap = efi_map_regions(&count, &pg_shift);
|
||||
if (!new_memmap) {
|
||||
pr_err("Error reallocating memory, EFI runtime non-functional!\n");
|
||||
clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
|
||||
return;
|
||||
goto err;
|
||||
}
|
||||
|
||||
pa = __pa(new_memmap);
|
||||
|
|
@ -952,8 +951,7 @@ static void __init __efi_enter_virtual_mode(void)
|
|||
|
||||
if (efi_memmap_init_late(pa, efi.memmap.desc_size * count)) {
|
||||
pr_err("Failed to remap late EFI memory map\n");
|
||||
clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
|
||||
return;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (efi_enabled(EFI_DBG)) {
|
||||
|
|
@ -961,12 +959,11 @@ static void __init __efi_enter_virtual_mode(void)
|
|||
efi_print_memmap();
|
||||
}
|
||||
|
||||
BUG_ON(!efi.systab);
|
||||
if (WARN_ON(!efi.systab))
|
||||
goto err;
|
||||
|
||||
if (efi_setup_page_tables(pa, 1 << pg_shift)) {
|
||||
clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
|
||||
return;
|
||||
}
|
||||
if (efi_setup_page_tables(pa, 1 << pg_shift))
|
||||
goto err;
|
||||
|
||||
efi_sync_low_kernel_mappings();
|
||||
|
||||
|
|
@ -986,9 +983,9 @@ static void __init __efi_enter_virtual_mode(void)
|
|||
}
|
||||
|
||||
if (status != EFI_SUCCESS) {
|
||||
pr_alert("Unable to switch EFI into virtual mode (status=%lx)!\n",
|
||||
status);
|
||||
panic("EFI call to SetVirtualAddressMap() failed!");
|
||||
pr_err("Unable to switch EFI into virtual mode (status=%lx)!\n",
|
||||
status);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -1015,6 +1012,10 @@ static void __init __efi_enter_virtual_mode(void)
|
|||
|
||||
/* clean DUMMY object */
|
||||
efi_delete_dummy_variable();
|
||||
return;
|
||||
|
||||
err:
|
||||
clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
|
||||
}
|
||||
|
||||
void __init efi_enter_virtual_mode(void)
|
||||
|
|
|
|||
|
|
@ -389,11 +389,12 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
|
|||
return 0;
|
||||
|
||||
page = alloc_page(GFP_KERNEL|__GFP_DMA32);
|
||||
if (!page)
|
||||
panic("Unable to allocate EFI runtime stack < 4GB\n");
|
||||
if (!page) {
|
||||
pr_err("Unable to allocate EFI runtime stack < 4GB\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
efi_scratch.phys_stack = virt_to_phys(page_address(page));
|
||||
efi_scratch.phys_stack += PAGE_SIZE; /* stack grows down */
|
||||
efi_scratch.phys_stack = page_to_phys(page + 1); /* stack grows down */
|
||||
|
||||
npages = (_etext - _text) >> PAGE_SHIFT;
|
||||
text = __pa(_text);
|
||||
|
|
|
|||
|
|
@ -244,7 +244,7 @@ acpi_ds_create_buffer_field(union acpi_parse_object *op,
|
|||
* FUNCTION: acpi_ds_get_field_names
|
||||
*
|
||||
* PARAMETERS: info - create_field info structure
|
||||
* ` walk_state - Current method state
|
||||
* walk_state - Current method state
|
||||
* arg - First parser arg for the field name list
|
||||
*
|
||||
* RETURN: Status
|
||||
|
|
|
|||
|
|
@ -412,6 +412,27 @@ acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state)
|
|||
ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op,
|
||||
walk_state));
|
||||
|
||||
/*
|
||||
* Disassembler: handle create field operators here.
|
||||
*
|
||||
* create_buffer_field is a deferred op that is typically processed in load
|
||||
* pass 2. However, disassembly of control method contents walk the parse
|
||||
* tree with ACPI_PARSE_LOAD_PASS1 and AML_CREATE operators are processed
|
||||
* in a later walk. This is a problem when there is a control method that
|
||||
* has the same name as the AML_CREATE object. In this case, any use of the
|
||||
* name segment will be detected as a method call rather than a reference
|
||||
* to a buffer field.
|
||||
*
|
||||
* This earlier creation during disassembly solves this issue by inserting
|
||||
* the named object in the ACPI namespace so that references to this name
|
||||
* would be a name string rather than a method call.
|
||||
*/
|
||||
if ((walk_state->parse_flags & ACPI_PARSE_DISASSEMBLE) &&
|
||||
(walk_state->op_info->flags & AML_CREATE)) {
|
||||
status = acpi_ds_create_buffer_field(op, walk_state);
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
/* We are only interested in opcodes that have an associated name */
|
||||
|
||||
if (!(walk_state->op_info->flags & (AML_NAMED | AML_FIELD))) {
|
||||
|
|
|
|||
|
|
@ -102,6 +102,17 @@ static const struct dmi_system_id lid_blacklst[] = {
|
|||
},
|
||||
.driver_data = (void *)(long)ACPI_BUTTON_LID_INIT_OPEN,
|
||||
},
|
||||
{
|
||||
/*
|
||||
* Razer Blade Stealth 13 late 2019, notification of the LID device
|
||||
* only happens on close, not on open and _LID always returns closed.
|
||||
*/
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Razer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Razer Blade Stealth 13 Late 2019"),
|
||||
},
|
||||
.driver_data = (void *)(long)ACPI_BUTTON_LID_INIT_OPEN,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1504,12 +1504,14 @@ fore200e_open(struct atm_vcc *vcc)
|
|||
static void
|
||||
fore200e_close(struct atm_vcc* vcc)
|
||||
{
|
||||
struct fore200e* fore200e = FORE200E_DEV(vcc->dev);
|
||||
struct fore200e_vcc* fore200e_vcc;
|
||||
struct fore200e* fore200e;
|
||||
struct fore200e_vc_map* vc_map;
|
||||
unsigned long flags;
|
||||
|
||||
ASSERT(vcc);
|
||||
fore200e = FORE200E_DEV(vcc->dev);
|
||||
|
||||
ASSERT((vcc->vpi >= 0) && (vcc->vpi < 1<<FORE200E_VPI_BITS));
|
||||
ASSERT((vcc->vci >= 0) && (vcc->vci < 1<<FORE200E_VCI_BITS));
|
||||
|
||||
|
|
@ -1554,10 +1556,10 @@ fore200e_close(struct atm_vcc* vcc)
|
|||
static int
|
||||
fore200e_send(struct atm_vcc *vcc, struct sk_buff *skb)
|
||||
{
|
||||
struct fore200e* fore200e = FORE200E_DEV(vcc->dev);
|
||||
struct fore200e_vcc* fore200e_vcc = FORE200E_VCC(vcc);
|
||||
struct fore200e* fore200e;
|
||||
struct fore200e_vcc* fore200e_vcc;
|
||||
struct fore200e_vc_map* vc_map;
|
||||
struct host_txq* txq = &fore200e->host_txq;
|
||||
struct host_txq* txq;
|
||||
struct host_txq_entry* entry;
|
||||
struct tpd* tpd;
|
||||
struct tpd_haddr tpd_haddr;
|
||||
|
|
@ -1570,9 +1572,18 @@ fore200e_send(struct atm_vcc *vcc, struct sk_buff *skb)
|
|||
unsigned char* data;
|
||||
unsigned long flags;
|
||||
|
||||
ASSERT(vcc);
|
||||
ASSERT(fore200e);
|
||||
ASSERT(fore200e_vcc);
|
||||
if (!vcc)
|
||||
return -EINVAL;
|
||||
|
||||
fore200e = FORE200E_DEV(vcc->dev);
|
||||
fore200e_vcc = FORE200E_VCC(vcc);
|
||||
|
||||
if (!fore200e)
|
||||
return -EINVAL;
|
||||
|
||||
txq = &fore200e->host_txq;
|
||||
if (!fore200e_vcc)
|
||||
return -EINVAL;
|
||||
|
||||
if (!test_bit(ATM_VF_READY, &vcc->flags)) {
|
||||
DPRINTK(1, "VC %d.%d.%d not ready for tx\n", vcc->itf, vcc->vpi, vcc->vpi);
|
||||
|
|
|
|||
|
|
@ -470,7 +470,10 @@ static int really_probe(struct device *dev, struct device_driver *drv)
|
|||
atomic_inc(&probe_count);
|
||||
pr_debug("bus: '%s': %s: probing driver %s with device %s\n",
|
||||
drv->bus->name, __func__, drv->name, dev_name(dev));
|
||||
WARN_ON(!list_empty(&dev->devres_head));
|
||||
if (!list_empty(&dev->devres_head)) {
|
||||
dev_crit(dev, "Resources present before probing\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
re_probe:
|
||||
dev->driver = drv;
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#include <linux/limits.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/kmemleak.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include "base.h"
|
||||
#include "power/power.h"
|
||||
|
|
@ -67,7 +68,7 @@ void __weak arch_setup_pdev_archdata(struct platform_device *pdev)
|
|||
struct resource *platform_get_resource(struct platform_device *dev,
|
||||
unsigned int type, unsigned int num)
|
||||
{
|
||||
int i;
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < dev->num_resources; i++) {
|
||||
struct resource *r = &dev->resource[i];
|
||||
|
|
@ -162,7 +163,7 @@ struct resource *platform_get_resource_byname(struct platform_device *dev,
|
|||
unsigned int type,
|
||||
const char *name)
|
||||
{
|
||||
int i;
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < dev->num_resources; i++) {
|
||||
struct resource *r = &dev->resource[i];
|
||||
|
|
@ -359,7 +360,8 @@ EXPORT_SYMBOL_GPL(platform_device_add_properties);
|
|||
*/
|
||||
int platform_device_add(struct platform_device *pdev)
|
||||
{
|
||||
int i, ret;
|
||||
u32 i;
|
||||
int ret;
|
||||
|
||||
if (!pdev)
|
||||
return -EINVAL;
|
||||
|
|
@ -425,7 +427,7 @@ int platform_device_add(struct platform_device *pdev)
|
|||
pdev->id = PLATFORM_DEVID_AUTO;
|
||||
}
|
||||
|
||||
while (--i >= 0) {
|
||||
while (i--) {
|
||||
struct resource *r = &pdev->resource[i];
|
||||
if (r->parent)
|
||||
release_resource(r);
|
||||
|
|
@ -446,7 +448,7 @@ EXPORT_SYMBOL_GPL(platform_device_add);
|
|||
*/
|
||||
void platform_device_del(struct platform_device *pdev)
|
||||
{
|
||||
int i;
|
||||
u32 i;
|
||||
|
||||
if (pdev) {
|
||||
device_remove_properties(&pdev->dev);
|
||||
|
|
|
|||
|
|
@ -463,6 +463,25 @@ static struct kobject *brd_probe(dev_t dev, int *part, void *data)
|
|||
return kobj;
|
||||
}
|
||||
|
||||
static inline void brd_check_and_reset_par(void)
|
||||
{
|
||||
if (unlikely(!max_part))
|
||||
max_part = 1;
|
||||
|
||||
/*
|
||||
* make sure 'max_part' can be divided exactly by (1U << MINORBITS),
|
||||
* otherwise, it is possiable to get same dev_t when adding partitions.
|
||||
*/
|
||||
if ((1U << MINORBITS) % max_part != 0)
|
||||
max_part = 1UL << fls(max_part);
|
||||
|
||||
if (max_part > DISK_MAX_PARTS) {
|
||||
pr_info("brd: max_part can't be larger than %d, reset max_part = %d.\n",
|
||||
DISK_MAX_PARTS, DISK_MAX_PARTS);
|
||||
max_part = DISK_MAX_PARTS;
|
||||
}
|
||||
}
|
||||
|
||||
static int __init brd_init(void)
|
||||
{
|
||||
struct brd_device *brd, *next;
|
||||
|
|
@ -486,8 +505,7 @@ static int __init brd_init(void)
|
|||
if (register_blkdev(RAMDISK_MAJOR, "ramdisk"))
|
||||
return -EIO;
|
||||
|
||||
if (unlikely(!max_part))
|
||||
max_part = 1;
|
||||
brd_check_and_reset_par();
|
||||
|
||||
for (i = 0; i < rd_nr; i++) {
|
||||
brd = brd_alloc(i);
|
||||
|
|
|
|||
|
|
@ -1216,6 +1216,16 @@ static int nbd_start_device(struct nbd_device *nbd)
|
|||
args = kzalloc(sizeof(*args), GFP_KERNEL);
|
||||
if (!args) {
|
||||
sock_shutdown(nbd);
|
||||
/*
|
||||
* If num_connections is m (2 < m),
|
||||
* and NO.1 ~ NO.n(1 < n < m) kzallocs are successful.
|
||||
* But NO.(n + 1) failed. We still have n recv threads.
|
||||
* So, add flush_workqueue here to prevent recv threads
|
||||
* dropping the last config_refs and trying to destroy
|
||||
* the workqueue from inside the workqueue.
|
||||
*/
|
||||
if (i)
|
||||
flush_workqueue(nbd->recv_workq);
|
||||
return -ENOMEM;
|
||||
}
|
||||
sk_set_memalloc(config->socks[i]->sock->sk);
|
||||
|
|
|
|||
|
|
@ -2097,7 +2097,7 @@ static int rbd_img_fill_nodata(struct rbd_img_request *img_req,
|
|||
u64 off, u64 len)
|
||||
{
|
||||
struct ceph_file_extent ex = { off, len };
|
||||
union rbd_img_fill_iter dummy;
|
||||
union rbd_img_fill_iter dummy = {};
|
||||
struct rbd_img_fill_ctx fctx = {
|
||||
.pos_type = OBJ_REQUEST_NODATA,
|
||||
.pos = &dummy,
|
||||
|
|
|
|||
|
|
@ -203,6 +203,9 @@ static int _freq_tbl_determine_rate(struct clk_hw *hw, const struct freq_tbl *f,
|
|||
|
||||
clk_flags = clk_hw_get_flags(hw);
|
||||
p = clk_hw_get_parent_by_index(hw, index);
|
||||
if (!p)
|
||||
return -EINVAL;
|
||||
|
||||
if (clk_flags & CLK_SET_RATE_PARENT) {
|
||||
rate = f->freq;
|
||||
if (f->pre_div) {
|
||||
|
|
|
|||
|
|
@ -901,11 +901,26 @@ static const struct sunxi_ccu_desc sun50i_a64_ccu_desc = {
|
|||
.num_resets = ARRAY_SIZE(sun50i_a64_ccu_resets),
|
||||
};
|
||||
|
||||
static struct ccu_pll_nb sun50i_a64_pll_cpu_nb = {
|
||||
.common = &pll_cpux_clk.common,
|
||||
/* copy from pll_cpux_clk */
|
||||
.enable = BIT(31),
|
||||
.lock = BIT(28),
|
||||
};
|
||||
|
||||
static struct ccu_mux_nb sun50i_a64_cpu_nb = {
|
||||
.common = &cpux_clk.common,
|
||||
.cm = &cpux_clk.mux,
|
||||
.delay_us = 1, /* > 8 clock cycles at 24 MHz */
|
||||
.bypass_index = 1, /* index of 24 MHz oscillator */
|
||||
};
|
||||
|
||||
static int sun50i_a64_ccu_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct resource *res;
|
||||
void __iomem *reg;
|
||||
u32 val;
|
||||
int ret;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
reg = devm_ioremap_resource(&pdev->dev, res);
|
||||
|
|
@ -919,7 +934,18 @@ static int sun50i_a64_ccu_probe(struct platform_device *pdev)
|
|||
|
||||
writel(0x515, reg + SUN50I_A64_PLL_MIPI_REG);
|
||||
|
||||
return sunxi_ccu_probe(pdev->dev.of_node, reg, &sun50i_a64_ccu_desc);
|
||||
ret = sunxi_ccu_probe(pdev->dev.of_node, reg, &sun50i_a64_ccu_desc);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Gate then ungate PLL CPU after any rate changes */
|
||||
ccu_pll_notifier_register(&sun50i_a64_pll_cpu_nb);
|
||||
|
||||
/* Reparent CPU during PLL CPU rate changes */
|
||||
ccu_mux_notifier_register(pll_cpux_clk.common.hw.clk,
|
||||
&sun50i_a64_cpu_nb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id sun50i_a64_ccu_ids[] = {
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@
|
|||
#define UNIPHIER_PERI_CLK_FI2C(idx, ch) \
|
||||
UNIPHIER_CLK_GATE("i2c" #ch, (idx), "i2c", 0x24, 24 + (ch))
|
||||
|
||||
#define UNIPHIER_PERI_CLK_SCSSI(idx) \
|
||||
UNIPHIER_CLK_GATE("scssi", (idx), "spi", 0x20, 17)
|
||||
#define UNIPHIER_PERI_CLK_SCSSI(idx, ch) \
|
||||
UNIPHIER_CLK_GATE("scssi" #ch, (idx), "spi", 0x20, 17 + (ch))
|
||||
|
||||
#define UNIPHIER_PERI_CLK_MCSSI(idx) \
|
||||
UNIPHIER_CLK_GATE("mcssi", (idx), "spi", 0x24, 14)
|
||||
|
|
@ -44,7 +44,7 @@ const struct uniphier_clk_data uniphier_ld4_peri_clk_data[] = {
|
|||
UNIPHIER_PERI_CLK_I2C(6, 2),
|
||||
UNIPHIER_PERI_CLK_I2C(7, 3),
|
||||
UNIPHIER_PERI_CLK_I2C(8, 4),
|
||||
UNIPHIER_PERI_CLK_SCSSI(11),
|
||||
UNIPHIER_PERI_CLK_SCSSI(11, 0),
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
|
||||
|
|
@ -60,7 +60,10 @@ const struct uniphier_clk_data uniphier_pro4_peri_clk_data[] = {
|
|||
UNIPHIER_PERI_CLK_FI2C(8, 4),
|
||||
UNIPHIER_PERI_CLK_FI2C(9, 5),
|
||||
UNIPHIER_PERI_CLK_FI2C(10, 6),
|
||||
UNIPHIER_PERI_CLK_SCSSI(11),
|
||||
UNIPHIER_PERI_CLK_MCSSI(12),
|
||||
UNIPHIER_PERI_CLK_SCSSI(11, 0),
|
||||
UNIPHIER_PERI_CLK_SCSSI(12, 1),
|
||||
UNIPHIER_PERI_CLK_SCSSI(13, 2),
|
||||
UNIPHIER_PERI_CLK_SCSSI(14, 3),
|
||||
UNIPHIER_PERI_CLK_MCSSI(15),
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ static int __init bcm2835_timer_init(struct device_node *node)
|
|||
ret = setup_irq(irq, &timer->act);
|
||||
if (ret) {
|
||||
pr_err("Can't set up timer IRQ\n");
|
||||
goto err_iounmap;
|
||||
goto err_timer_free;
|
||||
}
|
||||
|
||||
clockevents_config_and_register(&timer->evt, freq, 0xf, 0xffffffff);
|
||||
|
|
@ -143,6 +143,9 @@ static int __init bcm2835_timer_init(struct device_node *node)
|
|||
|
||||
return 0;
|
||||
|
||||
err_timer_free:
|
||||
kfree(timer);
|
||||
|
||||
err_iounmap:
|
||||
iounmap(base);
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -731,6 +731,14 @@ static int chtls_close_listsrv_rpl(struct chtls_dev *cdev, struct sk_buff *skb)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void chtls_purge_wr_queue(struct sock *sk)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
|
||||
while ((skb = dequeue_wr(sk)) != NULL)
|
||||
kfree_skb(skb);
|
||||
}
|
||||
|
||||
static void chtls_release_resources(struct sock *sk)
|
||||
{
|
||||
struct chtls_sock *csk = rcu_dereference_sk_user_data(sk);
|
||||
|
|
@ -745,6 +753,11 @@ static void chtls_release_resources(struct sock *sk)
|
|||
kfree_skb(csk->txdata_skb_cache);
|
||||
csk->txdata_skb_cache = NULL;
|
||||
|
||||
if (csk->wr_credits != csk->wr_max_credits) {
|
||||
chtls_purge_wr_queue(sk);
|
||||
chtls_reset_wr_list(csk);
|
||||
}
|
||||
|
||||
if (csk->l2t_entry) {
|
||||
cxgb4_l2t_release(csk->l2t_entry);
|
||||
csk->l2t_entry = NULL;
|
||||
|
|
@ -1714,6 +1727,7 @@ static void chtls_peer_close(struct sock *sk, struct sk_buff *skb)
|
|||
else
|
||||
sk_wake_async(sk, SOCK_WAKE_WAITD, POLL_IN);
|
||||
}
|
||||
kfree_skb(skb);
|
||||
}
|
||||
|
||||
static void chtls_close_con_rpl(struct sock *sk, struct sk_buff *skb)
|
||||
|
|
@ -2041,19 +2055,6 @@ static int chtls_conn_cpl(struct chtls_dev *cdev, struct sk_buff *skb)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct sk_buff *dequeue_wr(struct sock *sk)
|
||||
{
|
||||
struct chtls_sock *csk = rcu_dereference_sk_user_data(sk);
|
||||
struct sk_buff *skb = csk->wr_skb_head;
|
||||
|
||||
if (likely(skb)) {
|
||||
/* Don't bother clearing the tail */
|
||||
csk->wr_skb_head = WR_SKB_CB(skb)->next_wr;
|
||||
WR_SKB_CB(skb)->next_wr = NULL;
|
||||
}
|
||||
return skb;
|
||||
}
|
||||
|
||||
static void chtls_rx_ack(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
struct cpl_fw4_ack *hdr = cplhdr(skb) + RSS_HDR;
|
||||
|
|
|
|||
|
|
@ -188,6 +188,12 @@ static inline void chtls_kfree_skb(struct sock *sk, struct sk_buff *skb)
|
|||
kfree_skb(skb);
|
||||
}
|
||||
|
||||
static inline void chtls_reset_wr_list(struct chtls_sock *csk)
|
||||
{
|
||||
csk->wr_skb_head = NULL;
|
||||
csk->wr_skb_tail = NULL;
|
||||
}
|
||||
|
||||
static inline void enqueue_wr(struct chtls_sock *csk, struct sk_buff *skb)
|
||||
{
|
||||
WR_SKB_CB(skb)->next_wr = NULL;
|
||||
|
|
@ -200,4 +206,19 @@ static inline void enqueue_wr(struct chtls_sock *csk, struct sk_buff *skb)
|
|||
WR_SKB_CB(csk->wr_skb_tail)->next_wr = skb;
|
||||
csk->wr_skb_tail = skb;
|
||||
}
|
||||
|
||||
static inline struct sk_buff *dequeue_wr(struct sock *sk)
|
||||
{
|
||||
struct chtls_sock *csk = rcu_dereference_sk_user_data(sk);
|
||||
struct sk_buff *skb = NULL;
|
||||
|
||||
skb = csk->wr_skb_head;
|
||||
|
||||
if (likely(skb)) {
|
||||
/* Don't bother clearing the tail */
|
||||
csk->wr_skb_head = WR_SKB_CB(skb)->next_wr;
|
||||
WR_SKB_CB(skb)->next_wr = NULL;
|
||||
}
|
||||
return skb;
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -361,6 +361,7 @@ int chtls_setkey(struct chtls_sock *csk, u32 keylen, u32 optname)
|
|||
kwr->sc_imm.cmd_more = cpu_to_be32(ULPTX_CMD_V(ULP_TX_SC_IMM));
|
||||
kwr->sc_imm.len = cpu_to_be32(klen);
|
||||
|
||||
lock_sock(sk);
|
||||
/* key info */
|
||||
kctx = (struct _key_ctx *)(kwr + 1);
|
||||
ret = chtls_key_info(csk, kctx, keylen, optname);
|
||||
|
|
@ -399,8 +400,10 @@ int chtls_setkey(struct chtls_sock *csk, u32 keylen, u32 optname)
|
|||
csk->tlshws.txkey = keyid;
|
||||
}
|
||||
|
||||
release_sock(sk);
|
||||
return ret;
|
||||
out_notcb:
|
||||
release_sock(sk);
|
||||
free_tls_keyid(sk);
|
||||
out_nokey:
|
||||
kfree_skb(skb);
|
||||
|
|
|
|||
|
|
@ -103,7 +103,8 @@ config ARM_TEGRA_DEVFREQ
|
|||
|
||||
config ARM_RK3399_DMC_DEVFREQ
|
||||
tristate "ARM RK3399 DMC DEVFREQ Driver"
|
||||
depends on ARCH_ROCKCHIP
|
||||
depends on (ARCH_ROCKCHIP && HAVE_ARM_SMCCC) || \
|
||||
(COMPILE_TEST && HAVE_ARM_SMCCC)
|
||||
select DEVFREQ_EVENT_ROCKCHIP_DFI
|
||||
select DEVFREQ_GOV_SIMPLE_ONDEMAND
|
||||
select PM_DEVFREQ_EVENT
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ config DEVFREQ_EVENT_EXYNOS_PPMU
|
|||
|
||||
config DEVFREQ_EVENT_ROCKCHIP_DFI
|
||||
tristate "ROCKCHIP DFI DEVFREQ event Driver"
|
||||
depends on ARCH_ROCKCHIP
|
||||
depends on ARCH_ROCKCHIP || COMPILE_TEST
|
||||
help
|
||||
This add the devfreq-event driver for Rockchip SoC. It provides DFI
|
||||
(DDR Monitor Module) driver to count ddr load.
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ __dma_device_satisfies_mask(struct dma_device *device,
|
|||
|
||||
static struct module *dma_chan_to_owner(struct dma_chan *chan)
|
||||
{
|
||||
return chan->device->dev->driver->owner;
|
||||
return chan->device->owner;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -923,6 +923,8 @@ int dma_async_device_register(struct dma_device *device)
|
|||
return -EIO;
|
||||
}
|
||||
|
||||
device->owner = device->dev->driver->owner;
|
||||
|
||||
if (dma_has_cap(DMA_MEMCPY, device->cap_mask) && !device->device_prep_dma_memcpy) {
|
||||
dev_err(device->dev,
|
||||
"Device claims capability %s, but op is not defined\n",
|
||||
|
|
|
|||
|
|
@ -738,12 +738,8 @@ static void sdma_start_desc(struct sdma_channel *sdmac)
|
|||
return;
|
||||
}
|
||||
sdmac->desc = desc = to_sdma_desc(&vd->tx);
|
||||
/*
|
||||
* Do not delete the node in desc_issued list in cyclic mode, otherwise
|
||||
* the desc allocated will never be freed in vchan_dma_desc_free_list
|
||||
*/
|
||||
if (!(sdmac->flags & IMX_DMA_SG_LOOP))
|
||||
list_del(&vd->node);
|
||||
|
||||
list_del(&vd->node);
|
||||
|
||||
sdma->channel_control[channel].base_bd_ptr = desc->bd_phys;
|
||||
sdma->channel_control[channel].current_bd_ptr = desc->bd_phys;
|
||||
|
|
@ -1044,7 +1040,6 @@ static void sdma_channel_terminate_work(struct work_struct *work)
|
|||
|
||||
spin_lock_irqsave(&sdmac->vc.lock, flags);
|
||||
vchan_get_all_descriptors(&sdmac->vc, &head);
|
||||
sdmac->desc = NULL;
|
||||
spin_unlock_irqrestore(&sdmac->vc.lock, flags);
|
||||
vchan_dma_desc_free_list(&sdmac->vc, &head);
|
||||
}
|
||||
|
|
@ -1052,11 +1047,19 @@ static void sdma_channel_terminate_work(struct work_struct *work)
|
|||
static int sdma_disable_channel_async(struct dma_chan *chan)
|
||||
{
|
||||
struct sdma_channel *sdmac = to_sdma_chan(chan);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&sdmac->vc.lock, flags);
|
||||
|
||||
sdma_disable_channel(chan);
|
||||
|
||||
if (sdmac->desc)
|
||||
if (sdmac->desc) {
|
||||
vchan_terminate_vdesc(&sdmac->desc->vd);
|
||||
sdmac->desc = NULL;
|
||||
schedule_work(&sdmac->terminate_worker);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&sdmac->vc.lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -258,17 +258,16 @@ static int grgpio_irq_map(struct irq_domain *d, unsigned int irq,
|
|||
lirq->irq = irq;
|
||||
uirq = &priv->uirqs[lirq->index];
|
||||
if (uirq->refcnt == 0) {
|
||||
spin_unlock_irqrestore(&priv->gc.bgpio_lock, flags);
|
||||
ret = request_irq(uirq->uirq, grgpio_irq_handler, 0,
|
||||
dev_name(priv->dev), priv);
|
||||
if (ret) {
|
||||
dev_err(priv->dev,
|
||||
"Could not request underlying irq %d\n",
|
||||
uirq->uirq);
|
||||
|
||||
spin_unlock_irqrestore(&priv->gc.bgpio_lock, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
spin_lock_irqsave(&priv->gc.bgpio_lock, flags);
|
||||
}
|
||||
uirq->refcnt++;
|
||||
|
||||
|
|
@ -314,8 +313,11 @@ static void grgpio_irq_unmap(struct irq_domain *d, unsigned int irq)
|
|||
if (index >= 0) {
|
||||
uirq = &priv->uirqs[lirq->index];
|
||||
uirq->refcnt--;
|
||||
if (uirq->refcnt == 0)
|
||||
if (uirq->refcnt == 0) {
|
||||
spin_unlock_irqrestore(&priv->gc.bgpio_lock, flags);
|
||||
free_irq(uirq->uirq, priv);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&priv->gc.bgpio_lock, flags);
|
||||
|
|
|
|||
|
|
@ -337,17 +337,9 @@ bool amdgpu_atombios_get_connector_info_from_object_table(struct amdgpu_device *
|
|||
path_size += le16_to_cpu(path->usSize);
|
||||
|
||||
if (device_support & le16_to_cpu(path->usDeviceTag)) {
|
||||
uint8_t con_obj_id, con_obj_num, con_obj_type;
|
||||
|
||||
con_obj_id =
|
||||
uint8_t con_obj_id =
|
||||
(le16_to_cpu(path->usConnObjectId) & OBJECT_ID_MASK)
|
||||
>> OBJECT_ID_SHIFT;
|
||||
con_obj_num =
|
||||
(le16_to_cpu(path->usConnObjectId) & ENUM_ID_MASK)
|
||||
>> ENUM_ID_SHIFT;
|
||||
con_obj_type =
|
||||
(le16_to_cpu(path->usConnObjectId) &
|
||||
OBJECT_TYPE_MASK) >> OBJECT_TYPE_SHIFT;
|
||||
|
||||
/* Skip TV/CV support */
|
||||
if ((le16_to_cpu(path->usDeviceTag) ==
|
||||
|
|
@ -372,14 +364,7 @@ bool amdgpu_atombios_get_connector_info_from_object_table(struct amdgpu_device *
|
|||
router.ddc_valid = false;
|
||||
router.cd_valid = false;
|
||||
for (j = 0; j < ((le16_to_cpu(path->usSize) - 8) / 2); j++) {
|
||||
uint8_t grph_obj_id, grph_obj_num, grph_obj_type;
|
||||
|
||||
grph_obj_id =
|
||||
(le16_to_cpu(path->usGraphicObjIds[j]) &
|
||||
OBJECT_ID_MASK) >> OBJECT_ID_SHIFT;
|
||||
grph_obj_num =
|
||||
(le16_to_cpu(path->usGraphicObjIds[j]) &
|
||||
ENUM_ID_MASK) >> ENUM_ID_SHIFT;
|
||||
uint8_t grph_obj_type=
|
||||
grph_obj_type =
|
||||
(le16_to_cpu(path->usGraphicObjIds[j]) &
|
||||
OBJECT_TYPE_MASK) >> OBJECT_TYPE_SHIFT;
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@
|
|||
do { \
|
||||
uint32_t tmp_ = RREG32(adev->reg_offset[ip##_HWIP][inst][reg##_BASE_IDX] + reg); \
|
||||
uint32_t loop = adev->usec_timeout; \
|
||||
ret = 0; \
|
||||
while ((tmp_ & (mask)) != (expected_value)) { \
|
||||
udelay(2); \
|
||||
tmp_ = RREG32(adev->reg_offset[ip##_HWIP][inst][reg##_BASE_IDX] + reg); \
|
||||
|
|
|
|||
|
|
@ -1346,6 +1346,7 @@ void dcn_bw_update_from_pplib(struct dc *dc)
|
|||
struct dc_context *ctx = dc->ctx;
|
||||
struct dm_pp_clock_levels_with_voltage fclks = {0}, dcfclks = {0};
|
||||
bool res;
|
||||
unsigned vmin0p65_idx, vmid0p72_idx, vnom0p8_idx, vmax0p9_idx;
|
||||
|
||||
/* TODO: This is not the proper way to obtain fabric_and_dram_bandwidth, should be min(fclk, memclk) */
|
||||
res = dm_pp_get_clock_levels_by_type_with_voltage(
|
||||
|
|
@ -1357,17 +1358,28 @@ void dcn_bw_update_from_pplib(struct dc *dc)
|
|||
res = verify_clock_values(&fclks);
|
||||
|
||||
if (res) {
|
||||
ASSERT(fclks.num_levels >= 3);
|
||||
dc->dcn_soc->fabric_and_dram_bandwidth_vmin0p65 = 32 * (fclks.data[0].clocks_in_khz / 1000.0) / 1000.0;
|
||||
dc->dcn_soc->fabric_and_dram_bandwidth_vmid0p72 = dc->dcn_soc->number_of_channels *
|
||||
(fclks.data[fclks.num_levels - (fclks.num_levels > 2 ? 3 : 2)].clocks_in_khz / 1000.0)
|
||||
* ddr4_dram_factor_single_Channel / 1000.0;
|
||||
dc->dcn_soc->fabric_and_dram_bandwidth_vnom0p8 = dc->dcn_soc->number_of_channels *
|
||||
(fclks.data[fclks.num_levels - 2].clocks_in_khz / 1000.0)
|
||||
* ddr4_dram_factor_single_Channel / 1000.0;
|
||||
dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9 = dc->dcn_soc->number_of_channels *
|
||||
(fclks.data[fclks.num_levels - 1].clocks_in_khz / 1000.0)
|
||||
* ddr4_dram_factor_single_Channel / 1000.0;
|
||||
ASSERT(fclks.num_levels);
|
||||
|
||||
vmin0p65_idx = 0;
|
||||
vmid0p72_idx = fclks.num_levels -
|
||||
(fclks.num_levels > 2 ? 3 : (fclks.num_levels > 1 ? 2 : 1));
|
||||
vnom0p8_idx = fclks.num_levels - (fclks.num_levels > 1 ? 2 : 1);
|
||||
vmax0p9_idx = fclks.num_levels - 1;
|
||||
|
||||
dc->dcn_soc->fabric_and_dram_bandwidth_vmin0p65 =
|
||||
32 * (fclks.data[vmin0p65_idx].clocks_in_khz / 1000.0) / 1000.0;
|
||||
dc->dcn_soc->fabric_and_dram_bandwidth_vmid0p72 =
|
||||
dc->dcn_soc->number_of_channels *
|
||||
(fclks.data[vmid0p72_idx].clocks_in_khz / 1000.0)
|
||||
* ddr4_dram_factor_single_Channel / 1000.0;
|
||||
dc->dcn_soc->fabric_and_dram_bandwidth_vnom0p8 =
|
||||
dc->dcn_soc->number_of_channels *
|
||||
(fclks.data[vnom0p8_idx].clocks_in_khz / 1000.0)
|
||||
* ddr4_dram_factor_single_Channel / 1000.0;
|
||||
dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9 =
|
||||
dc->dcn_soc->number_of_channels *
|
||||
(fclks.data[vmax0p9_idx].clocks_in_khz / 1000.0)
|
||||
* ddr4_dram_factor_single_Channel / 1000.0;
|
||||
} else
|
||||
BREAK_TO_DEBUGGER();
|
||||
|
||||
|
|
|
|||
|
|
@ -780,8 +780,7 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason)
|
|||
same_edid = is_same_edid(&prev_sink->dc_edid, &sink->dc_edid);
|
||||
|
||||
if (link->connector_signal == SIGNAL_TYPE_DISPLAY_PORT &&
|
||||
sink_caps.transaction_type == DDC_TRANSACTION_TYPE_I2C_OVER_AUX &&
|
||||
reason != DETECT_REASON_HPDRX) {
|
||||
sink_caps.transaction_type == DDC_TRANSACTION_TYPE_I2C_OVER_AUX) {
|
||||
/*
|
||||
* TODO debug why Dell 2413 doesn't like
|
||||
* two link trainings
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
*/
|
||||
|
||||
#include "dml_common_defs.h"
|
||||
#include "../calcs/dcn_calc_math.h"
|
||||
#include "dcn_calc_math.h"
|
||||
|
||||
#include "dml_inline_defs.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
#define __DML_INLINE_DEFS_H__
|
||||
|
||||
#include "dml_common_defs.h"
|
||||
#include "../calcs/dcn_calc_math.h"
|
||||
#include "dcn_calc_math.h"
|
||||
#include "dml_logger.h"
|
||||
|
||||
static inline double dml_min(double a, double b)
|
||||
|
|
|
|||
|
|
@ -994,12 +994,15 @@ static int smu10_get_clock_by_type_with_latency(struct pp_hwmgr *hwmgr,
|
|||
|
||||
clocks->num_levels = 0;
|
||||
for (i = 0; i < pclk_vol_table->count; i++) {
|
||||
clocks->data[i].clocks_in_khz = pclk_vol_table->entries[i].clk * 10;
|
||||
clocks->data[i].latency_in_us = latency_required ?
|
||||
smu10_get_mem_latency(hwmgr,
|
||||
pclk_vol_table->entries[i].clk) :
|
||||
0;
|
||||
clocks->num_levels++;
|
||||
if (pclk_vol_table->entries[i].clk) {
|
||||
clocks->data[clocks->num_levels].clocks_in_khz =
|
||||
pclk_vol_table->entries[i].clk * 10;
|
||||
clocks->data[clocks->num_levels].latency_in_us = latency_required ?
|
||||
smu10_get_mem_latency(hwmgr,
|
||||
pclk_vol_table->entries[i].clk) :
|
||||
0;
|
||||
clocks->num_levels++;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -1045,9 +1048,11 @@ static int smu10_get_clock_by_type_with_voltage(struct pp_hwmgr *hwmgr,
|
|||
|
||||
clocks->num_levels = 0;
|
||||
for (i = 0; i < pclk_vol_table->count; i++) {
|
||||
clocks->data[i].clocks_in_khz = pclk_vol_table->entries[i].clk * 10;
|
||||
clocks->data[i].voltage_in_mv = pclk_vol_table->entries[i].vol;
|
||||
clocks->num_levels++;
|
||||
if (pclk_vol_table->entries[i].clk) {
|
||||
clocks->data[clocks->num_levels].clocks_in_khz = pclk_vol_table->entries[i].clk * 10;
|
||||
clocks->data[clocks->num_levels].voltage_in_mv = pclk_vol_table->entries[i].vol;
|
||||
clocks->num_levels++;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -101,8 +101,8 @@ static ssize_t crc_control_write(struct file *file, const char __user *ubuf,
|
|||
if (IS_ERR(source))
|
||||
return PTR_ERR(source);
|
||||
|
||||
if (source[len] == '\n')
|
||||
source[len] = '\0';
|
||||
if (source[len - 1] == '\n')
|
||||
source[len - 1] = '\0';
|
||||
|
||||
spin_lock_irq(&crc->lock);
|
||||
|
||||
|
|
|
|||
|
|
@ -480,6 +480,7 @@ static int psbfb_probe(struct drm_fb_helper *helper,
|
|||
container_of(helper, struct psb_fbdev, psb_fb_helper);
|
||||
struct drm_device *dev = psb_fbdev->psb_fb_helper.dev;
|
||||
struct drm_psb_private *dev_priv = dev->dev_private;
|
||||
unsigned int fb_size;
|
||||
int bytespp;
|
||||
|
||||
bytespp = sizes->surface_bpp / 8;
|
||||
|
|
@ -489,8 +490,11 @@ static int psbfb_probe(struct drm_fb_helper *helper,
|
|||
/* If the mode will not fit in 32bit then switch to 16bit to get
|
||||
a console on full resolution. The X mode setting server will
|
||||
allocate its own 32bit GEM framebuffer */
|
||||
if (ALIGN(sizes->fb_width * bytespp, 64) * sizes->fb_height >
|
||||
dev_priv->vram_stolen_size) {
|
||||
fb_size = ALIGN(sizes->surface_width * bytespp, 64) *
|
||||
sizes->surface_height;
|
||||
fb_size = ALIGN(fb_size, PAGE_SIZE);
|
||||
|
||||
if (fb_size > dev_priv->vram_stolen_size) {
|
||||
sizes->surface_bpp = 16;
|
||||
sizes->surface_depth = 16;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -308,6 +308,7 @@ static int mtk_crtc_ddp_hw_init(struct mtk_drm_crtc *mtk_crtc)
|
|||
static void mtk_crtc_ddp_hw_fini(struct mtk_drm_crtc *mtk_crtc)
|
||||
{
|
||||
struct drm_device *drm = mtk_crtc->base.dev;
|
||||
struct drm_crtc *crtc = &mtk_crtc->base;
|
||||
int i;
|
||||
|
||||
DRM_DEBUG_DRIVER("%s\n", __func__);
|
||||
|
|
@ -329,6 +330,13 @@ static void mtk_crtc_ddp_hw_fini(struct mtk_drm_crtc *mtk_crtc)
|
|||
mtk_disp_mutex_unprepare(mtk_crtc->mutex);
|
||||
|
||||
pm_runtime_put(drm->dev);
|
||||
|
||||
if (crtc->state->event && !crtc->state->active) {
|
||||
spin_lock_irq(&crtc->dev->event_lock);
|
||||
drm_crtc_send_vblank_event(crtc, crtc->state->event);
|
||||
crtc->state->event = NULL;
|
||||
spin_unlock_irq(&crtc->dev->event_lock);
|
||||
}
|
||||
}
|
||||
|
||||
static void mtk_crtc_ddp_config(struct drm_crtc *crtc)
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ nouveau_fence_wait_uevent_handler(struct nvif_notify *notify)
|
|||
|
||||
fence = list_entry(fctx->pending.next, typeof(*fence), head);
|
||||
chan = rcu_dereference_protected(fence->channel, lockdep_is_held(&fctx->lock));
|
||||
if (nouveau_fence_update(fence->channel, fctx))
|
||||
if (nouveau_fence_update(chan, fctx))
|
||||
ret = NVIF_NOTIFY_DROP;
|
||||
}
|
||||
spin_unlock_irqrestore(&fctx->lock, flags);
|
||||
|
|
|
|||
|
|
@ -63,14 +63,12 @@ nouveau_vram_manager_new(struct ttm_mem_type_manager *man,
|
|||
{
|
||||
struct nouveau_bo *nvbo = nouveau_bo(bo);
|
||||
struct nouveau_drm *drm = nouveau_bdev(bo->bdev);
|
||||
struct nouveau_mem *mem;
|
||||
int ret;
|
||||
|
||||
if (drm->client.device.info.ram_size == 0)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = nouveau_mem_new(&drm->master, nvbo->kind, nvbo->comp, reg);
|
||||
mem = nouveau_mem(reg);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
@ -103,11 +101,9 @@ nouveau_gart_manager_new(struct ttm_mem_type_manager *man,
|
|||
{
|
||||
struct nouveau_bo *nvbo = nouveau_bo(bo);
|
||||
struct nouveau_drm *drm = nouveau_bdev(bo->bdev);
|
||||
struct nouveau_mem *mem;
|
||||
int ret;
|
||||
|
||||
ret = nouveau_mem_new(&drm->master, nvbo->kind, nvbo->comp, reg);
|
||||
mem = nouveau_mem(reg);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
|
|||
|
|
@ -91,8 +91,8 @@ nvkm_memory_tags_get(struct nvkm_memory *memory, struct nvkm_device *device,
|
|||
}
|
||||
|
||||
refcount_set(&tags->refcount, 1);
|
||||
*ptags = memory->tags = tags;
|
||||
mutex_unlock(&fb->subdev.mutex);
|
||||
*ptags = tags;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,6 +74,8 @@ nv50_disp_chan_mthd(struct nv50_disp_chan *chan, int debug)
|
|||
|
||||
if (debug > subdev->debug)
|
||||
return;
|
||||
if (!mthd)
|
||||
return;
|
||||
|
||||
for (i = 0; (list = mthd->data[i].mthd) != NULL; i++) {
|
||||
u32 base = chan->head * mthd->addr;
|
||||
|
|
|
|||
|
|
@ -143,23 +143,24 @@ gk20a_gr_av_to_method(struct gf100_gr *gr, const char *fw_name,
|
|||
|
||||
nent = (fuc.size / sizeof(struct gk20a_fw_av));
|
||||
|
||||
pack = vzalloc((sizeof(*pack) * max_classes) +
|
||||
(sizeof(*init) * (nent + 1)));
|
||||
pack = vzalloc((sizeof(*pack) * (max_classes + 1)) +
|
||||
(sizeof(*init) * (nent + max_classes + 1)));
|
||||
if (!pack) {
|
||||
ret = -ENOMEM;
|
||||
goto end;
|
||||
}
|
||||
|
||||
init = (void *)(pack + max_classes);
|
||||
init = (void *)(pack + max_classes + 1);
|
||||
|
||||
for (i = 0; i < nent; i++) {
|
||||
struct gf100_gr_init *ent = &init[i];
|
||||
for (i = 0; i < nent; i++, init++) {
|
||||
struct gk20a_fw_av *av = &((struct gk20a_fw_av *)fuc.data)[i];
|
||||
u32 class = av->addr & 0xffff;
|
||||
u32 addr = (av->addr & 0xffff0000) >> 14;
|
||||
|
||||
if (prevclass != class) {
|
||||
pack[classidx].init = ent;
|
||||
if (prevclass) /* Add terminator to the method list. */
|
||||
init++;
|
||||
pack[classidx].init = init;
|
||||
pack[classidx].type = class;
|
||||
prevclass = class;
|
||||
if (++classidx >= max_classes) {
|
||||
|
|
@ -169,10 +170,10 @@ gk20a_gr_av_to_method(struct gf100_gr *gr, const char *fw_name,
|
|||
}
|
||||
}
|
||||
|
||||
ent->addr = addr;
|
||||
ent->data = av->data;
|
||||
ent->count = 1;
|
||||
ent->pitch = 1;
|
||||
init->addr = addr;
|
||||
init->data = av->data;
|
||||
init->count = 1;
|
||||
init->pitch = 1;
|
||||
}
|
||||
|
||||
*ppack = pack;
|
||||
|
|
|
|||
|
|
@ -150,6 +150,7 @@ nvkm_fault_dtor(struct nvkm_subdev *subdev)
|
|||
struct nvkm_fault *fault = nvkm_fault(subdev);
|
||||
int i;
|
||||
|
||||
nvkm_notify_fini(&fault->nrpfb);
|
||||
nvkm_event_fini(&fault->event);
|
||||
|
||||
for (i = 0; i < fault->buffer_nr; i++) {
|
||||
|
|
|
|||
|
|
@ -108,6 +108,7 @@ gm20b_secboot_new(struct nvkm_device *device, int index,
|
|||
struct gm200_secboot *gsb;
|
||||
struct nvkm_acr *acr;
|
||||
|
||||
*psb = NULL;
|
||||
acr = acr_r352_new(BIT(NVKM_SECBOOT_FALCON_FECS) |
|
||||
BIT(NVKM_SECBOOT_FALCON_PMU));
|
||||
if (IS_ERR(acr))
|
||||
|
|
@ -116,10 +117,8 @@ gm20b_secboot_new(struct nvkm_device *device, int index,
|
|||
acr->optional_falcons = BIT(NVKM_SECBOOT_FALCON_PMU);
|
||||
|
||||
gsb = kzalloc(sizeof(*gsb), GFP_KERNEL);
|
||||
if (!gsb) {
|
||||
psb = NULL;
|
||||
if (!gsb)
|
||||
return -ENOMEM;
|
||||
}
|
||||
*psb = &gsb->base;
|
||||
|
||||
ret = nvkm_secboot_ctor(&gm20b_secboot, acr, device, index, &gsb->base);
|
||||
|
|
|
|||
|
|
@ -121,6 +121,8 @@ static void dce5_crtc_load_lut(struct drm_crtc *crtc)
|
|||
|
||||
DRM_DEBUG_KMS("%d\n", radeon_crtc->crtc_id);
|
||||
|
||||
msleep(10);
|
||||
|
||||
WREG32(NI_INPUT_CSC_CONTROL + radeon_crtc->crtc_offset,
|
||||
(NI_INPUT_CSC_GRPH_MODE(NI_INPUT_CSC_BYPASS) |
|
||||
NI_INPUT_CSC_OVL_MODE(NI_INPUT_CSC_BYPASS)));
|
||||
|
|
|
|||
|
|
@ -210,8 +210,10 @@ int vmw_cmdbuf_res_add(struct vmw_cmdbuf_res_manager *man,
|
|||
|
||||
cres->hash.key = user_key | (res_type << 24);
|
||||
ret = drm_ht_insert_item(&man->resources, &cres->hash);
|
||||
if (unlikely(ret != 0))
|
||||
if (unlikely(ret != 0)) {
|
||||
kfree(cres);
|
||||
goto out_invalid_key;
|
||||
}
|
||||
|
||||
cres->state = VMW_CMDBUF_RES_ADD;
|
||||
cres->res = vmw_resource_reference(res);
|
||||
|
|
|
|||
|
|
@ -65,6 +65,9 @@ static void cmd64x_program_timings(ide_drive_t *drive, u8 mode)
|
|||
struct ide_timing t;
|
||||
u8 arttim = 0;
|
||||
|
||||
if (drive->dn >= ARRAY_SIZE(drwtim_regs))
|
||||
return;
|
||||
|
||||
ide_timing_compute(drive, mode, &t, T, 0);
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -114,6 +114,9 @@ static void svwks_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive)
|
|||
struct pci_dev *dev = to_pci_dev(hwif->dev);
|
||||
const u8 pio = drive->pio_mode - XFER_PIO_0;
|
||||
|
||||
if (drive->dn >= ARRAY_SIZE(drive_pci))
|
||||
return;
|
||||
|
||||
pci_write_config_byte(dev, drive_pci[drive->dn], pio_modes[pio]);
|
||||
|
||||
if (svwks_csb_check(dev)) {
|
||||
|
|
@ -140,6 +143,9 @@ static void svwks_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive)
|
|||
|
||||
u8 ultra_enable = 0, ultra_timing = 0, dma_timing = 0;
|
||||
|
||||
if (drive->dn >= ARRAY_SIZE(drive_pci2))
|
||||
return;
|
||||
|
||||
pci_read_config_byte(dev, (0x56|hwif->channel), &ultra_timing);
|
||||
pci_read_config_byte(dev, 0x54, &ultra_enable);
|
||||
|
||||
|
|
|
|||
|
|
@ -1687,6 +1687,14 @@ static u64 access_sw_pio_drain(const struct cntr_entry *entry,
|
|||
return dd->verbs_dev.n_piodrain;
|
||||
}
|
||||
|
||||
static u64 access_sw_ctx0_seq_drop(const struct cntr_entry *entry,
|
||||
void *context, int vl, int mode, u64 data)
|
||||
{
|
||||
struct hfi1_devdata *dd = context;
|
||||
|
||||
return dd->ctx0_seq_drop;
|
||||
}
|
||||
|
||||
static u64 access_sw_vtx_wait(const struct cntr_entry *entry,
|
||||
void *context, int vl, int mode, u64 data)
|
||||
{
|
||||
|
|
@ -4247,6 +4255,8 @@ static struct cntr_entry dev_cntrs[DEV_CNTR_LAST] = {
|
|||
access_sw_cpu_intr),
|
||||
[C_SW_CPU_RCV_LIM] = CNTR_ELEM("RcvLimit", 0, 0, CNTR_NORMAL,
|
||||
access_sw_cpu_rcv_limit),
|
||||
[C_SW_CTX0_SEQ_DROP] = CNTR_ELEM("SeqDrop0", 0, 0, CNTR_NORMAL,
|
||||
access_sw_ctx0_seq_drop),
|
||||
[C_SW_VTX_WAIT] = CNTR_ELEM("vTxWait", 0, 0, CNTR_NORMAL,
|
||||
access_sw_vtx_wait),
|
||||
[C_SW_PIO_WAIT] = CNTR_ELEM("PioWait", 0, 0, CNTR_NORMAL,
|
||||
|
|
|
|||
|
|
@ -909,6 +909,7 @@ enum {
|
|||
C_DC_PG_STS_TX_MBE_CNT,
|
||||
C_SW_CPU_INTR,
|
||||
C_SW_CPU_RCV_LIM,
|
||||
C_SW_CTX0_SEQ_DROP,
|
||||
C_SW_VTX_WAIT,
|
||||
C_SW_PIO_WAIT,
|
||||
C_SW_PIO_DRAIN,
|
||||
|
|
|
|||
|
|
@ -734,6 +734,7 @@ static noinline int skip_rcv_packet(struct hfi1_packet *packet, int thread)
|
|||
{
|
||||
int ret;
|
||||
|
||||
packet->rcd->dd->ctx0_seq_drop++;
|
||||
/* Set up for the next packet */
|
||||
packet->rhqoff += packet->rsize;
|
||||
if (packet->rhqoff >= packet->maxcnt)
|
||||
|
|
|
|||
|
|
@ -1093,6 +1093,8 @@ struct hfi1_devdata {
|
|||
|
||||
char *boardname; /* human readable board info */
|
||||
|
||||
u64 ctx0_seq_drop;
|
||||
|
||||
/* reset value */
|
||||
u64 z_int_counter;
|
||||
u64 z_rcv_limit;
|
||||
|
|
|
|||
|
|
@ -407,7 +407,7 @@ struct rxe_dev {
|
|||
struct list_head pending_mmaps;
|
||||
|
||||
spinlock_t mmap_offset_lock; /* guard mmap_offset */
|
||||
int mmap_offset;
|
||||
u64 mmap_offset;
|
||||
|
||||
atomic64_t stats_counters[RXE_NUM_OF_COUNTERS];
|
||||
|
||||
|
|
|
|||
|
|
@ -968,6 +968,7 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client,
|
|||
{
|
||||
const struct edt_i2c_chip_data *chip_data;
|
||||
struct edt_ft5x06_ts_data *tsdata;
|
||||
u8 buf[2] = { 0xfc, 0x00 };
|
||||
struct input_dev *input;
|
||||
unsigned long irq_flags;
|
||||
int error;
|
||||
|
|
@ -1037,6 +1038,12 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client,
|
|||
return error;
|
||||
}
|
||||
|
||||
/*
|
||||
* Dummy read access. EP0700MLP1 returns bogus data on the first
|
||||
* register read access and ignores writes.
|
||||
*/
|
||||
edt_ft5x06_ts_readwrite(tsdata->client, 2, buf, 2, buf);
|
||||
|
||||
edt_ft5x06_ts_set_regs(tsdata);
|
||||
edt_ft5x06_ts_get_defaults(&client->dev, tsdata);
|
||||
edt_ft5x06_ts_get_parameters(tsdata);
|
||||
|
|
|
|||
|
|
@ -1184,7 +1184,8 @@ static void arm_smmu_write_strtab_ent(struct arm_smmu_device *smmu, u32 sid,
|
|||
}
|
||||
|
||||
arm_smmu_sync_ste_for_sid(smmu, sid);
|
||||
dst[0] = cpu_to_le64(val);
|
||||
/* See comment in arm_smmu_write_ctx_desc() */
|
||||
WRITE_ONCE(dst[0], cpu_to_le64(val));
|
||||
arm_smmu_sync_ste_for_sid(smmu, sid);
|
||||
|
||||
/* It's likely that we'll want to use the new STE soon */
|
||||
|
|
|
|||
|
|
@ -1345,7 +1345,6 @@ void qi_flush_dev_iotlb(struct intel_iommu *iommu, u16 sid, u16 pfsid,
|
|||
struct qi_desc desc;
|
||||
|
||||
if (mask) {
|
||||
WARN_ON_ONCE(addr & ((1ULL << (VTD_PAGE_SHIFT + mask)) - 1));
|
||||
addr |= (1ULL << (VTD_PAGE_SHIFT + mask - 1)) - 1;
|
||||
desc.high = QI_DEV_IOTLB_ADDR(addr) | QI_DEV_IOTLB_SIZE;
|
||||
} else
|
||||
|
|
|
|||
|
|
@ -377,7 +377,7 @@ int intel_svm_bind_mm(struct device *dev, int *pasid, int flags, struct svm_dev_
|
|||
/* Do not use PASID 0 in caching mode (virtualised IOMMU) */
|
||||
ret = intel_pasid_alloc_id(svm,
|
||||
!!cap_caching_mode(iommu->cap),
|
||||
pasid_max - 1, GFP_KERNEL);
|
||||
pasid_max, GFP_KERNEL);
|
||||
if (ret < 0) {
|
||||
kfree(svm);
|
||||
kfree(sdev);
|
||||
|
|
|
|||
|
|
@ -578,7 +578,7 @@ static struct its_collection *its_build_invall_cmd(struct its_node *its,
|
|||
struct its_cmd_desc *desc)
|
||||
{
|
||||
its_encode_cmd(cmd, GITS_CMD_INVALL);
|
||||
its_encode_collection(cmd, desc->its_mapc_cmd.col->col_id);
|
||||
its_encode_collection(cmd, desc->its_invall_cmd.col->col_id);
|
||||
|
||||
its_fixup_cmd(cmd);
|
||||
|
||||
|
|
|
|||
|
|
@ -1347,6 +1347,7 @@ static struct
|
|||
struct redist_region *redist_regs;
|
||||
u32 nr_redist_regions;
|
||||
bool single_redist;
|
||||
int enabled_rdists;
|
||||
u32 maint_irq;
|
||||
int maint_irq_mode;
|
||||
phys_addr_t vcpu_base;
|
||||
|
|
@ -1441,8 +1442,10 @@ static int __init gic_acpi_match_gicc(struct acpi_subtable_header *header,
|
|||
* If GICC is enabled and has valid gicr base address, then it means
|
||||
* GICR base is presented via GICC
|
||||
*/
|
||||
if ((gicc->flags & ACPI_MADT_ENABLED) && gicc->gicr_base_address)
|
||||
if ((gicc->flags & ACPI_MADT_ENABLED) && gicc->gicr_base_address) {
|
||||
acpi_data.enabled_rdists++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* It's perfectly valid firmware can pass disabled GICC entry, driver
|
||||
|
|
@ -1472,8 +1475,10 @@ static int __init gic_acpi_count_gicr_regions(void)
|
|||
|
||||
count = acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_INTERRUPT,
|
||||
gic_acpi_match_gicc, 0);
|
||||
if (count > 0)
|
||||
if (count > 0) {
|
||||
acpi_data.single_redist = true;
|
||||
count = acpi_data.enabled_rdists;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -381,6 +381,7 @@ static struct platform_driver mbigen_platform_driver = {
|
|||
.name = "Hisilicon MBIGEN-V2",
|
||||
.of_match_table = mbigen_of_match,
|
||||
.acpi_match_table = ACPI_PTR(mbigen_acpi_match),
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = mbigen_device_probe,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -43,6 +43,8 @@
|
|||
#define PCA963X_LED_PWM 0x2 /* Controlled through PWM */
|
||||
#define PCA963X_LED_GRP_PWM 0x3 /* Controlled through PWM/GRPPWM */
|
||||
|
||||
#define PCA963X_MODE2_OUTDRV 0x04 /* Open-drain or totem pole */
|
||||
#define PCA963X_MODE2_INVRT 0x10 /* Normal or inverted direction */
|
||||
#define PCA963X_MODE2_DMBLNK 0x20 /* Enable blinking */
|
||||
|
||||
#define PCA963X_MODE1 0x00
|
||||
|
|
@ -462,12 +464,12 @@ static int pca963x_probe(struct i2c_client *client,
|
|||
PCA963X_MODE2);
|
||||
/* Configure output: open-drain or totem pole (push-pull) */
|
||||
if (pdata->outdrv == PCA963X_OPEN_DRAIN)
|
||||
mode2 |= 0x01;
|
||||
mode2 &= ~PCA963X_MODE2_OUTDRV;
|
||||
else
|
||||
mode2 |= 0x05;
|
||||
mode2 |= PCA963X_MODE2_OUTDRV;
|
||||
/* Configure direction: normal or inverted */
|
||||
if (pdata->dir == PCA963X_INVERTED)
|
||||
mode2 |= 0x10;
|
||||
mode2 |= PCA963X_MODE2_INVRT;
|
||||
i2c_smbus_write_byte_data(pca963x->chip->client, PCA963X_MODE2,
|
||||
mode2);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -397,7 +397,8 @@ void bch_btree_keys_stats(struct btree_keys *b, struct bset_stats *state);
|
|||
|
||||
/* Bkey utility code */
|
||||
|
||||
#define bset_bkey_last(i) bkey_idx((struct bkey *) (i)->d, (i)->keys)
|
||||
#define bset_bkey_last(i) bkey_idx((struct bkey *) (i)->d, \
|
||||
(unsigned int)(i)->keys)
|
||||
|
||||
static inline struct bkey *bset_bkey_idx(struct bset *i, unsigned int idx)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1226,6 +1226,9 @@ static void cached_dev_free(struct closure *cl)
|
|||
|
||||
mutex_unlock(&bch_register_lock);
|
||||
|
||||
if (dc->sb_bio.bi_inline_vecs[0].bv_page)
|
||||
put_page(bio_first_page_all(&dc->sb_bio));
|
||||
|
||||
if (!IS_ERR_OR_NULL(dc->bdev))
|
||||
blkdev_put(dc->bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL);
|
||||
|
||||
|
|
|
|||
|
|
@ -431,10 +431,12 @@ static int mt9v032_enum_mbus_code(struct v4l2_subdev *subdev,
|
|||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
|
||||
|
||||
if (code->index > 0)
|
||||
return -EINVAL;
|
||||
|
||||
code->code = MEDIA_BUS_FMT_SGRBG10_1X10;
|
||||
code->code = mt9v032->format.code;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -442,7 +444,11 @@ static int mt9v032_enum_frame_size(struct v4l2_subdev *subdev,
|
|||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index >= 3 || fse->code != MEDIA_BUS_FMT_SGRBG10_1X10)
|
||||
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
|
||||
|
||||
if (fse->index >= 3)
|
||||
return -EINVAL;
|
||||
if (mt9v032->format.code != fse->code)
|
||||
return -EINVAL;
|
||||
|
||||
fse->min_width = MT9V032_WINDOW_WIDTH_DEF / (1 << fse->index);
|
||||
|
|
|
|||
|
|
@ -811,6 +811,25 @@ struct cx23885_board cx23885_boards[] = {
|
|||
.name = "Hauppauge WinTV-Starburst2",
|
||||
.portb = CX23885_MPEG_DVB,
|
||||
},
|
||||
[CX23885_BOARD_AVERMEDIA_CE310B] = {
|
||||
.name = "AVerMedia CE310B",
|
||||
.porta = CX23885_ANALOG_VIDEO,
|
||||
.force_bff = 1,
|
||||
.input = {{
|
||||
.type = CX23885_VMUX_COMPOSITE1,
|
||||
.vmux = CX25840_VIN1_CH1 |
|
||||
CX25840_NONE_CH2 |
|
||||
CX25840_NONE0_CH3,
|
||||
.amux = CX25840_AUDIO7,
|
||||
}, {
|
||||
.type = CX23885_VMUX_SVIDEO,
|
||||
.vmux = CX25840_VIN8_CH1 |
|
||||
CX25840_NONE_CH2 |
|
||||
CX25840_VIN7_CH3 |
|
||||
CX25840_SVIDEO_ON,
|
||||
.amux = CX25840_AUDIO7,
|
||||
} },
|
||||
},
|
||||
};
|
||||
const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards);
|
||||
|
||||
|
|
@ -1134,6 +1153,10 @@ struct cx23885_subid cx23885_subids[] = {
|
|||
.subvendor = 0x0070,
|
||||
.subdevice = 0xf02a,
|
||||
.card = CX23885_BOARD_HAUPPAUGE_STARBURST2,
|
||||
}, {
|
||||
.subvendor = 0x1461,
|
||||
.subdevice = 0x3100,
|
||||
.card = CX23885_BOARD_AVERMEDIA_CE310B,
|
||||
},
|
||||
};
|
||||
const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids);
|
||||
|
|
@ -2358,6 +2381,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
|
|||
case CX23885_BOARD_DVBSKY_T982:
|
||||
case CX23885_BOARD_VIEWCAST_260E:
|
||||
case CX23885_BOARD_VIEWCAST_460E:
|
||||
case CX23885_BOARD_AVERMEDIA_CE310B:
|
||||
dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev,
|
||||
&dev->i2c_bus[2].i2c_adap,
|
||||
"cx25840", 0x88 >> 1, NULL);
|
||||
|
|
|
|||
|
|
@ -268,7 +268,8 @@ static int cx23885_video_mux(struct cx23885_dev *dev, unsigned int input)
|
|||
(dev->board == CX23885_BOARD_MYGICA_X8507) ||
|
||||
(dev->board == CX23885_BOARD_AVERMEDIA_HC81R) ||
|
||||
(dev->board == CX23885_BOARD_VIEWCAST_260E) ||
|
||||
(dev->board == CX23885_BOARD_VIEWCAST_460E)) {
|
||||
(dev->board == CX23885_BOARD_VIEWCAST_460E) ||
|
||||
(dev->board == CX23885_BOARD_AVERMEDIA_CE310B)) {
|
||||
/* Configure audio routing */
|
||||
v4l2_subdev_call(dev->sd_cx25840, audio, s_routing,
|
||||
INPUT(input)->amux, 0, 0);
|
||||
|
|
|
|||
|
|
@ -111,6 +111,7 @@
|
|||
#define CX23885_BOARD_HAUPPAUGE_STARBURST2 59
|
||||
#define CX23885_BOARD_HAUPPAUGE_QUADHD_DVB_885 60
|
||||
#define CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC_885 61
|
||||
#define CX23885_BOARD_AVERMEDIA_CE310B 62
|
||||
|
||||
#define GPIO_0 0x00000001
|
||||
#define GPIO_1 0x00000002
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@
|
|||
#define MAX_SRC_WIDTH 2048
|
||||
|
||||
/* Reset & boot poll config */
|
||||
#define POLL_RST_MAX 50
|
||||
#define POLL_RST_DELAY_MS 20
|
||||
#define POLL_RST_MAX 500
|
||||
#define POLL_RST_DELAY_MS 2
|
||||
|
||||
enum bdisp_target_plan {
|
||||
BDISP_RGB,
|
||||
|
|
@ -382,7 +382,7 @@ int bdisp_hw_reset(struct bdisp_dev *bdisp)
|
|||
for (i = 0; i < POLL_RST_MAX; i++) {
|
||||
if (readl(bdisp->regs + BLT_STA1) & BLT_STA1_IDLE)
|
||||
break;
|
||||
msleep(POLL_RST_DELAY_MS);
|
||||
udelay(POLL_RST_DELAY_MS * 1000);
|
||||
}
|
||||
if (i == POLL_RST_MAX)
|
||||
dev_err(bdisp->dev, "Reset timeout\n");
|
||||
|
|
|
|||
|
|
@ -2013,10 +2013,10 @@ static int enic_stop(struct net_device *netdev)
|
|||
napi_disable(&enic->napi[i]);
|
||||
|
||||
netif_carrier_off(netdev);
|
||||
netif_tx_disable(netdev);
|
||||
if (vnic_dev_get_intr_mode(enic->vdev) == VNIC_DEV_INTR_MODE_MSIX)
|
||||
for (i = 0; i < enic->wq_count; i++)
|
||||
napi_disable(&enic->napi[enic_cq_wq(enic, i)]);
|
||||
netif_tx_disable(netdev);
|
||||
|
||||
if (!enic_is_dynamic(enic) && !enic_is_sriov_vf(enic))
|
||||
enic_dev_del_station_addr(enic);
|
||||
|
|
|
|||
|
|
@ -2685,13 +2685,17 @@ static void gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)
|
|||
skb_dirtytx = tx_queue->skb_dirtytx;
|
||||
|
||||
while ((skb = tx_queue->tx_skbuff[skb_dirtytx])) {
|
||||
bool do_tstamp;
|
||||
|
||||
do_tstamp = (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
|
||||
priv->hwts_tx_en;
|
||||
|
||||
frags = skb_shinfo(skb)->nr_frags;
|
||||
|
||||
/* When time stamping, one additional TxBD must be freed.
|
||||
* Also, we need to dma_unmap_single() the TxPAL.
|
||||
*/
|
||||
if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS))
|
||||
if (unlikely(do_tstamp))
|
||||
nr_txbds = frags + 2;
|
||||
else
|
||||
nr_txbds = frags + 1;
|
||||
|
|
@ -2705,7 +2709,7 @@ static void gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)
|
|||
(lstatus & BD_LENGTH_MASK))
|
||||
break;
|
||||
|
||||
if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)) {
|
||||
if (unlikely(do_tstamp)) {
|
||||
next = next_txbd(bdp, base, tx_ring_size);
|
||||
buflen = be16_to_cpu(next->length) +
|
||||
GMAC_FCB_LEN + GMAC_TXPAL_LEN;
|
||||
|
|
@ -2715,7 +2719,7 @@ static void gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)
|
|||
dma_unmap_single(priv->dev, be32_to_cpu(bdp->bufPtr),
|
||||
buflen, DMA_TO_DEVICE);
|
||||
|
||||
if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)) {
|
||||
if (unlikely(do_tstamp)) {
|
||||
struct skb_shared_hwtstamps shhwtstamps;
|
||||
u64 *ns = (u64 *)(((uintptr_t)skb->data + 0x10) &
|
||||
~0x7UL);
|
||||
|
|
|
|||
|
|
@ -211,6 +211,9 @@ void mlx5e_grp_sw_update_stats(struct mlx5e_priv *priv)
|
|||
s->tx_tls_resync_bytes += sq_stats->tls_resync_bytes;
|
||||
#endif
|
||||
s->tx_cqes += sq_stats->cqes;
|
||||
|
||||
/* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92657 */
|
||||
barrier();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -215,7 +215,7 @@ mlxsw_sp_dpipe_table_erif_entries_dump(void *priv, bool counters_enabled,
|
|||
start_again:
|
||||
err = devlink_dpipe_entry_ctx_prepare(dump_ctx);
|
||||
if (err)
|
||||
return err;
|
||||
goto err_ctx_prepare;
|
||||
j = 0;
|
||||
for (; i < rif_count; i++) {
|
||||
struct mlxsw_sp_rif *rif = mlxsw_sp_rif_by_index(mlxsw_sp, i);
|
||||
|
|
@ -247,6 +247,7 @@ mlxsw_sp_dpipe_table_erif_entries_dump(void *priv, bool counters_enabled,
|
|||
return 0;
|
||||
err_entry_append:
|
||||
err_entry_get:
|
||||
err_ctx_prepare:
|
||||
rtnl_unlock();
|
||||
devlink_dpipe_entry_clear(&entry);
|
||||
return err;
|
||||
|
|
|
|||
|
|
@ -7433,6 +7433,15 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
int chipset, region, i;
|
||||
int jumbo_max, rc;
|
||||
|
||||
/* Some tools for creating an initramfs don't consider softdeps, then
|
||||
* r8169.ko may be in initramfs, but realtek.ko not. Then the generic
|
||||
* PHY driver is used that doesn't work with most chip versions.
|
||||
*/
|
||||
if (!driver_find("RTL8201CP Ethernet", &mdio_bus_type)) {
|
||||
dev_err(&pdev->dev, "realtek.ko not loaded, maybe it needs to be added to initramfs?\n");
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
dev = devm_alloc_etherdev(&pdev->dev, sizeof (*tp));
|
||||
if (!dev)
|
||||
return -ENOMEM;
|
||||
|
|
|
|||
|
|
@ -242,6 +242,11 @@ static int uhdlc_init(struct ucc_hdlc_private *priv)
|
|||
ret = -ENOMEM;
|
||||
goto free_riptr;
|
||||
}
|
||||
if (riptr != (u16)riptr || tiptr != (u16)tiptr) {
|
||||
dev_err(priv->dev, "MURAM allocation out of addressable range\n");
|
||||
ret = -ENOMEM;
|
||||
goto free_tiptr;
|
||||
}
|
||||
|
||||
/* Set RIPTR, TIPTR */
|
||||
iowrite16be(riptr, &priv->ucc_pram->riptr);
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user