Linux 6.12.16
Greg Kroah-Hartman
maintainerI'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()
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/regulator/qcom,smd-rpm-regulator.yaml +1 -1
@@ -22,7 +22,7 @@ description: Each sub-node is identified using the node's name, with valid values listed for each of the pmics below. - For mp5496, s1, s2 + For mp5496, s1, s2, l2, l5 For pm2250, s1, s2, s3, s4, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22
Documentation/networking/iso15765-2.rst +2 -2
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -162,6 +162,7 @@ SECTIONS /DISCARD/ : { *(.interp .dynamic) *(.dynsym .dynstr .hash .gnu.hash) + *(.ARM.attributes) } . = KIMAGE_VADDR;
arch/loongarch/kernel/genex.S +15 -13
@@ -18,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
@@ -11,7 +11,6 @@ void __cpuidle arch_cpu_idle(void) { -raw_local_irq_enable (); -__arch_cpu_idle ();/* idle instruction needs irq enabled */ +__arch_cpu_idle ();raw_local_irq_disable (); }
arch/loongarch/kernel/reset.c +3 -3
@@ -33,7 +33,7 @@ void machine_halt(void)console_flush_on_panic (CONSOLE_FLUSH_PENDING );while (true) { -__arch_cpu_idle (); + __asm__ __volatile__("idle 0" : : :"memory" ); } }
@@ -53,7 +53,7 @@ void machine_power_off(void)#endif while (true) { -__arch_cpu_idle (); + __asm__ __volatile__("idle 0" : : :"memory" ); } }
@@ -74,6 +74,6 @@ void machine_restart(char *command)acpi_reboot ();while (true) { -__arch_cpu_idle (); + __asm__ __volatile__("idle 0" : : :"memory" ); } }
arch/loongarch/kvm/main.c +2 -2
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 , §);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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -25,6 +25,9 @@ static unsigned long get_entry_num_slots(efi_memory_desc_t *md,if (md->type !=EFI_CONVENTIONAL_MEMORY )return 0 ; +if (md->attribute &EFI_MEMORY_HOT_PLUGGABLE ) +return 0 ; +if (efi_soft_reserve_enabled () && (md->attribute &EFI_MEMORY_SP ))return 0 ;
drivers/firmware/efi/libstub/relocate.c +3 -0
@@ -53,6 +53,9 @@ efi_status_t efi_low_alloc_above(unsigned long size, unsigned long align,if (desc->type !=EFI_CONVENTIONAL_MEMORY )continue ; +if (desc->attribute &EFI_MEMORY_HOT_PLUGGABLE ) +continue ; +if (efi_soft_reserve_enabled () && (desc->attribute &EFI_MEMORY_SP ))continue ;
drivers/firmware/qcom/qcom_scm-smc.c +3 -0
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -587,7 +587,7 @@ static int rcar_mipi_dsi_startup(struct rcar_mipi_dsi *dsi,for (timeout =10 ; timeout >0 ; --timeout) {if ((rcar_mipi_dsi_read (dsi,PPICLSR ) &PPICLSR_STPST ) && (rcar_mipi_dsi_read (dsi,PPIDLSR ) &PPIDLSR_STPST ) && - (rcar_mipi_dsi_read (dsi,CLOCKSET1 ) &CLOCKSET1_LOCK )) + (rcar_mipi_dsi_read (dsi,CLOCKSET1 ) &CLOCKSET1_LOCK_PHY ))break ;usleep_range (1000 ,2000 );
drivers/gpu/drm/renesas/rcar-du/rcar_mipi_dsi_regs.h +0 -1
@@ -142,7 +142,6 @@#define CLOCKSET1 0x101c#define CLOCKSET1_LOCK_PHY (1 << 17) -#define CLOCKSET1_LOCK (1 << 16)#define CLOCKSET1_CLKSEL (1 << 8)#define CLOCKSET1_CLKINSEL_EXTAL (0 << 2)#define CLOCKSET1_CLKINSEL_DIG (1 << 2)
drivers/gpu/drm/renesas/rz-du/rzg2l_du_kms.c +3 -3
@@ -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
@@ -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
@@ -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 @@ staticvoid dispc_k3_clear_irqstatus (struct dispc_device *dispc,dispc_irq_t clearmask) {unsigned int i; -u32 top_clear =0 ;for (i =0 ; i < dispc->feat->num_vps; ++i) { -if (clearmask &DSS_IRQ_VP_MASK (i)) { +if (clearmask &DSS_IRQ_VP_MASK (i))dispc_k3_vp_write_irqstatus (dispc, i, clearmask); - top_clear |=BIT (i); - } }for (i =0 ; i < dispc->feat->num_planes; ++i) { -if (clearmask &DSS_IRQ_PLANE_MASK (i)) { +if (clearmask &DSS_IRQ_PLANE_MASK (i))dispc_k3_vid_write_irqstatus (dispc, i, clearmask); - top_clear |=BIT (4 + i); - } }if (dispc->feat->subrev ==DISPC_K2G )return ; -dispc_write (dispc,DISPC_IRQSTATUS , top_clear); +/* always clear the top level irqstatus */ +dispc_write (dispc,DISPC_IRQSTATUS ,dispc_read (dispc,DISPC_IRQSTATUS ));/* Flush posted writes */ dispc_read (dispc,DISPC_IRQSTATUS );
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 *cardif (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
@@ -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
@@ -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
@@ -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, ×tamp); -if (skb) +if (!skb)return 0 ;rkcanfd_get_berr_counter_corrected (priv, &bec);
drivers/net/can/usb/etas_es58x/es58x_devlink.c +5 -1
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 4enum wmi_start_event_param {WMI_VDEV_START_RESP_EVENT =0 ,
drivers/net/wireless/realtek/rtw89/pci.c +14 -3
@@ -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
@@ -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
@@ -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, +
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/ufs/core/ufshcd.c +67 -60
127 lines not on this page · 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/platform/vfio_platform_common.c +0 -10
Lines of this file are not shown. View the raw message.
net/batman-adv/bat_v_elp.c +86 -36
122 lines not on this page · raw message
net/ipv6/icmp.c +23 -19
42 lines not on this page · raw message
net/ipv6/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/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
tools/sched_ext/include/scx/common.bpf.h +10 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/prog_tests/bpf_iter.c +3 -3
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c +1 -8
Lines of this file are not shown. View the raw message.
tools/testing/selftests/gpio/gpio-sim.sh +25 -6
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/pmtu.sh +95 -17
112 lines not on this page · raw message
tools/testing/selftests/net/rtnetlink.sh +2 -2
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.