Skip to contentSkip to conversation

Linux 6.12.16

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Feb 21, 2025 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 6.12.16 kernel.

All users of the 6.12 kernel series must upgrade.

The updated 6.12.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.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

------------

 Documentation/devicetree/bindings/regulator/qcom,smd-rpm-regulator.yaml |    2 
 Documentation/networking/iso15765-2.rst                                 |    4 
 Makefile                                                                |   15 -
 arch/alpha/include/uapi/asm/ptrace.h                                    |    2 
 arch/alpha/kernel/asm-offsets.c                                         |    4 
 arch/alpha/kernel/entry.S                                               |   24 -
 arch/alpha/kernel/traps.c                                               |    2 
 arch/alpha/mm/fault.c                                                   |    4 
 arch/arm64/Makefile                                                     |    4 
 arch/arm64/kernel/cacheinfo.c                                           |   12 
 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/kvm/main.c                                               |    4 
 arch/loongarch/lib/csum.c                                               |    2 
 arch/s390/pci/pci_bus.c                                                 |   20 +
 arch/s390/pci/pci_iov.c                                                 |   56 ++-
 arch/s390/pci/pci_iov.h                                                 |    7 
 arch/x86/Kconfig                                                        |    3 
 arch/x86/events/intel/core.c                                            |   33 --
 arch/x86/events/intel/ds.c                                              |   10 
 arch/x86/include/asm/kvm-x86-ops.h                                      |    1 
 arch/x86/include/asm/kvm_host.h                                         |    1 
 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/perf_event.h                                       |   28 +
 arch/x86/include/asm/tlbflush.h                                         |    1 
 arch/x86/kernel/cpu/bugs.c                                              |   21 -
 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/kvm/svm/svm.c                                                  |   13 
 arch/x86/kvm/vmx/main.c                                                 |    1 
 arch/x86/kvm/vmx/vmx.c                                                  |   10 
 arch/x86/kvm/vmx/x86_ops.h                                              |    1 
 arch/x86/kvm/x86.c                                                      |    3 
 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/bluetooth/btintel_pcie.c                                        |    5 
 drivers/cpufreq/amd-pstate.c                                            |  102 ++----
 drivers/firmware/efi/efi.c                                              |    6 
 drivers/firmware/efi/libstub/randomalloc.c                              |    3 
 drivers/firmware/efi/libstub/relocate.c                                 |    3 
 drivers/firmware/qcom/qcom_scm-smc.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/amdkfd/kfd_process_queue_manager.c                  |    2 
 drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c                               |    3 
 drivers/gpu/drm/display/drm_dp_helper.c                                 |    2 
 drivers/gpu/drm/i915/selftests/i915_gem_gtt.c                           |    4 
 drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_2_x1e80100.h                |    4 
 drivers/gpu/drm/msm/disp/dpu1/dpu_writeback.c                           |    3 
 drivers/gpu/drm/msm/msm_gem_submit.c                                    |    3 
 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/renesas/rz-du/rzg2l_du_kms.c                            |    6 
 drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c                      |    7 
 drivers/gpu/drm/tidss/tidss_dispc.c                                     |   26 +
 drivers/gpu/drm/tidss/tidss_irq.c                                       |    2 
 drivers/gpu/drm/v3d/v3d_perfmon.c                                       |    5 
 drivers/gpu/drm/xe/xe_drm_client.c                                      |    2 
 drivers/gpu/drm/xe/xe_trace_bo.h                                        |   12 
 drivers/gpu/host1x/dev.c                                                |    2 
 drivers/gpu/host1x/intr.c                                               |    2 
 drivers/hid/hid-multitouch.c                                            |    5 
 drivers/hid/hid-steam.c                                                 |   41 ++
 drivers/hid/hid-thrustmaster.c                                          |    2 
 drivers/hid/hid-winwing.c                                               |    2 
 drivers/i3c/master/Kconfig                                              |   11 
 drivers/i3c/master/mipi-i3c-hci/Makefile                                |    1 
 drivers/i3c/master/mipi-i3c-hci/dma.c                                   |   17 +
 drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c                      |  148 ++++++++++
 drivers/infiniband/hw/efa/efa_main.c                                    |    9 
 drivers/iommu/amd/amd_iommu_types.h                                     |    1 
 drivers/iommu/amd/init.c                                                |    4 
 drivers/iommu/io-pgfault.c                                              |    1 
 drivers/media/dvb-frontends/cxd2841er.c                                 |    8 
 drivers/media/i2c/ds90ub913.c                                           |   25 +
 drivers/media/i2c/ds90ub953.c                                           |   46 ++-
 drivers/media/platform/broadcom/bcm2835-unicam.c                        |    8 
 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/rockchip/rockchip_canfd-core.c                          |    2 
 drivers/net/can/usb/etas_es58x/es58x_devlink.c                          |    6 
 drivers/net/ethernet/intel/idpf/idpf_lib.c                              |    5 
 drivers/net/ethernet/intel/idpf/idpf_txrx.c                             |    5 
 drivers/net/ethernet/intel/igc/igc_main.c                               |   22 -
 drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c                  |    4 
 drivers/net/ethernet/ti/am65-cpsw-nuss.c                                |   40 +-
 drivers/net/netdevsim/ipsec.c                                           |   12 
 drivers/net/team/team_core.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/net/wireless/realtek/rtw89/pci.c                                |   17 -
 drivers/net/wireless/realtek/rtw89/pci.h                                |   11 
 drivers/net/wireless/realtek/rtw89/pci_be.c                             |    2 
 drivers/parport/parport_serial.c                                        |   12 
 drivers/pci/quirks.c                                                    |   15 -
 drivers/pci/switch/switchtec.c                                          |   26 +
 drivers/pinctrl/pinconf-generic.c                                       |    8 
 drivers/pinctrl/pinctrl-cy8c95x0.c                                      |   36 +-
 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_pci.c                                      |   76 ++---
 drivers/tty/serial/8250/8250_pci1xxxx.c                                 |   60 +++-
 drivers/tty/serial/8250/8250_port.c                                     |    9 
 drivers/tty/serial/serial_port.c                                        |    5 
 drivers/ufs/core/ufs_bsg.c                                              |    1 
 drivers/ufs/core/ufshcd.c                                               |  127 ++++----
 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/core.c                                           |    2 
 drivers/usb/gadget/udc/renesas_usb3.c                                   |    2 
 drivers/usb/host/pci-quirks.c                                           |    9 
 drivers/usb/host/xhci-pci.c                                             |    7 
 drivers/usb/roles/class.c                                               |    5 
 drivers/usb/serial/option.c                                             |   49 +--
 drivers/vfio/pci/nvgrace-gpu/main.c                                     |   95 ++++--
 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/extent_io.c                                                    |   29 +
 fs/btrfs/file.c                                                         |    4 
 fs/nfs/sysfs.c                                                          |    6 
 fs/nfsd/filecache.c                                                     |   11 
 fs/nfsd/nfs2acl.c                                                       |    2 
 fs/nfsd/nfs3acl.c                                                       |    2 
 fs/nfsd/nfs4callback.c                                                  |    7 
 fs/ntfs3/attrib.c                                                       |    4 
 fs/ntfs3/dir.c                                                          |    2 
 fs/ntfs3/frecord.c                                                      |   12 
 fs/ntfs3/fsntfs.c                                                       |    6 
 fs/ntfs3/index.c                                                        |    6 
 fs/ntfs3/inode.c                                                        |    3 
 fs/orangefs/orangefs-debugfs.c                                          |    4 
 fs/smb/client/cifsglob.h                                                |    1 
 fs/smb/client/file.c                                                    |    7 
 include/drm/display/drm_dp.h                                            |    1 
 include/kunit/platform_device.h                                         |    1 
 include/linux/blk-mq.h                                                  |   18 -
 include/linux/cgroup-defs.h                                             |    6 
 include/linux/efi.h                                                     |    1 
 include/linux/netdevice.h                                               |    6 
 include/linux/pci_ids.h                                                 |   11 
 include/linux/sched/task.h                                              |    1 
 include/net/dst.h                                                       |    9 
 include/net/ip.h                                                        |   13 
 include/net/l3mdev.h                                                    |    2 
 include/net/net_namespace.h                                             |    2 
 include/net/route.h                                                     |    9 
 include/ufs/ufshcd.h                                                    |    9 
 io_uring/kbuf.c                                                         |   15 -
 io_uring/uring_cmd.c                                                    |    3 
 io_uring/waitid.c                                                       |    4 
 kernel/cgroup/cgroup.c                                                  |   20 -
 kernel/cgroup/rstat.c                                                   |    1 
 kernel/sched/autogroup.c                                                |    4 
 kernel/sched/core.c                                                     |    7 
 kernel/sched/ext.c                                                      |   35 --
 kernel/sched/ext.h                                                      |    4 
 kernel/sched/sched.h                                                    |    2 
 kernel/time/clocksource.c                                               |    9 
 kernel/trace/ring_buffer.c                                              |   28 +
 kernel/trace/trace.c                                                    |    4 
 kernel/workqueue.c                                                      |   12 
 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/fib_rules.c                                                    |   24 -
 net/core/flow_dissector.c                                               |   21 -
 net/core/neighbour.c                                                    |    8 
 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/ioam6_iptunnel.c                                               |   75 ++---
 net/ipv6/mcast.c                                                        |   45 +--
 net/ipv6/ndisc.c                                                        |   24 -
 net/ipv6/route.c                                                        |    7 
 net/ipv6/rpl_iptunnel.c                                                 |   59 ++-
 net/ipv6/seg6_iptunnel.c                                                |   98 ++++--
 net/openvswitch/datapath.c                                              |   12 
 net/vmw_vsock/af_vsock.c                                                |   12 
 rust/Makefile                                                           |    1 
 rust/kernel/rbtree.rs                                                   |    2 
 scripts/Makefile.defconf                                                |   13 
 scripts/Makefile.extrawarn                                              |   13 
 scripts/kconfig/Makefile                                                |    4 
 sound/soc/intel/boards/bytcr_rt5640.c                                   |   17 +
 tools/objtool/check.c                                                   |    1 
 tools/sched_ext/include/scx/common.bpf.h                                |   12 
 tools/testing/selftests/bpf/prog_tests/bpf_iter.c                       |    6 
 tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c              |    9 
 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 
 226 files changed, 2386 insertions(+), 1012 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

Alexander Hölzl (1):
can: j1939: j1939_sk_send_loop(): fix unable to send messages with data length zero

Andrea Righi (1):
sched_ext: Fix lock imbalance in dispatch_to_local_dsq()

Andrew Cooper (1):
x86/static-call: Remove early_boot_irqs_disabled check to fix Xen PVH dom0

Andy Shevchenko (9):
pinctrl: cy8c95x0: Avoid accessing reserved registers
pinctrl: cy8c95x0: Enable regmap locking for debug
pinctrl: cy8c95x0: Rename PWMSEL to SELPWM
pinctrl: cy8c95x0: Respect IRQ trigger settings from firmware
gpiolib: Fix crash on error in gpiochip_get_ngpios()
serial: 8250_pci: Resolve WCH vendor ID ambiguity
serial: 8250_pci: Share WCH IDs with parport_serial driver
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

Ankit Agrawal (2):
vfio/nvgrace-gpu: Read dvsec register to determine need for uncached resmem vfio/nvgrace-gpu: Expose the blackwell device PF BAR1 to the VM

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

Avri Altman (5):
scsi: ufs: core: Introduce ufshcd_has_pending_tasks()
scsi: ufs: core: Prepare to introduce a new clock_gating lock
scsi: ufs: core: Introduce a new clock_gating lock
scsi: ufs: Fix toggling of clk_gating.state when clock gating is not allowed
scsi: ufs: core: Ensure clk_gating.lock is used only after initialization

Bibo Mao (1):
LoongArch: KVM: Fix typo issue about GCFG feature detection

Bjorn Helgaas (1):
PCI: Avoid FLR for Mediatek MT7922 WiFi

Brian Norris (1):
kunit: platform: Resolve 'struct completion' warning

Charles Han (2):
HID: winwing: Add NULL check in winwing_init_led()
HID: multitouch: Add NULL check in mt_input_configured

Chester A. Unal (1):
USB: serial: option: add MeiG Smart SLM828

Chris Brandt (1):
drm: renesas: rz-du: Increase supported resolutions

Christian Gmeiner (1):
drm/v3d: Stop active perfmon if it is being destroyed

Chuyi Zhou (2):
sched_ext: Fix the incorrect bpf_list kfunc API in common.bpf.h.
sched_ext: Use SCX_CALL_OP_TASK in task_tick_scx

Claudiu Beznea (1):
pinctrl: pinconf-generic: Print unsigned value if a format is registered

Dai Ngo (1):
NFSD: fix hang in nfsd4_shutdown_callback

Dan Carpenter (1):
drm/msm/gem: prevent integer overflow in msm_ioctl_gem_submit()

David Sterba (1):
btrfs: rename __get_extent_map() and pass btrfs_inode

Devarsh Thakkar (2):
drm/tidss: Fix race condition while handling interrupt registers drm/tidss: Clear the interrupt status for interrupts being disabled

Dhananjay Ugwekar (7):
cpufreq/amd-pstate: Call cppc_set_epp_perf in the reenable function cpufreq/amd-pstate: Align offline flow of shared memory and MSR based systems cpufreq/amd-pstate: Refactor amd_pstate_epp_reenable() and amd_pstate_epp_offline() cpufreq/amd-pstate: Remove the cppc_state check in offline/online functions cpufreq/amd-pstate: Merge amd_pstate_epp_cpu_offline() and amd_pstate_epp_offline() cpufreq/amd-pstate: Fix cpufreq_policy ref counting cpufreq/amd-pstate: Remove the goto label in amd_pstate_update_limits

Dmitry Baryshkov (1):
drm/msm/dpu1: don't choke on disabling the writeback connector

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 (23):
net: fib_rules: annotate data-races around rule->[io]ifindex
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()
ipv4: use RCU protection in ip_dst_mtu_maybe_forward()
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 (2):
btrfs: fix hole expansion when writing at an offset beyond EOF
btrfs: fix stale page cache after race between readahead and direct IO write

Greg Kroah-Hartman (2):
Revert "vfio/platform: check the bounds of read/write syscalls" Linux 6.12.16

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

Imre Deak (1):
drm: Fix DSC BPP increment decoding

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: replace hardcoded stack offsets with autogenerated ones
alpha: align stack for page fault and user unaligned trap handlers

Jakub Kicinski (2):
net: ipv6: fix dst ref loops in rpl, seg6 and ioam6 lwtunnels
net: ipv6: fix dst refleaks in rpl, seg6 and ioam6 lwtunnels

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

Jarkko Nikula (2):
i3c: mipi-i3c-hci: Add Intel specific quirk to ring resuming
i3c: mipi-i3c-hci: Add support for MIPI I3C HCI on PCI bus

Jason Xing (1):
bpf: handle implicit declaration of function gettid in bpf_iter.c

Jeff Layton (1):
nfsd: validate the nfsd_serv pointer before calling svc_wake_up

Jens Axboe (2):
io_uring/uring_cmd: remove dead req_has_async_data() check
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 Olsa (1):
selftests/bpf: Fix uprobe consumer test

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

Joshua Hay (1):
idpf: call set_real_num_queues in idpf_open

Juergen Gross (2):
xen/swiotlb: relax alignment requirements x86/xen: allow larger contiguous memory regions in PV guests

Justin Iurman (4):
include: net: add static inline dst_dev_overhead() to dst.h
net: ipv6: ioam6_iptunnel: mitigate 2-realloc issue
net: ipv6: seg6_iptunnel: mitigate 2-realloc issue
net: ipv6: rpl_iptunnel: mitigate 2-realloc issue

Justin M. Forbes (1):
rust: kbuild: add -fzero-init-padding-bits to bindgen_skip_cflags

Kan Liang (2):
perf/x86/intel: Clean up PEBS-via-PT on hybrid perf/x86/intel: Fix ARCH_PERFMON_NUM_COUNTER_LEAF

Kartik Rajput (1):
soc/tegra: fuse: Update Tegra234 nvmem keepout list

Kees Cook (1):
kbuild: Use -fzero-init-padding-bits=all

Kiran K (1):
Bluetooth: btintel_pcie: Fix a potential race condition

Koichiro Den (1):
selftests: gpio: gpio-sim: Fix missing chip disablements

Konstantin Komarov (1):
fs/ntfs3: Unify inode corruption marking with _ntfs_bad_inode()

Krzysztof Karas (1):
drm/i915/selftests: avoid using uninitialized context

Krzysztof Kozlowski (2):
firmware: qcom: scm: smc: Handle missing SCM device
can: c_can: fix unbalanced runtime PM disable in error path

Kunihiko Hayashi (1):
spi: sn-f-ospi: Fix division by zero

Lai Jiangshan (1):
workqueue: Put the pwq after detaching the rescuer from the pool

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

Lu Baolu (1):
iommu: Fix potential memory leak in iopf_queue_remove_device()

Maksym Planeta (1):
Grab mm lock before grabbing pt lock

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 (2):
gpiolib: acpi: Add a quirk for Acer Nitro ANV14 cpufreq/amd-pstate: convert mutex use to guard()

Masahiro Yamada (2):
tools: fix annoying "mkdir -p ..." logs when building tools in parallel
kbuild: suppress stdout from merge_config for silent builds

Mathias Nyman (1):
USB: Add USB_QUIRK_NO_LPM quirk for sony xperia xz1 smartphone

Maxime Ripard (1):
drm/tests: hdmi: Fix WW_MUTEX_SLOWPATH failures

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

Michal Pecio (1):
usb: xhci: Restore xhci_pci support for Renesas HCs

Miguel Ojeda (3):
arm64: rust: clean Rust 1.85.0 warning using softfloat target objtool/rust: add one more noreturn Rust function
rust: rbtree: fix overindented list item

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 (2):
scripts/Makefile.extrawarn: Do not show clang's non-kprintf warnings at W=1
arm64: Handle .ARM.attributes section in linker scripts

Naushir Patuck (1):
media: bcm2835-unicam: Disable trigger mode operation

Niklas Schnelle (2):
s390/pci: Pull search for parent PF out of zpci_iov_setup_virtfn() s390/pci: Fix handling of isolated VFs

Patrick Bellasi (1):
x86/cpu/kvm: SRSO: Fix possible missing IBPB on VM-Exit

Pavel Begunkov (2):
io_uring/waitid: don't abuse io_tw_state io_uring/kbuf: reallocate buf lists on upgrade

Ping-Ke Shih (1):
wifi: rtw89: pci: disable PCIE wake bit when PCIE deinit

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

Rengarajan S (1):
8250: microchip: pci1xxxx: Add workaround for RTS bit toggle

Reyders Morales (1):
Documentation/networking: fix basic node example document ISO 15765-2

Rik van Riel (1):
x86/mm/tlb: Only trim the mm_cpumask once a second

Robin van der Gracht (1):
can: rockchip: rkcanfd_handle_rx_fifo_overflow_int(): bail out if skb cannot be allocated

Roger Quadros (2):
net: ethernet: ti: am65-cpsw: fix memleak in certain XDP cases
net: ethernet: ti: am65_cpsw: fix tx_cleanup for XDP case

Roy Luo (1):
usb: gadget: core: flush gadget workqueue after device removal

Rupinderjit Singh (1):
gpu: host1x: Fix a use of uninitialized mutex

Sean Christopherson (4):
KVM: x86: Reject Hyper-V's SEND_IPI hypercalls if local APIC isn't in-kernel
KVM: x86: Load DR6 with guest value only before entering .vcpu_run() loop
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

Shyam Prasad N (1):
cifs: pick channels for individual subrequests

Song Yoong Siang (1):
igc: Set buffer type for empty frames in igc_init_empty_frame

Sridhar Samudrala (2):
idpf: fix handling rsc packet with a single segment
idpf: record rx queue in skb for RSC packets

Stefan Eichenberger (1):
usb: core: fix pipe creation for get_bMaxPacketSize0

Stephan Gerhold (1):
drm/msm/dpu: fix x1e80100 intf_6 underrun/vsync interrupt

Steven Rostedt (4):
ring-buffer: Unlock resize on mmap error
tracing: Do not allow mmap() of persistent ring buffer
ring-buffer: Validate the persistent meta data subbuf array
ring-buffer: Update pages_touched to reflect persistent buffer content

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

Tejas Upadhyay (1):

      drm/xe/client: bo->client does not need bos_lock

Tejun Heo (1):
sched_ext: Fix incorrect autogroup migration detection

Thomas Hellström (1):
drm/xe/tracing: Fix a potential TP_printk UAF

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

Vasant Hegde (1):
iommu/amd: Expicitly enable CNTRL.EPHEn bit in resume path

Vicki Pfau (3):
HID: hid-steam: Don't use cancel_delayed_work_sync in IRQ context
HID: hid-steam: Make sure rumble work is canceled on removal
HID: hid-steam: Move hidraw input (un)registering to work

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()

Yuli Wang (1):
LoongArch: csum: Fix OoB access in IP checksum code for negative lengths

Zdenek Bouska (1):
igc: Fix HW RX timestamp when passed by ZC XDP

Zhu Lingshan (1):
amdkfd: properly free gang_ctx_bo when failed to init user queue

Zichen Xie (1):
NFS: Fix potential buffer overflowin nfs_sysfs_link_rpc_client()

author maintainer
#1 lore raw
Documentation/devicetree/bindings/regulator/qcom,smd-rpm-regulator.yaml +1 -1
index f2fd2df68a9e..b7241ce975b9 100644
@@ -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
Documentation/networking/iso15765-2.rst +2 -2
index 0e9d96074178..37ebb2c417cb 100644
@@ -369,8 +369,8 @@ to their default.
 
   addr.can_family = AF_CAN;
   addr.can_ifindex = if_nametoindex("can0");
-  addr.tp.tx_id = 0x18DA42F1 | CAN_EFF_FLAG;
-  addr.tp.rx_id = 0x18DAF142 | CAN_EFF_FLAG;
+  addr.can_addr.tp.tx_id = 0x18DA42F1 | CAN_EFF_FLAG;
+  addr.can_addr.tp.rx_id = 0x18DAF142 | CAN_EFF_FLAG;
 
   ret = bind(s, (struct sockaddr *)&addr, sizeof(addr));
   if (ret < 0)
Makefile +5 -10
index c6918c620bc3..340da922fa4f 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 6
 PATCHLEVEL = 12
-SUBLEVEL = 15
+SUBLEVEL = 16
 EXTRAVERSION =
 NAME = Baby Opossum Posse
 
@@ -1057,8 +1057,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)
@@ -1357,18 +1357,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
index 5ca45934fcbb..72ed913a910f 100644
@@ -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 +4 -0
index 4cfeae42c79a..e9dad60b147f 100644
@@ -19,9 +19,13 @@ static void __used foo(void)
 	DEFINE(TI_STATUS, offsetof(struct thread_info, status));
 	BLANK();
 
+	DEFINE(SP_OFF, offsetof(struct pt_regs, ps));
 	DEFINE(SIZEOF_PT_REGS, sizeof(struct pt_regs));
 	BLANK();
 
+	DEFINE(SWITCH_STACK_SIZE, sizeof(struct switch_stack));
+	BLANK();
+
 	DEFINE(HAE_CACHE, offsetof(struct alpha_machine_vector, hae_cache));
 	DEFINE(HAE_REG, offsetof(struct alpha_machine_vector, hae_register));
 }
arch/alpha/kernel/entry.S +10 -14
index dd26062d75b3..f4d41b4538c2 100644
@@ -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
index a9a38c80c4a7..7004397937cf 100644
@@ -649,7 +649,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
index 8c9850437e67..a9816bbc9f34 100644
@@ -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/Makefile +4 -0
index 9efd3f37c2fd..19a4988621ac 100644
@@ -48,7 +48,11 @@ KBUILD_CFLAGS	+= $(CC_FLAGS_NO_FPU) \
 KBUILD_CFLAGS	+= $(call cc-disable-warning, psabi)
 KBUILD_AFLAGS	+= $(compat_vdso)
 
+ifeq ($(call test-ge, $(CONFIG_RUSTC_VERSION), 108500),y)
+KBUILD_RUSTFLAGS += --target=aarch64-unknown-none-softfloat
+else
 KBUILD_RUSTFLAGS += --target=aarch64-unknown-none -Ctarget-feature="-neon"
+endif
 
 KBUILD_CFLAGS	+= $(call cc-option,-mabi=lp64)
 KBUILD_AFLAGS	+= $(call cc-option,-mabi=lp64)
arch/arm64/kernel/cacheinfo.c +7 -5
index d9c9218fa1fd..309942b06c5b 100644
@@ -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/vdso/vdso.lds.S +1 -0
index f204a9ddc833..a3f1e895e2a6 100644
@@ -41,6 +41,7 @@ SECTIONS
 	 */
 	/DISCARD/	: {
 		*(.note.GNU-stack .note.gnu.property)
+		*(.ARM.attributes)
 	}
 	.note		: { *(.note.*) }		:text	:note
 
arch/arm64/kernel/vmlinux.lds.S +1 -0
index f84c71f04d9e..e73326bd3ff7 100644
@@ -162,6 +162,7 @@ SECTIONS
 	/DISCARD/ : {
 		*(.interp .dynamic)
 		*(.dynsym .dynstr .hash .gnu.hash)
+		*(.ARM.attributes)
 	}
 
 	. = KIMAGE_VADDR;
arch/loongarch/kernel/genex.S +15 -13
index 86d5d90ebefe..4f0912141781 100644
@@ -18,16 +18,19 @@
 
 	.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)
 
@@ -35,11 +38,10 @@ SYM_CODE_START(handle_vint)
 	UNWIND_HINT_UNDEFINED
 	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
index 0b5dd2faeb90..54b247d8cdb6 100644
@@ -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
index 1ef8c6383535..de8fa5a8a825 100644
@@ -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/kvm/main.c +2 -2
index 27e9b94c0a0b..7e8f5d6829ef 100644
@@ -283,9 +283,9 @@ int kvm_arch_enable_virtualization_cpu(void)
 	 * TOE=0:       Trap on Exception.
 	 * TIT=0:       Trap on Timer.
 	 */
-	if (env & CSR_GCFG_GCIP_ALL)
+	if (env & CSR_GCFG_GCIP_SECURE)
 		gcfg |= CSR_GCFG_GCI_SECURE;
-	if (env & CSR_GCFG_MATC_ROOT)
+	if (env & CSR_GCFG_MATP_ROOT)
 		gcfg |= CSR_GCFG_MATC_ROOT;
 
 	write_csr_gcfg(gcfg);
arch/loongarch/lib/csum.c +1 -1
index a5e84b403c3b..df309ae4045d 100644
@@ -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/s390/pci/pci_bus.c +20 -0
index 56a786ca7354..c38546829345 100644
@@ -331,6 +331,17 @@ static int zpci_bus_add_device(struct zpci_bus *zbus, struct zpci_dev *zdev)
 	return rc;
 }
 
+static bool zpci_bus_is_isolated_vf(struct zpci_bus *zbus, struct zpci_dev *zdev)
+{
+	struct pci_dev *pdev;
+
+	pdev = zpci_iov_find_parent_pf(zbus, zdev);
+	if (!pdev)
+		return true;
+	pci_dev_put(pdev);
+	return false;
+}
+
 int zpci_bus_device_register(struct zpci_dev *zdev, struct pci_ops *ops)
 {
 	bool topo_is_tid = zdev->tid_avail;
@@ -345,6 +356,15 @@ int zpci_bus_device_register(struct zpci_dev *zdev, struct pci_ops *ops)
 
 	topo = topo_is_tid ? zdev->tid : zdev->pchid;
 	zbus = zpci_bus_get(topo, topo_is_tid);
+	/*
+	 * An isolated VF gets its own domain/bus even if there exists
+	 * a matching domain/bus already
+	 */
+	if (zbus && zpci_bus_is_isolated_vf(zbus, zdev)) {
+		zpci_bus_put(zbus);
+		zbus = NULL;
+	}
+
 	if (!zbus) {
 		zbus = zpci_bus_alloc(topo, topo_is_tid);
 		if (!zbus)
arch/s390/pci/pci_iov.c +42 -14

75 lines not on this page · raw message

arch/s390/pci/pci_iov.h +7 -0
index b2c828003bad..05df728f980c 100644
@@ -17,6 +17,8 @@ void zpci_iov_map_resources(struct pci_dev *pdev);
 
 int zpci_iov_setup_virtfn(struct zpci_bus *zbus, struct pci_dev *virtfn, int vfn);
 
+struct pci_dev *zpci_iov_find_parent_pf(struct zpci_bus *zbus, struct zpci_dev *zdev);
+
 #else /* CONFIG_PCI_IOV */
 static inline void zpci_iov_remove_virtfn(struct pci_dev *pdev, int vfn) {}
 
@@ -26,5 +28,10 @@ static inline int zpci_iov_setup_virtfn(struct zpci_bus *zbus, struct pci_dev *v
 {
 	return 0;
 }
+
+static inline struct pci_dev *zpci_iov_find_parent_pf(struct zpci_bus *zbus, struct zpci_dev *zdev)
+{
+	return NULL;
+}
 #endif /* CONFIG_PCI_IOV */
 #endif /* __S390_PCI_IOV_h */
arch/x86/Kconfig +2 -1
index 171be04eca1f..1b0c2397d657 100644
@@ -2582,7 +2582,8 @@ config MITIGATION_IBPB_ENTRY
 	depends on CPU_SUP_AMD && X86_64
 	default y
 	help
-	  Compile the kernel with support for the retbleed=ibpb mitigation.
+	  Compile the kernel with support for the retbleed=ibpb and
+	  spec_rstack_overflow={ibpb,ibpb-vmexit} mitigations.
 
 config MITIGATION_IBRS_ENTRY
 	bool "Enable IBRS on kernel entry"
arch/x86/events/intel/core.c +14 -19
index f558be868a50..f5bf400f6a28 100644
@@ -4865,20 +4865,22 @@ static inline bool intel_pmu_broken_perf_cap(void)
 
 static void update_pmu_cap(struct x86_hybrid_pmu *pmu)
 {
-	unsigned int sub_bitmaps, eax, ebx, ecx, edx;
+	unsigned int cntr, fixed_cntr, ecx, edx;
+	union cpuid35_eax eax;
+	union cpuid35_ebx ebx;
 
-	cpuid(ARCH_PERFMON_EXT_LEAF, &sub_bitmaps, &ebx, &ecx, &edx);
+	cpuid(ARCH_PERFMON_EXT_LEAF, &eax.full, &ebx.full, &ecx, &edx);
 
-	if (ebx & ARCH_PERFMON_EXT_UMASK2)
+	if (ebx.split.umask2)
 		pmu->config_mask |= ARCH_PERFMON_EVENTSEL_UMASK2;
-	if (ebx & ARCH_PERFMON_EXT_EQ)
+	if (ebx.split.eq)
 		pmu->config_mask |= ARCH_PERFMON_EVENTSEL_EQ;
 
-	if (sub_bitmaps & ARCH_PERFMON_NUM_COUNTER_LEAF_BIT) {
+	if (eax.split.cntr_subleaf) {
 		cpuid_count(ARCH_PERFMON_EXT_LEAF, ARCH_PERFMON_NUM_COUNTER_LEAF,
-			    &eax, &ebx, &ecx, &edx);
-		pmu->cntr_mask64 = eax;
-		pmu->fixed_cntr_mask64 = ebx;
+			    &cntr, &fixed_cntr, &ecx, &edx);
+		pmu->cntr_mask64 = cntr;
+		pmu->fixed_cntr_mask64 = fixed_cntr;
 	}
 
 	if (!intel_pmu_broken_perf_cap()) {
@@ -4901,11 +4903,6 @@ static void intel_pmu_check_hybrid_pmus(struct x86_hybrid_pmu *pmu)
 	else
 		pmu->intel_ctrl &= ~(1ULL << GLOBAL_CTRL_EN_PERF_METRICS);
 
-	if (pmu->intel_cap.pebs_output_pt_available)
-		pmu->pmu.capabilities |= PERF_PMU_CAP_AUX_OUTPUT;
-	else
-		pmu->pmu.capabilities &= ~PERF_PMU_CAP_AUX_OUTPUT;
-
 	intel_pmu_check_event_constraints(pmu->event_constraints,
 					  pmu->cntr_mask64,
 					  pmu->fixed_cntr_mask64,
@@ -4974,9 +4971,6 @@ static bool init_hybrid_pmu(int cpu)
 
 	pr_info("%s PMU driver: ", pmu->name);
 
-	if (pmu->intel_cap.pebs_output_pt_available)
-		pr_cont("PEBS-via-PT ");
-
 	pr_cont("\n");
 
 	x86_pmu_show_pmu_cap(&pmu->pmu);
@@ -4999,8 +4993,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;
@@ -6284,11 +6281,9 @@ static __always_inline int intel_pmu_init_hybrid(enum hybrid_pmu_type pmus)
 		pmu->intel_cap.capabilities = x86_pmu.intel_cap.capabilities;
 		if (pmu->pmu_type & hybrid_small) {
 			pmu->intel_cap.perf_metrics = 0;
-			pmu->intel_cap.pebs_output_pt_available = 1;
 			pmu->mid_ack = true;
 		} else if (pmu->pmu_type & hybrid_big) {
 			pmu->intel_cap.perf_metrics = 1;
-			pmu->intel_cap.pebs_output_pt_available = 0;
 			pmu->late_ack = true;
 		}
 	}
arch/x86/events/intel/ds.c +9 -1
index 19a9fd974e3e..b6303b022453 100644
@@ -2523,7 +2523,15 @@ void __init intel_ds_init(void)
 			}
 			pr_cont("PEBS fmt4%c%s, ", pebs_type, pebs_qual);
 
-			if (!is_hybrid() && x86_pmu.intel_cap.pebs_output_pt_available) {
+			/*
+			 * The PEBS-via-PT is not supported on hybrid platforms,
+			 * because not all CPUs of a hybrid machine support it.
+			 * The global x86_pmu.intel_cap, which only contains the
+			 * common capabilities, is used to check the availability
+			 * of the feature. The per-PMU pebs_output_pt_available
+			 * in a hybrid machine should be ignored.
+			 */
+			if (x86_pmu.intel_cap.pebs_output_pt_available) {
 				pr_cont("PEBS-via-PT, ");
 				x86_get_pmu(smp_processor_id())->capabilities |= PERF_PMU_CAP_AUX_OUTPUT;
 			}
arch/x86/include/asm/kvm-x86-ops.h +1 -0
index 861d080ed4c6..cfb22f8c451a 100644
@@ -47,6 +47,7 @@ KVM_X86_OP(set_idt)
 KVM_X86_OP(get_gdt)
 KVM_X86_OP(set_gdt)
 KVM_X86_OP(sync_dirty_debug_regs)
+KVM_X86_OP(set_dr6)
 KVM_X86_OP(set_dr7)
 KVM_X86_OP(cache_reg)
 KVM_X86_OP(get_rflags)
arch/x86/include/asm/kvm_host.h +1 -0
index 5da67e5c0040..8499b9cb9c82 100644
@@ -1674,6 +1674,7 @@ struct kvm_x86_ops {
 	void (*get_gdt)(struct kvm_vcpu *vcpu, struct desc_ptr *dt);
 	void (*set_gdt)(struct kvm_vcpu *vcpu, struct desc_ptr *dt);
 	void (*sync_dirty_debug_regs)(struct kvm_vcpu *vcpu);
+	void (*set_dr6)(struct kvm_vcpu *vcpu, unsigned long value);
 	void (*set_dr7)(struct kvm_vcpu *vcpu, unsigned long value);
 	void (*cache_reg)(struct kvm_vcpu *vcpu, enum kvm_reg reg);
 	unsigned long (*get_rflags)(struct kvm_vcpu *vcpu);
arch/x86/include/asm/mmu.h +2 -0
index ce4677b8b735..3b496cdcb74b 100644
@@ -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
index 2886cb668d7f..795fdd53bd0a 100644
@@ -151,6 +151,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
index 3ae84c3b8e6d..61e991507353 100644
@@ -395,7 +395,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/perf_event.h +25 -3
index 91b73571412f..7505bb5d260a 100644
@@ -187,11 +187,33 @@ union cpuid10_edx {
  * detection/enumeration details:
  */
 #define ARCH_PERFMON_EXT_LEAF			0x00000023
-#define ARCH_PERFMON_EXT_UMASK2			0x1
-#define ARCH_PERFMON_EXT_EQ			0x2
-#define ARCH_PERFMON_NUM_COUNTER_LEAF_BIT	0x1
 #define ARCH_PERFMON_NUM_COUNTER_LEAF		0x1
 
+union cpuid35_eax {
+	struct {
+		unsigned int	leaf0:1;
+		/* Counters Sub-Leaf */
+		unsigned int    cntr_subleaf:1;
+		/* Auto Counter Reload Sub-Leaf */
+		unsigned int    acr_subleaf:1;
+		/* Events Sub-Leaf */
+		unsigned int    events_subleaf:1;
+		unsigned int	reserved:28;
+	} split;
+	unsigned int            full;
+};
+
+union cpuid35_ebx {
+	struct {
+		/* UnitMask2 Supported */
+		unsigned int    umask2:1;
+		/* EQ-bit Supported */
+		unsigned int    eq:1;
+		unsigned int	reserved:30;
+	} split;
+	unsigned int            full;
+};
+
 /*
  * Intel Architectural LBR CPUID detection/enumeration details:
  */
arch/x86/include/asm/tlbflush.h +1 -0
index 69e79fff41b8..02fc2aa06e9e 100644
@@ -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/cpu/bugs.c +14 -7
index 47a01d4028f6..5fba44a4f988 100644
@@ -1115,6 +1115,8 @@ static void __init retbleed_select_mitigation(void)
 
 	case RETBLEED_MITIGATION_IBPB:
 		setup_force_cpu_cap(X86_FEATURE_ENTRY_IBPB);
+		setup_force_cpu_cap(X86_FEATURE_IBPB_ON_VMEXIT);
+		mitigate_smt = true;
 
 		/*
 		 * IBPB on entry already obviates the need for
@@ -1124,9 +1126,6 @@ static void __init retbleed_select_mitigation(void)
 		setup_clear_cpu_cap(X86_FEATURE_UNRET);
 		setup_clear_cpu_cap(X86_FEATURE_RETHUNK);
 
-		setup_force_cpu_cap(X86_FEATURE_IBPB_ON_VMEXIT);
-		mitigate_smt = true;
-
 		/*
 		 * There is no need for RSB filling: entry_ibpb() ensures
 		 * all predictions, including the RSB, are invalidated,
@@ -2643,6 +2642,7 @@ static void __init srso_select_mitigation(void)
 		if (IS_ENABLED(CONFIG_MITIGATION_IBPB_ENTRY)) {
 			if (has_microcode) {
 				setup_force_cpu_cap(X86_FEATURE_ENTRY_IBPB);
+				setup_force_cpu_cap(X86_FEATURE_IBPB_ON_VMEXIT);
 				srso_mitigation = SRSO_MITIGATION_IBPB;
 
 				/*
@@ -2652,6 +2652,13 @@ static void __init srso_select_mitigation(void)
 				 */
 				setup_clear_cpu_cap(X86_FEATURE_UNRET);
 				setup_clear_cpu_cap(X86_FEATURE_RETHUNK);
+
+				/*
+				 * There is no need for RSB filling: entry_ibpb() ensures
+				 * all predictions, including the RSB, are invalidated,
+				 * regardless of IBPB implementation.
+				 */
+				setup_clear_cpu_cap(X86_FEATURE_RSB_VMEXIT);
 			}
 		} else {
 			pr_err("WARNING: kernel not compiled with MITIGATION_IBPB_ENTRY.\n");
@@ -2659,8 +2666,8 @@ static void __init srso_select_mitigation(void)
 		break;
 
 	case SRSO_CMD_IBPB_ON_VMEXIT:
-		if (IS_ENABLED(CONFIG_MITIGATION_SRSO)) {
-			if (!boot_cpu_has(X86_FEATURE_ENTRY_IBPB) && has_microcode) {
+		if (IS_ENABLED(CONFIG_MITIGATION_IBPB_ENTRY)) {
+			if (has_microcode) {
 				setup_force_cpu_cap(X86_FEATURE_IBPB_ON_VMEXIT);
 				srso_mitigation = SRSO_MITIGATION_IBPB_ON_VMEXIT;
 
@@ -2672,8 +2679,8 @@ static void __init srso_select_mitigation(void)
 				setup_clear_cpu_cap(X86_FEATURE_RSB_VMEXIT);
 			}
 		} else {
-			pr_err("WARNING: kernel not compiled with MITIGATION_SRSO.\n");
-                }
+			pr_err("WARNING: kernel not compiled with MITIGATION_IBPB_ENTRY.\n");
+		}
 		break;
 	default:
 		break;
arch/x86/kernel/static_call.c +0 -1
index 9eed0c144dad..9e51242ed125 100644
@@ -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
index 4f0a94346d00..44c88537448c 100644
@@ -2226,6 +2226,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,
@@ -2852,7 +2855,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
index 9dd3796d075a..19c96278ba75 100644
@@ -5591,7 +5591,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
index cf84103ce38b..2dcb9c870d5a 100644
@@ -646,6 +646,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.
@@ -762,11 +767,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/kvm/svm/svm.c +6 -7
index 4543dd6bcab2..a7cb7c82b38e 100644
@@ -1993,11 +1993,11 @@ static void new_asid(struct vcpu_svm *svm, struct svm_cpu_data *sd)
 	svm->asid = sd->next_asid++;
 }
 
-static void svm_set_dr6(struct vcpu_svm *svm, unsigned long value)
+static void svm_set_dr6(struct kvm_vcpu *vcpu, unsigned long value)
 {
-	struct vmcb *vmcb = svm->vmcb;
+	struct vmcb *vmcb = to_svm(vcpu)->vmcb;
 
-	if (svm->vcpu.arch.guest_state_protected)
+	if (vcpu->arch.guest_state_protected)
 		return;
 
 	if (unlikely(value != vmcb->save.dr6)) {
@@ -4234,10 +4234,8 @@ static __no_kcsan fastpath_t svm_vcpu_run(struct kvm_vcpu *vcpu,
 	 * Run with all-zero DR6 unless needed, so that we can get the exact cause
 	 * of a #DB.
 	 */
-	if (unlikely(vcpu->arch.switch_db_regs & KVM_DEBUGREG_WONT_EXIT))
-		svm_set_dr6(svm, vcpu->arch.dr6);
-	else
-		svm_set_dr6(svm, DR6_ACTIVE_LOW);
+	if (likely(!(vcpu->arch.switch_db_regs & KVM_DEBUGREG_WONT_EXIT)))
+		svm_set_dr6(vcpu, DR6_ACTIVE_LOW);
 
 	clgi();
 	kvm_load_guest_xsave_state(vcpu);
@@ -5033,6 +5031,7 @@ static struct kvm_x86_ops svm_x86_ops __initdata = {
 	.set_idt = svm_set_idt,
 	.get_gdt = svm_get_gdt,
 	.set_gdt = svm_set_gdt,
+	.set_dr6 = svm_set_dr6,
 	.set_dr7 = svm_set_dr7,
 	.sync_dirty_debug_regs = svm_sync_dirty_debug_regs,
 	.cache_reg = svm_cache_reg,
arch/x86/kvm/vmx/main.c +1 -0
index 7668e2fb8043..47476fcc179a 100644
@@ -60,6 +60,7 @@ struct kvm_x86_ops vt_x86_ops __initdata = {
 	.set_idt = vmx_set_idt,
 	.get_gdt = vmx_get_gdt,
 	.set_gdt = vmx_set_gdt,
+	.set_dr6 = vmx_set_dr6,
 	.set_dr7 = vmx_set_dr7,
 	.sync_dirty_debug_regs = vmx_sync_dirty_debug_regs,
 	.cache_reg = vmx_cache_reg,
arch/x86/kvm/vmx/vmx.c +6 -4
index 968ddf714054..f06d443ec3c6 100644
@@ -5631,6 +5631,12 @@ void vmx_sync_dirty_debug_regs(struct kvm_vcpu *vcpu)
 	set_debugreg(DR6_RESERVED, 6);
 }
 
+void vmx_set_dr6(struct kvm_vcpu *vcpu, unsigned long val)
+{
+	lockdep_assert_irqs_disabled();
+	set_debugreg(vcpu->arch.dr6, 6);
+}
+
 void vmx_set_dr7(struct kvm_vcpu *vcpu, unsigned long val)
 {
 	vmcs_writel(GUEST_DR7, val);
@@ -7392,10 +7398,6 @@ fastpath_t vmx_vcpu_run(struct kvm_vcpu *vcpu, bool force_immediate_exit)
 		vmx->loaded_vmcs->host_state.cr4 = cr4;
 	}
 
-	/* When KVM_DEBUGREG_WONT_EXIT, dr6 is accessible in guest. */
-	if (unlikely(vcpu->arch.switch_db_regs & KVM_DEBUGREG_WONT_EXIT))
-		set_debugreg(vcpu->arch.dr6, 6);
-
 	/* When single-stepping over STI and MOV SS, we must clear the
 	 * corresponding interruptibility bits in the guest state. Otherwise
 	 * vmentry fails as it then expects bit 14 (BS) in pending debug
arch/x86/kvm/vmx/x86_ops.h +1 -0
index 48dc76bf0ec0..4aba200f435d 100644
@@ -74,6 +74,7 @@ void vmx_get_idt(struct kvm_vcpu *vcpu, struct desc_ptr *dt);
 void vmx_set_idt(struct kvm_vcpu *vcpu, struct desc_ptr *dt);
 void vmx_get_gdt(struct kvm_vcpu *vcpu, struct desc_ptr *dt);
 void vmx_set_gdt(struct kvm_vcpu *vcpu, struct desc_ptr *dt);
+void vmx_set_dr6(struct kvm_vcpu *vcpu, unsigned long val);
 void vmx_set_dr7(struct kvm_vcpu *vcpu, unsigned long val);
 void vmx_sync_dirty_debug_regs(struct kvm_vcpu *vcpu);
 void vmx_cache_reg(struct kvm_vcpu *vcpu, enum kvm_reg reg);
arch/x86/kvm/x86.c +3 -0
index d760b19d1e51..0846e3af5f6c 100644
@@ -10968,6 +10968,9 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
 		set_debugreg(vcpu->arch.eff_db[1], 1);
 		set_debugreg(vcpu->arch.eff_db[2], 2);
 		set_debugreg(vcpu->arch.eff_db[3], 3);
+		/* When KVM_DEBUGREG_WONT_EXIT, dr6 is accessible in guest. */
+		if (unlikely(vcpu->arch.switch_db_regs & KVM_DEBUGREG_WONT_EXIT))
+			kvm_x86_call(set_dr6)(vcpu, vcpu->arch.dr6);
 	} else if (unlikely(hw_breakpoint_active())) {
 		set_debugreg(0, 7);
 	}
arch/x86/mm/tlb.c +32 -3
index b0678d59ebdb..00ffa74d0dd0 100644
@@ -893,9 +893,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);
@@ -929,7 +956,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);
 }
 
@@ -980,6 +1007,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;
 }
@@ -1022,6 +1050,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
index c80183156d68..b02530d98629 100644
@@ -53,13 +53,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, &sect);
 	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);
@@ -112,8 +124,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
index cb45ef5240da..068c1612660b 100644
@@ -407,6 +407,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
index 6981e5f974e9..ff7d0b14a646 100644
@@ -909,6 +909,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) {
@@ -984,6 +985,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/bluetooth/btintel_pcie.c +4 -1
index 8bd663f4bac1..53f6b4f76bcc 100644
@@ -1312,6 +1312,10 @@ static int btintel_pcie_send_frame(struct hci_dev *hdev,
 			if (opcode == 0xfc01)
 				btintel_pcie_inject_cmd_complete(hdev, opcode);
 		}
+		/* Firmware raises alive interrupt on HCI_OP_RESET */
+		if (opcode == HCI_OP_RESET)
+			data->gp0_received = false;
+
 		hdev->stat.cmd_tx++;
 		break;
 	case HCI_ACLDATA_PKT:
@@ -1349,7 +1353,6 @@ static int btintel_pcie_send_frame(struct hci_dev *hdev,
 			   opcode, btintel_pcie_alivectxt_state2str(old_ctxt),
 			   btintel_pcie_alivectxt_state2str(data->alive_intr_ctxt));
 		if (opcode == HCI_OP_RESET) {
-			data->gp0_received = false;
 			ret = wait_event_timeout(data->gp0_wait_q,
 						 data->gp0_received,
 						 msecs_to_jiffies(BTINTEL_DEFAULT_INTR_TIMEOUT_MS));
drivers/cpufreq/amd-pstate.c +31 -71

205 lines not on this page · raw message

drivers/firmware/efi/efi.c +4 -2
index 70490bf2697b..acabc856fe8a 100644
@@ -922,13 +922,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
index c41e7b2091cd..8ad3efb9b1ff 100644
@@ -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
index d694bcfa1074..bf676dd127a1 100644
@@ -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/firmware/qcom/qcom_scm-smc.c +3 -0
index 2b4c2826f572..3f10b23ec941 100644
@@ -173,6 +173,9 @@ int __scm_smc_call(struct device *dev, const struct qcom_scm_desc *desc,
 		smc.args[i + SCM_SMC_FIRST_REG_IDX] = desc->args[i];
 
 	if (unlikely(arglen > SCM_SMC_N_REG_ARGS)) {
+		if (!mempool)
+			return -EINVAL;
+
 		args_virt = qcom_tzmem_alloc(mempool,
 					     SCM_SMC_N_EXT_ARGS * sizeof(u64),
 					     flag);
drivers/gpio/gpio-bcm-kona.c +58 -13

126 lines not on this page · raw message

drivers/gpio/gpio-stmpe.c +12 -3
index 75a3633ceddb..222279a9d82b 100644
@@ -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
index 78ecd56123a3..148b4d1788a2 100644
@@ -1691,6 +1691,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
index 44372f8647d5..1e8f0bdb6ae3 100644
@@ -905,13 +905,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
index 0b28b2cf1517..d70855d7c61c 100644
@@ -3713,9 +3713,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/amdkfd/kfd_process_queue_manager.c +1 -1
index dbb63ce316f1..42fd7669ac7d 100644
@@ -298,7 +298,7 @@ static int init_user_queue(struct process_queue_manager *pqm,
 	return 0;
 
 free_gang_ctx_bo:
-	amdgpu_amdkfd_free_gtt_mem(dev->adev, (*q)->gang_ctx_bo);
+	amdgpu_amdkfd_free_gtt_mem(dev->adev, &(*q)->gang_ctx_bo);
 cleanup:
 	uninit_queue(*q);
 	*q = NULL;
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +2 -1
index 0c0b9aa44dfa..99d2d3092ea5 100644
@@ -607,7 +607,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/display/drm_dp_helper.c +1 -1
index 6ee51003de3c..9fa13da513d2 100644
@@ -2421,7 +2421,7 @@ u8 drm_dp_dsc_sink_bpp_incr(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE])
 {
 	u8 bpp_increment_dpcd = dsc_dpcd[DP_DSC_BITS_PER_PIXEL_INC - DP_DSC_SUPPORT];
 
-	switch (bpp_increment_dpcd) {
+	switch (bpp_increment_dpcd & DP_DSC_BITS_PER_PIXEL_MASK) {
 	case DP_DSC_BITS_PER_PIXEL_1_16:
 		return 16;
 	case DP_DSC_BITS_PER_PIXEL_1_8:
drivers/gpu/drm/i915/selftests/i915_gem_gtt.c +2 -2
index 5c397a2df70e..5d27e1c733c5 100644
@@ -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/msm/disp/dpu1/catalog/dpu_9_2_x1e80100.h +2 -2
index e084406ebb07..4f110be6b750 100644
@@ -391,8 +391,8 @@ static const struct dpu_intf_cfg x1e80100_intf[] = {
 		.type = INTF_DP,
 		.controller_id = MSM_DP_CONTROLLER_2,
 		.prog_fetch_lines_worst_case = 24,
-		.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 17),
-		.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 16),
+		.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 16),
+		.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 17),
 	}, {
 		.name = "intf_7", .id = INTF_7,
 		.base = 0x3b000, .len = 0x280,
drivers/gpu/drm/msm/disp/dpu1/dpu_writeback.c +0 -3
index 16f144cbc0c9..8ff496082902 100644
@@ -42,9 +42,6 @@ static int dpu_wb_conn_atomic_check(struct drm_connector *connector,
 	if (!conn_state || !conn_state->connector) {
 		DPU_ERROR("invalid connector state\n");
 		return -EINVAL;
-	} else if (conn_state->connector->status != connector_status_connected) {
-		DPU_ERROR("connector not connected %d\n", conn_state->connector->status);
-		return -EINVAL;
 	}
 
 	crtc = conn_state->crtc;
drivers/gpu/drm/msm/msm_gem_submit.c +1 -2
index fba78193127d..f775638d239a 100644
@@ -787,8 +787,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
 			goto out;
 
 		if (!submit->cmd[i].size ||
-			((submit->cmd[i].size + submit->cmd[i].offset) >
-				obj->size / 4)) {
+		    (size_add(submit->cmd[i].size, submit->cmd[i].offset) > obj->size / 4)) {
 			SUBMIT_ERROR(submit, "invalid cmdstream size: %u\n", submit->cmd[i].size * 4);
 			ret = -EINVAL;
 			goto out;
drivers/gpu/drm/renesas/rcar-du/rcar_mipi_dsi.c +1 -1
index 2dba7c5ffd2c..92f4261305bd 100644
@@ -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
index f8114d11f2d1..a6b276f1d6ee 100644
@@ -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/renesas/rz-du/rzg2l_du_kms.c +3 -3
index b99217b4e05d..90c6269ccd29 100644
@@ -311,11 +311,11 @@ int rzg2l_du_modeset_init(struct rzg2l_du_device *rcdu)
 	dev->mode_config.helper_private = &rzg2l_du_mode_config_helper;
 
 	/*
-	 * The RZ DU uses the VSP1 for memory access, and is limited
-	 * to frame sizes of 1920x1080.
+	 * The RZ DU was designed to support a frame size of 1920x1200 (landscape)
+	 * or 1200x1920 (portrait).
 	 */
 	dev->mode_config.max_width = 1920;
-	dev->mode_config.max_height = 1080;
+	dev->mode_config.max_height = 1920;
 
 	rcdu->num_crtcs = hweight8(rcdu->info->channels_mask);
 
drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c +7 -0
index 4ba869e0e794..cbd9584af329 100644
@@ -70,10 +70,17 @@ static int light_up_connector(struct kunit *test,
 	state = drm_kunit_helper_atomic_state_alloc(test, drm, ctx);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
 
+retry:
 	conn_state = drm_atomic_get_connector_state(state, connector);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
 
 	ret = drm_atomic_set_crtc_for_connector(conn_state, crtc);
+	if (ret == -EDEADLK) {
+		drm_atomic_state_clear(state);
+		ret = drm_modeset_backoff(ctx);
+		if (!ret)
+			goto retry;
+	}
 	KUNIT_EXPECT_EQ(test, ret, 0);
 
 	crtc_state = drm_atomic_get_crtc_state(state, crtc);
drivers/gpu/drm/tidss/tidss_dispc.c +16 -10
index 1ad711f8d2a8..45f22ead3e61 100644
@@ -700,7 +700,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);
@@ -708,6 +708,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);
 }
@@ -780,24 +783,20 @@ static
 void 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);
@@ -843,7 +842,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) {
@@ -868,6 +867,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);
 }
@@ -2767,8 +2769,12 @@ static void dispc_init_errata(struct dispc_device *dispc)
  */
 static void dispc_softreset_k2g(struct dispc_device *dispc)
 {
+	unsigned long flags;
+
+	spin_lock_irqsave(&dispc->tidss->wait_lock, flags);
 	dispc_set_irqenable(dispc, 0);
 	dispc_read_and_clear_irqstatus(dispc);
+	spin_unlock_irqrestore(&dispc->tidss->wait_lock, flags);
 
 	for (unsigned int vp_idx = 0; vp_idx < dispc->feat->num_vps; ++vp_idx)
 		VP_REG_FLD_MOD(dispc, vp_idx, DISPC_VP_CONTROL, 0, 0, 0);
drivers/gpu/drm/tidss/tidss_irq.c +2 -0
index 604334ef526a..d053dbb9d28c 100644
@@ -60,7 +60,9 @@ static irqreturn_t tidss_irq_handler(int irq, void *arg)
 	unsigned int id;
 	dispc_irq_t irqstatus;
 
+	spin_lock(&tidss->wait_lock);
 	irqstatus = dispc_read_and_clear_irqstatus(tidss->dispc);
+	spin_unlock(&tidss->wait_lock);
 
 	for (id = 0; id < tidss->num_crtcs; id++) {
 		struct drm_crtc *crtc = tidss->crtcs[id];
drivers/gpu/drm/v3d/v3d_perfmon.c +5 -0
index e3013ac3a5c2..1abfd738a601 100644
@@ -384,6 +384,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);
@@ -393,6 +394,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/gpu/drm/xe/xe_drm_client.c +1 -1
index fb52a23e28f8..a89fbfbdab32 100644
@@ -135,8 +135,8 @@ void xe_drm_client_add_bo(struct xe_drm_client *client,
 	XE_WARN_ON(bo->client);
 	XE_WARN_ON(!list_empty(&bo->client_link));
 
-	spin_lock(&client->bos_lock);
 	bo->client = xe_drm_client_get(client);
+	spin_lock(&client->bos_lock);
 	list_add_tail(&bo->client_link, &client->bos_list);
 	spin_unlock(&client->bos_lock);
 }
drivers/gpu/drm/xe/xe_trace_bo.h +6 -6
index 9b1a1d4304ae..ba0f61e7d2d6 100644
@@ -55,8 +55,8 @@ TRACE_EVENT(xe_bo_move,
 	    TP_STRUCT__entry(
 		     __field(struct xe_bo *, bo)
 		     __field(size_t, size)
-		     __field(u32, new_placement)
-		     __field(u32, old_placement)
+		     __string(new_placement_name, xe_mem_type_to_name[new_placement])
+		     __string(old_placement_name, xe_mem_type_to_name[old_placement])
 		     __string(device_id, __dev_name_bo(bo))
 		     __field(bool, move_lacks_source)
 			),
@@ -64,15 +64,15 @@ TRACE_EVENT(xe_bo_move,
 	    TP_fast_assign(
 		   __entry->bo      = bo;
 		   __entry->size = bo->size;
-		   __entry->new_placement = new_placement;
-		   __entry->old_placement = old_placement;
+		   __assign_str(new_placement_name);
+		   __assign_str(old_placement_name);
 		   __assign_str(device_id);
 		   __entry->move_lacks_source = move_lacks_source;
 		   ),
 	    TP_printk("move_lacks_source:%s, migrate object %p [size %zu] from %s to %s device_id:%s",
 		      __entry->move_lacks_source ? "yes" : "no", __entry->bo, __entry->size,
-		      xe_mem_type_to_name[__entry->old_placement],
-		      xe_mem_type_to_name[__entry->new_placement], __get_str(device_id))
+		      __get_str(old_placement_name),
+		      __get_str(new_placement_name), __get_str(device_id))
 );
 
 DECLARE_EVENT_CLASS(xe_vma,
drivers/gpu/host1x/dev.c +2 -0
index e98528777faa..710674ef40a9 100644
@@ -625,6 +625,8 @@ static int host1x_probe(struct platform_device *pdev)
 		goto free_contexts;
 	}
 
+	mutex_init(&host->intr_mutex);
+
 	pm_runtime_enable(&pdev->dev);
 
 	err = devm_tegra_core_dev_init_opp_table_common(&pdev->dev);
drivers/gpu/host1x/intr.c +0 -2
index b3285dd10180..f77a678949e9 100644
@@ -104,8 +104,6 @@ int host1x_intr_init(struct host1x *host)
 	unsigned int id;
 	int i, err;
 
-	mutex_init(&host->intr_mutex);
-
 	for (id = 0; id < host1x_syncpt_nb_pts(host); ++id) {
 		struct host1x_syncpt *syncpt = &host->syncpt[id];
 
drivers/hid/hid-multitouch.c +4 -1
index 369414c92fcc..93b5c648ef82 100644
@@ -1673,9 +1673,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 +33 -8

89 lines not on this page · raw message

drivers/hid/hid-thrustmaster.c +1 -1
index 6c3e758bbb09..3b81468a1df2 100644
@@ -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/hid/hid-winwing.c +2 -0
index 831b760c66ea..d4afbbd27807 100644
@@ -106,6 +106,8 @@ static int winwing_init_led(struct hid_device *hdev,
 						"%s::%s",
 						dev_name(&input->dev),
 						info->led_name);
+		if (!led->cdev.name)
+			return -ENOMEM;
 
 		ret = devm_led_classdev_register(&hdev->dev, &led->cdev);
 		if (ret)
drivers/i3c/master/Kconfig +11 -0
index 90dee3ec5520..77da199c7413 100644
@@ -57,3 +57,14 @@ config MIPI_I3C_HCI
 
 	  This driver can also be built as a module.  If so, the module will be
 	  called mipi-i3c-hci.
+
+config MIPI_I3C_HCI_PCI
+	tristate "MIPI I3C Host Controller Interface PCI support"
+	depends on MIPI_I3C_HCI
+	depends on PCI
+	help
+	  Support for MIPI I3C Host Controller Interface compatible hardware
+	  on the PCI bus.
+
+	  This driver can also be built as a module. If so, the module will be
+	  called mipi-i3c-hci-pci.
drivers/i3c/master/mipi-i3c-hci/Makefile +1 -0
index 1f8cd5c48fde..e3d3ef757035 100644
@@ -5,3 +5,4 @@ mipi-i3c-hci-y				:= core.o ext_caps.o pio.o dma.o \
 					   cmd_v1.o cmd_v2.o \
 					   dat_v1.o dct_v1.o \
 					   hci_quirks.o
+obj-$(CONFIG_MIPI_I3C_HCI_PCI)		+= mipi-i3c-hci-pci.o
drivers/i3c/master/mipi-i3c-hci/dma.c +17 -0
index 13adc5840094..fe955703e59b 100644
@@ -762,9 +762,26 @@ static bool hci_dma_irq_handler(struct i3c_hci *hci, unsigned int mask)
 			complete(&rh->op_done);
 
 		if (status & INTR_TRANSFER_ABORT) {
+			u32 ring_status;
+
 			dev_notice_ratelimited(&hci->master.dev,
 				"ring %d: Transfer Aborted\n", i);
 			mipi_i3c_hci_resume(hci);
+			ring_status = rh_reg_read(RING_STATUS);
+			if (!(ring_status & RING_STATUS_RUNNING) &&
+			    status & INTR_TRANSFER_COMPLETION &&
+			    status & INTR_TRANSFER_ERR) {
+				/*
+				 * Ring stop followed by run is an Intel
+				 * specific required quirk after resuming the
+				 * halted controller. Do it only when the ring
+				 * is not in running state after a transfer
+				 * error.
+				 */
+				rh_reg_write(RING_CONTROL, RING_CTRL_ENABLE);
+				rh_reg_write(RING_CONTROL, RING_CTRL_ENABLE |
+							   RING_CTRL_RUN_STOP);
+			}
 		}
 		if (status & INTR_WARN_INS_STOP_MODE)
 			dev_warn_ratelimited(&hci->master.dev,
drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c new file +148 -0

148 lines not on this page · raw message

drivers/infiniband/hw/efa/efa_main.c +5 -4
index ad225823e6f2..45a4564c670c 100644
@@ -470,7 +470,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);
 }
 
@@ -643,12 +642,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);
@@ -676,7 +677,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;
 }
 
@@ -685,7 +686,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 void efa_shutdown(struct pci_dev *pdev)
drivers/iommu/amd/amd_iommu_types.h +1 -0
index 601fb4ee6900..6fb2f2919ab1 100644
@@ -175,6 +175,7 @@
 #define CONTROL_GAM_EN		25
 #define CONTROL_GALOG_EN	28
 #define CONTROL_GAINT_EN	29
+#define CONTROL_EPH_EN		45
 #define CONTROL_XT_EN		50
 #define CONTROL_INTCAPXT_EN	51
 #define CONTROL_IRTCACHEDIS	59
drivers/iommu/amd/init.c +4 -0
index 43131c3a2172..dbe2d13972fe 100644
@@ -2647,6 +2647,10 @@ static void iommu_init_flags(struct amd_iommu *iommu)
 
 	/* Set IOTLB invalidation timeout to 1s */
 	iommu_set_inv_tlb_timeout(iommu, CTRL_INV_TO_1S);
+
+	/* Enable Enhanced Peripheral Page Request Handling */
+	if (check_feature(FEATURE_EPHSUP))
+		iommu_feature_enable(iommu, CONTROL_EPH_EN);
 }
 
 static void iommu_apply_resume_quirks(struct amd_iommu *iommu)
drivers/iommu/io-pgfault.c +1 -0
index 4674e618797c..8b5926c1452e 100644
@@ -478,6 +478,7 @@ void iopf_queue_remove_device(struct iopf_queue *queue, struct device *dev)
 
 		ops->page_response(dev, iopf, &resp);
 		list_del_init(&group->pending_node);
+		iopf_free_group(group);
 	}
 	mutex_unlock(&fault_param->lock);
 
drivers/media/dvb-frontends/cxd2841er.c +2 -6
index d925ca24183b..415f1f91cc30 100644
@@ -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;
-
-	tmp = (u64) ifhz * 16777216;
-	do_div(tmp, ((xtal == SONY_XTAL_24000) ? 48000000 : 41000000));
-
-	return (u32) tmp;
+	return div_u64(ifhz * 16777216ull,
+		       (xtal == SONY_XTAL_24000) ? 48000000 : 41000000);
 }
 
 static u32 cxd2841er_calc_iffreq(u32 ifhz)
drivers/media/i2c/ds90ub913.c +21 -4
index b5375d736629..7670d6c82d92 100644
@@ -8,6 +8,7 @@
  * Copyright (c) 2023 Tomi Valkeinen <[email protected]>
  */
 
+#include <linux/bitfield.h>
 #include <linux/clk-provider.h>
 #include <linux/clk.h>
 #include <linux/delay.h>
@@ -146,6 +147,19 @@ static int ub913_write(const struct ub913_data *priv, u8 reg, u8 val)
 	return ret;
 }
 
+static int ub913_update_bits(const struct ub913_data *priv, u8 reg, u8 mask,
+			     u8 val)
+{
+	int ret;
+
+	ret = regmap_update_bits(priv->regmap, reg, mask, val);
+	if (ret < 0)
+		dev_err(&priv->client->dev,
+			"Cannot update register 0x%02x %d!\n", reg, ret);
+
+	return ret;
+}
+
 /*
  * GPIO chip
  */
@@ -733,10 +747,13 @@ static int ub913_hw_init(struct ub913_data *priv)
 	if (ret)
 		return dev_err_probe(dev, ret, "i2c master init failed\n");
 
-	ub913_read(priv, UB913_REG_GENERAL_CFG, &v);
-	v &= ~UB913_REG_GENERAL_CFG_PCLK_RISING;
-	v |= priv->pclk_polarity_rising ? UB913_REG_GENERAL_CFG_PCLK_RISING : 0;
-	ub913_write(priv, UB913_REG_GENERAL_CFG, v);
+	ret = ub913_update_bits(priv, UB913_REG_GENERAL_CFG,
+				UB913_REG_GENERAL_CFG_PCLK_RISING,
+				FIELD_PREP(UB913_REG_GENERAL_CFG_PCLK_RISING,
+					   priv->pclk_polarity_rising));
+
+	if (ret)
+		return ret;
 
 	return 0;
 }
drivers/media/i2c/ds90ub953.c +32 -14

84 lines not on this page · raw message

drivers/media/platform/broadcom/bcm2835-unicam.c +1 -7
index a1d93c14553d..9f81e1582a30 100644
@@ -816,11 +816,6 @@ static irqreturn_t unicam_isr(int irq, void *dev)
 		}
 	}
 
-	if (unicam_reg_read(unicam, UNICAM_ICTL) & UNICAM_FCM) {
-		/* Switch out of trigger mode if selected */
-		unicam_reg_write_field(unicam, UNICAM_ICTL, 1, UNICAM_TFC);
-		unicam_reg_write_field(unicam, UNICAM_ICTL, 0, UNICAM_FCM);
-	}
 	return IRQ_HANDLED;
 }
 
@@ -984,8 +979,7 @@ static void unicam_start_rx(struct unicam_device *unicam,
 
 	unicam_reg_write_field(unicam, UNICAM_ANA, 0, UNICAM_DDL);
 
-	/* Always start in trigger frame capture mode (UNICAM_FCM set) */
-	val = UNICAM_FSIE | UNICAM_FEIE | UNICAM_FCM | UNICAM_IBOB;
+	val = UNICAM_FSIE | UNICAM_FEIE | UNICAM_IBOB;
 	line_int_freq = max(fmt->height >> 2, 128);
 	unicam_set_field(&val, line_int_freq, UNICAM_LCIE_MASK);
 	unicam_reg_write(unicam, UNICAM_ICTL, val);
drivers/media/test-drivers/vidtv/vidtv_bridge.c +7 -1
index 613949df897d..6d964e392d31 100644
@@ -191,10 +191,11 @@ static int vidtv_start_streaming(struct vidtv_dvb *dvb)
 
 	mux_args.mux_buf_sz  = mux_buf_sz;
 
-	dvb->streaming = true;
 	dvb->mux = vidtv_mux_init(dvb->fe[0], dev, &mux_args);
 	if (!dvb->mux)
 		return -ENOMEM;
+
+	dvb->streaming = true;
 	vidtv_mux_start_thread(dvb->mux);
 
 	dev_dbg_ratelimited(dev, "Started streaming\n");
@@ -205,6 +206,11 @@ static int vidtv_stop_streaming(struct vidtv_dvb *dvb)
 {
 	struct device *dev = &dvb->pdev->dev;
 
+	if (!dvb->streaming) {
+		dev_warn_ratelimited(dev, "No streaming. Skipping.\n");
+		return 0;
+	}
+
 	dvb->streaming = false;
 	vidtv_mux_stop_thread(dvb->mux);
 	vidtv_mux_destroy(dvb->mux);
drivers/media/usb/uvc/uvc_driver.c +18 -0
index d832aa55056f..4d8e00b425f4 100644
@@ -2809,6 +2809,15 @@ static const struct usb_device_id uvc_ids[] = {
 	  .bInterfaceSubClass	= 1,
 	  .bInterfaceProtocol	= 0,
 	  .driver_info		= (kernel_ulong_t)&uvc_quirk_probe_minmax },
+	/* Sonix Technology Co. Ltd. - 292A IPC AR0330 */
+	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
+				| USB_DEVICE_ID_MATCH_INT_INFO,
+	  .idVendor		= 0x0c45,
+	  .idProduct		= 0x6366,
+	  .bInterfaceClass	= USB_CLASS_VIDEO,
+	  .bInterfaceSubClass	= 1,
+	  .bInterfaceProtocol	= 0,
+	  .driver_info		= UVC_INFO_QUIRK(UVC_QUIRK_MJPEG_NO_EOF) },
 	/* MT6227 */
 	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
 				| USB_DEVICE_ID_MATCH_INT_INFO,
@@ -2837,6 +2846,15 @@ static const struct usb_device_id uvc_ids[] = {
 	  .bInterfaceSubClass	= 1,
 	  .bInterfaceProtocol	= 0,
 	  .driver_info		= (kernel_ulong_t)&uvc_quirk_probe_minmax },
+	/* Kurokesu C1 PRO */
+	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
+				| USB_DEVICE_ID_MATCH_INT_INFO,
+	  .idVendor		= 0x16d0,
+	  .idProduct		= 0x0ed1,
+	  .bInterfaceClass	= USB_CLASS_VIDEO,
+	  .bInterfaceSubClass	= 1,
+	  .bInterfaceProtocol	= 0,
+	  .driver_info		= UVC_INFO_QUIRK(UVC_QUIRK_MJPEG_NO_EOF) },
 	/* Syntek (HP Spartan) */
 	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
 				| USB_DEVICE_ID_MATCH_INT_INFO,
drivers/media/usb/uvc/uvc_video.c +26 -1
index d2fe01bcd209..eab7b8f55730 100644
@@ -20,6 +20,7 @@
 #include <linux/atomic.h>
 #include <linux/unaligned.h>
 
+#include <media/jpeg.h>
 #include <media/v4l2-common.h>
 
 #include "uvcvideo.h"
@@ -1137,6 +1138,7 @@ static void uvc_video_stats_stop(struct uvc_streaming *stream)
 static int uvc_video_decode_start(struct uvc_streaming *stream,
 		struct uvc_buffer *buf, const u8 *data, int len)
 {
+	u8 header_len;
 	u8 fid;
 
 	/*
@@ -1150,6 +1152,7 @@ static int uvc_video_decode_start(struct uvc_streaming *stream,
 		return -EINVAL;
 	}
 
+	header_len = data[0];
 	fid = data[1] & UVC_STREAM_FID;
 
 	/*
@@ -1231,9 +1234,31 @@ static int uvc_video_decode_start(struct uvc_streaming *stream,
 		return -EAGAIN;
 	}
 
+	/*
+	 * Some cameras, when running two parallel streams (one MJPEG alongside
+	 * another non-MJPEG stream), are known to lose the EOF packet for a frame.
+	 * We can detect the end of a frame by checking for a new SOI marker, as
+	 * the SOI always lies on the packet boundary between two frames for
+	 * these devices.
+	 */
+	if (stream->dev->quirks & UVC_QUIRK_MJPEG_NO_EOF &&
+	    (stream->cur_format->fcc == V4L2_PIX_FMT_MJPEG ||
+	    stream->cur_format->fcc == V4L2_PIX_FMT_JPEG)) {
+		const u8 *packet = data + header_len;
+
+		if (len >= header_len + 2 &&
+		    packet[0] == 0xff && packet[1] == JPEG_MARKER_SOI &&
+		    buf->bytesused != 0) {
+			buf->state = UVC_BUF_STATE_READY;
+			buf->error = 1;
+			stream->last_fid ^= UVC_STREAM_FID;
+			return -EAGAIN;
+		}
+	}
+
 	stream->last_fid = fid;
 
-	return data[0];
+	return header_len;
 }
 
 static inline enum dma_data_direction uvc_stream_dir(
drivers/media/usb/uvc/uvcvideo.h +1 -0
index 272dc9cf01ee..74ac2106f08e 100644
@@ -76,6 +76,7 @@
 #define UVC_QUIRK_NO_RESET_RESUME	0x00004000
 #define UVC_QUIRK_DISABLE_AUTOSUSPEND	0x00008000
 #define UVC_QUIRK_INVALID_DEVICE_SOF	0x00010000
+#define UVC_QUIRK_MJPEG_NO_EOF		0x00020000
 
 /* Format flags */
 #define UVC_FMT_FLAG_COMPRESSED		0x00000001
drivers/mmc/host/mtk-sd.c +20 -11
index 6e62415de2e5..d5d868cb4edc 100644
@@ -263,6 +263,7 @@
 #define MSDC_PAD_TUNE_CMD2_SEL	  BIT(21)   /* RW */
 
 #define PAD_DS_TUNE_DLY_SEL       BIT(0)	  /* RW */
+#define PAD_DS_TUNE_DLY2_SEL      BIT(1)	  /* RW */
 #define PAD_DS_TUNE_DLY1	  GENMASK(6, 2)   /* RW */
 #define PAD_DS_TUNE_DLY2	  GENMASK(11, 7)  /* RW */
 #define PAD_DS_TUNE_DLY3	  GENMASK(16, 12) /* RW */
@@ -308,6 +309,7 @@
 
 /* EMMC50_PAD_DS_TUNE mask */
 #define PAD_DS_DLY_SEL		BIT(16)	/* RW */
+#define PAD_DS_DLY2_SEL		BIT(15)	/* RW */
 #define PAD_DS_DLY1		GENMASK(14, 10)	/* RW */
 #define PAD_DS_DLY3		GENMASK(4, 0)	/* RW */
 
@@ -2361,13 +2363,23 @@ static int msdc_execute_tuning(struct mmc_host *mmc, u32 opcode)
 static int msdc_prepare_hs400_tuning(struct mmc_host *mmc, struct mmc_ios *ios)
 {
 	struct msdc_host *host = mmc_priv(mmc);
+
 	host->hs400_mode = true;
 
-	if (host->top_base)
-		writel(host->hs400_ds_delay,
-		       host->top_base + EMMC50_PAD_DS_TUNE);
-	else
-		writel(host->hs400_ds_delay, host->base + PAD_DS_TUNE);
+	if (host->top_base) {
+		if (host->hs400_ds_dly3)
+			sdr_set_field(host->top_base + EMMC50_PAD_DS_TUNE,
+				      PAD_DS_DLY3, host->hs400_ds_dly3);
+		if (host->hs400_ds_delay)
+			writel(host->hs400_ds_delay,
+			       host->top_base + EMMC50_PAD_DS_TUNE);
+	} else {
+		if (host->hs400_ds_dly3)
+			sdr_set_field(host->base + PAD_DS_TUNE,
+				      PAD_DS_TUNE_DLY3, host->hs400_ds_dly3);
+		if (host->hs400_ds_delay)
+			writel(host->hs400_ds_delay, host->base + PAD_DS_TUNE);
+	}
 	/* hs400 mode must set it to 0 */
 	sdr_clr_bits(host->base + MSDC_PATCH_BIT2, MSDC_PATCH_BIT2_CFGCRCSTS);
 	/* to improve read performance, set outstanding to 2 */
@@ -2387,14 +2399,11 @@ static int msdc_execute_hs400_tuning(struct mmc_host *mmc, struct mmc_card *card
 	if (host->top_base) {
 		sdr_set_bits(host->top_base + EMMC50_PAD_DS_TUNE,
 			     PAD_DS_DLY_SEL);
-		if (host->hs400_ds_dly3)
-			sdr_set_field(host->top_base + EMMC50_PAD_DS_TUNE,
-				      PAD_DS_DLY3, host->hs400_ds_dly3);
+		sdr_clr_bits(host->top_base + EMMC50_PAD_DS_TUNE,
+			     PAD_DS_DLY2_SEL);
 	} else {
 		sdr_set_bits(host->base + PAD_DS_TUNE, PAD_DS_TUNE_DLY_SEL);
-		if (host->hs400_ds_dly3)
-			sdr_set_field(host->base + PAD_DS_TUNE,
-				      PAD_DS_TUNE_DLY3, host->hs400_ds_dly3);
+		sdr_clr_bits(host->base + PAD_DS_TUNE, PAD_DS_TUNE_DLY2_SEL);
 	}
 
 	host->hs400_tuning = true;
drivers/net/can/c_can/c_can_platform.c +3 -2
index 6cba9717a6d8..399844809bbe 100644
@@ -385,15 +385,16 @@ static int c_can_plat_probe(struct platform_device *pdev)
 	if (ret) {
 		dev_err(&pdev->dev, "registering %s failed (err=%d)\n",
 			KBUILD_MODNAME, ret);
-		goto exit_free_device;
+		goto exit_pm_runtime;
 	}
 
 	dev_info(&pdev->dev, "%s device registered (regs=%p, irq=%d)\n",
 		 KBUILD_MODNAME, priv->base, dev->irq);
 	return 0;
 
-exit_free_device:
+exit_pm_runtime:
 	pm_runtime_disable(priv->device);
+exit_free_device:
 	free_c_can_dev(dev);
 exit:
 	dev_err(&pdev->dev, "probe failed\n");
drivers/net/can/ctucanfd/ctucanfd_base.c +6 -4
index 64c349fd4600..f65c1a1e05cc 100644
@@ -867,10 +867,12 @@ static void ctucan_err_interrupt(struct net_device *ndev, u32 isr)
 			}
 			break;
 		case CAN_STATE_ERROR_ACTIVE:
-			cf->can_id |= CAN_ERR_CNT;
-			cf->data[1] = CAN_ERR_CRTL_ACTIVE;
-			cf->data[6] = bec.txerr;
-			cf->data[7] = bec.rxerr;
+			if (skb) {
+				cf->can_id |= CAN_ERR_CNT;
+				cf->data[1] = CAN_ERR_CRTL_ACTIVE;
+				cf->data[6] = bec.txerr;
+				cf->data[7] = bec.rxerr;
+			}
 			break;
 		default:
 			netdev_warn(ndev, "unhandled error state (%d:%s)!\n",
drivers/net/can/rockchip/rockchip_canfd-core.c +1 -1
index df18c85fc078..d9a937ba126c 100644
@@ -622,7 +622,7 @@ rkcanfd_handle_rx_fifo_overflow_int(struct rkcanfd_priv *priv)
 	netdev_dbg(priv->ndev, "RX-FIFO overflow\n");
 
 	skb = rkcanfd_alloc_can_err_skb(priv, &cf, &timestamp);
-	if (skb)
+	if (!skb)
 		return 0;
 
 	rkcanfd_get_berr_counter_corrected(priv, &bec);
drivers/net/can/usb/etas_es58x/es58x_devlink.c +5 -1
index eee20839d96f..0d155eb1b9e9 100644
@@ -248,7 +248,11 @@ static int es58x_devlink_info_get(struct devlink *devlink,
 			return ret;
 	}
 
-	return devlink_info_serial_number_put(req, es58x_dev->udev->serial);
+	if (es58x_dev->udev->serial)
+		ret = devlink_info_serial_number_put(req,
+						     es58x_dev->udev->serial);
+
+	return ret;
 }
 
 const struct devlink_ops es58x_dl_ops = {
drivers/net/ethernet/intel/idpf/idpf_lib.c +5 -0
index b4fbb99bfad2..a3d6b8f198a8 100644
@@ -2159,8 +2159,13 @@ static int idpf_open(struct net_device *netdev)
 	idpf_vport_ctrl_lock(netdev);
 	vport = idpf_netdev_to_vport(netdev);
 
+	err = idpf_set_real_num_queues(vport);
+	if (err)
+		goto unlock;
+
 	err = idpf_vport_open(vport);
 
+unlock:
 	idpf_vport_ctrl_unlock(netdev);
 
 	return err;
drivers/net/ethernet/intel/idpf/idpf_txrx.c +1 -4
index 60d15b3e6e2f..1e0d1f9b07fb 100644
@@ -3008,8 +3008,6 @@ static int idpf_rx_rsc(struct idpf_rx_queue *rxq, struct sk_buff *skb,
 		return -EINVAL;
 
 	rsc_segments = DIV_ROUND_UP(skb->data_len, rsc_seg_len);
-	if (unlikely(rsc_segments == 1))
-		return 0;
 
 	NAPI_GRO_CB(skb)->count = rsc_segments;
 	skb_shinfo(skb)->gso_size = rsc_seg_len;
@@ -3072,6 +3070,7 @@ idpf_rx_process_skb_fields(struct idpf_rx_queue *rxq, struct sk_buff *skb,
 	idpf_rx_hash(rxq, skb, rx_desc, decoded);
 
 	skb->protocol = eth_type_trans(skb, rxq->netdev);
+	skb_record_rx_queue(skb, rxq->idx);
 
 	if (le16_get_bits(rx_desc->hdrlen_flags,
 			  VIRTCHNL2_RX_FLEX_DESC_ADV_RSC_M))
@@ -3080,8 +3079,6 @@ idpf_rx_process_skb_fields(struct idpf_rx_queue *rxq, struct sk_buff *skb,
 	csum_bits = idpf_rx_splitq_extract_csum_bits(rx_desc);
 	idpf_rx_csum(rxq, skb, csum_bits, decoded);
 
-	skb_record_rx_queue(skb, rxq->idx);
-
 	return 0;
 }
 
drivers/net/ethernet/intel/igc/igc_main.c +13 -9
index 6e70bca15db1..1ec9e8cc99d9 100644
@@ -1096,6 +1096,7 @@ static int igc_init_empty_frame(struct igc_ring *ring,
 		return -ENOMEM;
 	}
 
+	buffer->type = IGC_TX_BUFFER_TYPE_SKB;
 	buffer->skb = skb;
 	buffer->protocol = 0;
 	buffer->bytecount = skb->len;
@@ -2707,8 +2708,9 @@ static int igc_clean_rx_irq(struct igc_q_vector *q_vector, const int budget)
 }
 
 static struct sk_buff *igc_construct_skb_zc(struct igc_ring *ring,
-					    struct xdp_buff *xdp)
+					    struct igc_xdp_buff *ctx)
 {
+	struct xdp_buff *xdp = &ctx->xdp;
 	unsigned int totalsize = xdp->data_end - xdp->data_meta;
 	unsigned int metasize = xdp->data - xdp->data_meta;
 	struct sk_buff *skb;
@@ -2727,27 +2729,28 @@ static struct sk_buff *igc_construct_skb_zc(struct igc_ring *ring,
 		__skb_pull(skb, metasize);
 	}
 
+	if (ctx->rx_ts) {
+		skb_shinfo(skb)->tx_flags |= SKBTX_HW_TSTAMP_NETDEV;
+		skb_hwtstamps(skb)->netdev_data = ctx->rx_ts;
+	}
+
 	return skb;
 }
 
 static void igc_dispatch_skb_zc(struct igc_q_vector *q_vector,
 				union igc_adv_rx_desc *desc,
-				struct xdp_buff *xdp,
-				ktime_t timestamp)
+				struct igc_xdp_buff *ctx)
 {
 	struct igc_ring *ring = q_vector->rx.ring;
 	struct sk_buff *skb;
 
-	skb = igc_construct_skb_zc(ring, xdp);
+	skb = igc_construct_skb_zc(ring, ctx);
 	if (!skb) {
 		ring->rx_stats.alloc_failed++;
 		set_bit(IGC_RING_FLAG_RX_ALLOC_FAILED, &ring->flags);
 		return;
 	}
 
-	if (timestamp)
-		skb_hwtstamps(skb)->hwtstamp = timestamp;
-
 	if (igc_cleanup_headers(ring, desc, skb))
 		return;
 
@@ -2783,7 +2786,6 @@ static int igc_clean_rx_irq_zc(struct igc_q_vector *q_vector, const int budget)
 		union igc_adv_rx_desc *desc;
 		struct igc_rx_buffer *bi;
 		struct igc_xdp_buff *ctx;
-		ktime_t timestamp = 0;
 		unsigned int size;
 		int res;
 
@@ -2813,6 +2815,8 @@ static int igc_clean_rx_irq_zc(struct igc_q_vector *q_vector, const int budget)
 			 */
 			bi->xdp->data_meta += IGC_TS_HDR_LEN;
 			size -= IGC_TS_HDR_LEN;
+		} else {
+			ctx->rx_ts = NULL;
 		}
 
 		bi->xdp->data_end = bi->xdp->data + size;
@@ -2821,7 +2825,7 @@ static int igc_clean_rx_irq_zc(struct igc_q_vector *q_vector, const int budget)
 		res = __igc_xdp_run_prog(adapter, prog, bi->xdp);
 		switch (res) {
 		case IGC_XDP_PASS:
-			igc_dispatch_skb_zc(q_vector, desc, bi->xdp, timestamp);
+			igc_dispatch_skb_zc(q_vector, desc, ctx);
 			fallthrough;
 		case IGC_XDP_CONSUMED:
 			xsk_buff_free(bi->xdp);
drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c +3 -1
index 2bed8c86b7cf..3f64cdbabfa3 100644
@@ -768,7 +768,9 @@ static void __mlxsw_sp_port_get_stats(struct net_device *dev,
 	err = mlxsw_sp_get_hw_stats_by_group(&hw_stats, &len, grp);
 	if (err)
 		return;
-	mlxsw_sp_port_get_stats_raw(dev, grp, prio, ppcnt_pl);
+	err = mlxsw_sp_port_get_stats_raw(dev, grp, prio, ppcnt_pl);
+	if (err)
+		return;
 	for (i = 0; i < len; i++) {
 		data[data_index + i] = hw_stats[i].getter(ppcnt_pl);
 		if (!hw_stats[i].cells_bytes)
drivers/net/ethernet/ti/am65-cpsw-nuss.c +24 -16
index 3c0d067c3609..3e090f87f97e 100644
@@ -585,21 +585,30 @@ static void am65_cpsw_nuss_xmit_free(struct am65_cpsw_tx_chn *tx_chn,
 static void am65_cpsw_nuss_tx_cleanup(void *data, dma_addr_t desc_dma)
 {
 	struct am65_cpsw_tx_chn *tx_chn = data;
+	enum am65_cpsw_tx_buf_type buf_type;
 	struct cppi5_host_desc_t *desc_tx;
+	struct xdp_frame *xdpf;
 	struct sk_buff *skb;
 	void **swdata;
 
 	desc_tx = k3_cppi_desc_pool_dma2virt(tx_chn->desc_pool, desc_dma);
 	swdata = cppi5_hdesc_get_swdata(desc_tx);
-	skb = *(swdata);
-	am65_cpsw_nuss_xmit_free(tx_chn, desc_tx);
+	buf_type = am65_cpsw_nuss_buf_type(tx_chn, desc_dma);
+	if (buf_type == AM65_CPSW_TX_BUF_TYPE_SKB) {
+		skb = *(swdata);
+		dev_kfree_skb_any(skb);
+	} else {
+		xdpf = *(swdata);
+		xdp_return_frame(xdpf);
+	}
 
-	dev_kfree_skb_any(skb);
+	am65_cpsw_nuss_xmit_free(tx_chn, desc_tx);
 }
 
 static struct sk_buff *am65_cpsw_build_skb(void *page_addr,
 					   struct net_device *ndev,
-					   unsigned int len)
+					   unsigned int len,
+					   unsigned int headroom)
 {
 	struct sk_buff *skb;
 
@@ -609,7 +618,7 @@ static struct sk_buff *am65_cpsw_build_skb(void *page_addr,
 	if (unlikely(!skb))
 		return NULL;
 
-	skb_reserve(skb, AM65_CPSW_HEADROOM);
+	skb_reserve(skb, headroom);
 	skb->dev = ndev;
 
 	return skb;
@@ -1191,16 +1200,8 @@ static int am65_cpsw_nuss_rx_packets(struct am65_cpsw_rx_flow *flow,
 	dev_dbg(dev, "%s rx csum_info:%#x\n", __func__, csum_info);
 
 	dma_unmap_single(rx_chn->dma_dev, buf_dma, buf_dma_len, DMA_FROM_DEVICE);
-
 	k3_cppi_desc_pool_free(rx_chn->desc_pool, desc_rx);
 
-	skb = am65_cpsw_build_skb(page_addr, ndev,
-				  AM65_CPSW_MAX_PACKET_SIZE);
-	if (unlikely(!skb)) {
-		new_page = page;
-		goto requeue;
-	}
-
 	if (port->xdp_prog) {
 		xdp_init_buff(&xdp, PAGE_SIZE, &port->xdp_rxq[flow->id]);
 		xdp_prepare_buff(&xdp, page_addr, AM65_CPSW_HEADROOM,
@@ -1210,9 +1211,16 @@ static int am65_cpsw_nuss_rx_packets(struct am65_cpsw_rx_flow *flow,
 		if (*xdp_state != AM65_CPSW_XDP_PASS)
 			goto allocate;
 
-		/* Compute additional headroom to be reserved */
-		headroom = (xdp.data - xdp.data_hard_start) - skb_headroom(skb);
-		skb_reserve(skb, headroom);
+		headroom = xdp.data - xdp.data_hard_start;
+	} else {
+		headroom = AM65_CPSW_HEADROOM;
+	}
+
+	skb = am65_cpsw_build_skb(page_addr, ndev,
+				  AM65_CPSW_MAX_PACKET_SIZE, headroom);
+	if (unlikely(!skb)) {
+		new_page = page;
+		goto requeue;
 	}
 
 	ndev_priv = netdev_priv(ndev);
drivers/net/netdevsim/ipsec.c +8 -4
index 3612b0633bd1..88187dd4eb2d 100644
@@ -39,10 +39,14 @@ static ssize_t nsim_dbg_netdev_ops_read(struct file *filp,
 		if (!sap->used)
 			continue;
 
-		p += scnprintf(p, bufsize - (p - buf),
-			       "sa[%i] %cx ipaddr=0x%08x %08x %08x %08x\n",
-			       i, (sap->rx ? 'r' : 't'), sap->ipaddr[0],
-			       sap->ipaddr[1], sap->ipaddr[2], sap->ipaddr[3]);
+		if (sap->xs->props.family == AF_INET6)
+			p += scnprintf(p, bufsize - (p - buf),
+				       "sa[%i] %cx ipaddr=%pI6c\n",
+				       i, (sap->rx ? 'r' : 't'), &sap->ipaddr);
+		else
+			p += scnprintf(p, bufsize - (p - buf),
+				       "sa[%i] %cx ipaddr=%pI4\n",
+				       i, (sap->rx ? 'r' : 't'), &sap->ipaddr[3]);
 		p += scnprintf(p, bufsize - (p - buf),
 			       "sa[%i]    spi=0x%08x proto=0x%x salt=0x%08x crypt=%d\n",
 			       i, be32_to_cpu(sap->xs->id.spi),
drivers/net/team/team_core.c +3 -1
index 7f4ef219eee4..6cfafaac1b4f 100644
@@ -2640,7 +2640,9 @@ int team_nl_options_set_doit(struct sk_buff *skb, struct genl_info *info)
 				ctx.data.u32_val = nla_get_u32(attr_data);
 				break;
 			case TEAM_OPTION_TYPE_STRING:
-				if (nla_len(attr_data) > TEAM_STRING_MAX_LEN) {
+				if (nla_len(attr_data) > TEAM_STRING_MAX_LEN ||
+				    !memchr(nla_data(attr_data), '\0',
+					    nla_len(attr_data))) {
 					err = -EINVAL;
 					goto team_put;
 				}
drivers/net/vxlan/vxlan_core.c +5 -2
index 6e9a3795846a..5e7cdd1b806f 100644
@@ -2871,8 +2871,11 @@ static int vxlan_init(struct net_device *dev)
 	struct vxlan_dev *vxlan = netdev_priv(dev);
 	int err;
 
-	if (vxlan->cfg.flags & VXLAN_F_VNIFILTER)
-		vxlan_vnigroup_init(vxlan);
+	if (vxlan->cfg.flags & VXLAN_F_VNIFILTER) {
+		err = vxlan_vnigroup_init(vxlan);
+		if (err)
+			return err;
+	}
 
 	err = gro_cells_init(&vxlan->gro_cells, dev);
 	if (err)
drivers/net/wireless/ath/ath12k/wmi.c +45 -16

92 lines not on this page · raw message

drivers/net/wireless/ath/ath12k/wmi.h +0 -1
index 6a913f9b8315..b495cdea7111 100644
@@ -3943,7 +3943,6 @@ struct ath12k_wmi_eht_rate_set_params {
 #define MAX_REG_RULES 10
 #define REG_ALPHA2_LEN 2
 #define MAX_6G_REG_RULES 5
-#define REG_US_5G_NUM_REG_RULES 4
 
 enum wmi_start_event_param {
 	WMI_VDEV_START_RESP_EVENT = 0,
drivers/net/wireless/realtek/rtw89/pci.c +14 -3
index 5aef7fa37878..0ac84f968994 100644
@@ -2492,7 +2492,7 @@ static int rtw89_pci_dphy_delay(struct rtw89_dev *rtwdev)
 				       PCIE_DPHY_DLY_25US, PCIE_PHY_GEN1);
 }
 
-static void rtw89_pci_power_wake(struct rtw89_dev *rtwdev, bool pwr_up)
+static void rtw89_pci_power_wake_ax(struct rtw89_dev *rtwdev, bool pwr_up)
 {
 	if (pwr_up)
 		rtw89_write32_set(rtwdev, R_AX_HCI_OPT_CTRL, BIT_WAKE_CTRL);
@@ -2799,6 +2799,8 @@ static int rtw89_pci_ops_deinit(struct rtw89_dev *rtwdev)
 {
 	const struct rtw89_pci_info *info = rtwdev->pci_info;
 
+	rtw89_pci_power_wake(rtwdev, false);
+
 	if (rtwdev->chip->chip_id == RTL8852A) {
 		/* ltr sw trigger */
 		rtw89_write32_set(rtwdev, R_AX_LTR_CTRL_0, B_AX_APP_LTR_IDLE);
@@ -2841,7 +2843,7 @@ static int rtw89_pci_ops_mac_pre_init_ax(struct rtw89_dev *rtwdev)
 		return ret;
 	}
 
-	rtw89_pci_power_wake(rtwdev, true);
+	rtw89_pci_power_wake_ax(rtwdev, true);
 	rtw89_pci_autoload_hang(rtwdev);
 	rtw89_pci_l12_vmain(rtwdev);
 	rtw89_pci_gen2_force_ib(rtwdev);
@@ -2886,6 +2888,13 @@ static int rtw89_pci_ops_mac_pre_init_ax(struct rtw89_dev *rtwdev)
 	return 0;
 }
 
+static int rtw89_pci_ops_mac_pre_deinit_ax(struct rtw89_dev *rtwdev)
+{
+	rtw89_pci_power_wake_ax(rtwdev, false);
+
+	return 0;
+}
+
 int rtw89_pci_ltr_set(struct rtw89_dev *rtwdev, bool en)
 {
 	u32 val;
@@ -4264,7 +4273,7 @@ const struct rtw89_pci_gen_def rtw89_pci_gen_ax = {
 					    B_AX_RDU_INT},
 
 	.mac_pre_init = rtw89_pci_ops_mac_pre_init_ax,
-	.mac_pre_deinit = NULL,
+	.mac_pre_deinit = rtw89_pci_ops_mac_pre_deinit_ax,
 	.mac_post_init = rtw89_pci_ops_mac_post_init_ax,
 
 	.clr_idx_all = rtw89_pci_clr_idx_all_ax,
@@ -4280,6 +4289,8 @@ const struct rtw89_pci_gen_def rtw89_pci_gen_ax = {
 	.aspm_set = rtw89_pci_aspm_set_ax,
 	.clkreq_set = rtw89_pci_clkreq_set_ax,
 	.l1ss_set = rtw89_pci_l1ss_set_ax,
+
+	.power_wake = rtw89_pci_power_wake_ax,
 };
 EXPORT_SYMBOL(rtw89_pci_gen_ax);
 
drivers/net/wireless/realtek/rtw89/pci.h +11 -0
index 48c3ab735db2..0ea4dcb84dd8 100644
@@ -1276,6 +1276,8 @@ struct rtw89_pci_gen_def {
 	void (*aspm_set)(struct rtw89_dev *rtwdev, bool enable);
 	void (*clkreq_set)(struct rtw89_dev *rtwdev, bool enable);
 	void (*l1ss_set)(struct rtw89_dev *rtwdev, bool enable);
+
+	void (*power_wake)(struct rtw89_dev *rtwdev, bool pwr_up);
 };
 
 struct rtw89_pci_info {
@@ -1766,4 +1768,13 @@ static inline int rtw89_pci_poll_txdma_ch_idle(struct rtw89_dev *rtwdev)
 
 	return gen_def->poll_txdma_ch_idle(rtwdev);
 }
+
+static inline void rtw89_pci_power_wake(struct rtw89_dev *rtwdev, bool pwr_up)
+{
+	const struct rtw89_pci_info *info = rtwdev->pci_info;
+	const struct rtw89_pci_gen_def *gen_def = info->gen_def;
+
+	gen_def->power_wake(rtwdev, pwr_up);
+}
+
 #endif
drivers/net/wireless/realtek/rtw89/pci_be.c +2 -0
index 7cc328222965..2f0d9ff25ba5 100644
@@ -614,5 +614,7 @@ const struct rtw89_pci_gen_def rtw89_pci_gen_be = {
 	.aspm_set = rtw89_pci_aspm_set_be,
 	.clkreq_set = rtw89_pci_clkreq_set_be,
 	.l1ss_set = rtw89_pci_l1ss_set_be,
+
[… more lines in the raw message]

Lines of this file are not shown. View the raw message.

drivers/parport/parport_serial.c +8 -4
index 3644997a8342..24d4f3a3ec3d 100644

Lines of this file are not shown. View the raw message.

drivers/pci/quirks.c +14 -1
index 8103bc24a54e..064067d9c8b5 100644

Lines of this file are not shown. View the raw message.

drivers/pci/switch/switchtec.c +26 -0
index c7e1089ffdaf..b14dfab04d84 100644

Lines of this file are not shown. View the raw message.

drivers/pinctrl/pinconf-generic.c +4 -4
index 0b13d7f17b32..42547f64453e 100644

Lines of this file are not shown. View the raw message.

drivers/pinctrl/pinctrl-cy8c95x0.c +22 -14
index 5096ccdd459e..7a6a1434ae7f 100644

Lines of this file are not shown. View the raw message.

drivers/soc/tegra/fuse/fuse-tegra30.c +11 -6
index eb14e5ff5a0a..e24ab5f7d2bf 100644

Lines of this file are not shown. View the raw message.

drivers/spi/spi-sn-f-ospi.c +3 -0
index a7c3b3923b4a..fd8c8eb37d01 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/8250/8250.h +2 -0
index e5310c65cf52..10a706fe4b24 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/8250/8250_dma.c +16 -0
index d215c494ee24..f245a84f4a50 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/8250/8250_pci.c +35 -41

76 lines not on this page · raw message

drivers/tty/serial/8250/8250_pci1xxxx.c +59 -1

60 lines not on this page · raw message

drivers/tty/serial/8250/8250_port.c +9 -0
index 11519aa2598a..c1376727642a 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/serial_port.c +3 -2
index d35f1d24156c..85285c56fabf 100644

Lines of this file are not shown. View the raw message.

drivers/ufs/core/ufs_bsg.c +1 -0
index 58023f735c19..8d4ad0a3f2cf 100644

Lines of this file are not shown. View the raw message.

drivers/ufs/core/ufshcd.c +67 -60

127 lines not on this page · raw message

drivers/usb/class/cdc-acm.c +21 -7
index 6b37d1c47fce..c2ecfa3c8349 100644

Lines of this file are not shown. View the raw message.

drivers/usb/core/hub.c +12 -2
index 21ac9b464696..906daf423cb0 100644

Lines of this file are not shown. View the raw message.

drivers/usb/core/quirks.c +6 -0
index 13171454f959..027479179f09 100644

Lines of this file are not shown. View the raw message.

drivers/usb/dwc2/gadget.c +1 -0
index e7bf9cc635be..bd4c788f03bc 100644

Lines of this file are not shown. View the raw message.

drivers/usb/dwc3/gadget.c +34 -0
index a5d75d7d0a87..8c80bb4a467b 100644

Lines of this file are not shown. View the raw message.

drivers/usb/gadget/function/f_midi.c +13 -4
index 1067847cc079..4153643c67dc 100644

Lines of this file are not shown. View the raw message.

drivers/usb/gadget/udc/core.c +1 -1
index a6f46364be65..4b3d5075621a 100644

Lines of this file are not shown. View the raw message.

drivers/usb/gadget/udc/renesas_usb3.c +1 -1
index 3b01734ce1b7..a93ad93390ba 100644

Lines of this file are not shown. View the raw message.

drivers/usb/host/pci-quirks.c +9 -0
index 1f9c1b1435d8..0404489c2f6a 100644

Lines of this file are not shown. View the raw message.

drivers/usb/host/xhci-pci.c +4 -3
index 3ba9902dd209..deb3c98c9bea 100644

Lines of this file are not shown. View the raw message.

drivers/usb/roles/class.c +3 -2
index c58a12c147f4..30482d4cf826 100644

Lines of this file are not shown. View the raw message.

drivers/usb/serial/option.c +29 -20

49 lines not on this page · raw message

drivers/vfio/pci/nvgrace-gpu/main.c +73 -22

95 lines not on this page · raw message

drivers/vfio/pci/vfio_pci_rdwr.c +1 -0
index 66b72c289284..a0595c745732 100644

Lines of this file are not shown. View the raw message.

drivers/vfio/platform/vfio_platform_common.c +0 -10
index d63c2d266d07..3bf1043cd795 100644

Lines of this file are not shown. View the raw message.

drivers/video/fbdev/omap/lcd_dma.c +2 -2
index f85817635a8c..0da23c57e475 100644

Lines of this file are not shown. View the raw message.

drivers/xen/swiotlb-xen.c +12 -8
index a337edcf8faf..26c62e0d34e9 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/extent_io.c +20 -9
index 42c9899d9241..fe08c983d5bb 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/file.c +1 -3
index 559c177456e6..848cb2c3d9dd 100644

Lines of this file are not shown. View the raw message.

fs/nfs/sysfs.c +3 -3
index bf378ecd5d9f..7b59a40d40c0 100644

Lines of this file are not shown. View the raw message.

fs/nfsd/filecache.c +10 -1
index 146a9463c3c2..d19968881855 100644

Lines of this file are not shown. View the raw message.

fs/nfsd/nfs2acl.c +2 -0
index 4e3be7201b1c..5fb202acb0fd 100644

Lines of this file are not shown. View the raw message.

fs/nfsd/nfs3acl.c +2 -0
index 5e34e98db969..7b5433bd3019 100644

Lines of this file are not shown. View the raw message.

fs/nfsd/nfs4callback.c +5 -2
index de0763652549..88c03e182573 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/attrib.c +2 -2
index 8d789b017fa9..da1a9312e61a 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/dir.c +1 -1
index fc6a8aa29e3a..b6da80c69ca6 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/frecord.c +7 -5
index c33e818b3164..175662acd5ea 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/fsntfs.c +5 -1
index 0fa636038b4e..6c73e93afb47 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/index.c +2 -4
index 9089c58a005c..7eb9fae22f8d 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/inode.c +3 -0
index be04d2845bb7..a1e11228dafd 100644

Lines of this file are not shown. View the raw message.

fs/orangefs/orangefs-debugfs.c +2 -2
index 1b508f543384..fa41db088488 100644

Lines of this file are not shown. View the raw message.

fs/smb/client/cifsglob.h +0 -1
index 94785abc9b1b..05274121e46f 100644

Lines of this file are not shown. View the raw message.

fs/smb/client/file.c +4 -3
index a58a3333ecc3..313c851fc1c1 100644

Lines of this file are not shown. View the raw message.

include/drm/display/drm_dp.h +1 -0
index a6f8b098c56f..3bd9f482f0c3 100644

Lines of this file are not shown. View the raw message.

include/kunit/platform_device.h +1 -0
index 0fc0999d2420..f8236a8536f7 100644

Lines of this file are not shown. View the raw message.

include/linux/blk-mq.h +14 -4
index c5063e0a38a0..a53cbe256910 100644

Lines of this file are not shown. View the raw message.

include/linux/cgroup-defs.h +3 -3
index 47ae4c4d924c..a32eebcd23da 100644

Lines of this file are not shown. View the raw message.

include/linux/efi.h +1 -0
index e28d88066033..2f1bfd7562eb 100644

Lines of this file are not shown. View the raw message.

include/linux/netdevice.h +6 -0
index 02d3bafebbe7..4f17b786828a 100644

Lines of this file are not shown. View the raw message.

include/linux/pci_ids.h +11 -0
index 4cf6aaed5f35..22f6b018cff8 100644

Lines of this file are not shown. View the raw message.

include/linux/sched/task.h +1 -0
index 0f2aeb37bbb0..ca1db4b92c32 100644

Lines of this file are not shown. View the raw message.

include/net/dst.h +9 -0
index 0f303cc60252..08647c99d79c 100644

Lines of this file are not shown. View the raw message.

include/net/ip.h +10 -3
index d92d3bc3ec0e..fe4f85438114 100644

Lines of this file are not shown. View the raw message.

include/net/l3mdev.h +2 -0
index 031c661aa14d..bdfa9d414360 100644

Lines of this file are not shown. View the raw message.

include/net/net_namespace.h +1 -1
index 9398c8f49953..da93873df4db 100644

Lines of this file are not shown. View the raw message.

include/net/route.h +7 -2
index 1789f1e6640b..da34b6fa9862 100644

Lines of this file are not shown. View the raw message.

include/ufs/ufshcd.h +7 -2
index d5e43a1dcff2..47cba116f87b 100644

Lines of this file are not shown. View the raw message.

io_uring/kbuf.c +11 -4
index eec5eb7de843..e1895952066e 100644

Lines of this file are not shown. View the raw message.

io_uring/uring_cmd.c +0 -3
index 874f9e2defd5..b2ce4b561002 100644

Lines of this file are not shown. View the raw message.

io_uring/waitid.c +2 -2
index 6362ec20abc0..2f7b5eeab845 100644

Lines of this file are not shown. View the raw message.

kernel/cgroup/cgroup.c +12 -8
index e275eaf2de7f..216535e055e1 100644

Lines of this file are not shown. View the raw message.

kernel/cgroup/rstat.c +0 -1
index a06b45272411..ce295b73c0a3 100644

Lines of this file are not shown. View the raw message.

kernel/sched/autogroup.c +2 -2
index db68a964e34e..c4a3ccf6a8ac 100644

Lines of this file are not shown. View the raw message.

kernel/sched/core.c +4 -3
index 5d67f41d05d4..c72356836eb6 100644

Lines of this file are not shown. View the raw message.

kernel/sched/ext.c +14 -21
index 4c4681cb9337..689f7e8f69f5 100644

Lines of this file are not shown. View the raw message.

kernel/sched/ext.h +2 -2
index 4d022d17ac7d..1079b56b0f7a 100644

Lines of this file are not shown. View the raw message.

kernel/sched/sched.h +1 -1
index 5426969cf478..d79de755c1c2 100644

Lines of this file are not shown. View the raw message.

kernel/time/clocksource.c +6 -3
index 8a40a616288b..58fb7280cabb 100644

Lines of this file are not shown. View the raw message.

kernel/trace/ring_buffer.c +26 -2
index 0f8f3ffc6f09..ea8ad5480e28 100644

Lines of this file are not shown. View the raw message.

kernel/trace/trace.c +4 -0
index b04990385a6a..bfc4ac265c2c 100644

Lines of this file are not shown. View the raw message.

kernel/workqueue.c +6 -6
index cee65cb43108..a9d64e08dffc 100644

Lines of this file are not shown. View the raw message.

net/ax25/af_ax25.c +11 -0
index aa6c714892ec..9f3b8b682adb 100644

Lines of this file are not shown. View the raw message.

net/batman-adv/bat_v.c +0 -2
index ac11f1f08db0..d35479c465e2 100644

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/batman-adv/bat_v_elp.h +0 -2
index 9e2740195fa2..c9cb0a307100 100644

Lines of this file are not shown. View the raw message.

net/batman-adv/types.h +0 -3
index 04f6398b3a40..85a50096f5b2 100644

Lines of this file are not shown. View the raw message.

net/can/j1939/socket.c +2 -2
index 305dd72c844c..17226b2341d0 100644

Lines of this file are not shown. View the raw message.

net/can/j1939/transport.c +3 -2
index 95f7a7e65a73..9b72d118d756 100644

Lines of this file are not shown. View the raw message.

net/core/fib_rules.c +13 -11
index 154a2681f55c..388ff1d6d86b 100644

Lines of this file are not shown. View the raw message.

net/core/flow_dissector.c +11 -10
index 0e638a37aa09..5db41bf2ed93 100644

Lines of this file are not shown. View the raw message.

net/core/neighbour.c +6 -2
index cc58315a40a7..c7f7ea61b524 100644

Lines of this file are not shown. View the raw message.

net/ipv4/arp.c +3 -1
index 11c1519b3699..59ffaa89d7b0 100644

Lines of this file are not shown. View the raw message.

net/ipv4/devinet.c +2 -1
index 7cf5f7d0d0de..a55e95046984 100644

Lines of this file are not shown. View the raw message.

net/ipv4/icmp.c +17 -14
index 932bd775fc26..f45bc187a92a 100644

Lines of this file are not shown. View the raw message.

net/ipv4/route.c +32 -7
index 2a27913588d0..41b320f0c20e 100644

Lines of this file are not shown. View the raw message.

net/ipv6/icmp.c +23 -19

42 lines not on this page · raw message

net/ipv6/ioam6_iptunnel.c +40 -35

75 lines not on this page · raw message

net/ipv6/mcast.c +25 -20

45 lines not on this page · raw message

net/ipv6/ndisc.c +13 -11
index d044c67019de..8699d1a188dc 100644

Lines of this file are not shown. View the raw message.

net/ipv6/route.c +6 -1
index 8ebfed5d6323..2736dea77575 100644

Lines of this file are not shown. View the raw message.

net/ipv6/rpl_iptunnel.c +34 -25

59 lines not on this page · raw message

net/ipv6/seg6_iptunnel.c +61 -37

98 lines not on this page · raw message

net/openvswitch/datapath.c +9 -3
index 78d9961fcd44..8d3c01f0e2aa 100644

Lines of this file are not shown. View the raw message.

net/vmw_vsock/af_vsock.c +11 -1
index f5d116a1bdea..37299a7ca187 100644

Lines of this file are not shown. View the raw message.

rust/Makefile +1 -0
index 9f59baacaf77..45779a064fa4 100644

Lines of this file are not shown. View the raw message.

rust/kernel/rbtree.rs +1 -1
index d03e4aa1f481..7543378d3729 100644

Lines of this file are not shown. View the raw message.

scripts/Makefile.defconf +7 -6
index 226ea3df3b4b..a44307f08e9d 100644

Lines of this file are not shown. View the raw message.

scripts/Makefile.extrawarn +8 -5
index 04faf15ed316..dc081cf46d21 100644

Lines of this file are not shown. View the raw message.

scripts/kconfig/Makefile +3 -1
index a0a0be38cbdc..fb50bd4f4103 100644

Lines of this file are not shown. View the raw message.

sound/soc/intel/boards/bytcr_rt5640.c +16 -1
index 54f77f57ec8e..1148e9498d8e 100644

Lines of this file are not shown. View the raw message.

tools/objtool/check.c +1 -0
index f0d8796b984a..8e02db7e8332 100644

Lines of this file are not shown. View the raw message.

tools/sched_ext/include/scx/common.bpf.h +10 -2
index 248ab790d143..f7206374a73d 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/bpf/prog_tests/bpf_iter.c +3 -3
index f0a3a9c18e9e..9006549a1294 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c +1 -8
index 844f6fc8487b..c1ac813ff9ba 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/gpio/gpio-sim.sh +25 -6
index 6fb66a687f17..bbc29ed9c60a 100755

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
index bdf6f10d0558..87dce3efe31e 100755

Lines of this file are not shown. View the raw message.

tools/tracing/rtla/src/timerlat_hist.c +8 -0
index 4cbd2d8ebb04..397dc962f5e2 100644

Lines of this file are not shown. View the raw message.

tools/tracing/rtla/src/timerlat_top.c +8 -0
index d13be28dacd5..0def5fec51ed 100644

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.