Linux 6.6.79
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.6.79 kernel.
All users of the 6.6 kernel series must upgrade.
The updated 6.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.6.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
------------
Documentation/arch/arm64/elf_hwcaps.rst | 36 Documentation/devicetree/bindings/regulator/qcom,smd-rpm-regulator.yaml | 2 Makefile | 15 arch/alpha/include/uapi/asm/ptrace.h | 2 arch/alpha/kernel/asm-offsets.c | 2 arch/alpha/kernel/entry.S | 24 arch/alpha/kernel/traps.c | 2 arch/alpha/mm/fault.c | 4 arch/arm64/kernel/cacheinfo.c | 12 arch/arm64/kernel/cpufeature.c | 38 arch/arm64/kernel/vdso/vdso.lds.S | 1 arch/arm64/kernel/vmlinux.lds.S | 1 arch/loongarch/kernel/genex.S | 28 arch/loongarch/kernel/idle.c | 3 arch/loongarch/kernel/reset.c | 6 arch/loongarch/lib/csum.c | 2 arch/x86/events/intel/core.c | 5 arch/x86/include/asm/mmu.h | 2 arch/x86/include/asm/mmu_context.h | 1 arch/x86/include/asm/msr-index.h | 3 arch/x86/include/asm/tlbflush.h | 1 arch/x86/kernel/i8253.c | 11 arch/x86/kernel/static_call.c | 1 arch/x86/kvm/hyperv.c | 6 arch/x86/kvm/mmu/mmu.c | 2 arch/x86/kvm/svm/nested.c | 10 arch/x86/mm/tlb.c | 35 arch/x86/xen/mmu_pv.c | 75 - block/partitions/mac.c | 18 drivers/acpi/x86/utils.c | 13 drivers/base/regmap/regmap-irq.c | 2 drivers/clocksource/i8253.c | 13 drivers/firmware/efi/efi.c | 6 drivers/firmware/efi/libstub/randomalloc.c | 3 drivers/firmware/efi/libstub/relocate.c | 3 drivers/gpio/gpio-bcm-kona.c | 71 drivers/gpio/gpio-stmpe.c | 15 drivers/gpio/gpiolib-acpi.c | 14 drivers/gpio/gpiolib.c | 6 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 5 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c | 3 drivers/gpu/drm/amd/display/dc/dcn201/dcn201_resource.c | 4 drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c | 3 drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 3 drivers/gpu/drm/i915/selftests/i915_gem_gtt.c | 4 drivers/gpu/drm/renesas/rcar-du/rcar_mipi_dsi.c | 2 drivers/gpu/drm/renesas/rcar-du/rcar_mipi_dsi_regs.h | 1 drivers/gpu/drm/tidss/tidss_dispc.c | 22 drivers/gpu/drm/v3d/v3d_perfmon.c | 5 drivers/hid/hid-multitouch.c | 5 drivers/hid/hid-steam.c | 740 +++++++--- drivers/hid/hid-thrustmaster.c | 2 drivers/infiniband/hw/efa/efa_main.c | 9 drivers/md/md-bitmap.c | 75 - drivers/md/md-bitmap.h | 6 drivers/md/md.c | 26 drivers/md/md.h | 5 drivers/md/raid1.c | 35 drivers/md/raid1.h | 1 drivers/md/raid10.c | 26 drivers/md/raid10.h | 1 drivers/md/raid5-cache.c | 4 drivers/md/raid5.c | 174 +- drivers/md/raid5.h | 4 drivers/media/dvb-frontends/cxd2841er.c | 8 drivers/media/i2c/ds90ub913.c | 25 drivers/media/i2c/ds90ub953.c | 46 drivers/media/test-drivers/vidtv/vidtv_bridge.c | 8 drivers/media/usb/uvc/uvc_driver.c | 18 drivers/media/usb/uvc/uvc_video.c | 27 drivers/media/usb/uvc/uvcvideo.h | 1 drivers/mmc/host/mtk-sd.c | 31 drivers/net/can/c_can/c_can_platform.c | 5 drivers/net/can/ctucanfd/ctucanfd_base.c | 10 drivers/net/can/usb/etas_es58x/es58x_devlink.c | 6 drivers/net/ethernet/intel/igc/igc_main.c | 1 drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c | 4 drivers/net/netdevsim/ipsec.c | 12 drivers/net/team/team.c | 4 drivers/net/vxlan/vxlan_core.c | 7 drivers/net/wireless/ath/ath12k/wmi.c | 61 drivers/net/wireless/ath/ath12k/wmi.h | 1 drivers/pci/quirks.c | 12 drivers/pci/switch/switchtec.c | 26 drivers/pinctrl/pinctrl-cy8c95x0.c | 2 drivers/soc/tegra/fuse/fuse-tegra30.c | 17 drivers/spi/spi-sn-f-ospi.c | 3 drivers/tty/serial/8250/8250.h | 2 drivers/tty/serial/8250/8250_dma.c | 16 drivers/tty/serial/8250/8250_port.c | 9 drivers/tty/serial/serial_port.c | 5 drivers/ufs/core/ufs_bsg.c | 1 drivers/usb/class/cdc-acm.c | 28 drivers/usb/core/hub.c | 14 drivers/usb/core/quirks.c | 6 drivers/usb/dwc2/gadget.c | 1 drivers/usb/dwc3/gadget.c | 34 drivers/usb/gadget/function/f_midi.c | 17 drivers/usb/gadget/udc/renesas_usb3.c | 2 drivers/usb/host/pci-quirks.c | 9 drivers/usb/roles/class.c | 5 drivers/usb/serial/option.c | 49 drivers/vfio/pci/vfio_pci_rdwr.c | 1 drivers/vfio/platform/vfio_platform_common.c | 10 drivers/video/fbdev/omap/lcd_dma.c | 4 drivers/xen/swiotlb-xen.c | 20 fs/btrfs/file.c | 4 fs/nfs/sysfs.c | 6 fs/nfsd/nfs2acl.c | 2 fs/nfsd/nfs3acl.c | 2 fs/nfsd/nfs4callback.c | 7 fs/orangefs/orangefs-debugfs.c | 4 include/linux/blk-mq.h | 18 include/linux/cgroup-defs.h | 6 include/linux/efi.h | 1 include/linux/i8253.h | 1 include/linux/netdevice.h | 6 include/linux/sched/task.h | 1 include/net/l3mdev.h | 2 include/net/net_namespace.h | 15 include/net/route.h | 9 io_uring/kbuf.c | 15 kernel/cgroup/cgroup.c | 20 kernel/cgroup/rstat.c | 1 kernel/time/clocksource.c | 9 mm/gup.c | 14 net/ax25/af_ax25.c | 11 net/batman-adv/bat_v.c | 2 net/batman-adv/bat_v_elp.c | 122 + net/batman-adv/bat_v_elp.h | 2 net/batman-adv/types.h | 3 net/can/j1939/socket.c | 4 net/can/j1939/transport.c | 5 net/core/flow_dissector.c | 21 net/core/neighbour.c | 11 net/ipv4/arp.c | 4 net/ipv4/devinet.c | 3 net/ipv4/icmp.c | 31 net/ipv4/route.c | 39 net/ipv6/icmp.c | 42 net/ipv6/mcast.c | 45 net/ipv6/ndisc.c | 24 net/ipv6/route.c | 7 net/openvswitch/datapath.c | 12 net/vmw_vsock/af_vsock.c | 12 sound/soc/intel/boards/bytcr_rt5640.c | 17 tools/testing/selftests/gpio/gpio-sim.sh | 31 tools/testing/selftests/net/pmtu.sh | 112 + tools/testing/selftests/net/rtnetlink.sh | 4 tools/tracing/rtla/src/timerlat_hist.c | 8 tools/tracing/rtla/src/timerlat_top.c | 8 151 files changed, 2106 insertions(+), 844 deletions(-)
Aaro Koskinen (1):
fbdev: omap: use threaded IRQ for LCD DMA
Aditya Kumar Singh (1):
wifi: ath12k: fix handling of 6 GHz rules
Alan Stern (1):
USB: hub: Ignore non-compliant devices with too many configs or interfaces
Alex Hung (1):
drm/amd/display: Pass non-null to dcn20_validate_apply_pipe_split_flags
Alexander Hölzl (1):
can: j1939: j1939_sk_send_loop(): fix unable to send messages with data length zero
Andrew Cooper (1):
x86/static-call: Remove early_boot_irqs_disabled check to fix Xen PVH dom0
Andy Shevchenko (4):
pinctrl: cy8c95x0: Respect IRQ trigger settings from firmware
gpiolib: Fix crash on error in gpiochip_get_ngpios()
serial: port: Assign ->iotype correctly when ->iobase is set
serial: port: Always update ->iotype in __uart_read_properties()
Andy Strohman (1):
batman-adv: fix panic during interface removal
Andy-ld Lu (1):
mmc: mtk-sd: Fix register settings for hs400(es) mode
Ard Biesheuvel (1):
efi: Avoid cold plugged memory for placing the kernel
Arnd Bergmann (1):
media: cxd2841er: fix 64-bit division on gcc-9
Artur Weber (3):
gpio: bcm-kona: Fix GPIO lock/unlock for banks above bank 0
gpio: bcm-kona: Make sure GPIO bits are unlocked when requesting IRQ
gpio: bcm-kona: Add missing newline to dev_err format string
Benjamin Marzinski (1):
md/raid5: recheck if reshape has finished with device_lock held
Charles Han (1):
HID: multitouch: Add NULL check in mt_input_configured
Chester A. Unal (1):
USB: serial: option: add MeiG Smart SLM828
Christian Gmeiner (1):
drm/v3d: Stop active perfmon if it is being destroyed
Dai Ngo (1):
NFSD: fix hang in nfsd4_shutdown_callback
Dan Carpenter (2):
HID: hid-steam: remove pointless error message
HID: hid-steam: Fix cleanup in probe()
David Woodhouse (1):
x86/i8253: Disable PIT timer 0 when not in use
Devarsh Thakkar (1):
drm/tidss: Clear the interrupt status for interrupts being disabled
Edward Adam Davis (1):
media: vidtv: Fix a null-ptr-deref in vidtv_mux_stop_thread
Elson Roy Serrao (1):
usb: roles: set switch registered flag early on
Eric Dumazet (21):
ndisc: ndisc_send_redirect() must use dev_get_by_index_rcu()
vrf: use RCU protection in l3mdev_l3_out()
vxlan: check vxlan_vnigroup_init() return value
team: better TEAM_OPTION_TYPE_STRING validation
ipv4: add RCU protection to ip4_dst_hoplimit()
net: add dev_net_rcu() helper
ipv4: use RCU protection in ipv4_default_advmss()
ipv4: use RCU protection in rt_is_expired()
ipv4: use RCU protection in inet_select_addr()
ipv4: use RCU protection in __ip_rt_update_pmtu()
ipv4: icmp: convert to dev_net_rcu()
flow_dissector: use RCU protection to fetch dev_net()
ipv6: use RCU protection in ip6_default_advmss()
ipv6: icmp: convert to dev_net_rcu()
ndisc: use RCU protection in ndisc_alloc_skb()
neighbour: use RCU protection in __neigh_notify()
arp: use RCU protection in arp_xmit()
openvswitch: use RCU protection in ovs_vport_cmd_fill_info()
ndisc: extend RCU protection in ndisc_send_skb()
ipv6: mcast: extend RCU protection in igmp6_send()
ipv6: mcast: add RCU protection to mld_newpack()
Fabio Porcedda (2):
USB: serial: option: add Telit Cinterion FN990B compositions
USB: serial: option: fix Telit Cinterion FN990A name
Fabrice Gasnier (1):
usb: dwc2: gadget: remove of_node reference upon udc_stop
Fedor Pchelkin (1):
can: ctucanfd: handle skb allocation failure
Filipe Manana (1):
btrfs: fix hole expansion when writing at an offset beyond EOF
Greg Kroah-Hartman (2):
Revert "vfio/platform: check the bounds of read/write syscalls" Linux 6.6.79
Guixin Liu (1):
scsi: ufs: bsg: Set bsg_queue to NULL after removal
Guo Ren (1):
usb: gadget: udc: renesas_usb3: Fix compiler warning
Hangbin Liu (2):
netdevsim: print human readable IP address
selftests: rtnetlink: update netdevsim ipsec output format
Hans de Goede (2):
ACPI: x86: Add skip i2c clients quirk for Vexia EDU ATLA 10 tablet 5V
ASoC: Intel: bytcr_rt5640: Add DMI quirk for Vexia Edu Atla 10 tablet 5V
Huacai Chen (1):
USB: pci-quirks: Fix HCCPARAMS register error for LS7A EHCI
Isaac Scott (3):
media: uvcvideo: Implement dual stream quirk to fix loss of usb packets
media: uvcvideo: Add new quirk definition for the Sonix Technology Co. 292a camera
media: uvcvideo: Add Kurokesu C1 PRO camera
Ivan Kokshaysky (3):
alpha: make stack 16-byte aligned (most cases)
alpha: align stack for page fault and user unaligned trap handlers
alpha: replace hardcoded stack offsets with autogenerated ones
Jann Horn (3):
usb: cdc-acm: Check control transfer buffer size before access
usb: cdc-acm: Fix handling of oversized fragments
partitions: mac: fix handling of bogus partition table
Jens Axboe (1):
block: cleanup and fix batch completion adding conditions
Jiang Liu (2):
drm/amdgpu: bail out when failed to load fw in psp_init_cap_microcode() drm/amdgpu: avoid buffer overflow attach in smu_sys_set_pp_table()
Jiasheng Jiang (1):
regmap-irq: Add missing kfree()
Jiri Pirko (1):
net: treat possible_net_t net pointer as an RCU one and add read_pnet_rcu()
Johan Hovold (1):
USB: serial: option: drop MeiG Smart defines
John Keeping (2):
usb: gadget: f_midi: fix MIDI Streaming descriptor lengths
serial: 8250: Fix fifo underflow on flush
Juergen Gross (2):
xen/swiotlb: relax alignment requirements x86/xen: allow larger contiguous memory regions in PV guests
Kartik Rajput (1):
soc/tegra: fuse: Update Tegra234 nvmem keepout list
Koichiro Den (1):
selftests: gpio: gpio-sim: Fix missing chip disablements
Krzysztof Karas (1):
drm/i915/selftests: avoid using uninitialized context
Krzysztof Kozlowski (1):
can: c_can: fix unbalanced runtime PM disable in error path
Kunihiko Hayashi (1):
spi: sn-f-ospi: Fix division by zero
Lei Huang (1):
USB: quirks: add USB_QUIRK_NO_LPM quirk for Teclast dist
Li Lingfeng (1):
nfsd: clear acl_access/acl_default after releasing them
Li Zetao (1):
neighbour: delete redundant judgment statements
Maksym Planeta (1):
Grab mm lock before grabbing pt lock
Marc Zyngier (1):
arm64: Filter out SVE hwcaps when FEAT_SVE isn't implemented
Marco Crivellari (1):
LoongArch: Fix idle VS timer enqueue
Marek Vasut (1):
USB: cdc-acm: Fill in Renesas R-Car D3 USB Download mode quirk
Mario Limonciello (1):
gpiolib: acpi: Add a quirk for Acer Nitro ANV14
Masahiro Yamada (1):
tools: fix annoying "mkdir -p ..." logs when building tools in parallel
Mathias Nyman (1):
USB: Add USB_QUIRK_NO_LPM quirk for sony xperia xz1 smartphone
Max Maisel (1):
HID: hid-steam: Add Deck IMU support
Michael Margolin (1):
RDMA/efa: Reset device on probe failure
Michal Luczaj (2):
vsock: Keep the binding until socket destruction
vsock: Orphan socket after transport release
Mike Marshall (1):
orangefs: fix a oob in orangefs_debug_write
Muhammad Adeel (1):
cgroup: Remove steal time from usage_usec
Murad Masimov (1):
ax25: Fix refcount leak caused by setting SO_BINDTODEVICE sockopt
Nathan Chancellor (1):
arm64: Handle .ARM.attributes section in linker scripts
Pavel Begunkov (1):
io_uring/kbuf: reallocate buf lists on upgrade
Radu Rendec (1):
arm64: cacheinfo: Avoid out-of-bounds write to cacheinfo array
Rakesh Babu Saladi (1):
PCI: switchtec: Add Microchip PCI100X device IDs
Ramesh Thomas (1):
vfio/pci: Enable iowrite64 and ioread64 for vfio pci
Rik van Riel (1):
x86/mm/tlb: Only trim the mm_cpumask once a second
Sean Christopherson (3):
KVM: x86: Reject Hyper-V's SEND_IPI hypercalls if local APIC isn't in-kernel
KVM: nSVM: Enter guest mode before initializing nested NPT MMU perf/x86/intel: Ensure LBRs are disabled when a CPU is starting
Selvarasu Ganesan (2):
usb: gadget: f_midi: Fixing wMaxPacketSize exceeded issue during MIDI bind retries
usb: dwc3: Fix timeout issue during controller enter/exit from halt state
Shakeel Butt (1):
cgroup: fix race between fork and cgroup.kill
Song Yoong Siang (1):
igc: Set buffer type for empty frames in igc_init_empty_frame
Srinivasan Shanmugam (1):
drm/amd/display: Add null check for head_pipe in dcn201_acquire_free_pipe_for_layer
Stefan Eichenberger (1):
usb: core: fix pipe creation for get_bMaxPacketSize0
Sven Eckelmann (2):
batman-adv: Ignore neighbor throughput metrics in error case
batman-adv: Drop unmanaged ELP metric worker
Takashi Iwai (1):
PCI/DPC: Quirk PIO log size for Intel Raptor Lake-P
Thomas Weißschuh (1):
kbuild: userprogs: fix bitsize and target detection on clang
Tomas Glozar (2):
rtla/timerlat_hist: Abort event processing on second signal rtla/timerlat_top: Abort event processing on second signal
Tomi Valkeinen (4):
media: i2c: ds90ub913: Add error handling to ub913_hw_init()
media: i2c: ds90ub953: Add error handling for i2c reads/writes drm/tidss: Fix issue in irq handling causing irq-flood issue drm/rcar-du: dsi: Fix PHY lock bit check
Tulio Fernandes (1):
HID: hid-thrustmaster: fix stack-out-of-bounds read in usb_check_int_endpoints()
Varadarajan Narayanan (1):
regulator: qcom_smd: Add l2, l5 sub-node to mp5496 regulator
Vicki Pfau (8):
HID: hid-steam: Avoid overwriting smoothing parameter
HID: hid-steam: Disable watchdog instead of using a heartbeat
HID: hid-steam: Clean up locking
HID: hid-steam: Update list of identifiers from SDL
HID: hid-steam: Add gamepad-only mode switched to by holding options
HID: hid-steam: Make sure rumble work is canceled on removal
HID: hid-steam: Move hidraw input (un)registering to work
HID: hid-steam: Don't use cancel_delayed_work_sync in IRQ context
Vincent Mailhol (1):
can: etas_es58x: fix potential NULL pointer dereference on udev->serial
Vladimir Vdovin (1):
net: ipv4: Cache pmtu for all packet paths if multipath enabled
Waiman Long (2):
clocksource: Use pr_info() for "Checking clocksource synchronization" message
clocksource: Use migrate_disable() to avoid calling get_random_u32() in atomic context
Wentao Liang (2):
gpio: stmpe: Check return value of stmpe_reg_read in stmpe_gpio_irq_sync_unlock
mlxsw: Add return value check for mlxsw_sp_port_get_stats_raw()
Yu Kuai (5):
md/md-bitmap: factor behind write counters out from bitmap_{start/end}write()
md/md-bitmap: remove the last parameter for bimtap_ops->endwrite()
md: add a new callback pers->bitmap_sector()
md/raid5: implement pers->bitmap_sector()
md/md-bitmap: move bitmap_{start, end}write to md upper layerYuli Wang (1):
LoongArch: csum: Fix OoB access in IP checksum code for negative lengths
Zhaoyang Huang (1):
mm: gup: fix infinite loop within __get_longterm_locked
Zichen Xie (1):
NFS: Fix potential buffer overflowin nfs_sysfs_link_rpc_client()
Greg Kroah-Hartman
maintainerDocumentation/arch/arm64/elf_hwcaps.rst +24 -12
@@ -174,22 +174,28 @@ HWCAP2_DCPODP Functionality implied by ID_AA64ISAR1_EL1.DPB == 0b0010. HWCAP2_SVE2 - Functionality implied by ID_AA64ZFR0_EL1.SVEVer == 0b0001. + Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and + ID_AA64ZFR0_EL1.SVEver == 0b0001. HWCAP2_SVEAES - Functionality implied by ID_AA64ZFR0_EL1.AES == 0b0001. + Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and + ID_AA64ZFR0_EL1.AES == 0b0001. HWCAP2_SVEPMULL - Functionality implied by ID_AA64ZFR0_EL1.AES == 0b0010. + Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and + ID_AA64ZFR0_EL1.AES == 0b0010. HWCAP2_SVEBITPERM - Functionality implied by ID_AA64ZFR0_EL1.BitPerm == 0b0001. + Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and + ID_AA64ZFR0_EL1.BitPerm == 0b0001. HWCAP2_SVESHA3 - Functionality implied by ID_AA64ZFR0_EL1.SHA3 == 0b0001. + Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and + ID_AA64ZFR0_EL1.SHA3 == 0b0001. HWCAP2_SVESM4 - Functionality implied by ID_AA64ZFR0_EL1.SM4 == 0b0001. + Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and + ID_AA64ZFR0_EL1.SM4 == 0b0001. HWCAP2_FLAGM2 Functionality implied by ID_AA64ISAR0_EL1.TS == 0b0010.
@@ -198,16 +204,20 @@ HWCAP2_FRINT Functionality implied by ID_AA64ISAR1_EL1.FRINTTS == 0b0001. HWCAP2_SVEI8MM - Functionality implied by ID_AA64ZFR0_EL1.I8MM == 0b0001. + Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and + ID_AA64ZFR0_EL1.I8MM == 0b0001. HWCAP2_SVEF32MM - Functionality implied by ID_AA64ZFR0_EL1.F32MM == 0b0001. + Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and + ID_AA64ZFR0_EL1.F32MM == 0b0001. HWCAP2_SVEF64MM - Functionality implied by ID_AA64ZFR0_EL1.F64MM == 0b0001. + Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and + ID_AA64ZFR0_EL1.F64MM == 0b0001. HWCAP2_SVEBF16 - Functionality implied by ID_AA64ZFR0_EL1.BF16 == 0b0001. + Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and + ID_AA64ZFR0_EL1.BF16 == 0b0001. HWCAP2_I8MM Functionality implied by ID_AA64ISAR1_EL1.I8MM == 0b0001.
@@ -273,7 +283,8 @@ HWCAP2_EBF16 Functionality implied by ID_AA64ISAR1_EL1.BF16 == 0b0010. HWCAP2_SVE_EBF16 - Functionality implied by ID_AA64ZFR0_EL1.BF16 == 0b0010. + Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and + ID_AA64ZFR0_EL1.BF16 == 0b0010. HWCAP2_CSSC Functionality implied by ID_AA64ISAR2_EL1.CSSC == 0b0001.
@@ -282,7 +293,8 @@ HWCAP2_RPRFM Functionality implied by ID_AA64ISAR2_EL1.RPRFM == 0b0001. HWCAP2_SVE2P1 - Functionality implied by ID_AA64ZFR0_EL1.SVEver == 0b0010. + Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and + ID_AA64ZFR0_EL1.SVEver == 0b0010. HWCAP2_SME2 Functionality implied by ID_AA64SMFR0_EL1.SMEver == 0b0001.
Documentation/devicetree/bindings/regulator/qcom,smd-rpm-regulator.yaml +1 -1
@@ -22,7 +22,7 @@ description: Each sub-node is identified using the node's name, with valid values listed for each of the pmics below. - For mp5496, s1, s2 + For mp5496, s1, s2, l2, l5 For pm2250, s1, s2, s3, s4, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22
Makefile +5 -10
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 78 +SUBLEVEL = 79 EXTRAVERSION = NAME = Pinguïn Aangedreven
@@ -1054,8 +1054,8 @@ LDFLAGS_vmlinux += --orphan-handling=$(CONFIG_LD_ORPHAN_WARN_LEVEL) endif # Align the bit size of userspace programs with the kernel -KBUILD_USERCFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS)) -KBUILD_USERLDFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS)) +KBUILD_USERCFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS)) +KBUILD_USERLDFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS)) # make the checker run with the right architecture CHECKFLAGS += --arch=$(ARCH)
@@ -1348,18 +1348,13 @@ ifneq ($(wildcard $(resolve_btfids_O)),) $(Q)$(MAKE) -sC $(srctree)/tools/bpf/resolve_btfids O=$(resolve_btfids_O) clean endif -# Clear a bunch of variables before executing the submake -ifeq ($(quiet),silent_) -tools_silent=s -endif - tools/: FORCE $(Q)mkdir -p $(objtree)/tools - $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ + $(Q)$(MAKE) LDFLAGS= O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ tools/%: FORCE $(Q)mkdir -p $(objtree)/tools - $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $* + $(Q)$(MAKE) LDFLAGS= O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $* # --------------------------------------------------------------------------- # Kernel selftest
arch/alpha/include/uapi/asm/ptrace.h +2 -0
@@ -42,6 +42,8 @@ struct pt_regs {unsigned long trap_a0;unsigned long trap_a1;unsigned long trap_a2; +/* This makes the stack 16-byte aligned as GCC expects */ +unsigned long __pad0;/* These are saved by PAL-code: */ unsigned long ps;unsigned long pc;
arch/alpha/kernel/asm-offsets.c +2 -0
@@ -34,7 +34,9 @@ void foo(void)DEFINE (CRED_EGID , offsetof(struct cred , egid));BLANK (); +DEFINE (SP_OFF , offsetof(struct pt_regs , ps));DEFINE (SIZEOF_PT_REGS ,sizeof (struct pt_regs )); +DEFINE (SWITCH_STACK_SIZE ,sizeof (struct switch_stack ));DEFINE (PT_PTRACED ,PT_PTRACED );DEFINE (CLONE_VM ,CLONE_VM );DEFINE (CLONE_UNTRACED ,CLONE_UNTRACED );
arch/alpha/kernel/entry.S +10 -14
@@ -15,10 +15,6 @@ .set noat .cfi_sections .debug_frame -/* Stack offsets. */ -#define SP_OFF 184 -#define SWITCH_STACK_SIZE 64 - .macro CFI_START_OSF_FRAME func .align 4 .globl \func
@@ -198,8 +194,8 @@ CFI_END_OSF_FRAME entArith CFI_START_OSF_FRAME entMM SAVE_ALL /* save $9 - $15 so the inline exception code can manipulate them. */ - subq $sp, 56, $sp - .cfi_adjust_cfa_offset 56 + subq $sp, 64, $sp + .cfi_adjust_cfa_offset 64 stq $9, 0($sp) stq $10, 8($sp) stq $11, 16($sp)
@@ -214,7 +210,7 @@ CFI_START_OSF_FRAME entMM .cfi_rel_offset $13, 32 .cfi_rel_offset $14, 40 .cfi_rel_offset $15, 48 - addq $sp, 56, $19 + addq $sp, 64, $19 /* handle the fault */ lda $8, 0x3fff bic $sp, $8, $8
@@ -227,7 +223,7 @@ CFI_START_OSF_FRAME entMM ldq $13, 32($sp) ldq $14, 40($sp) ldq $15, 48($sp) - addq $sp, 56, $sp + addq $sp, 64, $sp .cfi_restore $9 .cfi_restore $10 .cfi_restore $11
@@ -235,7 +231,7 @@ CFI_START_OSF_FRAME entMM .cfi_restore $13 .cfi_restore $14 .cfi_restore $15 - .cfi_adjust_cfa_offset -56 + .cfi_adjust_cfa_offset -64 /* finish up the syscall as normal. */ br ret_from_sys_call CFI_END_OSF_FRAME entMM
@@ -382,8 +378,8 @@ entUnaUser: .cfi_restore $0 .cfi_adjust_cfa_offset -256 SAVE_ALL /* setup normal kernel stack */ - lda $sp, -56($sp) - .cfi_adjust_cfa_offset 56 + lda $sp, -64($sp) + .cfi_adjust_cfa_offset 64 stq $9, 0($sp) stq $10, 8($sp) stq $11, 16($sp)
@@ -399,7 +395,7 @@ entUnaUser: .cfi_rel_offset $14, 40 .cfi_rel_offset $15, 48 lda $8, 0x3fff - addq $sp, 56, $19 + addq $sp, 64, $19 bic $sp, $8, $8 jsr $26, do_entUnaUser ldq $9, 0($sp)
@@ -409,7 +405,7 @@ entUnaUser: ldq $13, 32($sp) ldq $14, 40($sp) ldq $15, 48($sp) - lda $sp, 56($sp) + lda $sp, 64($sp) .cfi_restore $9 .cfi_restore $10 .cfi_restore $11
@@ -417,7 +413,7 @@ entUnaUser: .cfi_restore $13 .cfi_restore $14 .cfi_restore $15 - .cfi_adjust_cfa_offset -56 + .cfi_adjust_cfa_offset -64 br ret_from_sys_call CFI_END_OSF_FRAME entUna
arch/alpha/kernel/traps.c +1 -1
@@ -707,7 +707,7 @@ s_reg_to_mem (unsigned long s_reg)static int unauser_reg_offsets[32 ] = {R (r0),R (r1),R (r2),R (r3),R (r4),R (r5),R (r6),R (r7),R (r8),/* r9 ... r15 are stored in front of regs. */ --56 ,-48 ,-40 ,-32 ,-24 ,-16 ,-8 , +-64 ,-56 ,-48 ,-40 ,-32 ,-24 ,-16 ,/* padding at -8 */ R (r16),R (r17),R (r18),R (r19),R (r20),R (r21),R (r22),R (r23),R (r24),R (r25),R (r26),R (r27),R (r28),R (gp),
arch/alpha/mm/fault.c +2 -2
@@ -78,8 +78,8 @@ __load_new_mm_context(struct mm_struct *next_mm)/* Macro for exception fixup code to access integer registers. */ #define dpf_reg (r) \ - (((unsigned long *)regs)[(r) <= 8 ? (r) : (r) <= 15 ? (r)-16 : \ - (r) <= 18 ? (r)+10 : (r)-10]) + (((unsigned long *)regs)[(r) <= 8 ? (r) : (r) <= 15 ? (r)-17 : \ + (r) <= 18 ? (r)+11 : (r)-10]) asmlinkage void do_page_fault(unsigned long address, unsigned long mmcsr,
arch/arm64/kernel/cacheinfo.c +7 -5
@@ -101,16 +101,18 @@ int populate_cache_leaves(unsigned int cpu)unsigned int level, idx;enum cache_type type;struct cpu_cacheinfo *this_cpu_ci =get_cpu_cacheinfo (cpu); -struct cacheinfo *this_leaf = this_cpu_ci->info_list; +struct cacheinfo *infos = this_cpu_ci->info_list;for (idx =0 , level =1 ; level <= this_cpu_ci->num_levels && - idx < this_cpu_ci->num_leaves; idx++, level++) { + idx < this_cpu_ci->num_leaves; level++) { type =get_cache_type (level);if (type ==CACHE_TYPE_SEPARATE ) { -ci_leaf_init (this_leaf++,CACHE_TYPE_DATA , level); -ci_leaf_init (this_leaf++,CACHE_TYPE_INST , level); +if (idx +1 >= this_cpu_ci->num_leaves) +break ; +ci_leaf_init (&infos[idx++],CACHE_TYPE_DATA , level); +ci_leaf_init (&infos[idx++],CACHE_TYPE_INST , level); }else { -ci_leaf_init (this_leaf++, type, level); +ci_leaf_init (&infos[idx++], type, level); } }return 0 ;
arch/arm64/kernel/cpufeature.c +26 -12
@@ -2762,6 +2762,13 @@ static const struct arm64_cpu_capabilities arm64_features[] = { .matches = match, \ } +#define HWCAP_CAP_MATCH_ID (match, reg, field, min_value, cap_type, cap) \ + { \ + __HWCAP_CAP(#cap, cap_type, cap) \ + HWCAP_CPUID_MATCH(reg, field, min_value) \ + .matches = match, \ + } + #ifdef CONFIG_ARM64_PTR_AUTH static const struct arm64_cpu_capabilities ptr_auth_hwcap_addr_matches[] = { {
@@ -2790,6 +2797,13 @@ static const struct arm64_cpu_capabilities ptr_auth_hwcap_gen_matches[] = { };#endif +#ifdef CONFIG_ARM64_SVE +static bool has_sve_feature (const struct arm64_cpu_capabilities *cap,int scope) +{ +return system_supports_sve () &&has_user_cpuid_feature (cap, scope); +} +#endif +static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {HWCAP_CAP (ID_AA64ISAR0_EL1 ,AES ,PMULL ,CAP_HWCAP ,KERNEL_HWCAP_PMULL ),HWCAP_CAP (ID_AA64ISAR0_EL1 ,AES ,AES ,CAP_HWCAP ,KERNEL_HWCAP_AES ),
@@ -2827,18 +2841,18 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = { HWCAP_CAP(ID_AA64MMFR2_EL1, AT, IMP, CAP_HWCAP, KERNEL_HWCAP_USCAT),#ifdef CONFIG_ARM64_SVE HWCAP_CAP (ID_AA64PFR0_EL1 ,SVE ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVE ), -HWCAP_CAP (ID_AA64ZFR0_EL1 , SVEver, SVE2p1,CAP_HWCAP ,KERNEL_HWCAP_SVE2P1 ), -HWCAP_CAP (ID_AA64ZFR0_EL1 , SVEver,SVE2 ,CAP_HWCAP ,KERNEL_HWCAP_SVE2 ), -HWCAP_CAP (ID_AA64ZFR0_EL1 ,AES ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVEAES ), -HWCAP_CAP (ID_AA64ZFR0_EL1 ,AES ,PMULL128 ,CAP_HWCAP ,KERNEL_HWCAP_SVEPMULL ), -HWCAP_CAP (ID_AA64ZFR0_EL1 , BitPerm,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVEBITPERM ), -HWCAP_CAP (ID_AA64ZFR0_EL1 ,BF16 ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVEBF16 ), -HWCAP_CAP (ID_AA64ZFR0_EL1 ,BF16 ,EBF16 ,CAP_HWCAP ,KERNEL_HWCAP_SVE_EBF16 ), -HWCAP_CAP (ID_AA64ZFR0_EL1 ,SHA3 ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVESHA3 ), -HWCAP_CAP (ID_AA64ZFR0_EL1 ,SM4 ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVESM4 ), -HWCAP_CAP (ID_AA64ZFR0_EL1 ,I8MM ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVEI8MM ), -HWCAP_CAP (ID_AA64ZFR0_EL1 ,F32MM ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVEF32MM ), -HWCAP_CAP (ID_AA64ZFR0_EL1 ,F64MM ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVEF64MM ), +HWCAP_CAP_MATCH_ID (has_sve_feature,ID_AA64ZFR0_EL1 , SVEver, SVE2p1,CAP_HWCAP ,KERNEL_HWCAP_SVE2P1 ), +HWCAP_CAP_MATCH_ID (has_sve_feature,ID_AA64ZFR0_EL1 , SVEver,SVE2 ,CAP_HWCAP ,KERNEL_HWCAP_SVE2 ), +HWCAP_CAP_MATCH_ID (has_sve_feature,ID_AA64ZFR0_EL1 ,AES ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVEAES ), +HWCAP_CAP_MATCH_ID (has_sve_feature,ID_AA64ZFR0_EL1 ,AES ,PMULL128 ,CAP_HWCAP ,KERNEL_HWCAP_SVEPMULL ), +HWCAP_CAP_MATCH_ID (has_sve_feature,ID_AA64ZFR0_EL1 , BitPerm,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVEBITPERM ), +HWCAP_CAP_MATCH_ID (has_sve_feature,ID_AA64ZFR0_EL1 ,BF16 ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVEBF16 ), +HWCAP_CAP_MATCH_ID (has_sve_feature,ID_AA64ZFR0_EL1 ,BF16 ,EBF16 ,CAP_HWCAP ,KERNEL_HWCAP_SVE_EBF16 ), +HWCAP_CAP_MATCH_ID (has_sve_feature,ID_AA64ZFR0_EL1 ,SHA3 ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVESHA3 ), +HWCAP_CAP_MATCH_ID (has_sve_feature,ID_AA64ZFR0_EL1 ,SM4 ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVESM4 ), +HWCAP_CAP_MATCH_ID (has_sve_feature,ID_AA64ZFR0_EL1 ,I8MM ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVEI8MM ), +HWCAP_CAP_MATCH_ID (has_sve_feature,ID_AA64ZFR0_EL1 ,F32MM ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVEF32MM ), +HWCAP_CAP_MATCH_ID (has_sve_feature,ID_AA64ZFR0_EL1 ,F64MM ,IMP ,CAP_HWCAP ,KERNEL_HWCAP_SVEF64MM ), #endifHWCAP_CAP (ID_AA64PFR1_EL1 ,SSBS ,SSBS2 ,CAP_HWCAP ,KERNEL_HWCAP_SSBS ), #ifdef CONFIG_ARM64_BTI
arch/arm64/kernel/vdso/vdso.lds.S +1 -0
@@ -38,6 +38,7 @@ SECTIONS */ /DISCARD/ : { *(.note.GNU-stack .note.gnu.property) + *(.ARM.attributes) } .note : { *(.note.*) } :text :note
arch/arm64/kernel/vmlinux.lds.S +1 -0
@@ -162,6 +162,7 @@ SECTIONS /DISCARD/ : { *(.interp .dynamic) *(.dynsym .dynstr .hash .gnu.hash) + *(.ARM.attributes) } . = KIMAGE_VADDR;
arch/loongarch/kernel/genex.S +15 -13
@@ -18,27 +18,29 @@ .align 5 SYM_FUNC_START(__arch_cpu_idle) - /* start of rollback region */ - LONG_L t0, tp, TI_FLAGS - nop - andi t0, t0, _TIF_NEED_RESCHED - bnez t0, 1f - nop - nop - nop + /* start of idle interrupt region */ + ori t0, zero, CSR_CRMD_IE + /* idle instruction needs irq enabled */ + csrxchg t0, t0, LOONGARCH_CSR_CRMD + /* + * If an interrupt lands here; between enabling interrupts above and + * going idle on the next instruction, we must *NOT* go idle since the + * interrupt could have set TIF_NEED_RESCHED or caused an timer to need + * reprogramming. Fall through -- see handle_vint() below -- and have + * the idle loop take care of things. + */ idle 0 - /* end of rollback region */ + /* end of idle interrupt region */ 1: jr ra SYM_FUNC_END(__arch_cpu_idle) SYM_CODE_START(handle_vint) BACKUP_T0T1 SAVE_ALL - la_abs t1, __arch_cpu_idle + la_abs t1, 1b LONG_L t0, sp, PT_ERA - /* 32 byte rollback region */ - ori t0, t0, 0x1f - xori t0, t0, 0x1f + /* 3 instructions idle interrupt region */ + ori t0, t0, 0b1100 bne t0, t1, 1f LONG_S t0, sp, PT_ERA 1: move a0, sp
arch/loongarch/kernel/idle.c +1 -2
@@ -11,7 +11,6 @@ void __cpuidle arch_cpu_idle(void) { -raw_local_irq_enable (); -__arch_cpu_idle ();/* idle instruction needs irq enabled */ +__arch_cpu_idle ();raw_local_irq_disable (); }
arch/loongarch/kernel/reset.c +3 -3
@@ -33,7 +33,7 @@ void machine_halt(void)console_flush_on_panic (CONSOLE_FLUSH_PENDING );while (true) { -__arch_cpu_idle (); + __asm__ __volatile__("idle 0" : : :"memory" ); } }
@@ -53,7 +53,7 @@ void machine_power_off(void)#endif while (true) { -__arch_cpu_idle (); + __asm__ __volatile__("idle 0" : : :"memory" ); } }
@@ -74,6 +74,6 @@ void machine_restart(char *command)acpi_reboot ();while (true) { -__arch_cpu_idle (); + __asm__ __volatile__("idle 0" : : :"memory" ); } }
arch/loongarch/lib/csum.c +1 -1
@@ -25,7 +25,7 @@ unsigned int __no_sanitize_address do_csum(const unsigned char *buff, int len)const u64 *ptr;u64 data, sum64 =0 ; -if (unlikely (len ==0 )) +if (unlikely (len <=0 ))return 0 ; offset = (unsigned long )buff &7 ;
arch/x86/events/intel/core.c +4 -1
@@ -4715,8 +4715,11 @@ static void intel_pmu_cpu_starting(int cpu)init_debug_store_on_cpu (cpu);/* -* Deal with CPUs that don't clear their LBRs on power-up. +* Deal with CPUs that don't clear their LBRs on power-up, and that may +* even boot with LBRs enabled. */ +if (!static_cpu_has (X86_FEATURE_ARCH_LBR ) && x86_pmu.lbr_nr) +msr_clear_bit (MSR_IA32_DEBUGCTLMSR ,DEBUGCTLMSR_LBR_BIT );intel_pmu_lbr_reset (); cpuc->lbr_sel =NULL ;
arch/x86/include/asm/mmu.h +2 -0
@@ -37,6 +37,8 @@ typedef struct {*/ atomic64_t tlb_gen; +unsigned long next_trim_cpumask; +#ifdef CONFIG_MODIFY_LDT_SYSCALL struct rw_semaphore ldt_usr_sem;struct ldt_struct *ldt;
arch/x86/include/asm/mmu_context.h +1 -0
@@ -145,6 +145,7 @@ static inline int init_new_context(struct task_struct *tsk, mm->context.ctx_id =atomic64_inc_return (&last_mm_ctx_id);atomic64_set (&mm->context.tlb_gen,0 ); + mm->context.next_trim_cpumask = jiffies +HZ ;#ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS if (cpu_feature_enabled (X86_FEATURE_OSPKE )) {
arch/x86/include/asm/msr-index.h +2 -1
@@ -358,7 +358,8 @@#define MSR_IA32_PASID_VALID BIT_ULL(31)/* DEBUGCTLMSR bits (others vary by model): */ -#define DEBUGCTLMSR_LBR (1UL << 0)/* last branch recording */ +#define DEBUGCTLMSR_LBR_BIT 0/* last branch recording */ +#define DEBUGCTLMSR_LBR (1UL << DEBUGCTLMSR_LBR_BIT)#define DEBUGCTLMSR_BTF_SHIFT 1#define DEBUGCTLMSR_BTF (1UL << 1)/* single-step on branches */ #define DEBUGCTLMSR_BUS_LOCK_DETECT (1UL << 2)
arch/x86/include/asm/tlbflush.h +1 -0
@@ -222,6 +222,7 @@ struct flush_tlb_info {unsigned int initiating_cpu;u8 stride_shift;u8 freed_tables; +u8 trim_cpumask; };void flush_tlb_local (void );
arch/x86/kernel/i8253.c +9 -2
@@ -8,6 +8,7 @@#include <linux/timex.h> #include <linux/i8253.h> +#include <asm/hypervisor.h> #include <asm/apic.h> #include <asm/hpet.h> #include <asm/time.h>
@@ -39,9 +40,15 @@ static bool __init use_pit(void)bool __init pit_timer_init (void ) { -if (!use_pit ()) +if (!use_pit ()) { +/* +* Don't just ignore the PIT. Ensure it's stopped, because +* VMMs otherwise steal CPU time just to pointlessly waggle +* the (masked) IRQ. +*/ +clockevent_i8253_disable ();return false; - + }clockevent_i8253_init (true); global_clock_event = &i8253_clockevent;return true;
arch/x86/kernel/static_call.c +0 -1
@@ -175,7 +175,6 @@ EXPORT_SYMBOL_GPL(arch_static_call_transform); noinstr void __static_call_update_early(void *tramp, void *func) {BUG_ON (system_state !=SYSTEM_BOOTING ); -BUG_ON (!early_boot_irqs_disabled);BUG_ON (static_call_initialized);__text_gen_insn (tramp,JMP32_INSN_OPCODE , tramp, func,JMP32_INSN_SIZE );sync_core ();
arch/x86/kvm/hyperv.c +5 -1
@@ -2175,6 +2175,9 @@ static u64 kvm_hv_send_ipi(struct kvm_vcpu *vcpu, struct kvm_hv_hcall *hc)u32 vector;bool all_cpus; +if (!lapic_in_kernel (vcpu)) +return HV_STATUS_INVALID_HYPERCALL_INPUT ; +if (hc->code ==HVCALL_SEND_IPI ) {if (!hc->fast) { if (unlikely(kvm_read_guest(kvm, hc->ingpa, &send_ipi,
@@ -2801,7 +2804,8 @@ int kvm_get_hv_cpuid(struct kvm_vcpu *vcpu, struct kvm_cpuid2 *cpuid, ent->eax |=HV_X64_REMOTE_TLB_FLUSH_RECOMMENDED ; ent->eax |=HV_X64_APIC_ACCESS_RECOMMENDED ; ent->eax |=HV_X64_RELAXED_TIMING_RECOMMENDED ; - ent->eax |=HV_X64_CLUSTER_IPI_RECOMMENDED ; +if (!vcpu ||lapic_in_kernel (vcpu)) + ent->eax |=HV_X64_CLUSTER_IPI_RECOMMENDED ; ent->eax |=HV_X64_EX_PROCESSOR_MASKS_RECOMMENDED ;if (evmcs_ver) ent->eax |=HV_X64_ENLIGHTENED_VMCS_RECOMMENDED ;
arch/x86/kvm/mmu/mmu.c +1 -1
@@ -5289,7 +5289,7 @@ void kvm_init_shadow_npt_mmu(struct kvm_vcpu *vcpu, unsigned long cr0,union kvm_mmu_page_role root_role;/* NPT requires CR0.PG=1. */ -WARN_ON_ONCE (cpu_role.base.direct); +WARN_ON_ONCE (cpu_role.base.direct || !cpu_role.base.guest_mode); root_role = cpu_role.base; root_role.level =kvm_mmu_get_tdp_level (vcpu);
arch/x86/kvm/svm/nested.c +5 -5
@@ -644,6 +644,11 @@ static void nested_vmcb02_prepare_control(struct vcpu_svm *svm,u32 pause_count12;u32 pause_thresh12; +nested_svm_transition_tlb_flush (vcpu); + +/* Enter Guest-Mode */ +enter_guest_mode (vcpu); +/* * Filled at exit: exit_code, exit_code_hi, exit_info_1, exit_info_2, * exit_int_info, exit_int_info_err, next_rip, insn_len, insn_bytes.
@@ -760,11 +765,6 @@ static void nested_vmcb02_prepare_control(struct vcpu_svm *svm, } } -nested_svm_transition_tlb_flush (vcpu); - -/* Enter Guest-Mode */ -enter_guest_mode (vcpu); -/* * Merge guest and host intercepts - must be called with vcpu in * guest-mode to take effect.
arch/x86/mm/tlb.c +32 -3
@@ -898,9 +898,36 @@ static void flush_tlb_func(void *info) nr_invalidate); } -static bool tlb_is_not_lazy (int cpu,void *data) +static bool should_flush_tlb (int cpu,void *data) { -return !per_cpu (cpu_tlbstate_shared.is_lazy, cpu); +struct flush_tlb_info *info = data; + +/* Lazy TLB will get flushed at the next context switch. */ +if (per_cpu (cpu_tlbstate_shared.is_lazy, cpu)) +return false; + +/* No mm means kernel memory flush. */ +if (!info->mm) +return true; + +/* The target mm is loaded, and the CPU is not lazy. */ +if (per_cpu (cpu_tlbstate.loaded_mm, cpu) == info->mm) +return true; + +/* In cpumask, but not the loaded mm? Periodically remove by flushing. */ +if (info->trim_cpumask) +return true; + +return false; +} + +static bool should_trim_cpumask (struct mm_struct *mm) +{ +if (time_after (jiffies,READ_ONCE (mm->context.next_trim_cpumask))) { +WRITE_ONCE (mm->context.next_trim_cpumask, jiffies +HZ ); +return true; + } +return false; } DEFINE_PER_CPU_SHARED_ALIGNED(struct tlb_state_shared, cpu_tlbstate_shared);
@@ -934,7 +961,7 @@ STATIC_NOPV void native_flush_tlb_multi(const struct cpumask *cpumask,if (info->freed_tables)on_each_cpu_mask (cpumask, flush_tlb_func, (void *)info, true);else -on_each_cpu_cond_mask (tlb_is_not_lazy, flush_tlb_func, +on_each_cpu_cond_mask (should_flush_tlb, flush_tlb_func, (void *)info,1 , cpumask); }
@@ -985,6 +1012,7 @@ static struct flush_tlb_info *get_flush_tlb_info(struct mm_struct *mm, info->freed_tables = freed_tables; info->new_tlb_gen = new_tlb_gen; info->initiating_cpu =smp_processor_id (); + info->trim_cpumask =0 ;return info; }
@@ -1027,6 +1055,7 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,* flush_tlb_func_local() directly in this case. */ if (cpumask_any_but (mm_cpumask (mm), cpu) < nr_cpu_ids) { + info->trim_cpumask =should_trim_cpumask (mm);flush_tlb_multi (mm_cpumask (mm), info); }else if (mm ==this_cpu_read (cpu_tlbstate.loaded_mm)) {lockdep_assert_irqs_enabled ();
arch/x86/xen/mmu_pv.c +66 -9
148 lines not on this page · raw message
block/partitions/mac.c +15 -3
@@ -51,13 +51,25 @@ int mac_partition(struct parsed_partitions *state) } secsize =be16_to_cpu (md->block_size);put_dev_sector (sect); + +/* +* If the "block size" is not a power of 2, things get weird - we might +* end up with a partition straddling a sector boundary, so we wouldn't +* be able to read a partition entry with read_part_sector(). +* Real block sizes are probably (?) powers of two, so just require +* that. +*/ +if (!is_power_of_2 (secsize)) +return -1 ; datasize =round_down (secsize,512 ); data =read_part_sector (state, datasize /512 , §);if (!data)return -1 ; partoffset = secsize %512 ; -if (partoffset +sizeof (*part) > datasize) +if (partoffset +sizeof (*part) > datasize) { +put_dev_sector (sect);return -1 ; + } part = (struct mac_partition *) (data + partoffset);if (be16_to_cpu (part->signature) !=MAC_PARTITION_MAGIC ) {put_dev_sector (sect);
@@ -110,8 +122,8 @@ int mac_partition(struct parsed_partitions *state)int i, l; goodness++; - l =strlen (part->name); -if (strcmp (part->name,"/" ) ==0 ) + l =strnlen (part->name,sizeof (part->name)); +if (strncmp (part->name,"/" ,sizeof (part->name)) ==0 ) goodness++;for (i =0 ; i <= l -4 ; ++i) { if (strncasecmp(part->name + i, "root",
drivers/acpi/x86/utils.c +13 -0
@@ -400,6 +400,19 @@ static const struct dmi_system_id acpi_quirk_skip_dmi_ids[] = { .driver_data = (void *)(ACPI_QUIRK_SKIP_I2C_CLIENTS | ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY), }, + { +/* Vexia Edu Atla 10 tablet 5V version */ + .matches = { +/* Having all 3 of these not set is somewhat unique */ +DMI_MATCH (DMI_SYS_VENDOR ,"To be filled by O.E.M." ), +DMI_MATCH (DMI_PRODUCT_NAME ,"To be filled by O.E.M." ), +DMI_MATCH (DMI_BOARD_NAME ,"To be filled by O.E.M." ), +/* Above strings are too generic, also match on BIOS date */ + DMI_MATCH(DMI_BIOS_DATE, "05/14/2015"), + }, + .driver_data = (void *)(ACPI_QUIRK_SKIP_I2C_CLIENTS | + ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY), + }, {/* Vexia Edu Atla 10 tablet 9V version */ .matches = {
drivers/base/regmap/regmap-irq.c +2 -0
@@ -894,6 +894,7 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,kfree (d->wake_buf);kfree (d->mask_buf_def);kfree (d->mask_buf); +kfree (d->main_status_buf);kfree (d->status_buf);kfree (d->status_reg_buf);if (d->config_buf) {
@@ -969,6 +970,7 @@ void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *d)kfree (d->wake_buf);kfree (d->mask_buf_def);kfree (d->mask_buf); +kfree (d->main_status_buf);kfree (d->status_reg_buf);kfree (d->status_buf);if (d->config_buf) {
drivers/clocksource/i8253.c +9 -4
@@ -108,11 +108,8 @@ int __init clocksource_i8253_init(void)#endif #ifdef CONFIG_CLKEVT_I8253 -static int pit_shutdown (struct clock_event_device *evt) +void clockevent_i8253_disable (void ) { -if (!clockevent_state_oneshot (evt) && !clockevent_state_periodic (evt)) -return 0 ; -raw_spin_lock (&i8253_lock);outb_p (0x30 ,PIT_MODE );
@@ -123,6 +120,14 @@ static int pit_shutdown(struct clock_event_device *evt) }raw_spin_unlock (&i8253_lock); +} + +static int pit_shutdown (struct clock_event_device *evt) +{ +if (!clockevent_state_oneshot (evt) && !clockevent_state_periodic (evt)) +return 0 ; + +clockevent_i8253_disable ();return 0 ; }
drivers/firmware/efi/efi.c +4 -2
@@ -908,13 +908,15 @@ char * __init efi_md_typeattr_format(char *buf, size_t size,EFI_MEMORY_WB |EFI_MEMORY_UCE |EFI_MEMORY_RO |EFI_MEMORY_WP |EFI_MEMORY_RP |EFI_MEMORY_XP |EFI_MEMORY_NV |EFI_MEMORY_SP |EFI_MEMORY_CPU_CRYPTO | - EFI_MEMORY_RUNTIME | EFI_MEMORY_MORE_RELIABLE)) +EFI_MEMORY_MORE_RELIABLE |EFI_MEMORY_HOT_PLUGGABLE | + EFI_MEMORY_RUNTIME)) snprintf(pos, size, "|attr=0x%016llx]", (unsigned long long)attr); else snprintf(pos, size, -"|%3s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%3s|%2s|%2s|%2s|%2s]" , +"|%3s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%3s|%2s|%2s|%2s|%2s]" , attr &EFI_MEMORY_RUNTIME ?"RUN" :"" , + attr &EFI_MEMORY_HOT_PLUGGABLE ?"HP" :"" , attr &EFI_MEMORY_MORE_RELIABLE ?"MR" :"" , attr &EFI_MEMORY_CPU_CRYPTO ?"CC" :"" , attr & EFI_MEMORY_SP ? "SP" : "",
drivers/firmware/efi/libstub/randomalloc.c +3 -0
@@ -25,6 +25,9 @@ static unsigned long get_entry_num_slots(efi_memory_desc_t *md,if (md->type !=EFI_CONVENTIONAL_MEMORY )return 0 ; +if (md->attribute &EFI_MEMORY_HOT_PLUGGABLE ) +return 0 ; +if (efi_soft_reserve_enabled () && (md->attribute &EFI_MEMORY_SP ))return 0 ;
drivers/firmware/efi/libstub/relocate.c +3 -0
@@ -53,6 +53,9 @@ efi_status_t efi_low_alloc_above(unsigned long size, unsigned long align,if (desc->type !=EFI_CONVENTIONAL_MEMORY )continue ; +if (desc->attribute &EFI_MEMORY_HOT_PLUGGABLE ) +continue ; +if (efi_soft_reserve_enabled () && (desc->attribute &EFI_MEMORY_SP ))continue ;
drivers/gpio/gpio-bcm-kona.c +58 -13
126 lines not on this page · raw message
drivers/gpio/gpio-stmpe.c +12 -3
@@ -191,7 +191,7 @@ static void stmpe_gpio_irq_sync_unlock(struct irq_data *d) [REG_IE][CSB] = STMPE_IDX_IEGPIOR_CSB, [REG_IE][MSB] = STMPE_IDX_IEGPIOR_MSB, }; -int i, j; +int ret, i, j;/* * STMPE1600: to be able to get IRQ from pins,
@@ -199,8 +199,16 @@ static void stmpe_gpio_irq_sync_unlock(struct irq_data *d)* GPSR or GPCR registers */ if (stmpe->partnum ==STMPE1600 ) { -stmpe_reg_read (stmpe, stmpe->regs[STMPE_IDX_GPMR_LSB ]); -stmpe_reg_read (stmpe, stmpe->regs[STMPE_IDX_GPMR_CSB ]); + ret =stmpe_reg_read (stmpe, stmpe->regs[STMPE_IDX_GPMR_LSB ]); +if (ret <0 ) { +dev_err (stmpe->dev,"Failed to read GPMR_LSB: %d\n" , ret); + goto err; + } + ret =stmpe_reg_read (stmpe, stmpe->regs[STMPE_IDX_GPMR_CSB ]); +if (ret <0 ) { +dev_err (stmpe->dev,"Failed to read GPMR_CSB: %d\n" , ret); + goto err; + } }for (i =0 ; i <CACHE_NR_REGS ; i++) {
@@ -222,6 +230,7 @@ static void stmpe_gpio_irq_sync_unlock(struct irq_data *d) } } +err:mutex_unlock (&stmpe_gpio->irq_lock); }
drivers/gpio/gpiolib-acpi.c +14 -0
@@ -1706,6 +1706,20 @@ static const struct dmi_system_id gpiolib_acpi_quirks[] __initconst = { .ignore_wake = "PNP0C50:00@8", }, }, + { + /* + * Spurious wakeups from GPIO 11 + * Found in BIOS 1.04 + * https://gitlab.freedesktop.org/drm/amd/-/issues/3954 + */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), + DMI_MATCH(DMI_PRODUCT_FAMILY, "Acer Nitro V 14"), + }, + .driver_data = &(struct acpi_gpiolib_dmi_quirk) { + .ignore_interrupt = "AMDI0030:00@11", + }, + }, {} /* Terminating entry */ };
drivers/gpio/gpiolib.c +3 -3
@@ -723,13 +723,13 @@ int gpiochip_get_ngpios(struct gpio_chip *gc, struct device *dev) }if (gc->ngpio ==0 ) { -chip_err (gc,"tried to insert a GPIO chip with zero lines\n" ); +dev_err (dev,"tried to insert a GPIO chip with zero lines\n" );return -EINVAL ; }if (gc->ngpio >FASTPATH_NGPIO ) -chip_warn (gc,"line cnt %u is greater than fast path cnt %u\n" , - gc->ngpio,FASTPATH_NGPIO ); +dev_warn (dev,"line cnt %u is greater than fast path cnt %u\n" , + gc->ngpio,FASTPATH_NGPIO );return 0 ; }
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +3 -2
@@ -3450,9 +3450,10 @@ int psp_init_cap_microcode(struct psp_context *psp, const char *chip_name)if (err == -ENODEV ) {dev_warn (adev->dev,"cap microcode does not exist, skip\n" ); err =0 ; - goto out; + }else { +dev_err (adev->dev,"fail to initialize cap microcode\n" ); } -dev_err (adev->dev,"fail to initialize cap microcode\n" ); + goto out; } info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CAP ];
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c +2 -1
@@ -2026,6 +2026,7 @@ bool dcn20_fast_validate_bw( {bool out = false;int split[MAX_PIPES ] = {0 }; +bool merge[MAX_PIPES ] = { false };int pipe_cnt, i, pipe_idx, vlevel;ASSERT (pipes);
@@ -2050,7 +2051,7 @@ bool dcn20_fast_validate_bw(if (vlevel > context->bw_ctx.dml.soc.num_states) goto validate_fail; - vlevel =dcn20_validate_apply_pipe_split_flags (dc, context, vlevel, split,NULL ); + vlevel =dcn20_validate_apply_pipe_split_flags (dc, context, vlevel, split, merge);/*initialize pipe_just_split_from to invalid idx*/ for (i =0 ; i <MAX_PIPES ; i++)
drivers/gpu/drm/amd/display/dc/dcn201/dcn201_resource.c +3 -1
@@ -1002,8 +1002,10 @@ static struct pipe_ctx *dcn201_acquire_free_pipe_for_layer(struct pipe_ctx *head_pipe =resource_get_otg_master_for_stream (res_ctx, opp_head_pipe->stream);struct pipe_ctx *idle_pipe =resource_find_free_secondary_pipe_legacy (res_ctx, pool, head_pipe); -if (!head_pipe) +if (!head_pipe) {ASSERT (0 ); +return NULL ; + }if (!idle_pipe)return NULL ;
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c +2 -1
@@ -800,6 +800,7 @@ bool dcn21_fast_validate_bw(struct dc *dc, {bool out = false;int split[MAX_PIPES ] = {0 }; +bool merge[MAX_PIPES ] = { false };int pipe_cnt, i, pipe_idx, vlevel;ASSERT (pipes);
@@ -842,7 +843,7 @@ bool dcn21_fast_validate_bw(struct dc *dc, goto validate_fail; } - vlevel =dcn20_validate_apply_pipe_split_flags (dc, context, vlevel, split,NULL ); + vlevel =dcn20_validate_apply_pipe_split_flags (dc, context, vlevel, split, merge);for (i =0 , pipe_idx =0 ; i < dc->res_pool->pipe_count; i++) {struct pipe_ctx *pipe = &context->res_ctx.pipe_ctx[i];
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +2 -1
@@ -517,7 +517,8 @@ static int smu_sys_set_pp_table(void *handle,return -EIO ; } -if (!smu_table->hardcode_pptable) { +if (!smu_table->hardcode_pptable || smu_table->power_play_table_size < size) { +kfree (smu_table->hardcode_pptable); smu_table->hardcode_pptable =kzalloc (size,GFP_KERNEL );if (!smu_table->hardcode_pptable)return -ENOMEM ;
drivers/gpu/drm/i915/selftests/i915_gem_gtt.c +2 -2
@@ -168,7 +168,7 @@ static int igt_ppgtt_alloc(void *arg)return PTR_ERR (ppgtt);if (!ppgtt->vm.allocate_va_range) - goto err_ppgtt_cleanup; + goto ppgtt_vm_put;/* * While we only allocate the page tables here and so we could
@@ -236,7 +236,7 @@ static int igt_ppgtt_alloc(void *arg) goto retry; }i915_gem_ww_ctx_fini (&ww); - +ppgtt_vm_put:i915_vm_put (&ppgtt->vm);return err; }
drivers/gpu/drm/renesas/rcar-du/rcar_mipi_dsi.c +1 -1
@@ -587,7 +587,7 @@ static int rcar_mipi_dsi_startup(struct rcar_mipi_dsi *dsi,for (timeout =10 ; timeout >0 ; --timeout) {if ((rcar_mipi_dsi_read (dsi,PPICLSR ) &PPICLSR_STPST ) && (rcar_mipi_dsi_read (dsi,PPIDLSR ) &PPIDLSR_STPST ) && - (rcar_mipi_dsi_read (dsi,CLOCKSET1 ) &CLOCKSET1_LOCK )) + (rcar_mipi_dsi_read (dsi,CLOCKSET1 ) &CLOCKSET1_LOCK_PHY ))break ;usleep_range (1000 ,2000 );
drivers/gpu/drm/renesas/rcar-du/rcar_mipi_dsi_regs.h +0 -1
@@ -142,7 +142,6 @@#define CLOCKSET1 0x101c#define CLOCKSET1_LOCK_PHY (1 << 17) -#define CLOCKSET1_LOCK (1 << 16)#define CLOCKSET1_CLKSEL (1 << 8)#define CLOCKSET1_CLKINSEL_EXTAL (0 << 2)#define CLOCKSET1_CLKINSEL_DIG (1 << 2)
drivers/gpu/drm/tidss/tidss_dispc.c +12 -10
@@ -646,7 +646,7 @@ void dispc_k2g_set_irqenable(struct dispc_device *dispc, dispc_irq_t mask) {dispc_irq_t old_mask =dispc_k2g_read_irqenable (dispc); -/* clear the irqstatus for newly enabled irqs */ +/* clear the irqstatus for irqs that will be enabled */ dispc_k2g_clear_irqstatus (dispc, (mask ^ old_mask) & mask);dispc_k2g_vp_set_irqenable (dispc,0 , mask);
@@ -654,6 +654,9 @@ void dispc_k2g_set_irqenable(struct dispc_device *dispc, dispc_irq_t mask)dispc_write (dispc,DISPC_IRQENABLE_SET , (1 <<0 ) | (1 <<7 )); +/* clear the irqstatus for irqs that were disabled */ +dispc_k2g_clear_irqstatus (dispc, (mask ^ old_mask) & old_mask); +/* flush posted write */ dispc_k2g_read_irqenable (dispc); }
@@ -726,24 +729,20 @@ staticvoid dispc_k3_clear_irqstatus (struct dispc_device *dispc,dispc_irq_t clearmask) {unsigned int i; -u32 top_clear =0 ;for (i =0 ; i < dispc->feat->num_vps; ++i) { -if (clearmask &DSS_IRQ_VP_MASK (i)) { +if (clearmask &DSS_IRQ_VP_MASK (i))dispc_k3_vp_write_irqstatus (dispc, i, clearmask); - top_clear |=BIT (i); - } }for (i =0 ; i < dispc->feat->num_planes; ++i) { -if (clearmask &DSS_IRQ_PLANE_MASK (i)) { +if (clearmask &DSS_IRQ_PLANE_MASK (i))dispc_k3_vid_write_irqstatus (dispc, i, clearmask); - top_clear |=BIT (4 + i); - } }if (dispc->feat->subrev ==DISPC_K2G )return ; -dispc_write (dispc,DISPC_IRQSTATUS , top_clear); +/* always clear the top level irqstatus */ +dispc_write (dispc,DISPC_IRQSTATUS ,dispc_read (dispc,DISPC_IRQSTATUS ));/* Flush posted writes */ dispc_read (dispc,DISPC_IRQSTATUS );
@@ -789,7 +788,7 @@ static void dispc_k3_set_irqenable(struct dispc_device *dispc, old_mask =dispc_k3_read_irqenable (dispc); -/* clear the irqstatus for newly enabled irqs */ +/* clear the irqstatus for irqs that will be enabled */ dispc_k3_clear_irqstatus (dispc, (old_mask ^ mask) & mask);for (i =0 ; i < dispc->feat->num_vps; ++i) {
@@ -814,6 +813,9 @@ static void dispc_k3_set_irqenable(struct dispc_device *dispc,if (main_disable)dispc_write (dispc,DISPC_IRQENABLE_CLR , main_disable); +/* clear the irqstatus for irqs that were disabled */ +dispc_k3_clear_irqstatus (dispc, (old_mask ^ mask) & old_mask); +/* Flush posted writes */ dispc_read (dispc,DISPC_IRQENABLE_SET ); }
drivers/gpu/drm/v3d/v3d_perfmon.c +5 -0
@@ -179,6 +179,7 @@ int v3d_perfmon_destroy_ioctl(struct drm_device *dev, void *data, {struct v3d_file_priv *v3d_priv = file_priv->driver_priv;struct drm_v3d_perfmon_destroy *req = data; +struct v3d_dev *v3d = v3d_priv->v3d;struct v3d_perfmon *perfmon;mutex_lock (&v3d_priv->perfmon.lock);
@@ -188,6 +189,10 @@ int v3d_perfmon_destroy_ioctl(struct drm_device *dev, void *data,if (!perfmon)return -EINVAL ; +/* If the active perfmon is being destroyed, stop it first */ +if (perfmon == v3d->active_perfmon) +v3d_perfmon_stop (v3d, perfmon, false); +v3d_perfmon_put (perfmon);return 0 ;
drivers/hid/hid-multitouch.c +4 -1
@@ -1668,9 +1668,12 @@ static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)break ; } -if (suffix) +if (suffix) { hi->input->name =devm_kasprintf (&hdev->dev,GFP_KERNEL ,"%s %s" , hdev->name, suffix); +if (!hi->input->name) +return -ENOMEM ; + }return 0 ; }
drivers/hid/hid-steam.c +569 -171
1,021 lines not on this page · raw message
drivers/hid/hid-thrustmaster.c +1 -1
@@ -171,7 +171,7 @@ static void thrustmaster_interrupts(struct hid_device *hdev) b_ep = ep->desc.bEndpointAddress;/* Are the expected endpoints present? */ -u8 ep_addr[1 ] = {b_ep}; +u8 ep_addr[2 ] = {b_ep,0 };if (!usb_check_int_endpoints (usbif, ep_addr)) {hid_err (hdev,"Unexpected non-int endpoint\n" );
drivers/infiniband/hw/efa/efa_main.c +5 -4
@@ -452,7 +452,6 @@ static void efa_ib_device_remove(struct efa_dev *dev)ibdev_info (&dev->ibdev,"Unregister ib device\n" );ib_unregister_device (&dev->ibdev);efa_destroy_eqs (dev); -efa_com_dev_reset (&dev->edev,EFA_REGS_RESET_NORMAL );efa_release_doorbell_bar (dev); }
@@ -623,12 +622,14 @@ static struct efa_dev *efa_probe_device(struct pci_dev *pdev)return ERR_PTR (err); } -static void efa_remove_device (struct pci_dev *pdev) +static void efa_remove_device (struct pci_dev *pdev, +enum efa_regs_reset_reason_types reset_reason) {struct efa_dev *dev =pci_get_drvdata (pdev);struct efa_com_dev *edev; edev = &dev->edev; +efa_com_dev_reset (edev, reset_reason);efa_com_admin_destroy (edev);efa_free_irq (dev, &dev->admin_irq);efa_disable_msix (dev);
@@ -656,7 +657,7 @@ static int efa_probe(struct pci_dev *pdev, const struct pci_device_id *ent)return 0 ; err_remove_device: -efa_remove_device (pdev); +efa_remove_device (pdev,EFA_REGS_RESET_INIT_ERR );return err; }
@@ -665,7 +666,7 @@ static void efa_remove(struct pci_dev *pdev)struct efa_dev *dev =pci_get_drvdata (pdev);efa_ib_device_remove (dev); -efa_remove_device (pdev); +efa_remove_device (pdev,EFA_REGS_RESET_NORMAL ); }static struct pci_driver efa_pci_driver = {
drivers/md/md-bitmap.c +45 -30
115 lines not on this page · raw message
drivers/md/md-bitmap.h +4 -2
@@ -253,9 +253,11 @@ void md_bitmap_dirty_bits(struct bitmap *bitmap, unsigned long s, unsigned long/* these are exported */ int md_bitmap_startwrite (struct bitmap *bitmap,sector_t offset, -unsigned long sectors,int behind); +unsigned long sectors);void md_bitmap_endwrite (struct bitmap *bitmap,sector_t offset, -unsigned long sectors,int success,int behind); +unsigned long sectors); +void md_bitmap_start_behind_write (struct mddev *mddev); +void md_bitmap_end_behind_write (struct mddev *mddev);int md_bitmap_start_sync (struct bitmap *bitmap,sector_t offset,sector_t *blocks,int degraded);void md_bitmap_end_sync (struct bitmap *bitmap,sector_t offset,sector_t *blocks,int aborted);void md_bitmap_close_sync (struct bitmap *bitmap);
drivers/md/md.c +26 -0
@@ -8713,12 +8713,32 @@ void md_submit_discard_bio(struct mddev *mddev, struct md_rdev *rdev, }EXPORT_SYMBOL_GPL (md_submit_discard_bio); +static void md_bitmap_start (struct mddev *mddev, +struct md_io_clone *md_io_clone) +{ +if (mddev->pers->bitmap_sector) + mddev->pers->bitmap_sector (mddev, &md_io_clone->offset, + &md_io_clone->sectors); + +md_bitmap_startwrite (mddev->bitmap, md_io_clone->offset, + md_io_clone->sectors); +} + +static void md_bitmap_end (struct mddev *mddev,struct md_io_clone *md_io_clone) +{ +md_bitmap_endwrite (mddev->bitmap, md_io_clone->offset, + md_io_clone->sectors); +} +static void md_end_clone_io (struct bio *bio) {struct md_io_clone *md_io_clone = bio->bi_private;struct bio *orig_bio = md_io_clone->orig_bio;struct mddev *mddev = md_io_clone->mddev; +if (bio_data_dir (orig_bio) ==WRITE && mddev->bitmap) +md_bitmap_end (mddev, md_io_clone); +if (bio->bi_status && !orig_bio->bi_status) orig_bio->bi_status = bio->bi_status;
@@ -8743,6 +8763,12 @@ static void md_clone_bio(struct mddev *mddev, struct bio **bio)if (blk_queue_io_stat (bdev->bd_disk->queue)) md_io_clone->start_time =bio_start_io_acct (*bio); +if (bio_data_dir (*bio) ==WRITE && mddev->bitmap) { + md_io_clone->offset = (*bio)->bi_iter.bi_sector; + md_io_clone->sectors =bio_sectors (*bio); +md_bitmap_start (mddev, md_io_clone); + } + clone->bi_end_io = md_end_clone_io; clone->bi_private = md_io_clone; *bio = clone;
drivers/md/md.h +5 -0
@@ -661,6 +661,9 @@ struct md_personalityvoid *(*takeover) (struct mddev *mddev);/* Changes the consistency policy of an active array. */ int (*change_consistency_policy)(struct mddev *mddev,const char *buf); +/* convert io ranges from array to bitmap */ +void (*bitmap_sector)(struct mddev *mddev,sector_t *offset, +unsigned long *sectors); };struct md_sysfs_entry {
@@ -743,6 +746,8 @@ struct md_io_clone {struct mddev *mddev;struct bio *orig_bio;unsigned long start_time; +sector_t offset; +unsigned long sectors;struct bio bio_clone; };
drivers/md/raid1.c +6 -29
@@ -419,11 +419,8 @@ static void close_write(struct r1bio *r1_bio)bio_put (r1_bio->behind_master_bio); r1_bio->behind_master_bio =NULL ; } -/* clear the bitmap if all writes complete successfully */ -md_bitmap_endwrite (r1_bio->mddev->bitmap, r1_bio->sector, - r1_bio->sectors, - !test_bit (R1BIO_Degraded, &r1_bio->state), -test_bit (R1BIO_BehindIO, &r1_bio->state)); +if (test_bit (R1BIO_BehindIO, &r1_bio->state)) +md_bitmap_end_behind_write (r1_bio->mddev);md_write_end (r1_bio->mddev); }
@@ -480,8 +477,6 @@ static void raid1_end_write_request(struct bio *bio)if (!test_bit (Faulty, &rdev->flags))set_bit (R1BIO_WriteError, &r1_bio->state);else { -/* Fail the request */ -set_bit (R1BIO_Degraded, &r1_bio->state);/* Finished with this branch */ r1_bio->bios[mirror] =NULL ; to_put = bio;
@@ -1414,11 +1409,8 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,break ; } r1_bio->bios[i] =NULL ; -if (!rdev ||test_bit (Faulty, &rdev->flags)) { -if (i < conf->raid_disks) -set_bit (R1BIO_Degraded, &r1_bio->state); +if (!rdev ||test_bit (Faulty, &rdev->flags))continue ; - }atomic_inc (&rdev->nr_pending);if (test_bit (WriteErrorSeen, &rdev->flags)) {
@@ -1444,16 +1436,6 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,*/ max_sectors = bad_sectors;rdev_dec_pending (rdev, mddev); -/* We don't set R1BIO_Degraded as that -* only applies if the disk is -* missing, so it might be re-added, -* and we want to know to recover this -* chunk. -* In this case the device is here, -* and the fact that this chunk is not -* in-sync is recorded in the bad -* block log -*/ continue ; }if (is_bad) {
@@ -1530,8 +1512,8 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,alloc_behind_master_bio (r1_bio, bio); } -md_bitmap_startwrite (bitmap, r1_bio->sector, r1_bio->sectors, -test_bit (R1BIO_BehindIO, &r1_bio->state)); +if (test_bit (R1BIO_BehindIO, &r1_bio->state)) +md_bitmap_start_behind_write (mddev); first_clone =0 ; }
@@ -2476,12 +2458,9 @@ static void handle_write_finished(struct r1conf *conf, struct r1bio *r1_bio)* errors. */ fail = true; -if (!narrow_write_error (r1_bio, m)) { +if (!narrow_write_error (r1_bio, m))md_error (conf->mddev, conf->mirrors[m].rdev); -/* an I/O failed, we can't clear the bitmap */ -set_bit (R1BIO_Degraded, &r1_bio->state); - }rdev_dec_pending (conf->mirrors[m].rdev, conf->mddev); }
@@ -2573,8 +2552,6 @@ static void raid1d(struct md_thread *thread)list_del (&r1_bio->retry_list); idx =sector_to_idx (r1_bio->sector);atomic_dec (&conf->nr_queued[idx]); -if (mddev->degraded) -set_bit (R1BIO_Degraded, &r1_bio->state);if (test_bit (R1BIO_WriteError, &r1_bio->state))close_write (r1_bio);raid_end_bio_io (r1_bio);
drivers/md/raid1.h +0 -1
@@ -187,7 +187,6 @@ struct r1bio {enum r1bio_state { R1BIO_Uptodate, R1BIO_IsSync, - R1BIO_Degraded, R1BIO_BehindIO,/* Set ReadError on bios that experience a readerror so that * raid1d knows what to do with them.
drivers/md/raid10.c +2 -24
@@ -427,11 +427,6 @@ static void raid10_end_read_request(struct bio *bio)static void close_write (struct r10bio *r10_bio) { -/* clear the bitmap if all writes complete successfully */ -md_bitmap_endwrite (r10_bio->mddev->bitmap, r10_bio->sector, - r10_bio->sectors, - !test_bit (R10BIO_Degraded, &r10_bio->state), -0 );md_write_end (r10_bio->mddev); }
@@ -501,7 +496,6 @@ static void raid10_end_write_request(struct bio *bio)set_bit (R10BIO_WriteError, &r10_bio->state); else {/* Fail the request */ -set_bit (R10BIO_Degraded, &r10_bio->state); r10_bio->devs[slot].bio =NULL ; to_put = bio; dec_rdev =1 ;
@@ -1490,10 +1484,8 @@ static void raid10_write_request(struct mddev *mddev, struct bio *bio, r10_bio->devs[i].bio =NULL ; r10_bio->devs[i].repl_bio =NULL ; -if (!rdev && !rrdev) { -set_bit (R10BIO_Degraded, &r10_bio->state); +if (!rdev && !rrdev)continue ; - }if (rdev &&test_bit (WriteErrorSeen, &rdev->flags)) {sector_t first_bad;sector_t dev_sector = r10_bio->devs[i].addr;
@@ -1510,14 +1502,6 @@ static void raid10_write_request(struct mddev *mddev, struct bio *bio,* to other devices yet */ max_sectors = bad_sectors; -/* We don't set R10BIO_Degraded as that -* only applies if the disk is missing, -* so it might be re-added, and we want to -* know to recover this chunk. -* In this case the device is here, and the -* fact that this chunk is not in-sync is -* recorded in the bad block log. -*/ continue ; }if (is_bad) {
@@ -1554,7 +1538,6 @@ static void raid10_write_request(struct mddev *mddev, struct bio *bio,md_account_bio (mddev, &bio); r10_bio->master_bio = bio;atomic_set (&r10_bio->remaining,1 ); -md_bitmap_startwrite (mddev->bitmap, r10_bio->sector, r10_bio->sectors,0 );for (i =0 ; i < conf->copies; i++) {if (r10_bio->devs[i].bio)
@@ -3063,11 +3046,8 @@ static void handle_write_completed(struct r10conf *conf, struct r10bio *r10_bio)rdev_dec_pending (rdev, conf->mddev); }else if (bio !=NULL && bio->bi_status) { fail = true; -if (!narrow_write_error (r10_bio, m)) { +if (!narrow_write_error (r10_bio, m))md_error (conf->mddev, rdev); -set_bit (R10BIO_Degraded, - &r10_bio->state); - }rdev_dec_pending (rdev, conf->mddev); } bio = r10_bio->devs[m].repl_bio;
@@ -3126,8 +3106,6 @@ static void raid10d(struct md_thread *thread) r10_bio = list_first_entry(&tmp, struct r10bio, retry_list);list_del (&r10_bio->retry_list); -if (mddev->degraded) -set_bit (R10BIO_Degraded, &r10_bio->state);if (test_bit (R10BIO_WriteError, &r10_bio->state))
drivers/md/raid10.h +0 -1
@@ -161,7 +161,6 @@ enum r10bio_state { R10BIO_IsSync, R10BIO_IsRecover, R10BIO_IsReshape, - R10BIO_Degraded,/* Set ReadError on bios that experience a read error * so that raid10d knows what to do with them. */
drivers/md/raid5-cache.c +0 -4
@@ -313,10 +313,6 @@ void r5c_handle_cached_data_endio(struct r5conf *conf,if (sh->dev[i].written) {set_bit (R5_UPTODATE , &sh->dev[i].flags);r5c_return_dev_pending_writes (conf, &sh->dev[i]); -md_bitmap_endwrite (conf->mddev->bitmap, sh->sector, -RAID5_STRIPE_SECTORS (conf), - !test_bit (STRIPE_DEGRADED , &sh->state), -0 ); } } }
drivers/md/raid5.c +97 -77
301 lines not on this page · raw message
drivers/md/raid5.h +0 -4
@@ -358,7 +358,6 @@ enum {STRIPE_REPLACED ,STRIPE_PREREAD_ACTIVE ,STRIPE_DELAYED , -STRIPE_DEGRADED ,STRIPE_BIT_DELAY ,STRIPE_EXPANDING , STRIPE_EXPAND_SOURCE,
@@ -372,9 +371,6 @@ enum {STRIPE_ON_RELEASE_LIST ,STRIPE_BATCH_READY ,STRIPE_BATCH_ERR , -STRIPE_BITMAP_PENDING ,/* Being added to bitmap, don't add -* to batch yet. -*/ STRIPE_LOG_TRAPPED, /* trapped into log (see raid5-cache.c)* this bit is used in two scenarios: *
drivers/media/dvb-frontends/cxd2841er.c +2 -6
@@ -311,12 +311,8 @@ static int cxd2841er_set_reg_bits(struct cxd2841er_priv *priv,static u32 cxd2841er_calc_iffreq_xtal (enum cxd2841er_xtal xtal,u32 ifhz) { -u64 tmp;
Lines of this file are not shown. View the raw message.
drivers/media/i2c/ds90ub953.c +32 -14
46 lines not on this page · raw message
drivers/media/test-drivers/vidtv/vidtv_bridge.c +7 -1
Lines of this file are not shown. View the raw message.
drivers/net/can/ctucanfd/ctucanfd_base.c +6 -4
Lines of this file are not shown. View the raw message.
drivers/net/can/usb/etas_es58x/es58x_devlink.c +5 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/igc/igc_main.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c +3 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/ath/ath12k/wmi.c +45 -16
61 lines not on this page · raw message
drivers/usb/serial/option.c +29 -20
49 lines not on this page · raw message
drivers/vfio/platform/vfio_platform_common.c +0 -10
Lines of this file are not shown. View the raw message.
net/batman-adv/bat_v_elp.c +86 -36
122 lines not on this page · raw message
net/ipv6/icmp.c +23 -19
42 lines not on this page · raw message
net/ipv6/mcast.c +25 -20
45 lines not on this page · raw message
tools/testing/selftests/gpio/gpio-sim.sh +25 -6
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/pmtu.sh +95 -17
112 lines not on this page · raw message
tools/testing/selftests/net/rtnetlink.sh +2 -2
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.