Linux 5.12.10
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.12.10 kernel.
All users of the 5.12 kernel series must upgrade.
The updated 5.12.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.12.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/arm/mach-omap1/board-h2.c | 4 arch/arm64/Kconfig.platforms | 1 arch/arm64/boot/dts/freescale/fsl-ls1028a-kontron-sl28-var1.dts | 3 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-rmb3.dts | 10 arch/arm64/boot/dts/freescale/imx8mq-zii-ultra.dtsi | 23 - arch/arm64/boot/dts/ti/k3-j7200-main.dtsi | 2 arch/arm64/include/asm/kvm_asm.h | 1 arch/arm64/kvm/arm.c | 20 - arch/arm64/kvm/hyp/exception.c | 4 arch/arm64/kvm/hyp/nvhe/hyp-main.c | 8 arch/mips/mm/cache.c | 30 - arch/powerpc/kernel/kprobes.c | 4 arch/powerpc/kvm/book3s_hv.c | 1 arch/powerpc/kvm/book3s_hv_rmhandlers.S | 7 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/include/asm/thermal.h | 4 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/kernel/setup.c | 9 arch/x86/kvm/svm/svm.c | 8 arch/x86/mm/fault.c | 4 arch/x86/mm/mem_encrypt_identity.c | 11 drivers/acpi/acpica/utdelete.c | 8 drivers/bus/ti-sysc.c | 57 ++- drivers/dma/idxd/init.c | 4 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/amdgpu_display.c | 1 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/amd-sfh-hid/amd_sfh_client.c | 1 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.h | 8 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 | 12 drivers/net/ethernet/intel/ice/ice_txrx.c | 17 drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c | 19 - drivers/net/ethernet/intel/ice/ice_xsk.c | 19 - drivers/net/ethernet/intel/igb/igb.h | 2 drivers/net/ethernet/intel/igb/igb_main.c | 55 +- drivers/net/ethernet/intel/igb/igb_ptp.c | 23 - 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/eswitch_offloads.c | 3 drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c | 3 drivers/net/ethernet/mellanox/mlx5/core/lib/fs_chains.c | 2 drivers/net/ethernet/mellanox/mlx5/core/lib/fs_chains.h | 5 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_fw.c | 3 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/wireless/mediatek/mt76/mt76x0/pci.c | 81 ++++ drivers/net/wireless/mediatek/mt76/mt7921/mcu.c | 24 - drivers/net/xen-netback/interface.c | 6 drivers/nvme/host/rdma.c | 5 drivers/nvme/target/core.c | 33 - drivers/scsi/lpfc/lpfc_sli.c | 4 drivers/tee/optee/call.c | 6 drivers/tee/optee/optee_msg.h | 6 drivers/thermal/intel/therm_throt.c | 15 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 | 2 fs/btrfs/file-item.c | 108 ++++- fs/btrfs/inode.c | 19 - fs/btrfs/reflink.c | 38 +- fs/btrfs/tree-log.c | 21 - fs/ext4/extents.c | 43 +- fs/ext4/fast_commit.c | 170 ++++---- fs/ext4/fast_commit.h | 19 - fs/ext4/ialloc.c | 6 fs/ext4/mballoc.c | 2 fs/ext4/super.c | 11 fs/gfs2/glock.c | 2 fs/io_uring.c | 66 ++- fs/ocfs2/file.c | 55 ++ include/linux/mlx5/mlx5_ifc.h | 2 include/linux/pgtable.h | 8 include/linux/platform_data/ti-sysc.h | 1 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 | 7 kernel/trace/bpf_trace.c | 32 - mm/debug_vm_pgtable.c | 4 mm/hugetlb.c | 14 mm/kfence/core.c | 12 mm/memory.c | 4 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/protocol.c | 16 net/mptcp/subflow.c | 76 ++-- 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/sched/sch_htb.c | 8 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 scripts/Makefile.modfinal | 2 scripts/link-vmlinux.sh | 2 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 178 files changed, 1653 insertions(+), 1055 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
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
Basavaraj Natikar (1):
HID: amd_sfh: Fix memory leak in amd_sfh_work
Bob Peterson (1):
gfs2: fix scheduling while atomic bug in glocks
Borislav Petkov (2):
dmaengine: idxd: Use cpu_feature_enabled() x86/thermal: Fix LVT thermal setup for SMI delivery mode
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 (2):
btrfs: fix fsync failure and transaction abort after writes to prealloc extents
btrfs: fix deadlock when cloning inline extents and low on available space
Florian Westphal (1):
netfilter: conntrack: unregister ipv4 sockopts on error unwind
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 Peltier (1):
hwmon: (pmbus/isl68137) remove READ_TEMPERATURE_3 for RAA228228
Greg Kroah-Hartman (1):
Linux 5.12.10
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 Smart (1):
scsi: lpfc: Fix failure to transmit ABTS on FC link
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
Javier Martinez Canillas (1):
kbuild: Quote OBJCOPY var to avoid a pahole call break the build
Jens Axboe (1):
io_uring: wrap io_kiocb reference count manipulation in helpers
Jens Wiklander (1):
optee: use export_uuid() to copy client UUID
Jerome Brunet (1):
arm64: meson: select COMMON_CLK
Jiashuo Liang (1):
x86/fault: Don't send SIGSEGV twice on SEGV_PKUERR
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: 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: check error value from btrfs_update_inode in tree log
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
Kurt Kanzenbach (1):
igb: Fix XDP with PTP enabled
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
Lorenzo Bianconi (3):
mt76: mt7921: add rcu section in mt7921_mcu_tx_rate_report
mt76: mt7921: fix possible AOOB issue in mt7921_mcu_tx_rate_report
mt76: mt76x0e: fix device hang during suspend/resume
Luben Tuikov (1):
drm/amdgpu: Don't query CE and UE errors
Lucas Stach (2):
arm64: dts: zii-ultra: remove second GEN_3V3 regulator instance
arm64: dts: zii-ultra: fix 12V_MAIN voltage
Maciej Falkowski (1):
ARM: OMAP1: isp1301-omap: Add missing gpiod_add_lookup_table function
Maciej Fijalkowski (1):
ice: track AF_XDP ZC enabled queues in bitmap
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: Commit pending PC adjustemnts before returning to userspace
Marco Elver (2):
kfence: maximize allocation wait timeout duration
kfence: use TASK_IDLE when awaiting allocation
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 (3):
arm64: dts: ls1028a: fix memory node
arm64: dts: freescale: sl28: var4: fix RGMII clock and voltage
arm64: dts: freescale: sl28: var1: 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
Nicholas Piggin (1):
KVM: PPC: Book3S HV: Save host FSCR in the P7/8 path
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 (3):
mptcp: fix sk_forward_memory corruption on retransmission
mptcp: always parse mptcp options for MPC reqsk
mptcp: do not reset MP_CAPABLE subflow on mapping errors
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 (3):
io_uring: fix link timeout refs
io_uring: use better types for cflags
io_uring: fix ltout double free on completion race
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 (2):
net/mlx5e: Check for needed capability for cvlan matching net/mlx5e: Fix adding encap rules to slow path
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
Simon Ser (1):
amdgpu: fix GEM obj leak in amdgpu_display_user_framebuffer_create
Takashi Iwai (1):
ALSA: timer: Fix master timer notification
Thomas Bogendoerfer (1):
Revert "MIPS: make userspace mapping young by default"
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
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
Yunjian Wang (1):
sch_htb: fix refcount leak in htb_parent_to_leaf_offload
Zenghui Yu (1):
KVM: arm64: Resolve all pending PC updates before immediate exit
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 = 12 -SUBLEVEL = 9 +SUBLEVEL = 10 EXTRAVERSION = NAME = Frozen Wasteland
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/arm/mach-omap1/board-h2.c +3 -1
@@ -320,7 +320,7 @@ static int tps_setup(struct i2c_client *client, void *context) {if (!IS_BUILTIN (CONFIG_TPS65010 ))return -ENOSYS ; - +tps65010_config_vregs1 (TPS_LDO2_ENABLE |TPS_VLDO2_3_0V |TPS_LDO1_ENABLE |TPS_VLDO1_3_0V );
@@ -394,6 +394,8 @@ static void __init h2_init(void)BUG_ON (gpio_request (H2_NAND_RB_GPIO_PIN ,"NAND ready" ) <0 );gpio_direction_input (H2_NAND_RB_GPIO_PIN ); +gpiod_add_lookup_table (&isp1301_gpiod_table); +omap_cfg_reg (L3_1610_FLASH_CS2B_OE );omap_cfg_reg (M8_1610_FLASH_CS2B_WE );
arch/arm64/Kconfig.platforms +1 -0
@@ -168,6 +168,7 @@ config ARCH_MEDIATEK config ARCH_MESON bool "Amlogic Platforms" + select COMMON_CLK select MESON_IRQ_GPIO help This enables support for the arm64 based Amlogic SoCs
arch/arm64/boot/dts/freescale/fsl-ls1028a-kontron-sl28-var1.dts +2 -1
@@ -46,7 +46,8 @@ phy0: ethernet-phy@4 { 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-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
@@ -201,8 +201,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-rmb3.dts +5 -5
@@ -88,11 +88,11 @@ codec2: codec@18 { pinctrl-0 = <&pinctrl_codec2>; reg = <0x18>; #sound-dai-cells = <0>; - HPVDD-supply = <®_3p3v>; - SPRVDD-supply = <®_3p3v>; - SPLVDD-supply = <®_3p3v>; - AVDD-supply = <®_3p3v>; - IOVDD-supply = <®_3p3v>; + HPVDD-supply = <®_gen_3p3>; + SPRVDD-supply = <®_gen_3p3>; + SPLVDD-supply = <®_gen_3p3>; + AVDD-supply = <®_gen_3p3>; + IOVDD-supply = <®_gen_3p3>; DVDD-supply = <&vgen4_reg>; reset-gpios = <&gpio3 4 GPIO_ACTIVE_HIGH>; };
arch/arm64/boot/dts/freescale/imx8mq-zii-ultra.dtsi +7 -16
@@ -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; };
@@ -77,15 +77,6 @@ reg_gen_3p3: regulator-gen-3p3 { regulator-always-on; }; - reg_3p3v: regulator-3p3v { - compatible = "regulator-fixed"; - vin-supply = <®_3p3_main>; - regulator-name = "GEN_3V3"; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-always-on; - }; - reg_usdhc2_vmmc: regulator-vsd-3v3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_reg_usdhc2>;
@@ -415,11 +406,11 @@ codec1: codec@18 { pinctrl-0 = <&pinctrl_codec1>; reg = <0x18>; #sound-dai-cells = <0>; - HPVDD-supply = <®_3p3v>; - SPRVDD-supply = <®_3p3v>; - SPLVDD-supply = <®_3p3v>; - AVDD-supply = <®_3p3v>; - IOVDD-supply = <®_3p3v>; + HPVDD-supply = <®_gen_3p3>; + SPRVDD-supply = <®_gen_3p3>; + SPLVDD-supply = <®_gen_3p3>; + AVDD-supply = <®_gen_3p3>; + IOVDD-supply = <®_gen_3p3>; DVDD-supply = <&vgen4_reg>; reset-gpios = <&gpio3 3 GPIO_ACTIVE_LOW>; };
arch/arm64/boot/dts/ti/k3-j7200-main.dtsi +2 -0
@@ -85,6 +85,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/include/asm/kvm_asm.h +1 -0
@@ -57,6 +57,7 @@#define __KVM_HOST_SMCCC_FUNC___kvm_get_mdcr_el2 12#define __KVM_HOST_SMCCC_FUNC___vgic_v3_save_aprs 13#define __KVM_HOST_SMCCC_FUNC___vgic_v3_restore_aprs 14 +#define __KVM_HOST_SMCCC_FUNC___kvm_adjust_pc 15#ifndef __ASSEMBLY__
arch/arm64/kvm/arm.c +17 -3
@@ -715,11 +715,13 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)return ret; } -if (run->immediate_exit) -return -EINTR ; -vcpu_load (vcpu); +if (run->immediate_exit) { + ret = -EINTR ; + goto out; + } +kvm_sigset_activate (vcpu); ret =1 ;
@@ -892,6 +894,18 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)kvm_sigset_deactivate (vcpu); +out: +/* +* In the unlikely event that we are returning to userspace +* with pending exceptions or PC adjustment, commit these +* adjustments in order to give userspace a consistent view of +* the vcpu state. Note that this relies on __kvm_adjust_pc() +* being preempt-safe on VHE. +*/ +if (unlikely (vcpu->arch.flags & (KVM_ARM64_PENDING_EXCEPTION | +KVM_ARM64_INCREMENT_PC ))) +kvm_call_hyp (__kvm_adjust_pc, vcpu); +vcpu_put (vcpu);return ret; }
arch/arm64/kvm/hyp/exception.c +2 -2
@@ -331,8 +331,8 @@ static void kvm_inject_exception(struct kvm_vcpu *vcpu) }/* -* Adjust the guest PC on entry, depending on flags provided by EL1 -* for the purpose of emulation (MMIO, sysreg) or exception injection. +* Adjust the guest PC (and potentially exception state) depending on +* flags provided by the emulation code. */ void __kvm_adjust_pc (struct kvm_vcpu *vcpu) {
arch/arm64/kvm/hyp/nvhe/hyp-main.c +8 -0
@@ -25,6 +25,13 @@ static void handle___kvm_vcpu_run(struct kvm_cpu_context *host_ctxt)cpu_reg (host_ctxt,1 ) =__kvm_vcpu_run (kern_hyp_va (vcpu)); } +static void handle___kvm_adjust_pc (struct kvm_cpu_context *host_ctxt) +{ + DECLARE_REG(struct kvm_vcpu *, vcpu, host_ctxt, 1); + +__kvm_adjust_pc (kern_hyp_va (vcpu)); +} +static void handle___kvm_flush_vm_context (struct kvm_cpu_context *host_ctxt) {__kvm_flush_vm_context ();
@@ -112,6 +119,7 @@ typedef void (*hcall_t)(struct kvm_cpu_context *);static const hcall_t host_hcall[] = {HANDLE_FUNC (__kvm_vcpu_run), +HANDLE_FUNC (__kvm_adjust_pc),HANDLE_FUNC (__kvm_flush_vm_context),HANDLE_FUNC (__kvm_tlb_flush_vmid_ipa),HANDLE_FUNC (__kvm_tlb_flush_vmid),
arch/mips/mm/cache.c +14 -16
@@ -157,31 +157,29 @@ unsigned long _page_cachable_default;EXPORT_SYMBOL (_page_cachable_default);#define PM (p) __pgprot(_page_cachable_default | (p)) -#define PVA (p) PM(_PAGE_VALID | _PAGE_ACCESSED | (p))static inline void setup_protection_map (void ) { protection_map[0 ] =PM (_PAGE_PRESENT | _PAGE_NO_EXEC | _PAGE_NO_READ); - protection_map[1 ] =PVA (_PAGE_PRESENT | _PAGE_NO_EXEC); - protection_map[2 ] =PVA (_PAGE_PRESENT | _PAGE_NO_EXEC | _PAGE_NO_READ); - protection_map[3 ] =PVA (_PAGE_PRESENT | _PAGE_NO_EXEC); - protection_map[4 ] =PVA (_PAGE_PRESENT); - protection_map[5 ] =PVA (_PAGE_PRESENT); - protection_map[6 ] =PVA (_PAGE_PRESENT); - protection_map[7 ] =PVA (_PAGE_PRESENT); + protection_map[1 ] =PM (_PAGE_PRESENT | _PAGE_NO_EXEC); + protection_map[2 ] =PM (_PAGE_PRESENT | _PAGE_NO_EXEC | _PAGE_NO_READ); + protection_map[3 ] =PM (_PAGE_PRESENT | _PAGE_NO_EXEC); + protection_map[4 ] =PM (_PAGE_PRESENT); + protection_map[5 ] =PM (_PAGE_PRESENT); + protection_map[6 ] =PM (_PAGE_PRESENT); + protection_map[7 ] =PM (_PAGE_PRESENT); protection_map[8 ] =PM (_PAGE_PRESENT | _PAGE_NO_EXEC | _PAGE_NO_READ); - protection_map[9 ] =PVA (_PAGE_PRESENT | _PAGE_NO_EXEC); - protection_map[10 ] =PVA (_PAGE_PRESENT | _PAGE_NO_EXEC | _PAGE_WRITE | + protection_map[9 ] =PM (_PAGE_PRESENT | _PAGE_NO_EXEC); + protection_map[10 ] =PM (_PAGE_PRESENT | _PAGE_NO_EXEC | _PAGE_WRITE | _PAGE_NO_READ); - protection_map[11 ] =PVA (_PAGE_PRESENT | _PAGE_NO_EXEC | _PAGE_WRITE); - protection_map[12 ] =PVA (_PAGE_PRESENT); - protection_map[13 ] =PVA (_PAGE_PRESENT); - protection_map[14 ] =PVA (_PAGE_PRESENT); - protection_map[15 ] =PVA (_PAGE_PRESENT); + protection_map[11 ] =PM (_PAGE_PRESENT | _PAGE_NO_EXEC | _PAGE_WRITE); + protection_map[12 ] =PM (_PAGE_PRESENT); + protection_map[13 ] =PM (_PAGE_PRESENT); + protection_map[14 ] =PM (_PAGE_PRESENT | _PAGE_WRITE); + protection_map[15 ] =PM (_PAGE_PRESENT | _PAGE_WRITE); } -#undef _PVA#undef PMvoid cpu_cache_init (void )
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/powerpc/kvm/book3s_hv.c +0 -1
@@ -4418,7 +4418,6 @@ static int kvmppc_vcpu_run_hv(struct kvm_vcpu *vcpu)mtspr (SPRN_EBBRR , ebb_regs[1 ]);mtspr (SPRN_BESCR , ebb_regs[2 ]);mtspr (SPRN_TAR , user_tar); -mtspr (SPRN_FSCR , current->thread.fscr); }mtspr (SPRN_VRSAVE , user_vrsave);
arch/powerpc/kvm/book3s_hv_rmhandlers.S +7 -0
@@ -59,6 +59,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300) #define STACK_SLOT_UAMOR (SFS-88) #define STACK_SLOT_DAWR1 (SFS-96) #define STACK_SLOT_DAWRX1 (SFS-104) +#define STACK_SLOT_FSCR (SFS-112) /* the following is used by the P9 short path */ #define STACK_SLOT_NVGPRS (SFS-152) /* 18 gprs */
@@ -686,6 +687,8 @@ BEGIN_FTR_SECTION std r6, STACK_SLOT_DAWR0(r1) std r7, STACK_SLOT_DAWRX0(r1) std r8, STACK_SLOT_IAMR(r1) + mfspr r5, SPRN_FSCR + std r5, STACK_SLOT_FSCR(r1) END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S) BEGIN_FTR_SECTION mfspr r6, SPRN_DAWR1
@@ -1663,6 +1666,10 @@ FTR_SECTION_ELSE ld r7, STACK_SLOT_HFSCR(r1) mtspr SPRN_HFSCR, r7 ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_300) +BEGIN_FTR_SECTION + ld r5, STACK_SLOT_FSCR(r1) + mtspr SPRN_FSCR, r5 +END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S) /* * Restore various registers to 0, where non-zero values * set by the guest could disrupt the host.
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))#ifdef CONFIG_X86_SGX # define DISABLE_SGX 0
arch/x86/include/asm/fpu/api.h +1 -5
@@ -106,10 +106,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/include/asm/thermal.h +3 -1
@@ -3,11 +3,13 @@#define _ASM_X86_THERMAL_H#ifdef CONFIG_X86_THERMAL_VECTOR +void therm_lvt_init (void );void intel_init_thermal (struct cpuinfo_x86 *c);bool x86_thermal_enabled (void );void intel_thermal_interrupt (void );#else -static inline void intel_init_thermal (struct cpuinfo_x86 *c) { } +static inline void therm_lvt_init (void ) { } +static inline void intel_init_thermal (struct cpuinfo_x86 *c) { }#endif #endif /* _ASM_X86_THERMAL_H */
arch/x86/kernel/apic/apic.c +1 -0
@@ -2604,6 +2604,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
@@ -730,6 +730,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 ;
@@ -203,28 +202,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 )
@@ -351,10 +331,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/kernel/setup.c +9 -0
@@ -44,6 +44,7 @@#include <asm/pci-direct.h> #include <asm/prom.h> #include <asm/proto.h> +#include <asm/thermal.h> #include <asm/unwind.h> #include <asm/vsyscall.h> #include <linux/vmalloc.h>
@@ -1220,6 +1221,14 @@ void __init setup_arch(char **cmdline_p) x86_init.timers.wallclock_init (); +/* +* This needs to run before setup_local_APIC() which soft-disables the +* local APIC temporarily and that masks the thermal LVT interrupt, +* leading to softlockups on machines which have configured SMI +* interrupt delivery. +*/ +therm_lvt_init (); +mcheck_init ();register_refined_jiffies (CLOCK_TICK_RATE );
arch/x86/kvm/svm/svm.c +4 -4
@@ -2532,7 +2532,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 :
@@ -2578,7 +2578,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);
@@ -2643,11 +2643,11 @@ static int dr_interception(struct vcpu_svm *svm) dr = svm->vmcb->control.exit_code -SVM_EXIT_READ_DR0 ;if (dr >=16 ) {/* mov to DRn */ dr -=16 ; - val =kvm_register_read (&svm->vcpu, reg); + val =kvm_register_readl (&svm->vcpu, reg); err =kvm_set_dr (&svm->vcpu, dr, val); }else {kvm_get_dr (&svm->vcpu, dr, &val); -kvm_register_write (&svm->vcpu, reg, val); +kvm_register_writel (&svm->vcpu, reg, val); }return kvm_complete_insn_gp (&svm->vcpu, err);
arch/x86/mm/fault.c +2 -2
@@ -836,8 +836,8 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,if (si_code ==SEGV_PKUERR )force_sig_pkuerr ((void __user *)address, pkey); - -force_sig_fault (SIGSEGV , si_code, (void __user *)address); +else +force_sig_fault (SIGSEGV , si_code, (void __user *)address);local_irq_disable (); }
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/dma/idxd/init.c +2 -2
@@ -675,12 +675,12 @@ static int __init idxd_init_module(void)* If the CPU does not support MOVDIR64B or ENQCMDS, there's no point in * enumerating the device. We can not utilize it. */ -if (!boot_cpu_has (X86_FEATURE_MOVDIR64B )) { +if (!cpu_feature_enabled (X86_FEATURE_MOVDIR64B )) {pr_warn ("idxd driver failed to load without MOVDIR64B.\n" );return -ENODEV ; } -if (!boot_cpu_has (X86_FEATURE_ENQCMD )) +if (!cpu_feature_enabled (X86_FEATURE_ENQCMD ))pr_warn ("Platform does not have ENQCMD(S) support.\n" );else support_enqcmd = true;
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/amdgpu_display.c +1 -0
@@ -944,6 +944,7 @@ amdgpu_display_user_framebuffer_create(struct drm_device *dev, domains =amdgpu_display_supported_domains (drm_to_adev (dev), bo->flags);if (obj->import_attach && !(domains &AMDGPU_GEM_DOMAIN_GTT )) {drm_dbg_kms (dev,"Cannot create framebuffer from imported dma_buf\n" ); +drm_gem_object_put (obj);return ERR_PTR (-EINVAL ); }
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
@@ -357,6 +357,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
@@ -367,15 +367,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
@@ -1392,8 +1392,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
@@ -933,8 +933,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/amd-sfh-hid/amd_sfh_client.c +1 -0
@@ -88,6 +88,7 @@ static void amd_sfh_work(struct work_struct *work) sensor_index = req_node->sensor_idx; report_id = req_node->report_id; node_type = req_node->report_type; +kfree (req_node);if (node_type ==HID_FEATURE_REPORT ) { report_size = get_feature_report(sensor_index, report_id,
drivers/hid/hid-logitech-hidpp.c +1 -0
@@ -1262,6 +1262,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
@@ -45,6 +45,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 */
@@ -178,6 +179,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 } };
@@ -461,7 +467,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);
@@ -990,8 +997,8 @@ int i2c_hid_core_probe(struct i2c_client *client, struct i2chid_ops *ops, 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
@@ -650,6 +650,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;
@@ -690,6 +698,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);
@@ -699,8 +709,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 ) };
@@ -714,6 +732,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
@@ -2556,6 +2556,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
@@ -2313,15 +2313,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
@@ -160,21 +160,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.h +5 -3
@@ -325,6 +325,7 @@ struct ice_vsi {struct ice_tc_cfg tc_cfg;struct bpf_prog *xdp_prog;struct ice_ring **xdp_rings;/* XDP ring array */ +unsigned long *af_xdp_zc_qps;/* tracks AF_XDP ZC enabled qps */ u16 num_xdp_txq;/* Used XDP queues */ u8 xdp_mapping_mode;/* ICE_MAP_MODE_[CONTIG|SCATTER] */
@@ -534,15 +535,16 @@ static inline void ice_set_ring_xdp(struct ice_ring *ring)*/ static inline struct xsk_buff_pool *ice_xsk_pool (struct ice_ring *ring) { +struct ice_vsi *vsi = ring->vsi;u16 qid = ring->q_index;if (ice_ring_is_xdp (ring)) - qid -= ring->vsi->num_xdp_txq; + qid -= vsi->num_xdp_txq; -if (!ice_is_xdp_ena_vsi (ring->vsi)) +if (!ice_is_xdp_ena_vsi (vsi) || !test_bit (qid, vsi->af_xdp_zc_qps))return NULL ; -return xsk_get_pool_from_qid (ring->vsi->netdev, qid); +return xsk_get_pool_from_qid (vsi->netdev, qid); }/**
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 +12 -0
@@ -105,8 +105,14 @@ static int ice_vsi_alloc_arrays(struct ice_vsi *vsi)if (!vsi->q_vectors) goto err_vectors; + vsi->af_xdp_zc_qps =bitmap_zalloc (max_t (int, vsi->alloc_txq, vsi->alloc_rxq),GFP_KERNEL ); +if (!vsi->af_xdp_zc_qps) + goto err_zc_qps; +return 0 ; +err_zc_qps: +devm_kfree (dev, vsi->q_vectors); err_vectors:devm_kfree (dev, vsi->rxq_map); err_rxq_map:
@@ -192,6 +198,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 +
@@ -286,6 +294,10 @@ static void ice_vsi_free_arrays(struct ice_vsi *vsi) dev =ice_pf_to_dev (pf); +if (vsi->af_xdp_zc_qps) { +bitmap_free (vsi->af_xdp_zc_qps); + vsi->af_xdp_zc_qps =NULL ; + }/* free the ring and vector containers */ if (vsi->q_vectors) {devm_kfree (dev, vsi->q_vectors);
drivers/net/ethernet/intel/ice/ice_txrx.c +13 -4
@@ -523,7 +523,7 @@ ice_run_xdp(struct ice_ring *rx_ring, struct xdp_buff *xdp, struct bpf_prog *xdp_prog) {struct ice_ring *xdp_ring; -int err; +int err, result;u32 act; act =bpf_prog_run_xdp (xdp_prog, xdp);
@@ -532,14 +532,20 @@ ice_run_xdp(struct ice_ring *rx_ring, struct xdp_buff *xdp,return ICE_XDP_PASS ;case XDP_TX : xdp_ring = rx_ring->vsi->xdp_rings[smp_processor_id ()]; -return ice_xmit_xdp_buff (xdp, xdp_ring); + result =ice_xmit_xdp_buff (xdp, xdp_ring); +if (result ==ICE_XDP_CONSUMED ) + goto out_failure; +return result;case XDP_REDIRECT : err =xdp_do_redirect (rx_ring->netdev, xdp, xdp_prog); -return !err ?ICE_XDP_REDIR :ICE_XDP_CONSUMED ; +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 :
@@ -2331,6 +2337,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;
@@ -2377,7 +2384,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.
@@ -1375,7 +1377,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 +15 -4
@@ -273,6 +273,7 @@ static int ice_xsk_pool_disable(struct ice_vsi *vsi, u16 qid)if (!pool)return -EINVAL ; +clear_bit (qid, vsi->af_xdp_zc_qps);xsk_pool_dma_unmap (pool,ICE_RX_DMA_ATTR );return 0 ;
@@ -303,6 +304,8 @@ ice_xsk_pool_enable(struct ice_vsi *vsi, struct xsk_buff_pool *pool, u16 qid)if (err)return err; +set_bit (qid, vsi->af_xdp_zc_qps); +return 0 ; }
@@ -473,21 +476,29 @@ ice_run_xdp_zc(struct ice_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 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.h +1 -1
@@ -749,7 +749,7 @@ void igb_ptp_rx_hang(struct igb_adapter *adapter);void igb_ptp_tx_hang (struct igb_adapter *adapter);void igb_ptp_rx_rgtstamp (struct igb_q_vector *q_vector,struct sk_buff *skb);int igb_ptp_rx_pktstamp (struct igb_q_vector *q_vector,void *va, -struct sk_buff *skb); +ktime_t *timestamp);int igb_ptp_set_ts_config (struct net_device *netdev,struct ifreq *ifr);int igb_ptp_get_ts_config (struct net_device *netdev,struct ifreq *ifr);void igb_set_flag_queue_pairs (struct igb_adapter *,const u32 );
drivers/net/ethernet/intel/igb/igb_main.c +32 -23
118 lines not on this page · raw message
drivers/net/ethernet/intel/igb/igb_ptp.c +10 -13
@@ -856,30 +856,28 @@ static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter)dev_kfree_skb_any (skb); } -#define IGB_RET_PTP_DISABLED 1 -#define IGB_RET_PTP_INVALID 2 -/** * igb_ptp_rx_pktstamp - retrieve Rx per packet timestamp * @q_vector: Pointer to interrupt specific structure * @va: Pointer to address containing Rx buffer -* @skb: Buffer containing timestamp and packet +* @timestamp: Pointer where timestamp will be stored * * This function is meant to retrieve a timestamp from the first buffer of an * incoming frame. The value is stored in little endian format starting on * byte 8 * -* Returns: 0 if success, nonzero if failure +* Returns: The timestamp header length or 0 if not available **/ int igb_ptp_rx_pktstamp (struct igb_q_vector *q_vector,void *va, -struct sk_buff *skb) +ktime_t *timestamp) {struct igb_adapter *adapter = q_vector->adapter; +struct skb_shared_hwtstamps ts;__le64 *regval = (__le64 *)va;int adjust =0 ;if (!(adapter->ptp_flags &IGB_PTP_ENABLED )) -return IGB_RET_PTP_DISABLED ; +return 0 ;/* The timestamp is recorded in little endian format. * DWORD: 0 1 2 3
@@ -888,10 +886,9 @@ int igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va,/* check reserved dwords are zero, be/le doesn't matter for zero */ if (regval[0 ]) -return IGB_RET_PTP_INVALID ; +return 0 ; -igb_ptp_systim_to_hwtstamp (adapter,skb_hwtstamps (skb), -le64_to_cpu (regval[1 ])); +igb_ptp_systim_to_hwtstamp (adapter, &ts,le64_to_cpu (regval[1 ]));/* adjust timestamp for the RX latency based on link speed */ if (adapter->hw.mac.type == e1000_i210) {
@@ -907,10 +904,10 @@ int igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va,break ; } } -skb_hwtstamps (skb)->hwtstamp = -ktime_sub_ns (skb_hwtstamps (skb)->hwtstamp, adjust); -return 0 ; + *timestamp =ktime_sub_ns (ts.hwtstamp, adjust); + +return IGB_TS_HDR_LEN ; }/**
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +8 -8
@@ -2213,23 +2213,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
@@ -1067,11 +1067,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
@@ -1632,12 +1632,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
@@ -1964,11 +1964,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 &
@@ -2093,6 +2095,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/eswitch_offloads.c +2 -1
@@ -349,7 +349,8 @@ esw_setup_slow_path_dest(struct mlx5_flow_destination *dest, struct mlx5_fs_chains *chains, int i) { - flow_act->flags |=FLOW_ACT_IGNORE_FLOW_LEVEL ; + if (mlx5_chains_ignore_flow_level_supported(chains)) + flow_act->flags |= FLOW_ACT_IGNORE_FLOW_LEVEL; dest[i].type =MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE ; dest[i].ft =mlx5_chains_get_tc_end_ft (chains); }
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/lib/fs_chains.c +1 -1
@@ -111,7 +111,7 @@ bool mlx5_chains_prios_supported(struct mlx5_fs_chains *chains)return chains->flags &MLX5_CHAINS_AND_PRIOS_SUPPORTED ; } -static bool mlx5_chains_ignore_flow_level_supported (struct mlx5_fs_chains *chains) +bool mlx5_chains_ignore_flow_level_supported (struct mlx5_fs_chains *chains) {return chains->flags &MLX5_CHAINS_IGNORE_FLOW_LEVEL_SUPPORTED ; }
drivers/net/ethernet/mellanox/mlx5/core/lib/fs_chains.h +5 -0
@@ -27,6 +27,7 @@ struct mlx5_chains_attr {bool mlx5_chains_prios_supported (struct mlx5_fs_chains *chains); +bool mlx5_chains_ignore_flow_level_supported (struct mlx5_fs_chains *chains);bool mlx5_chains_backwards_supported (struct mlx5_fs_chains *chains); u32
@@ -72,6 +73,10 @@ mlx5_chains_set_end_ft(struct mlx5_fs_chains *chains,#else /* CONFIG_MLX5_CLS_ACT */ +static inline bool +mlx5_chains_ignore_flow_level_supported (struct mlx5_fs_chains *chains) +{return false; } +static inline struct mlx5_flow_table *mlx5_chains_get_table (struct mlx5_fs_chains *chains,u32 chain,u32 prio,u32 level) {return ERR_PTR (-EOPNOTSUPP ); }
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/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/wireless/mediatek/mt76/mt76x0/pci.c +77 -4
117 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +16 -8
@@ -391,29 +391,37 @@ static void mt7921_mcu_tx_rate_report(struct mt7921_dev *dev, struct sk_buff *skb, u16 wlan_idx) { - struct mt7921_mcu_wlan_info_event *wtbl_info = - (struct mt7921_mcu_wlan_info_event *)(skb->data); -struct rate_info rate = {}; -u8 curr_idx = wtbl_info->rate_info.rate_idx; -u16 curr =le16_to_cpu (wtbl_info->rate_info.rate[curr_idx]); -struct mt7921_mcu_peer_cap peer = wtbl_info->peer_cap; + struct mt7921_mcu_wlan_info_event *wtbl_info;struct mt76_phy *mphy = &dev->mphy;struct mt7921_sta_stats *stats; +struct rate_info rate = {};struct mt7921_sta *msta;struct mt76_wcid *wcid; +u8 idx;if (wlan_idx >=MT76_N_WCIDS )return ; + + wtbl_info = (struct mt7921_mcu_wlan_info_event *)skb->data; + idx = wtbl_info->rate_info.rate_idx; +if (idx >=ARRAY_SIZE (wtbl_info->rate_info.rate)) +return ; + +rcu_read_lock (); + wcid =rcu_dereference (dev->mt76.wcid[wlan_idx]);if (!wcid) -return ; + goto out; msta = container_of(wcid, struct mt7921_sta, wcid); stats = &msta->stats;/* current rate */ -mt7921_mcu_tx_rate_parse (mphy, &peer, &rate, curr); +mt7921_mcu_tx_rate_parse (mphy, &wtbl_info->peer_cap, &rate, +le16_to_cpu (wtbl_info->rate_info.rate[idx])); stats->tx_rate = rate; +out: +rcu_read_unlock (); } static void
drivers/net/xen-netback/interface.c +6 -0
@@ -684,6 +684,7 @@ static void xenvif_disconnect_queue(struct xenvif_queue *queue) {if (queue->task) {kthread_stop (queue->task);
Lines of this file are not shown. View the raw message.
drivers/vfio/platform/vfio_platform_common.c +1 -1
Lines of this file are not shown. View the raw message.
fs/btrfs/file-item.c +81 -27
108 lines not on this page · raw message
fs/ext4/extents.c +23 -20
43 lines not on this page · raw message
fs/ext4/fast_commit.c +90 -80
170 lines not on this page · raw message
fs/io_uring.c +47 -19
66 lines not on this page · raw message
fs/ocfs2/file.c +50 -5
55 lines not on this page · raw message
net/mptcp/subflow.c +38 -38
76 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.