Skip to contentSkip to conversation

Linux 6.6.114

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Oct 23, 2025 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 6.6.114 kernel.

All users of the 6.6 kernel series must upgrade.

The updated 6.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.6.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary

thanks,

greg k-h

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

 Documentation/arch/arm64/silicon-errata.rst          |    2 
 Documentation/networking/seg6-sysctl.rst             |    3 
 Makefile                                             |    2 
 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 -
 block/bdev.c                                         |   17 +
 block/blk-zoned.c                                    |    5 
 block/fops.c                                         |   16 +
 block/ioctl.c                                        |    6 
 drivers/accel/qaic/qaic_control.c                    |    2 
 drivers/base/power/runtime.c                         |   44 +++
 drivers/bluetooth/btusb.c                            |    2 
 drivers/cpufreq/cppc_cpufreq.c                       |   14 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c     |    5 
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c              |    2 
 drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c                |    7 
 drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c                |    7 
 drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c  |    3 
 drivers/gpu/drm/bridge/lontium-lt9211.c              |    3 
 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                |   38 +--
 drivers/gpu/drm/msm/adreno/a6xx_gmu.h                |    6 
 drivers/gpu/drm/msm/adreno/a6xx_gpu.c                |   10 
 drivers/gpu/drm/rockchip/rockchip_drm_vop2.c         |    2 
 drivers/gpu/drm/scheduler/sched_main.c               |   13 -
 drivers/hid/hid-input.c                              |    5 
 drivers/hid/hid-multitouch.c                         |   28 +-
 drivers/iio/imu/inv_icm42600/inv_icm42600.h          |    8 
 drivers/iio/imu/inv_icm42600/inv_icm42600_core.c     |   35 +-
 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_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/usb/lan78xx.c                            |   38 ++-
 drivers/net/usb/r8152.c                              |    7 
 drivers/nvme/host/multipath.c                        |    6 
 drivers/pci/controller/cadence/pci-j721e.c           |   64 +++++
 drivers/pci/controller/dwc/pcie-tegra194.c           |   10 
 drivers/pci/pci-sysfs.c                              |   10 
 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/relocation.c                                |   13 -
 fs/dax.c                                             |    2 
 fs/dcache.c                                          |    2 
 fs/eventpoll.c                                       |  145 ++----------
 fs/ext4/ext4_jbd2.c                                  |   11 
 fs/ext4/inode.c                                      |    8 
 fs/ext4/super.c                                      |   17 -
 fs/f2fs/data.c                                       |    2 
 fs/hfsplus/unicode.c                                 |   24 ++
 fs/jbd2/transaction.c                                |   13 -
 fs/nfsd/blocklayout.c                                |    5 
 fs/nfsd/blocklayoutxdr.c                             |    7 
 fs/nfsd/export.c                                     |   60 ++++-
 fs/nfsd/export.h                                     |    2 
 fs/nfsd/flexfilelayout.c                             |    8 
 fs/nfsd/flexfilelayoutxdr.c                          |    3 
 fs/nfsd/nfs4layouts.c                                |    1 
 fs/nfsd/nfs4proc.c                                   |   34 +-
 fs/nfsd/nfs4xdr.c                                    |   14 -
 fs/nfsd/nfsfh.c                                      |   12 -
 fs/nfsd/xdr4.h                                       |   36 ++-
 fs/nilfs2/the_nilfs.c                                |    3 
 fs/ocfs2/super.c                                     |    6 
 fs/quota/dquot.c                                     |   13 -
 fs/quota/quota_v1.c                                  |    3 
 fs/quota/quota_v2.c                                  |    9 
 fs/smb/client/inode.c                                |    6 
 fs/smb/client/misc.c                                 |   17 +
 fs/smb/client/smb2ops.c                              |    8 
 fs/smb/server/ksmbd_netlink.h                        |    3 
 fs/smb/server/server.h                               |    1 
 fs/smb/server/smb2pdu.c                              |    4 
 fs/smb/server/transport_ipc.c                        |    1 
 fs/smb/server/transport_tcp.c                        |   69 ++---
 fs/smb/server/transport_tcp.h                        |    1 
 fs/xfs/libxfs/xfs_log_format.h                       |   30 ++
 fs/xfs/scrub/reap.c                                  |   19 +
 fs/xfs/xfs_log.c                                     |    8 
 fs/xfs/xfs_log_priv.h                                |    4 
 fs/xfs/xfs_log_recover.c                             |   34 ++
 fs/xfs/xfs_ondisk.h                                  |    2 
 include/linux/cpufreq.h                              |    3 
 include/linux/mm.h                                   |    2 
 include/linux/pci.h                                  |   14 +
 include/linux/pm_runtime.h                           |    4 
 include/linux/quota.h                                |    2 
 include/linux/usb/gadget.h                           |   25 ++
 include/net/ip_tunnels.h                             |   15 +
 kernel/padata.c                                      |    6 
 kernel/sched/fair.c                                  |   38 +--
 mm/shmem.c                                           |    7 
 net/ipv4/ip_tunnel.c                                 |   14 -
 net/ipv4/tcp_output.c                                |   19 +
 net/ipv6/ip6_tunnel.c                                |    3 
 net/tls/tls_main.c                                   |    7 
 net/tls/tls_sw.c                                     |   33 ++
 rust/bindings/bindings_helper.h                      |    2 
 rust/bindings/lib.rs                                 |    1 
 sound/firewire/amdtp-stream.h                        |    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 -
 127 files changed, 1542 insertions(+), 923 deletions(-)

Akhil P Oommen (1):
drm/msm/a6xx: Fix PDC sleep sequence

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

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

Brian Norris (1):
PCI/sysfs: Ensure devices are powered for config reads (part 2)

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

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 (2):
block: fix race between set_blocksize and read paths
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 (1):
tcp: fix tcp_tso_should_defer() vs large RTT

Eugene Korenevsky (1):
cifs: parse_dfs_referrals: prevent oob on malformed input

Fabian Vogt (1):
riscv: kprobes: Fix probe address validation

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

Greg Kroah-Hartman (1):

      Linux 6.6.114

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

Huang Xiaojia (1):
epoll: Remove ep_scan_ready_list() in comments

I Viswanath (1):

      net: usb: lan78xx: fix use of improperly initialized dev->chipid in lan78xx_reset

Ingo Molnar (1):
sched/balancing: Rename newidle_balance() => sched_balance_newidle()

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

Jean-Baptiste Maneyrol (1):
iio: imu: inv_icm42600: reorganize DMA aligned buffers in structure

Jedrzej Jagielski (2):
ixgbevf: fix getting link speed data for E610 devices
ixgbevf: fix mailbox API compatibility by negotiating supported features

Jiaming Zhang (1):
ALSA: usb-audio: Fix NULL pointer deference in try_to_register_card

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

Kemeng Shi (1):
quota: remove unneeded return value of register_quota_format

Konrad Dybcio (1):
drm/msm/adreno: De-spaghettify the use of memory barriers

Kuen-Han Tsai (6):
usb: gadget: Store endpoint pointer in usb_request
usb: gadget: Introduce free_usb_request helper
usb: gadget: f_ecm: Refactor bind path to use __free()
usb: gadget: f_acm: Refactor bind path to use __free()
usb: gadget: f_ncm: Refactor bind path to use __free()
usb: gadget: f_rndis: Refactor bind path to use __free()

Laurent Pinchart (1):
media: nxp: imx8-isi: Drop unused argument to mxc_isi_channel_chain()

Linmao Li (1):
r8169: fix packet truncation after S4 resume on RTL8168H/RTL8111H

Marc Kleine-Budde (1):
can: m_can: m_can_plat_remove(): add missing pm_runtime_disable()

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

Mark Rutland (2):
arm64: cputype: Add Neoverse-V3AE definitions
arm64: errata: Apply workarounds for Neoverse-V3AE

Nam Cao (1):
eventpoll: Replace rwlock with spinlock

Namjae Jeon (1):
ksmbd: browse interfaces list on FSCTL_QUERY_INTERFACE_INFO IOCTL

Nicolas Dichtel (1):
doc: fix seg6_flowlabel path

Niklas Cassel (1):
PCI: tegra194: Reset BARs when running in PCIe endpoint mode

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

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

Ryusuke Konishi (1):
nilfs2: fix deadlock warnings caused by lock dependency in init_nilfs()

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

Sascha Hauer (1):
net: tls: wait for async completion on last message

Scott Mayhew (1):
nfsd: decouple the xprtsec policy check from check_nfsd_access()

Sean Nyekjaer (2):
iio: imu: inv_icm42600: Simplify pm_runtime setup
iio: imu: inv_icm42600: Avoid configuring if already pm_runtime suspended

Sergey Bashirov (3):
NFSD: Rework encoding and decoding of nfsd4_deviceid
NFSD: Minor cleanup in layoutcommit processing
NFSD: Fix last write offset handling in layoutcommit

Shashank A P (1):
fs: quota: create dedicated workqueue for quota_release_work

Shuhao Fu (1):
smb: client: Fix refcount leak for cifs_sb_tlink

Siddharth Vadapalli (2):
PCI: j721e: Enable ACSPCIE Refclk if "ti,syscon-acspcie-proxy-ctrl" exists
PCI: j721e: Fix programming sequence of "strap" settings

Thadeu Lima de Souza Cascardo (1):
HID: multitouch: fix name of Stylus input devices

Theodore Ts'o (1):
ext4: avoid potential buffer over-read in parse_apply_sb_mount_options()

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

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

Yuezhang Mo (1):
dax: skip read lock assertion for read-only filesystems

Zenm Chen (1):
Bluetooth: btusb: Add USB ID 2001:332a for D-Link AX9U rev. A1

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

author maintainer
#1 lore raw
Documentation/arch/arm64/silicon-errata.rst +2 -0
index 8209c7a7c397..fbc833841bef 100644
@@ -187,6 +187,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
index 07c20e470baf..1b6af4779be1 100644
@@ -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
index ab277ff87643..ad3952fb542d 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 6
 PATCHLEVEL = 6
-SUBLEVEL = 113
+SUBLEVEL = 114
 EXTRAVERSION =
 NAME = Pinguïn Aangedreven
 
arch/arm64/Kconfig +1 -0
index 4ecba0690938..1be9f1f6b320 100644
@@ -1094,6 +1094,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
index d92a0203e5a9..c279a0a9b366 100644
@@ -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
index 463b48d0f925..23dcd0c4aad3 100644
@@ -471,6 +471,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
index 297427ffc4e0..8a6ea7d27018 100644
@@ -48,10 +48,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)
@@ -70,7 +75,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 */
block/bdev.c +17 -0
index 5a54977518ee..a8357b72a27b 100644
@@ -147,9 +147,26 @@ int set_blocksize(struct block_device *bdev, int size)
 
 	/* Don't change the size if it is same as current */
 	if (bdev->bd_inode->i_blkbits != blksize_bits(size)) {
+		/*
+		 * Flush and truncate the pagecache before we reconfigure the
+		 * mapping geometry because folio sizes are variable now.  If a
+		 * reader has already allocated a folio whose size is smaller
+		 * than the new min_order but invokes readahead after the new
+		 * min_order becomes visible, readahead will think there are
+		 * "zero" blocks per folio and crash.  Take the inode and
+		 * invalidation locks to avoid racing with
+		 * read/write/fallocate.
+		 */
+		inode_lock(bdev->bd_inode);
+		filemap_invalidate_lock(bdev->bd_inode->i_mapping);
+
 		sync_blockdev(bdev);
+		kill_bdev(bdev);
+
 		bdev->bd_inode->i_blkbits = blksize_bits(size);
 		kill_bdev(bdev);
+		filemap_invalidate_unlock(bdev->bd_inode->i_mapping);
+		inode_unlock(bdev->bd_inode);
 	}
 	return 0;
 }
block/blk-zoned.c +4 -1
index 619ee41a51cc..644bfa1f6753 100644
@@ -401,6 +401,7 @@ int blkdev_zone_mgmt_ioctl(struct block_device *bdev, blk_mode_t mode,
 		op = REQ_OP_ZONE_RESET;
 
 		/* Invalidate the page cache, including dirty pages. */
+		inode_lock(bdev->bd_inode);
 		filemap_invalidate_lock(bdev->bd_inode->i_mapping);
 		ret = blkdev_truncate_zone_range(bdev, mode, &zrange);
 		if (ret)
@@ -423,8 +424,10 @@ int blkdev_zone_mgmt_ioctl(struct block_device *bdev, blk_mode_t mode,
 			       GFP_KERNEL);
 
 fail:
-	if (cmd == BLKRESETZONE)
+	if (cmd == BLKRESETZONE) {
 		filemap_invalidate_unlock(bdev->bd_inode->i_mapping);
+		inode_unlock(bdev->bd_inode);
+	}
 
 	return ret;
 }
block/fops.c +16 -0
index 7c257eb3564d..088143fa9ac9 100644
@@ -681,7 +681,14 @@ static ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)
 			ret = direct_write_fallback(iocb, from, ret,
 					blkdev_buffered_write(iocb, from));
 	} else {
+		/*
+		 * Take i_rwsem and invalidate_lock to avoid racing with
+		 * set_blocksize changing i_blkbits/folio order and punching
+		 * out the pagecache.
+		 */
+		inode_lock_shared(bd_inode);
 		ret = blkdev_buffered_write(iocb, from);
+		inode_unlock_shared(bd_inode);
 	}
 
 	if (ret > 0)
@@ -693,6 +700,7 @@ static ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)
 static ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to)
 {
 	struct block_device *bdev = I_BDEV(iocb->ki_filp->f_mapping->host);
+	struct inode *bd_inode = bdev->bd_inode;
 	loff_t size = bdev_nr_bytes(bdev);
 	loff_t pos = iocb->ki_pos;
 	size_t shorted = 0;
@@ -728,7 +736,13 @@ static ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to)
 			goto reexpand;
 	}
 
+	/*
+	 * Take i_rwsem and invalidate_lock to avoid racing with set_blocksize
+	 * changing i_blkbits/folio order and punching out the pagecache.
+	 */
+	inode_lock_shared(bd_inode);
 	ret = filemap_read(iocb, to, ret);
+	inode_unlock_shared(bd_inode);
 
 reexpand:
 	if (unlikely(shorted))
@@ -771,6 +785,7 @@ static long blkdev_fallocate(struct file *file, int mode, loff_t start,
 	if ((start | len) & (bdev_logical_block_size(bdev) - 1))
 		return -EINVAL;
 
+	inode_lock(inode);
 	filemap_invalidate_lock(inode->i_mapping);
 
 	/*
@@ -811,6 +826,7 @@ static long blkdev_fallocate(struct file *file, int mode, loff_t start,
 
  fail:
 	filemap_invalidate_unlock(inode->i_mapping);
+	inode_unlock(inode);
 	return error;
 }
 
block/ioctl.c +6 -0
index 231537f79a8c..024767fa1e52 100644
@@ -114,6 +114,7 @@ static int blk_ioctl_discard(struct block_device *bdev, blk_mode_t mode,
 	    end > bdev_nr_bytes(bdev))
 		return -EINVAL;
 
+	inode_lock(inode);
 	filemap_invalidate_lock(inode->i_mapping);
 	err = truncate_bdev_range(bdev, mode, start, end - 1);
 	if (err)
@@ -121,6 +122,7 @@ static int blk_ioctl_discard(struct block_device *bdev, blk_mode_t mode,
 	err = blkdev_issue_discard(bdev, start >> 9, len >> 9, GFP_KERNEL);
 fail:
 	filemap_invalidate_unlock(inode->i_mapping);
+	inode_unlock(inode);
 	return err;
 }
 
@@ -146,12 +148,14 @@ static int blk_ioctl_secure_erase(struct block_device *bdev, blk_mode_t mode,
 	    end > bdev_nr_bytes(bdev))
 		return -EINVAL;
 
+	inode_lock(bdev->bd_inode);
 	filemap_invalidate_lock(bdev->bd_inode->i_mapping);
 	err = truncate_bdev_range(bdev, mode, start, end - 1);
 	if (!err)
 		err = blkdev_issue_secure_erase(bdev, start >> 9, len >> 9,
 						GFP_KERNEL);
 	filemap_invalidate_unlock(bdev->bd_inode->i_mapping);
+	inode_unlock(bdev->bd_inode);
 	return err;
 }
 
@@ -184,6 +188,7 @@ static int blk_ioctl_zeroout(struct block_device *bdev, blk_mode_t mode,
 		return -EINVAL;
 
 	/* Invalidate the page cache, including dirty pages */
+	inode_lock(inode);
 	filemap_invalidate_lock(inode->i_mapping);
 	err = truncate_bdev_range(bdev, mode, start, end);
 	if (err)
@@ -194,6 +199,7 @@ static int blk_ioctl_zeroout(struct block_device *bdev, blk_mode_t mode,
 
 fail:
 	filemap_invalidate_unlock(inode->i_mapping);
+	inode_unlock(inode);
 	return err;
 }
 
drivers/accel/qaic/qaic_control.c +1 -1
index f3db3fa91dd5..08b78f567853 100644
@@ -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/base/power/runtime.c +44 -0

56 lines not on this page · raw message

drivers/bluetooth/btusb.c +2 -0
index 1a2d227b7b7b..4c21230aee46 100644
@@ -511,6 +511,8 @@ static const struct usb_device_id quirks_table[] = {
 	/* Realtek 8851BU Bluetooth devices */
 	{ USB_DEVICE(0x3625, 0x010b), .driver_info = BTUSB_REALTEK |
 						     BTUSB_WIDEBAND_SPEECH },
+	{ USB_DEVICE(0x2001, 0x332a), .driver_info = BTUSB_REALTEK |
+						     BTUSB_WIDEBAND_SPEECH },
 
 	/* Realtek 8852AE Bluetooth devices */
 	{ USB_DEVICE(0x0bda, 0x2852), .driver_info = BTUSB_REALTEK |
drivers/cpufreq/cppc_cpufreq.c +12 -2
index ea32bdf7cc24..4d96eed64fe0 100644
@@ -344,6 +344,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
@@ -366,12 +376,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/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +2 -3
index a1f35510d539..c94e1cc7e3a7 100644
@@ -2285,10 +2285,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_psp.c +1 -1
index c83445c2e37f..d358a08b5e00 100644
@@ -2012,7 +2012,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/gmc_v7_0.c +3 -4
index fd905889a4c6..e2ee10a98640 100644
@@ -1061,7 +1061,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;
 }
@@ -1290,7 +1290,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,
@@ -1306,8 +1306,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
index 0bebcdbb2658..ed268c5739eb 100644
@@ -1174,7 +1174,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;
 }
@@ -1465,7 +1465,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,
@@ -1481,8 +1481,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/pm/powerplay/hwmgr/smu7_hwmgr.c +1 -2
index 53849fd3615f..965ffcac17f8 100644
@@ -5437,8 +5437,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
index 4d404f5ef87e..ea192c90b543 100644
@@ -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/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
index 97eadd08181d..38fad14ffd43 100644
@@ -1281,9 +1281,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 +21 -17
index e7136b7759cb..c50aafa0ecdb 100644
@@ -230,6 +230,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;
 }
 
@@ -460,9 +462,10 @@ static int a6xx_rpmh_start(struct a6xx_gmu *gmu)
 	int ret;
 	u32 val;
 
-	gmu_write(gmu, REG_A6XX_GMU_RSCC_CONTROL_REQ, 1 << 1);
-	/* Wait for the register to finish posting */
-	wmb();
+	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,
 		val & (1 << 1), 100, 10000);
@@ -489,6 +492,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,
@@ -497,6 +503,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)
@@ -617,8 +625,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);
@@ -755,22 +761,18 @@ static int a6xx_gmu_fw_start(struct a6xx_gmu *gmu, unsigned int state)
 		gmu_write(gmu, REG_A6XX_GPU_GMU_CX_GMU_CX_FAL_INTF, 1);
 	}
 
-	if (state == GMU_WARM_BOOT) {
-		ret = a6xx_rpmh_start(gmu);
-		if (ret)
-			return ret;
-	} else {
+	/* Turn on register retention */
+	gmu_write(gmu, REG_A6XX_GMU_GENERAL_7, 1);
+
+	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;
 
-		/* Turn on register retention */
-		gmu_write(gmu, REG_A6XX_GMU_GENERAL_7, 1);
-
-		ret = a6xx_rpmh_start(gmu);
-		if (ret)
-			return ret;
-
 		ret = a6xx_gmu_fw_load(gmu);
 		if (ret)
 			return ret;
@@ -909,6 +911,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
index 236f81a43caa..6a28ecaf8594 100644
@@ -96,6 +96,12 @@ struct a6xx_gmu {
 	/* For power domain callback */
 	struct notifier_block pd_nb;
 	struct completion pd_gate;
+
+/* 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/msm/adreno/a6xx_gpu.c +6 -4
index 3664c1476a83..00bfc6f38f45 100644
@@ -1209,14 +1209,16 @@ static int hw_init(struct msm_gpu *gpu)
 	/* Clear GBIF halt in case GX domain was not collapsed */
 	if (adreno_is_a619_holi(adreno_gpu)) {
 		gpu_write(gpu, REG_A6XX_GBIF_HALT, 0);
+		gpu_read(gpu, REG_A6XX_GBIF_HALT);
+
 		gpu_write(gpu, REG_A6XX_RBBM_GPR0_CNTL, 0);
-		/* Let's make extra sure that the GPU can access the memory.. */
-		mb();
+		gpu_read(gpu, REG_A6XX_RBBM_GPR0_CNTL);
 	} else if (a6xx_has_gbif(adreno_gpu)) {
 		gpu_write(gpu, REG_A6XX_GBIF_HALT, 0);
+		gpu_read(gpu, REG_A6XX_GBIF_HALT);
+
 		gpu_write(gpu, REG_A6XX_RBBM_GBIF_HALT, 0);
-		/* Let's make extra sure that the GPU can access the memory.. */
-		mb();
+		gpu_read(gpu, REG_A6XX_RBBM_GBIF_HALT);
 	}
 
 	gpu_write(gpu, REG_A6XX_RBBM_SECVID_TSB_CNTL, 0);
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +1 -1
index 0193d10867dd..97486eba01b7 100644
@@ -984,7 +984,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
index fa4652f23471..4faa2108c0a7 100644
@@ -783,13 +783,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/hid/hid-input.c +4 -1
index f5c217ac4bfa..f073d5621050 100644
@@ -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
index a85581cd511f..b9e67b408a4b 100644
@@ -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		32
 
 static const bool mtrue = true;		/* default for true */
 static const bool mfalse;		/* default for false */
@@ -161,7 +160,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? */
@@ -936,6 +939,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);
@@ -967,12 +971,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)
@@ -1147,7 +1145,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;
@@ -1282,7 +1282,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
@@ -1658,6 +1658,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:
@@ -1729,6 +1730,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);
@@ -1751,7 +1753,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.h +4 -4
index 809734e566e3..e289afcb43e3 100644
@@ -126,9 +126,9 @@ struct inv_icm42600_suspended {
  *  @suspended:		suspended sensors configuration.
  *  @indio_gyro:	gyroscope IIO device.
  *  @indio_accel:	accelerometer IIO device.
- *  @buffer:		data transfer buffer aligned for DMA.
- *  @fifo:		FIFO management structure.
  *  @timestamp:		interrupt timestamps.
+ *  @fifo:		FIFO management structure.
+ *  @buffer:		data transfer buffer aligned for DMA.
  */
 struct inv_icm42600_state {
 	struct mutex lock;
@@ -142,12 +142,12 @@ struct inv_icm42600_state {
 	struct inv_icm42600_suspended suspended;
 	struct iio_dev *indio_gyro;
 	struct iio_dev *indio_accel;
-	u8 buffer[2] __aligned(IIO_DMA_MINALIGN);
-	struct inv_icm42600_fifo fifo;
 	struct {
 		s64 gyro;
 		s64 accel;
 	} timestamp;
+	struct inv_icm42600_fifo fifo;
+	u8 buffer[2] __aligned(IIO_DMA_MINALIGN);
 };
 
 /* Virtual register addresses: @bank on MSB (4 upper bits), @address on LSB */
drivers/iio/imu/inv_icm42600/inv_icm42600_core.c +13 -22
index a1f055014cc6..99eb651743f8 100644
@@ -567,20 +567,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,
@@ -677,16 +669,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);
 
@@ -697,17 +687,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) {
@@ -739,10 +727,13 @@ static int inv_icm42600_resume(struct device *dev)
 	struct inv_icm42600_state *st = dev_get_drvdata(dev);
 	struct inv_sensors_timestamp *gyro_ts = iio_priv(st->indio_gyro);
 	struct inv_sensors_timestamp *accel_ts = 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/media/platform/nxp/imx8-isi/imx8-isi-core.h +1 -1
index 2810ebe9b5f7..5a4676d52079 100644
@@ -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
index 19e80b95ffea..ece352171b93 100644
@@ -589,7 +589,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
index 65d20e9bae69..483523327c02 100644
@@ -851,7 +851,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_platform.c +1 -1
index cdb28d6a092c..e5477775992e 100644
@@ -183,7 +183,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
index de616d6589c0..9bd61fd8e501 100644
@@ -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
index 34d45cebefb5..b4d57da71de2 100644
@@ -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
index 8345d439184e..63012119f2c8 100644
@@ -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
index b3878975bd9c..ea4973096aa2 100644
@@ -5814,7 +5814,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) &&
@@ -5955,9 +5955,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
index 1c3a5cf379cd..72c97dcd0fee 100644
@@ -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
index 5f08779c0e4e..e177d1d58696 100644
@@ -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
index f804b35d79c7..83b3243f172c 100644
@@ -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
index 130cb868774c..f31068e24e86 100644
@@ -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
index 835bbcc5cc8e..a8ed23ee66aa 100644
@@ -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
index b4eef5b6c172..4f19b8900c29 100644
@@ -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
index 5af932a5e70c..3b90f257e94f 100644
@@ -4919,8 +4919,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/usb/lan78xx.c +29 -9
index ec5689cd240a..121f1c15c679 100644
@@ -1940,13 +1940,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;
@@ -1979,14 +1985,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 */
@@ -2910,8 +2928,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)
@@ -2920,6 +2936,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
index 1e85cfe524e8..386376ceeda2 100644
@@ -10104,7 +10104,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/nvme/host/multipath.c +4 -2
index 119afdfe4b91..57416bbf9344 100644
@@ -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/pci/controller/cadence/pci-j721e.c +63 -1

88 lines not on this page · raw message

drivers/pci/controller/dwc/pcie-tegra194.c +10 -0
index c7d3e248a59a..ce2a7a6dab90 100644
@@ -1963,6 +1963,15 @@ static irqreturn_t tegra_pcie_ep_pex_rst_irq(int irq, void *arg)
 	return IRQ_HANDLED;
 }
 
+static void tegra_pcie_ep_init(struct dw_pcie_ep *ep)
+{
+	struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
+	enum pci_barno bar;
+
+	for (bar = 0; bar < PCI_STD_NUM_BARS; bar++)
+		dw_pcie_ep_reset_bar(pci, bar);
+};
+
 static int tegra_pcie_ep_raise_legacy_irq(struct tegra_pcie_dw *pcie, u16 irq)
 {
 	/* Tegra194 supports only INTA */
@@ -2036,6 +2045,7 @@ tegra_pcie_ep_get_features(struct dw_pcie_ep *ep)
 }
 
 static const struct dw_pcie_ep_ops pcie_ep_ops = {
+	.ep_init = tegra_pcie_ep_init,
 	.raise_irq = tegra_pcie_ep_raise_irq,
 	.get_features = tegra_pcie_ep_get_features,
 };
drivers/pci/pci-sysfs.c +8 -2
index 449d42744d33..300caafcfa10 100644
@@ -186,9 +186,15 @@ static ssize_t max_link_speed_show(struct device *dev,
 				   struct device_attribute *attr, char *buf)
 {
 	struct pci_dev *pdev = to_pci_dev(dev);
+	ssize_t ret;
+
+	/* We read PCI_EXP_LNKCAP, so we need the device to be accessible. */
+	pci_config_pm_runtime_get(pdev);
+	ret = sysfs_emit(buf, "%s\n",
+			 pci_speed_string(pcie_get_speed_cap(pdev)));
+	pci_config_pm_runtime_put(pdev);
 
-	return sysfs_emit(buf, "%s\n",
-			  pci_speed_string(pcie_get_speed_cap(pdev)));
+	return ret;
 }
 static DEVICE_ATTR_RO(max_link_speed);
 
drivers/phy/cadence/cdns-dphy.c +99 -32

234 lines not on this page · raw message

drivers/usb/gadget/function/f_acm.c +19 -23

105 lines not on this page · raw message

drivers/usb/gadget/function/f_ecm.c +20 -28

116 lines not on this page · raw message

drivers/usb/gadget/function/f_ncm.c +33 -45

164 lines not on this page · raw message

drivers/usb/gadget/function/f_rndis.c +35 -50

169 lines not on this page · raw message

drivers/usb/gadget/udc/core.c +3 -0
index a4120a25428e..25bbb7a440ce 100644
@@ -194,6 +194,9 @@ struct usb_request *usb_ep_alloc_request(struct usb_ep *ep,
 
 	req = ep->ops->alloc_request(ep, gfp_flags);
 
+	if (req)
+		req->ep = ep;
+
 	trace_usb_ep_alloc_request(ep, req, req ? 0 : -ENOMEM);
 
 	return req;
fs/btrfs/extent_io.c +1 -1
index 88ba277bc3a7..2d6ccc21a822 100644
@@ -985,7 +985,7 @@ static void btrfs_readahead_expand(struct readahead_control *ractl,
 {
 	const u64 ra_pos = readahead_pos(ractl);
 	const u64 ra_end = ra_pos + readahead_length(ractl);
-	const u64 em_end = em->start + em->ram_bytes;
+	const u64 em_end = em->start + em->len;
 
 	/* No expansion for holes and inline extents. */
 	if (em->block_start > EXTENT_MAP_LAST_BYTE)
fs/btrfs/free-space-tree.c +8 -7
index 8efe3a9369df..1fb635a99976 100644
@@ -1108,14 +1108,15 @@ static int populate_free_space_tree(struct btrfs_trans_handle *trans,
 	 * If ret is 1 (no key found), it means this is an empty block group,
 	 * without any extents allocated from it and there's no block group
 	 * item (key BTRFS_BLOCK_GROUP_ITEM_KEY) located in the extent tree
-	 * because we are using the block group tree feature, so block group
-	 * items are stored in the block group tree. It also means there are no
-	 * extents allocated for block groups with a start offset beyond this
-	 * block group's end offset (this is the last, highest, block group).
+	 * because we are using the block group tree feature (so block group
+	 * items are stored in the block group tree) or this is a new block
+	 * group created in the current transaction and its block group item
+	 * was not yet inserted in the extent tree (that happens in
+	 * btrfs_create_pending_block_groups() -> insert_block_group_item()).
+	 * It also means there are no extents allocated for block groups with a
+	 * start offset beyond this block group's end offset (this is the last,
+	 * highest, block group).
 	 */
-	if (!btrfs_fs_compat_ro(trans->fs_info, BLOCK_GROUP_TREE))
-		ASSERT(ret == 0);
-
 	start = block_group->start;
 	end = block_group->start + block_group->length;
 	while (ret == 0) {
fs/btrfs/relocation.c +7 -6
index 8cc1f4b83277..b21b5e0f8905 100644
@@ -3877,6 +3877,7 @@ static noinline_for_stack struct inode *create_reloc_inode(
 /*
  * Mark start of chunk relocation that is cancellable. Check if the cancellation
  * has been requested meanwhile and don't start in that case.
+ * NOTE: if this returns an error, reloc_chunk_end() must not be called.
  *
  * Return:
  *   0             success
@@ -3893,10 +3894,8 @@ static int reloc_chunk_start(struct btrfs_fs_info *fs_info)
 
 	if (atomic_read(&fs_info->reloc_cancel_req) > 0) {
 		btrfs_info(fs_info, "chunk relocation canceled on start");
-		/*
-		 * On cancel, clear all requests but let the caller mark
-		 * the end after cleanup operations.
-		 */
+		/* On cancel, clear all requests. */
[… more lines in the raw message]

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

fs/dax.c +1 -1
index 8c09578fa035..e1451efaab14 100644

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

fs/dcache.c +2 -0
index 4030c010a768..74d49b2b3b6e 100644

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

fs/eventpoll.c +29 -116

145 lines not on this page · raw message

fs/ext4/ext4_jbd2.c +9 -2
index d1a2e6624401..32f59295cfa0 100644

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

fs/ext4/inode.c +8 -0
index 91a9fa6f1ad4..563cd0726424 100644

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

fs/ext4/super.c +5 -12
index 527f53bfe1b1..16a6c249580e 100644

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

fs/f2fs/data.c +1 -1
index fe23ebfc88ea..f5252f3e840a 100644

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

fs/hfsplus/unicode.c +24 -0
index 36b6cf2a3abb..ebd326799f35 100644

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

fs/jbd2/transaction.c +9 -4
index c2b8ad0b24c4..82bd29c17085 100644

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

fs/nfsd/blocklayout.c +2 -3
index 01d7fd108cf3..59f119cce3dc 100644

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

fs/nfsd/blocklayoutxdr.c +2 -5
index 1ed2f691ebb9..dd35c472eb37 100644

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

fs/nfsd/export.c +52 -8

60 lines not on this page · raw message

fs/nfsd/export.h +2 -0
index ca9dc230ae3d..4a48b2ad5606 100644

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

fs/nfsd/flexfilelayout.c +8 -0
index 3ca5304440ff..0bc52e6bec39 100644

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

fs/nfsd/flexfilelayoutxdr.c +1 -2
index bb205328e043..223a10f37898 100644

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

fs/nfsd/nfs4layouts.c +0 -1
index e8a80052cb1b..308214378fd3 100644

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

fs/nfsd/nfs4proc.c +14 -20
index e9c1271b7ecc..836367d839bd 100644

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

fs/nfsd/nfs4xdr.c +1 -13
index 76dfbb99277f..3eff780fd8da 100644

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

fs/nfsd/nfsfh.c +11 -1
index c2495d98c189..283c1a60c846 100644

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

fs/nfsd/xdr4.h +35 -1
index 144e05efd14c..a83a52b0f518 100644

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

fs/nilfs2/the_nilfs.c +0 -3
index be41e26b7824..05fdbbc63e1f 100644

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

fs/ocfs2/super.c +2 -4
index e585e77cdc88..18dba873a163 100644

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

fs/quota/dquot.c +10 -3
index 67562c78e57d..42a7d0a71b22 100644

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

fs/quota/quota_v1.c +2 -1
index a0db3f195e95..8aaf4a501fc0 100644

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

fs/quota/quota_v2.c +3 -6
index 7978ab671e0c..d73f44329277 100644

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

fs/smb/client/inode.c +4 -2
index 6c16c4f34d88..e55852aa49f9 100644

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

fs/smb/client/misc.c +17 -0
index ad77952f6d81..9b5aeafe220b 100644

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

fs/smb/client/smb2ops.c +4 -4
index ee6a6ba13f89..b02114b734dc 100644

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

fs/smb/server/ksmbd_netlink.h +2 -1
index c6c1844d4448..363501fc308a 100644

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

fs/smb/server/server.h +1 -0
index d0744498ceed..48bd203abb44 100644

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

fs/smb/server/smb2pdu.c +4 -0
index 93c31feab356..9a58c5a6f986 100644

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

fs/smb/server/transport_ipc.c +1 -0
index 80581a7bc1bc..354f7144c590 100644

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

fs/smb/server/transport_tcp.c +32 -37

69 lines not on this page · raw message

fs/smb/server/transport_tcp.h +1 -0
index 5925ec5df475..bf6a3d71f7a0 100644

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

fs/xfs/libxfs/xfs_log_format.h +29 -1
index 269573c82808..e267fc9d3108 100644

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

fs/xfs/scrub/reap.c +16 -3
index 822f5adf7f7c..b968f7bc202c 100644

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

fs/xfs/xfs_log.c +4 -4
index a1650fc81382..d03976b82180 100644

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

fs/xfs/xfs_log_priv.h +2 -2
index e30c06ec20e3..a183bfb36470 100644

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

fs/xfs/xfs_log_recover.c +24 -10
index 60382eb49961..f708bf4104b1 100644

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

fs/xfs/xfs_ondisk.h +2 -0
index c4cc99b70dd3..618bf4f03f28 100644

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

include/linux/cpufreq.h +3 -0
index bfecd9dcb552..1f94fe8559a9 100644

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

include/linux/mm.h +1 -1
index ba77f08900ca..fa5b11452ae6 100644

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

include/linux/pci.h +14 -0
index 0511f6f9a4e6..e4338237a054 100644

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

include/linux/pm_runtime.h +4 -0
index 4b74f0f012a5..c3a462ff1206 100644

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

include/linux/quota.h +1 -1
index 07071e64abf3..89a0d83ddad0 100644

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

include/linux/usb/gadget.h +25 -0
index 75bda0783395..aa831e16c3d3 100644

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

include/net/ip_tunnels.h +15 -0
index 006a61ddd36f..3d36794cb189 100644

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

kernel/padata.c +5 -1
index 93cd7704ab63..9260ab0b39eb 100644

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

kernel/sched/fair.c +19 -19
index 1cf43e91ae9d..58231999d929 100644

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

mm/shmem.c +1 -6
index ecf1011cc3e2..2260def68090 100644

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

net/ipv4/ip_tunnel.c +0 -14
index b5d64cd3ab0a..090403c8cc6c 100644

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

net/ipv4/tcp_output.c +15 -4
index 560273e7f773..88551db62ca2 100644

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

net/ipv6/ip6_tunnel.c +1 -2
index d645d022ce77..e635ddd41aba 100644

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

net/tls/tls_main.c +2 -5
index d7dea82bcf56..c7ee44bd3206 100644

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

net/tls/tls_sw.c +26 -7
index 435235a351e2..410e39e4b79f 100644

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

rust/bindings/bindings_helper.h +2 -0
index c91a3c24f607..5416f21918e0 100644

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

rust/bindings/lib.rs +1 -0
index 9bcbea04dac3..7d9078b94a8f 100644

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

sound/firewire/amdtp-stream.h +1 -1
index 775db3fc4959..ec10270c2cce 100644

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

sound/soc/codecs/idt821034.c +6 -6
index 2cc7b9166e69..068a5448e273 100644

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

sound/soc/codecs/nau8821.c +40 -13

53 lines not on this page · raw message

sound/usb/card.c +8 -2
index 7743ea983b1a..9335bc20c56d 100644

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

tools/testing/selftests/bpf/prog_tests/arg_parsing.c +9 -3
index bb143de68875..e27d66b75fb1 100644

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

The rest of this diff is not shown. View the raw message.

Part of the diff is not shown here. View the raw message.