Linux 5.16.15
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.16.15 kernel.
All users of the 5.16 kernel series must upgrade.
The updated 5.16.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.16.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi | 2 arch/arm/boot/dts/bcm2711.dtsi | 1 arch/arm/include/asm/spectre.h | 6 arch/arm/kernel/entry-armv.S | 4 arch/arm64/Kconfig | 3 arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts | 8 arch/arm64/boot/dts/marvell/armada-37xx.dtsi | 2 arch/arm64/boot/dts/qcom/sm8350.dtsi | 48 +- arch/arm64/include/asm/mte-kasan.h | 1 arch/arm64/include/asm/pgtable-prot.h | 4 arch/arm64/include/asm/pgtable.h | 11 arch/arm64/mm/mmap.c | 17 arch/riscv/Kconfig.erratas | 1 arch/riscv/Kconfig.socs | 4 arch/riscv/boot/dts/canaan/k210.dtsi | 3 arch/riscv/kernel/module.c | 21 arch/x86/kernel/cpu/sgx/encl.c | 57 ++ arch/x86/kernel/e820.c | 41 + arch/x86/kernel/kdebugfs.c | 37 + arch/x86/kernel/ksysfs.c | 77 ++- arch/x86/kernel/kvm.c | 9 arch/x86/kernel/module.c | 13 arch/x86/kernel/setup.c | 34 + arch/x86/kernel/traps.c | 1 arch/x86/kvm/x86.c | 7 arch/x86/mm/ioremap.c | 57 ++ drivers/block/virtio_blk.c | 20 drivers/clk/qcom/dispcc-sc7180.c | 5 drivers/clk/qcom/dispcc-sc7280.c | 5 drivers/clk/qcom/dispcc-sm8250.c | 5 drivers/clk/qcom/gdsc.c | 26 - drivers/clk/qcom/gdsc.h | 8 drivers/gpio/gpio-ts4900.c | 24 - drivers/gpio/gpiolib-acpi.c | 6 drivers/gpio/gpiolib.c | 20 drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 2 drivers/gpu/drm/i915/display/intel_psr.c | 16 drivers/gpu/drm/i915/i915_reg.h | 1 drivers/gpu/drm/panel/Kconfig | 1 drivers/gpu/drm/sun4i/sun8i_mixer.h | 8 drivers/gpu/drm/vc4/vc4_hdmi.c | 8 drivers/gpu/drm/vc4/vc4_hdmi.h | 1 drivers/hid/hid-elo.c | 7 drivers/hid/hid-nintendo.c | 4 drivers/hid/hid-thrustmaster.c | 6 drivers/hid/hid-vivaldi.c | 2 drivers/hwmon/pmbus/pmbus_core.c | 5 drivers/isdn/hardware/mISDN/hfcpci.c | 6 drivers/isdn/mISDN/dsp_pipeline.c | 6 drivers/mmc/host/meson-gx-mmc.c | 15 drivers/net/dsa/mt7530.c | 2 drivers/net/ethernet/arc/emac_mdio.c | 5 drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c | 7 drivers/net/ethernet/cadence/macb_main.c | 25 + drivers/net/ethernet/freescale/gianfar_ethtool.c | 1 drivers/net/ethernet/intel/i40e/i40e_debugfs.c | 6 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 57 -- drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h | 5 drivers/net/ethernet/intel/iavf/iavf_virtchnl.c | 40 + drivers/net/ethernet/intel/ice/ice.h | 1 drivers/net/ethernet/intel/ice/ice_ethtool.c | 2 drivers/net/ethernet/intel/ice/ice_main.c | 31 - drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c | 18 drivers/net/ethernet/intel/ice/ice_virtchnl_pf.h | 3 drivers/net/ethernet/marvell/prestera/prestera_main.c | 1 drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 15 drivers/net/ethernet/mellanox/mlx5/core/en/tir.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 3 drivers/net/ethernet/mellanox/mlx5/core/lag/mp.c | 11 drivers/net/ethernet/mellanox/mlx5/core/lib/fs_chains.c | 3 drivers/net/ethernet/nxp/lpc_eth.c | 5 drivers/net/ethernet/qlogic/qed/qed_sriov.c | 18 drivers/net/ethernet/qlogic/qed/qed_vf.c | 7 drivers/net/ethernet/ti/cpts.c | 4 drivers/net/ethernet/xilinx/xilinx_emaclite.c | 4 drivers/net/hamradio/6pack.c | 4 drivers/net/phy/dp83822.c | 2 drivers/net/phy/meson-gxl.c | 31 - drivers/net/usb/smsc95xx.c | 28 - drivers/net/xen-netback/xenbus.c | 14 drivers/nfc/port100.c | 2 drivers/nvme/host/tcp.c | 63 ++ drivers/of/fdt.c | 2 drivers/pci/quirks.c | 14 drivers/pinctrl/intel/pinctrl-tigerlake.c | 1 drivers/soc/mediatek/mt8192-mmsys.h | 3 drivers/spi/spi-rockchip.c | 13 drivers/staging/gdm724x/gdm_lte.c | 5 drivers/staging/rtl8723bs/core/rtw_mlme_ext.c | 7 drivers/staging/rtl8723bs/core/rtw_recv.c | 10 drivers/staging/rtl8723bs/core/rtw_sta_mgt.c | 22 drivers/staging/rtl8723bs/core/rtw_xmit.c | 16 drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c | 2 drivers/usb/dwc3/dwc3-pci.c | 4 drivers/vdpa/mlx5/net/mlx5_vnet.c | 16 drivers/vdpa/vdpa_user/iova_domain.c | 2 drivers/vdpa/virtio_pci/vp_vdpa.c | 2 drivers/vhost/iotlb.c | 11 drivers/vhost/vhost.c | 7 drivers/virtio/virtio.c | 40 - fs/btrfs/block-group.c | 9 fs/btrfs/ctree.c | 98 +++- fs/btrfs/ctree.h | 14 fs/btrfs/disk-io.c | 4 fs/btrfs/relocation.c | 13 fs/btrfs/send.c | 357 +++++++++++++--- fs/btrfs/transaction.c | 4 fs/fuse/dev.c | 12 fs/fuse/file.c | 1 fs/fuse/fuse_i.h | 1 fs/fuse/ioctl.c | 9 fs/pipe.c | 11 include/linux/mlx5/mlx5_ifc.h | 5 include/linux/netdevice.h | 1 include/linux/nvme-tcp.h | 1 include/linux/virtio.h | 1 include/linux/virtio_config.h | 3 include/linux/watch_queue.h | 3 include/net/esp.h | 2 kernel/dma/swiotlb.c | 22 kernel/trace/trace.c | 10 kernel/trace/trace_osnoise.c | 84 ++- kernel/trace/trace_selftest.c | 6 kernel/watch_queue.c | 15 mm/gup.c | 57 -- net/ax25/af_ax25.c | 7 net/core/net-sysfs.c | 2 net/core/skbuff.c | 26 - net/ipv4/esp4.c | 5 net/ipv4/esp4_offload.c | 3 net/ipv4/udp_offload.c | 27 + net/ipv6/addrconf.c | 2 net/ipv6/esp6.c | 5 net/ipv6/esp6_offload.c | 3 net/sctp/diag.c | 9 net/tipc/bearer.c | 12 net/tipc/link.c | 9 tools/perf/util/parse-events.c | 6 tools/testing/selftests/bpf/prog_tests/timer_crash.c | 32 + tools/testing/selftests/bpf/progs/timer_crash.c | 54 ++ tools/testing/selftests/memfd/memfd_test.c | 1 tools/testing/selftests/net/pmtu.sh | 21 tools/testing/selftests/vm/map_fixed_noreplace.c | 49 +- virt/kvm/kvm_main.c | 4 145 files changed, 1651 insertions(+), 645 deletions(-)
Alex Deucher (1):
PCI: Mark all AMD Navi10 and Navi14 GPU ATS as broken
Alexey Khoroshilov (1):
mISDN: Fix memory leak in dsp_pipeline_build()
Andy Shevchenko (2):
gpiolib: acpi: Convert ACPI value of debounce to microseconds
pinctrl: tigerlake: Revert "Add Alder Lake-M ACPI ID"
Aneesh Kumar K.V (1):
selftest/vm: fix map_fixed_noreplace test failure
AngeloGioacchino Del Regno (1):
soc: mediatek: mt8192-mmsys: Fix dither to dsi0 path's input sel
Anirudh Rayabharam (1):
vhost: fix hung thread due to erroneous iotlb entries
Anton Romanov (1):
kvm: x86: Disable KVM_HC_CLOCK_PAIRING if tsc is in always catchup mode
Ben Ben-Ishay (1):
net/mlx5e: SHAMPO, reduce TIR indication
Bjorn Andersson (1):
arm64: dts: qcom: sm8350: Correct UFS symbol clocks
Catalin Marinas (1):
arm64: Ensure execute-only permissions are not allowed without EPAN
Christophe JAILLET (1):
ice: Don't use GFP_KERNEL in atomic context
Christophe Leroy (1):
tracing: Fix selftest config check for function graph start up test
Clément Léger (1):
net: phy: DP83822: clear MISR2 register to disable interrupts
Dan Carpenter (1):
staging: gdm724x: fix use after free in gdm_lte_rx()
Daniel Bristot de Oliveira (2):
tracing/osnoise: Make osnoise_main to sleep for microseconds tracing/osnoise: Do not unregister events twice
Dave Ertman (1):
ice: Fix error with handling of bonding MTU
David Howells (8):
watch_queue: Fix filter limit check
watch_queue, pipe: Free watchqueue state after clearing pipe ring
watch_queue: Fix to release page in ->release()
watch_queue: Fix to always request a pow-of-2 pipe ring size
watch_queue: Fix the alloc bitmap size to reflect notes allocated
watch_queue: Free the alloc bitmap when the watch_queue is torn down
watch_queue: Fix lack of barrier/sync/lock between post and read
watch_queue: Make comment about setting ->defunct more accurate
Dima Chumak (1):
net/mlx5: Fix offloading with ESWITCH_IPV4_TTL_MODIFY_ENABLE
Dmitry Torokhov (1):
HID: vivaldi: fix sysfs attributes leak
Duoming Zhou (2):
ax25: Fix NULL pointer dereference in ax25_kill_by_device
drivers: hamradio: 6pack: fix UAF bug caused by mod_timer()
Emil Renner Berthing (1):
riscv: Fix auipc+jalr relocation range checks
Eric Dumazet (2):
net: gro: move skb_gro_receive_list to udp_offload.c
sctp: fix kernel-infoleak for SCTP sockets
Fabio Estevam (1):
smsc95xx: Ignore -ENODEV errors when device is unplugged
Filipe Manana (1):
btrfs: make send work with concurrent block group relocation
Greg Kroah-Hartman (1):
Linux 5.16.15
Guchun Chen (1):
drm/amdgpu: bypass tiling flag check in virtual display case (v2)
Guillaume Nault (2):
selftests: pmtu.sh: Kill tcpdump processes launched by subshell.
selftests: pmtu.sh: Kill nettest processes launched in subshell.
Halil Pasic (2):
swiotlb: fix info leak with DMA_FROM_DEVICE
swiotlb: rework "fix info leak with DMA_FROM_DEVICE"
Hans de Goede (1):
staging: rtl8723bs: Fix access-point mode deadlock
Heikki Krogerus (1):
usb: dwc3: pci: add support for the Intel Raptor Lake-S
Heiner Kallweit (2):
net: phy: meson-gxl: fix interrupt handling in forced mode
net: phy: meson-gxl: improve link-up behavior
Jacob Keller (2):
i40e: stop disabling VFs due to PF error responses
ice: stop disabling VFs due to PF error responses
Jarkko Sakkinen (1):
x86/sgx: Free backing memory after faulting the enclave page
Jason Wang (1):
vhost: allow batching hint without size
Jedrzej Jagielski (1):
ice: Fix curr_link_speed advertised speed
Jeremy Linton (1):
net: bcmgenet: Don't claim WOL when its not available
Jernej Skrabec (1):
drm/sun4i: mixer: Fix P010 and P210 format numbers
Jia-Ju Bai (3):
HID: nintendo: check the return value of alloc_workqueue()
isdn: hfcpci: check the return value of dma_set_mask() in setup_hw()
net: qlogic: check the return value of dma_alloc_coherent() in qed_vf_hw_prepare()
Jianglei Nie (1):
net: arc_emac: Fix use after free in arc_mdio_probe()
Jiasheng Jiang (2):
net: ethernet: ti: cpts: Handle error for clk_enable
net: ethernet: lpc_eth: Handle error for clk_enable
Jiri Kosina (1):
HID: elo: Revert USB reference counting
Jisheng Zhang (1):
riscv: alternative only works on !XIP_KERNEL
Joel Stanley (1):
ARM: dts: aspeed: Fix AST2600 quad spi group
Jon Lin (2):
spi: rockchip: Fix error in getting num-cs property
spi: rockchip: terminate dma transmission when slave abort
Jouni Högander (1):
drm/i915/psr: Set "SF Partial Frame Enable" also on full update
Konrad Dybcio (1):
arm64: dts: qcom: sm8350: Describe GCC dependency clocks
Kumar Kartikeya Dwivedi (1):
selftests/bpf: Add test for bpf_timer overwriting crash
Li Huafei (1):
x86/traps: Mark do_int3() NOKPROBE_SYMBOL
Linus Torvalds (1):
mm: gup: make fault_in_safe_writeable() use fixup_user_fault()
Marek Marczykowski-Górecki (2):
Revert "xen-netback: remove 'hotplug-status' once it has served its purpose" Revert "xen-netback: Check for hotplug-status existence before watching"
Mark Featherston (1):
gpio: ts4900: Do not set DAT and OE together
Maxime Ripard (2):
ARM: boot: dts: bcm2711: Fix HVS register range drm/vc4: hdmi: Unregister codec device on unbind
Miaoqian Lin (3):
ethernet: Fix error handling in xemaclite_of_probe
net: marvell: prestera: Add missing of_node_put() in prestera_switch_set_base_mac_addr
gianfar: ethtool: Fix refcount leak in gfar_get_ts_info
Michael S. Tsirkin (2):
virtio: unexport virtio_finalize_features
virtio: acknowledge all features before access
Michal Maloszewski (1):
iavf: Fix handling of vlan strip virtual channel messages
Mike Kravetz (1):
selftests/memfd: clean up mapping in mfd_fail_write
Miklos Szeredi (2):
fuse: fix fileattr op failure
fuse: fix pipe buffer lifetime for direct_io
Mohammad Kabat (1):
net/mlx5: Fix size field in bufferx_reg struct
Moshe Shemesh (1):
net/mlx5: Fix a race on command flush flow
Nicolas Saenz Julienne (1):
tracing/osnoise: Force quiescent states while tracing
Niels Dossche (1):
ipv6: prevent a possible race condition with lifetimes
Nikhil Gupta (1):
of/fdt: move elfcorehdr reservation early for crash dump kernel
Niklas Cassel (1):
riscv: dts: k210: fix broken IRQs on hart1
Pali Rohár (2):
arm64: dts: armada-3720-turris-mox: Add missing ethernet0 alias
arm64: dts: marvell: armada-37xx: Remap IO space to bus address 0x0
Paul Semel (1):
arm64: kasan: fix include error in MTE functions
Pavel Skripkin (2):
HID: hid-thrustmaster: fix OOB read in thrustmaster_interrupts
NFC: port100: fix use-after-free in port100_send_complete
Peter Zijlstra (1):
x86/module: Fix the paravirt vs alternative order
Randy Dunlap (1):
ARM: Spectre-BHB: provide empty stub for non-config
Robert Hancock (1):
net: macb: Fix lost RX packet wakeup race in NAPI receive
Roi Dayan (1):
net/mlx5e: Lag, Only handle events from highest priority multipath entry
Rong Chen (1):
mmc: meson: Fix usage of meson_mmc_post_req()
Ross Philipson (2):
x86/boot: Fix memremap of setup_indirect structures x86/boot: Add setup_indirect support in early_memremap_is_setup_data()
Russell King (Oracle) (2):
net: dsa: mt7530: fix incorrect test in mt753x_phylink_validate()
ARM: fix Thumb2 regression with Spectre BHB
Shreeya Patel (1):
gpio: Return EPROBE_DEFER if gc->to_irq is NULL
Si-Wei Liu (1):
vdpa/mlx5: add validation for VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET command
Steffen Klassert (2):
esp: Fix possible buffer overflow in ESP transformation
esp: Fix BEET mode inter address family tunneling on GSO
Sven Schnelle (1):
tracing: Ensure trace buffer is at least 4096 bytes large
Taniya Das (2):
clk: qcom: gdsc: Add support to update GDSC transition delay
clk: qcom: dispcc: Update the transition delay for MDSS GDSC
Thomas Zimmermann (1):
drm/panel: Select DRM_DP_HELPER for DRM_PANEL_EDP
Tom Rix (1):
qed: return status of qed_iov_get_link
Tung Nguyen (2):
tipc: fix kernel panic when enabling bearer
tipc: fix incorrect order of state message data sanity check
Varun Prakash (1):
nvme-tcp: send H2CData PDUs based on MAXH2CDATA
Vikash Chandola (1):
hwmon: (pmbus) Clear pmbus fault/warning bits after read
Wanpeng Li (2):
KVM: Fix lockdep false negative during host resume x86/kvm: Don't use pv tlb/ipi/sched_yield if on 1 vCPU
Xie Yongji (3):
vduse: Fix returning wrong type in vduse_domain_alloc_iova()
virtio-blk: Don't use MAX_DISCARD_SEGMENTS if max_discard_seg is zero
virtio-blk: Remove BUG_ON() in virtio_queue_rq()
Zhang Min (1):
vdpa: fix use-after-free on vp_vdpa_remove
Zhengjun Xing (1):
perf parse: Fix event parser error for hybrid systems
suresh kumar (1):
net-sysfs: add check for netdevice being present to speed_show
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 16 -SUBLEVEL = 14 +SUBLEVEL = 15 EXTRAVERSION = NAME = Gobble Gobble
arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi +1 -1
@@ -118,7 +118,7 @@ pinctrl_fwspid_default: fwspid_default { }; pinctrl_fwqspid_default: fwqspid_default { - function = "FWQSPID"; + function = "FWSPID"; groups = "FWQSPID"; };
arch/arm/boot/dts/bcm2711.dtsi +1 -0
@@ -290,6 +290,7 @@ pixelvalve4: pixelvalve@7e216000 { hvs: hvs@7e400000 { compatible = "brcm,bcm2711-hvs"; + reg = <0x7e400000 0x8000>; interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>; };
arch/arm/include/asm/spectre.h +6 -0
@@ -25,7 +25,13 @@ enum { SPECTRE_V2_METHOD_LOOP8 = BIT(__SPECTRE_V2_METHOD_LOOP8), }; +#ifdef CONFIG_GENERIC_CPU_VULNERABILITIES void spectre_v2_update_state (unsigned int state,unsigned int methods); +#else +static inline void spectre_v2_update_state (unsigned int state, +unsigned int methods) +{} +#endif int spectre_bhb_update_vectors (unsigned int method);
arch/arm/kernel/entry-armv.S +2 -2
@@ -1040,9 +1040,9 @@ vector_bhb_loop8_\name: @ bhb workaround mov r0, #8 -1: b . + 4 +3: b . + 4 subs r0, r0, #1 - bne 1b + bne 3b dsb isb b 2b
arch/arm64/Kconfig +0 -3
@@ -1264,9 +1264,6 @@ config HW_PERF_EVENTS def_bool y depends on ARM_PMU -config ARCH_HAS_FILTER_PGPROT - def_bool y - # Supported by clang >= 7.0 config CC_HAVE_SHADOW_CALL_STACK def_bool $(cc-option, -fsanitize=shadow-call-stack -ffixed-x18)
arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts +7 -1
@@ -18,6 +18,7 @@ / { aliases { spi0 = &spi0; + ethernet0 = ð0; ethernet1 = ð1; mmc0 = &sdhci0; mmc1 = &sdhci1;
@@ -138,7 +139,9 @@ &pcie0 { /* * U-Boot port for Turris Mox has a bug which always expects that "ranges" DT property * contains exactly 2 ranges with 3 (child) address cells, 2 (parent) address cells and - * 2 size cells and also expects that the second range starts at 16 MB offset. If these + * 2 size cells and also expects that the second range starts at 16 MB offset. Also it + * expects that first range uses same address for PCI (child) and CPU (parent) cells (so + * no remapping) and that this address is the lowest from all specified ranges. If these * conditions are not met then U-Boot crashes during loading kernel DTB file. PCIe address * space is 128 MB long, so the best split between MEM and IO is to use fixed 16 MB window * for IO and the rest 112 MB (64+32+16) for MEM, despite that maximal IO size is just 64 kB.
@@ -147,6 +150,9 @@ &pcie0 { * https://source.denx.de/u-boot/u-boot/-/commit/cb2ddb291ee6fcbddd6d8f4ff49089dfe580f5d7 * https://source.denx.de/u-boot/u-boot/-/commit/c64ac3b3185aeb3846297ad7391fc6df8ecd73bf * https://source.denx.de/u-boot/u-boot/-/commit/4a82fca8e330157081fc132a591ebd99ba02ee33 + * Bug related to requirement of same child and parent addresses for first range is fixed + * in U-Boot version 2022.04 by following commit: + * https://source.denx.de/u-boot/u-boot/-/commit/1fd54253bca7d43d046bba4853fe5fafd034bc17 */ #address-cells = <3>; #size-cells = <2>;
arch/arm64/boot/dts/marvell/armada-37xx.dtsi +1 -1
@@ -497,7 +497,7 @@ pcie0: pcie@d0070000 { * (totaling 127 MiB) for MEM. */ ranges = <0x82000000 0 0xe8000000 0 0xe8000000 0 0x07f00000 /* Port 0 MEM */ - 0x81000000 0 0xefff0000 0 0xefff0000 0 0x00010000>; /* Port 0 IO */ + 0x81000000 0 0x00000000 0 0xefff0000 0 0x00010000>; /* Port 0 IO */ interrupt-map-mask = <0 0 0 7>; interrupt-map = <0 0 0 1 &pcie_intc 0>, <0 0 0 2 &pcie_intc 1>,
arch/arm64/boot/dts/qcom/sm8350.dtsi +44 -4
66 lines not on this page · raw message
arch/arm64/include/asm/mte-kasan.h +1 -0
@@ -5,6 +5,7 @@#ifndef __ASM_MTE_KASAN_H#define __ASM_MTE_KASAN_H +#include <asm/compiler.h> #include <asm/mte-def.h> #ifndef __ASSEMBLY__
arch/arm64/include/asm/pgtable-prot.h +2 -2
@@ -92,7 +92,7 @@ extern bool arm64_use_ng_mappings;#define __P001 PAGE_READONLY#define __P010 PAGE_READONLY#define __P011 PAGE_READONLY -#define __P100 PAGE_EXECONLY +#define __P100 PAGE_READONLY_EXEC/* PAGE_EXECONLY if Enhanced PAN */ #define __P101 PAGE_READONLY_EXEC#define __P110 PAGE_READONLY_EXEC#define __P111 PAGE_READONLY_EXEC
@@ -101,7 +101,7 @@ extern bool arm64_use_ng_mappings;#define __S001 PAGE_READONLY#define __S010 PAGE_SHARED#define __S011 PAGE_SHARED -#define __S100 PAGE_EXECONLY +#define __S100 PAGE_READONLY_EXEC/* PAGE_EXECONLY if Enhanced PAN */ #define __S101 PAGE_READONLY_EXEC#define __S110 PAGE_SHARED_EXEC#define __S111 PAGE_SHARED_EXEC
arch/arm64/include/asm/pgtable.h +0 -11
@@ -1017,17 +1017,6 @@ static inline bool arch_wants_old_prefaulted_pte(void) }#define arch_wants_old_prefaulted_pte arch_wants_old_prefaulted_pte -static inline pgprot_t arch_filter_pgprot (pgprot_t prot) -{ -if (cpus_have_const_cap (ARM64_HAS_EPAN )) -return prot; - -if (pgprot_val (prot) !=pgprot_val (PAGE_EXECONLY )) -return prot; - -return PAGE_READONLY_EXEC ; -} -static inline bool pud_sect_supported (void ) {return PAGE_SIZE ==SZ_4K ;
arch/arm64/mm/mmap.c +17 -0
@@ -7,8 +7,10 @@#include <linux/io.h> #include <linux/memblock.h> +#include <linux/mm.h> #include <linux/types.h> +#include <asm/cpufeature.h> #include <asm/page.h> /*
@@ -38,3 +40,18 @@ int valid_mmap_phys_addr_range(unsigned long pfn, size_t size) {return !(((pfn <<PAGE_SHIFT ) + size) & ~PHYS_MASK ); } + +static int __init adjust_protection_map (void ) +{ +/* +* With Enhanced PAN we can honour the execute-only permissions as +* there is no PAN override with such mappings. +*/ +if (cpus_have_const_cap (ARM64_HAS_EPAN )) { + protection_map[VM_EXEC ] =PAGE_EXECONLY ; + protection_map[VM_EXEC |VM_SHARED ] =PAGE_EXECONLY ; + } + +return 0 ; +} +arch_initcall (adjust_protection_map);
arch/riscv/Kconfig.erratas +1 -0
@@ -2,6 +2,7 @@ menu "CPU errata selection" config RISCV_ERRATA_ALTERNATIVE bool "RISC-V alternative scheme" + depends on !XIP_KERNEL default y help This Kconfig allows the kernel to automatically patch the
arch/riscv/Kconfig.socs +2 -2
@@ -14,8 +14,8 @@ config SOC_SIFIVE select CLK_SIFIVE select CLK_SIFIVE_PRCI select SIFIVE_PLIC - select RISCV_ERRATA_ALTERNATIVE - select ERRATA_SIFIVE + select RISCV_ERRATA_ALTERNATIVE if !XIP_KERNEL + select ERRATA_SIFIVE if !XIP_KERNEL help This enables support for SiFive SoC platform hardware.
arch/riscv/boot/dts/canaan/k210.dtsi +2 -1
@@ -113,7 +113,8 @@ plic0: interrupt-controller@c000000 { compatible = "canaan,k210-plic", "sifive,plic-1.0.0"; reg = <0xC000000 0x4000000>; interrupt-controller; - interrupts-extended = <&cpu0_intc 11 &cpu1_intc 11>; + interrupts-extended = <&cpu0_intc 11>, <&cpu0_intc 9>, + <&cpu1_intc 11>, <&cpu1_intc 9>; riscv,ndev = <65>; };
arch/riscv/kernel/module.c +16 -5
@@ -13,6 +13,19 @@#include <linux/pgtable.h> #include <asm/sections.h> +/* +* The auipc+jalr instruction pair can reach any PC-relative offset +* in the range [-2^31 - 2^11, 2^31 - 2^11) +*/ +static bool riscv_insn_valid_32bit_offset (ptrdiff_t val) +{ +#ifdef CONFIG_32BIT +return true; +#else +return (-(1L <<31 ) - (1L <<11 )) <= val && val < ((1L <<31 ) - (1L <<11 )); +#endif +} +static int apply_r_riscv_32_rela (struct module *me,u32 *location,Elf_Addr v) {if (v != (u32 )v) {
@@ -95,7 +108,7 @@ static int apply_r_riscv_pcrel_hi20_rela(struct module *me, u32 *location,ptrdiff_t offset = (void *)v - (void *)location;s32 hi20; -if (offset != (s32 )offset) { +if (!riscv_insn_valid_32bit_offset (offset)) {pr_err ("%s: target %016llx can not be addressed by the 32-bit offset from PC = %p\n" , me->name, (long long )v, location);
@@ -197,10 +210,9 @@ static int apply_r_riscv_call_plt_rela(struct module *me, u32 *location, Elf_Addr v) {ptrdiff_t offset = (void *)v - (void *)location; -s32 fill_v = offset;u32 hi20, lo12; -if (offset != fill_v) { +if (!riscv_insn_valid_32bit_offset (offset)) {/* Only emit the plt entry if offset over 32-bit range */ if (IS_ENABLED (CONFIG_MODULE_SECTIONS )) { offset =module_emit_plt_entry (me, v);
@@ -224,10 +236,9 @@ static int apply_r_riscv_call_rela(struct module *me, u32 *location, Elf_Addr v) {ptrdiff_t offset = (void *)v - (void *)location; -s32 fill_v = offset;u32 hi20, lo12; -if (offset != fill_v) { +if (!riscv_insn_valid_32bit_offset (offset)) {pr_err ("%s: target %016llx can not be addressed by the 32-bit offset from PC = %p\n" , me->name, (long long )v, location);
arch/x86/kernel/cpu/sgx/encl.c +48 -9
111 lines not on this page · raw message
arch/x86/kernel/e820.c +30 -11
62 lines not on this page · raw message
arch/x86/kernel/kdebugfs.c +28 -9
@@ -88,11 +88,13 @@ create_setup_data_node(struct dentry *parent, int no,static int __init create_setup_data_nodes (struct dentry *parent) { +struct setup_indirect *indirect;struct setup_data_node *node;struct setup_data *data; -int error; +u64 pa_data, pa_next;struct dentry *d; -u64 pa_data; +int error; +u32 len;int no =0 ; d =debugfs_create_dir ("setup_data" , parent);
@@ -112,12 +114,29 @@ static int __init create_setup_data_nodes(struct dentry *parent) error = -ENOMEM ; goto err_dir; } - -if (data->type ==SETUP_INDIRECT && - ((struct setup_indirect *)data->data)->type !=SETUP_INDIRECT ) { - node->paddr = ((struct setup_indirect *)data->data)->addr; - node->type = ((struct setup_indirect *)data->data)->type; - node->len = ((struct setup_indirect *)data->data)->len; + pa_next = data->next; + +if (data->type ==SETUP_INDIRECT ) { + len =sizeof (*data) + data->len; +memunmap (data); + data =memremap (pa_data, len,MEMREMAP_WB ); +if (!data) { +kfree (node); + error = -ENOMEM ; + goto err_dir; + } + + indirect = (struct setup_indirect *)data->data; + +if (indirect->type !=SETUP_INDIRECT ) { + node->paddr = indirect->addr; + node->type = indirect->type; + node->len = indirect->len; + }else { + node->paddr = pa_data; + node->type = data->type; + node->len = data->len; + } }else { node->paddr = pa_data; node->type = data->type;
@@ -125,7 +144,7 @@ static int __init create_setup_data_nodes(struct dentry *parent) }create_setup_data_node (d, no, node); - pa_data = data->next; + pa_data = pa_next;memunmap (data); no++;
arch/x86/kernel/ksysfs.c +61 -16
125 lines not on this page · raw message
arch/x86/kernel/kvm.c +6 -3
@@ -462,19 +462,22 @@ static bool pv_tlb_flush_supported(void) {return (kvm_para_has_feature (KVM_FEATURE_PV_TLB_FLUSH ) && !kvm_para_has_hint (KVM_HINTS_REALTIME ) && -kvm_para_has_feature (KVM_FEATURE_STEAL_TIME )); +kvm_para_has_feature (KVM_FEATURE_STEAL_TIME ) && + (num_possible_cpus () !=1 )); }static bool pv_ipi_supported (void ) { -return kvm_para_has_feature (KVM_FEATURE_PV_SEND_IPI ); +return (kvm_para_has_feature (KVM_FEATURE_PV_SEND_IPI ) && + (num_possible_cpus () !=1 )); }static bool pv_sched_yield_supported (void ) {return (kvm_para_has_feature (KVM_FEATURE_PV_SCHED_YIELD ) && !kvm_para_has_hint (KVM_HINTS_REALTIME ) && -kvm_para_has_feature (KVM_FEATURE_STEAL_TIME )); +kvm_para_has_feature (KVM_FEATURE_STEAL_TIME ) && + (num_possible_cpus () !=1 )); }#define KVM_IPI_CLUSTER_SIZE (2 * BITS_PER_LONG)
arch/x86/kernel/module.c +8 -5
@@ -273,6 +273,14 @@ int module_finalize(const Elf_Ehdr *hdr, retpolines = s; } +/* +* See alternative_instructions() for the ordering rules between the +* various patching types. +*/ +if (para) { +void *pseg = (void *)para->sh_addr; +apply_paravirt (pseg, pseg + para->sh_size); + }if (retpolines) {void *rseg = (void *)retpolines->sh_addr;apply_retpolines (rseg, rseg + retpolines->sh_size);
@@ -290,11 +298,6 @@ int module_finalize(const Elf_Ehdr *hdr, tseg, tseg + text->sh_size); } -if (para) { -void *pseg = (void *)para->sh_addr; -apply_paravirt (pseg, pseg + para->sh_size); - } -/* make jump label nops */ jump_label_apply_nops (me);
arch/x86/kernel/setup.c +27 -7
@@ -368,21 +368,41 @@ static void __init parse_setup_data(void)static void __init memblock_x86_reserve_range_setup_data (void ) { +struct setup_indirect *indirect;struct setup_data *data; -u64 pa_data; +u64 pa_data, pa_next; +u32 len; pa_data = boot_params.hdr.setup_data;while (pa_data) { data =early_memremap (pa_data,sizeof (*data)); +if (!data) { +pr_warn ("setup: failed to memremap setup_data entry\n" ); +return ; + } + + len =sizeof (*data); + pa_next = data->next; +memblock_reserve (pa_data,sizeof (*data) + data->len); -if (data->type ==SETUP_INDIRECT && - ((struct setup_indirect *)data->data)->type !=SETUP_INDIRECT ) -memblock_reserve (((struct setup_indirect *)data->data)->addr, - ((struct setup_indirect *)data->data)->len); +if (data->type ==SETUP_INDIRECT ) { + len += data->len; +early_memunmap (data,sizeof (*data)); + data =early_memremap (pa_data, len); +if (!data) { +pr_warn ("setup: failed to memremap indirect setup_data\n" ); +return ; + } - pa_data = data->next; -early_memunmap (data,sizeof (*data)); + indirect = (struct setup_indirect *)data->data; + +if (indirect->type !=SETUP_INDIRECT ) +memblock_reserve (indirect->addr, indirect->len); + } + + pa_data = pa_next; +early_memunmap (data, len); } }
arch/x86/kernel/traps.c +1 -0
@@ -659,6 +659,7 @@ static bool do_int3(struct pt_regs *regs)return res ==NOTIFY_STOP ; } +NOKPROBE_SYMBOL (do_int3);static void do_int3_user (struct pt_regs *regs) {
arch/x86/kvm/x86.c +7 -0
@@ -8770,6 +8770,13 @@ static int kvm_pv_clock_pairing(struct kvm_vcpu *vcpu, gpa_t paddr,if (clock_type !=KVM_CLOCK_PAIRING_WALLCLOCK )return -KVM_EOPNOTSUPP ; +/* +* When tsc is in permanent catchup mode guests won't be able to use +* pvclock_read_retry loop to get consistent view of pvclock +*/ +if (vcpu->arch.tsc_always_catchup) +return -KVM_EOPNOTSUPP ; +if (!kvm_get_walltime_and_clockread (&ts, &cycle))return -KVM_EOPNOTSUPP ;
arch/x86/mm/ioremap.c +51 -6
95 lines not on this page · raw message
drivers/block/virtio_blk.c +9 -11
@@ -76,9 +76,6 @@ struct virtio_blk {*/ refcount_t refs; -/* What host tells us, plus 2 for header & tailer. */ -unsigned int sg_elems; -/* Ida index - used to track minor number allocations. */ int index;
@@ -322,8 +319,6 @@ static blk_status_t virtio_queue_rq(struct blk_mq_hw_ctx *hctx,blk_status_t status;int err; -BUG_ON (req->nr_phys_segments +2 > vblk->sg_elems); - status =virtblk_setup_cmd (vblk->vdev, req, vbr);if (unlikely (status))return status;
@@ -783,8 +778,6 @@ static int virtblk_probe(struct virtio_device *vdev)/* Prevent integer overflows and honor max vq size */ sg_elems =min_t (u32, sg_elems,VIRTIO_BLK_MAX_SG_ELEMS -2 ); -/* We need extra sg elements at head and tail. */ - sg_elems +=2 ; vdev->priv = vblk =kmalloc (sizeof (*vblk),GFP_KERNEL );if (!vblk) { err = -ENOMEM ;
@@ -796,7 +789,6 @@ static int virtblk_probe(struct virtio_device *vdev)mutex_init (&vblk->vdev_mutex); vblk->vdev = vdev; - vblk->sg_elems = sg_elems;INIT_WORK (&vblk->config_work, virtblk_config_changed_work);
@@ -854,7 +846,7 @@ static int virtblk_probe(struct virtio_device *vdev)set_disk_ro (vblk->disk,1 );/* We can handle whatever the host told us to handle. */ -blk_queue_max_segments (q, vblk->sg_elems-2 ); +blk_queue_max_segments (q, sg_elems);/* No real sector limit. */ blk_queue_max_hw_sectors (q,-1U );
@@ -926,9 +918,15 @@ static int virtblk_probe(struct virtio_device *vdev) virtio_cread(vdev, struct virtio_blk_config, max_discard_seg, &v); + +/* +* max_discard_seg == 0 is out of spec but we always +* handled it. +*/ +if (!v) + v = sg_elems;blk_queue_max_discard_segments (q, -min_not_zero (v, -MAX_DISCARD_SEGMENTS )); +min (v,MAX_DISCARD_SEGMENTS ));blk_queue_flag_set (QUEUE_FLAG_DISCARD , q); }
drivers/clk/qcom/dispcc-sc7180.c +4 -1
@@ -1,6 +1,6 @@// SPDX-License-Identifier: GPL-2.0-only /* -* Copyright (c) 2019, The Linux Foundation. All rights reserved. +* Copyright (c) 2019, 2022, The Linux Foundation. All rights reserved. */ #include <linux/clk-provider.h>
@@ -625,6 +625,9 @@ static struct clk_branch disp_cc_mdss_vsync_clk = {static struct gdsc mdss_gdsc = { .gdscr =0x3000 , + .en_rest_wait_val =0x2 , + .en_few_wait_val =0x2 , + .clk_dis_wait_val =0xf , .pd = { .name ="mdss_gdsc" , },
drivers/clk/qcom/dispcc-sc7280.c +4 -1
@@ -1,6 +1,6 @@// SPDX-License-Identifier: GPL-2.0-only /* -* Copyright (c) 2021, The Linux Foundation. All rights reserved. +* Copyright (c) 2021-2022, The Linux Foundation. All rights reserved. */ #include <linux/clk-provider.h>
@@ -787,6 +787,9 @@ static struct clk_branch disp_cc_sleep_clk = {static struct gdsc disp_cc_mdss_core_gdsc = { .gdscr =0x1004 , + .en_rest_wait_val =0x2 , + .en_few_wait_val =0x2 , + .clk_dis_wait_val =0xf , .pd = { .name ="disp_cc_mdss_core_gdsc" , },
drivers/clk/qcom/dispcc-sm8250.c +4 -1
@@ -1,6 +1,6 @@// SPDX-License-Identifier: GPL-2.0 /* -* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. +* Copyright (c) 2018-2020, 2022, The Linux Foundation. All rights reserved. */ #include <linux/clk-provider.h>
@@ -1126,6 +1126,9 @@ static struct clk_branch disp_cc_mdss_vsync_clk = {static struct gdsc mdss_gdsc = { .gdscr =0x3000 , + .en_rest_wait_val =0x2 , + .en_few_wait_val =0x2 , + .clk_dis_wait_val =0xf , .pd = { .name ="mdss_gdsc" , },
drivers/clk/qcom/gdsc.c +21 -5
@@ -1,6 +1,6 @@// SPDX-License-Identifier: GPL-2.0-only /* -* Copyright (c) 2015, 2017-2018, The Linux Foundation. All rights reserved. +* Copyright (c) 2015, 2017-2018, 2022, The Linux Foundation. All rights reserved. */ #include <linux/bitops.h>
@@ -35,9 +35,14 @@#define CFG_GDSCR_OFFSET 0x4/* Wait 2^n CXO cycles between all states. Here, n=2 (4 cycles). */ -#define EN_REST_WAIT_VAL (0x2 << 20) -#define EN_FEW_WAIT_VAL (0x8 << 16) -#define CLK_DIS_WAIT_VAL (0x2 << 12) +#define EN_REST_WAIT_VAL 0x2 +#define EN_FEW_WAIT_VAL 0x8 +#define CLK_DIS_WAIT_VAL 0x2 + +/* Transition delay shifts */ +#define EN_REST_WAIT_SHIFT 20 +#define EN_FEW_WAIT_SHIFT 16 +#define CLK_DIS_WAIT_SHIFT 12#define RETAIN_MEM BIT(14)#define RETAIN_PERIPH BIT(13)
@@ -380,7 +385,18 @@ static int gdsc_init(struct gdsc *sc)*/ mask =HW_CONTROL_MASK |SW_OVERRIDE_MASK |EN_REST_WAIT_MASK |EN_FEW_WAIT_MASK |CLK_DIS_WAIT_MASK ; - val =EN_REST_WAIT_VAL |EN_FEW_WAIT_VAL |CLK_DIS_WAIT_VAL ; + +if (!sc->en_rest_wait_val) + sc->en_rest_wait_val =EN_REST_WAIT_VAL ; +if (!sc->en_few_wait_val) + sc->en_few_wait_val =EN_FEW_WAIT_VAL ; +if (!sc->clk_dis_wait_val) + sc->clk_dis_wait_val =CLK_DIS_WAIT_VAL ; + + val = sc->en_rest_wait_val <<EN_REST_WAIT_SHIFT | + sc->en_few_wait_val <<EN_FEW_WAIT_SHIFT | + sc->clk_dis_wait_val <<CLK_DIS_WAIT_SHIFT ; + ret =regmap_update_bits (sc->regmap, sc->gdscr, mask, val);if (ret)return ret;
drivers/clk/qcom/gdsc.h +7 -1
@@ -1,6 +1,6 @@/* SPDX-License-Identifier: GPL-2.0-only */ /* -* Copyright (c) 2015, 2017-2018, The Linux Foundation. All rights reserved. +* Copyright (c) 2015, 2017-2018, 2022, The Linux Foundation. All rights reserved. */ #ifndef __QCOM_GDSC_H__
@@ -22,6 +22,9 @@ struct reset_controller_dev;* @cxcs: offsets of branch registers to toggle mem/periph bits in * @cxc_count: number of @cxcs * @pwrsts: Possible powerdomain power states +* @en_rest_wait_val: transition delay value for receiving enr ack signal +* @en_few_wait_val: transition delay value for receiving enf ack signal +* @clk_dis_wait_val: transition delay value for halting clock * @resets: ids of resets associated with this gdsc * @reset_count: number of @resets * @rcdev: reset controller
@@ -36,6 +39,9 @@ struct gdsc {unsigned int clamp_io_ctrl;unsigned int *cxcs;unsigned int cxc_count; +unsigned int en_rest_wait_val; +unsigned int en_few_wait_val; +unsigned int clk_dis_wait_val;const u8 pwrsts;/* Powerdomain allowable state bitfields */ #define PWRSTS_OFF BIT(0)
drivers/gpio/gpio-ts4900.c +19 -5
@@ -1,7 +1,7 @@/* * Digital I/O driver for Technologic Systems I2C FPGA Core * -* Copyright (C) 2015 Technologic Systems +* Copyright (C) 2015, 2018 Technologic Systems * Copyright (C) 2016 Savoir-Faire Linux * * This program is free software; you can redistribute it and/or
@@ -55,19 +55,33 @@ static int ts4900_gpio_direction_input(struct gpio_chip *chip, {struct ts4900_gpio_priv *priv =gpiochip_get_data (chip); -/* -* This will clear the output enable bit, the other bits are -* dontcare when this is cleared +/* Only clear the OE bit here, requires a RMW. Prevents potential issue +* with OE and data getting to the physical pin at different times. */ -return regmap_write (priv->regmap, offset,0 ); +return regmap_update_bits (priv->regmap, offset,TS4900_GPIO_OE ,0 ); }static int ts4900_gpio_direction_output (struct gpio_chip *chip,unsigned int offset,int value) {struct ts4900_gpio_priv *priv =gpiochip_get_data (chip); +unsigned int reg;int ret; +/* If changing from an input to an output, we need to first set the +* proper data bit to what is requested and then set OE bit. This +* prevents a glitch that can occur on the IO line +*/ +regmap_read (priv->regmap, offset, ®); +if (!(reg &TS4900_GPIO_OE )) { +if (value) + reg =TS4900_GPIO_OUT ; +else + reg &= ~TS4900_GPIO_OUT ; + +regmap_write (priv->regmap, offset, reg); + } +if (value) ret =regmap_write (priv->regmap, offset,TS4900_GPIO_OE |TS4900_GPIO_OUT );
drivers/gpio/gpiolib-acpi.c +4 -2
@@ -308,7 +308,8 @@ static struct gpio_desc *acpi_request_own_gpiod(struct gpio_chip *chip,if (IS_ERR (desc))return desc; - ret =gpio_set_debounce_timeout (desc, agpio->debounce_timeout); +/* ACPI uses hundredths of milliseconds units */ + ret =gpio_set_debounce_timeout (desc, agpio->debounce_timeout *10 );if (ret) dev_warn(chip->parent, "Failed to set debounce-timeout for pin 0x%04X, err %d\n",
@@ -1049,7 +1050,8 @@ int acpi_dev_gpio_irq_get_by(struct acpi_device *adev, const char *name, int indif (ret <0 )return ret; - ret =gpio_set_debounce_timeout (desc, info.debounce); +/* ACPI uses hundredths of milliseconds units */ + ret =gpio_set_debounce_timeout (desc, info.debounce *10 );if (ret)return ret;
drivers/gpio/gpiolib.c +20 -0
@@ -2191,6 +2191,16 @@ static int gpio_set_bias(struct gpio_desc *desc)return gpio_set_config_with_argument_optional (desc, bias, arg); } +/** +* gpio_set_debounce_timeout() - Set debounce timeout +* @desc: GPIO descriptor to set the debounce timeout +* @debounce: Debounce timeout in microseconds +* +* The function calls the certain GPIO driver to set debounce timeout +* in the hardware. +* +* Returns 0 on success, or negative error code otherwise. +*/ int gpio_set_debounce_timeout (struct gpio_desc *desc,unsigned int debounce) { return gpio_set_config_with_argument_optional(desc,
@@ -3111,6 +3121,16 @@ int gpiod_to_irq(const struct gpio_desc *desc)return retirq; } +#ifdef CONFIG_GPIOLIB_IRQCHIP +if (gc->irq.chip) { +/* +* Avoid race condition with other code, which tries to lookup +* an IRQ before the irqchip has been properly registered, +* i.e. while gpiochip is still being brought up. +*/ +return -EPROBE_DEFER ; + } +#endif return -ENXIO ; }EXPORT_SYMBOL_GPL (gpiod_to_irq);
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +1 -1
@@ -1145,7 +1145,7 @@ int amdgpu_display_framebuffer_init(struct drm_device *dev,if (ret)return ret; -if (!dev->mode_config.allow_fb_modifiers) { +if (!dev->mode_config.allow_fb_modifiers && !adev->enable_virtual_display) {drm_WARN_ONCE (dev, adev->family >=AMDGPU_FAMILY_AI ,"GFX9+ requires FB check based on format modifier\n" ); ret =check_tiling_flags_gfx6 (rfb);
drivers/gpu/drm/i915/display/intel_psr.c +14 -2
@@ -1400,6 +1400,13 @@ static inline u32 man_trk_ctl_single_full_frame_bit_get(struct drm_i915_privatePSR2_MAN_TRK_CTL_SF_SINGLE_FULL_FRAME ; } +static inline u32 man_trk_ctl_partial_frame_bit_get (struct drm_i915_private *dev_priv) +{ +return IS_ALDERLAKE_P (dev_priv) ? +ADLP_PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE : +PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE ; +} +static void psr_force_hw_tracking_exit (struct intel_dp *intel_dp) {struct drm_i915_private *dev_priv =dp_to_i915 (intel_dp);
@@ -1495,7 +1502,13 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state, {struct intel_crtc *crtc =to_intel_crtc (crtc_state->uapi.crtc);struct drm_i915_private *dev_priv =to_i915 (crtc->base.dev); -u32 val =PSR2_MAN_TRK_CTL_ENABLE ; +u32 val =0 ; + +if (!IS_ALDERLAKE_P (dev_priv)) + val =PSR2_MAN_TRK_CTL_ENABLE ; + +/* SF partial frame enable has to be set even on full update */ + val |=man_trk_ctl_partial_frame_bit_get (dev_priv);if (full_update) {/*
@@ -1515,7 +1528,6 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state, }else {drm_WARN_ON (crtc_state->uapi.crtc->dev, clip->y1 %4 || clip->y2 %4 ); - val |=PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE ; val |=PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR (clip->y1 /4 +1 ); val |=PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR (clip->y2 /4 +1 ); }
drivers/gpu/drm/i915/i915_reg.h +1 -0
@@ -4738,6 +4738,7 @@ enum {#define ADLP_PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR (val) REG_FIELD_PREP(ADLP_PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR_MASK, val)#define ADLP_PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR_MASK REG_GENMASK(12, 0)#define ADLP_PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR (val) REG_FIELD_PREP(ADLP_PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR_MASK, val) +#define ADLP_PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE REG_BIT(31)#define ADLP_PSR2_MAN_TRK_CTL_SF_SINGLE_FULL_FRAME REG_BIT(14)#define ADLP_PSR2_MAN_TRK_CTL_SF_CONTINUOS_FULL_FRAME REG_BIT(13)
drivers/gpu/drm/panel/Kconfig +1 -0
@@ -95,6 +95,7 @@ config DRM_PANEL_EDP depends on PM select VIDEOMODE_HELPERS select DRM_DP_AUX_BUS + select DRM_DP_HELPER help DRM panel driver for dumb eDP panels that need at most a regulator and a GPIO to be powered up. Optionally a backlight can be attached so
drivers/gpu/drm/sun4i/sun8i_mixer.h +4 -4
@@ -111,10 +111,10 @@/* format 13 is semi-planar YUV411 VUVU */ #define SUN8I_MIXER_FBFMT_YUV411 14/* format 15 doesn't exist */ -/* format 16 is P010 YVU */ -#define SUN8I_MIXER_FBFMT_P010_YUV 17 -/* format 18 is P210 YVU */ -#define SUN8I_MIXER_FBFMT_P210_YUV 19 +#define SUN8I_MIXER_FBFMT_P010_YUV 16 +/* format 17 is P010 YVU */ +#define SUN8I_MIXER_FBFMT_P210_YUV 18 +/* format 19 is P210 YVU */ /* format 20 is packed YVU444 10-bit */ /* format 21 is packed YUV444 10-bit */
drivers/gpu/drm/vc4/vc4_hdmi.c +8 -0
@@ -1522,6 +1522,7 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi)dev_err (dev,"Couldn't register the HDMI codec: %ld\n" ,PTR_ERR (codec_pdev));return PTR_ERR (codec_pdev); } + vc4_hdmi->audio.codec_pdev = codec_pdev; dai_link->cpus = &vc4_hdmi->audio.cpu; dai_link->codecs = &vc4_hdmi->audio.codec;
@@ -1561,6 +1562,12 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) } +static void vc4_hdmi_audio_exit (struct vc4_hdmi *vc4_hdmi) +{ +platform_device_unregister (vc4_hdmi->audio.codec_pdev); + vc4_hdmi->audio.codec_pdev =NULL ; +} +static irqreturn_t vc4_hdmi_hpd_irq_thread (int irq,void *priv) {struct vc4_hdmi *vc4_hdmi = priv;
@@ -2299,6 +2306,7 @@ static void vc4_hdmi_unbind(struct device *dev, struct device *master,kfree (vc4_hdmi->hdmi_regset.regs);kfree (vc4_hdmi->hd_regset.regs); +vc4_hdmi_audio_exit (vc4_hdmi);vc4_hdmi_cec_exit (vc4_hdmi);vc4_hdmi_hotplug_exit (vc4_hdmi);vc4_hdmi_connector_destroy (&vc4_hdmi->connector);
drivers/gpu/drm/vc4/vc4_hdmi.h +1 -0
@@ -113,6 +113,7 @@ struct vc4_hdmi_audio {struct snd_soc_dai_link_component platform;struct snd_dmaengine_dai_dma_data dma_data;struct hdmi_audio_infoframe infoframe; +struct platform_device *codec_pdev;bool streaming; };
drivers/hid/hid-elo.c +1 -6
@@ -228,7 +228,6 @@ static int elo_probe(struct hid_device *hdev, const struct hid_device_id *id) {struct elo_priv *priv;int ret; -struct usb_device *udev;if (!hid_is_usb (hdev))return -EINVAL ;
@@ -238,8 +237,7 @@ static int elo_probe(struct hid_device *hdev, const struct hid_device_id *id)return -ENOMEM ;INIT_DELAYED_WORK (&priv->work, elo_work); - udev =interface_to_usbdev (to_usb_interface (hdev->dev.parent)); - priv->usbdev =usb_get_dev (udev); + priv->usbdev =interface_to_usbdev (to_usb_interface (hdev->dev.parent));hid_set_drvdata (hdev, priv);
@@ -262,7 +260,6 @@ static int elo_probe(struct hid_device *hdev, const struct hid_device_id *id)return 0 ; err_free: -usb_put_dev (udev);kfree (priv);return ret; }
@@ -271,8 +268,6 @@ static void elo_remove(struct hid_device *hdev) {struct elo_priv *priv =hid_get_drvdata (hdev); -usb_put_dev (priv->usbdev); -hid_hw_stop (hdev);cancel_delayed_work_sync (&priv->work);kfree (priv);
drivers/hid/hid-nintendo.c +4 -0
@@ -2128,6 +2128,10 @@ static int nintendo_hid_probe(struct hid_device *hdev,spin_lock_init (&ctlr->lock); ctlr->rumble_queue =alloc_workqueue ("hid-nintendo-rumble_wq" ,WQ_FREEZABLE |WQ_MEM_RECLAIM ,0 ); +if (!ctlr->rumble_queue) { + ret = -ENOMEM ; + goto err; + }INIT_WORK (&ctlr->rumble_worker, joycon_rumble_worker); ret =hid_parse (hdev);
drivers/hid/hid-thrustmaster.c +6 -0
@@ -158,6 +158,12 @@ static void thrustmaster_interrupts(struct hid_device *hdev)return ; } +if (usbif->cur_altsetting->desc.bNumEndpoints <2 ) { +kfree (send_buf); +hid_err (hdev,"Wrong number of endpoints?\n" ); +return ; + } + ep = &usbif->cur_altsetting->endpoint[1 ]; b_ep = ep->desc.bEndpointAddress;
drivers/hid/hid-vivaldi.c +1 -1
@@ -143,7 +143,7 @@ static void vivaldi_feature_mapping(struct hid_device *hdev,static int vivaldi_input_configured (struct hid_device *hdev,struct hid_input *hidinput) { -return sysfs_create_group (&hdev->dev.kobj, &input_attribute_group); +return devm_device_add_group (&hdev->dev, &input_attribute_group); }static const struct hid_device_id vivaldi_table[] = {
drivers/hwmon/pmbus/pmbus_core.c +5 -0
@@ -911,6 +911,11 @@ static int pmbus_get_boolean(struct i2c_client *client, struct pmbus_boolean *b,pmbus_update_sensor_data (client, s2); regval = status & mask; +if (regval) { + ret =pmbus_write_byte_data (client, page, reg, regval); +if (ret) + goto unlock; + }if (s1 && s2) {s64 v1, v2;
drivers/isdn/hardware/mISDN/hfcpci.c +5 -1
@@ -2005,7 +2005,11 @@ setup_hw(struct hfc_pci *hc) }/* Allocate memory for FIFOS */ /* the memory needs to be on a 32k boundary within the first 4G */ -dma_set_mask (&hc->pdev->dev,0xFFFF8000 ); +if (dma_set_mask (&hc->pdev->dev,0xFFFF8000 )) { +printk (KERN_WARNING +"HFC-PCI: No usable DMA configuration!\n" ); +return -EIO ; + } buffer =dma_alloc_coherent (&hc->pdev->dev,0x8000 , &hc->hw.dmahandle,GFP_KERNEL );/* We silently assume the address is okay if nonzero */
drivers/isdn/mISDN/dsp_pipeline.c +3 -3
@@ -192,7 +192,7 @@ void dsp_pipeline_destroy(struct dsp_pipeline *pipeline)int dsp_pipeline_build (struct dsp_pipeline *pipeline,const char *cfg) {int found =0 ; -char *dup, *tok, *name, *args; +char *dup, *next, *tok, *name, *args;struct dsp_element_entry *entry, *n;struct dsp_pipeline_entry *pipeline_entry;struct mISDN_dsp_element *elem;
@@ -203,10 +203,10 @@ int dsp_pipeline_build(struct dsp_pipeline *pipeline, const char *cfg)if (!list_empty (&pipeline->list))_dsp_pipeline_destroy (pipeline); - dup =kstrdup (cfg,GFP_ATOMIC ); + dup = next =kstrdup (cfg,GFP_ATOMIC );if (!dup)return 0 ; -while ((tok =strsep (&dup,"|" ))) { +while ((tok =strsep (&next,"|" ))) {if (!strlen (tok))continue ; name =strsep (&tok,"(" );
drivers/mmc/host/meson-gx-mmc.c +8 -7
@@ -173,6 +173,8 @@ struct meson_host {int irq;bool vqmmc_enabled; +bool needs_pre_post_req; + };#define CMD_CFG_LENGTH_MASK GENMASK(8, 0)
@@ -663,6 +665,8 @@ static void meson_mmc_request_done(struct mmc_host *mmc,struct meson_host *host =mmc_priv (mmc); host->cmd =NULL ; +if (host->needs_pre_post_req) +meson_mmc_post_req (mmc, mrq,0 );mmc_request_done (host->mmc, mrq); }
@@ -880,7 +884,7 @@ static int meson_mmc_validate_dram_access(struct mmc_host *mmc, struct mmc_datastatic void meson_mmc_request (struct mmc_host *mmc,struct mmc_request *mrq) {struct meson_host *host =mmc_priv (mmc); -bool needs_pre_post_req = mrq->data && + host->needs_pre_post_req = mrq->data && !(mrq->data->host_cookie &SD_EMMC_PRE_REQ_DONE );/*
@@ -896,22 +900,19 @@ static void meson_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq) } } -if (needs_pre_post_req) { +if (host->needs_pre_post_req) {meson_mmc_get_transfer_mode (mmc, mrq);if (!meson_mmc_desc_chain_mode (mrq->data)) - needs_pre_post_req = false; + host->needs_pre_post_req = false; } -if (needs_pre_post_req) +if (host->needs_pre_post_req)meson_mmc_pre_req (mmc, mrq);/* Stop execution */ writel (0 , host->regs +SD_EMMC_START );meson_mmc_start_cmd (mmc, mrq->sbc ?: mrq->cmd); - -if (needs_pre_post_req) -meson_mmc_post_req (mmc, mrq,0 ); }static void meson_mmc_read_resp (struct mmc_host *mmc,struct mmc_command *cmd)
drivers/net/dsa/mt7530.c +1 -1
@@ -2928,7 +2928,7 @@ mt753x_phylink_validate(struct dsa_switch *ds, int port,phylink_set_port_modes (mask); -if (state->interface !=PHY_INTERFACE_MODE_TRGMII || +if (state->interface !=PHY_INTERFACE_MODE_TRGMII && !phy_interface_mode_is_8023z (state->interface)) { phylink_set(mask, 10baseT_Half); phylink_set(mask, 10baseT_Full);
drivers/net/ethernet/arc/emac_mdio.c +3 -2
@@ -132,6 +132,7 @@ int arc_mdio_probe(struct arc_emac_priv *priv) {struct arc_emac_mdio_bus_data *data = &priv->bus_data;struct device_node *np = priv->dev->of_node; +const char *name ="Synopsys MII Bus" ;struct mii_bus *bus;int error;
@@ -142,7 +143,7 @@ int arc_mdio_probe(struct arc_emac_priv *priv) priv->bus = bus; bus->priv = priv; bus->parent = priv->dev; - bus->name ="Synopsys MII Bus" ; + bus->name = name; bus->read = &arc_mdio_read; bus->write = &arc_mdio_write; bus->reset = &arc_mdio_reset;
@@ -167,7 +168,7 @@ int arc_mdio_probe(struct arc_emac_priv *priv)if (error) {mdiobus_free (bus);return dev_err_probe (priv->dev, error, -"cannot register MDIO bus %s\n" , bus->name); +"cannot register MDIO bus %s\n" , name); }return 0 ;
drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c +7 -0
@@ -40,6 +40,13 @@void bcmgenet_get_wol (struct net_device *dev,struct ethtool_wolinfo *wol) {struct bcmgenet_priv *priv =netdev_priv (dev); +struct device *kdev = &priv->pdev->dev; + +if (!device_can_wakeup (kdev)) { + wol->supported =0 ; + wol->wolopts =0 ; +return ; + } wol->supported =WAKE_MAGIC |WAKE_MAGICSECURE |WAKE_FILTER ; wol->wolopts = priv->wolopts;
drivers/net/ethernet/cadence/macb_main.c +24 -1
@@ -1614,7 +1614,14 @@ static int macb_poll(struct napi_struct *napi, int budget)if (work_done < budget) {napi_complete_done (napi, work_done); -/* Packets received while interrupts were disabled */ +/* RSR bits only seem to propagate to raise interrupts when +* interrupts are enabled at the time, so if bits are already +* set due to packets received while interrupts were disabled, +* they will not cause another interrupt to be generated when +* interrupts are re-enabled. +* Check for this case here. This has been seen to happen +* around 30% of the time under heavy network load. +*/ status =macb_readl (bp,RSR );if (status) {if (bp->caps &MACB_CAPS_ISR_CLEAR_ON_WRITE )
@@ -1622,6 +1629,22 @@ static int macb_poll(struct napi_struct *napi, int budget)napi_reschedule (napi); }else {queue_writel (queue,IER , bp->rx_intr_mask); + +/* In rare cases, packets could have been received in +* the window between the check above and re-enabling +* interrupts. Therefore, a double-check is required +* to avoid losing a wakeup. This can potentially race +* with the interrupt handler doing the same actions +* if an interrupt is raised just after enabling them, +* but this should be harmless. +*/ + status =macb_readl (bp,RSR ); +if (unlikely (status)) { +queue_writel (queue,IDR , bp->rx_intr_mask); +if (bp->caps &MACB_CAPS_ISR_CLEAR_ON_WRITE ) +queue_writel (queue,ISR ,MACB_BIT (RCOMP )); +napi_schedule (napi); + } } }
drivers/net/ethernet/freescale/gianfar_ethtool.c +1 -0
@@ -1460,6 +1460,7 @@ static int gfar_get_ts_info(struct net_device *dev, ptp_node =of_find_compatible_node (NULL ,NULL ,"fsl,etsec-ptp" );if (ptp_node) { ptp_dev =of_find_device_by_node (ptp_node); +of_node_put (ptp_node);if (ptp_dev) ptp =platform_get_drvdata (ptp_dev); }
drivers/net/ethernet/intel/i40e/i40e_debugfs.c +2 -4
@@ -742,10 +742,8 @@ static void i40e_dbg_dump_vf(struct i40e_pf *pf, int vf_id) vsi = pf->vsi[vf->lan_vsi_idx];dev_info (&pf->pdev->dev,"vf %2d: VSI id=%d, seid=%d, qps=%d\n" , vf_id, vf->lan_vsi_id, vsi->seid, vf->num_queue_pairs); -dev_info (&pf->pdev->dev," num MDD=%lld, invalid msg=%lld, valid msg=%lld\n" , - vf->num_mdd_events, - vf->num_invalid_msgs, - vf->num_valid_msgs); +dev_info (&pf->pdev->dev," num MDD=%lld\n" , + vf->num_mdd_events); }else {dev_info (&pf->pdev->dev,"invalid VF id %d\n" , vf_id); }
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +7 -50
125 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h +0 -5
@@ -10,8 +10,6 @@#define I40E_VIRTCHNL_SUPPORTED_QTYPES 2 -#define I40E_DEFAULT_NUM_INVALID_MSGS_ALLOWED 10 -#define I40E_VLAN_PRIORITY_SHIFT 13#define I40E_VLAN_MASK 0xFFF#define I40E_PRIORITY_MASK 0xE000
@@ -92,9 +90,6 @@ struct i40e_vf {u8 num_queue_pairs;/* num of qps assigned to VF vsis */ u8 num_req_queues;/* num of requested qps */ u64 num_mdd_events;/* num of mdd events detected */ -/* num of continuous malformed or invalid msgs detected */ -u64 num_invalid_msgs; -u64 num_valid_msgs;/* num of valid msgs detected */ unsigned long vf_caps;/* vf's adv. capabilities */ unsigned long vf_states;/* vf's runtime states */
drivers/net/ethernet/intel/iavf/iavf_virtchnl.c +40 -0
@@ -1460,6 +1460,22 @@ void iavf_request_reset(struct iavf_adapter *adapter) adapter->current_op =VIRTCHNL_OP_UNKNOWN ; } +/** +* iavf_netdev_features_vlan_strip_set - update vlan strip status +* @netdev: ptr to netdev being adjusted +* @enable: enable or disable vlan strip +* +* Helper function to change vlan strip status in netdev->features. +*/ +static void iavf_netdev_features_vlan_strip_set (struct net_device *netdev, +const bool enable) +{ +if (enable) + netdev->features |=NETIF_F_HW_VLAN_CTAG_RX ; +else + netdev->features &= ~NETIF_F_HW_VLAN_CTAG_RX ; +} +/** * iavf_virtchnl_completion * @adapter: adapter structure
@@ -1683,8 +1699,18 @@ void iavf_virtchnl_completion(struct iavf_adapter *adapter, }break ;case VIRTCHNL_OP_ENABLE_VLAN_STRIPPING : +dev_warn (&adapter->pdev->dev,"Changing VLAN Stripping is not allowed when Port VLAN is configured\n" ); +/* Vlan stripping could not be enabled by ethtool. +* Disable it in netdev->features. +*/ +iavf_netdev_features_vlan_strip_set (netdev, false); +break ;case VIRTCHNL_OP_DISABLE_VLAN_STRIPPING :dev_warn (&adapter->pdev->dev,"Changing VLAN Stripping is not allowed when Port VLAN is configured\n" ); +/* Vlan stripping could not be disabled by ethtool. +* Enable it in netdev->features. +*/ +iavf_netdev_features_vlan_strip_set (netdev, true);break ;default : dev_err(&adapter->pdev->dev, "PF returned error %d (%s) to our request %d\n",
@@ -1918,6 +1944,20 @@ void iavf_virtchnl_completion(struct iavf_adapter *adapter,spin_unlock_bh (&adapter->adv_rss_lock); }break ; +case VIRTCHNL_OP_ENABLE_VLAN_STRIPPING : +/* PF enabled vlan strip on this VF. +* Update netdev->features if needed to be in sync with ethtool. +*/ +if (!v_retval) +iavf_netdev_features_vlan_strip_set (netdev, true); +break ; +case VIRTCHNL_OP_DISABLE_VLAN_STRIPPING : +/* PF disabled vlan strip on this VF. +* Update netdev->features if needed to be in sync with ethtool. +*/ +if (!v_retval) +iavf_netdev_features_vlan_strip_set (netdev, false); +break ;default :if (adapter->current_op && (v_opcode != adapter->current_op)) dev_warn(&adapter->pdev->dev, "Expected response %d from PF, received %d\n",
drivers/net/ethernet/intel/ice/ice.h +1 -0
@@ -483,6 +483,7 @@ enum ice_pf_flags {ICE_FLAG_MDD_AUTO_RESET_VF ,ICE_FLAG_LINK_LENIENT_MODE_ENA ,ICE_FLAG_PLUG_AUX_DEV , +ICE_FLAG_MTU_CHANGED , ICE_PF_FLAGS_NBITS /* must be last */ };
drivers/net/ethernet/intel/ice/ice_ethtool.c +1 -1
@@ -2314,7 +2314,7 @@ ice_set_link_ksettings(struct net_device *netdev, goto done; } - curr_link_speed = pi->phy.link_info.link_speed; + curr_link_speed = pi->phy.curr_user_speed_req; adv_link_speed =ice_ksettings_find_adv_link_speed (ks);/* If speed didn't get set, set it to what it currently is.
drivers/net/ethernet/intel/ice/ice_main.c +15 -16
@@ -2240,6 +2240,17 @@ static void ice_service_task(struct work_struct *work)if (test_and_clear_bit (ICE_FLAG_PLUG_AUX_DEV , pf->flags))ice_plug_aux_dev (pf); +if (test_and_clear_bit (ICE_FLAG_MTU_CHANGED , pf->flags)) { +struct iidc_event *event; + + event =kzalloc (sizeof (*event),GFP_KERNEL ); +if (event) { +set_bit (IIDC_EVENT_AFTER_MTU_CHANGE , event->type); +ice_send_event_to_aux (pf, event); +kfree (event); + } + } +ice_clean_adminq_subtask (pf);ice_check_media_subtask (pf);ice_check_for_hang_subtask (pf);
@@ -3005,7 +3016,7 @@ static irqreturn_t ice_misc_intr(int __always_unused irq, void *data)struct iidc_event *event; ena_mask &= ~ICE_AUX_CRIT_ERR ; - event =kzalloc (sizeof (*event),GFP_KERNEL ); + event =kzalloc (sizeof (*event),GFP_ATOMIC );if (event) {set_bit (IIDC_EVENT_CRIT_ERR , event->type);/* report the entire OICR value to AUX driver */
@@ -6822,7 +6833,6 @@ static int ice_change_mtu(struct net_device *netdev, int new_mtu)struct ice_netdev_priv *np =netdev_priv (netdev);struct ice_vsi *vsi = np->vsi;struct ice_pf *pf = vsi->back; -struct iidc_event *event;u8 count =0 ;int err =0 ;
@@ -6857,14 +6867,6 @@ static int ice_change_mtu(struct net_device *netdev, int new_mtu)return -EBUSY ; } - event =kzalloc (sizeof (*event),GFP_KERNEL ); -if (!event) -return -ENOMEM ; - -set_bit (IIDC_EVENT_BEFORE_MTU_CHANGE , event->type); -ice_send_event_to_aux (pf, event); -clear_bit (IIDC_EVENT_BEFORE_MTU_CHANGE , event->type); - netdev->mtu = (unsigned int )new_mtu;/* if VSI is up, bring it down and then back up */
@@ -6872,21 +6874,18 @@ static int ice_change_mtu(struct net_device *netdev, int new_mtu) err =ice_down (vsi);if (err) {netdev_err (netdev,"change MTU if_down err %d\n" , err); - goto event_after; +return err; } err =ice_up (vsi);if (err) {netdev_err (netdev,"change MTU if_up err %d\n" , err); - goto event_after; +return err; } }netdev_dbg (netdev,"changed MTU to %d\n" , new_mtu); -event_after: -set_bit (IIDC_EVENT_AFTER_MTU_CHANGE , event->type); -ice_send_event_to_aux (pf, event); -kfree (event); +set_bit (ICE_FLAG_MTU_CHANGED , pf->flags);return err; }
drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c +0 -18
@@ -2297,24 +2297,6 @@ ice_vc_send_msg_to_vf(struct ice_vf *vf, u32 v_opcode, dev =ice_pf_to_dev (pf); -/* single place to detect unsuccessful return values */ -if (v_retval) { - vf->num_inval_msgs++; -dev_info (dev,"VF %d failed opcode %d, retval: %d\n" , vf->vf_id, - v_opcode, v_retval); -if (vf->num_inval_msgs >ICE_DFLT_NUM_INVAL_MSGS_ALLOWED ) { -dev_err (dev,"Number of invalid messages exceeded for VF %d\n" , - vf->vf_id); -dev_err (dev,"Use PF Control I/F to enable the VF\n" ); -set_bit (ICE_VF_STATE_DIS , vf->vf_states); -return -EIO ; - } - }else { - vf->num_valid_msgs++; -/* reset the invalid counter, if a valid message is received. */ - vf->num_inval_msgs =0 ; - } - aq_ret =ice_aq_send_msg_to_vf (&pf->hw, vf->vf_id, v_opcode, v_retval, msg, msglen,NULL );if (aq_ret && pf->hw.mailboxq.sq_last_status !=ICE_AQ_RC_ENOSYS ) {
drivers/net/ethernet/intel/ice/ice_virtchnl_pf.h +0 -3
@@ -14,7 +14,6 @@#define ICE_MAX_MACADDR_PER_VF 18/* Malicious Driver Detection */ -#define ICE_DFLT_NUM_INVAL_MSGS_ALLOWED 10#define ICE_MDD_EVENTS_THRESHOLD 30/* Static VF transaction/status register def */
@@ -134,8 +133,6 @@ struct ice_vf {unsigned int max_tx_rate;/* Maximum Tx bandwidth limit in Mbps */ DECLARE_BITMAP (vf_states,ICE_VF_STATES_NBITS );/* VF runtime states */ -u64 num_inval_msgs;/* number of continuous invalid msgs */ -u64 num_valid_msgs;/* number of valid msgs detected */ unsigned long vf_caps;/* VF's adv. capabilities */ u8 num_req_qs;/* num of queue pairs requested by VF */ u16 num_mac;
drivers/net/ethernet/marvell/prestera/prestera_main.c +1 -0
@@ -553,6 +553,7 @@ static int prestera_switch_set_base_mac_addr(struct prestera_switch *sw)dev_info (prestera_dev (sw),"using random base mac address\n" ); }of_node_put (base_mac_np); +of_node_put (np);return prestera_hw_switch_mac_set (sw, sw->base_mac); }
drivers/net/ethernet/mellanox/mlx5/core/cmd.c +8 -7
@@ -131,11 +131,8 @@ static int cmd_alloc_index(struct mlx5_cmd *cmd)static void cmd_free_index (struct mlx5_cmd *cmd,int idx) { -unsigned long flags; - -spin_lock_irqsave (&cmd->alloc_lock, flags); +lockdep_assert_held (&cmd->alloc_lock);set_bit (idx, &cmd->bitmask); -spin_unlock_irqrestore (&cmd->alloc_lock, flags); }static void cmd_ent_get (struct mlx5_cmd_work_ent *ent)
@@ -145,17 +142,21 @@ static void cmd_ent_get(struct mlx5_cmd_work_ent *ent)static void cmd_ent_put (struct mlx5_cmd_work_ent *ent) { +struct mlx5_cmd *cmd = ent->cmd; +unsigned long flags; + +spin_lock_irqsave (&cmd->alloc_lock, flags);if (!refcount_dec_and_test (&ent->refcnt)) -return ; + goto out;if (ent->idx >=0 ) { -struct mlx5_cmd *cmd = ent->cmd; -cmd_free_index (cmd, ent->idx);up (ent->page_queue ? &cmd->pages_sem : &cmd->sem); }cmd_free_ent (ent); +out: +spin_unlock_irqrestore (&cmd->alloc_lock, flags); }static struct mlx5_cmd_layout *get_inst (struct mlx5_cmd *cmd,int idx)
drivers/net/ethernet/mellanox/mlx5/core/en/tir.c +0 -3
@@ -88,9 +88,6 @@ void mlx5e_tir_builder_build_packet_merge(struct mlx5e_tir_builder *builder, (MLX5E_PARAMS_DEFAULT_LRO_WQE_SZ - rough_max_l2_l3_hdr_sz) >> 8);MLX5_SET (tirc, tirc, lro_timeout_period_usecs, pkt_merge_param->timeout);break ; -case MLX5E_PACKET_MERGE_SHAMPO : -MLX5_SET (tirc, tirc, packet_merge_mask,MLX5_TIRC_PACKET_MERGE_MASK_SHAMPO ); -break ;default :break ; }
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +1 -2
@@ -3592,8 +3592,7 @@ static int set_feature_hw_gro(struct net_device *netdev, bool enable) goto out; } - err =mlx5e_safe_switch_params (priv, &new_params, - mlx5e_modify_tirs_packet_merge_ctx,NULL , reset); + err =mlx5e_safe_switch_params (priv, &new_params,NULL ,NULL , reset); out:mutex_unlock (&priv->state_lock);return err;
drivers/net/ethernet/mellanox/mlx5/core/lag/mp.c +8 -3
@@ -126,6 +126,10 @@ static void mlx5_lag_fib_route_event(struct mlx5_lag *ldev,return ; } +/* Handle multipath entry with lower priority value */ +if (mp->mfi && mp->mfi != fi && fi->fib_priority >= mp->mfi->fib_priority) +return ; +/* Handle add/replace event */ nhs =fib_info_num_path (fi);if (nhs ==1 ) {
@@ -135,12 +139,13 @@ static void mlx5_lag_fib_route_event(struct mlx5_lag *ldev,int i =mlx5_lag_dev_get_netdev_idx (ldev, nh_dev);if (i <0 ) - i =MLX5_LAG_NORMAL_AFFINITY ; -else - ++i; +return ; + i++;mlx5_lag_set_port_affinity (ldev, i); } + + mp->mfi = fi;return ; }
drivers/net/ethernet/mellanox/mlx5/core/lib/fs_chains.c +0 -3
@@ -121,9 +121,6 @@ u32 mlx5_chains_get_nf_ft_chain(struct mlx5_fs_chains *chains)u32 mlx5_chains_get_prio_range (struct mlx5_fs_chains *chains) { -if (!mlx5_chains_prios_supported (chains)) -return 1 ; -if (mlx5_chains_ignore_flow_level_supported (chains))return UINT_MAX ;
drivers/net/ethernet/nxp/lpc_eth.c +4 -1
@@ -1471,6 +1471,7 @@ static int lpc_eth_drv_resume(struct platform_device *pdev) {struct net_device *ndev =platform_get_drvdata (pdev);struct netdata_local *pldat; +int ret;if (device_may_wakeup (&pdev->dev))disable_irq_wake (ndev->irq);
@@ -1480,7 +1481,9 @@ static int lpc_eth_drv_resume(struct platform_device *pdev) pldat =netdev_priv (ndev);/* Enable interface clock */ -clk_enable (pldat->clk); + ret =clk_enable (pldat->clk); +if (ret) +return ret;/* Reset and initialize */ __lpc_eth_reset (pldat);
drivers/net/ethernet/qlogic/qed/qed_sriov.c +11 -7
@@ -3806,11 +3806,11 @@ bool qed_iov_mark_vf_flr(struct qed_hwfn *p_hwfn, u32 *p_disabled_vfs)return found; } -static void qed_iov_get_link (struct qed_hwfn *p_hwfn, -u16 vfid, -struct qed_mcp_link_params *p_params, -struct qed_mcp_link_state *p_link, -struct qed_mcp_link_capabilities *p_caps) +static int qed_iov_get_link (struct qed_hwfn *p_hwfn, +u16 vfid, +struct qed_mcp_link_params *p_params, +struct qed_mcp_link_state *p_link, +struct qed_mcp_link_capabilities *p_caps) { struct qed_vf_info *p_vf = qed_iov_get_vf_info(p_hwfn, vfid,
@@ -3818,7 +3818,7 @@ static void qed_iov_get_link(struct qed_hwfn *p_hwfn,struct qed_bulletin_content *p_bulletin;if (!p_vf) -return ; +return -EINVAL ; p_bulletin = p_vf->bulletin.p_virt;
@@ -3828,6 +3828,7 @@ static void qed_iov_get_link(struct qed_hwfn *p_hwfn,__qed_vf_get_link_state (p_hwfn, p_link, p_bulletin);if (p_caps)__qed_vf_get_link_caps (p_hwfn, p_caps, p_bulletin); +return 0 ; } static int
@@ -4686,6 +4687,7 @@ static int qed_get_vf_config(struct qed_dev *cdev,struct qed_public_vf_info *vf_info;struct qed_mcp_link_state link;u32 tx_rate; +int ret;/* Sanitize request */ if (IS_VF (cdev))
@@ -4699,7 +4701,9 @@ static int qed_get_vf_config(struct qed_dev *cdev, vf_info =qed_iov_get_public_vf_info (hwfn, vf_id, true); -qed_iov_get_link (hwfn, vf_id,NULL , &link,NULL ); + ret =qed_iov_get_link (hwfn, vf_id,NULL , &link,NULL ); +if (ret) +return ret;/* Fill information about VF */ ivi->vf = vf_id;
drivers/net/ethernet/qlogic/qed/qed_vf.c +7 -0
@@ -513,6 +513,9 @@ int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn) p_iov->bulletin.size, &p_iov->bulletin.phys, GFP_KERNEL); +if (!p_iov->bulletin.p_virt) + goto free_pf2vf_reply; + DP_VERBOSE(p_hwfn, QED_MSG_IOV, "VF's bulletin Board [%p virt 0x%llx phys 0x%08x bytes]\n", p_iov->bulletin.p_virt,
@@ -552,6 +555,10 @@ int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn)return rc; +free_pf2vf_reply: +dma_free_coherent (&p_hwfn->cdev->pdev->dev, +sizeof (union pfvf_tlvs ), + p_iov->pf2vf_reply, p_iov->pf2vf_reply_phys); free_vf2pf_request: dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(union vfpf_tlvs),
drivers/net/ethernet/ti/cpts.c +3 -1
@@ -568,7 +568,9 @@ int cpts_register(struct cpts *cpts)for (i =0 ; i <CPTS_MAX_EVENTS ; i++)list_add (&cpts->pool_data[i].list, &cpts->pool); -clk_enable (cpts->refclk); + err =clk_enable (cpts->refclk); +if (err) +return err;cpts_write32 (cpts,CPTS_EN , control);cpts_write32 (cpts,TS_PEND_EN , int_enable);
drivers/net/ethernet/xilinx/xilinx_emaclite.c +3 -1
@@ -1186,7 +1186,7 @@ static int xemaclite_of_probe(struct platform_device *ofdev)if (rc) {dev_err (dev,"Cannot register network device, aborting\n" ); - goto error; + goto put_node; } dev_info(dev,
@@ -1194,6 +1194,8 @@ static int xemaclite_of_probe(struct platform_device *ofdev) (unsigned long __force)ndev->mem_start, lp->base_addr, ndev->irq);return 0 ; +put_node: +of_node_put (lp->phy_node); error:free_netdev (ndev);return rc;
drivers/net/hamradio/6pack.c +2 -2
@@ -668,11 +668,11 @@ static void sixpack_close(struct tty_struct *tty)*/ netif_stop_queue (sp->dev); +unregister_netdev (sp->dev); +del_timer_sync (&sp->tx_t);del_timer_sync (&sp->resync_t); -unregister_netdev (sp->dev); -/* Free all 6pack frame buffers after unreg. */ kfree (sp->rbuff);kfree (sp->xbuff);
drivers/net/phy/dp83822.c +1 -1
@@ -274,7 +274,7 @@ static int dp83822_config_intr(struct phy_device *phydev)if (err <0 )return err; - err =phy_write (phydev,MII_DP83822_MISR1 ,0 ); + err =phy_write (phydev,MII_DP83822_MISR2 ,0 );if (err <0 )return err;
drivers/net/phy/meson-gxl.c +20 -11
@@ -30,8 +30,12 @@#define INTSRC_LINK_DOWN BIT(4)#define INTSRC_REMOTE_FAULT BIT(5)#define INTSRC_ANEG_COMPLETE BIT(6) +#define INTSRC_ENERGY_DETECT BIT(7)#define INTSRC_MASK 30 +#define INT_SOURCES (INTSRC_LINK_DOWN | INTSRC_ANEG_COMPLETE | \ + INTSRC_ENERGY_DETECT) +#define BANK_ANALOG_DSP 0#define BANK_WOL 1#define BANK_BIST 3
@@ -200,7 +204,6 @@ static int meson_gxl_ack_interrupt(struct phy_device *phydev)static int meson_gxl_config_intr (struct phy_device *phydev) { -u16 val;int ret;if (phydev->interrupts ==PHY_INTERRUPT_ENABLED ) {
@@ -209,16 +212,9 @@ static int meson_gxl_config_intr(struct phy_device *phydev)if (ret)return ret; - val =INTSRC_ANEG_PR - |INTSRC_PARALLEL_FAULT - |INTSRC_ANEG_LP_ACK - |INTSRC_LINK_DOWN - |INTSRC_REMOTE_FAULT - |INTSRC_ANEG_COMPLETE ; - ret =phy_write (phydev,INTSRC_MASK , val); + ret =phy_write (phydev,INTSRC_MASK ,INT_SOURCES ); }else { - val =0 ; - ret =phy_write (phydev,INTSRC_MASK , val); + ret =phy_write (phydev,INTSRC_MASK ,0 );/* Ack any pending IRQ */ ret =meson_gxl_ack_interrupt (phydev);
@@ -237,10 +233,23 @@ static irqreturn_t meson_gxl_handle_interrupt(struct phy_device *phydev)return IRQ_NONE ; } + irq_status &=INT_SOURCES ; +if (irq_status ==0 )return IRQ_NONE ; -phy_trigger_machine (phydev); +/* Aneg-complete interrupt is used for link-up detection */ +if (phydev->autoneg ==AUTONEG_ENABLE && + irq_status ==INTSRC_ENERGY_DETECT ) +return IRQ_HANDLED ; + +/* Give PHY some time before MAC starts sending data. This works +* around an issue where network doesn't come up properly. +*/ +if (!(irq_status &INTSRC_LINK_DOWN )) +phy_queue_state_machine (phydev,msecs_to_jiffies (100 )); +else +phy_trigger_machine (phydev);return IRQ_HANDLED ; }
drivers/net/usb/smsc95xx.c +20 -8
@@ -84,9 +84,10 @@ static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index, ret =fn (dev,USB_VENDOR_REQUEST_READ_REGISTER ,USB_DIR_IN |USB_TYPE_VENDOR |USB_RECIP_DEVICE ,0 , index, &buf,4 ); -if (unlikely (ret <0 )) { -netdev_warn (dev->net,"Failed to read reg index 0x%08x: %d\n" , - index, ret); +if (ret <0 ) { +if (ret != -ENODEV ) +netdev_warn (dev->net,"Failed to read reg index 0x%08x: %d\n" , + index, ret);return ret; }
@@ -116,7 +117,7 @@ static int __must_check __smsc95xx_write_reg(struct usbnet *dev, u32 index, ret =fn (dev,USB_VENDOR_REQUEST_WRITE_REGISTER ,USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_DEVICE ,0 , index, &buf,4 ); -if (unlikely (ret <0 )) +if (ret <0 && ret != -ENODEV )netdev_warn (dev->net,"Failed to write reg index 0x%08x: %d\n" , index, ret);
@@ -159,6 +160,9 @@ static int __must_check __smsc95xx_phy_wait_not_busy(struct usbnet *dev, do { ret = __smsc95xx_read_reg(dev, MII_ADDR, &val, in_pm); if (ret < 0) { + /* Ignore -ENODEV error during disconnect() */ + if (ret == -ENODEV) + return 0; netdev_warn(dev->net, "Error reading MII_ACCESS\n"); return ret; }
@@ -194,7 +198,8 @@ static int __smsc95xx_mdio_read(struct usbnet *dev, int phy_id, int idx, addr =mii_address_cmd (phy_id, idx,MII_READ_ |MII_BUSY_ ); ret =__smsc95xx_write_reg (dev,MII_ADDR , addr, in_pm);if (ret <0 ) { -netdev_warn (dev->net,"Error writing MII_ADDR\n" ); +if (ret != -ENODEV ) +netdev_warn (dev->net,"Error writing MII_ADDR\n" ); goto done; }
@@ -206,7 +211,8 @@ static int __smsc95xx_mdio_read(struct usbnet *dev, int phy_id, int idx, ret =__smsc95xx_read_reg (dev,MII_DATA , &val, in_pm);if (ret <0 ) { -netdev_warn (dev->net,"Error reading MII_DATA\n" ); +if (ret != -ENODEV ) +netdev_warn (dev->net,"Error reading MII_DATA\n" ); goto done; }
@@ -214,6 +220,10 @@ static int __smsc95xx_mdio_read(struct usbnet *dev, int phy_id, int idx, done:mutex_unlock (&dev->phy_mutex); + +/* Ignore -ENODEV error during disconnect() */ +if (ret == -ENODEV ) +return 0 ;return ret; }
@@ -235,7 +245,8 @@ static void __smsc95xx_mdio_write(struct usbnet *dev, int phy_id, val = regval; ret =__smsc95xx_write_reg (dev,MII_DATA , val, in_pm);if (ret <0 ) { -netdev_warn (dev->net,"Error writing MII_DATA\n" ); +if (ret != -ENODEV ) +netdev_warn (dev->net,"Error writing MII_DATA\n" ); goto done; }
@@ -243,7 +254,8 @@ static void __smsc95xx_mdio_write(struct usbnet *dev, int phy_id, addr =mii_address_cmd (phy_id, idx,MII_WRITE_ |MII_BUSY_ ); ret =__smsc95xx_write_reg (dev,MII_ADDR , addr, in_pm);if (ret <0 ) { -netdev_warn (dev->net,"Error writing MII_ADDR\n" ); +if (ret != -ENODEV ) +netdev_warn (dev->net,"Error writing MII_ADDR\n" ); goto done; }
drivers/net/xen-netback/xenbus.c +5 -9
@@ -256,6 +256,7 @@ static void backend_disconnect(struct backend_info *be)unsigned int queue_index;xen_unregister_watchers (vif); +xenbus_rm (XBT_NIL , be->dev->nodename,"hotplug-status" );#ifdef CONFIG_DEBUG_FS xenvif_debugfs_delif (vif);#endif /* CONFIG_DEBUG_FS */
@@ -675,7 +676,6 @@ static void hotplug_status_changed(struct xenbus_watch *watch,/* Not interested in this watch anymore. */ unregister_hotplug_status_watch (be); -xenbus_rm (XBT_NIL , be->dev->nodename,"hotplug-status" ); }kfree (str); }
@@ -824,15 +824,11 @@ static void connect(struct backend_info *be)xenvif_carrier_on (be->vif);unregister_hotplug_status_watch (be); -if (xenbus_exists (XBT_NIL , dev->nodename,"hotplug-status" )) { - err =xenbus_watch_pathfmt (dev, &be->hotplug_status_watch, -NULL , hotplug_status_changed, -"%s/%s" , dev->nodename, -"hotplug-status" ); -if (err) - goto err; + err =xenbus_watch_pathfmt (dev, &be->hotplug_status_watch,NULL , + hotplug_status_changed, +"%s/%s" , dev->nodename,"hotplug-status" ); +if (!err) be->have_hotplug_status_watch =1 ; - }netif_tx_wake_all_queues (be->vif->dev);
drivers/nfc/port100.c +2 -0
@@ -1612,7 +1612,9 @@ static int port100_probe(struct usb_interface *interface,nfc_digital_free_device (dev->nfc_digital_dev); error: +usb_kill_urb (dev->in_urb);usb_free_urb (dev->in_urb); +usb_kill_urb (dev->out_urb);usb_free_urb (dev->out_urb);usb_put_dev (dev->udev);
drivers/nvme/host/tcp.c +49 -14
166 lines not on this page · raw message
drivers/of/fdt.c +1 -1
@@ -644,8 +644,8 @@ void __init early_init_fdt_scan_reserved_mem(void) }fdt_scan_reserved_mem (); -fdt_init_reserved_mem ();fdt_reserve_elfcorehdr (); +fdt_init_reserved_mem (); }/**
drivers/pci/quirks.c +9 -5
@@ -5344,11 +5344,6 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0422, quirk_no_ext_tags);*/ static void quirk_amd_harvest_no_ats (struct pci_dev *pdev) { -if ((pdev->device ==0x7312 && pdev->revision !=0x00 ) || - (pdev->device ==0x7340 && pdev->revision !=0xc5 ) || - (pdev->device ==0x7341 && pdev->revision !=0x00 )) -return ; -if (pdev->device ==0x15d8 ) { if (pdev->revision == 0xcf && pdev->subsystem_vendor == 0xea50 &&
@@ -5370,10 +5365,19 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x98e4, quirk_amd_harvest_no_ats);/* AMD Iceland dGPU */ DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI ,0x6900 , quirk_amd_harvest_no_ats);/* AMD Navi10 dGPU */ +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI ,0x7310 , quirk_amd_harvest_no_ats);DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI ,0x7312 , quirk_amd_harvest_no_ats); +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI ,0x7318 , quirk_amd_harvest_no_ats); +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI ,0x7319 , quirk_amd_harvest_no_ats); +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI ,0x731a , quirk_amd_harvest_no_ats); +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI ,0x731b , quirk_amd_harvest_no_ats); +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI ,0x731e , quirk_amd_harvest_no_ats); +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI ,0x731f , quirk_amd_harvest_no_ats);/* AMD Navi14 dGPU */ DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI ,0x7340 , quirk_amd_harvest_no_ats);DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI ,0x7341 , quirk_amd_harvest_no_ats); +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI ,0x7347 , quirk_amd_harvest_no_ats); +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI ,0x734f , quirk_amd_harvest_no_ats);/* AMD Raven platform iGPU */ DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI ,0x15d8 , quirk_amd_harvest_no_ats);#endif /* CONFIG_PCI_ATS */
drivers/pinctrl/intel/pinctrl-tigerlake.c +0 -1
@@ -749,7 +749,6 @@ static const struct acpi_device_id tgl_pinctrl_acpi_match[] = { { "INT34C5", (kernel_ulong_t)&tgllp_soc_data }, { "INT34C6", (kernel_ulong_t)&tglh_soc_data }, { "INTC1055", (kernel_ulong_t)&tgllp_soc_data }, - { "INTC1057", (kernel_ulong_t)&tgllp_soc_data }, { } };MODULE_DEVICE_TABLE (acpi, tgl_pinctrl_acpi_match);
drivers/soc/mediatek/mt8192-mmsys.h +2 -1
@@ -53,7 +53,8 @@ static const struct mtk_mmsys_routes mmsys_mt8192_routing_table[] = {MT8192_AAL0_SEL_IN_CCORR0 }, {DDP_COMPONENT_DITHER ,DDP_COMPONENT_DSI0 , -MT8192_DISP_DSI0_SEL_IN ,MT8192_DSI0_SEL_IN_DITHER0 +MT8192_DISP_DSI0_SEL_IN ,MT8192_DSI0_SEL_IN_DITHER0 , +MT8192_DSI0_SEL_IN_DITHER0 }, {DDP_COMPONENT_RDMA0 ,DDP_COMPONENT_COLOR0 , MT8192_DISP_RDMA0_SOUT_SEL, MT8192_RDMA0_SOUT_COLOR0,
drivers/spi/spi-rockchip.c +10 -3
@@ -585,6 +585,12 @@ static int rockchip_spi_slave_abort(struct spi_controller *ctlr) {struct rockchip_spi *rs =spi_controller_get_devdata (ctlr); +if (atomic_read (&rs->state) &RXDMA ) +dmaengine_terminate_sync (ctlr->dma_rx); +if (atomic_read (&rs->state) &TXDMA ) +dmaengine_terminate_sync (ctlr->dma_tx); +atomic_set (&rs->state,0 ); +spi_enable_chip (rs, false); rs->slave_abort = true;spi_finalize_current_transfer (ctlr);
@@ -654,7 +660,7 @@ static int rockchip_spi_probe(struct platform_device *pdev)struct spi_controller *ctlr;struct resource *mem;struct device_node *np = pdev->dev.of_node; -u32 rsd_nsecs; +u32 rsd_nsecs, num_cs;bool slave_mode; slave_mode =of_property_read_bool (np,"spi-slave" );
@@ -764,8 +770,9 @@ static int rockchip_spi_probe(struct platform_device *pdev)* rk spi0 has two native cs, spi1..5 one cs only * if num-cs is missing in the dts, default to 1 */ -if (of_property_read_u16 (np,"num-cs" , &ctlr->num_chipselect)) - ctlr->num_chipselect =1 ; +if (of_property_read_u32 (np,"num-cs" , &num_cs)) + num_cs =1 ; + ctlr->num_chipselect = num_cs; ctlr->use_gpio_descriptors = true; } ctlr->dev.of_node = pdev->dev.of_node;
drivers/staging/gdm724x/gdm_lte.c +3 -2
@@ -76,14 +76,15 @@ static void tx_complete(void *arg)static int gdm_lte_rx (struct sk_buff *skb,struct nic *nic,int nic_type) { -int ret; +int ret, len; + len = skb->len +ETH_HLEN ; ret =netif_rx_ni (skb);if (ret ==NET_RX_DROP ) { nic->stats.rx_dropped++; }else { nic->stats.rx_packets++; - nic->stats.rx_bytes += skb->len +ETH_HLEN ; + nic->stats.rx_bytes += len; }return 0 ;
drivers/staging/rtl8723bs/core/rtw_mlme_ext.c +5 -2
@@ -5907,6 +5907,7 @@ u8 chk_bmc_sleepq_hdl(struct adapter *padapter, unsigned char *pbuf)struct sta_info *psta_bmc;struct list_head *xmitframe_plist, *xmitframe_phead, *tmp;struct xmit_frame *pxmitframe =NULL ; +struct xmit_priv *pxmitpriv = &padapter->xmitpriv;struct sta_priv *pstapriv = &padapter->stapriv;/* for BC/MC Frames */
@@ -5917,7 +5918,8 @@ u8 chk_bmc_sleepq_hdl(struct adapter *padapter, unsigned char *pbuf)if ((pstapriv->tim_bitmap&BIT (0 )) && (psta_bmc->sleepq_len >0 )) {msleep (10 );/* 10ms, ATIM(HIQ) Windows */ -spin_lock_bh (&psta_bmc->sleep_q.lock); +/* spin_lock_bh(&psta_bmc->sleep_q.lock); */ +spin_lock_bh (&pxmitpriv->lock); xmitframe_phead =get_list_head (&psta_bmc->sleep_q);list_for_each_safe (xmitframe_plist, tmp, xmitframe_phead) {
@@ -5940,7 +5942,8 @@ u8 chk_bmc_sleepq_hdl(struct adapter *padapter, unsigned char *pbuf)rtw_hal_xmitframe_enqueue (padapter, pxmitframe); } -spin_unlock_bh (&psta_bmc->sleep_q.lock); +/* spin_unlock_bh(&psta_bmc->sleep_q.lock); */ +spin_unlock_bh (&pxmitpriv->lock);/* check hi queue and bmc_sleepq */ rtw_chk_hi_queue_cmd (padapter);
drivers/staging/rtl8723bs/core/rtw_recv.c +7 -3
@@ -957,8 +957,10 @@ static signed int validate_recv_ctrl_frame(struct adapter *padapter, union recv_if ((psta->state&WIFI_SLEEP_STATE ) && (pstapriv->sta_dz_bitmap&BIT (psta->aid))) {struct list_head *xmitframe_plist, *xmitframe_phead;struct xmit_frame *pxmitframe =NULL ; +struct xmit_priv *pxmitpriv = &padapter->xmitpriv; -spin_lock_bh (&psta->sleep_q.lock); +/* spin_lock_bh(&psta->sleep_q.lock); */ +spin_lock_bh (&pxmitpriv->lock); xmitframe_phead =get_list_head (&psta->sleep_q); xmitframe_plist =get_next (xmitframe_phead);
@@ -989,10 +991,12 @@ static signed int validate_recv_ctrl_frame(struct adapter *padapter, union recv_update_beacon (padapter,WLAN_EID_TIM ,NULL , true); } -spin_unlock_bh (&psta->sleep_q.lock); +/* spin_unlock_bh(&psta->sleep_q.lock); */ +spin_unlock_bh (&pxmitpriv->lock); }else { -spin_unlock_bh (&psta->sleep_q.lock); +/* spin_unlock_bh(&psta->sleep_q.lock); */ +spin_unlock_bh (&pxmitpriv->lock);if (pstapriv->tim_bitmap&BIT (psta->aid)) {if (psta->sleepq_len ==0 ) {
drivers/staging/rtl8723bs/core/rtw_sta_mgt.c +10 -12
@@ -293,48 +293,46 @@ u32 rtw_free_stainfo(struct adapter *padapter, struct sta_info *psta)/* list_del_init(&psta->wakeup_list); */ -spin_lock_bh (&psta->sleep_q.lock); +spin_lock_bh (&pxmitpriv->lock); +rtw_free_xmitframe_queue (pxmitpriv, &psta->sleep_q); psta->sleepq_len =0 ; -spin_unlock_bh (&psta->sleep_q.lock); - -spin_lock_bh (&pxmitpriv->lock);/* vo */ -spin_lock_bh (&pstaxmitpriv->vo_q.sta_pending.lock); +/* spin_lock_bh(&(pxmitpriv->vo_pending.lock)); */ rtw_free_xmitframe_queue (pxmitpriv, &pstaxmitpriv->vo_q.sta_pending);list_del_init (&(pstaxmitpriv->vo_q.tx_pending)); phwxmit = pxmitpriv->hwxmits; phwxmit->accnt -= pstaxmitpriv->vo_q.qcnt; pstaxmitpriv->vo_q.qcnt =0 ; -spin_unlock_bh (&pstaxmitpriv->vo_q.sta_pending.lock); +/* spin_unlock_bh(&(pxmitpriv->vo_pending.lock)); */ /* vi */ -spin_lock_bh (&pstaxmitpriv->vi_q.sta_pending.lock); +/* spin_lock_bh(&(pxmitpriv->vi_pending.lock)); */ rtw_free_xmitframe_queue (pxmitpriv, &pstaxmitpriv->vi_q.sta_pending);list_del_init (&(pstaxmitpriv->vi_q.tx_pending)); phwxmit = pxmitpriv->hwxmits+1 ; phwxmit->accnt -= pstaxmitpriv->vi_q.qcnt; pstaxmitpriv->vi_q.qcnt =0 ; -spin_unlock_bh (&pstaxmitpriv->vi_q.sta_pending.lock); +/* spin_unlock_bh(&(pxmitpriv->vi_pending.lock)); */ /* be */ -spin_lock_bh (&pstaxmitpriv->be_q.sta_pending.lock); +/* spin_lock_bh(&(pxmitpriv->be_pending.lock)); */ rtw_free_xmitframe_queue (pxmitpriv, &pstaxmitpriv->be_q.sta_pending);list_del_init (&(pstaxmitpriv->be_q.tx_pending)); phwxmit = pxmitpriv->hwxmits+2 ; phwxmit->accnt -= pstaxmitpriv->be_q.qcnt; pstaxmitpriv->be_q.qcnt =0 ; -spin_unlock_bh (&pstaxmitpriv->be_q.sta_pending.lock); +/* spin_unlock_bh(&(pxmitpriv->be_pending.lock)); */ /* bk */ -spin_lock_bh (&pstaxmitpriv->bk_q.sta_pending.lock); +/* spin_lock_bh(&(pxmitpriv->bk_pending.lock)); */ rtw_free_xmitframe_queue (pxmitpriv, &pstaxmitpriv->bk_q.sta_pending);list_del_init (&(pstaxmitpriv->bk_q.tx_pending)); phwxmit = pxmitpriv->hwxmits+3 ; phwxmit->accnt -= pstaxmitpriv->bk_q.qcnt; pstaxmitpriv->bk_q.qcnt =0 ; -spin_unlock_bh (&pstaxmitpriv->bk_q.sta_pending.lock); +/* spin_unlock_bh(&(pxmitpriv->bk_pending.lock)); */ spin_unlock_bh (&pxmitpriv->lock);
drivers/staging/rtl8723bs/core/rtw_xmit.c +9 -7
@@ -1734,12 +1734,15 @@ void rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, struct __queue *pframstruct list_head *plist, *phead, *tmp;struct xmit_frame *pxmitframe; +spin_lock_bh (&pframequeue->lock); + phead =get_list_head (pframequeue);list_for_each_safe (plist, tmp, phead) { pxmitframe = list_entry(plist, struct xmit_frame, list);rtw_free_xmitframe (pxmitpriv, pxmitframe); } +spin_unlock_bh (&pframequeue->lock); }s32 rtw_xmitframe_enqueue (struct adapter *padapter,struct xmit_frame *pxmitframe)
@@ -1794,7 +1797,6 @@ s32 rtw_xmit_classifier(struct adapter *padapter, struct xmit_frame *pxmitframe)struct sta_info *psta;struct tx_servq *ptxservq;struct pkt_attrib *pattrib = &pxmitframe->attrib; -struct xmit_priv *xmit_priv = &padapter->xmitpriv;struct hw_xmit *phwxmits = padapter->xmitpriv.hwxmits;signed int res = _SUCCESS;
@@ -1812,14 +1814,12 @@ s32 rtw_xmit_classifier(struct adapter *padapter, struct xmit_frame *pxmitframe) ptxservq =rtw_get_sta_pending (padapter, psta, pattrib->priority, (u8 *)(&ac_index)); -spin_lock_bh (&xmit_priv->lock);if (list_empty (&ptxservq->tx_pending))list_add_tail (&ptxservq->tx_pending,get_list_head (phwxmits[ac_index].sta_queue));list_add_tail (&pxmitframe->list,get_list_head (&ptxservq->sta_pending)); ptxservq->qcnt++; phwxmits[ac_index].accnt++; -spin_unlock_bh (&xmit_priv->lock); exit:
@@ -2202,10 +2202,11 @@ void wakeup_sta_to_xmit(struct adapter *padapter, struct sta_info *psta)struct list_head *xmitframe_plist, *xmitframe_phead, *tmp;struct xmit_frame *pxmitframe =NULL ;struct sta_priv *pstapriv = &padapter->stapriv; +struct xmit_priv *pxmitpriv = &padapter->xmitpriv; psta_bmc =rtw_get_bcmc_stainfo (padapter); -spin_lock_bh (&psta->sleep_q.lock); +spin_lock_bh (&pxmitpriv->lock); xmitframe_phead =get_list_head (&psta->sleep_q);list_for_each_safe (xmitframe_plist, tmp, xmitframe_phead) {
@@ -2306,7 +2307,7 @@ void wakeup_sta_to_xmit(struct adapter *padapter, struct sta_info *psta) _exit: -spin_unlock_bh (&psta->sleep_q.lock); +spin_unlock_bh (&pxmitpriv->lock);if (update_mask)update_beacon (padapter,WLAN_EID_TIM ,NULL , true);
@@ -2318,8 +2319,9 @@ void xmit_delivery_enabled_frames(struct adapter *padapter, struct sta_info *pststruct list_head *xmitframe_plist, *xmitframe_phead, *tmp;struct xmit_frame *pxmitframe =NULL ;struct sta_priv *pstapriv = &padapter->stapriv; +struct xmit_priv *pxmitpriv = &padapter->xmitpriv; -spin_lock_bh (&psta->sleep_q.lock); +spin_lock_bh (&pxmitpriv->lock); xmitframe_phead =get_list_head (&psta->sleep_q);list_for_each_safe (xmitframe_plist, tmp, xmitframe_phead) {
@@ -2372,7 +2374,7 @@ void xmit_delivery_enabled_frames(struct adapter *padapter, struct sta_info *pst } } -spin_unlock_bh (&psta->sleep_q.lock); +spin_unlock_bh (&pxmitpriv->lock); }void enqueue_pending_xmitbuf (struct xmit_priv *pxmitpriv,struct xmit_buf *pxmitbuf)
drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c +2 -0
@@ -507,7 +507,9 @@ s32 rtl8723bs_hal_xmit(rtw_issue_addbareq_cmd (padapter, pxmitframe); } +spin_lock_bh (&pxmitpriv->lock); err =rtw_xmitframe_enqueue (padapter, pxmitframe); +spin_unlock_bh (&pxmitpriv->lock);if (err != _SUCCESS) {rtw_free_xmitframe (pxmitpriv, pxmitframe);
drivers/usb/dwc3/dwc3-pci.c +4 -0
@@ -43,6 +43,7 @@#define PCI_DEVICE_ID_INTEL_ADLP 0x51ee#define PCI_DEVICE_ID_INTEL_ADLM 0x54ee#define PCI_DEVICE_ID_INTEL_ADLS 0x7ae1 +#define PCI_DEVICE_ID_INTEL_RPLS 0x7a61#define PCI_DEVICE_ID_INTEL_TGL 0x9a15#define PCI_DEVICE_ID_AMD_MR 0x163a
@@ -420,6 +421,9 @@ static const struct pci_device_id dwc3_pci_id_table[] = { {PCI_VDEVICE (INTEL ,PCI_DEVICE_ID_INTEL_ADLS ), (kernel_ulong_t) &dwc3_pci_intel_swnode, }, + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_RPLS), + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_TGL), (kernel_ulong_t) &dwc3_pci_intel_swnode, },
drivers/vdpa/mlx5/net/mlx5_vnet.c +16 -0
@@ -1571,11 +1571,27 @@ static virtio_net_ctrl_ack handle_ctrl_mq(struct mlx5_vdpa_dev *mvdev, u8 cmd)switch (cmd) {case VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET : +/* This mq feature check aligns with pre-existing userspace +* implementation. +* +* Without it, an untrusted driver could fake a multiqueue config +* request down to a non-mq device that may cause kernel to +* panic due to uninitialized resources for extra vqs. Even with +* a well behaving guest driver, it is not expected to allow +* changing the number of vqs on a non-mq device. +*/ +if (!MLX5_FEATURE (mvdev,VIRTIO_NET_F_MQ )) +break ; + read =vringh_iov_pull_iotlb (&cvq->vring, &cvq->riov, (void *)&mq,sizeof (mq));if (read !=sizeof (mq))break ; newqps =mlx5vdpa16_to_cpu (mvdev, mq.virtqueue_pairs); +if (newqps <VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN || + newqps >mlx5_vdpa_max_qps (mvdev->max_vqs)) +break ; +if (ndev->cur_num_vqs ==2 * newqps) { status =VIRTIO_NET_OK ;break ;
drivers/vdpa/vdpa_user/iova_domain.c +1 -1
@@ -302,7 +302,7 @@ vduse_domain_alloc_iova(struct iova_domain *iovad, iova_len =roundup_pow_of_two (iova_len); iova_pfn =alloc_iova_fast (iovad, iova_len, limit >> shift, true); -return iova_pfn << shift; +return (dma_addr_t )iova_pfn << shift; } static void vduse_domain_free_iova(struct iova_domain *iovad,
drivers/vdpa/virtio_pci/vp_vdpa.c +1 -1
@@ -525,8 +525,8 @@ static void vp_vdpa_remove(struct pci_dev *pdev) {struct vp_vdpa *vp_vdpa =pci_get_drvdata (pdev); -vdpa_unregister_device (&vp_vdpa->vdpa);vp_modern_remove (&vp_vdpa->mdev); +vdpa_unregister_device (&vp_vdpa->vdpa); }static struct pci_driver vp_vdpa_driver = {
drivers/vhost/iotlb.c +11 -0
@@ -57,6 +57,17 @@ int vhost_iotlb_add_range_ctx(struct vhost_iotlb *iotlb,if (last < start)return -EFAULT ; +/* If the range being mapped is [0, ULONG_MAX], split it into two entries +* otherwise its size would overflow u64. +*/ +if (start ==0 && last ==ULONG_MAX ) { +u64 mid = last /2 ; + +vhost_iotlb_add_range_ctx (iotlb, start, mid, addr, perm, opaque); + addr += mid +1 ; + start = mid +1 ; + } +if (iotlb->limit && iotlb->nmaps == iotlb->limit && iotlb->flags &VHOST_IOTLB_FLAG_RETIRE ) {
drivers/vhost/vhost.c +7 -0
@@ -1170,6 +1170,13 @@ ssize_t vhost_chr_write_iter(struct vhost_dev *dev, goto done; } +if ((msg.type ==VHOST_IOTLB_UPDATE || + msg.type ==VHOST_IOTLB_INVALIDATE ) && + msg.size ==0 ) { + ret = -EINVAL ; + goto done; + } +if (dev->msg_handler) ret = dev->msg_handler (dev, &msg);else
drivers/virtio/virtio.c +22 -18
@@ -166,14 +166,13 @@ void virtio_add_status(struct virtio_device *dev, unsigned int status) }EXPORT_SYMBOL_GPL (virtio_add_status); -int virtio_finalize_features (struct virtio_device *dev) +/* Do some validation, then set FEATURES_OK */ +static int virtio_features_ok (struct virtio_device *dev) { -int ret = dev->config->finalize_features (dev);unsigned status; +int ret;might_sleep (); -if (ret) -return ret; ret =arch_has_restricted_virtio_memory_access ();if (ret) {
@@ -202,7 +201,6 @@ int virtio_finalize_features(struct virtio_device *dev) }return 0 ; } -EXPORT_SYMBOL_GPL (virtio_finalize_features);static int virtio_dev_probe (struct device *_d) {
@@ -239,17 +237,6 @@ static int virtio_dev_probe(struct device *_d) driver_features_legacy = driver_features; } -/* -* Some devices detect legacy solely via F_VERSION_1. Write -* F_VERSION_1 to force LE config space accesses before FEATURES_OK for -* these when needed. -*/ -if (drv->validate && !virtio_legacy_is_little_endian () - && device_features &BIT_ULL (VIRTIO_F_VERSION_1 )) { - dev->features =BIT_ULL (VIRTIO_F_VERSION_1 ); - dev->config->finalize_features (dev); - } -if (device_features & (1ULL <<VIRTIO_F_VERSION_1 )) dev->features = driver_features & device_features;else
@@ -260,13 +247,26 @@ static int virtio_dev_probe(struct device *_d)if (device_features & (1ULL << i))__virtio_set_bit (dev, i); + err = dev->config->finalize_features (dev); +if (err) + goto err; +if (drv->validate) { +u64 features = dev->features; + err = drv->validate (dev);if (err) goto err; + +/* Did validation change any features? Then write them again. */ +if (features != dev->features) { + err = dev->config->finalize_features (dev); +if (err) + goto err; + } } - err =virtio_finalize_features (dev); + err =virtio_features_ok (dev);if (err) goto err;
@@ -490,7 +490,11 @@ int virtio_device_restore(struct virtio_device *dev)/* We have a driver! */ virtio_add_status (dev,VIRTIO_CONFIG_S_DRIVER ); - ret =virtio_finalize_features (dev); + ret = dev->config->finalize_features (dev); +if (ret) + goto err; + + ret =virtio_features_ok (dev);if (ret) goto err;
fs/btrfs/block-group.c +2 -7
@@ -1508,7 +1508,6 @@ void btrfs_reclaim_bgs_work(struct work_struct *work) container_of(work, struct btrfs_fs_info, reclaim_bgs_work);struct btrfs_block_group *bg;struct btrfs_space_info *space_info; -LIST_HEAD (again_list);if (!test_bit (BTRFS_FS_OPEN , &fs_info->flags))return ;
@@ -1585,18 +1584,14 @@ void btrfs_reclaim_bgs_work(struct work_struct *work) div64_u64(zone_unusable * 100, bg->length));trace_btrfs_reclaim_block_group (bg); ret =btrfs_relocate_chunk (fs_info, bg->start); -if (ret && ret != -EAGAIN ) +if (ret)btrfs_err (fs_info,"error relocating chunk %llu" , bg->start); next: +btrfs_put_block_group (bg);spin_lock (&fs_info->unused_bgs_lock); -if (ret == -EAGAIN &&list_empty (&bg->bg_list)) -list_add_tail (&bg->bg_list, &again_list); -else -btrfs_put_block_group (bg); } -list_splice_tail (&again_list, &fs_info->reclaim_bgs);spin_unlock (&fs_info->unused_bgs_lock);mutex_unlock (&fs_info->reclaim_bgs_lock);btrfs_exclop_finish (fs_info);
fs/btrfs/ctree.c +74 -24
119 lines not on this page · raw message
fs/btrfs/send.c +308 -49
357 lines not on this page · raw message
kernel/trace/trace_osnoise.c +63 -21
84 lines not on this page · raw message
mm/gup.c +19 -38
57 lines not on this page · raw message
tools/testing/selftests/bpf/prog_tests/timer_crash.c new file +32 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/timer_crash.c new file +54 -0
54 lines not on this page · raw message
tools/testing/selftests/memfd/memfd_test.c +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/vm/map_fixed_noreplace.c +37 -12
49 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.