Linux 5.10.43
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.43 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.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/imx6dl-yapp4-common.dtsi | 6 arch/arm/boot/dts/imx6q-dhcom-som.dtsi | 12 arch/arm/boot/dts/imx6qdl-emcon-avari.dtsi | 2 arch/arm/boot/dts/imx7d-meerkat96.dts | 2 arch/arm/boot/dts/imx7d-pico.dtsi | 2 arch/arm64/boot/dts/freescale/fsl-ls1028a-kontron-sl28-var4.dts | 5 arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi | 4 arch/arm64/boot/dts/freescale/imx8mq-zii-ultra.dtsi | 4 arch/arm64/boot/dts/ti/k3-j7200-main.dtsi | 2 arch/arm64/kvm/sys_regs.c | 42 +- arch/powerpc/kernel/kprobes.c | 4 arch/riscv/kernel/vdso/Makefile | 4 arch/x86/include/asm/apic.h | 1 arch/x86/include/asm/disabled-features.h | 7 arch/x86/include/asm/fpu/api.h | 6 arch/x86/include/asm/fpu/internal.h | 7 arch/x86/include/asm/kvm_para.h | 10 arch/x86/kernel/apic/apic.c | 1 arch/x86/kernel/apic/vector.c | 20 + arch/x86/kernel/fpu/xstate.c | 57 --- arch/x86/kernel/kvm.c | 92 +++- arch/x86/kernel/kvmclock.c | 26 - arch/x86/kvm/svm/svm.c | 8 arch/x86/mm/mem_encrypt_identity.c | 11 drivers/acpi/acpica/utdelete.c | 8 drivers/bus/ti-sysc.c | 57 ++- drivers/firmware/efi/cper.c | 4 drivers/firmware/efi/fdtparams.c | 3 drivers/firmware/efi/libstub/file.c | 2 drivers/firmware/efi/memattr.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 16 drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c | 4 drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c | 4 drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 1 drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c | 5 drivers/gpu/drm/i915/selftests/i915_request.c | 4 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 3 drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c | 51 -- drivers/hid/hid-logitech-hidpp.c | 1 drivers/hid/hid-magicmouse.c | 2 drivers/hid/hid-multitouch.c | 10 drivers/hid/i2c-hid/i2c-hid-core.c | 13 drivers/hid/usbhid/hid-pidff.c | 1 drivers/hwmon/dell-smm-hwmon.c | 4 drivers/hwmon/pmbus/isl68137.c | 4 drivers/i2c/busses/i2c-qcom-geni.c | 21 + drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 2 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 4 drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c | 14 drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_mqprio.c | 9 drivers/net/ethernet/chelsio/cxgb4/sge.c | 6 drivers/net/ethernet/intel/i40e/i40e_txrx.c | 7 drivers/net/ethernet/intel/i40e/i40e_xsk.c | 15 drivers/net/ethernet/intel/ice/ice_ethtool.c | 51 -- drivers/net/ethernet/intel/ice/ice_hw_autogen.h | 1 drivers/net/ethernet/intel/ice/ice_lib.c | 2 drivers/net/ethernet/intel/ice/ice_txrx.c | 24 - drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c | 19 - drivers/net/ethernet/intel/ice/ice_xsk.c | 16 drivers/net/ethernet/intel/igb/igb_main.c | 10 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 16 drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 21 - drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 5 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 9 drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c | 3 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_fw.c | 3 drivers/net/usb/cdc_ncm.c | 12 drivers/net/wireguard/Makefile | 3 drivers/net/wireguard/allowedips.c | 189 +++++----- drivers/net/wireguard/allowedips.h | 14 drivers/net/wireguard/main.c | 17 drivers/net/wireguard/peer.c | 27 + drivers/net/wireguard/peer.h | 3 drivers/net/wireguard/selftest/allowedips.c | 165 ++++---- drivers/net/wireguard/socket.c | 2 drivers/net/xen-netback/interface.c | 6 drivers/nvme/host/rdma.c | 5 drivers/nvme/target/core.c | 33 - drivers/tee/optee/call.c | 6 drivers/tee/optee/optee_msg.h | 6 drivers/tty/serial/stm32-usart.c | 22 - drivers/usb/dwc2/core_intr.c | 4 drivers/vfio/pci/Kconfig | 1 drivers/vfio/pci/vfio_pci_config.c | 2 drivers/vfio/platform/vfio_platform_common.c | 2 fs/btrfs/extent-tree.c | 12 fs/btrfs/file-item.c | 10 fs/btrfs/inode.c | 19 - fs/btrfs/reflink.c | 38 +- fs/btrfs/tree-checker.c | 16 fs/btrfs/tree-log.c | 13 fs/ext4/extents.c | 43 +- fs/ext4/fast_commit.c | 182 ++++----- fs/ext4/fast_commit.h | 7 fs/ext4/ialloc.c | 6 fs/ext4/mballoc.c | 2 fs/ext4/super.c | 11 fs/gfs2/glock.c | 2 fs/io_uring.c | 6 fs/ocfs2/file.c | 55 ++ include/linux/mlx5/mlx5_ifc.h | 2 include/linux/platform_data/ti-sysc.h | 1 include/linux/usb/usbnet.h | 2 include/net/caif/caif_dev.h | 2 include/net/caif/cfcnfg.h | 2 include/net/caif/cfserl.h | 1 include/net/tls.h | 10 init/main.c | 2 kernel/bpf/helpers.c | 19 - kernel/trace/bpf_trace.c | 32 - lib/lz4/lz4_decompress.c | 6 lib/lz4/lz4defs.h | 1 mm/debug_vm_pgtable.c | 4 mm/hugetlb.c | 14 mm/page_alloc.c | 2 net/bluetooth/hci_core.c | 7 net/bluetooth/hci_sock.c | 4 net/caif/caif_dev.c | 13 net/caif/caif_usb.c | 14 net/caif/cfcnfg.c | 16 net/caif/cfserl.c | 5 net/core/devlink.c | 4 net/core/neighbour.c | 1 net/core/sock.c | 16 net/dsa/tag_8021q.c | 2 net/ieee802154/nl-mac.c | 4 net/ieee802154/nl-phy.c | 4 net/ipv6/route.c | 8 net/mptcp/subflow.c | 17 net/netfilter/ipvs/ip_vs_ctl.c | 2 net/netfilter/nf_conntrack_proto.c | 2 net/netfilter/nf_tables_api.c | 4 net/netfilter/nfnetlink_cthelper.c | 8 net/netfilter/nft_ct.c | 2 net/nfc/llcp_sock.c | 2 net/sched/act_ct.c | 10 net/tipc/bearer.c | 94 +++- net/tls/tls_device.c | 60 ++- net/tls/tls_device_fallback.c | 7 net/tls/tls_main.c | 1 samples/vfio-mdev/mdpy-fb.c | 13 sound/core/timer.c | 3 sound/pci/hda/hda_codec.c | 5 sound/pci/hda/patch_realtek.c | 1 tools/perf/util/dwarf-aux.c | 8 tools/perf/util/probe-finder.c | 3 tools/testing/selftests/wireguard/netns.sh | 1 tools/testing/selftests/wireguard/qemu/kernel.config | 1 150 files changed, 1259 insertions(+), 924 deletions(-)
Ahelenia Ziemiańska (1):
HID: multitouch: require Finger field to mark Win8 reports as MT
Alexander Aring (1):
net: sock: fix in-kernel mark setting
Alexey Makhalov (1):
ext4: fix memory leak in ext4_fill_super
Anand Jain (1):
btrfs: fix unmountable seed device after fstrim
Ariel Levkovich (1):
net/sched: act_ct: Fix ct template allocation for zone 0
Armin Wolf (1):
hwmon: (dell-smm-hwmon) Fix index values
Arnd Bergmann (1):
HID: i2c-hid: fix format string mismatch
Aya Levin (1):
net/mlx5e: Fix incompatible casting
Bob Peterson (1):
gfs2: fix scheduling while atomic bug in glocks
Brett Creeley (2):
ice: Fix allowing VF to request more/less queues via virtchnl
ice: Fix VFR issues for AVF drivers that expect ATQLEN cleared
Carlos M (1):
ALSA: hda: Fix for mute key LED for HP Pavilion 15-CK0xx
Changbin Du (1):
efi/fdt: fix panic when no valid fdt found
Coco Li (1):
ipv6: Fix KASAN: slab-out-of-bounds Read in fib6_nh_flush_exceptions
Dan Carpenter (1):
efi/libstub: prevent read overflow in find_file_option()
Daniel Borkmann (1):
bpf, lockdown, audit: Fix buggy SELinux lockdown permission checks
Dave Ertman (1):
ice: Allow all LLDP packets from PF to Tx
David Ahern (1):
neighbour: allow NUD_NOARP entries to be forced GCed
Ding Hui (1):
mm/page_alloc: fix counting of free pages after take off from buddy
Dmitry Baryshkov (1):
drm/msm/dpu: always use mdp device to scale bandwidth
Erik Kaneda (1):
ACPICA: Clean up context mutex during object deletion
Fabio Estevam (2):
ARM: dts: imx7d-meerkat96: Fix the 'tuning-step' property
ARM: dts: imx7d-pico: Fix the 'tuning-step' property
Filipe Manana (1):
btrfs: fix deadlock when cloning inline extents and low on available space
Florian Westphal (1):
netfilter: conntrack: unregister ipv4 sockopts on error unwind
Gao Xiang (1):
lib/lz4: explicitly support in-place decompression
Geert Uytterhoeven (1):
ARM: dts: imx: emcon-avari: Fix nxp,pca8574 #gpio-cells
Gerald Schaefer (1):
mm/debug_vm_pgtable: fix alignment for pmd/pud_advanced_tests()
Grant Grundler (1):
net: usb: cdc_ncm: don't spew notifications
Grant Peltier (1):
hwmon: (pmbus/isl68137) remove READ_TEMPERATURE_3 for RAA228228
Greg Kroah-Hartman (1):
Linux 5.10.43
Haiyue Wang (1):
ice: handle the VF VSI rebuild failure
Harshad Shirwadkar (1):
ext4: fix fast commit alignment issues
Heiner Kallweit (1):
efi: Allow EFI_MEMORY_XP and EFI_MEMORY_RO both to be cleared
Hoang Le (2):
tipc: add extack messages for bearer/media failure
tipc: fix unique bearer names sanity check
Hui Wang (1):
ALSA: hda: update the power_state during the direct-complete
James Zhu (3):
drm/amdgpu/vcn3: add cancel_delayed_work_sync before power gate drm/amdgpu/jpeg2.5: add cancel_delayed_work_sync before power gate drm/amdgpu/jpeg3: add cancel_delayed_work_sync before power gate
Jason A. Donenfeld (9):
wireguard: do not use -O3
wireguard: peer: allocate in kmem_cache
wireguard: use synchronize_net rather than synchronize_rcu
wireguard: selftests: remove old conntrack kconfig value
wireguard: selftests: make sure rp_filter is disabled on vethc
wireguard: allowedips: initialize list head in selftest
wireguard: allowedips: remove nodes in O(1)
wireguard: allowedips: allocate nodes in kmem_cache
wireguard: allowedips: free empty intermediate nodes when removing single node
Jens Wiklander (1):
optee: use export_uuid() to copy client UUID
Jisheng Zhang (1):
riscv: vdso: fix and clean-up Makefile
Johan Hovold (2):
serial: stm32: fix threaded interrupt handling
HID: magicmouse: fix NULL-deref on disconnect
Johnny Chuang (1):
HID: i2c-hid: Skip ELAN power-on command after reset
Josef Bacik (6):
btrfs: tree-checker: do not error out if extent ref hash doesn't match
btrfs: mark ordered extent and inode with error if we fail to finish
btrfs: fix error handling in btrfs_del_csums
btrfs: return errors from btrfs_del_csums in cleanup_ref_head
btrfs: fixup error handling in fixup_inode_link_counts
btrfs: abort in rename_exchange if we fail to insert the second ref
Julian Anastasov (1):
ipvs: ignore IP_VS_SVC_F_HASHED flag when adding service
Junxiao Bi (1):
ocfs2: fix data corruption by fallocate
Krzysztof Kozlowski (1):
nfc: fix NULL ptr dereference in llcp_sock_getname() after failed connect
Li Huafei (1):
perf probe: Fix NULL pointer dereference in convert_variable_location()
Lin Ma (2):
Bluetooth: fix the erroneous flush_work() order
Bluetooth: use correct lock to prevent UAF of hdev object
Luben Tuikov (1):
drm/amdgpu: Don't query CE and UE errors
Lucas Stach (1):
arm64: dts: zii-ultra: fix 12V_MAIN voltage
Maciej Fijalkowski (1):
ice: simplify ice_run_xdp
Magnus Karlsson (8):
igb: add correct exception tracing for XDP
ixgbevf: add correct exception tracing for XDP
i40e: optimize for XDP_REDIRECT in xsk path
i40e: add correct exception tracing for XDP
ice: optimize for XDP_REDIRECT in xsk path
ice: add correct exception tracing for XDP
ixgbe: optimize for XDP_REDIRECT in xsk path
ixgbe: add correct exception tracing for XDP
Marc Zyngier (1):
KVM: arm64: Fix debug register indexing
Marek Vasut (1):
ARM: dts: imx6q-dhcom: Add PU,VDD1P1,VDD2P5 regulators
Mark Rutland (1):
pid: take a reference when initializing cad_pid
Max Gurtovoy (2):
vfio/platform: fix module_put call in error flow
nvmet: fix freeing unallocated p2pmem
Maxim Mikityanskiy (2):
net/tls: Replace TLS_RX_SYNC_RUNNING with RCU
net/tls: Fix use-after-free after the TLS device goes down and up
Michael Walle (2):
arm64: dts: ls1028a: fix memory node
arm64: dts: freescale: sl28: var4: fix RGMII clock and voltage
Michal Vokáč (1):
ARM: dts: imx6dl-yapp4: Fix RGMII connection to QCA8334 switch
Mina Almasry (1):
mm, hugetlb: fix simple resv_huge_pages underflow on UFFDIO_COPY
Moshe Shemesh (1):
net/mlx5: Check firmware sync reset requested is set before trying to abort it
Naveen N. Rao (1):
powerpc/kprobes: Fix validation of prefixed instructions across page boundary
Nirmoy Das (1):
drm/amdgpu: make sure we unpin the UVD BO
Pablo Neira Ayuso (3):
netfilter: nft_ct: skip expectations for confirmed conntrack
netfilter: nfnetlink_cthelper: hit EBUSY on updates if size mismatches
netfilter: nf_tables: missing error reporting for not selected expressions
Paolo Abeni (1):
mptcp: always parse mptcp options for MPC reqsk
Parav Pandit (1):
devlink: Correct VIRTUAL port to not have phys_port attributes
Paul Blakey (1):
net/sched: act_ct: Offload connections with commit action
Paul Greenwalt (1):
ice: report supported and advertised autoneg using PHY capabilities
Pavel Begunkov (2):
io_uring: fix link timeout refs
io_uring: use better types for cflags
Pavel Skripkin (4):
net: caif: added cfserl_release function
net: caif: add proper error handling
net: caif: fix memory leak in caif_device_notify
net: caif: fix memory leak in cfusbl_device_notify
Phil Elwell (1):
usb: dwc2: Fix build in periphal-only mode
Phillip Potter (1):
ext4: fix memory leak in ext4_mb_init_backend on error path.
Pu Wen (1):
x86/sev: Check SME/SEV support in CPUID first
Rahul Lakkireddy (2):
cxgb4: fix regression with HASH tc prio value update
cxgb4: avoid link re-train during TC-MQPRIO configuration
Randy Dunlap (1):
vfio/pci: zap_vma_ptes() needs MMU
Rasmus Villemoes (1):
efi: cper: fix snprintf() use in cper_dimm_err_location()
Ritesh Harjani (1):
ext4: fix accessing uninit percpu counter variable with fast_commit
Roger Pau Monne (1):
xen-netback: take a reference to the RX task thread
Roi Dayan (1):
net/mlx5e: Check for needed capability for cvlan matching
Roja Rani Yarubandi (2):
i2c: qcom-geni: Add shutdown callback for i2c
i2c: qcom-geni: Suspend and resume the bus during SYSTEM_SLEEP_PM ops
Sagi Grimberg (1):
nvme-rdma: fix in-casule data send for chained sgls
Sean Christopherson (1):
KVM: SVM: Truncate GPR value for DR and CR accesses in !64-bit mode
Takashi Iwai (1):
ALSA: timer: Fix master timer notification
Thomas Gleixner (2):
x86/cpufeatures: Force disable X86_FEATURE_ENQCMD and remove update_pasid() x86/apic: Mark _all_ legacy interrupts when IO/APIC is missing
Tobias Klauser (1):
bpf: Simplify cases in bpf_base_func_proto
Tom Rix (1):
HID: logitech-hidpp: initialize level variable
Tony Lindgren (2):
bus: ti-sysc: Fix am335x resume hang for usb otg module
bus: ti-sysc: Fix flakey idling of uarts and stop using swsup_sidle_act
Vignesh Raghavendra (1):
arm64: dts: ti: j7200-main: Mark Main NAVSS as dma-coherent
Vitaly Kuznetsov (3):
x86/kvm: Teardown PV features on boot CPU as well x86/kvm: Disable kvmclock on all CPUs on shutdown x86/kvm: Disable all PV features on crash
Vladimir Oltean (1):
net: dsa: tag_8021q: fix the VLAN IDs used for encoding sub-VLANs
Wei Yongjun (2):
samples: vfio-mdev: fix error handing in mdpy_fb_probe()
ieee802154: fix error return code in ieee802154_llsec_getparams()
Ye Bin (1):
ext4: fix bug on in ext4_es_cache_extent as ext4_split_extent_at failed
Yevgeny Kliteynik (1):
net/mlx5: DR, Create multi-destination flow table with level less than 64
Zhen Lei (3):
vfio/pci: Fix error return code in vfio_ecap_init()
HID: pidff: fix error return code in hid_pidff_init()
ieee802154: fix error return code in ieee802154_add_iface()
Zhihao Cheng (1):
drm/i915/selftests: Fix return value check in live_breadcrumbs_smoketest()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 42 +SUBLEVEL = 43 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/imx6dl-yapp4-common.dtsi +5 -1
@@ -105,9 +105,13 @@ &fec { phy-reset-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>; phy-reset-duration = <20>; phy-supply = <&sw2_reg>; - phy-handle = <ðphy0>; status = "okay"; + fixed-link { + speed = <1000>; + full-duplex; + }; + mdio { #address-cells = <1>; #size-cells = <0>;
arch/arm/boot/dts/imx6q-dhcom-som.dtsi +12 -0
@@ -406,6 +406,18 @@ ®_soc { vin-supply = <&sw1_reg>; }; +®_pu { + vin-supply = <&sw1_reg>; +}; + +®_vdd1p1 { + vin-supply = <&sw2_reg>; +}; + +®_vdd2p5 { + vin-supply = <&sw2_reg>; +}; + &uart1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart1>;
arch/arm/boot/dts/imx6qdl-emcon-avari.dtsi +1 -1
@@ -126,7 +126,7 @@ boardid: gpio@3a { compatible = "nxp,pca8574"; reg = <0x3a>; gpio-controller; - #gpio-cells = <1>; + #gpio-cells = <2>; }; };
arch/arm/boot/dts/imx7d-meerkat96.dts +1 -1
@@ -193,7 +193,7 @@ &usdhc1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usdhc1>; keep-power-in-suspend; - tuning-step = <2>; + fsl,tuning-step = <2>; vmmc-supply = <®_3p3v>; no-1-8-v; broken-cd;
arch/arm/boot/dts/imx7d-pico.dtsi +1 -1
@@ -351,7 +351,7 @@ &usdhc1 { pinctrl-2 = <&pinctrl_usdhc1_200mhz>; cd-gpios = <&gpio5 0 GPIO_ACTIVE_LOW>; bus-width = <4>; - tuning-step = <2>; + fsl,tuning-step = <2>; vmmc-supply = <®_3p3v>; wakeup-source; no-1-8-v;
arch/arm64/boot/dts/freescale/fsl-ls1028a-kontron-sl28-var4.dts +2 -3
@@ -31,11 +31,10 @@ phy1: ethernet-phy@4 { reg = <0x4>; eee-broken-1000t; eee-broken-100tx; - qca,clk-out-frequency = <125000000>; qca,clk-out-strength = <AR803X_STRENGTH_FULL>; - - vddio-supply = <&vddh>; + qca,keep-pll-enabled; + vddio-supply = <&vddio>; vddio: vddio-regulator { regulator-name = "VDDIO";
arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi +2 -2
@@ -192,8 +192,8 @@ soc: soc { ddr: memory-controller@1080000 { compatible = "fsl,qoriq-memory-controller"; reg = <0x0 0x1080000 0x0 0x1000>; - interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>; - big-endian; + interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>; + little-endian; }; dcfg: syscon@1e00000 {
arch/arm64/boot/dts/freescale/imx8mq-zii-ultra.dtsi +2 -2
@@ -45,8 +45,8 @@ pcie1_refclk: clock-pcie1-refclk { reg_12p0_main: regulator-12p0-main { compatible = "regulator-fixed"; regulator-name = "12V_MAIN"; - regulator-min-microvolt = <5000000>; - regulator-max-microvolt = <5000000>; + regulator-min-microvolt = <12000000>; + regulator-max-microvolt = <12000000>; regulator-always-on; };
arch/arm64/boot/dts/ti/k3-j7200-main.dtsi +2 -0
@@ -78,6 +78,8 @@ main_navss: bus@30000000 { #size-cells = <2>; ranges = <0x00 0x30000000 0x00 0x30000000 0x00 0x0c400000>; ti,sci-dev-id = <199>; + dma-coherent; + dma-ranges; main_navss_intr: interrupt-controller1 { compatible = "ti,sci-intr";
arch/arm64/kvm/sys_regs.c +21 -21
162 lines not on this page · raw message
arch/powerpc/kernel/kprobes.c +2 -2
@@ -108,7 +108,6 @@ int arch_prepare_kprobe(struct kprobe *p)int ret =0 ;struct kprobe *prev;struct ppc_inst insn =ppc_inst_read ((struct ppc_inst *)p->addr); -struct ppc_inst prefix =ppc_inst_read ((struct ppc_inst *)(p->addr -1 ));if ((unsigned long )p->addr &0x03 ) {printk ("Attempt to register kprobe at an unaligned address\n" );
@@ -116,7 +115,8 @@ int arch_prepare_kprobe(struct kprobe *p) }else if (IS_MTMSRD (insn) ||IS_RFID (insn) ||IS_RFI (insn)) {printk ("Cannot register a kprobe on rfi/rfid or mtmsr[d]\n" ); ret = -EINVAL ; - }else if (ppc_inst_prefixed (prefix)) { + }else if ((unsigned long )p->addr & ~PAGE_MASK && +ppc_inst_prefixed (ppc_inst_read ((struct ppc_inst *)(p->addr -1 )))) {printk ("Cannot register a kprobe on the second word of prefixed instruction\n" ); ret = -EINVAL ; }
arch/riscv/kernel/vdso/Makefile +2 -2
@@ -23,7 +23,7 @@ ifneq ($(c-gettimeofday-y),) endif # Build rules -targets := $(obj-vdso) vdso.so vdso.so.dbg vdso.lds vdso-dummy.o +targets := $(obj-vdso) vdso.so vdso.so.dbg vdso.lds vdso-syms.S obj-vdso := $(addprefix $(obj)/, $(obj-vdso)) obj-y += vdso.o vdso-syms.o
@@ -41,7 +41,7 @@ KASAN_SANITIZE := n $(obj)/vdso.o: $(obj)/vdso.so # link rule for the .so file, .lds has to be first -$(obj)/vdso.so.dbg: $(src)/vdso.lds $(obj-vdso) FORCE +$(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE $(call if_changed,vdsold) LDFLAGS_vdso.so.dbg = -shared -s -soname=linux-vdso.so.1 \ --build-id=sha1 --hash-style=both --eh-frame-hdr
arch/x86/include/asm/apic.h +1 -0
@@ -174,6 +174,7 @@ static inline int apic_is_clustered_box(void)extern int setup_APIC_eilvt (u8 lvt_off,u8 vector,u8 msg_type,u8 mask);extern void lapic_assign_system_vectors (void );extern void lapic_assign_legacy_vector (unsigned int isairq,bool replace); +extern void lapic_update_legacy_vectors (void );extern void lapic_online (void );extern void lapic_offline (void );extern bool apic_needs_pit (void );
arch/x86/include/asm/disabled-features.h +2 -5
@@ -56,11 +56,8 @@# define DISABLE_PTI (1 << (X86_FEATURE_PTI & 31))#endif -#ifdef CONFIG_IOMMU_SUPPORT -# define DISABLE_ENQCMD 0 -#else -# define DISABLE_ENQCMD (1 << (X86_FEATURE_ENQCMD & 31)) -#endif +/* Force disable because it's broken beyond repair */ +#define DISABLE_ENQCMD (1 << (X86_FEATURE_ENQCMD & 31))/* * Make sure to add features to the correct mask
arch/x86/include/asm/fpu/api.h +1 -5
@@ -79,10 +79,6 @@ extern int cpu_has_xfeatures(u64 xfeatures_mask, const char **feature_name);*/ #define PASID_DISABLED 0 -#ifdef CONFIG_IOMMU_SUPPORT -/* Update current's PASID MSR/state by mm's PASID. */ -void update_pasid (void ); -#else static inline void update_pasid (void ) { } -#endif +#endif /* _ASM_X86_FPU_API_H */
arch/x86/include/asm/fpu/internal.h +0 -7
@@ -584,13 +584,6 @@ static inline void switch_fpu_finish(struct fpu *new_fpu) pkru_val = pk->pkru; }__write_pkru (pkru_val); - -/* -* Expensive PASID MSR write will be avoided in update_pasid() because -* TIF_NEED_FPU_LOAD was set. And the PASID state won't be updated -* unless it's different from mm->pasid to reduce overhead. -*/ -update_pasid (); }#endif /* _ASM_X86_FPU_INTERNAL_H */
arch/x86/include/asm/kvm_para.h +2 -8
@@ -7,8 +7,6 @@#include <linux/interrupt.h> #include <uapi/asm/kvm_para.h> -extern void kvmclock_init (void ); -#ifdef CONFIG_KVM_GUEST bool kvm_check_and_clear_guest_paused (void );#else
@@ -86,13 +84,14 @@ static inline long kvm_hypercall4(unsigned int nr, unsigned long p1, }#ifdef CONFIG_KVM_GUEST +void kvmclock_init (void ); +void kvmclock_disable (void );bool kvm_para_available (void );unsigned int kvm_arch_para_features (void );unsigned int kvm_arch_para_hints (void );void kvm_async_pf_task_wait_schedule (u32 token);void kvm_async_pf_task_wake (u32 token);u32 kvm_read_and_reset_apf_flags (void ); -void kvm_disable_steal_time (void );bool __kvm_handle_async_pf (struct pt_regs *regs,u32 token);DECLARE_STATIC_KEY_FALSE (kvm_async_pf_enabled);
@@ -137,11 +136,6 @@ static inline u32 kvm_read_and_reset_apf_flags(void)return 0 ; } -static inline void kvm_disable_steal_time (void ) -{ -return ; -} - static __always_inline bool kvm_handle_async_pf(struct pt_regs *regs, u32 token) {return false;
arch/x86/kernel/apic/apic.c +1 -0
@@ -2539,6 +2539,7 @@ static void __init apic_bsp_setup(bool upmode)end_local_APIC_setup ();irq_remap_enable_fault_handling ();setup_IO_APIC (); +lapic_update_legacy_vectors (); }#ifdef CONFIG_UP_LATE_INIT
arch/x86/kernel/apic/vector.c +20 -0
@@ -687,6 +687,26 @@ void lapic_assign_legacy_vector(unsigned int irq, bool replace)irq_matrix_assign_system (vector_matrix,ISA_IRQ_VECTOR (irq), replace); } +void __init lapic_update_legacy_vectors (void ) +{ +unsigned int i; + +if (IS_ENABLED (CONFIG_X86_IO_APIC ) && nr_ioapics >0 ) +return ; + +/* +* If the IO/APIC is disabled via config, kernel command line or +* lack of enumeration then all legacy interrupts are routed +* through the PIC. Make sure that they are marked as legacy +* vectors. PIC_CASCADE_IRQ has already been marked in +* lapic_assign_system_vectors(). +*/ +for (i =0 ; i <nr_legacy_irqs (); i++) { +if (i !=PIC_CASCADE_IR ) +lapic_assign_legacy_vector (i, true); + } +} +void __init lapic_assign_system_vectors (void ) {unsigned int i, vector =0 ;
arch/x86/kernel/fpu/xstate.c +0 -57
60 lines not on this page · raw message
arch/x86/kernel/kvm.c +69 -23
142 lines not on this page · raw message
arch/x86/kernel/kvmclock.c +1 -25
@@ -20,7 +20,6 @@#include <asm/hypervisor.h> #include <asm/mem_encrypt.h> #include <asm/x86_init.h> -#include <asm/reboot.h> #include <asm/kvmclock.h> static int kvmclock__initdata =1 ;
@@ -204,28 +203,9 @@ static void kvm_setup_secondary_clock(void) }#endif -/* -* After the clock is registered, the host will keep writing to the -* registered memory location. If the guest happens to shutdown, this memory -* won't be valid. In cases like kexec, in which you install a new kernel, this -* means a random memory location will be kept being written. So before any -* kind of shutdown from our side, we unregister the clock by writing anything -* that does not have the 'enable' bit set in the msr -*/ -#ifdef CONFIG_KEXEC_CORE -static void kvm_crash_shutdown (struct pt_regs *regs) -{ -native_write_msr (msr_kvm_system_time,0 ,0 ); -kvm_disable_steal_time (); -native_machine_crash_shutdown (regs); -} -#endif - -static void kvm_shutdown (void ) +void kvmclock_disable (void ) {native_write_msr (msr_kvm_system_time,0 ,0 ); -kvm_disable_steal_time (); -native_machine_shutdown (); }static void __init kvmclock_init_mem (void )
@@ -352,10 +332,6 @@ void __init kvmclock_init(void)#endif x86_platform.save_sched_clock_state = kvm_save_sched_clock_state; x86_platform.restore_sched_clock_state = kvm_restore_sched_clock_state; - machine_ops.shutdown = kvm_shutdown; -#ifdef CONFIG_KEXEC_CORE - machine_ops.crash_shutdown = kvm_crash_shutdown; -#endif kvm_get_preset_lpj ();/*
arch/x86/kvm/svm/svm.c +4 -4
@@ -2362,7 +2362,7 @@ static int cr_interception(struct vcpu_svm *svm) err =0 ;if (cr >=16 ) {/* mov to cr */ cr -=16 ; - val =kvm_register_read (&svm->vcpu, reg); + val =kvm_register_readl (&svm->vcpu, reg);trace_kvm_cr_write (cr, val);switch (cr) {case 0 :
@@ -2408,7 +2408,7 @@ static int cr_interception(struct vcpu_svm *svm)kvm_queue_exception (&svm->vcpu,UD_VECTOR );return 1 ; } -kvm_register_write (&svm->vcpu, reg, val); +kvm_register_writel (&svm->vcpu, reg, val);trace_kvm_cr_read (cr, val); }return kvm_complete_insn_gp (&svm->vcpu, err);
@@ -2439,13 +2439,13 @@ static int dr_interception(struct vcpu_svm *svm)if (dr >=16 ) {/* mov to DRn */ if (!kvm_require_dr (&svm->vcpu, dr -16 ))return 1 ; - val =kvm_register_read (&svm->vcpu, reg); + val =kvm_register_readl (&svm->vcpu, reg);kvm_set_dr (&svm->vcpu, dr -16 , val); }else {if (!kvm_require_dr (&svm->vcpu, dr))return 1 ;kvm_get_dr (&svm->vcpu, dr, &val); -kvm_register_write (&svm->vcpu, reg, val); +kvm_register_writel (&svm->vcpu, reg, val); }return kvm_skip_emulated_instruction (&svm->vcpu);
arch/x86/mm/mem_encrypt_identity.c +6 -5
@@ -504,10 +504,6 @@ void __init sme_enable(struct boot_params *bp)#define AMD_SME_BIT BIT(0)#define AMD_SEV_BIT BIT(1) -/* Check the SEV MSR whether SEV or SME is enabled */ - sev_status =__rdmsr (MSR_AMD64_SEV ); - feature_mask = (sev_status &MSR_AMD64_SEV_ENABLED ) ?AMD_SEV_BIT :AMD_SME_BIT ; -/* * Check for the SME/SEV feature: * CPUID Fn8000_001F[EAX]
@@ -519,11 +515,16 @@ void __init sme_enable(struct boot_params *bp) eax =0x8000001f ; ecx =0 ;native_cpuid (&eax, &ebx, &ecx, &edx); -if (!(eax & feature_mask)) +/* Check whether SEV or SME is supported */ +if (!(eax & (AMD_SEV_BIT |AMD_SME_BIT )))return ; me_mask =1UL << (ebx &0x3f ); +/* Check the SEV MSR whether SEV or SME is enabled */ + sev_status =__rdmsr (MSR_AMD64_SEV ); + feature_mask = (sev_status &MSR_AMD64_SEV_ENABLED ) ?AMD_SEV_BIT :AMD_SME_BIT ; +/* Check if memory encryption is enabled */ if (feature_mask ==AMD_SME_BIT ) {/*
drivers/acpi/acpica/utdelete.c +8 -0
@@ -285,6 +285,14 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object) }break ; +case ACPI_TYPE_LOCAL_ADDRESS_HANDLER : + +ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS , +"***** Address handler %p\n" , object)); + +acpi_os_delete_mutex (object->address_space.context_mutex); +break ; +default :break ;
drivers/bus/ti-sysc.c +52 -5
93 lines not on this page · raw message
drivers/firmware/efi/cper.c +1 -3
@@ -276,8 +276,7 @@ static int cper_dimm_err_location(struct cper_mem_err_compact *mem, char *msg)if (!msg || !(mem->validation_bits &CPER_MEM_VALID_MODULE_HANDLE ))return 0 ; - n =0 ; - len =CPER_REC_LEN -1 ; + len =CPER_REC_LEN ;dmi_memdev_name (mem->mem_dev_handle, &bank, &device);if (bank && device) n =snprintf (msg, len,"DIMM location: %s %s " , bank, device);
@@ -286,7 +285,6 @@ static int cper_dimm_err_location(struct cper_mem_err_compact *mem, char *msg)"DIMM location: not present. DMI handle: 0x%.4x " , mem->mem_dev_handle); - msg[n] ='\0' ;return n; }
drivers/firmware/efi/fdtparams.c +3 -0
@@ -98,6 +98,9 @@ u64 __init efi_get_fdt_params(struct efi_memory_map_data *mm)BUILD_BUG_ON (ARRAY_SIZE (target) !=ARRAY_SIZE (name));BUILD_BUG_ON (ARRAY_SIZE (target) !=ARRAY_SIZE (dt_params[0 ].params)); +if (!fdt) +return 0 ; +for (i =0 ; i <ARRAY_SIZE (dt_params); i++) { node =fdt_path_offset (fdt, dt_params[i].path);if (node <0 )
drivers/firmware/efi/libstub/file.c +1 -1
@@ -103,7 +103,7 @@ static int find_file_option(const efi_char16_t *cmdline, int cmdline_len,return 0 ;/* Skip any leading slashes */ -while (cmdline[i] ==L'/' || cmdline[i] ==L'\\' ) +while (i < cmdline_len && (cmdline[i] ==L'/' || cmdline[i] ==L'\\' )) i++;while (--result_len >0 && i < cmdline_len) {
drivers/firmware/efi/memattr.c +0 -5
@@ -67,11 +67,6 @@ static bool entry_is_valid(const efi_memory_desc_t *in, efi_memory_desc_t *out)return false; } -if (!(in->attribute & (EFI_MEMORY_RO |EFI_MEMORY_XP ))) { -pr_warn ("Entry attributes invalid: RO and XP bits both cleared\n" ); -return false; - } -if (PAGE_SIZE >EFI_PAGE_SIZE && (!PAGE_ALIGNED (in->phys_addr) || !PAGE_ALIGNED (in->num_pages <<EFI_PAGE_SHIFT ))) {
drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c +0 -16
@@ -337,7 +337,6 @@ static int amdgpu_ctx_query2(struct amdgpu_device *adev, {struct amdgpu_ctx *ctx;struct amdgpu_ctx_mgr *mgr; -unsigned long ras_counter;if (!fpriv)return -EINVAL ;
@@ -362,21 +361,6 @@ static int amdgpu_ctx_query2(struct amdgpu_device *adev,if (atomic_read (&ctx->guilty)) out->state.flags |=AMDGPU_CTX_QUERY2_FLAGS_GUILTY ; -/*query ue count*/ - ras_counter =amdgpu_ras_query_error_count (adev, false); -/*ras counter is monotonic increasing*/ -if (ras_counter != ctx->ras_counter_ue) { - out->state.flags |=AMDGPU_CTX_QUERY2_FLAGS_RAS_UE ; - ctx->ras_counter_ue = ras_counter; - } - -/*query ce count*/ - ras_counter =amdgpu_ras_query_error_count (adev, true); -if (ras_counter != ctx->ras_counter_ce) { - out->state.flags |=AMDGPU_CTX_QUERY2_FLAGS_RAS_CE ; - ctx->ras_counter_ce = ras_counter; - } -mutex_unlock (&mgr->lock);return 0 ; }
drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c +2 -2
@@ -187,14 +187,14 @@ static int jpeg_v2_5_hw_init(void *handle)static int jpeg_v2_5_hw_fini (void *handle) {struct amdgpu_device *adev = (struct amdgpu_device *)handle; -struct amdgpu_ring *ring;int i; +cancel_delayed_work_sync (&adev->vcn.idle_work); +for (i =0 ; i < adev->jpeg.num_jpeg_inst; ++i) {if (adev->jpeg.harvest_config & (1 << i))continue ; - ring = &adev->jpeg.inst[i].ring_dec;if (adev->jpeg.cur_state !=AMD_PG_STATE_GATE &&RREG32_SOC15 (JPEG , i, mmUVD_JRBC_STATUS))jpeg_v2_5_set_powergating_state (adev,AMD_PG_STATE_GATE );
drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c +2 -2
@@ -159,9 +159,9 @@ static int jpeg_v3_0_hw_init(void *handle)static int jpeg_v3_0_hw_fini (void *handle) {struct amdgpu_device *adev = (struct amdgpu_device *)handle; -struct amdgpu_ring *ring; - ring = &adev->jpeg.inst->ring_dec; +cancel_delayed_work_sync (&adev->vcn.idle_work); +if (adev->jpeg.cur_state !=AMD_PG_STATE_GATE &&RREG32_SOC15 (JPEG ,0 , mmUVD_JRBC_STATUS))jpeg_v3_0_set_powergating_state (adev,AMD_PG_STATE_GATE );
drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c +1 -0
@@ -356,6 +356,7 @@ static int uvd_v6_0_enc_ring_test_ib(struct amdgpu_ring *ring, long timeout) error:dma_fence_put (fence); +amdgpu_bo_unpin (bo);amdgpu_bo_unreserve (bo);amdgpu_bo_unref (&bo);return r;
drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c +2 -3
@@ -345,15 +345,14 @@ static int vcn_v3_0_hw_init(void *handle)static int vcn_v3_0_hw_fini (void *handle) {struct amdgpu_device *adev = (struct amdgpu_device *)handle; -struct amdgpu_ring *ring;int i; +cancel_delayed_work_sync (&adev->vcn.idle_work); +for (i =0 ; i < adev->vcn.num_vcn_inst; ++i) {if (adev->vcn.harvest_config & (1 << i))continue ; - ring = &adev->vcn.inst[i].ring_dec; -if (!amdgpu_sriov_vf (adev)) { if ((adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG) || (adev->vcn.cur_state != AMD_PG_STATE_GATE &&
drivers/gpu/drm/i915/selftests/i915_request.c +2 -2
@@ -1391,8 +1391,8 @@ static int live_breadcrumbs_smoketest(void *arg)for (n =0 ; n < smoke[0 ].ncontexts; n++) { smoke[0 ].contexts[n] =live_context (i915, file); -if (!smoke[0 ].contexts[n]) { - ret = -ENOMEM ; +if (IS_ERR (smoke[0 ].contexts[n])) { + ret =PTR_ERR (smoke[0 ].contexts[n]); goto out_contexts; } }
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +1 -2
@@ -931,8 +931,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms)DPU_DEBUG ("REG_DMA is not defined" ); } -if (of_device_is_compatible (dev->dev->of_node,"qcom,sc7180-mdss" )) -dpu_kms_parse_data_bus_icc_path (dpu_kms); +dpu_kms_parse_data_bus_icc_path (dpu_kms);pm_runtime_get_sync (&dpu_kms->pdev->dev);
drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c +1 -50
100 lines not on this page · raw message
drivers/hid/hid-logitech-hidpp.c +1 -0
@@ -1259,6 +1259,7 @@ static int hidpp20_battery_map_status_voltage(u8 data[3], int *voltage,int status;long flags = (long ) data[2 ]; + *level =POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN ;if (flags &0x80 )switch (flags &0x07 ) {
drivers/hid/hid-magicmouse.c +1 -1
@@ -597,7 +597,7 @@ static int magicmouse_probe(struct hid_device *hdev,if (id->vendor ==USB_VENDOR_ID_APPLE && id->product ==USB_DEVICE_ID_APPLE_MAGICTRACKPAD2 && hdev->type !=HID_TYPE_USBMOUSE ) -return 0 ; +return -ENODEV ; msc =devm_kzalloc (&hdev->dev,sizeof (*msc),GFP_KERNEL );if (msc ==NULL ) {
drivers/hid/hid-multitouch.c +7 -3
@@ -604,9 +604,13 @@ static struct mt_report_data *mt_allocate_report_data(struct mt_device *td,if (!(HID_MAIN_ITEM_VARIABLE & field->flags))continue ; -for (n =0 ; n < field->report_count; n++) { -if (field->usage[n].hid ==HID_DG_CONTACTID ) - rdata->is_mt_collection = true; +if (field->logical ==HID_DG_FINGER || td->hdev->group !=HID_GROUP_MULTITOUCH_WIN_8 ) { +for (n =0 ; n < field->report_count; n++) { +if (field->usage[n].hid ==HID_DG_CONTACTID ) { + rdata->is_mt_collection = true; +break ; + } + } } }
drivers/hid/i2c-hid/i2c-hid-core.c +10 -3
@@ -50,6 +50,7 @@#define I2C_HID_QUIRK_BOGUS_IRQ BIT(4)#define I2C_HID_QUIRK_RESET_ON_RESUME BIT(5)#define I2C_HID_QUIRK_BAD_INPUT_SIZE BIT(6) +#define I2C_HID_QUIRK_NO_WAKEUP_AFTER_RESET BIT(7)/* flags */
@@ -183,6 +184,11 @@ static const struct i2c_hid_quirks { I2C_HID_QUIRK_RESET_ON_RESUME }, {USB_VENDOR_ID_ITE ,I2C_DEVICE_ID_ITE_LENOVO_LEGION_Y720 , I2C_HID_QUIRK_BAD_INPUT_SIZE }, +/* +* Sending the wakeup after reset actually break ELAN touchscreen controller +*/ + { USB_VENDOR_ID_ELAN, HID_ANY_ID, + I2C_HID_QUIRK_NO_WAKEUP_AFTER_RESET }, { 0, 0 } };
@@ -466,7 +472,8 @@ static int i2c_hid_hwreset(struct i2c_client *client) }/* At least some SIS devices need this after reset */ - ret =i2c_hid_set_power (client,I2C_HID_PWR_ON ); +if (!(ihid->quirks &I2C_HID_QUIRK_NO_WAKEUP_AFTER_RESET )) + ret =i2c_hid_set_power (client,I2C_HID_PWR_ON ); out_unlock:mutex_unlock (&ihid->reset_lock);
@@ -1131,8 +1138,8 @@ static int i2c_hid_probe(struct i2c_client *client, hid->vendor =le16_to_cpu (ihid->hdesc.wVendorID); hid->product =le16_to_cpu (ihid->hdesc.wProductID); -snprintf (hid->name,sizeof (hid->name),"%s %04hX:%04hX" , - client->name, hid->vendor, hid->product); +snprintf (hid->name,sizeof (hid->name),"%s %04X:%04X" , + client->name, (u16 )hid->vendor, (u16 )hid->product);strlcpy (hid->phys,dev_name (&client->dev),sizeof (hid->phys)); ihid->quirks =i2c_hid_lookup_quirk (hid->vendor, hid->product);
drivers/hid/usbhid/hid-pidff.c +1 -0
@@ -1292,6 +1292,7 @@ int hid_pidff_init(struct hid_device *hid)if (pidff->pool[PID_DEVICE_MANAGED_POOL ].value && pidff->pool[PID_DEVICE_MANAGED_POOL ].value[0 ] ==0 ) { + error = -EPERM ;hid_notice (hid,"device does not support device managed pool\n" ); goto fail;
drivers/hwmon/dell-smm-hwmon.c +2 -2
@@ -838,10 +838,10 @@ static struct attribute *i8k_attrs[] = {static umode_t i8k_is_visible (struct kobject *kobj,struct attribute *attr,int index) { -if (disallow_fan_support && index >=8 ) +if (disallow_fan_support && index >=20 )return 0 ;if (disallow_fan_type_call && - (index ==9 || index ==12 || index ==15 )) + (index ==21 || index ==25 || index ==28 ))return 0 ;if (index >=0 && index <=1 && !(i8k_hwmon_flags &I8K_HWMON_HAVE_TEMP1 ))
drivers/hwmon/pmbus/isl68137.c +2 -2
@@ -244,8 +244,8 @@ static int isl68137_probe(struct i2c_client *client) info->read_word_data = raa_dmpvr2_read_word_data;break ;case raa_dmpvr2_2rail_nontc: - info->func[0 ] &= ~PMBUS_HAVE_TEMP ; - info->func[1 ] &= ~PMBUS_HAVE_TEMP ; + info->func[0 ] &= ~PMBUS_HAVE_TEMP3 ; + info->func[1 ] &= ~PMBUS_HAVE_TEMP3 ; fallthrough;case raa_dmpvr2_2rail: info->pages =2 ;
drivers/i2c/busses/i2c-qcom-geni.c +20 -1
@@ -654,6 +654,14 @@ static int geni_i2c_remove(struct platform_device *pdev)return 0 ; } +static void geni_i2c_shutdown (struct platform_device *pdev) +{ +struct geni_i2c_dev *gi2c =platform_get_drvdata (pdev); + +/* Make client i2c transfers start failing */ +i2c_mark_adapter_suspended (&gi2c->adap); +} +static int __maybe_unused geni_i2c_runtime_suspend (struct device *dev) {int ret;
@@ -694,6 +702,8 @@ static int __maybe_unused geni_i2c_suspend_noirq(struct device *dev) {struct geni_i2c_dev *gi2c =dev_get_drvdata (dev); +i2c_mark_adapter_suspended (&gi2c->adap); +if (!gi2c->suspended) {geni_i2c_runtime_suspend (dev);pm_runtime_disable (dev);
@@ -703,8 +713,16 @@ static int __maybe_unused geni_i2c_suspend_noirq(struct device *dev)return 0 ; } +static int __maybe_unused geni_i2c_resume_noirq (struct device *dev) +{ +struct geni_i2c_dev *gi2c =dev_get_drvdata (dev); + +i2c_mark_adapter_resumed (&gi2c->adap); +return 0 ; +} +static const struct dev_pm_ops geni_i2c_pm_ops = { - SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(geni_i2c_suspend_noirq, NULL) + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(geni_i2c_suspend_noirq, geni_i2c_resume_noirq)SET_RUNTIME_PM_OPS (geni_i2c_runtime_suspend, geni_i2c_runtime_resume,NULL ) };
@@ -718,6 +736,7 @@ MODULE_DEVICE_TABLE(of, geni_i2c_dt_match);static struct platform_driver geni_i2c_driver = { .probe = geni_i2c_probe, .remove = geni_i2c_remove, + .shutdown = geni_i2c_shutdown, .driver = { .name ="geni_i2c" , .pm = &geni_i2c_pm_ops,
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h +0 -2
@@ -2177,8 +2177,6 @@ int cxgb4_update_mac_filt(struct port_info *pi, unsigned int viid, bool persistent, u8 *smt_idx);int cxgb4_get_msix_idx_from_bmap (struct adapter *adap);void cxgb4_free_msix_idx_in_bmap (struct adapter *adap,u32 msix_idx); -int cxgb_open (struct net_device *dev); -int cxgb_close (struct net_device *dev);void cxgb4_enable_rx (struct adapter *adap,struct sge_rspq *q);void cxgb4_quiesce_rx (struct sge_rspq *q);int cxgb4_port_mirror_alloc (struct net_device *dev);
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +2 -2
@@ -2834,7 +2834,7 @@ static void cxgb_down(struct adapter *adapter)/* * net_device operations */ -int cxgb_open (struct net_device *dev) +static int cxgb_open (struct net_device *dev) {struct port_info *pi =netdev_priv (dev);struct adapter *adapter = pi->adapter;
@@ -2882,7 +2882,7 @@ int cxgb_open(struct net_device *dev)return err; } -int cxgb_close (struct net_device *dev) +static int cxgb_close (struct net_device *dev) {struct port_info *pi =netdev_priv (dev);struct adapter *adapter = pi->adapter;
drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c +5 -9
@@ -997,20 +997,16 @@ int cxgb4_tc_flower_destroy(struct net_device *dev,if (!ch_flower)return -ENOENT ; +rhashtable_remove_fast (&adap->flower_tbl, &ch_flower->node, + adap->flower_ht_params); + ret =cxgb4_flow_rule_destroy (dev, ch_flower->fs.tc_prio, &ch_flower->fs, ch_flower->filter_id);if (ret) - goto err; +netdev_err (dev,"Flow rule destroy failed for tid: %u, ret: %d" , + ch_flower->filter_id, ret); - ret =rhashtable_remove_fast (&adap->flower_tbl, &ch_flower->node, - adap->flower_ht_params); -if (ret) { -netdev_err (dev,"Flow remove from rhashtable failed" ); - goto err; - }kfree_rcu (ch_flower, rcu); - -err:return ret; }
drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_mqprio.c +6 -3
@@ -589,7 +589,8 @@ int cxgb4_setup_tc_mqprio(struct net_device *dev,* down before configuring tc params. */ if (netif_running (dev)) { -cxgb_close (dev); +netif_tx_stop_all_queues (dev); +netif_carrier_off (dev); needs_bring_up = true; }
@@ -615,8 +616,10 @@ int cxgb4_setup_tc_mqprio(struct net_device *dev, } out: -if (needs_bring_up) -cxgb_open (dev); +if (needs_bring_up) { +netif_tx_start_all_queues (dev); +netif_carrier_on (dev); + }mutex_unlock (&adap->tc_mqprio->mqprio_mutex);return ret;
drivers/net/ethernet/chelsio/cxgb4/sge.c +6 -0
@@ -2552,6 +2552,12 @@ int cxgb4_ethofld_send_flowc(struct net_device *dev, u32 eotid, u32 tc)if (!eosw_txq)return -ENOMEM ; +if (!(adap->flags &CXGB4_FW_OK )) { +/* Don't stall caller when access to FW is lost */ +complete (&eosw_txq->completion); +return -EIO ; + } + skb =alloc_skb (len,GFP_KERNEL );if (!skb)return -ENOMEM ;
drivers/net/ethernet/intel/i40e/i40e_txrx.c +6 -1
@@ -2205,15 +2205,20 @@ static int i40e_run_xdp(struct i40e_ring *rx_ring, struct xdp_buff *xdp)case XDP_TX : xdp_ring = rx_ring->vsi->xdp_rings[rx_ring->queue_index]; result =i40e_xmit_xdp_tx_ring (xdp, xdp_ring); +if (result ==I40E_XDP_CONSUMED ) + goto out_failure;break ;case XDP_REDIRECT : err =xdp_do_redirect (rx_ring->netdev, xdp, xdp_prog); - result = !err ?I40E_XDP_REDIR :I40E_XDP_CONSUMED ; +if (err) + goto out_failure; + result =I40E_XDP_REDIR ;break ;default :bpf_warn_invalid_xdp_action (act); fallthrough;case XDP_ABORTED : +out_failure:trace_xdp_exception (rx_ring->netdev, xdp_prog, act); fallthrough;/* handle aborts by dropping packet */ case XDP_DROP :
drivers/net/ethernet/intel/i40e/i40e_xsk.c +11 -4
@@ -159,21 +159,28 @@ static int i40e_run_xdp_zc(struct i40e_ring *rx_ring, struct xdp_buff *xdp) xdp_prog =READ_ONCE (rx_ring->xdp_prog); act =bpf_prog_run_xdp (xdp_prog, xdp); +if (likely (act ==XDP_REDIRECT )) { + err =xdp_do_redirect (rx_ring->netdev, xdp, xdp_prog); +if (err) + goto out_failure; +rcu_read_unlock (); +return I40E_XDP_REDIR ; + } +switch (act) {case XDP_PASS :break ;case XDP_TX : xdp_ring = rx_ring->vsi->xdp_rings[rx_ring->queue_index]; result =i40e_xmit_xdp_tx_ring (xdp, xdp_ring); -break ; -case XDP_REDIRECT : - err =xdp_do_redirect (rx_ring->netdev, xdp, xdp_prog); - result = !err ?I40E_XDP_REDIR :I40E_XDP_CONSUMED ; +if (result ==I40E_XDP_CONSUMED ) + goto out_failure;break ;default :bpf_warn_invalid_xdp_action (act); fallthrough;case XDP_ABORTED : +out_failure:trace_xdp_exception (rx_ring->netdev, xdp_prog, act); fallthrough;/* handle aborts by dropping packet */ case XDP_DROP :
drivers/net/ethernet/intel/ice/ice_ethtool.c +6 -45
70 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_hw_autogen.h +1 -0
@@ -31,6 +31,7 @@#define PF_FW_ATQLEN_ATQOVFL_M BIT(29)#define PF_FW_ATQLEN_ATQCRIT_M BIT(30)#define VF_MBX_ARQLEN (_VF) (0x0022BC00 + ((_VF) * 4)) +#define VF_MBX_ATQLEN (_VF) (0x0022A800 + ((_VF) * 4))#define PF_FW_ATQLEN_ATQENABLE_M BIT(31)#define PF_FW_ATQT 0x00080400#define PF_MBX_ARQBAH 0x0022E400
drivers/net/ethernet/intel/ice/ice_lib.c +2 -0
@@ -192,6 +192,8 @@ static void ice_vsi_set_num_qs(struct ice_vsi *vsi, u16 vf_id)break ;case ICE_VSI_VF : vf = &pf->vf[vsi->vf_id]; +if (vf->num_req_qs) + vf->num_vf_qs = vf->num_req_qs; vsi->alloc_txq = vf->num_vf_qs; vsi->alloc_rxq = vf->num_vf_qs;/* pf->num_msix_per_vf includes (VF miscellaneous vector +
drivers/net/ethernet/intel/ice/ice_txrx.c +14 -10
@@ -537,34 +537,35 @@ static int ice_run_xdp(struct ice_ring *rx_ring, struct xdp_buff *xdp, struct bpf_prog *xdp_prog) { - int err, result = ICE_XDP_PASS; struct ice_ring *xdp_ring; +int err, result;u32 act; act =bpf_prog_run_xdp (xdp_prog, xdp);switch (act) {case XDP_PASS : -break ; +return ICE_XDP_PASS ;case XDP_TX : xdp_ring = rx_ring->vsi->xdp_rings[smp_processor_id ()]; result =ice_xmit_xdp_buff (xdp, xdp_ring); -break ; +if (result ==ICE_XDP_CONSUMED ) + goto out_failure; +return result;case XDP_REDIRECT : err =xdp_do_redirect (rx_ring->netdev, xdp, xdp_prog); - result = !err ?ICE_XDP_REDIR :ICE_XDP_CONSUMED ; -break ; +if (err) + goto out_failure; +return ICE_XDP_REDIR ;default :bpf_warn_invalid_xdp_action (act); fallthrough;case XDP_ABORTED : +out_failure:trace_xdp_exception (rx_ring->netdev, xdp_prog, act); fallthrough;case XDP_DROP : - result =ICE_XDP_CONSUMED ; -break ; +return ICE_XDP_CONSUMED ; } - -return result; }/**
@@ -2373,6 +2374,7 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct ice_ring *tx_ring)struct ice_tx_offload_params offload = {0 };struct ice_vsi *vsi = tx_ring->vsi;struct ice_tx_buf *first; +struct ethhdr *eth;unsigned int count;int tso, csum;
@@ -2419,7 +2421,9 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct ice_ring *tx_ring) goto out_drop;/* allow CONTROL frames egress from main VSI if FW LLDP disabled */ -if (unlikely (skb->priority ==TC_PRIO_CONTROL && + eth = (struct ethhdr *)skb_mac_header (skb); +if (unlikely ((skb->priority ==TC_PRIO_CONTROL || + eth->h_proto ==htons (ETH_P_LLDP )) && vsi->type ==ICE_VSI_PF && vsi->port_info->qos_cfg.is_sw_lldp)) offload.cd_qw1 |= (u64)(ICE_TX_DESC_DTYPE_CTX |
drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c +13 -6
@@ -435,13 +435,15 @@ static void ice_trigger_vf_reset(struct ice_vf *vf, bool is_vflr, bool is_pfr)*/ clear_bit (ICE_VF_STATE_INIT , vf->vf_states); -/* VF_MBX_ARQLEN is cleared by PFR, so the driver needs to clear it -* in the case of VFR. If this is done for PFR, it can mess up VF -* resets because the VF driver may already have started cleanup -* by the time we get here. +/* VF_MBX_ARQLEN and VF_MBX_ATQLEN are cleared by PFR, so the driver +* needs to clear them in the case of VFR/VFLR. If this is done for +* PFR, it can mess up VF resets because the VF driver may already +* have started cleanup by the time we get here. */ -if (!is_pfr) +if (!is_pfr) {wr32 (hw,VF_MBX_ARQLEN (vf->vf_id),0 ); +wr32 (hw,VF_MBX_ATQLEN (vf->vf_id),0 ); + }/* In the case of a VFLR, the HW has already reset the VF and we * just need to clean up, so don't hit the VFRTRIG register.
@@ -1339,7 +1341,12 @@ bool ice_reset_vf(struct ice_vf *vf, bool is_vflr) }ice_vf_pre_vsi_rebuild (vf); -ice_vf_rebuild_vsi_with_release (vf); + +if (ice_vf_rebuild_vsi_with_release (vf)) { +dev_err (dev,"Failed to release and setup the VF%u's VSI\n" , vf->vf_id); +return false; + } +ice_vf_post_vsi_rebuild (vf);return true;
drivers/net/ethernet/intel/ice/ice_xsk.c +12 -4
@@ -524,21 +524,29 @@ ice_run_xdp_zc(struct ice_ring *rx_ring, struct xdp_buff *xdp) } act =bpf_prog_run_xdp (xdp_prog, xdp); + +if (likely (act ==XDP_REDIRECT )) { + err =xdp_do_redirect (rx_ring->netdev, xdp, xdp_prog); +if (err) + goto out_failure; +rcu_read_unlock (); +return ICE_XDP_REDIR ; + } +switch (act) {case XDP_PASS :break ;case XDP_TX : xdp_ring = rx_ring->vsi->xdp_rings[rx_ring->q_index]; result =ice_xmit_xdp_buff (xdp, xdp_ring); -break ; -case XDP_REDIRECT : - err =xdp_do_redirect (rx_ring->netdev, xdp, xdp_prog); - result = !err ?ICE_XDP_REDIR :ICE_XDP_CONSUMED ; +if (result ==ICE_XDP_CONSUMED ) + goto out_failure;break ;default :bpf_warn_invalid_xdp_action (act); fallthrough;case XDP_ABORTED : +out_failure:trace_xdp_exception (rx_ring->netdev, xdp_prog, act); fallthrough;case XDP_DROP :
drivers/net/ethernet/intel/igb/igb_main.c +6 -4
@@ -8419,18 +8419,20 @@ static struct sk_buff *igb_run_xdp(struct igb_adapter *adapter,break ;case XDP_TX : result =igb_xdp_xmit_back (adapter, xdp); +if (result ==IGB_XDP_CONSUMED ) + goto out_failure;break ;case XDP_REDIRECT : err =xdp_do_redirect (adapter->netdev, xdp, xdp_prog); -if (!err) - result =IGB_XDP_REDIR ; -else - result =IGB_XDP_CONSUMED ; +if (err) + goto out_failure; + result =IGB_XDP_REDIR ;break ;default :bpf_warn_invalid_xdp_action (act); fallthrough;case XDP_ABORTED : +out_failure:trace_xdp_exception (rx_ring->netdev, xdp_prog, act); fallthrough;case XDP_DROP :
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +8 -8
@@ -2218,23 +2218,23 @@ static struct sk_buff *ixgbe_run_xdp(struct ixgbe_adapter *adapter,break ;case XDP_TX : xdpf =xdp_convert_buff_to_frame (xdp); -if (unlikely (!xdpf)) { - result =IXGBE_XDP_CONSUMED ; -break ; - } +if (unlikely (!xdpf)) + goto out_failure; result =ixgbe_xmit_xdp_ring (adapter, xdpf); +if (result ==IXGBE_XDP_CONSUMED ) + goto out_failure;break ;case XDP_REDIRECT : err =xdp_do_redirect (adapter->netdev, xdp, xdp_prog); -if (!err) - result =IXGBE_XDP_REDIR ; -else - result =IXGBE_XDP_CONSUMED ; +if (err) + goto out_failure; + result =IXGBE_XDP_REDIR ;break ;default :bpf_warn_invalid_xdp_action (act); fallthrough;case XDP_ABORTED : +out_failure:trace_xdp_exception (rx_ring->netdev, xdp_prog, act); fallthrough;/* handle aborts by dropping packet */ case XDP_DROP :
drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c +13 -8
@@ -104,25 +104,30 @@ static int ixgbe_run_xdp_zc(struct ixgbe_adapter *adapter, xdp_prog =READ_ONCE (rx_ring->xdp_prog); act =bpf_prog_run_xdp (xdp_prog, xdp); +if (likely (act ==XDP_REDIRECT )) { + err =xdp_do_redirect (rx_ring->netdev, xdp, xdp_prog); +if (err) + goto out_failure; +rcu_read_unlock (); +return IXGBE_XDP_REDIR ; + } +switch (act) {case XDP_PASS :break ;case XDP_TX : xdpf =xdp_convert_buff_to_frame (xdp); -if (unlikely (!xdpf)) { - result =IXGBE_XDP_CONSUMED ; -break ; - } +if (unlikely (!xdpf)) + goto out_failure; result =ixgbe_xmit_xdp_ring (adapter, xdpf); -break ; -case XDP_REDIRECT : - err =xdp_do_redirect (rx_ring->netdev, xdp, xdp_prog); - result = !err ?IXGBE_XDP_REDIR :IXGBE_XDP_CONSUMED ; +if (result ==IXGBE_XDP_CONSUMED ) + goto out_failure;break ;default :bpf_warn_invalid_xdp_action (act); fallthrough;case XDP_ABORTED : +out_failure:trace_xdp_exception (rx_ring->netdev, xdp_prog, act); fallthrough;/* handle aborts by dropping packet */ case XDP_DROP :
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +3 -0
@@ -1072,11 +1072,14 @@ static struct sk_buff *ixgbevf_run_xdp(struct ixgbevf_adapter *adapter,case XDP_TX : xdp_ring = adapter->xdp_ring[rx_ring->queue_index]; result =ixgbevf_xmit_xdp_ring (xdp_ring, xdp); +if (result ==IXGBEVF_XDP_CONSUMED ) + goto out_failure;break ;default :bpf_warn_invalid_xdp_action (act); fallthrough;case XDP_ABORTED : +out_failure:trace_xdp_exception (rx_ring->netdev, xdp_prog, act); fallthrough;/* handle aborts by dropping packet */ case XDP_DROP :
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +3 -2
@@ -1618,12 +1618,13 @@ static int mlx5e_set_fecparam(struct net_device *netdev, {struct mlx5e_priv *priv =netdev_priv (netdev);struct mlx5_core_dev *mdev = priv->mdev; +unsigned long fec_bitmap;u16 fec_policy =0 ;int mode;int err; -if (bitmap_weight ((unsigned long *)&fecparam->fec, -ETHTOOL_FEC_LLRS_BIT +1 ) >1 ) +bitmap_from_arr32 (&fec_bitmap, &fecparam->fec,sizeof (fecparam->fec) *BITS_PER_BYTE ); +if (bitmap_weight (&fec_bitmap,ETHTOOL_FEC_LLRS_BIT +1 ) >1 )return -EOPNOTSUPP ;for (mode =0 ; mode <ARRAY_SIZE (pplm_fec_2_ethtool); mode++) {
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +9 -0
@@ -2253,11 +2253,13 @@ static int __parse_cls_flower(struct mlx5e_priv *priv, misc_parameters);struct flow_rule *rule =flow_cls_offload_flow_rule (f);struct flow_dissector *dissector = rule->match.dissector; +enum fs_flow_table_type fs_type;u16 addr_type =0 ;u8 ip_proto =0 ;u8 *match_level;int err; + fs_type =mlx5e_is_eswitch_flow (flow) ?FS_FT_FDB :FS_FT_NIC_RX ; match_level = outer_match_level; if (dissector->used_keys &
@@ -2382,6 +2384,13 @@ static int __parse_cls_flower(struct mlx5e_priv *priv,if (match.mask->vlan_id || match.mask->vlan_priority || match.mask->vlan_tpid) { +if (!MLX5_CAP_FLOWTABLE_TYPE (priv->mdev, ft_field_support.outer_second_vid, + fs_type)) { +NL_SET_ERR_MSG_MOD (extack, +"Matching on CVLAN is not supported" ); +return -EOPNOTSUPP ; + } +if (match.key->vlan_tpid ==htons (ETH_P_8021AD )) {MLX5_SET (fte_match_set_misc, misc_c, outer_second_svlan_tag,1 );
drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c +3 -0
@@ -354,6 +354,9 @@ static void mlx5_sync_reset_abort_event(struct work_struct *work) reset_abort_work);struct mlx5_core_dev *dev = fw_reset->dev; +if (!test_bit (MLX5_FW_RESET_FLAGS_RESET_REQUESTED , &fw_reset->reset_flags)) +return ; +mlx5_sync_reset_clear_reset_requested (dev, true);mlx5_core_warn (dev,"PCI Sync FW Update Reset Aborted.\n" ); }
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_fw.c +2 -1
@@ -112,7 +112,8 @@ int mlx5dr_fw_create_md_tbl(struct mlx5dr_domain *dmn,int ret; ft_attr.table_type =MLX5_FLOW_TABLE_TYPE_FDB ; - ft_attr.level = dmn->info.caps.max_ft_level -2 ; + ft_attr.level =min_t (int, dmn->info.caps.max_ft_level -2 , +MLX5_FT_MAX_MULTIPATH_LEVEL ); ft_attr.reformat_en = reformat_req; ft_attr.decap_en = reformat_req;
drivers/net/usb/cdc_ncm.c +11 -1
@@ -1827,6 +1827,15 @@ cdc_ncm_speed_change(struct usbnet *dev,uint32_t rx_speed =le32_to_cpu (data->DLBitRRate);uint32_t tx_speed =le32_to_cpu (data->ULBitRate); +/* if the speed hasn't changed, don't report it. +* RTL8156 shipped before 2021 sends notification about every 32ms. +*/ +if (dev->rx_speed == rx_speed && dev->tx_speed == tx_speed) +return ; + + dev->rx_speed = rx_speed; + dev->tx_speed = tx_speed; +/* * Currently the USB-NET API does not support reporting the actual * device speed. Do print it instead.
@@ -1867,7 +1876,8 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb)* USB_CDC_NOTIFY_NETWORK_CONNECTION notification shall be * sent by device after USB_CDC_NOTIFY_SPEED_CHANGE. */ -usbnet_link_change (dev, !!event->wValue,0 ); +if (netif_carrier_ok (dev->net) != !!event->wValue) +usbnet_link_change (dev, !!event->wValue,0 );break ;case USB_CDC_NOTIFY_SPEED_CHANGE :
drivers/net/wireguard/Makefile +1 -2
@@ -1,5 +1,4 @@ -ccflags-y := -O3 -ccflags-y += -D'pr_fmt(fmt)=KBUILD_MODNAME ": " fmt' +ccflags-y := -D'pr_fmt(fmt)=KBUILD_MODNAME ": " fmt' ccflags-$(CONFIG_WIREGUARD_DEBUG) += -DDEBUG wireguard-y := main.o wireguard-y += noise.o
drivers/net/wireguard/allowedips.c +99 -90
287 lines not on this page · raw message
drivers/net/wireguard/allowedips.h +7 -7
@@ -15,14 +15,11 @@ struct wg_peer;struct allowedips_node {struct wg_peer __rcu *peer;struct allowedips_node __rcu *bit[2 ]; -/* While it may seem scandalous that we waste space for v4, -* we're alloc'ing to the nearest power of 2 anyway, so this -* doesn't actually make a difference. -*/ -u8 bits[16 ]__aligned(__alignof(u64)) ;u8 cidr, bit_at_a, bit_at_b, bitlen; +u8 bits[16 ]__aligned(__alignof(u64)) ; -/* Keep rarely used list at bottom to be beyond cache line. */ +/* Keep rarely used members at bottom to be beyond cache line. */ +unsigned long parent_bit_packed;union {struct list_head peer_list;struct rcu_head rcu;
@@ -33,7 +30,7 @@ struct allowedips {struct allowedips_node __rcu *root4;struct allowedips_node __rcu *root6;u64 seq; -}; +}__aligned(4) ;/* We pack the lower 2 bits of &root, but m68k only gives 16-bit alignment. */ void wg_allowedips_init (struct allowedips *table);void wg_allowedips_free (struct allowedips *table,struct mutex *mutex);
@@ -56,4 +53,7 @@ struct wg_peer *wg_allowedips_lookup_src(struct allowedips *table,bool wg_allowedips_selftest (void );#endif +int wg_allowedips_slab_init (void ); +void wg_allowedips_slab_uninit (void ); +#endif /* _WG_ALLOWEDIPS_H */
drivers/net/wireguard/main.c +16 -1
@@ -21,13 +21,22 @@ static int __init mod_init(void) {int ret; + ret =wg_allowedips_slab_init (); +if (ret <0 ) + goto err_allowedips; +#ifdef DEBUG + ret = -ENOTRECOVERABLE ;if (!wg_allowedips_selftest () || !wg_packet_counter_selftest () || !wg_ratelimiter_selftest ()) -return -ENOTRECOVERABLE ; + goto err_peer;#endif wg_noise_init (); + ret =wg_peer_init (); +if (ret <0 ) + goto err_peer; + ret =wg_device_init ();if (ret <0 ) goto err_device;
@@ -44,6 +53,10 @@ static int __init mod_init(void) err_netlink:wg_device_uninit (); err_device: +wg_peer_uninit (); +err_peer: +wg_allowedips_slab_uninit (); +err_allowedips:return ret; }
@@ -51,6 +64,8 @@ static void __exit mod_exit(void) {wg_genetlink_uninit ();wg_device_uninit (); +wg_peer_uninit (); +wg_allowedips_slab_uninit (); }module_init (mod_init);
drivers/net/wireguard/peer.c +20 -7
@@ -15,6 +15,7 @@#include <linux/rcupdate.h> #include <linux/list.h> +static struct kmem_cache *peer_cache;static atomic64_t peer_counter =ATOMIC64_INIT (0 ); struct wg_peer *wg_peer_create(struct wg_device *wg,
@@ -29,10 +30,10 @@ struct wg_peer *wg_peer_create(struct wg_device *wg,if (wg->num_peers >=MAX_PEERS_PER_DEVICE )return ERR_PTR (ret); - peer =kzalloc (sizeof (*peer),GFP_KERNEL ); + peer =kmem_cache_zalloc (peer_cache,GFP_KERNEL );if (unlikely (!peer))return ERR_PTR (ret); -if (dst_cache_init (&peer->endpoint_cache,GFP_KERNEL )) +if (unlikely (dst_cache_init (&peer->endpoint_cache,GFP_KERNEL ))) goto err; peer->device = wg;
@@ -64,7 +65,7 @@ struct wg_peer *wg_peer_create(struct wg_device *wg,return peer; err: -kfree (peer); +kmem_cache_free (peer_cache, peer);return ERR_PTR (ret); }
@@ -88,7 +89,7 @@ static void peer_make_dead(struct wg_peer *peer)/* Mark as dead, so that we don't allow jumping contexts after. */ WRITE_ONCE (peer->is_dead, true); -/* The caller must now synchronize_rcu() for this to take effect. */ +/* The caller must now synchronize_net() for this to take effect. */ }static void peer_remove_after_dead (struct wg_peer *peer)
@@ -160,7 +161,7 @@ void wg_peer_remove(struct wg_peer *peer)lockdep_assert_held (&peer->device->device_update_lock);peer_make_dead (peer); -synchronize_rcu (); +synchronize_net ();peer_remove_after_dead (peer); }
@@ -178,7 +179,7 @@ void wg_peer_remove_all(struct wg_device *wg)peer_make_dead (peer);list_add_tail (&peer->peer_list, &dead_peers); } -synchronize_rcu (); +synchronize_net ();list_for_each_entry_safe (peer, temp, &dead_peers, peer_list)peer_remove_after_dead (peer); }
@@ -193,7 +194,8 @@ static void rcu_release(struct rcu_head *rcu)/* The final zeroing takes care of clearing any remaining handshake key * material and other potentially sensitive information. */ -kfree_sensitive (peer); +memzero_explicit (peer,sizeof (*peer)); +kmem_cache_free (peer_cache, peer); }static void kref_release (struct kref *refcount)
@@ -225,3 +227,14 @@ void wg_peer_put(struct wg_peer *peer)return ;kref_put (&peer->refcount, kref_release); } + +int __init wg_peer_init (void ) +{ + peer_cache =KMEM_CACHE (wg_peer,0 ); +return peer_cache ?0 : -ENOMEM ; +} + +void wg_peer_uninit (void ) +{ +kmem_cache_destroy (peer_cache); +}
drivers/net/wireguard/peer.h +3 -0
@@ -80,4 +80,7 @@ void wg_peer_put(struct wg_peer *peer);void wg_peer_remove (struct wg_peer *peer);void wg_peer_remove_all (struct wg_device *wg); +int wg_peer_init (void ); +void wg_peer_uninit (void ); +#endif /* _WG_PEER_H */
drivers/net/wireguard/selftest/allowedips.c +79 -86
276 lines not on this page · raw message
drivers/net/wireguard/socket.c +1 -1
@@ -430,7 +430,7 @@ void wg_socket_reinit(struct wg_device *wg, struct sock *new4,if (new4) wg->incoming_port =ntohs (inet_sk (new4)->inet_sport);mutex_unlock (&wg->socket_update_lock); -synchronize_rcu (); +synchronize_net ();sock_free (old4);sock_free (old6); }
drivers/net/xen-netback/interface.c +6 -0
@@ -685,6 +685,7 @@ static void xenvif_disconnect_queue(struct xenvif_queue *queue) {if (queue->task) {kthread_stop (queue->task); +put_task_struct (queue->task); queue->task =NULL ; }
@@ -745,6 +746,11 @@ int xenvif_connect_data(struct xenvif_queue *queue,if (IS_ERR (task)) goto kthread_err; queue->task = task; +/* +* Take a reference to the task in order to prevent it from being freed +* if the thread function returns before kthread_stop is called. +*/ +get_task_struct (task); task =kthread_run (xenvif_dealloc_kthread, queue,"%s-dealloc" , queue->name);
drivers/nvme/host/rdma.c +3 -2
@@ -1327,16 +1327,17 @@ static int nvme_rdma_map_sg_inline(struct nvme_rdma_queue *queue, int count) {struct nvme_sgl_desc *sg = &c->common.dptr.sgl; -struct scatterlist *sgl = req->data_sgl.sg_table.sgl;struct ib_sge *sge = &req->sge[1 ]; +struct scatterlist *sgl;u32 len =0 ;int i; -for (i =0 ; i < count; i++, sgl++, sge++) { +for_each_sg (req->data_sgl.sg_table.sgl, sgl, count, i) { sge->addr =sg_dma_address (sgl); sge->length =sg_dma_len (sgl); sge->lkey = queue->device->pd->local_dma_lkey; len += sge->length; + sge++; } sg->addr =cpu_to_le64 (queue->ctrl->ctrl.icdoff);
drivers/nvme/target/core.c +16 -17
@@ -988,19 +988,23 @@ static unsigned int nvmet_data_transfer_len(struct nvmet_req *req)return req->transfer_len - req->metadata_len; } -static int nvmet_req_alloc_p2pmem_sgls (struct nvmet_req *req) +static int nvmet_req_alloc_p2pmem_sgls (struct pci_dev *p2p_dev, +struct nvmet_req *req) { - req->sg =pci_p2pmem_alloc_sgl (req->p2p_dev, &req->sg_cnt, + req->sg =pci_p2pmem_alloc_sgl (p2p_dev, &req->sg_cnt,nvmet_data_transfer_len (req));if (!req->sg) goto out_err;if (req->metadata_len) { - req->metadata_sg =pci_p2pmem_alloc_sgl (req->p2p_dev, + req->metadata_sg =pci_p2pmem_alloc_sgl (p2p_dev, &req->metadata_sg_cnt, req->metadata_len);if (!req->metadata_sg) goto out_free_sg; } + + req->p2p_dev = p2p_dev; +return 0 ; out_free_sg:pci_p2pmem_free_sgl (req->p2p_dev, req->sg);
@@ -1008,25 +1012,19 @@ static int nvmet_req_alloc_p2pmem_sgls(struct nvmet_req *req)return -ENOMEM ; } -static bool nvmet_req_find_p2p_dev (struct nvmet_req *req) +static struct pci_dev *nvmet_req_find_p2p_dev (struct nvmet_req *req) { -if (!IS_ENABLED (CONFIG_PCI_P2PDMA )) -return false; - -if (req->sq->ctrl && req->sq->qid && req->ns) { - req->p2p_dev =radix_tree_lookup (&req->sq->ctrl->p2p_ns_map, - req->ns->nsid); -if (req->p2p_dev) -return true; - } - - req->p2p_dev =NULL ; -return false; +if (!IS_ENABLED (CONFIG_PCI_P2PDMA ) || + !req->sq->ctrl || !req->sq->qid || !req->ns) +return NULL ; +return radix_tree_lookup (&req->sq->ctrl->p2p_ns_map, req->ns->nsid); }int nvmet_req_alloc_sgls (struct nvmet_req *req) { -if (nvmet_req_find_p2p_dev (req) && !nvmet_req_alloc_p2pmem_sgls (req)) +struct pci_dev *p2p_dev =nvmet_req_find_p2p_dev (req); + +if (p2p_dev && !nvmet_req_alloc_p2pmem_sgls (p2p_dev, req))return 0 ; req->sg = sgl_alloc(nvmet_data_transfer_len(req), GFP_KERNEL,
@@ -1055,6 +1053,7 @@ void nvmet_req_free_sgls(struct nvmet_req *req)pci_p2pmem_free_sgl (req->p2p_dev, req->sg);if (req->metadata_sg)pci_p2pmem_free_sgl (req->p2p_dev, req->metadata_sg); + req->p2p_dev =NULL ; }else {sgl_free (req->sg);if (req->metadata_sg)
drivers/tee/optee/call.c +4 -2
@@ -217,6 +217,7 @@ int optee_open_session(struct tee_context *ctx,struct optee_msg_arg *msg_arg;phys_addr_t msg_parg;struct optee_session *sess =NULL ; +uuid_t client_uuid;/* +2 for the meta parameters added below */ shm =get_msg_arg (ctx, arg->num_params +2 , &msg_arg, &msg_parg);
@@ -237,10 +238,11 @@ int optee_open_session(struct tee_context *ctx,memcpy (&msg_arg->params[0 ].u.value, arg->uuid,sizeof (arg->uuid)); msg_arg->params[1 ].u.value.c = arg->clnt_login; - rc =tee_session_calc_client_uuid ((uuid_t *)&msg_arg->params[1 ].u.value, - arg->clnt_login, arg->clnt_uuid); + rc =tee_session_calc_client_uuid (&client_uuid, arg->clnt_login, + arg->clnt_uuid);if (rc) goto out; +export_uuid (msg_arg->params[1 ].u.octets, &client_uuid); rc =optee_to_msg_param (msg_arg->params +2 , arg->num_params, param);if (rc)
drivers/tee/optee/optee_msg.h +4 -2
@@ -9,7 +9,7 @@#include <linux/types.h> /* -* This file defines the OP-TEE message protocol used to communicate +* This file defines the OP-TEE message protocol (ABI) used to communicate * with an instance of OP-TEE running in secure world. * * This file is divided into three sections.
@@ -146,9 +146,10 @@ struct optee_msg_param_value {* @tmem: parameter by temporary memory reference * @rmem: parameter by registered memory reference * @value: parameter by opaque value +* @octets: parameter by octet string * * @attr & OPTEE_MSG_ATTR_TYPE_MASK indicates if tmem, rmem or value is used in -* the union. OPTEE_MSG_ATTR_TYPE_VALUE_* indicates value, +* the union. OPTEE_MSG_ATTR_TYPE_VALUE_* indicates value or octets, * OPTEE_MSG_ATTR_TYPE_TMEM_* indicates @tmem and * OPTEE_MSG_ATTR_TYPE_RMEM_* indicates @rmem, * OPTEE_MSG_ATTR_TYPE_NONE indicates that none of the members are used.
@@ -159,6 +160,7 @@ struct optee_msg_param {struct optee_msg_param_tmem tmem;struct optee_msg_param_rmem rmem;struct optee_msg_param_value value; +u8 octets[24 ]; } u; };
drivers/tty/serial/stm32-usart.c +12 -10
@@ -213,14 +213,11 @@ static void stm32_usart_receive_chars(struct uart_port *port, bool threaded)struct tty_port *tport = &port->state->port;struct stm32_port *stm32_port =to_stm32_port (port);const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; -unsigned long c, flags; +unsigned long c;u32 sr;char flag; -if (threaded) -spin_lock_irqsave (&port->lock, flags); -else -spin_lock (&port->lock); +spin_lock (&port->lock);while (stm32_usart_pending_rx (port, &sr, &stm32_port->last_res, threaded)) {
@@ -277,10 +274,7 @@ static void stm32_usart_receive_chars(struct uart_port *port, bool threaded)uart_insert_char (port, sr,USART_SR_ORE , c, flag); } -if (threaded) -spin_unlock_irqrestore (&port->lock, flags); -else -spin_unlock (&port->lock); +spin_unlock (&port->lock);tty_flip_buffer_push (tport); }
@@ -653,7 +647,8 @@ static int stm32_usart_startup(struct uart_port *port) ret =request_threaded_irq (port->irq, stm32_usart_interrupt, stm32_usart_threaded_interrupt, -IRQF_NO_SUSPEND , name, port); +IRQF_ONESHOT |IRQF_NO_SUSPEND , + name, port);if (ret)return ret;
@@ -1126,6 +1121,13 @@ static int stm32_usart_of_dma_rx_probe(struct stm32_port *stm32port,struct dma_async_tx_descriptor *desc =NULL ;int ret; +/* +* Using DMA and threaded handler for the console could lead to +* deadlocks. +*/ +if (uart_console (port)) +return -ENODEV ; +/* Request DMA RX channel */ stm32port->rx_ch =dma_request_slave_channel (dev,"rx" );if (!stm32port->rx_ch) {
drivers/usb/dwc2/core_intr.c +4 -0
@@ -707,7 +707,11 @@ static inline void dwc_handle_gpwrdn_disc_det(struct dwc2_hsotg *hsotg,dwc2_writel (hsotg, gpwrdn_tmp,GPWRDN ); hsotg->hibernated =0 ; + +#if IS_ENABLED (CONFIG_USB_DWC2_HOST ) || \ +IS_ENABLED (CONFIG_USB_DWC2_DUAL_ROLE ) hsotg->bus_suspended =0 ; +#endif if (gpwrdn &GPWRDN_IDSTS ) { hsotg->op_state =OTG_STATE_B_PERIPHERAL ;
drivers/vfio/pci/Kconfig +1 -0
@@ -2,6 +2,7 @@ config VFIO_PCI tristate "VFIO support for PCI devices" depends on VFIO && PCI && EVENTFD + depends on MMU select VFIO_VIRQFD select IRQ_BYPASS_MANAGER help
drivers/vfio/pci/vfio_pci_config.c +1 -1
@@ -1581,7 +1581,7 @@ static int vfio_ecap_init(struct vfio_pci_device *vdev)if (len ==0xFF ) { len =vfio_ext_cap_len (vdev, ecap, epos);if (len <0 ) -return ret; +return len; } }
drivers/vfio/platform/vfio_platform_common.c +1 -1
@@ -289,7 +289,7 @@ static int vfio_platform_open(void *device_data)vfio_platform_regions_cleanup (vdev); err_reg:mutex_unlock (&driver_lock); -module_put (THIS_MODULE ); +module_put (vdev->parent_module);return ret; }
fs/btrfs/extent-tree.c +8 -4
@@ -1297,16 +1297,20 @@ int btrfs_discard_extent(struct btrfs_fs_info *fs_info, u64 bytenr,for (i =0 ; i < bbio->num_stripes; i++, stripe++) {u64 bytes;struct request_queue *req_q; +struct btrfs_device *device = stripe->dev; -if (!stripe->dev->bdev) { +if (!device->bdev) {ASSERT (btrfs_test_opt (fs_info,DEGRADED ));continue ; } - req_q =bdev_get_queue (stripe->dev->bdev); + req_q =bdev_get_queue (device->bdev);if (!blk_queue_discard (req_q))continue ; - ret =btrfs_issue_discard (stripe->dev->bdev, +if (!test_bit (BTRFS_DEV_STATE_WRITEABLE , &device->dev_state)) +continue ; + + ret =btrfs_issue_discard (device->bdev, stripe->physical, stripe->length, &bytes);
@@ -1830,7 +1834,7 @@ static int cleanup_ref_head(struct btrfs_trans_handle *trans,trace_run_delayed_ref_head (fs_info, head,0 );btrfs_delayed_ref_unlock (head);btrfs_put_delayed_ref_head (head); -return 0 ; +return ret; } static struct btrfs_delayed_ref_head *btrfs_obtain_ref_head(
fs/btrfs/file-item.c +5 -5
@@ -690,7 +690,7 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans,u64 end_byte = bytenr + len;u64 csum_end;struct extent_buffer *leaf; -int ret; +int ret =0 ;u16 csum_size =btrfs_super_csum_size (fs_info->super_copy);int blocksize_bits = fs_info->sb->s_blocksize_bits;
@@ -709,6 +709,7 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, path->leave_spinning =1 ; ret =btrfs_search_slot (trans, root, &key, path,-1 ,1 );if (ret >0 ) { + ret =0 ;if (path->slots[0 ] ==0 )break ; path->slots[0 ]--;
@@ -765,7 +766,7 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, ret =btrfs_del_items (trans, root, path, path->slots[0 ], del_nr);if (ret) - goto out; +break ;if (key.offset == bytenr)break ; }else if (key.offset < bytenr && csum_end > end_byte) {
@@ -809,8 +810,9 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, ret =btrfs_split_item (trans, root, path, &key, offset);if (ret && ret != -EAGAIN ) {btrfs_abort_transaction (trans, ret); - goto out; +break ; } + ret =0 ; key.offset = end_byte -1 ; }else {
@@ -820,8 +822,6 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, }btrfs_release_path (path); } - ret =0 ; -out:btrfs_free_path (path);return ret; }
fs/btrfs/inode.c +18 -1
@@ -2760,6 +2760,18 @@ static int btrfs_finish_ordered_io(struct btrfs_ordered_extent *ordered_extent)if (ret || truncated) {u64 unwritten_start = start; +/* +* If we failed to finish this ordered extent for any reason we +* need to make sure BTRFS_ORDERED_IOERR is set on the ordered +* extent, and mark the inode with the error if it wasn't +* already set. Any error during writeback would have already +* set the mapping error, so we need to set it if we're the ones +* marking this ordered extent as failed. +*/ +if (ret && !test_and_set_bit (BTRFS_ORDERED_IOERR , + &ordered_extent->flags)) +mapping_set_error (ordered_extent->inode->i_mapping, -EIO ); +if (truncated) unwritten_start += logical_len;clear_extent_uptodate (io_tree, unwritten_start, end,NULL );
@@ -8878,6 +8890,7 @@ static int btrfs_rename_exchange(struct inode *old_dir,int ret2;bool root_log_pinned = false;bool dest_log_pinned = false; +bool need_abort = false;/* we only allow rename subvolume link between subvolumes */ if (old_ino !=BTRFS_FIRST_FREE_OBJECTID && root != dest)
@@ -8934,6 +8947,7 @@ static int btrfs_rename_exchange(struct inode *old_dir, old_idx);if (ret) goto out_fail; + need_abort = true; }/* And now for the dest. */
@@ -8949,8 +8963,11 @@ static int btrfs_rename_exchange(struct inode *old_dir, new_ino,btrfs_ino (BTRFS_I (old_dir)), new_idx); -if (ret) +if (ret) { +if (need_abort) +btrfs_abort_transaction (trans, ret); goto out_fail; + } }/* Update inode version and ctime/mtime. */
fs/btrfs/reflink.c +22 -16
@@ -207,10 +207,7 @@ static int clone_copy_inline_extent(struct inode *dst,* inline extent's data to the page. */ ASSERT (key.offset >0 ); - ret =copy_inline_to_page (BTRFS_I (dst), new_key->offset, - inline_data, size, datal, - comp_type); - goto out; + goto copy_to_page; } }else if (i_size_read (dst) <= datal) {struct btrfs_file_extent_item *ei;
@@ -226,13 +223,10 @@ static int clone_copy_inline_extent(struct inode *dst, BTRFS_FILE_EXTENT_INLINE) goto copy_inline_extent; - ret =copy_inline_to_page (BTRFS_I (dst), new_key->offset, - inline_data, size, datal, comp_type); - goto out; + goto copy_to_page; } copy_inline_extent: - ret =0 ;/* * We have no extent items, or we have an extent at offset 0 which may * or may not be inlined. All these cases are dealt the same way.
@@ -244,11 +238,13 @@ static int clone_copy_inline_extent(struct inode *dst,* clone. Deal with all these cases by copying the inline extent * data into the respective page at the destination inode. */ - ret =copy_inline_to_page (BTRFS_I (dst), new_key->offset, - inline_data, size, datal, comp_type); - goto out; + goto copy_to_page; } +/* +* Release path before starting a new transaction so we don't hold locks +* that would confuse lockdep. +*/ btrfs_release_path (path);/* * If we end up here it means were copy the inline extent into a leaf
@@ -281,11 +277,6 @@ static int clone_copy_inline_extent(struct inode *dst, ret =btrfs_inode_set_file_extent_range (BTRFS_I (dst),0 , aligned_end); out:if (!ret && !trans) { -/* -* Release path before starting a new transaction so we don't -* hold locks that would confuse lockdep. -*/ -btrfs_release_path (path);/* * No transaction here means we copied the inline extent into a * page of the destination inode.
@@ -306,6 +297,21 @@ static int clone_copy_inline_extent(struct inode *dst, *trans_out = trans;return ret; + +copy_to_page: +/* +* Release our path because we don't need it anymore and also because +* copy_inline_to_page() needs to reserve data and metadata, which may +* need to flush delalloc when we are low on available space and +* therefore cause a deadlock if writeback of an inline extent needs to +* write to the same leaf or an ordered extent completion needs to write +* to the same leaf. +*/ +btrfs_release_path (path); + + ret =copy_inline_to_page (BTRFS_I (dst), new_key->offset, + inline_data, size, datal, comp_type); + goto out; }/**
fs/btrfs/tree-checker.c +4 -12
@@ -1440,22 +1440,14 @@ static int check_extent_data_ref(struct extent_buffer *leaf,return -EUCLEAN ; }for (; ptr < end; ptr +=sizeof (*dref)) { -u64 root_objectid; -u64 owner;u64 offset; -u64 hash; +/* +* We cannot check the extent_data_ref hash due to possible +* overflow from the leaf due to hash collisions. +*/ dref = (struct btrfs_extent_data_ref *)ptr; - root_objectid =btrfs_extent_data_ref_root (leaf, dref); - owner =btrfs_extent_data_ref_objectid (leaf, dref); offset =btrfs_extent_data_ref_offset (leaf, dref); - hash =hash_extent_data_ref (root_objectid, owner, offset); -if (hash != key->offset) { -extent_err (leaf, slot, -"invalid extent data ref hash, item has 0x%016llx key has 0x%016llx" , - hash, key->offset); -return -EUCLEAN ; - }if (!IS_ALIGNED (offset, leaf->fs_info->sectorsize)) { extent_err(leaf, slot, "invalid extent data backref offset, have %llu expect aligned to %u",
fs/btrfs/tree-log.c +7 -6
@@ -1752,6 +1752,7 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans,break ;if (ret ==1 ) { + ret =0 ;if (path->slots[0 ] ==0 )break ; path->slots[0 ]--;
@@ -1764,17 +1765,19 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans, ret =btrfs_del_item (trans, root, path);if (ret) - goto out; +break ;btrfs_release_path (path); inode =read_one_inode (root, key.offset); -if (!inode) -return -EIO ; +if (!inode) { + ret = -EIO ; +break ; + } ret =fixup_inode_link_count (trans, root, inode);iput (inode);if (ret) - goto out; +break ;/* * fixup on a directory may create new entries,
@@ -1783,8 +1786,6 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans,*/ key.offset = (u64)-1 ; } - ret =0 ; -out:btrfs_release_path (path);return ret; }
fs/ext4/extents.c +23 -20
39 lines not on this page · raw message
fs/ext4/fast_commit.c +90 -92
182 lines not on this page · raw message
fs/ocfs2/file.c +50 -5
55 lines not on this page · raw message
net/tipc/bearer.c +66 -28
94 lines not on this page · raw message
net/tls/tls_device.c +49 -11
60 lines not on this page · raw message
tools/testing/selftests/wireguard/netns.sh +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/wireguard/qemu/kernel.config +0 -1
Lines of this file are not shown. View the 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.
Samuel Zou
Tested-by Hulk RobotQuoted 4 lines · Greg Kroah-Hartman
I'm announcing the release of the 5.10.43 kernel.
All users of the 5.10 kernel series must upgrade.
Quoted 9 lines
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gitlinux-5.10.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=summarythanks,
greg k-h
Tested on arm64 and x86 for 5.10.43,
Kernel repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Branch: linux-5.10.y
Version: 5.10.43
Commit: 951358a824f96be927ae50fad1e72e05bbb57b56
Compiler: gcc version 7.3.0 (GCC)
arm64:
--------------------------------------------------------------------
Testcase Result Summary:
total: 8906
passed: 8906
failed: 0
timeout: 0
--------------------------------------------------------------------
x86:
--------------------------------------------------------------------
Testcase Result Summary:
total: 8906
passed: 8906
failed: 0
timeout: 0
--------------------------------------------------------------------