Linux 6.12.55
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.12.55 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/arch/arm64/silicon-errata.rst | 2 Documentation/networking/seg6-sysctl.rst | 3 Makefile | 2 arch/Kconfig | 1 arch/arm64/Kconfig | 1 arch/arm64/include/asm/cputype.h | 2 arch/arm64/kernel/cpu_errata.c | 1 arch/riscv/kernel/probes/kprobes.c | 13 - arch/x86/kernel/cpu/resctrl/monitor.c | 44 ++- drivers/accel/qaic/qaic.h | 2 drivers/accel/qaic/qaic_control.c | 2 drivers/accel/qaic/qaic_data.c | 12 - drivers/accel/qaic/qaic_debugfs.c | 5 drivers/accel/qaic/qaic_drv.c | 3 drivers/base/power/runtime.c | 44 +++ drivers/cdx/cdx_msi.c | 5 drivers/cpufreq/cppc_cpufreq.c | 14 + drivers/dma/idxd/init.c | 2 drivers/gpu/drm/amd/amdgpu/Makefile | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 48 +++- drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 2 drivers/gpu/drm/amd/amdgpu/cyan_skillfish_reg_init.c | 56 ++++ drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 7 drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 7 drivers/gpu/drm/amd/amdgpu/mes_v12_0.c | 7 drivers/gpu/drm/amd/amdgpu/nv.h | 1 drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c | 3 drivers/gpu/drm/bridge/lontium-lt9211.c | 3 drivers/gpu/drm/drm_draw.c | 2 drivers/gpu/drm/drm_draw_internal.h | 2 drivers/gpu/drm/exynos/exynos7_drm_decon.c | 98 ++------ drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c | 9 drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 28 +- drivers/gpu/drm/msm/adreno/a6xx_gmu.h | 6 drivers/gpu/drm/panthor/panthor_fw.c | 1 drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 2 drivers/gpu/drm/scheduler/sched_main.c | 13 - drivers/gpu/drm/xe/xe_guc_submit.c | 13 + drivers/hid/hid-input.c | 5 drivers/hid/hid-multitouch.c | 28 +- drivers/iio/imu/inv_icm42600/inv_icm42600_core.c | 35 +- drivers/md/md-linear.c | 1 drivers/md/raid0.c | 16 + drivers/md/raid1.c | 37 ++- drivers/md/raid10.c | 55 ++++ drivers/md/raid5.c | 2 drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h | 2 drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c | 2 drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c | 225 +++++++------------ drivers/media/platform/nxp/imx8-isi/imx8-isi-pipe.c | 2 drivers/net/can/m_can/m_can.c | 84 ++++--- drivers/net/can/m_can/m_can.h | 1 drivers/net/can/m_can/m_can_platform.c | 2 drivers/net/can/usb/gs_usb.c | 23 - drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 1 drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 1 drivers/net/ethernet/broadcom/tg3.c | 5 drivers/net/ethernet/dlink/dl2k.c | 23 + drivers/net/ethernet/intel/ixgbevf/defines.h | 6 drivers/net/ethernet/intel/ixgbevf/ipsec.c | 10 drivers/net/ethernet/intel/ixgbevf/ixgbevf.h | 13 + drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 46 +++ drivers/net/ethernet/intel/ixgbevf/mbx.h | 8 drivers/net/ethernet/intel/ixgbevf/vf.c | 194 +++++++++++++--- drivers/net/ethernet/intel/ixgbevf/vf.h | 5 drivers/net/ethernet/realtek/r8169_main.c | 5 drivers/net/netdevsim/netdev.c | 7 drivers/net/usb/lan78xx.c | 38 ++- drivers/net/usb/r8152.c | 7 drivers/net/wireless/realtek/rtw89/core.c | 39 +-- drivers/net/wireless/realtek/rtw89/core.h | 6 drivers/net/wireless/realtek/rtw89/mac80211.c | 2 drivers/net/wireless/realtek/rtw89/pci.c | 2 drivers/nvme/host/multipath.c | 6 drivers/nvme/host/tcp.c | 3 drivers/phy/cadence/cdns-dphy.c | 131 ++++++++--- drivers/usb/gadget/function/f_acm.c | 42 +-- drivers/usb/gadget/function/f_ecm.c | 48 +--- drivers/usb/gadget/function/f_ncm.c | 78 ++---- drivers/usb/gadget/function/f_rndis.c | 85 ++----- drivers/usb/gadget/udc/core.c | 3 fs/btrfs/extent_io.c | 2 fs/btrfs/free-space-tree.c | 15 - fs/btrfs/ioctl.c | 2 fs/btrfs/relocation.c | 13 - fs/btrfs/zoned.c | 2 fs/dax.c | 2 fs/dcache.c | 12 - fs/ext4/ext4_jbd2.c | 11 fs/ext4/inode.c | 8 fs/f2fs/data.c | 2 fs/hfsplus/unicode.c | 24 ++ fs/jbd2/transaction.c | 13 - fs/nfsd/blocklayout.c | 33 +- fs/nfsd/blocklayoutxdr.c | 171 ++++++++------ fs/nfsd/blocklayoutxdr.h | 8 fs/nfsd/flexfilelayout.c | 8 fs/nfsd/flexfilelayoutxdr.c | 3 fs/nfsd/nfs4layouts.c | 1 fs/nfsd/nfs4proc.c | 36 +-- fs/nfsd/nfs4xdr.c | 25 -- fs/nfsd/nfsd.h | 1 fs/nfsd/pnfs.h | 1 fs/nfsd/xdr4.h | 39 +++ fs/smb/client/inode.c | 6 fs/smb/client/misc.c | 17 + fs/smb/client/smb2ops.c | 8 fs/smb/server/mgmt/user_session.c | 7 fs/smb/server/smb2pdu.c | 9 fs/smb/server/transport_ipc.c | 12 + fs/xfs/libxfs/xfs_log_format.h | 30 ++ fs/xfs/libxfs/xfs_ondisk.h | 2 fs/xfs/scrub/reap.c | 9 fs/xfs/xfs_log.c | 8 fs/xfs/xfs_log_priv.h | 4 fs/xfs/xfs_log_recover.c | 34 ++ include/linux/mm.h | 2 include/linux/pci.h | 14 + include/linux/pm_runtime.h | 4 include/linux/usb/gadget.h | 25 ++ include/net/dst.h | 32 ++ include/net/inet6_hashtables.h | 2 include/net/inet_connection_sock.h | 3 include/net/inet_hashtables.h | 2 include/net/ip.h | 11 include/net/ip_tunnels.h | 15 + include/net/route.h | 2 io_uring/rw.c | 2 kernel/events/core.c | 8 kernel/padata.c | 6 kernel/sched/fair.c | 26 +- mm/slub.c | 9 net/core/dst.c | 4 net/core/sock.c | 14 - net/ipv4/icmp.c | 24 +- net/ipv4/igmp.c | 2 net/ipv4/ip_fragment.c | 2 net/ipv4/ip_output.c | 19 + net/ipv4/ip_tunnel.c | 14 - net/ipv4/ip_vti.c | 4 net/ipv4/netfilter.c | 4 net/ipv4/route.c | 8 net/ipv4/tcp_fastopen.c | 4 net/ipv4/tcp_input.c | 3 net/ipv4/tcp_ipv4.c | 12 - net/ipv4/tcp_metrics.c | 8 net/ipv4/tcp_output.c | 19 + net/ipv4/xfrm4_output.c | 2 net/ipv6/ip6_tunnel.c | 3 net/ipv6/tcp_ipv6.c | 22 - net/mptcp/ctrl.c | 9 net/tls/tls_main.c | 7 net/tls/tls_sw.c | 31 ++ rust/bindings/bindings_helper.h | 1 sound/firewire/amdtp-stream.h | 2 sound/soc/amd/acp/acp-sdw-sof-mach.c | 2 sound/soc/codecs/idt821034.c | 12 - sound/soc/codecs/nau8821.c | 53 +++- sound/usb/card.c | 10 tools/testing/selftests/bpf/prog_tests/arg_parsing.c | 12 - 161 files changed, 1901 insertions(+), 955 deletions(-)
Adrian Hunter (3):
perf/core: Fix address filter match with backing files perf/core: Fix MMAP event path names with backing files perf/core: Fix MMAP2 event device with backing files
Akhil P Oommen (1):
drm/msm/a6xx: Fix PDC sleep sequence
Al Viro (1):
d_alloc_parallel(): set DCACHE_PAR_LOOKUP earlier
Alex Deucher (3):
drm/amdgpu: add ip offset support for cyan skillfish drm/amdgpu: add support for cyan skillfish without IP discovery drm/amdgpu: fix handling of harvesting for ip_discovery firmware
Alexey Simakov (1):
tg3: prevent use of uninitialized remote_adv and local_adv variables
Alok Tiwari (1):
drm/rockchip: vop2: use correct destination rectangle height check
Amit Chaudhary (1):
nvme-multipath: Skip nr_active increments in RETRY disposition
Andrii Nakryiko (1):
selftests/bpf: make arg_parsing.c more robust to crashes
Babu Moger (2):
x86/resctrl: Refactor resctrl_arch_rmid_read()
x86/resctrl: Fix miscount of bandwidth event when reactivating previously unavailable RMID
Bence Csókás (1):
PM: runtime: Add new devm functions
Benjamin Tissoires (1):
HID: multitouch: fix sticky fingers
Boris Burkov (1):
btrfs: fix incorrect readahead expansion length
Breno Leitao (1):
netdevsim: set the carrier when the device goes up
Celeste Liu (2):
can: gs_usb: gs_make_candev(): populate net_device->dev_port
can: gs_usb: increase max interface to U8_MAX
Christoph Hellwig (2):
xfs: rename the old_crc variable in xlog_recover_process
xfs: fix log CRC mismatches between i386 and other architectures
Christophe Leroy (1):
ASoC: codecs: Fix gain setting ranges for Renesas IDT821034 codec
Chuck Lever (1):
NFSD: Define a proc_layoutcommit for the FlexFiles layout type
Conor Dooley (1):
rust: cfi: only 64-bit arm and x86 support CFI_CLANG
Cristian Ciocaltea (3):
ASoC: nau8821: Cancel jdet_work before handling jack ejection
ASoC: nau8821: Generalize helper to clear IRQ status
ASoC: nau8821: Add DMI quirk to bypass jack debounce circuit
Darrick J. Wong (1):
xfs: use deferred intent items for reaping crosslinked blocks
Deepanshu Kartikey (1):
ext4: detect invalid INLINE_DATA + EXTENTS flag combination
Devarsh Thakkar (2):
phy: cadence: cdns-dphy: Fix PLL lock and O_CMN_READY polling
phy: cadence: cdns-dphy: Update calibration wait time for startup state machine
Dmitry Safonov (1):
net/ip6_tunnel: Prevent perpetual tunnel growth
Dmitry Torokhov (1):
HID: hid-input: only ignore 0 battery events for digitizers
Eric Dumazet (5):
tcp: fix tcp_tso_should_defer() vs large RTT
tcp: convert to dev_net_rcu()
tcp: cache RTAX_QUICKACK metric in a hot cache line
net: dst: add four helpers to annotate data-races around dst->dev
ipv4: adopt dst_dev, skb_dst_dev and skb_dst_dev_net[_rcu]
Eugene Korenevsky (1):
cifs: parse_dfs_referrals: prevent oob on malformed input
Fabian Vogt (1):
riscv: kprobes: Fix probe address validation
Fedor Pchelkin (1):
wifi: rtw89: avoid possible TX wait initialization race
Filipe Manana (2):
btrfs: fix clearing of BTRFS_FS_RELOC_RUNNING if relocation already running
btrfs: do not assert we found block group item when creating free space tree
Francesco Valla (1):
drm/draw: fix color truncation in drm_draw_fill24
Greg Kroah-Hartman (1):
Linux 6.12.55
Guenter Roeck (1):
dmaengine: Add missing cleanup on module unload
Gui-Dong Han (1):
drm/amdgpu: use atomic functions with memory barriers for vm fault info
Guoniu Zhou (1):
media: nxp: imx8-isi: m2m: Fix streaming cleanup on release
Hao Ge (1):
slab: reset slab->obj_ext when freeing and it is OBJEXTS_ALLOC_FAIL
I Viswanath (1):
net: usb: lan78xx: fix use of improperly initialized dev->chipid in lan78xx_reset
Jaegeuk Kim (1):
f2fs: fix wrong block mapping for multi-devices
Jakub Acs (1):
mm/ksm: fix flag-dropping behavior in ksm_madvise
Jan Kara (1):
vfs: Don't leak disconnected dentries on umount
Jedrzej Jagielski (2):
ixgbevf: fix getting link speed data for E610 devices
ixgbevf: fix mailbox API compatibility by negotiating supported features
Jeffrey Hugo (1):
accel/qaic: Fix bootlog initialization ordering
Jens Axboe (1):
Revert "io_uring/rw: drop -EOPNOTSUPP check in __io_complete_rw_common()"
Jiaming Zhang (1):
ALSA: usb-audio: Fix NULL pointer deference in try_to_register_card
Jiri Slaby (SUSE) (1):
irqdomain: cdx: Switch to of_fwnode_handle()
John Garry (3):
md/raid0: Handle bio_split() errors
md/raid1: Handle bio_split() errors
md/raid10: Handle bio_split() errors
Jonathan Kim (1):
drm/amdgpu: fix gfx12 mes packet status return check
Kaustabh Chakraborty (3):
drm/exynos: exynos7_drm_decon: fix uninitialized crtc reference in functions drm/exynos: exynos7_drm_decon: properly clear channels during bind drm/exynos: exynos7_drm_decon: remove ctx->suspended
Ketil Johnsen (1):
drm/panthor: Ensure MCU is disabled on suspend
Kuen-Han Tsai (6):
usb: gadget: Store endpoint pointer in usb_request
usb: gadget: Introduce free_usb_request helper
usb: gadget: f_ncm: Refactor bind path to use __free()
usb: gadget: f_acm: Refactor bind path to use __free()
usb: gadget: f_ecm: Refactor bind path to use __free()
usb: gadget: f_rndis: Refactor bind path to use __free()
Kuniyuki Iwashima (2):
mptcp: Call dst_release() in mptcp_active_enable().
mptcp: Use __sk_dst_get() and dst_dev_rcu() in mptcp_active_enable().
Laurent Pinchart (1):
media: nxp: imx8-isi: Drop unused argument to mxc_isi_channel_chain()
Li Qiang (1):
ASoC: amd/sdw_utils: avoid NULL deref when devm_kasprintf() fails
Linmao Li (1):
r8169: fix packet truncation after S4 resume on RTL8168H/RTL8111H
Marc Kleine-Budde (4):
can: m_can: m_can_plat_remove(): add missing pm_runtime_disable()
can: m_can: m_can_handle_state_errors(): fix CAN state transition to Error Active
can: m_can: m_can_chip_config(): bring up interface in correct state
can: m_can: fix CAN state in system PM
Marek Vasut (1):
drm/bridge: lt9211: Drop check for last nibble of version register
Mario Limonciello (1):
drm/amd: Check whether secure display TA loaded successfully
Marios Makassikis (1):
ksmbd: fix recursive locking in RPC handle list access
Mark Rutland (2):
arm64: cputype: Add Neoverse-V3AE definitions
arm64: errata: Apply workarounds for Neoverse-V3AE
Matthieu Baerts (NGI0) (1):
mptcp: reset blackhole on success with non-loopback ifaces
Miaoqian Lin (1):
cdx: Fix device node reference leak in cdx_msi_domain_init
Miquel Sabaté Solà (2):
btrfs: fix memory leak on duplicated memory in the qgroup assign ioctl
btrfs: fix memory leaks when rejecting a non SINGLE data profile without an RST
Nicolas Dichtel (1):
doc: fix seg6_flowlabel path
Oleksij Rempel (1):
net: usb: lan78xx: Add error handling to lan78xx_init_mac_address
Piotr Kwapulinski (2):
PCI: Add PCI_VDEVICE_SUB helper macro
ixgbevf: Add support for Intel(R) E610 device
Pranjal Ramajor Asha Kanojiya (1):
accel/qaic: Synchronize access to DBC request queue head & tail pointer
Rafael J. Wysocki (1):
cpufreq: CPPC: Avoid using CPUFREQ_ETERNAL as transition delay
Raju Rangoju (1):
amd-xgbe: Avoid spurious link down messages during interface toggle
Randy Dunlap (1):
ALSA: firewire: amdtp-stream: fix enum kernel-doc warnings
Sabrina Dubroca (5):
tls: trim encrypted message to match the plaintext on short splice
tls: wait for async encrypt in case of error during latter iterations of sendmsg
tls: always set record_type in tls_process_cmsg
tls: wait for pending async decryptions if tls_strp_msg_hold fails
tls: don't rely on tx_work during send()
Sean Nyekjaer (4):
can: m_can: add deinit callback
can: m_can: call deinit/init callback when going into suspend/resume
iio: imu: inv_icm42600: Simplify pm_runtime setup
iio: imu: inv_icm42600: Avoid configuring if already pm_runtime suspended
Sergey Bashirov (6):
nfsd: Use correct error code when decoding extents
nfsd: Drop dprintk in blocklayout xdr functions
NFSD: Rework encoding and decoding of nfsd4_deviceid
NFSD: Minor cleanup in layoutcommit processing
NFSD: Implement large extent array support in pNFS
NFSD: Fix last write offset handling in layoutcommit
Sharath Chandra Vurukala (1):
net: Add locking to protect skb->dev access in ip_output
Shuhao Fu (1):
smb: client: Fix refcount leak for cifs_sb_tlink
Shuicheng Lin (1):
drm/xe/guc: Check GuC running state before deregistering exec queue
Thadeu Lima de Souza Cascardo (1):
HID: multitouch: fix name of Stylus input devices
Timur Kristóf (1):
drm/amd/powerplay: Fix CIK shutdown temperature
Tomi Valkeinen (1):
phy: cdns-dphy: Store hs_clk_rate and return it
Tvrtko Ursulin (1):
drm/sched: Fix potential double free in drm_sched_job_add_resv_dependencies
Viacheslav Dubeyko (1):
hfsplus: fix slab-out-of-bounds read in hfsplus_strcasecmp()
Vincent Guittot (1):
sched/fair: Fix pelt lost idle time detection
Wilfred Mallawa (1):
nvme/tcp: handle tls partially sent records in write_space()
Xiao Liang (1):
padata: Reset next CPU when reorder sequence wraps around
Xing Guo (1):
selftests: arg_parsing: Ensure data is flushed to disk before reading.
Yeounsu Moon (1):
net: dlink: handle dma_map_single() failure properly
Yi Cong (1):
r8152: add error handling in rtl8152_driver_init
Youssef Samir (1):
accel/qaic: Treat remaining == 0 as error in find_and_map_user_pages()
Yu Kuai (1):
md: fix mssing blktrace bio split events
Yuezhang Mo (1):
dax: skip read lock assertion for read-only filesystems
Zhang Yi (2):
jbd2: ensure that all ongoing I/O complete before freeing blocks
ext4: wait for ongoing I/O to complete before freeing blocks
Zhanjun Dong (1):
drm/i915/guc: Skip communication warning on reset in progress
Greg Kroah-Hartman
maintainerDocumentation/arch/arm64/silicon-errata.rst +2 -0
@@ -198,6 +198,8 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | ARM | Neoverse-V3 | #3312417 | ARM64_ERRATUM_3194386 | +----------------+-----------------+-----------------+-----------------------------+ +| ARM | Neoverse-V3AE | #3312417 | ARM64_ERRATUM_3194386 | ++----------------+-----------------+-----------------+-----------------------------+ | ARM | MMU-500 | #841119,826419 | N/A | +----------------+-----------------+-----------------+-----------------------------+ | ARM | MMU-600 | #1076982,1209401| N/A |
Documentation/networking/seg6-sysctl.rst +3 -0
@@ -25,6 +25,9 @@ seg6_require_hmac - INTEGER Default is 0. +/proc/sys/net/ipv6/seg6_* variables: +==================================== + seg6_flowlabel - INTEGER Controls the behaviour of computing the flowlabel of outer IPv6 header in case of SR T.encaps
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 12 -SUBLEVEL = 54 +SUBLEVEL = 55 EXTRAVERSION = NAME = Baby Opossum Posse
arch/Kconfig +1 -0
@@ -861,6 +861,7 @@ config HAVE_CFI_ICALL_NORMALIZE_INTEGERS_RUSTC def_bool y depends on HAVE_CFI_ICALL_NORMALIZE_INTEGERS_CLANG depends on RUSTC_VERSION >= 107900 + depends on ARM64 || X86_64 # With GCOV/KASAN we need this fix: https://github.com/rust-lang/rust/pull/129373 depends on (RUSTC_LLVM_VERSION >= 190103 && RUSTC_VERSION >= 108200) || \ (!GCOV_KERNEL && !KASAN_GENERIC && !KASAN_SW_TAGS)
arch/arm64/Kconfig +1 -0
@@ -1111,6 +1111,7 @@ config ARM64_ERRATUM_3194386 * ARM Neoverse-V1 erratum 3324341 * ARM Neoverse V2 erratum 3324336 * ARM Neoverse-V3 erratum 3312417 + * ARM Neoverse-V3AE erratum 3312417 On affected cores "MSR SSBS, #0" instructions may not affect subsequent speculative instructions, which may permit unexepected
arch/arm64/include/asm/cputype.h +2 -0
@@ -93,6 +93,7 @@#define ARM_CPU_PART_NEOVERSE_V2 0xD4F#define ARM_CPU_PART_CORTEX_A720 0xD81#define ARM_CPU_PART_CORTEX_X4 0xD82 +#define ARM_CPU_PART_NEOVERSE_V3AE 0xD83#define ARM_CPU_PART_NEOVERSE_V3 0xD84#define ARM_CPU_PART_CORTEX_X925 0xD85#define ARM_CPU_PART_CORTEX_A725 0xD87
@@ -180,6 +181,7 @@#define MIDR_NEOVERSE_V2 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_V2)#define MIDR_CORTEX_A720 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A720)#define MIDR_CORTEX_X4 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X4) +#define MIDR_NEOVERSE_V3AE MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_V3AE)#define MIDR_NEOVERSE_V3 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_V3)#define MIDR_CORTEX_X925 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X925)#define MIDR_CORTEX_A725 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A725)
arch/arm64/kernel/cpu_errata.c +1 -0
@@ -455,6 +455,7 @@ static const struct midr_range erratum_spec_ssbs_list[] = {MIDR_ALL_VERSIONS (MIDR_NEOVERSE_V1 ),MIDR_ALL_VERSIONS (MIDR_NEOVERSE_V2 ),MIDR_ALL_VERSIONS (MIDR_NEOVERSE_V3 ), + MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V3AE), {} };#endif
arch/riscv/kernel/probes/kprobes.c +9 -4
@@ -49,10 +49,15 @@ static void __kprobes arch_simulate_insn(struct kprobe *p, struct pt_regs *regs)post_kprobe_handler (p, kcb, regs); } -static bool __kprobes arch_check_kprobe (struct kprobe *p) +static bool __kprobes arch_check_kprobe (unsigned long addr) { -unsigned long tmp = (unsigned long )p->addr - p->offset; -unsigned long addr = (unsigned long )p->addr; +unsigned long tmp, offset; + +/* start iterating at the closest preceding symbol */ +if (!kallsyms_lookup_size_offset (addr,NULL , &offset)) +return false; + + tmp = addr - offset;while (tmp <= addr) {if (tmp == addr)
@@ -71,7 +76,7 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p)if ((unsigned long )insn &0x1 )return -EILSEQ ; -if (!arch_check_kprobe (p)) +if (!arch_check_kprobe ((unsigned long )p->addr))return -EILSEQ ;/* copy instruction */
arch/x86/kernel/cpu/resctrl/monitor.c +29 -15
66 lines not on this page · raw message
drivers/accel/qaic/qaic.h +2 -0
@@ -91,6 +91,8 @@ struct dma_bridge_chan {* response queue's head and tail pointer of this DBC. */ void __iomem *dbc_base; +/* Synchronizes access to Request queue's head and tail pointer */ +struct mutex req_lock;/* Head of list where each node is a memory handle queued in request queue */ struct list_head xfer_list;/* Synchronizes DBC readers during cleanup */
drivers/accel/qaic/qaic_control.c +1 -1
@@ -407,7 +407,7 @@ static int find_and_map_user_pages(struct qaic_device *qdev,return -EINVAL ; remaining = in_trans->size - resources->xferred_dma_size;if (remaining ==0 ) -return 0 ; +return -EINVAL ;if (check_add_overflow (xfer_start_addr, remaining, &end))return -EINVAL ;
drivers/accel/qaic/qaic_data.c +10 -2
@@ -1357,13 +1357,17 @@ static int __qaic_execute_bo_ioctl(struct drm_device *dev, void *data, struct dr goto release_ch_rcu; } + ret =mutex_lock_interruptible (&dbc->req_lock); +if (ret) + goto release_ch_rcu; + head =readl (dbc->dbc_base +REQHP_OFF ); tail =readl (dbc->dbc_base +REQTP_OFF );if (head ==U32_MAX || tail ==U32_MAX ) {/* PCI link error */ ret = -ENODEV ; - goto release_ch_rcu; + goto unlock_req_lock; } queue_level = head <= tail ? tail - head : dbc->nelem - (head - tail);
@@ -1371,11 +1375,12 @@ static int __qaic_execute_bo_ioctl(struct drm_device *dev, void *data, struct dr ret =send_bo_list_to_device (qdev, file_priv, exec, args->hdr.count, is_partial, dbc, head, &tail);if (ret) - goto release_ch_rcu; + goto unlock_req_lock;/* Finalize commit to hardware */ submit_ts =ktime_get_ns ();writel (tail, dbc->dbc_base +REQTP_OFF ); +mutex_unlock (&dbc->req_lock);update_profiling_data (file_priv, exec, args->hdr.count, is_partial, received_ts, submit_ts, queue_level);
@@ -1383,6 +1388,9 @@ static int __qaic_execute_bo_ioctl(struct drm_device *dev, void *data, struct drif (datapath_polling)schedule_work (&dbc->poll_work); +unlock_req_lock: +if (ret) +mutex_unlock (&dbc->req_lock); release_ch_rcu:srcu_read_unlock (&dbc->ch_lock, rcu_id); unlock_dev_srcu:
drivers/accel/qaic/qaic_debugfs.c +3 -2
@@ -251,6 +251,9 @@ static int qaic_bootlog_mhi_probe(struct mhi_device *mhi_dev, const struct mhi_dif (ret) goto destroy_workqueue; +dev_set_drvdata (&mhi_dev->dev, qdev); + qdev->bootlog_ch = mhi_dev; +for (i =0 ; i <BOOTLOG_POOL_SIZE ; i++) { msg =devm_kzalloc (&qdev->pdev->dev,sizeof (*msg),GFP_KERNEL );if (!msg) {
@@ -266,8 +269,6 @@ static int qaic_bootlog_mhi_probe(struct mhi_device *mhi_dev, const struct mhi_d goto mhi_unprepare; } -dev_set_drvdata (&mhi_dev->dev, qdev); - qdev->bootlog_ch = mhi_dev;return 0 ; mhi_unprepare:
drivers/accel/qaic/qaic_drv.c +3 -0
@@ -422,6 +422,9 @@ static struct qaic_device *create_qdev(struct pci_dev *pdev, const struct pci_dereturn NULL ;init_waitqueue_head (&qdev->dbc[i].dbc_release);INIT_LIST_HEAD (&qdev->dbc[i].bo_lists); + ret =drmm_mutex_init (drm, &qdev->dbc[i].req_lock); +if (ret) +return NULL ; }return qdev;
drivers/base/power/runtime.c +44 -0
56 lines not on this page · raw message
drivers/cdx/cdx_msi.c +3 -2
@@ -165,7 +165,7 @@ struct irq_domain *cdx_msi_domain_init(struct device *dev)struct device_node *parent_node;struct irq_domain *parent; - fwnode_handle =of_node_to_fwnode (np); + fwnode_handle =of_fwnode_handle (np); parent_node =of_parse_phandle (np,"msi-map" ,1 );if (!parent_node) {
@@ -173,7 +173,8 @@ struct irq_domain *cdx_msi_domain_init(struct device *dev)return NULL ; } - parent =irq_find_matching_fwnode (of_node_to_fwnode (parent_node),DOMAIN_BUS_NEXUS ); + parent =irq_find_matching_fwnode (of_fwnode_handle (parent_node),DOMAIN_BUS_NEXUS ); +of_node_put (parent_node);if (!parent || !msi_get_domain_info (parent)) {dev_err (dev,"unable to locate ITS domain\n" );return NULL ;
drivers/cpufreq/cppc_cpufreq.c +12 -2
@@ -339,6 +339,16 @@ static int cppc_verify_policy(struct cpufreq_policy_data *policy)return 0 ; } +static unsigned int __cppc_cpufreq_get_transition_delay_us (unsigned int cpu) +{ +unsigned int transition_latency_ns =cppc_get_transition_latency (cpu); + +if (transition_latency_ns ==CPUFREQ_ETERNAL ) +return CPUFREQ_DEFAULT_TRANSITION_LATENCY_NS /NSEC_PER_USEC ; + +return transition_latency_ns /NSEC_PER_USEC ; +} +/* * The PCC subspace describes the rate at which platform can accept commands * on the shared PCC channel (including READs which do not count towards freq
@@ -361,12 +371,12 @@ static unsigned int cppc_cpufreq_get_transition_delay_us(unsigned int cpu) return 10000; } } -return cppc_get_transition_latency (cpu) /NSEC_PER_USEC ; +return __cppc_cpufreq_get_transition_delay_us (cpu); }#else static unsigned int cppc_cpufreq_get_transition_delay_us (unsigned int cpu) { -return cppc_get_transition_latency (cpu) /NSEC_PER_USEC ; +return __cppc_cpufreq_get_transition_delay_us (cpu); }#endif
drivers/dma/idxd/init.c +2 -0
@@ -923,6 +923,8 @@ static void idxd_remove(struct pci_dev *pdev)idxd_cleanup_interrupts (idxd);if (device_pasid_enabled (idxd))idxd_disable_system_pasid (idxd); +if (device_user_pasid_enabled (idxd)) +idxd_disable_sva (idxd->pdev);pci_iounmap (pdev, idxd->reg_base);put_device (idxd_confdev (idxd));pci_disable_device (pdev);
drivers/gpu/drm/amd/amdgpu/Makefile +2 -1
@@ -83,7 +83,8 @@ amdgpu-y += \ vega20_reg_init.o nbio_v7_4.o nbio_v2_3.o nv.o arct_reg_init.o mxgpu_nv.o \ nbio_v7_2.o hdp_v4_0.o hdp_v5_0.o aldebaran_reg_init.o aldebaran.o soc21.o soc24.o \ sienna_cichlid.o smu_v13_0_10.o nbio_v4_3.o hdp_v6_0.o nbio_v7_7.o hdp_v5_2.o lsdma_v6_0.o \ - nbio_v7_9.o aqua_vanjaram.o nbio_v7_11.o lsdma_v7_0.o hdp_v7_0.o nbif_v6_3_1.o + nbio_v7_9.o aqua_vanjaram.o nbio_v7_11.o lsdma_v7_0.o hdp_v7_0.o nbif_v6_3_1.o \ + cyan_skillfish_reg_init.o # add DF block amdgpu-y += \
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +2 -3
@@ -2353,10 +2353,9 @@ void amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(struct kgd_mem *mem)int amdgpu_amdkfd_gpuvm_get_vm_fault_info (struct amdgpu_device *adev,struct kfd_vm_fault_info *mem) { -if (atomic_read (&adev->gmc.vm_fault_info_updated) ==1 ) { +if (atomic_read_acquire (&adev->gmc.vm_fault_info_updated) ==1 ) { *mem = *adev->gmc.vm_fault_info; -mb ();/* make sure read happened */ -atomic_set (&adev->gmc.vm_fault_info_updated,0 ); +atomic_set_release (&adev->gmc.vm_fault_info_updated,0 ); }return 0 ; }
drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c +47 -1
105 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +1 -1
@@ -2171,7 +2171,7 @@ static int psp_securedisplay_initialize(struct psp_context *psp) } ret =psp_ta_load (psp, &psp->securedisplay_context.context); -if (!ret) { +if (!ret && !psp->securedisplay_context.context.resp_status) { psp->securedisplay_context.context.initialized = true;mutex_init (&psp->securedisplay_context.mutex); }else
drivers/gpu/drm/amd/amdgpu/cyan_skillfish_reg_init.c new file +56 -0
56 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c +3 -4
@@ -1055,7 +1055,7 @@ static int gmc_v7_0_sw_init(void *handle) GFP_KERNEL);if (!adev->gmc.vm_fault_info)return -ENOMEM ; -atomic_set (&adev->gmc.vm_fault_info_updated,0 ); +atomic_set_release (&adev->gmc.vm_fault_info_updated,0 );return 0 ; }
@@ -1287,7 +1287,7 @@ static int gmc_v7_0_process_interrupt(struct amdgpu_device *adev, vmid =REG_GET_FIELD (status,VM_CONTEXT1_PROTECTION_FAULT_STATUS ,VMID );if (amdgpu_amdkfd_is_kfd_vmid (adev, vmid) - && !atomic_read (&adev->gmc.vm_fault_info_updated)) { + && !atomic_read_acquire (&adev->gmc.vm_fault_info_updated)) {struct kfd_vm_fault_info *info = adev->gmc.vm_fault_info; u32 protections = REG_GET_FIELD(status, VM_CONTEXT1_PROTECTION_FAULT_STATUS,
@@ -1303,8 +1303,7 @@ static int gmc_v7_0_process_interrupt(struct amdgpu_device *adev, info->prot_read = protections &0x8 ? true : false; info->prot_write = protections &0x10 ? true : false; info->prot_exec = protections &0x20 ? true : false; -mb (); -atomic_set (&adev->gmc.vm_fault_info_updated,1 ); +atomic_set_release (&adev->gmc.vm_fault_info_updated,1 ); }return 0 ;
drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c +3 -4
@@ -1168,7 +1168,7 @@ static int gmc_v8_0_sw_init(void *handle) GFP_KERNEL);if (!adev->gmc.vm_fault_info)return -ENOMEM ; -atomic_set (&adev->gmc.vm_fault_info_updated,0 ); +atomic_set_release (&adev->gmc.vm_fault_info_updated,0 );return 0 ; }
@@ -1468,7 +1468,7 @@ static int gmc_v8_0_process_interrupt(struct amdgpu_device *adev, vmid =REG_GET_FIELD (status,VM_CONTEXT1_PROTECTION_FAULT_STATUS ,VMID );if (amdgpu_amdkfd_is_kfd_vmid (adev, vmid) - && !atomic_read (&adev->gmc.vm_fault_info_updated)) { + && !atomic_read_acquire (&adev->gmc.vm_fault_info_updated)) {struct kfd_vm_fault_info *info = adev->gmc.vm_fault_info; u32 protections = REG_GET_FIELD(status, VM_CONTEXT1_PROTECTION_FAULT_STATUS,
@@ -1484,8 +1484,7 @@ static int gmc_v8_0_process_interrupt(struct amdgpu_device *adev, info->prot_read = protections &0x8 ? true : false; info->prot_write = protections &0x10 ? true : false; info->prot_exec = protections &0x20 ? true : false; -mb (); -atomic_set (&adev->gmc.vm_fault_info_updated,1 ); +atomic_set_release (&adev->gmc.vm_fault_info_updated,1 ); }return 0 ;
drivers/gpu/drm/amd/amdgpu/mes_v12_0.c +6 -1
@@ -224,7 +224,12 @@ static int mes_v12_0_submit_pkt_and_poll_completion(struct amdgpu_mes *mes, pipe, x_pkt->header.opcode); r =amdgpu_fence_wait_polling (ring, seq, timeout); -if (r <1 || !*status_ptr) { + +/* +* status_ptr[31:0] == 0 (fail) or status_ptr[63:0] == 1 (success). +* If status_ptr[31:0] == 0 then status_ptr[63:32] will have debug error information. +*/ +if (r <1 || !(lower_32_bits (*status_ptr))) {if (misc_op_str) dev_err(adev->dev, "MES(%d) failed to respond to msg=%s (%s)\n",
drivers/gpu/drm/amd/amdgpu/nv.h +1 -0
@@ -31,5 +31,6 @@ extern const struct amdgpu_ip_block_version nv_common_ip_block;void nv_grbm_select (struct amdgpu_device *adev,u32 me,u32 pipe,u32 queue,u32 vmid);void nv_set_virt_ops (struct amdgpu_device *adev); +int cyan_skillfish_reg_base_init (struct amdgpu_device *adev);#endif
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c +1 -2
@@ -5444,8 +5444,7 @@ static int smu7_get_thermal_temperature_range(struct pp_hwmgr *hwmgr, thermal_data->max = table_info->cac_dtp_table->usSoftwareShutdownTemp *PP_TEMPERATURE_UNITS_PER_CENTIGRADES ; else if (hwmgr->pp_table_version == PP_TABLE_V0) - thermal_data->max = data->thermal_temp_setting.temperature_shutdown * -PP_TEMPERATURE_UNITS_PER_CENTIGRADES ; + thermal_data->max = data->thermal_temp_setting.temperature_shutdown; thermal_data->sw_ctf_threshold = thermal_data->max;
drivers/gpu/drm/bridge/lontium-lt9211.c +1 -2
@@ -120,8 +120,7 @@ static int lt9211_read_chipid(struct lt9211 *ctx) }/* Test for known Chip ID. */ -if (chipid[0 ] !=REG_CHIPID0_VALUE || chipid[1 ] !=REG_CHIPID1_VALUE || - chipid[2 ] !=REG_CHIPID2_VALUE ) { +if (chipid[0 ] !=REG_CHIPID0_VALUE || chipid[1 ] !=REG_CHIPID1_VALUE ) {dev_err (ctx->dev,"Unknown Chip ID: 0x%02x 0x%02x 0x%02x\n" , chipid[0 ], chipid[1 ], chipid[2 ]);return -EINVAL ;
drivers/gpu/drm/drm_draw.c +1 -1
@@ -125,7 +125,7 @@ EXPORT_SYMBOL(drm_draw_fill16);void drm_draw_fill24 (struct iosys_map *dmap,unsigned int dpitch,unsigned int height,unsigned int width, -u16 color) +u32 color) {unsigned int y, x;
drivers/gpu/drm/drm_draw_internal.h +1 -1
@@ -47,7 +47,7 @@ void drm_draw_fill16(struct iosys_map *dmap, unsigned int dpitch,void drm_draw_fill24 (struct iosys_map *dmap,unsigned int dpitch,unsigned int height,unsigned int width, -u16 color); +u32 color); void drm_draw_fill32(struct iosys_map *dmap, unsigned int dpitch, unsigned int height, unsigned int width,
drivers/gpu/drm/exynos/exynos7_drm_decon.c +34 -64
217 lines not on this page · raw message
drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c +8 -1
@@ -1324,9 +1324,16 @@ static int ct_receive(struct intel_guc_ct *ct)static void ct_try_receive_message (struct intel_guc_ct *ct) { +struct intel_guc *guc =ct_to_guc (ct);int ret; -if (GEM_WARN_ON (!ct->enabled)) +if (!ct->enabled) { +GEM_WARN_ON (!guc_to_gt (guc)->uc.reset_in_progress); +return ; + } + +/* When interrupt disabled, message handling is not expected */ +if (!guc->interrupts.enabled)return ; ret =ct_receive (ct);
drivers/gpu/drm/msm/adreno/a6xx_gmu.c +17 -11
@@ -236,6 +236,8 @@ static int a6xx_gmu_start(struct a6xx_gmu *gmu)if (ret)DRM_DEV_ERROR (gmu->dev,"GMU firmware initialization timed out\n" ); +set_bit (GMU_STATUS_FW_START , &gmu->status); +return ret; }
@@ -482,6 +484,9 @@ static int a6xx_rpmh_start(struct a6xx_gmu *gmu)int ret;u32 val; +if (!test_and_clear_bit (GMU_STATUS_PDC_SLEEP , &gmu->status)) +return 0 ; +gmu_write (gmu,REG_A6XX_GMU_RSCC_CONTROL_REQ ,BIT (1 )); ret = gmu_poll_timeout(gmu, REG_A6XX_GMU_RSCC_CONTROL_ACK, val,
@@ -509,6 +514,9 @@ static void a6xx_rpmh_stop(struct a6xx_gmu *gmu)int ret;u32 val; +if (test_and_clear_bit (GMU_STATUS_FW_START , &gmu->status)) +return ; +gmu_write (gmu,REG_A6XX_GMU_RSCC_CONTROL_REQ ,1 ); ret = gmu_poll_timeout_rscc(gmu, REG_A6XX_GPU_RSCC_RSC_STATUS0_DRV0,
@@ -517,6 +525,8 @@ static void a6xx_rpmh_stop(struct a6xx_gmu *gmu)DRM_DEV_ERROR (gmu->dev,"Unable to power off the GPU RSC\n" );gmu_write (gmu,REG_A6XX_GMU_RSCC_CONTROL_REQ ,0 ); + +set_bit (GMU_STATUS_PDC_SLEEP , &gmu->status); }static inline void pdc_write (void __iomem *ptr,u32 offset,u32 value)
@@ -645,8 +655,6 @@ static void a6xx_gmu_rpmh_init(struct a6xx_gmu *gmu)/* ensure no writes happen before the uCode is fully written */ wmb (); -a6xx_rpmh_stop (gmu); - err:if (!IS_ERR_OR_NULL (pdcptr))iounmap (pdcptr);
@@ -799,19 +807,15 @@ static int a6xx_gmu_fw_start(struct a6xx_gmu *gmu, unsigned int state)else gmu_write (gmu,REG_A6XX_GMU_GENERAL_7 ,1 ); -if (state ==GMU_WARM_BOOT ) { - ret =a6xx_rpmh_start (gmu); -if (ret) -return ret; - }else { + ret =a6xx_rpmh_start (gmu); +if (ret) +return ret; + +if (state ==GMU_COLD_BOOT ) {if (WARN (!adreno_gpu->fw[ADRENO_FW_GMU ],"GMU firmware is not loaded\n" ))return -ENOENT ; - ret =a6xx_rpmh_start (gmu); -if (ret) -return ret; - ret =a6xx_gmu_fw_load (gmu);if (ret)return ret;
@@ -980,6 +984,8 @@ static void a6xx_gmu_force_off(struct a6xx_gmu *gmu)/* Reset GPU core blocks */ a6xx_gpu_sw_reset (gpu, true); + +a6xx_rpmh_stop (gmu); }static void a6xx_gmu_set_initial_freq (struct msm_gpu *gpu,struct a6xx_gmu *gmu)
drivers/gpu/drm/msm/adreno/a6xx_gmu.h +6 -0
@@ -99,6 +99,12 @@ struct a6xx_gmu {struct completion pd_gate;struct qmp *qmp; + +/* To check if we can trigger sleep seq at PDC. Cleared in a6xx_rpmh_stop() */ +#define GMU_STATUS_FW_START 0 +/* To track if PDC sleep seq was done */ +#define GMU_STATUS_PDC_SLEEP 1 +unsigned long status; };static inline u32 gmu_read (struct a6xx_gmu *gmu,u32 offset)
drivers/gpu/drm/panthor/panthor_fw.c +1 -0
@@ -1057,6 +1057,7 @@ void panthor_fw_pre_reset(struct panthor_device *ptdev, bool on_hang) }panthor_job_irq_suspend (&ptdev->fw->irq); +panthor_fw_stop (ptdev); }/**
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +1 -1
@@ -1118,7 +1118,7 @@ static int vop2_plane_atomic_check(struct drm_plane *plane,return format;if (drm_rect_width (src) >>16 <4 ||drm_rect_height (src) >>16 <4 || -drm_rect_width (dest) <4 ||drm_rect_width (dest) <4 ) { +drm_rect_width (dest) <4 ||drm_rect_height (dest) <4 ) {drm_err (vop2->drm,"Invalid size: %dx%d->%dx%d, min size is 4x4\n" ,drm_rect_width (src) >>16 ,drm_rect_height (src) >>16 ,drm_rect_width (dest),drm_rect_height (dest));
drivers/gpu/drm/scheduler/sched_main.c +7 -6
@@ -952,13 +952,14 @@ int drm_sched_job_add_resv_dependencies(struct drm_sched_job *job,dma_resv_assert_held (resv);dma_resv_for_each_fence (&cursor, resv, usage, fence) { -/* Make sure to grab an additional ref on the added fence */ -dma_fence_get (fence); - ret =drm_sched_job_add_dependency (job, fence); -if (ret) { -dma_fence_put (fence); +/* +* As drm_sched_job_add_dependency always consumes the fence +* reference (even when it fails), and dma_resv_for_each_fence +* is not obtaining one, we need to grab one before calling. +*/ + ret =drm_sched_job_add_dependency (job,dma_fence_get (fence)); +if (ret)return ret; - } }return 0 ; }
drivers/gpu/drm/xe/xe_guc_submit.c +12 -1
@@ -41,6 +41,7 @@#include "xe_ring_ops_types.h" #include "xe_sched_job.h" #include "xe_trace.h" +#include "xe_uc_fw.h" #include "xe_vm.h" static struct xe_guc *
@@ -1285,7 +1286,17 @@ static void __guc_exec_queue_process_msg_cleanup(struct xe_sched_msg *msg)xe_assert (xe, !(q->flags &EXEC_QUEUE_FLAG_PERMANENT ));trace_xe_exec_queue_cleanup_entity (q); -if (exec_queue_registered (q)) +/* +* Expected state transitions for cleanup: +* - If the exec queue is registered and GuC firmware is running, we must first +* disable scheduling and deregister the queue to ensure proper teardown and +* resource release in the GuC, then destroy the exec queue on driver side. +* - If the GuC is already stopped (e.g., during driver unload or GPU reset), +* we cannot expect a response for the deregister request. In this case, +* it is safe to directly destroy the exec queue on driver side, as the GuC +* will not process further requests and all resources must be cleaned up locally. +*/ +if (exec_queue_registered (q) &&xe_uc_fw_is_running (&guc->fw))disable_scheduling_deregister (guc, q);else __guc_exec_queue_fini (guc, q);
drivers/hid/hid-input.c +4 -1
@@ -622,7 +622,10 @@ static void hidinput_update_battery(struct hid_device *dev, unsigned int usage,return ; } -if (value ==0 || value < dev->battery_min || value > dev->battery_max) +if ((usage &HID_USAGE_PAGE ) ==HID_UP_DIGITIZER && value ==0 ) +return ; + +if (value < dev->battery_min || value > dev->battery_max)return ; capacity =hidinput_scale_battery_capacity (dev, value);
drivers/hid/hid-multitouch.c +15 -13
@@ -83,9 +83,8 @@ enum latency_mode { HID_LATENCY_HIGH = 1, }; -#define MT_IO_FLAGS_RUNNING 0 -#define MT_IO_FLAGS_ACTIVE_SLOTS 1 -#define MT_IO_FLAGS_PENDING_SLOTS 2 +#define MT_IO_SLOTS_MASK GENMASK(7, 0)/* reserve first 8 bits for slot tracking */ +#define MT_IO_FLAGS_RUNNING 32static const bool mtrue = true;/* default for true */ static const bool mfalse;/* default for false */
@@ -160,7 +159,11 @@ struct mt_device {struct mt_class mtclass;/* our mt device class */ struct timer_list release_timer;/* to release sticky fingers */ struct hid_device *hdev;/* hid_device we're attached to */ -unsigned long mt_io_flags;/* mt flags (MT_IO_FLAGS_*) */ +unsigned long mt_io_flags;/* mt flags (MT_IO_FLAGS_RUNNING) +* first 8 bits are reserved for keeping the slot +* states, this is fine because we only support up +* to 250 slots (MT_MAX_MAXCONTACT) +*/ __u8 inputmode_value;/* InputMode HID feature value */ __u8 maxcontacts;bool is_buttonpad;/* is this device a button pad? */
@@ -941,6 +944,7 @@ static void mt_release_pending_palms(struct mt_device *td,for_each_set_bit (slotnum, app->pending_palm_slots, td->maxcontacts) {clear_bit (slotnum, app->pending_palm_slots); +clear_bit (slotnum, &td->mt_io_flags);input_mt_slot (input, slotnum);input_mt_report_slot_inactive (input);
@@ -972,12 +976,6 @@ static void mt_sync_frame(struct mt_device *td, struct mt_application *app, app->num_received =0 ; app->left_button_state =0 ; - -if (test_bit (MT_IO_FLAGS_ACTIVE_SLOTS , &td->mt_io_flags)) -set_bit (MT_IO_FLAGS_PENDING_SLOTS , &td->mt_io_flags); -else -clear_bit (MT_IO_FLAGS_PENDING_SLOTS , &td->mt_io_flags); -clear_bit (MT_IO_FLAGS_ACTIVE_SLOTS , &td->mt_io_flags); }static int mt_compute_timestamp (struct mt_application *app,__s32 value)
@@ -1152,7 +1150,9 @@ static int mt_process_slot(struct mt_device *td, struct input_dev *input,input_event (input,EV_ABS ,ABS_MT_TOUCH_MAJOR , major);input_event (input,EV_ABS ,ABS_MT_TOUCH_MINOR , minor); -set_bit (MT_IO_FLAGS_ACTIVE_SLOTS , &td->mt_io_flags); +set_bit (slotnum, &td->mt_io_flags); + }else { +clear_bit (slotnum, &td->mt_io_flags); }return 0 ;
@@ -1287,7 +1287,7 @@ static void mt_touch_report(struct hid_device *hid,* defect. */ if (app->quirks &MT_QUIRK_STICKY_FINGERS ) { -if (test_bit (MT_IO_FLAGS_PENDING_SLOTS , &td->mt_io_flags)) +if (td->mt_io_flags &MT_IO_SLOTS_MASK )mod_timer (&td->release_timer, jiffies +msecs_to_jiffies (100 ));else
@@ -1663,6 +1663,7 @@ static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)case HID_CP_CONSUMER_CONTROL :case HID_GD_WIRELESS_RADIO_CTLS :case HID_GD_SYSTEM_MULTIAXIS : +case HID_DG_PEN :/* already handled by hid core */ break ;case HID_DG_TOUCHSCREEN :
@@ -1734,6 +1735,7 @@ static void mt_release_contacts(struct hid_device *hid)for (i =0 ; i < mt->num_slots; i++) {input_mt_slot (input_dev, i);input_mt_report_slot_inactive (input_dev); +clear_bit (i, &td->mt_io_flags); }input_mt_sync_frame (input_dev);input_sync (input_dev);
@@ -1756,7 +1758,7 @@ static void mt_expired_timeout(struct timer_list *t)*/ if (test_and_set_bit_lock (MT_IO_FLAGS_RUNNING , &td->mt_io_flags))return ; -if (test_bit (MT_IO_FLAGS_PENDING_SLOTS , &td->mt_io_flags)) +if (td->mt_io_flags &MT_IO_SLOTS_MASK )mt_release_contacts (hdev);clear_bit_unlock (MT_IO_FLAGS_RUNNING , &td->mt_io_flags); }
drivers/iio/imu/inv_icm42600/inv_icm42600_core.c +13 -22
@@ -667,20 +667,12 @@ static void inv_icm42600_disable_vdd_reg(void *_data)static void inv_icm42600_disable_vddio_reg (void *_data) {struct inv_icm42600_state *st = _data; -const struct device *dev =regmap_get_device (st->map); -int ret; - - ret =regulator_disable (st->vddio_supply); -if (ret) -dev_err (dev,"failed to disable vddio error %d\n" , ret); -} +struct device *dev =regmap_get_device (st->map); -static void inv_icm42600_disable_pm (void *_data) -{ -struct device *dev = _data; +if (pm_runtime_status_suspended (dev)) +return ; -pm_runtime_put_sync (dev); -pm_runtime_disable (dev); +regulator_disable (st->vddio_supply); } int inv_icm42600_core_probe(struct regmap *regmap, int chip, int irq,
@@ -777,16 +769,14 @@ int inv_icm42600_core_probe(struct regmap *regmap, int chip, int irq,return ret;/* setup runtime power management */ - ret =pm_runtime_set_active (dev); + ret =devm_pm_runtime_set_active_enabled (dev);if (ret)return ret; -pm_runtime_get_noresume (dev); -pm_runtime_enable (dev); +pm_runtime_set_autosuspend_delay (dev,INV_ICM42600_SUSPEND_DELAY_MS );pm_runtime_use_autosuspend (dev); -pm_runtime_put (dev); -return devm_add_action_or_reset (dev, inv_icm42600_disable_pm, dev); +return ret; }EXPORT_SYMBOL_NS_GPL (inv_icm42600_core_probe,IIO_ICM42600 );
@@ -797,17 +787,15 @@ EXPORT_SYMBOL_NS_GPL(inv_icm42600_core_probe, IIO_ICM42600);static int inv_icm42600_suspend (struct device *dev) {struct inv_icm42600_state *st =dev_get_drvdata (dev); -int ret; +int ret =0 ;mutex_lock (&st->lock); st->suspended.gyro = st->conf.gyro.mode; st->suspended.accel = st->conf.accel.mode; st->suspended.temp = st->conf.temp_en; -if (pm_runtime_suspended (dev)) { - ret =0 ; +if (pm_runtime_suspended (dev)) goto out_unlock; - }/* disable FIFO data streaming */ if (st->fifo.on) {
@@ -839,10 +827,13 @@ static int inv_icm42600_resume(struct device *dev)struct inv_icm42600_state *st =dev_get_drvdata (dev);struct inv_icm42600_sensor_state *gyro_st =iio_priv (st->indio_gyro);struct inv_icm42600_sensor_state *accel_st =iio_priv (st->indio_accel); -int ret; +int ret =0 ;mutex_lock (&st->lock); +if (pm_runtime_suspended (dev)) + goto out_unlock; + ret =inv_icm42600_enable_regulator_vddio (st);if (ret) goto out_unlock;
drivers/md/md-linear.c +1 -0
@@ -267,6 +267,7 @@ static bool linear_make_request(struct mddev *mddev, struct bio *bio) }bio_chain (split, bio); +trace_block_split (split, bio->bi_iter.bi_sector);submit_bio_noacct (bio); bio = split; }
drivers/md/raid0.c +16 -0
@@ -464,7 +464,15 @@ static void raid0_handle_discard(struct mddev *mddev, struct bio *bio)struct bio *split =bio_split (bio, zone->zone_end - bio->bi_iter.bi_sector,GFP_NOIO , &mddev->bio_set); + +if (IS_ERR (split)) { + bio->bi_status =errno_to_blk_status (PTR_ERR (split)); +bio_endio (bio); +return ; + } +bio_chain (split, bio); +trace_block_split (split, bio->bi_iter.bi_sector);submit_bio_noacct (bio); bio = split; end = zone->zone_end;
@@ -606,7 +614,15 @@ static bool raid0_make_request(struct mddev *mddev, struct bio *bio)if (sectors <bio_sectors (bio)) {struct bio *split =bio_split (bio, sectors,GFP_NOIO , &mddev->bio_set); + +if (IS_ERR (split)) { + bio->bi_status =errno_to_blk_status (PTR_ERR (split)); +bio_endio (bio); +return true; + } +bio_chain (split, bio); +trace_block_split (split, bio->bi_iter.bi_sector);raid0_map_submit_bio (mddev, bio); bio = split; }
drivers/md/raid1.c +35 -2
@@ -1317,7 +1317,7 @@ static void raid1_read_request(struct mddev *mddev, struct bio *bio,struct raid1_info *mirror;struct bio *read_bio;int max_sectors; -int rdisk; +int rdisk, error;bool r1bio_existed = !!r1_bio;/*
@@ -1378,7 +1378,14 @@ static void raid1_read_request(struct mddev *mddev, struct bio *bio,if (max_sectors <bio_sectors (bio)) {struct bio *split =bio_split (bio, max_sectors, gfp, &conf->bio_split); + +if (IS_ERR (split)) { + error =PTR_ERR (split); + goto err_handle; + } +bio_chain (split, bio); +trace_block_split (split, bio->bi_iter.bi_sector);submit_bio_noacct (bio); bio = split; r1_bio->master_bio = bio;
@@ -1404,6 +1411,13 @@ static void raid1_read_request(struct mddev *mddev, struct bio *bio, read_bio->bi_private = r1_bio;mddev_trace_remap (mddev, read_bio, r1_bio->sector);submit_bio_noacct (read_bio); +return ; + +err_handle: +atomic_dec (&mirror->rdev->nr_pending); + bio->bi_status =errno_to_blk_status (error); +set_bit (R1BIO_Uptodate, &r1_bio->state); +raid_end_bio_io (r1_bio); } static void raid1_write_request(struct mddev *mddev, struct bio *bio,
@@ -1411,7 +1425,7 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio, {struct r1conf *conf = mddev->private;struct r1bio *r1_bio; -int i, disks; +int i, disks, k, error;unsigned long flags;struct md_rdev *blocked_rdev;int first_clone;
@@ -1557,7 +1571,14 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,if (max_sectors <bio_sectors (bio)) {struct bio *split =bio_split (bio, max_sectors,GFP_NOIO , &conf->bio_split); + +if (IS_ERR (split)) { + error =PTR_ERR (split); + goto err_handle; + } +bio_chain (split, bio); +trace_block_split (split, bio->bi_iter.bi_sector);submit_bio_noacct (bio); bio = split; r1_bio->master_bio = bio;
@@ -1640,6 +1661,18 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,/* In case raid1d snuck in to freeze_array */ wake_up_barrier (conf); +return ; +err_handle: +for (k =0 ; k < i; k++) { +if (r1_bio->bios[k]) { +rdev_dec_pending (conf->mirrors[k].rdev, mddev); + r1_bio->bios[k] =NULL ; + } + } + + bio->bi_status =errno_to_blk_status (error); +set_bit (R1BIO_Uptodate, &r1_bio->state); +raid_end_bio_io (r1_bio); }static bool raid1_make_request (struct mddev *mddev,struct bio *bio)
drivers/md/raid10.c +54 -1
109 lines not on this page · raw message
drivers/md/raid5.c +2 -0
@@ -5484,8 +5484,10 @@ static struct bio *chunk_aligned_read(struct mddev *mddev, struct bio *raid_bio)if (sectors <bio_sectors (raid_bio)) {struct r5conf *conf = mddev->private; + split =bio_split (raid_bio, sectors,GFP_NOIO , &conf->bio_split);bio_chain (split, raid_bio); +trace_block_split (split, raid_bio->bi_iter.bi_sector);submit_bio_noacct (raid_bio); raid_bio = split; }
drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h +1 -1
@@ -361,7 +361,7 @@ void mxc_isi_channel_get(struct mxc_isi_pipe *pipe);void mxc_isi_channel_put (struct mxc_isi_pipe *pipe);void mxc_isi_channel_enable (struct mxc_isi_pipe *pipe);void mxc_isi_channel_disable (struct mxc_isi_pipe *pipe); -int mxc_isi_channel_chain (struct mxc_isi_pipe *pipe,bool bypass); +int mxc_isi_channel_chain (struct mxc_isi_pipe *pipe);void mxc_isi_channel_unchain (struct mxc_isi_pipe *pipe); void mxc_isi_channel_config(struct mxc_isi_pipe *pipe,
drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c +1 -1
@@ -587,7 +587,7 @@ void mxc_isi_channel_release(struct mxc_isi_pipe *pipe)* * TODO: Support secondary line buffer for downscaling YUV420 images. */ -int mxc_isi_channel_chain (struct mxc_isi_pipe *pipe,bool bypass) +int mxc_isi_channel_chain (struct mxc_isi_pipe *pipe) {/* Channel chaining requires both line and output buffer. */ const u8 resources =MXC_ISI_CHANNEL_RES_OUTPUT_BUF
drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c +92 -133
263 lines not on this page · raw message
drivers/media/platform/nxp/imx8-isi/imx8-isi-pipe.c +1 -1
@@ -855,7 +855,7 @@ int mxc_isi_pipe_acquire(struct mxc_isi_pipe *pipe,/* Chain the channel if needed for wide resolutions. */ if (sink_fmt->width >MXC_ISI_MAX_WIDTH_UNCHAINED ) { - ret =mxc_isi_channel_chain (pipe, bypass); + ret =mxc_isi_channel_chain (pipe);if (ret)mxc_isi_channel_release (pipe); }
drivers/net/can/m_can/m_can.c +54 -30
168 lines not on this page · raw message
drivers/net/can/m_can/m_can.h +1 -0
@@ -68,6 +68,7 @@ struct m_can_ops {int (*write_fifo)(struct m_can_classdev *cdev,int addr_offset,const void *val,size_t val_count);int (*init)(struct m_can_classdev *cdev); +int (*deinit)(struct m_can_classdev *cdev); };struct m_can_tx_op {
drivers/net/can/m_can/m_can_platform.c +1 -1
@@ -180,7 +180,7 @@ static void m_can_plat_remove(struct platform_device *pdev)struct m_can_classdev *mcan_class = &priv->cdev;m_can_class_unregister (mcan_class); - +pm_runtime_disable (mcan_class->dev);m_can_class_free_dev (mcan_class->net); }
drivers/net/can/usb/gs_usb.c +11 -12
@@ -286,11 +286,6 @@ struct gs_host_frame {#define GS_MAX_RX_URBS 30#define GS_NAPI_WEIGHT 32 -/* Maximum number of interfaces the driver supports per device. -* Current hardware only supports 3 interfaces. The future may vary. -*/ -#define GS_MAX_INTF 3 -struct gs_tx_context {struct gs_can *dev;unsigned int echo_id;
@@ -321,7 +316,6 @@ struct gs_can {/* usb interface struct */ struct gs_usb { -struct gs_can *canch[GS_MAX_INTF ];struct usb_anchor rx_submitted;struct usb_device *udev;
@@ -333,9 +327,11 @@ struct gs_usb {unsigned int hf_size_rx;u8 active_channels; +u8 channel_cnt;unsigned int pipe_in;unsigned int pipe_out; + struct gs_can *canch[] __counted_by(channel_cnt); };/* 'allocate' a tx context.
@@ -596,7 +592,7 @@ static void gs_usb_receive_bulk_callback(struct urb *urb) }/* device reports out of range channel id */ -if (hf->channel >=GS_MAX_INTF ) +if (hf->channel >= parent->channel_cnt) goto device_detach; dev = parent->canch[hf->channel];
@@ -696,7 +692,7 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)/* USB failure take down all interfaces */ if (rc == -ENODEV ) { device_detach: -for (rc =0 ; rc <GS_MAX_INTF ; rc++) { +for (rc =0 ; rc < parent->channel_cnt; rc++) {if (parent->canch[rc])netif_device_detach (parent->canch[rc]->netdev); }
@@ -1246,6 +1242,7 @@ static struct gs_can *gs_make_candev(unsigned int channel, netdev->flags |=IFF_ECHO ;/* we support full roundtrip echo */ netdev->dev_id = channel; + netdev->dev_port = channel;/* dev setup */ strcpy (dev->bt_const.name,KBUILD_MODNAME );
@@ -1457,17 +1454,19 @@ static int gs_usb_probe(struct usb_interface *intf, icount = dconf.icount +1 ;dev_info (&intf->dev,"Configuring for %u interfaces\n" , icount); -if (icount >GS_MAX_INTF ) { +if (icount >type_max (parent->channel_cnt)) {dev_err (&intf->dev,"Driver cannot handle more that %u CAN interfaces\n" , -GS_MAX_INTF ); +type_max (parent->channel_cnt));return -EINVAL ; } - parent =kzalloc (sizeof (*parent),GFP_KERNEL ); + parent =kzalloc (struct_size (parent, canch, icount),GFP_KERNEL );if (!parent)return -ENOMEM ; + parent->channel_cnt = icount; +init_usb_anchor (&parent->rx_submitted);usb_set_intfdata (intf, parent);
@@ -1528,7 +1527,7 @@ static void gs_usb_disconnect(struct usb_interface *intf)return ; } -for (i =0 ; i <GS_MAX_INTF ; i++) +for (i =0 ; i < parent->channel_cnt; i++)if (parent->canch[i])gs_destroy_candev (parent->canch[i]);
drivers/net/ethernet/amd/xgbe/xgbe-drv.c +0 -1
@@ -1172,7 +1172,6 @@ static void xgbe_free_rx_data(struct xgbe_prv_data *pdata)static int xgbe_phy_reset (struct xgbe_prv_data *pdata) { - pdata->phy_link =-1 ; pdata->phy_speed =SPEED_UNKNOWN ;return pdata->phy_if.phy_reset (pdata);
drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +1 -0
@@ -1664,6 +1664,7 @@ static int xgbe_phy_init(struct xgbe_prv_data *pdata) pdata->phy.duplex =DUPLEX_FULL ; } + pdata->phy_link =0 ; pdata->phy.link =0 ; pdata->phy.pause_autoneg = pdata->pause_autoneg;
drivers/net/ethernet/broadcom/tg3.c +1 -4
@@ -5803,7 +5803,7 @@ static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset)u32 current_speed =SPEED_UNKNOWN ;u8 current_duplex =DUPLEX_UNKNOWN ;bool current_link_up = false; -u32 local_adv, remote_adv, sgsr; +u32 local_adv =0 , remote_adv =0 , sgsr; if ((tg3_asic_rev(tp) == ASIC_REV_5719 || tg3_asic_rev(tp) == ASIC_REV_5720) &&
@@ -5944,9 +5944,6 @@ static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset)else current_duplex =DUPLEX_HALF ; - local_adv =0 ; - remote_adv =0 ; -if (bmcr &BMCR_ANENABLE ) {u32 common;
drivers/net/ethernet/dlink/dl2k.c +16 -7
@@ -498,25 +498,34 @@ static int alloc_list(struct net_device *dev)for (i =0 ; i <RX_RING_SIZE ; i++) {/* Allocated fixed size of skbuff */ struct sk_buff *skb; +dma_addr_t addr; skb =netdev_alloc_skb_ip_align (dev, np->rx_buf_sz); np->rx_skbuff[i] = skb; -if (!skb) { -free_list (dev); -return -ENOMEM ; - } +if (!skb) + goto err_free_list; + + addr =dma_map_single (&np->pdev->dev, skb->data, + np->rx_buf_sz,DMA_FROM_DEVICE ); +if (dma_mapping_error (&np->pdev->dev, addr)) + goto err_kfree_skb; np->rx_ring[i].next_desc =cpu_to_le64 (np->rx_ring_dma + ((i +1 ) %RX_RING_SIZE ) *sizeof (struct netdev_desc ));/* Rubicon now supports 40 bits of addressing space. */ - np->rx_ring[i].fraginfo = -cpu_to_le64 (dma_map_single (&np->pdev->dev, skb->data, - np->rx_buf_sz,DMA_FROM_DEVICE )); + np->rx_ring[i].fraginfo =cpu_to_le64 (addr); np->rx_ring[i].fraginfo |=cpu_to_le64 ((u64 )np->rx_buf_sz <<48 ); }return 0 ; + +err_kfree_skb: +dev_kfree_skb (np->rx_skbuff[i]); + np->rx_skbuff[i] =NULL ; +err_free_list: +free_list (dev); +return -ENOMEM ; }static void rio_hw_init (struct net_device *dev)
drivers/net/ethernet/intel/ixgbevf/defines.h +5 -1
@@ -1,5 +1,5 @@/* SPDX-License-Identifier: GPL-2.0 */ -/* Copyright(c) 1999 - 2018 Intel Corporation. */ +/* Copyright(c) 1999 - 2024 Intel Corporation. */ #ifndef _IXGBEVF_DEFINES_H_#define _IXGBEVF_DEFINES_H_
@@ -16,6 +16,9 @@#define IXGBE_DEV_ID_X550_VF_HV 0x1564#define IXGBE_DEV_ID_X550EM_X_VF_HV 0x15A9 +#define IXGBE_DEV_ID_E610_VF 0x57AD +#define IXGBE_SUBDEV_ID_E610_VF_HV 0x00FF +#define IXGBE_VF_IRQ_CLEAR_MASK 7#define IXGBE_VF_MAX_TX_QUEUES 8#define IXGBE_VF_MAX_RX_QUEUES 8
@@ -25,6 +28,7 @@/* Link speed */ typedef u32 ixgbe_link_speed ; +#define IXGBE_LINK_SPEED_UNKNOWN 0#define IXGBE_LINK_SPEED_1GB_FULL 0x0020#define IXGBE_LINK_SPEED_10GB_FULL 0x0080#define IXGBE_LINK_SPEED_100_FULL 0x0008
drivers/net/ethernet/intel/ixgbevf/ipsec.c +10 -0
@@ -271,6 +271,9 @@ static int ixgbevf_ipsec_add_sa(struct xfrm_state *xs, adapter =netdev_priv (dev); ipsec = adapter->ipsec; +if (!(adapter->pf_features &IXGBEVF_PF_SUP_IPSEC )) +return -EOPNOTSUPP ; +if (xs->id.proto !=IPPROTO_ESP && xs->id.proto !=IPPROTO_AH ) {NL_SET_ERR_MSG_MOD (extack,"Unsupported protocol for IPsec offload" );return -EINVAL ;
@@ -400,6 +403,9 @@ static void ixgbevf_ipsec_del_sa(struct xfrm_state *xs) adapter =netdev_priv (dev); ipsec = adapter->ipsec; +if (!(adapter->pf_features &IXGBEVF_PF_SUP_IPSEC )) +return ; +if (xs->xso.dir ==XFRM_DEV_OFFLOAD_IN ) { sa_idx = xs->xso.offload_handle -IXGBE_IPSEC_BASE_RX_INDEX ;
@@ -628,6 +634,10 @@ void ixgbevf_init_ipsec_offload(struct ixgbevf_adapter *adapter)size_t size;switch (adapter->hw.api_version) { +case ixgbe_mbox_api_17: +if (!(adapter->pf_features &IXGBEVF_PF_SUP_IPSEC )) +return ; +break ;case ixgbe_mbox_api_14:break ;default :
drivers/net/ethernet/intel/ixgbevf/ixgbevf.h +12 -1
@@ -1,5 +1,5 @@/* SPDX-License-Identifier: GPL-2.0 */ -/* Copyright(c) 1999 - 2018 Intel Corporation. */ +/* Copyright(c) 1999 - 2024 Intel Corporation. */ #ifndef _IXGBEVF_H_#define _IXGBEVF_H_
@@ -366,6 +366,13 @@ struct ixgbevf_adapter {/* Interrupt Throttle Rate */ u32 eitr_param; +u32 pf_features; +#define IXGBEVF_PF_SUP_IPSEC BIT(0) +#define IXGBEVF_PF_SUP_ESX_MBX BIT(1) + +#define IXGBEVF_SUPPORTED_FEATURES (IXGBEVF_PF_SUP_IPSEC | \ + IXGBEVF_PF_SUP_ESX_MBX) +struct ixgbevf_hw_stats stats;unsigned long state;
@@ -418,6 +425,8 @@ enum ixgbevf_boards { board_X550EM_x_vf, board_X550EM_x_vf_hv, board_x550em_a_vf, + board_e610_vf, + board_e610_vf_hv, }; enum ixgbevf_xcast_modes {
@@ -434,11 +443,13 @@ extern const struct ixgbevf_info ixgbevf_X550EM_x_vf_info;extern const struct ixgbe_mbx_operations ixgbevf_mbx_ops;extern const struct ixgbe_mbx_operations ixgbevf_mbx_ops_legacy;extern const struct ixgbevf_info ixgbevf_x550em_a_vf_info; +extern const struct ixgbevf_info ixgbevf_e610_vf_info;extern const struct ixgbevf_info ixgbevf_82599_vf_hv_info;extern const struct ixgbevf_info ixgbevf_X540_vf_hv_info;extern const struct ixgbevf_info ixgbevf_X550_vf_hv_info;extern const struct ixgbevf_info ixgbevf_X550EM_x_vf_hv_info; +extern const struct ixgbevf_info ixgbevf_e610_vf_hv_info;extern const struct ixgbe_mbx_operations ixgbevf_hv_mbx_ops;/* needed by ethtool.c */
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +43 -3
102 lines not on this page · raw message
drivers/net/ethernet/intel/ixgbevf/mbx.h +8 -0
@@ -66,6 +66,8 @@ enum ixgbe_pfvf_api_rev { ixgbe_mbox_api_13,/* API version 1.3, linux/freebsd VF driver */ ixgbe_mbox_api_14,/* API version 1.4, linux/freebsd VF driver */ ixgbe_mbox_api_15,/* API version 1.5, linux/freebsd VF driver */ + ixgbe_mbox_api_16,/* API version 1.6, linux/freebsd VF driver */ + ixgbe_mbox_api_17,/* API version 1.7, linux/freebsd VF driver */ /* This value should always be last */ ixgbe_mbox_api_unknown, /* indicates that API version is not known */ };
@@ -102,6 +104,12 @@ enum ixgbe_pfvf_api_rev {#define IXGBE_VF_GET_LINK_STATE 0x10/* get vf link state */ +/* mailbox API, version 1.6 VF requests */ +#define IXGBE_VF_GET_PF_LINK_STATE 0x11/* request PF to send link info */ + +/* mailbox API, version 1.7 VF requests */ +#define IXGBE_VF_FEATURES_NEGOTIATE 0x12/* get features supported by PF*/ +/* length of permanent address message returned from PF */ #define IXGBE_VF_PERMADDR_MSG_LEN 4/* word in permanent address message with the current multicast type */
drivers/net/ethernet/intel/ixgbevf/vf.c +161 -33
264 lines not on this page · raw message
drivers/net/ethernet/intel/ixgbevf/vf.h +4 -1
@@ -1,5 +1,5 @@/* SPDX-License-Identifier: GPL-2.0 */ -/* Copyright(c) 1999 - 2018 Intel Corporation. */ +/* Copyright(c) 1999 - 2024 Intel Corporation. */ #ifndef __IXGBE_VF_H__#define __IXGBE_VF_H__
@@ -26,6 +26,7 @@ struct ixgbe_mac_operations {s32 (*stop_adapter)(struct ixgbe_hw *);s32 (*get_bus_info)(struct ixgbe_hw *);s32 (*negotiate_api_version)(struct ixgbe_hw *hw,int api); +int (*negotiate_features)(struct ixgbe_hw *hw,u32 *pf_features);/* Link */ s32 (*setup_link)(struct ixgbe_hw *,ixgbe_link_speed ,bool ,bool );
@@ -54,6 +55,8 @@ enum ixgbe_mac_type { ixgbe_mac_X550_vf, ixgbe_mac_X550EM_x_vf, ixgbe_mac_x550em_a_vf, + ixgbe_mac_e610, + ixgbe_mac_e610_vf, ixgbe_num_macs };
drivers/net/ethernet/realtek/r8169_main.c +3 -2
@@ -5060,8 +5060,9 @@ static int rtl8169_resume(struct device *device)if (!device_may_wakeup (tp_to_dev (tp)))clk_prepare_enable (tp->clk); -/* Reportedly at least Asus X453MA truncates packets otherwise */ -if (tp->mac_version ==RTL_GIGA_MAC_VER_37 ) +/* Some chip versions may truncate packets without this initialization */ +if (tp->mac_version ==RTL_GIGA_MAC_VER_37 || + tp->mac_version ==RTL_GIGA_MAC_VER_46 )rtl_init_rxcfg (tp);return rtl8169_runtime_resume (device);
drivers/net/netdevsim/netdev.c +7 -0
@@ -433,6 +433,7 @@ static void nsim_enable_napi(struct netdevsim *ns)static int nsim_open (struct net_device *dev) {struct netdevsim *ns =netdev_priv (dev); +struct netdevsim *peer;int err; err =nsim_init_napi (ns);
@@ -441,6 +442,12 @@ static int nsim_open(struct net_device *dev)nsim_enable_napi (ns); + peer =rtnl_dereference (ns->peer); +if (peer &&netif_running (peer->netdev)) { +netif_carrier_on (dev); +netif_carrier_on (peer->netdev); + } +return 0 ; }
drivers/net/usb/lan78xx.c +29 -9
@@ -1920,13 +1920,19 @@ static const struct ethtool_ops lan78xx_ethtool_ops = { .get_regs = lan78xx_get_regs, }; -static void lan78xx_init_mac_address (struct lan78xx_net *dev) +static int lan78xx_init_mac_address (struct lan78xx_net *dev) {u32 addr_lo, addr_hi;u8 addr[6 ]; +int ret; + + ret =lan78xx_read_reg (dev,RX_ADDRL , &addr_lo); +if (ret <0 ) +return ret; -lan78xx_read_reg (dev,RX_ADDRL , &addr_lo); -lan78xx_read_reg (dev,RX_ADDRH , &addr_hi); + ret =lan78xx_read_reg (dev,RX_ADDRH , &addr_hi); +if (ret <0 ) +return ret; addr[0 ] = addr_lo &0xFF ; addr[1 ] = (addr_lo >>8 ) &0xFF ;
@@ -1959,14 +1965,26 @@ static void lan78xx_init_mac_address(struct lan78xx_net *dev) (addr[2 ] <<16 ) | (addr[3 ] <<24 ); addr_hi = addr[4 ] | (addr[5 ] <<8 ); -lan78xx_write_reg (dev,RX_ADDRL , addr_lo); -lan78xx_write_reg (dev,RX_ADDRH , addr_hi); + ret =lan78xx_write_reg (dev,RX_ADDRL , addr_lo); +if (ret <0 ) +return ret; + + ret =lan78xx_write_reg (dev,RX_ADDRH , addr_hi); +if (ret <0 ) +return ret; } -lan78xx_write_reg (dev,MAF_LO (0 ), addr_lo); -lan78xx_write_reg (dev,MAF_HI (0 ), addr_hi |MAF_HI_VALID_ ); + ret =lan78xx_write_reg (dev,MAF_LO (0 ), addr_lo); +if (ret <0 ) +return ret; + + ret =lan78xx_write_reg (dev,MAF_HI (0 ), addr_hi |MAF_HI_VALID_ ); +if (ret <0 ) +return ret;eth_hw_addr_set (dev->net, addr); + +return 0 ; }/* MDIO read and write wrappers for phylib */
@@ -2905,8 +2923,6 @@ static int lan78xx_reset(struct lan78xx_net *dev) } }while (buf &HW_CFG_LRST_ ); -lan78xx_init_mac_address (dev); -/* save DEVID for later usage */ ret =lan78xx_read_reg (dev,ID_REV , &buf);if (ret <0 )
@@ -2915,6 +2931,10 @@ static int lan78xx_reset(struct lan78xx_net *dev) dev->chipid = (buf &ID_REV_CHIP_ID_MASK_ ) >>16 ; dev->chiprev = buf &ID_REV_CHIP_REV_MASK_ ; + ret =lan78xx_init_mac_address (dev); +if (ret <0 ) +return ret; +/* Respond to the IN token with a NAK */ ret =lan78xx_read_reg (dev,USB_CFG0 , &buf);if (ret <0 )
drivers/net/usb/r8152.c +6 -1
@@ -10151,7 +10151,12 @@ static int __init rtl8152_driver_init(void) ret =usb_register_device_driver (&rtl8152_cfgselector_driver,THIS_MODULE );if (ret)return ret; -return usb_register (&rtl8152_driver); + + ret =usb_register (&rtl8152_driver); +if (ret) +usb_deregister_device_driver (&rtl8152_cfgselector_driver); + +return ret; } static void __exit rtl8152_driver_exit(void)
drivers/net/wireless/realtek/rtw89/core.c +21 -18
@@ -978,25 +978,14 @@ void rtw89_core_tx_kick_off(struct rtw89_dev *rtwdev, u8 qsel) }int rtw89_core_tx_kick_off_and_wait (struct rtw89_dev *rtwdev,struct sk_buff *skb, -int qsel,unsigned int timeout) +struct rtw89_tx_wait_info *wait,int qsel, +unsigned int timeout) { -struct rtw89_tx_skb_data *skb_data =RTW89_TX_SKB_CB (skb); -struct rtw89_tx_wait_info *wait;unsigned long time_left;int ret =0 ;lockdep_assert_wiphy (rtwdev->hw->wiphy); - wait =kzalloc (sizeof (*wait),GFP_KERNEL ); -if (!wait) { -rtw89_core_tx_kick_off (rtwdev, qsel); -return 0 ; - } - -init_completion (&wait->completion); - wait->skb = skb; -rcu_assign_pointer (skb_data->wait, wait); -rtw89_core_tx_kick_off (rtwdev, qsel); time_left =wait_for_completion_timeout (&wait->completion,msecs_to_jiffies (timeout));
@@ -1057,10 +1046,12 @@ int rtw89_h2c_tx(struct rtw89_dev *rtwdev, }int rtw89_core_tx_write (struct rtw89_dev *rtwdev,struct ieee80211_vif *vif, -struct ieee80211_sta *sta,struct sk_buff *skb,int *qsel) +struct ieee80211_sta *sta,struct sk_buff *skb,int *qsel, +struct rtw89_tx_wait_info *wait) {struct rtw89_sta *rtwsta =sta_to_rtwsta_safe (sta);struct rtw89_vif *rtwvif =vif_to_rtwvif (vif); +struct rtw89_tx_skb_data *skb_data =RTW89_TX_SKB_CB (skb);struct rtw89_core_tx_request tx_req = {0 };struct rtw89_sta_link *rtwsta_link =NULL ;struct rtw89_vif_link *rtwvif_link;
@@ -1093,6 +1084,8 @@ int rtw89_core_tx_write(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,rtw89_core_tx_update_desc_info (rtwdev, &tx_req);rtw89_core_tx_wake (rtwdev, &tx_req); +rcu_assign_pointer (skb_data->wait, wait); + ret =rtw89_hci_tx_write (rtwdev, &tx_req);if (ret) {rtw89_err (rtwdev,"failed to transmit skb to HCI\n" );
@@ -2908,7 +2901,7 @@ static void rtw89_core_txq_push(struct rtw89_dev *rtwdev, goto out; }rtw89_core_txq_check_agg (rtwdev, rtwtxq, skb); - ret =rtw89_core_tx_write (rtwdev, vif, sta, skb,NULL ); + ret =rtw89_core_tx_write (rtwdev, vif, sta, skb,NULL ,NULL );if (ret) {rtw89_err (rtwdev,"failed to push txq: %d\n" , ret);ieee80211_free_txskb (rtwdev->hw, skb);
@@ -3084,7 +3077,7 @@ static void rtw89_core_sta_pending_tx_iter(void *data, skb_queue_walk_safe(&rtwsta->roc_queue, skb, tmp) {skb_unlink (skb, &rtwsta->roc_queue); - ret =rtw89_core_tx_write (rtwdev, vif, sta, skb, &qsel); + ret =rtw89_core_tx_write (rtwdev, vif, sta, skb, &qsel,NULL );if (ret) {rtw89_warn (rtwdev,"pending tx failed with %d\n" , ret);dev_kfree_skb_any (skb);
@@ -3106,6 +3099,7 @@ static int rtw89_core_send_nullfunc(struct rtw89_dev *rtwdev, struct rtw89_vif_link *rtwvif_link, bool qos, bool ps) { struct ieee80211_vif *vif = rtwvif_link_to_vif(rtwvif_link); +struct rtw89_tx_wait_info *wait;struct ieee80211_sta *sta;struct ieee80211_hdr *hdr;struct sk_buff *skb;
@@ -3114,6 +3108,12 @@ static int rtw89_core_send_nullfunc(struct rtw89_dev *rtwdev,if (vif->type !=NL80211_IFTYPE_STATION || !vif->cfg.assoc)return 0 ; + wait =kzalloc (sizeof (*wait),GFP_KERNEL ); +if (!wait) +return -ENOMEM ; + +init_completion (&wait->completion); +rcu_read_lock (); sta =ieee80211_find_sta (vif, vif->cfg.ap_addr);if (!sta) {
@@ -3127,11 +3127,13 @@ static int rtw89_core_send_nullfunc(struct rtw89_dev *rtwdev, goto out; } + wait->skb = skb; + hdr = (struct ieee80211_hdr *)skb->data;if (ps) hdr->frame_control |=cpu_to_le16 (IEEE80211_FCTL_PM ); - ret =rtw89_core_tx_write (rtwdev, vif, sta, skb, &qsel); + ret =rtw89_core_tx_write (rtwdev, vif, sta, skb, &qsel, wait);if (ret) {rtw89_warn (rtwdev,"nullfunc transmit failed: %d\n" , ret);dev_kfree_skb_any (skb);
@@ -3140,10 +3142,11 @@ static int rtw89_core_send_nullfunc(struct rtw89_dev *rtwdev,rcu_read_unlock (); -return rtw89_core_tx_kick_off_and_wait (rtwdev, skb, qsel, +return rtw89_core_tx_kick_off_and_wait (rtwdev, skb, wait, qsel,RTW89_ROC_TX_TIMEOUT ); out:rcu_read_unlock (); +kfree (wait);return ret; }
drivers/net/wireless/realtek/rtw89/core.h +4 -2
@@ -6818,12 +6818,14 @@ static inline bool rtw89_is_rtl885xb(struct rtw89_dev *rtwdev) }int rtw89_core_tx_write (struct rtw89_dev *rtwdev,struct ieee80211_vif *vif, -struct ieee80211_sta *sta,struct sk_buff *skb,int *qsel); +struct ieee80211_sta *sta,struct sk_buff *skb,int *qsel, +struct rtw89_tx_wait_info *wait);int rtw89_h2c_tx (struct rtw89_dev *rtwdev,struct sk_buff *skb,bool fwdl);void rtw89_core_tx_kick_off (struct rtw89_dev *rtwdev,u8 qsel);int rtw89_core_tx_kick_off_and_wait (struct rtw89_dev *rtwdev,struct sk_buff *skb, -int qsel,unsigned int timeout); +struct rtw89_tx_wait_info *wait,int qsel, +unsigned int timeout);void rtw89_core_fill_txdesc (struct rtw89_dev *rtwdev,struct rtw89_tx_desc_info *desc_info,void *txdesc);
drivers/net/wireless/realtek/rtw89/mac80211.c +1 -1
@@ -36,7 +36,7 @@ static void rtw89_ops_tx(struct ieee80211_hw *hw,return ; } - ret =rtw89_core_tx_write (rtwdev, vif, sta, skb, &qsel); + ret =rtw89_core_tx_write (rtwdev, vif, sta, skb, &qsel,NULL );if (ret) {rtw89_err (rtwdev,"failed to transmit skb: %d\n" , ret);ieee80211_free_txskb (hw, skb);
drivers/net/wireless/realtek/rtw89/pci.c +0 -2
@@ -1366,7 +1366,6 @@ static int rtw89_pci_txwd_submit(struct rtw89_dev *rtwdev,struct pci_dev *pdev = rtwpci->pdev;struct sk_buff *skb = tx_req->skb;struct rtw89_pci_tx_data *tx_data =RTW89_PCI_TX_SKB_CB (skb); -struct rtw89_tx_skb_data *skb_data =RTW89_TX_SKB_CB (skb);bool en_wd_info = desc_info->en_wd_info;u32 txwd_len;u32 txwp_len;
@@ -1382,7 +1381,6 @@ static int rtw89_pci_txwd_submit(struct rtw89_dev *rtwdev, } tx_data->dma = dma; -rcu_assign_pointer (skb_data->wait,NULL ); txwp_len =sizeof (*txwp_info); txwd_len = chip->txwd_body_size;
drivers/nvme/host/multipath.c +4 -2
@@ -131,12 +131,14 @@ void nvme_mpath_start_request(struct request *rq)struct nvme_ns *ns = rq->q->queuedata;struct gendisk *disk = ns->head->disk; -if (READ_ONCE (ns->head->subsys->iopolicy) ==NVME_IOPOLICY_QD ) { +if ((READ_ONCE (ns->head->subsys->iopolicy) ==NVME_IOPOLICY_QD ) && + !(nvme_req (rq)->flags &NVME_MPATH_CNT_ACTIVE )) {atomic_inc (&ns->ctrl->nr_active);nvme_req (rq)->flags |=NVME_MPATH_CNT_ACTIVE ; } -if (!blk_queue_io_stat (disk->queue) ||blk_rq_is_passthrough (rq)) +if (!blk_queue_io_stat (disk->queue) ||blk_rq_is_passthrough (rq) || + (nvme_req (rq)->flags &NVME_MPATH_IO_STATS ))return ;nvme_req (rq)->flags |=NVME_MPATH_IO_STATS ;
drivers/nvme/host/tcp.c +3 -0
@@ -1075,6 +1075,9 @@ static void nvme_tcp_write_space(struct sock *sk) queue = sk->sk_user_data;if (likely (queue &&sk_stream_is_writeable (sk))) {clear_bit (SOCK_NOSPACE , &sk->sk_socket->flags); +/* Ensure pending TLS partial records are retried */ +if (nvme_tcp_queue_tls (queue)) + queue->write_space (sk);queue_work_on (queue->io_cpu, nvme_tcp_wq, &queue->io_work); }read_unlock_bh (&sk->sk_callback_lock);
drivers/phy/cadence/cdns-dphy.c +99 -32
176 lines not on this page · raw message
drivers/usb/gadget/function/f_acm.c +19 -23
42 lines not on this page · raw message
drivers/usb/gadget/function/f_ecm.c +20 -28
48 lines not on this page · raw message
drivers/usb/gadget/function/f_ncm.c +33 -45
78 lines not on this page · raw message
drivers/usb/gadget/function/f_rndis.c +35 -50
85 lines not on this page · raw message
fs/nfsd/blocklayoutxdr.c +106 -65
171 lines not on this page · raw message
sound/soc/codecs/nau8821.c +40 -13
53 lines not on this page · raw message
tools/testing/selftests/bpf/prog_tests/arg_parsing.c +9 -3
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.