Linux 6.6.114
Greg Kroah-Hartman
maintainerI'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
Greg Kroah-Hartman
maintainerDocumentation/arch/arm64/silicon-errata.rst +2 -0
@@ -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
@@ -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 = 6 -SUBLEVEL = 113 +SUBLEVEL = 114 EXTRAVERSION = NAME = Pinguïn Aangedreven
arch/arm64/Kconfig +1 -0
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 */
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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. */
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/nfsd/export.c +52 -8
60 lines not on this page · raw message
fs/smb/server/transport_tcp.c +32 -37
69 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.