Linux 6.6.115
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.6.115 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/devicetree/bindings/usb/fsl,imx8mp-dwc3.yaml | 10 Makefile | 6 arch/arm64/include/asm/pgtable.h | 3 arch/m68k/include/asm/bitops.h | 25 - arch/mips/mti-malta/malta-setup.c | 2 arch/nios2/kernel/setup.c | 15 arch/powerpc/include/asm/pgtable.h | 12 arch/powerpc/mm/book3s32/mmu.c | 4 arch/powerpc/mm/pgtable_32.c | 2 arch/riscv/include/asm/pgtable.h | 2 arch/riscv/kernel/cpu.c | 4 arch/x86/kernel/cpu/microcode/amd.c | 2 arch/x86/kernel/cpu/resctrl/monitor.c | 8 drivers/acpi/acpica/tbprint.c | 6 drivers/android/binder.c | 11 drivers/base/arch_topology.c | 2 drivers/base/devcoredump.c | 138 ++++--- drivers/comedi/comedi_buf.c | 2 drivers/cpuidle/governors/menu.c | 21 - drivers/firmware/arm_scmi/common.h | 24 + drivers/firmware/arm_scmi/driver.c | 47 -- drivers/gpio/Kconfig | 4 drivers/gpio/gpio-104-idio-16.c | 1 drivers/gpio/gpio-ljca.c | 250 +++++++------ drivers/gpio/gpio-pci-idio-16.c | 1 drivers/hwmon/sht3x.c | 27 - drivers/misc/fastrpc.c | 2 drivers/misc/lkdtm/fortify.c | 6 drivers/misc/mei/hw-me-regs.h | 2 drivers/misc/mei/pci-me.c | 2 drivers/most/most_usb.c | 13 drivers/net/bonding/bond_main.c | 40 -- drivers/net/can/bxcan.c | 2 drivers/net/can/dev/netlink.c | 6 drivers/net/ethernet/amazon/ena/ena_netdev.c | 2 drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 3 drivers/net/ethernet/freescale/enetc/enetc.c | 27 + drivers/net/ethernet/freescale/enetc/enetc.h | 2 drivers/net/ethernet/freescale/fec_main.c | 2 drivers/net/ethernet/intel/i40e/i40e_txrx.c | 2 drivers/net/ethernet/intel/ice/ice_txrx_lib.c | 2 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 2 drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 2 drivers/net/ethernet/marvell/mvneta.c | 2 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 2 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en.h | 7 drivers/net/ethernet/mellanox/mlx5/core/en/params.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en/xdp.h | 6 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 128 ++++-- drivers/net/ethernet/netronome/nfp/nfd3/xsk.c | 2 drivers/net/ethernet/renesas/ravb_main.c | 24 + drivers/net/ethernet/sfc/efx_channels.c | 2 drivers/net/ethernet/sfc/siena/efx_channels.c | 2 drivers/net/ethernet/socionext/netsec.c | 2 drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 9 drivers/net/ethernet/ti/cpsw_priv.c | 2 drivers/net/usb/rtl8150.c | 11 drivers/perf/hisilicon/hisi_uncore_pmu.c | 2 drivers/perf/hisilicon/hisi_uncore_pmu.h | 3 drivers/s390/cio/device.c | 37 + drivers/spi/spi-nxp-fspi.c | 6 drivers/tty/serial/8250/8250_dw.c | 4 drivers/tty/serial/8250/8250_exar.c | 11 drivers/tty/serial/8250/8250_mtk.c | 6 drivers/usb/core/quirks.c | 2 drivers/usb/gadget/legacy/raw_gadget.c | 2 drivers/usb/host/xhci-dbgcap.c | 9 drivers/usb/serial/option.c | 10 drivers/usb/typec/tcpm/tcpm.c | 4 fs/dlm/lockspace.c | 2 fs/exec.c | 2 fs/fuse/dir.c | 2 fs/fuse/file.c | 75 ++- fs/fuse/fuse_i.h | 2 fs/hfs/bfind.c | 8 fs/hfs/brec.c | 27 + fs/hfs/mdb.c | 2 fs/hfsplus/bfind.c | 8 fs/hfsplus/bnode.c | 41 -- fs/hfsplus/btree.c | 6 fs/hfsplus/hfsplus_fs.h | 42 ++ fs/hfsplus/super.c | 25 - fs/notify/fdinfo.c | 6 fs/ocfs2/move_extents.c | 5 fs/smb/client/cifsglob.h | 2 fs/smb/server/transport_ipc.c | 8 fs/smb/server/transport_rdma.c | 11 fs/xfs/xfs_super.c | 33 + io_uring/filetable.c | 2 kernel/dma/debug.c | 5 kernel/sched/sched.h | 2 net/core/rtnetlink.c | 3 net/sctp/inqueue.c | 13 net/vmw_vsock/af_vsock.c | 38 - tools/testing/selftests/net/mptcp/mptcp_join.sh | 6 tools/testing/selftests/net/sctp_hello.c | 17 tools/testing/selftests/net/sctp_vrf.sh | 85 ++-- 99 files changed, 922 insertions(+), 603 deletions(-)
Alexander Aring (1):
dlm: check for defined force value in dlm_lockspace_release
Alexander Usyskin (1):
mei: me: add wildcat lake P DID
Alexey Simakov (1):
sctp: avoid NULL dereference when chunk data buffer is missing
Alice Ryhl (1):
binder: remove "invalid inc weak" check
Alok Tiwari (1):
io_uring: correct __must_hold annotation in io_install_fixed_file
Amery Hung (2):
net/mlx5e: RX, Fix generating skb from non-linear xdp_buff for legacy RQ net/mlx5e: RX, Fix generating skb from non-linear xdp_buff for striding RQ
Amir Goldstein (1):
fuse: allocate ff->release_args only if release is needed
Andrew Cooper (1):
x86/microcode: Fix Entrysign revision check for Zen1/Naples
Andrey Konovalov (1):
usb: raw-gadget: do not limit transfer length
Andy Shevchenko (1):
sched: Remove never used code in mm_cid_get()
Anup Patel (2):
RISC-V: Define pgprot_dmacoherent() for non-coherent devices
RISC-V: Don't print details of CPUs disabled in DT
Artem Shimko (2):
firmware: arm_scmi: Fix premature SCMI_XFER_FLAG_IS_RAW clearing in raw mode
serial: 8250_dw: handle reset control deassert error
Babu Moger (1):
x86/resctrl: Fix miscount of bandwidth event when reactivating previously unavailable RMID
Carolina Jubran (1):
net/mlx5e: Reuse per-RQ XDP buffer to avoid stack zeroing overhead
Christophe Leroy (1):
powerpc/32: Remove PAGE_KERNEL_TEXT to fix startup failure
Cristian Marussi (1):
firmware: arm_scmi: Account for failed debug initialization
Daniel Golle (1):
serial: 8250_mtk: Enable baud clock and manage in runtime PM
Darrick J. Wong (2):
xfs: always warn about deprecated mount options
fuse: fix livelock in synchronous file put from fuseblk workers
David Howells (1):
cifs: Fix TCP_Server_Info::credits to be signed
Deepanshu Kartikey (2):
ocfs2: clear extent cache after moving/defragmenting extents
comedi: fix divide-by-zero in comedi_buf_munge()
Florian Eckert (1):
serial: 8250_exar: add support for Advantech 2 port card with Device ID 0x0018
Geert Uytterhoeven (1):
m68k: bitops: Fix find_*_bit() signatures
Greg Kroah-Hartman (1):
Linux 6.6.115
Guenter Roeck (1):
hwmon: (sht3x) Fix error handling
Han Xu (1):
spi: spi-nxp-fspi: add extra delay after dll locked
Hangbin Liu (1):
selftests/net: convert sctp_vrf.sh to run it in unique namespace
Haotian Zhang (1):
gpio: ljca: Fix duplicated IRQ mapping
Haoyu Li (1):
gpio: ljca: Initialize num before accessing item in ljca_gpio_config
Huang Ying (1):
arm64, mm: avoid always making PTE dirty in pte_mkwrite()
Ioana Ciornei (1):
dpaa2-eth: fix the pointer passed to PTR_ALIGN on Tx path
Jakub Acs (1):
fs/notify: call exportfs_encode_fid with s_umount
Jianpeng Chang (1):
net: enetc: fix the deadlock of enetc_mdio_lock
Johannes Wiesböck (1):
rtnetlink: Allow deleting FDB entries in user namespace
Junhao Xie (1):
misc: fastrpc: Fix dma_buf object leak in fastrpc_map_lookup
Junjie Cao (1):
lkdtm: fortify: Fix potential NULL dereference on kmalloc failure
Kaushlendra Kumar (1):
arch_topology: Fix incorrect error check in topology_parse_cpu_capacity()
LI Qingwu (1):
USB: serial: option: add Telit FN920C04 ECM compositions
Lad Prabhakar (2):
net: ravb: Enforce descriptor type ordering
net: ravb: Ensure memory write completes before ringing TX doorbell
Linus Torvalds (1):
Unbreak 'make tools/*' for user-space targets
Maarten Lankhorst (1):
devcoredump: Fix circular locking dependency with devcd->mutex.
Maciej W. Rozycki (1):
MIPS: Malta: Fix keyboard resource preventing i8042 driver from registering
Marc Kleine-Budde (2):
can: bxcan: bxcan_start_xmit(): use can_dev_dropped_skb() instead of can_dropped_invalid_skb()
can: netlink: can_changelink(): allow disabling of automatic restart
Marek Szyprowski (1):
dma-debug: don't report false positives with DMA_BOUNCE_UNALIGNED_KMALLOC
Mathias Nyman (1):
xhci: dbc: enable back DbC in resume if it was enabled before suspend
Matthieu Baerts (NGI0) (2):
selftests: mptcp: join: mark 'flush re-add' as skipped if not supported
selftests: mptcp: join: mark implicit tests as skipped if not supported
Michael Grzeschik (1):
tcpm: switch check for role_sw device with fw_node
Michal Pecio (1):
net: usb: rtl8150: Fix frame padding
Nathan Chancellor (1):
net/mlx5e: Return 1 instead of 0 in invalid case in mlx5e_mpwrq_umr_entry_size()
Qianchang Zhao (1):
ksmbd: transport_ipc: validate payload size before reading handle
Rafael J. Wysocki (1):
Revert "cpuidle: menu: Avoid discarding useful information"
Reinhard Speyerer (1):
USB: serial: option: add Quectel RG255C
Renjun Wang (1):
USB: serial: option: add UNISOC UIS7720
Sebastian Andrzej Siewior (1):
net: Tree wide: Replace xdp_do_flush_map() with xdp_do_flush().
Sebastian Reichel (1):
net: stmmac: dwmac-rk: Fix disabling set_clock_selection
Simon Schuster (1):
nios2: ensure that memblock.current_limit is set when setting pfn limits
Stefan Metzmacher (1):
smb: server: let smb_direct_flush_send_list() invalidate a remote key first
Stefano Garzarella (1):
vsock: fix lock inversion in vsock_assign_transport()
Tim Guttzeit (1):
usb/core/quirks: Add Huawei ME906S to wakeup quirk
Tonghao Zhang (1):
net: bonding: fix possible peer notify event loss or dup issue
Viacheslav Dubeyko (5):
hfs: clear offset and space out of valid records in b-tree node
hfs: make proper initalization of struct hfs_find_data
hfsplus: fix KMSAN uninit-value issue in __hfsplus_ext_cache_extent()
hfsplus: fix KMSAN uninit-value issue in hfsplus_delete_cat()
hfs: fix KMSAN uninit-value issue in hfs_find_set_zero_bits()
Victoria Votokina (2):
most: usb: Fix use-after-free in hdm_disconnect
most: usb: hdm_probe: Fix calling put_device() before device initialization
Vineeth Vijayan (1):
s390/cio: Update purge function to unregister the unused subchannels
Wei Fang (1):
net: enetc: correct the value of ENETC_RXB_TRUESIZE
Wentong Wu (1):
gpio: update Intel LJCA USB GPIO driver
William Breathitt Gray (2):
gpio: pci-idio-16: Define maximum valid register address offset
gpio: 104-idio-16: Define maximum valid register address offset
Xi Ruoyao (1):
ACPICA: Work around bogus -Wstringop-overread warning since GCC 11
Xichao Zhao (1):
exec: Fix incorrect type for ret
Xin Long (1):
selftests: net: fix server bind failure in sctp_vrf.sh
Xu Yang (1):
dt-bindings: usb: dwc3-imx8mp: dma-range is required only for imx8mp
Yang Chenzhi (1):
hfs: validate record offset in hfsplus_bmap_alloc
Yangtao Li (1):
hfsplus: return EIO when type of hidden directory mismatch in hfsplus_fill_super()
Yicong Yang (1):
drivers/perf: hisi: Relax the event ID check in the framework
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/usb/fsl,imx8mp-dwc3.yaml +9 -1
@@ -85,13 +85,21 @@ required: - reg - "#address-cells" - "#size-cells" - - dma-ranges - ranges - clocks - clock-names - interrupts - power-domains +allOf: + - if: + properties: + compatible: + const: fsl,imx8mp-dwc3 + then: + required: + - dma-ranges + additionalProperties: false examples:
Makefile +3 -3
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 114 +SUBLEVEL = 115 EXTRAVERSION = NAME = Pinguïn Aangedreven
@@ -1358,11 +1358,11 @@ endif tools/: FORCE $(Q)mkdir -p $(objtree)/tools - $(Q)$(MAKE) LDFLAGS= O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ + $(Q)$(MAKE) O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ tools/%: FORCE $(Q)mkdir -p $(objtree)/tools - $(Q)$(MAKE) LDFLAGS= O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $* + $(Q)$(MAKE) O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $* # --------------------------------------------------------------------------- # Kernel selftest
arch/arm64/include/asm/pgtable.h +2 -1
@@ -184,7 +184,8 @@ static inline pmd_t set_pmd_bit(pmd_t pmd, pgprot_t prot)static inline pte_t pte_mkwrite_novma (pte_t pte) { pte =set_pte_bit (pte,__pgprot (PTE_WRITE )); - pte =clear_pte_bit (pte,__pgprot (PTE_RDONLY )); +if (pte_sw_dirty (pte)) + pte =clear_pte_bit (pte,__pgprot (PTE_RDONLY ));return pte; }
arch/m68k/include/asm/bitops.h +14 -11
@@ -329,12 +329,12 @@ arch___test_and_change_bit(unsigned long nr, volatile unsigned long *addr)#include <asm-generic/bitops/ffz.h> #else -static inline int find_first_zero_bit (const unsigned long *vaddr, -unsigned size) +static inline unsigned long find_first_zero_bit (const unsigned long *vaddr, +unsigned long size) {const unsigned long *p = vaddr; -int res =32 ; -unsigned int words; +unsigned long res =32 ; +unsigned long words;unsigned long num;if (!size)
@@ -355,8 +355,9 @@ static inline int find_first_zero_bit(const unsigned long *vaddr, }#define find_first_zero_bit find_first_zero_bit -static inline int find_next_zero_bit (const unsigned long *vaddr,int size, -int offset) +static inline unsigned long find_next_zero_bit (const unsigned long *vaddr, +unsigned long size, +unsigned long offset) {const unsigned long *p = vaddr + (offset >>5 );int bit = offset &31UL , res;
@@ -385,11 +386,12 @@ static inline int find_next_zero_bit(const unsigned long *vaddr, int size, }#define find_next_zero_bit find_next_zero_bit -static inline int find_first_bit (const unsigned long *vaddr,unsigned size) +static inline unsigned long find_first_bit (const unsigned long *vaddr, +unsigned long size) {const unsigned long *p = vaddr; -int res =32 ; -unsigned int words; +unsigned long res =32 ; +unsigned long words;unsigned long num;if (!size)
@@ -410,8 +412,9 @@ static inline int find_first_bit(const unsigned long *vaddr, unsigned size) }#define find_first_bit find_first_bit -static inline int find_next_bit (const unsigned long *vaddr,int size, -int offset) +static inline unsigned long find_next_bit (const unsigned long *vaddr, +unsigned long size, +unsigned long offset) {const unsigned long *p = vaddr + (offset >>5 );int bit = offset &31UL , res;
arch/mips/mti-malta/malta-setup.c +1 -1
@@ -47,7 +47,7 @@ static struct resource standard_io_resources[] = { .name = "keyboard", .start = 0x60, .end = 0x6f, - .flags =IORESOURCE_IO |IORESOURCE_BUSY + .flags =IORESOURCE_IO }, { .name = "dma page reg",
arch/nios2/kernel/setup.c +15 -0
@@ -147,6 +147,20 @@ static void __init find_limits(unsigned long *min, unsigned long *max_low, *max_high =PFN_DOWN (memblock_end_of_DRAM ()); } +static void __init adjust_lowmem_bounds (void ) +{ +phys_addr_t block_start, block_end; +u64 i; +phys_addr_t memblock_limit =0 ; + +for_each_mem_range (i, &block_start, &block_end) { +if (block_end > memblock_limit) + memblock_limit = block_end; + } + +memblock_set_current_limit (memblock_limit); +} +void __init setup_arch (char **cmdline_p) {console_verbose ();
@@ -160,6 +174,7 @@ void __init setup_arch(char **cmdline_p)/* Keep a copy of command line */ *cmdline_p = boot_command_line; +adjust_lowmem_bounds ();find_limits (&min_low_pfn, &max_low_pfn, &max_pfn); max_mapnr = max_low_pfn;
arch/powerpc/include/asm/pgtable.h +0 -12
@@ -20,18 +20,6 @@ struct mm_struct;#include <asm/nohash/pgtable.h> #endif /* !CONFIG_PPC_BOOK3S */ -/* -* Protection used for kernel text. We want the debuggers to be able to -* set breakpoints anywhere, so don't write protect the kernel text -* on platforms where such control is possible. -*/ -#if defined(CONFIG_KGDB ) || defined(CONFIG_XMON ) || defined(CONFIG_BDI_SWITCH ) || \ - defined(CONFIG_KPROBES ) || defined(CONFIG_DYNAMIC_FTRACE ) -#define PAGE_KERNEL_TEXT PAGE_KERNEL_X -#else -#define PAGE_KERNEL_TEXT PAGE_KERNEL_ROX -#endif -/* Make modules code happy. We don't set RO yet */ #define PAGE_KERNEL_EXEC PAGE_KERNEL_X
arch/powerpc/mm/book3s32/mmu.c +2 -2
@@ -204,7 +204,7 @@ void mmu_mark_initmem_nx(void)for (i =0 ; i < nb -1 && base < top;) { size =bat_block_size (base, top); -setibat (i++,PAGE_OFFSET + base, base, size,PAGE_KERNEL_TEXT ); +setibat (i++,PAGE_OFFSET + base, base, size,PAGE_KERNEL_X ); base += size; }if (base < top) {
@@ -215,7 +215,7 @@ void mmu_mark_initmem_nx(void)pr_warn ("Some RW data is getting mapped X. " "Adjust CONFIG_DATA_SHIFT to avoid that.\n" ); } -setibat (i++,PAGE_OFFSET + base, base, size,PAGE_KERNEL_TEXT ); +setibat (i++,PAGE_OFFSET + base, base, size,PAGE_KERNEL_X ); base += size; }for (; i < nb; i++)
arch/powerpc/mm/pgtable_32.c +1 -1
@@ -109,7 +109,7 @@ static void __init __mapin_ram_chunk(unsigned long offset, unsigned long top) p = memstart_addr + s;for (; s < top; s +=PAGE_SIZE ) { ktext =core_kernel_text (v); -map_kernel_page (v, p, ktext ?PAGE_KERNEL_TEXT :PAGE_KERNEL ); +map_kernel_page (v, p, ktext ?PAGE_KERNEL_X :PAGE_KERNEL ); v +=PAGE_SIZE ; p +=PAGE_SIZE ; }
arch/riscv/include/asm/pgtable.h +2 -0
@@ -618,6 +618,8 @@ static inline pgprot_t pgprot_writecombine(pgprot_t _prot)return __pgprot (prot); } +#define pgprot_dmacoherent pgprot_writecombine +/* * THP functions */
arch/riscv/kernel/cpu.c +1 -3
@@ -61,10 +61,8 @@ int __init riscv_early_of_processor_hartid(struct device_node *node, unsigned loreturn -ENODEV ; } -if (!of_device_is_available (node)) { -pr_info ("CPU with hartid=%lu is not available\n" , *hart); +if (!of_device_is_available (node))return -ENODEV ; - }if (of_property_read_string (node,"riscv,isa-base" , &isa)) goto old_interface;
arch/x86/kernel/cpu/microcode/amd.c +1 -1
@@ -184,7 +184,7 @@ static bool need_sha_check(u32 cur_rev) }switch (cur_rev >>8 ) { -case 0x80012 :return cur_rev <=0x800126f ;break ; +case 0x80012 :return cur_rev <=0x8001277 ;break ;case 0x80082 :return cur_rev <=0x800820f ;break ;case 0x83010 :return cur_rev <=0x830107c ;break ;case 0x86001 :return cur_rev <=0x860010e ;break ;
arch/x86/kernel/cpu/resctrl/monitor.c +6 -2
@@ -241,11 +241,15 @@ int resctrl_arch_rmid_read(struct rdt_resource *r, struct rdt_domain *d,if (!cpumask_test_cpu (smp_processor_id (), &d->cpu_mask))return -EINVAL ; + am =get_arch_mbm_state (hw_dom, rmid, eventid); + ret =__rmid_read (rmid, eventid, &msr_val); -if (ret) +if (ret) { +if (am && ret == -EINVAL ) + am->prev_msr =0 ;return ret; + } - am =get_arch_mbm_state (hw_dom, rmid, eventid);if (am) { am->chunks +=mbm_overflow_count (am->prev_msr, msr_val, hw_res->mbm_width);
drivers/acpi/acpica/tbprint.c +6 -0
@@ -95,6 +95,11 @@ acpi_tb_print_table_header(acpi_physical_address address, {struct acpi_table_header local_header; +#pragma GCC diagnostic push +#if defined(__GNUC__) && __GNUC__ >=11 +#pragma GCC diagnostic ignored "-Wstringop-overread" +#endif +if (ACPI_COMPARE_NAMESEG (header->signature,ACPI_SIG_FACS )) {/* FACS only has signature and length fields */
@@ -135,4 +140,5 @@ acpi_tb_print_table_header(acpi_physical_address address, local_header.asl_compiler_id, local_header.asl_compiler_revision)); } +#pragma GCC diagnostic pop }
drivers/android/binder.c +1 -10
@@ -846,17 +846,8 @@ static int binder_inc_node_nilocked(struct binder_node *node, int strong, }else {if (!internal) node->local_weak_refs++; -if (!node->has_weak_ref &&list_empty (&node->work.entry)) { -if (target_list ==NULL ) { -pr_err ("invalid inc weak node for %d\n" , - node->debug_id); -return -EINVAL ; - } -/* -* See comment above -*/ +if (!node->has_weak_ref && target_list &&list_empty (&node->work.entry))binder_enqueue_work_ilocked (&node->work, target_list); - } }return 0 ; }
drivers/base/arch_topology.c +1 -1
@@ -326,7 +326,7 @@ bool __init topology_parse_cpu_capacity(struct device_node *cpu_node, int cpu)* frequency (by keeping the initial capacity_freq_ref value). */ cpu_clk =of_clk_get (cpu_node,0 ); -if (!PTR_ERR_OR_ZERO (cpu_clk)) { +if (!IS_ERR_OR_NULL (cpu_clk)) {per_cpu (capacity_freq_ref, cpu) =clk_get_rate (cpu_clk) /HZ_PER_KHZ ;clk_put (cpu_clk);
drivers/base/devcoredump.c +84 -54
211 lines not on this page · raw message
drivers/comedi/comedi_buf.c +1 -1
@@ -368,7 +368,7 @@ static unsigned int comedi_buf_munge(struct comedi_subdevice *s,unsigned int count =0 ;const unsigned int num_sample_bytes =comedi_bytes_per_sample (s); -if (!s->munge || (async->cmd.flags &CMDF_RAWDATA )) { +if (!s->munge || (async->cmd.flags &CMDF_RAWDATA ) || async->cmd.chanlist_len ==0 ) { async->munge_count += num_bytes;return num_bytes; }
drivers/cpuidle/governors/menu.c +9 -12
@@ -230,20 +230,17 @@ static unsigned int get_typical_interval(struct menu_device *data)* * This can deal with workloads that have long pauses interspersed * with sporadic activity with a bunch of short pauses. +* +* However, if the number of remaining samples is too small to exclude +* any more outliers, allow the deepest available idle state to be +* selected because there are systems where the time spent by CPUs in +* deep idle states is correlated to the maximum frequency the CPUs +* can get to. On those systems, shallow idle states should be avoided +* unless there is a clear indication that the given CPU is most likley +* going to be woken up shortly. */ -if (divisor *4 <=INTERVALS *3 ) { -/* -* If there are sufficiently many data points still under -* consideration after the outliers have been eliminated, -* returning without a prediction would be a mistake because it -* is likely that the next interval will not exceed the current -* maximum, so return the latter in that case. -*/ -if (divisor >=INTERVALS /2 ) -return max; - +if (divisor *4 <=INTERVALS *3 )return UINT_MAX ; - } thresh = max -1 ; goto again;
drivers/firmware/arm_scmi/common.h +21 -3
@@ -321,10 +321,28 @@ enum debug_counters {SCMI_DEBUG_COUNTERS_LAST }; -static inline void scmi_inc_count (atomic_t *arr,int stat) +/** +* struct scmi_debug_info - Debug common info +* @top_dentry: A reference to the top debugfs dentry +* @name: Name of this SCMI instance +* @type: Type of this SCMI instance +* @is_atomic: Flag to state if the transport of this instance is atomic +* @counters: An array of atomic_c's used for tracking statistics (if enabled) +*/ +struct scmi_debug_info { +struct dentry *top_dentry; +const char *name; +const char *type; +bool is_atomic; +atomic_t counters[SCMI_DEBUG_COUNTERS_LAST ]; +}; + +static inline void scmi_inc_count (struct scmi_debug_info *dbg,int stat) { -if (IS_ENABLED (CONFIG_ARM_SCMI_DEBUG_COUNTERS )) -atomic_inc (&arr[stat]); +if (IS_ENABLED (CONFIG_ARM_SCMI_DEBUG_COUNTERS )) { +if (dbg) +atomic_inc (&dbg->counters[stat]); + } }enum scmi_bad_msg {
drivers/firmware/arm_scmi/driver.c +15 -32
142 lines not on this page · raw message
drivers/gpio/Kconfig +2 -2
@@ -1313,9 +1313,9 @@ config GPIO_KEMPLD config GPIO_LJCA tristate "INTEL La Jolla Cove Adapter GPIO support" - depends on MFD_LJCA + depends on USB_LJCA select GPIOLIB_IRQCHIP - default MFD_LJCA + default USB_LJCA help Select this option to enable GPIO driver for the INTEL La Jolla Cove Adapter (LJCA) board.
drivers/gpio/gpio-104-idio-16.c +1 -0
@@ -59,6 +59,7 @@ static const struct regmap_config idio_16_regmap_config = { .reg_stride = 1, .val_bits = 8, .io_port = true, + .max_register = 0x5, .wr_table = &idio_16_wr_table, .rd_table = &idio_16_rd_table, .volatile_table = &idio_16_rd_table,
drivers/gpio/gpio-ljca.c +141 -109
477 lines not on this page · raw message
drivers/gpio/gpio-pci-idio-16.c +1 -0
@@ -41,6 +41,7 @@ static const struct regmap_config idio_16_regmap_config = { .reg_stride = 1, .val_bits = 8, .io_port = true, + .max_register = 0x7, .wr_table = &idio_16_wr_table, .rd_table = &idio_16_rd_table, .volatile_table = &idio_16_rd_table,
drivers/hwmon/sht3x.c +17 -10
@@ -288,24 +288,26 @@ static struct sht3x_data *sht3x_update_client(struct device *dev)return data; } -static int temp1_input_read (struct device *dev) +static int temp1_input_read (struct device *dev,long *temp) {struct sht3x_data *data =sht3x_update_client (dev);if (IS_ERR (data))return PTR_ERR (data); -return data->temperature; + *temp = data->temperature; +return 0 ; } -static int humidity1_input_read (struct device *dev) +static int humidity1_input_read (struct device *dev,long *humidity) {struct sht3x_data *data =sht3x_update_client (dev);if (IS_ERR (data))return PTR_ERR (data); -return data->humidity; + *humidity = data->humidity; +return 0 ; }/*
@@ -703,6 +705,7 @@ static int sht3x_read(struct device *dev, enum hwmon_sensor_types type, u32 attr, int channel, long *val) { enum sht3x_limits index; +int ret;switch (type) {case hwmon_chip:
@@ -717,10 +720,12 @@ static int sht3x_read(struct device *dev, enum hwmon_sensor_types type,case hwmon_temp:switch (attr) {case hwmon_temp_input: - *val =temp1_input_read (dev); -break ; +return temp1_input_read (dev, val);case hwmon_temp_alarm: - *val =temp1_alarm_read (dev); + ret =temp1_alarm_read (dev); +if (ret <0 ) +return ret; + *val = ret;break ;case hwmon_temp_max: index = limit_max;
@@ -745,10 +750,12 @@ static int sht3x_read(struct device *dev, enum hwmon_sensor_types type,case hwmon_humidity:switch (attr) {case hwmon_humidity_input: - *val =humidity1_input_read (dev); -break ; +return humidity1_input_read (dev, val);case hwmon_humidity_alarm: - *val =humidity1_alarm_read (dev); + ret =humidity1_alarm_read (dev); +if (ret <0 ) +return ret; + *val = ret;break ;case hwmon_humidity_max: index = limit_max;
drivers/misc/fastrpc.c +2 -0
@@ -383,6 +383,8 @@ static int fastrpc_map_lookup(struct fastrpc_user *fl, int fd, }spin_unlock (&fl->lock); +dma_buf_put (buf); +return ret; }
drivers/misc/lkdtm/fortify.c +6 -0
@@ -44,6 +44,9 @@ static void lkdtm_FORTIFY_STR_MEMBER(void)char *src; src =kmalloc (size,GFP_KERNEL ); +if (!src) +return ; +strscpy (src,"over ten bytes" , size); size =strlen (src) +1 ;
@@ -109,6 +112,9 @@ static void lkdtm_FORTIFY_MEM_MEMBER(void)char *src; src =kmalloc (size,GFP_KERNEL ); +if (!src) +return ; +strscpy (src,"over ten bytes" , size); size =strlen (src) +1 ;
drivers/misc/mei/hw-me-regs.h +2 -0
@@ -120,6 +120,8 @@#define MEI_DEV_ID_PTL_H 0xE370/* Panther Lake H */ #define MEI_DEV_ID_PTL_P 0xE470/* Panther Lake P */ +#define MEI_DEV_ID_WCL_P 0x4D70/* Wildcat Lake P */ +/* * MEI HW Section */
drivers/misc/mei/pci-me.c +2 -0
@@ -127,6 +127,8 @@ static const struct pci_device_id mei_me_pci_tbl[] = { {MEI_PCI_DEVICE(MEI_DEV_ID_PTL_H, MEI_ME_PCH15_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_PTL_P, MEI_ME_PCH15_CFG)}, + {MEI_PCI_DEVICE(MEI_DEV_ID_WCL_P, MEI_ME_PCH15_CFG)}, +/* required last entry */ {0, } };
drivers/most/most_usb.c +5 -8
@@ -929,6 +929,10 @@ static void release_mdev(struct device *dev) {struct most_dev *mdev =to_mdev_from_dev (dev); +kfree (mdev->busy_urbs); +kfree (mdev->cap); +kfree (mdev->conf); +kfree (mdev->ep_address);kfree (mdev); }/**
@@ -1093,7 +1097,7 @@ hdm_probe(struct usb_interface *interface, const struct usb_device_id *id) err_free_conf:kfree (mdev->conf); err_free_mdev: -put_device (&mdev->dev); +kfree (mdev);return ret; }
@@ -1121,13 +1125,6 @@ static void hdm_disconnect(struct usb_interface *interface)if (mdev->dci)device_unregister (&mdev->dci->dev);most_deregister_interface (&mdev->iface); - -kfree (mdev->busy_urbs); -kfree (mdev->cap); -kfree (mdev->conf); -kfree (mdev->ep_address); -put_device (&mdev->dci->dev); -put_device (&mdev->dev); }static int hdm_suspend (struct usb_interface *interface,pm_message_t message)
drivers/net/bonding/bond_main.c +18 -22
@@ -2874,7 +2874,7 @@ static void bond_mii_monitor(struct work_struct *work) { struct bonding *bond = container_of(work, struct bonding, mii_work.work); -bool should_notify_peers = false; +bool should_notify_peers;bool commit;unsigned long delay;struct slave *slave;
@@ -2886,30 +2886,33 @@ static void bond_mii_monitor(struct work_struct *work) goto re_arm;rcu_read_lock (); + should_notify_peers =bond_should_notify_peers (bond); commit = !!bond_miimon_inspect (bond); -if (bond->send_peer_notif) { -rcu_read_unlock (); -if (rtnl_trylock ()) { - bond->send_peer_notif--; -rtnl_unlock (); - } - }else { -rcu_read_unlock (); - } -if (commit) { +rcu_read_unlock (); + +if (commit || bond->send_peer_notif) {/* Race avoidance with bond_close cancel of workqueue */ if (!rtnl_trylock ()) { delay =1 ; - should_notify_peers = false; goto re_arm; } -bond_for_each_slave (bond, slave, iter) { -bond_commit_link_state (slave,BOND_SLAVE_NOTIFY_LATER ); +if (commit) { +bond_for_each_slave (bond, slave, iter) { +bond_commit_link_state (slave, +BOND_SLAVE_NOTIFY_LATER ); + } +bond_miimon_commit (bond); + } + +if (bond->send_peer_notif) { + bond->send_peer_notif--; +if (should_notify_peers) +call_netdevice_notifiers (NETDEV_NOTIFY_PEERS , + bond->dev); } -bond_miimon_commit (bond);rtnl_unlock ();/* might sleep, hold no other locks */ }
@@ -2917,13 +2920,6 @@ static void bond_mii_monitor(struct work_struct *work) re_arm:if (bond->params.miimon)queue_delayed_work (bond->wq, &bond->mii_work, delay); - -if (should_notify_peers) { -if (!rtnl_trylock ()) -return ; -call_netdevice_notifiers (NETDEV_NOTIFY_PEERS , bond->dev); -rtnl_unlock (); - } } static int bond_upper_dev_walk(struct net_device *upper,
drivers/net/can/bxcan.c +1 -1
@@ -842,7 +842,7 @@ static netdev_tx_t bxcan_start_xmit(struct sk_buff *skb,u32 id;int i, j; -if (can_dropped_invalid_skb (ndev, skb)) +if (can_dev_dropped_skb (ndev, skb))return NETDEV_TX_OK ;if (bxcan_tx_busy (priv))
drivers/net/can/dev/netlink.c +4 -2
@@ -285,7 +285,9 @@ static int can_changelink(struct net_device *dev, struct nlattr *tb[], }if (data[IFLA_CAN_RESTART_MS ]) { -if (!priv->do_set_mode) { +unsigned int restart_ms =nla_get_u32 (data[IFLA_CAN_RESTART_MS ]); + +if (restart_ms !=0 && !priv->do_set_mode) {NL_SET_ERR_MSG (extack,"Device doesn't support restart from Bus Off" );return -EOPNOTSUPP ;
@@ -294,7 +296,7 @@ static int can_changelink(struct net_device *dev, struct nlattr *tb[],/* Do not allow changing restart delay while running */ if (dev->flags &IFF_UP )return -EBUSY ; - priv->restart_ms =nla_get_u32 (data[IFLA_CAN_RESTART_MS ]); + priv->restart_ms = restart_ms; }if (data[IFLA_CAN_RESTART ]) {
drivers/net/ethernet/amazon/ena/ena_netdev.c +1 -1
@@ -1310,7 +1310,7 @@ static int ena_clean_rx_irq(struct ena_ring *rx_ring, struct napi_struct *napi, }if (xdp_flags &ENA_XDP_REDIRECT ) -xdp_do_flush_map (); +xdp_do_flush ();return work_done;
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +1 -2
@@ -1077,8 +1077,7 @@ static int dpaa2_eth_build_single_fd(struct dpaa2_eth_priv *priv,dma_addr_t addr; buffer_start = skb->data -dpaa2_eth_needed_headroom (skb); - aligned_start =PTR_ALIGN (buffer_start -DPAA2_ETH_TX_BUF_ALIGN , -DPAA2_ETH_TX_BUF_ALIGN ); + aligned_start =PTR_ALIGN (buffer_start,DPAA2_ETH_TX_BUF_ALIGN );if (aligned_start >= skb->head) buffer_start = aligned_start;else
drivers/net/ethernet/freescale/enetc/enetc.c +22 -5
@@ -1246,6 +1246,8 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring,/* next descriptor to process */ i = rx_ring->next_to_clean; +enetc_lock_mdio (); +while (likely (rx_frm_cnt < work_limit)) {union enetc_rx_bd *rxbd;struct sk_buff *skb;
@@ -1281,7 +1283,9 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring, rx_byte_cnt += skb->len +ETH_HLEN ; rx_frm_cnt++; +enetc_unlock_mdio ();napi_gro_receive (napi, skb); +enetc_lock_mdio (); } rx_ring->next_to_clean = i;
@@ -1289,6 +1293,8 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring, rx_ring->stats.packets += rx_frm_cnt; rx_ring->stats.bytes += rx_byte_cnt; +enetc_unlock_mdio (); +return rx_frm_cnt; }
@@ -1598,6 +1604,8 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,/* next descriptor to process */ i = rx_ring->next_to_clean; +enetc_lock_mdio (); +while (likely (rx_frm_cnt < work_limit)) {union enetc_rx_bd *rxbd, *orig_rxbd;int orig_i, orig_cleaned_cnt;
@@ -1657,7 +1665,9 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,if (unlikely (!skb)) goto out; +enetc_unlock_mdio ();napi_gro_receive (napi, skb); +enetc_lock_mdio ();break ;case XDP_TX : tx_ring = priv->xdp_tx_ring[rx_ring->index];
@@ -1692,7 +1702,9 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring, }break ;case XDP_REDIRECT : +enetc_unlock_mdio (); err =xdp_do_redirect (rx_ring->ndev, &xdp_buff, prog); +enetc_lock_mdio ();if (unlikely (err)) {enetc_xdp_drop (rx_ring, orig_i, i); rx_ring->stats.xdp_redirect_failures++;
@@ -1712,8 +1724,11 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring, rx_ring->stats.packets += rx_frm_cnt; rx_ring->stats.bytes += rx_byte_cnt; -if (xdp_redirect_frm_cnt) -xdp_do_flush_map (); +if (xdp_redirect_frm_cnt) { +enetc_unlock_mdio (); +xdp_do_flush (); +enetc_lock_mdio (); + }if (xdp_tx_frm_cnt)enetc_update_tx_ring_tail (tx_ring);
@@ -1722,6 +1737,8 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,enetc_refill_rx_ring (rx_ring,enetc_bd_unused (rx_ring) - rx_ring->xdp.xdp_tx_in_flight); +enetc_unlock_mdio (); +return rx_frm_cnt; }
@@ -1740,6 +1757,7 @@ static int enetc_poll(struct napi_struct *napi, int budget)for (i =0 ; i < v->count_tx_rings; i++)if (!enetc_clean_tx_ring (&v->tx_ring[i], budget)) complete = false; +enetc_unlock_mdio (); prog = rx_ring->xdp.prog;if (prog)
@@ -1751,10 +1769,8 @@ static int enetc_poll(struct napi_struct *napi, int budget)if (work_done) v->rx_napi_work = true; -if (!complete) { -enetc_unlock_mdio (); +if (!complete)return budget; - }napi_complete_done (napi, work_done);
@@ -1763,6 +1779,7 @@ static int enetc_poll(struct napi_struct *napi, int budget) v->rx_napi_work = false; +enetc_lock_mdio ();/* enable interrupts */ enetc_wr_reg_hot (v->rbier,ENETC_RBIER_RXTIE );
drivers/net/ethernet/freescale/enetc/enetc.h +1 -1
@@ -41,7 +41,7 @@ struct enetc_tx_swbd { };#define ENETC_RX_MAXFRM_SIZE ENETC_MAC_MAXFRM_SIZE -#define ENETC_RXB_TRUESIZE 2048/* PAGE_SIZE >> 1 */ +#define ENETC_RXB_TRUESIZE (PAGE_SIZE >> 1)#define ENETC_RXB_PAD NET_SKB_PAD/* add extra space if needed */ #define ENETC_RXB_DMA_SIZE \ (SKB_WITH_OVERHEAD(ENETC_RXB_TRUESIZE) - ENETC_RXB_PAD)
drivers/net/ethernet/freescale/fec_main.c +1 -1
@@ -1904,7 +1904,7 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id) rxq->bd.cur = bdp;if (xdp_result &FEC_ENET_XDP_REDIR ) -xdp_do_flush_map (); +xdp_do_flush ();return pkt_received; }
drivers/net/ethernet/intel/i40e/i40e_txrx.c +1 -1
@@ -2398,7 +2398,7 @@ void i40e_update_rx_stats(struct i40e_ring *rx_ring,void i40e_finalize_xdp_rx (struct i40e_ring *rx_ring,unsigned int xdp_res) {if (xdp_res &I40E_XDP_REDIR ) -xdp_do_flush_map (); +xdp_do_flush ();if (xdp_res &I40E_XDP_TX ) { struct i40e_ring *xdp_ring =
drivers/net/ethernet/intel/ice/ice_txrx_lib.c +1 -1
@@ -450,7 +450,7 @@ void ice_finalize_xdp_rx(struct ice_tx_ring *xdp_ring, unsigned int xdp_res,struct ice_tx_buf *tx_buf = &xdp_ring->tx_buf[first_idx];if (xdp_res &ICE_XDP_REDIR ) -xdp_do_flush_map (); +xdp_do_flush ();if (xdp_res &ICE_XDP_TX ) {if (static_branch_unlikely (&ice_xdp_locking_key))
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +1 -1
@@ -2421,7 +2421,7 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector, }if (xdp_xmit &IXGBE_XDP_REDIR ) -xdp_do_flush_map (); +xdp_do_flush ();if (xdp_xmit &IXGBE_XDP_TX ) {struct ixgbe_ring *ring =ixgbe_determine_xdp_ring (adapter);
drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c +1 -1
@@ -351,7 +351,7 @@ int ixgbe_clean_rx_irq_zc(struct ixgbe_q_vector *q_vector, }if (xdp_xmit &IXGBE_XDP_REDIR ) -xdp_do_flush_map (); +xdp_do_flush ();if (xdp_xmit &IXGBE_XDP_TX ) {struct ixgbe_ring *ring =ixgbe_determine_xdp_ring (adapter);
drivers/net/ethernet/marvell/mvneta.c +1 -1
@@ -2520,7 +2520,7 @@ static int mvneta_rx_swbm(struct napi_struct *napi,mvneta_xdp_put_buff (pp, rxq, &xdp_buf,-1 );if (ps.xdp_redirect) -xdp_do_flush_map (); +xdp_do_flush ();if (ps.rx_packets)mvneta_update_stats (pp, &ps);
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +1 -1
@@ -4055,7 +4055,7 @@ static int mvpp2_rx(struct mvpp2_port *port, struct napi_struct *napi, }if (xdp_ret &MVPP2_XDP_REDIR ) -xdp_do_flush_map (); +xdp_do_flush ();if (ps.rx_packets) {struct mvpp2_pcpu_stats *stats =this_cpu_ptr (port->stats);
drivers/net/ethernet/mediatek/mtk_eth_soc.c +1 -1
@@ -2221,7 +2221,7 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,net_dim (ð->rx_dim, dim_sample);if (xdp_flush) -xdp_do_flush_map (); +xdp_do_flush ();return done; }
drivers/net/ethernet/mellanox/mlx5/core/en.h +7 -0
@@ -519,6 +519,12 @@ struct mlx5e_xdpsq {struct mlx5e_channel *channel; }____cacheline_aligned_in_smp ; +struct mlx5e_xdp_buff { +struct xdp_buff xdp; +struct mlx5_cqe64 *cqe; +struct mlx5e_rq *rq; +}; +struct mlx5e_ktls_resync_resp ;struct mlx5e_icosq {
@@ -717,6 +723,7 @@ struct mlx5e_rq {struct mlx5e_xdpsq *xdpsq;DECLARE_BITMAP (flags,8 );struct page_pool *page_pool; +struct mlx5e_xdp_buff mxbuf;/* AF_XDP zero-copy */ struct xsk_buff_pool *xsk_pool;
drivers/net/ethernet/mellanox/mlx5/core/en/params.c +1 -1
@@ -98,7 +98,7 @@ u8 mlx5e_mpwrq_umr_entry_size(enum mlx5e_mpwrq_umr_mode mode)return sizeof (struct mlx5_ksm ) *4 ; }WARN_ONCE (1 ,"MPWRQ UMR mode %d is not known\n" , mode); -return 0 ; +return 1 ; } u8 mlx5e_mpwrq_log_wqe_sz(struct mlx5_core_dev *mdev, u8 page_shift,
drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c +1 -1
@@ -895,7 +895,7 @@ void mlx5e_xdp_rx_poll_complete(struct mlx5e_rq *rq)mlx5e_xmit_xdp_doorbell (xdpsq);if (test_bit (MLX5E_RQ_FLAG_XDP_REDIRECT , rq->flags)) { -xdp_do_flush_map (); +xdp_do_flush ();__clear_bit (MLX5E_RQ_FLAG_XDP_REDIRECT , rq->flags); } }
drivers/net/ethernet/mellanox/mlx5/core/en/xdp.h +0 -6
@@ -44,12 +44,6 @@ (MLX5E_XDP_INLINE_WQE_MAX_DS_CNT *MLX5_SEND_WQE_DS - \sizeof (struct mlx5_wqe_inline_seg )) -struct mlx5e_xdp_buff { -struct xdp_buff xdp; -struct mlx5_cqe64 *cqe; -struct mlx5e_rq *rq; -}; -/* XDP packets can be transmitted in different ways. On completion, we need to * distinguish between them to clean up things in a proper way. */
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +84 -44
259 lines not on this page · raw message
drivers/net/ethernet/netronome/nfp/nfd3/xsk.c +1 -1
@@ -256,7 +256,7 @@ nfp_nfd3_xsk_rx(struct nfp_net_rx_ring *rx_ring, int budget,nfp_net_xsk_rx_ring_fill_freelist (r_vec->rx_ring);if (xdp_redir) -xdp_do_flush_map (); +xdp_do_flush ();if (tx_ring->wr_ptr_add)nfp_net_tx_xmit_more_flush (tx_ring);
drivers/net/ethernet/renesas/ravb_main.c +22 -2
@@ -2038,15 +2038,35 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)skb_tx_timestamp (skb); } -/* Descriptor type must be set after all the above writes */ -dma_wmb (); +if (num_tx_desc >1 ) { desc->die_dt =DT_FEND ; desc--; +/* When using multi-descriptors, DT_FEND needs to get written +* before DT_FSTART, but the compiler may reorder the memory +* writes in an attempt to optimize the code. +* Use a dma_wmb() barrier to make sure DT_FEND and DT_FSTART +* are written exactly in the order shown in the code. +* This is particularly important for cases where the DMA engine +* is already running when we are running this code. If the DMA +* sees DT_FSTART without the corresponding DT_FEND it will enter +* an error condition. +*/ +dma_wmb (); desc->die_dt =DT_FSTART ; }else { +/* Descriptor type must be set after all the above writes */ +dma_wmb (); desc->die_dt =DT_FSINGLE ; } + +/* Before ringing the doorbell we need to make sure that the latest +* writes have been committed to memory, otherwise it could delay +* things until the doorbell is rang again. +* This is in replacement of the read operation mentioned in the HW +* manuals. +*/ +dma_wmb ();ravb_modify (ndev,TCCR ,TCCR_TSRQ0 << q,TCCR_TSRQ0 << q); priv->cur_tx[q] += num_tx_desc;
drivers/net/ethernet/sfc/efx_channels.c +1 -1
@@ -1260,7 +1260,7 @@ static int efx_poll(struct napi_struct *napi, int budget) spent =efx_process_channel (channel, budget); -xdp_do_flush_map (); +xdp_do_flush ();if (spent < budget) { if (efx_channel_has_rx_queue(channel) &&
drivers/net/ethernet/sfc/siena/efx_channels.c +1 -1
@@ -1285,7 +1285,7 @@ static int efx_poll(struct napi_struct *napi, int budget) spent =efx_process_channel (channel, budget); -xdp_do_flush_map (); +xdp_do_flush ();if (spent < budget) { if (efx_channel_has_rx_queue(channel) &&
drivers/net/ethernet/socionext/netsec.c +1 -1
@@ -780,7 +780,7 @@ static void netsec_finalize_xdp_rx(struct netsec_priv *priv, u32 xdp_res, u16 pkts) {if (xdp_res &NETSEC_XDP_REDIR ) -xdp_do_flush_map (); +xdp_do_flush ();if (xdp_res &NETSEC_XDP_TX )netsec_xdp_ring_tx_db (priv, pkts);
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c +5 -4
@@ -1565,14 +1565,15 @@ static int gmac_clk_enable(struct rk_priv_data *bsp_priv, bool enable) } }else {if (bsp_priv->clk_enabled) { +if (bsp_priv->ops && bsp_priv->ops->set_clock_selection) { + bsp_priv->ops->set_clock_selection (bsp_priv, + bsp_priv->clock_input, false); + } +clk_bulk_disable_unprepare (bsp_priv->num_clks, bsp_priv->clks);clk_disable_unprepare (bsp_priv->clk_phy); -if (bsp_priv->ops && bsp_priv->ops->set_clock_selection) - bsp_priv->ops->set_clock_selection (bsp_priv, - bsp_priv->clock_input, false); - bsp_priv->clk_enabled = false; } }
drivers/net/ethernet/ti/cpsw_priv.c +1 -1
@@ -1360,7 +1360,7 @@ int cpsw_run_xdp(struct cpsw_priv *priv, int ch, struct xdp_buff *xdp,* particular hardware is sharing a common queue, so the * incoming device might change per packet. */ -xdp_do_flush_map (); +xdp_do_flush ();break ;default :bpf_warn_invalid_xdp_action (ndev, prog, act);
drivers/net/usb/rtl8150.c +9 -2
@@ -685,9 +685,16 @@ static netdev_tx_t rtl8150_start_xmit(struct sk_buff *skb,rtl8150_t *dev =netdev_priv (netdev);int count, res; +/* pad the frame and ensure terminating USB packet, datasheet 9.2.3 */ + count =max (skb->len,ETH_ZLEN ); +if (count %64 ==0 ) + count++; +if (skb_padto (skb, count)) { + netdev->stats.tx_dropped++; +return NETDEV_TX_OK ; + } +netif_stop_queue (netdev); - count = (skb->len <60 ) ?60 : skb->len; - count = (count &0x3f ) ? count : count +1 ; dev->tx_skb = skb;usb_fill_bulk_urb (dev->tx_urb, dev->udev,usb_sndbulkpipe (dev->udev,2 ), skb->data, count, write_bulk_callback, dev);
drivers/perf/hisilicon/hisi_uncore_pmu.c +1 -1
@@ -212,7 +212,7 @@ int hisi_uncore_pmu_event_init(struct perf_event *event)return -EINVAL ; hisi_pmu =to_hisi_pmu (event->pmu); -if (event->attr.config > hisi_pmu->check_event) +if ((event->attr.config &HISI_EVENTID_MASK ) > hisi_pmu->check_event)return -EINVAL ;if (hisi_pmu->on_cpu ==-1 )
drivers/perf/hisilicon/hisi_uncore_pmu.h +2 -1
@@ -43,7 +43,8 @@return FIELD_GET (GENMASK_ULL (hi, lo), event->attr.config); \ } -#define HISI_GET_EVENTID (ev) (ev->hw.config_base & 0xff) +#define HISI_EVENTID_MASK GENMASK(7, 0) +#define HISI_GET_EVENTID (ev) ((ev)->hw.config_base & HISI_EVENTID_MASK)#define HISI_PMU_EVTYPE_BITS 8#define HISI_PMU_EVTYPE_SHIFT (idx) ((idx) % 4 * HISI_PMU_EVTYPE_BITS)
drivers/s390/cio/device.c +24 -13
@@ -1318,23 +1318,34 @@ void ccw_device_schedule_recovery(void)spin_unlock_irqrestore (&recovery_lock, flags); } -static int purge_fn (struct device *dev,void *data) +static int purge_fn (struct subchannel *sch,void *data) { -struct ccw_device *cdev =to_ccwdev (dev); -struct ccw_dev_id *id = &cdev->private->dev_id; -struct subchannel *sch =to_subchannel (cdev->dev.parent); +struct ccw_device *cdev; -spin_lock_irq (cdev->ccwlock); -if (is_blacklisted (id->ssid, id->devno) && - (cdev->private->state ==DEV_STATE_OFFLINE ) && - (atomic_cmpxchg (&cdev->private->onoff,0 ,1 ) ==0 )) { -CIO_MSG_EVENT (3 ,"ccw: purging 0.%x.%04x\n" , id->ssid, - id->devno); +spin_lock_irq (sch->lock); +if (sch->st !=SUBCHANNEL_TYPE_IO || !sch->schib.pmcw.dnv) + goto unlock; + +if (!is_blacklisted (sch->schid.ssid, sch->schib.pmcw.dev)) + goto unlock; + + cdev =sch_get_cdev (sch); +if (cdev) { +if (cdev->private->state !=DEV_STATE_OFFLINE ) + goto unlock; + +if (atomic_cmpxchg (&cdev->private->onoff,0 ,1 ) !=0 ) + goto unlock;ccw_device_sched_todo (cdev,CDEV_TODO_UNREG ); -css_sched_sch_todo (sch,SCH_TODO_UNREG );atomic_set (&cdev->private->onoff,0 ); } -spin_unlock_irq (cdev->ccwlock); + +css_sched_sch_todo (sch,SCH_TODO_UNREG ); +CIO_MSG_EVENT (3 ,"ccw: purging 0.%x.%04x%s\n" , sch->schid.ssid, + sch->schib.pmcw.dev, cdev ?"" :" (no cdev)" ); + +unlock: +spin_unlock_irq (sch->lock);/* Abort loop in case of pending signal. */ if (signal_pending (current))return -EINTR ;
@@ -1350,7 +1361,7 @@ static int purge_fn(struct device *dev, void *data)int ccw_purge_blacklisted (void ) {CIO_MSG_EVENT (2 ,"ccw: purging blacklisted devices\n" ); -bus_for_each_dev (&ccw_bus_type,NULL ,NULL , purge_fn); +for_each_subchannel_staged (purge_fn,NULL ,NULL );return 0 ; }
drivers/spi/spi-nxp-fspi.c +6 -0
@@ -665,6 +665,12 @@ static void nxp_fspi_dll_calibration(struct nxp_fspi *f) 0, POLL_TOUT, true);if (ret)dev_warn (f->dev,"DLL lock failed, please fix it!\n" ); + +/* +* For ERR050272, DLL lock status bit is not accurate, +* wait for 4us more as a workaround. +*/ +udelay (4 ); }/*
drivers/tty/serial/8250/8250_dw.c +3 -1
@@ -653,7 +653,9 @@ static int dw8250_probe(struct platform_device *pdev)if (IS_ERR (data->rst))return PTR_ERR (data->rst); -reset_control_deassert (data->rst); + err =reset_control_deassert (data->rst); +if (err) +return dev_err_probe (dev, err,"failed to deassert resets\n" ); err =devm_add_action_or_reset (dev, dw8250_reset_control_assert, data->rst);if (err)
drivers/tty/serial/8250/8250_exar.c +11 -0
@@ -33,6 +33,8 @@#define PCI_DEVICE_ID_ACCESSIO_COM_4SM 0x10db#define PCI_DEVICE_ID_ACCESSIO_COM_8SM 0x10ea +#define PCI_DEVICE_ID_ADVANTECH_XR17V352 0x0018 +#define PCI_DEVICE_ID_COMMTECH_4224PCI335 0x0002#define PCI_DEVICE_ID_COMMTECH_4222PCI335 0x0004#define PCI_DEVICE_ID_COMMTECH_2324PCI335 0x000a
@@ -845,6 +847,12 @@ static const struct exar8250_board pbn_fastcom35x_8 = { .exit = pci_xr17v35x_exit, }; +static const struct exar8250_board pbn_adv_XR17V352 = { + .num_ports =2 , + .setup = pci_xr17v35x_setup, + .exit = pci_xr17v35x_exit, +}; +static const struct exar8250_board pbn_exar_XR17V4358 = { .num_ports =12 , .setup = pci_xr17v35x_setup,
@@ -914,6 +922,9 @@ static const struct pci_device_id exar_pci_tbl[] = {USR_DEVICE (XR17C152 ,2980 , pbn_exar_XR17C15x),USR_DEVICE (XR17C152 ,2981 , pbn_exar_XR17C15x), +/* ADVANTECH devices */ +EXAR_DEVICE (ADVANTECH ,XR17V352 , pbn_adv_XR17V352), +/* Exar Corp. XR17C15[248] Dual/Quad/Octal UART */ EXAR_DEVICE (EXAR ,XR17C152 , pbn_exar_XR17C15x), EXAR_DEVICE(EXAR, XR17C154, pbn_exar_XR17C15x),
drivers/tty/serial/8250/8250_mtk.c +4 -2
@@ -435,6 +435,7 @@ static int __maybe_unused mtk8250_runtime_suspend(struct device *dev)while (serial_in (up,MTK_UART_DEBUG0 )); +clk_disable_unprepare (data->uart_clk);clk_disable_unprepare (data->bus_clk);return 0 ;
@@ -445,6 +446,7 @@ static int __maybe_unused mtk8250_runtime_resume(struct device *dev)struct mtk8250_data *data =dev_get_drvdata (dev);clk_prepare_enable (data->bus_clk); +clk_prepare_enable (data->uart_clk);return 0 ; }
@@ -475,13 +477,13 @@ static int mtk8250_probe_of(struct platform_device *pdev, struct uart_port *p,int dmacnt;#endif - data->uart_clk =devm_clk_get (&pdev->dev,"baud" ); + data->uart_clk =devm_clk_get_enabled (&pdev->dev,"baud" );if (IS_ERR (data->uart_clk)) {/* * For compatibility with older device trees try unnamed * clk when no baud clk can be found. */ - data->uart_clk =devm_clk_get (&pdev->dev,NULL ); + data->uart_clk =devm_clk_get_enabled (&pdev->dev,NULL );if (IS_ERR (data->uart_clk)) {dev_warn (&pdev->dev,"Can't get uart clock\n" );return PTR_ERR (data->uart_clk);
drivers/usb/core/quirks.c +2 -0
@@ -464,6 +464,8 @@ static const struct usb_device_id usb_quirk_list[] = {/* Huawei 4G LTE module */ { USB_DEVICE(0x12d1, 0x15bb), .driver_info = USB_QUIRK_DISCONNECT_SUSPEND }, + { USB_DEVICE(0x12d1, 0x15c1), .driver_info = + USB_QUIRK_DISCONNECT_SUSPEND }, { USB_DEVICE(0x12d1, 0x15c3), .driver_info = USB_QUIRK_DISCONNECT_SUSPEND },
drivers/usb/gadget/legacy/raw_gadget.c +0 -2
@@ -620,8 +620,6 @@ static void *raw_alloc_io_data(struct usb_raw_ep_io *io, void __user *ptr,return ERR_PTR (-EINVAL );if (!usb_raw_io_flags_valid (io->flags))return ERR_PTR (-EINVAL ); -if (io->length >PAGE_SIZE ) -return ERR_PTR (-EINVAL );if (get_from_user) data =memdup_user (ptr +sizeof (*io), io->length);else {
drivers/usb/host/xhci-dbgcap.c +8 -1
@@ -1319,8 +1319,15 @@ int xhci_dbc_suspend(struct xhci_hcd *xhci)if (!dbc)return 0 ; -if (dbc->state ==DS_CONFIGURED ) +switch (dbc->state) { +case DS_ENABLED : +case DS_CONNECTED : +case DS_CONFIGURED : dbc->resume_required =1 ; +break ; +default : +break ; + }xhci_dbc_stop (dbc);
drivers/usb/serial/option.c +10 -0
@@ -273,6 +273,7 @@ static void option_instat_callback(struct urb *urb);#define QUECTEL_PRODUCT_EM05CN 0x0312#define QUECTEL_PRODUCT_EM05G_GR 0x0313#define QUECTEL_PRODUCT_EM05G_RS 0x0314 +#define QUECTEL_PRODUCT_RG255C 0x0316#define QUECTEL_PRODUCT_EM12 0x0512#define QUECTEL_PRODUCT_RM500Q 0x0800#define QUECTEL_PRODUCT_RM520N 0x0801
@@ -617,6 +618,7 @@ static void option_instat_callback(struct urb *urb);#define UNISOC_VENDOR_ID 0x1782/* TOZED LT70-C based on UNISOC SL8563 uses UNISOC's vendor ID */ #define TOZED_PRODUCT_LT70C 0x4055 +#define UNISOC_PRODUCT_UIS7720 0x4064/* Luat Air72*U series based on UNISOC UIS8910 uses UNISOC's vendor ID */ #define LUAT_PRODUCT_AIR720U 0x4e00
@@ -1270,6 +1272,9 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500K, 0xff, 0x00, 0x00) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RG650V, 0xff, 0xff, 0x30) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RG650V, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RG255C, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RG255C, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RG255C, 0xff, 0xff, 0x40) }, { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) }, { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
@@ -1398,10 +1403,14 @@ static const struct usb_device_id option_ids[] = { .driver_info = RSVD(0) | NCTRL(3) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a2, 0xff), /* Telit FN920C04 (MBIM) */ .driver_info = NCTRL(4) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a3, 0xff), /* Telit FN920C04 (ECM) */ + .driver_info = NCTRL(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a4, 0xff), /* Telit FN20C04 (rmnet) */ .driver_info = RSVD(0) | NCTRL(3) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a7, 0xff), /* Telit FN920C04 (MBIM) */ .driver_info = NCTRL(4) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a8, 0xff), /* Telit FN920C04 (ECM) */ + .driver_info = NCTRL(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a9, 0xff), /* Telit FN20C04 (rmnet) */ .driver_info = RSVD(0) | NCTRL(2) | RSVD(3) | RSVD(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10aa, 0xff), /* Telit FN920C04 (MBIM) */
@@ -2466,6 +2475,7 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9291, 0xff, 0xff, 0x30) }, { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9291, 0xff, 0xff, 0x40) }, { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, TOZED_PRODUCT_LT70C, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, UNISOC_PRODUCT_UIS7720, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, LUAT_PRODUCT_AIR720U, 0xff, 0, 0) }, { USB_DEVICE_INTERFACE_CLASS(0x1bbb, 0x0530, 0xff), /* TCL IK512 MBIM */ .driver_info = NCTRL(1) },
drivers/usb/typec/tcpm/tcpm.c +2 -2
@@ -6636,9 +6636,9 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc) port->partner_desc.identity = &port->partner_ident; port->port_type = port->typec_caps.type; - port->role_sw =usb_role_switch_get (port->dev); + port->role_sw =fwnode_usb_role_switch_get (tcpc->fwnode);if (!port->role_sw) - port->role_sw =fwnode_usb_role_switch_get (tcpc->fwnode); + port->role_sw =usb_role_switch_get (port->dev);if (IS_ERR (port->role_sw)) { err =PTR_ERR (port->role_sw); goto out_destroy_wq;
fs/dlm/lockspace.c +1 -1
@@ -802,7 +802,7 @@ static int release_lockspace(struct dlm_ls *ls, int force)dlm_device_deregister (ls); -if (force <3 &&dlm_user_daemon_available ()) +if (force !=3 &&dlm_user_daemon_available ())do_uevent (ls,0 );dlm_recoverd_stop (ls);
fs/exec.c +1 -1
@@ -748,7 +748,7 @@ int setup_arg_pages(struct linux_binprm *bprm,unsigned long stack_top, int executable_stack) { -unsigned long ret; + int ret;unsigned long stack_shift;struct mm_struct *mm = current->mm;struct vm_area_struct *vma = bprm->vma;
fs/fuse/dir.c +1 -1
@@ -634,7 +634,7 @@ static int fuse_create_open(struct inode *dir, struct dentry *entry, goto out_err; err = -ENOMEM ; - ff =fuse_file_alloc (fm); + ff =fuse_file_alloc (fm, true);if (!ff) goto out_put_forget_req;
fs/fuse/file.c +45 -30
184 lines not on this page · raw message
fs/fuse/fuse_i.h +1 -1
@@ -1036,7 +1036,7 @@ void fuse_read_args_fill(struct fuse_io_args *ia, struct file *file, loff_t pos,*/ int fuse_open_common (struct inode *inode,struct file *file,bool isdir); -struct fuse_file *fuse_file_alloc (struct fuse_mount *fm); +struct fuse_file *fuse_file_alloc (struct fuse_mount *fm,bool release);void fuse_file_free (struct fuse_file *ff);void fuse_finish_open (struct inode *inode,struct file *file);
fs/hfs/bfind.c +7 -1
@@ -21,7 +21,7 @@ int hfs_find_init(struct hfs_btree *tree, struct hfs_find_data *fd) fd->tree = tree; fd->bnode =NULL ; - ptr =kmalloc (tree->max_key_len *2 +4 ,GFP_KERNEL ); + ptr =kzalloc (tree->max_key_len *2 +4 ,GFP_KERNEL );if (!ptr)return -ENOMEM ; fd->search_key = ptr;
@@ -115,6 +115,12 @@ int hfs_brec_find(struct hfs_find_data *fd)__be32 data;int height, res; + fd->record =-1 ; + fd->keyoffset =-1 ; + fd->keylength =-1 ; + fd->entryoffset =-1 ; + fd->entrylength =-1 ; + tree = fd->tree;if (fd->bnode)hfs_bnode_put (fd->bnode);
fs/hfs/brec.c +23 -4
@@ -179,6 +179,7 @@ int hfs_brec_remove(struct hfs_find_data *fd)struct hfs_btree *tree;struct hfs_bnode *node, *parent;int end_off, rec_off, data_off, size; +int src, dst, len; tree = fd->tree; node = fd->bnode;
@@ -208,10 +209,14 @@ int hfs_brec_remove(struct hfs_find_data *fd) }hfs_bnode_write_u16 (node, offsetof(struct hfs_bnode_desc , num_recs), node->num_recs); -if (rec_off == end_off) - goto skip; size = fd->keylength + fd->entrylength; +if (rec_off == end_off) { + src = fd->keyoffset; +hfs_bnode_clear (node, src, size); + goto skip; + } + do { data_off = hfs_bnode_read_u16(node, rec_off); hfs_bnode_write_u16(node, rec_off + 2, data_off - size);
@@ -219,9 +224,23 @@ int hfs_brec_remove(struct hfs_find_data *fd) }while (rec_off >= end_off);/* fill hole */ -hfs_bnode_move (node, fd->keyoffset, fd->keyoffset + size, - data_off - fd->keyoffset - size); + dst = fd->keyoffset; + src = fd->keyoffset + size; + len = data_off - src; + +hfs_bnode_move (node, dst, src, len); + + src = dst + len; + len = data_off - src; + +hfs_bnode_clear (node, src, len); + skip: +/* +* Remove the obsolete offset to free space. +*/ +hfs_bnode_write_u16 (node, end_off,0 ); +hfs_bnode_dump (node);if (!fd->record)hfs_brec_update_parent (fd);
fs/hfs/mdb.c +1 -1
@@ -172,7 +172,7 @@ int hfs_mdb_get(struct super_block *sb)pr_warn ("continuing without an alternate MDB\n" ); } -HFS_SB (sb)->bitmap =kmalloc (8192 ,GFP_KERNEL ); +HFS_SB (sb)->bitmap =kzalloc (8192 ,GFP_KERNEL );if (!HFS_SB (sb)->bitmap) goto out;
fs/hfsplus/bfind.c +7 -1
@@ -18,7 +18,7 @@ int hfs_find_init(struct hfs_btree *tree, struct hfs_find_data *fd) fd->tree = tree; fd->bnode =NULL ; - ptr =kmalloc (tree->max_key_len *2 +4 ,GFP_KERNEL ); + ptr =kzalloc (tree->max_key_len *2 +4 ,GFP_KERNEL );if (!ptr)return -ENOMEM ; fd->search_key = ptr;
@@ -158,6 +158,12 @@ int hfs_brec_find(struct hfs_find_data *fd, search_strategy_t do_key_compare)__be32 data;int height, res; + fd->record =-1 ; + fd->keyoffset =-1 ; + fd->keylength =-1 ; + fd->entryoffset =-1 ; + fd->entrylength =-1 ; + tree = fd->tree;if (fd->bnode)hfs_bnode_put (fd->bnode);
fs/hfsplus/bnode.c +0 -41
47 lines not on this page · raw message
fs/hfsplus/btree.c +6 -0
@@ -393,6 +393,12 @@ struct hfs_bnode *hfs_bmap_alloc(struct hfs_btree *tree) len =hfs_brec_lenoff (node,2 , &off16); off = off16; +if (!is_bnode_offset_valid (node, off)) { +hfs_bnode_put (node); +return ERR_PTR (-EIO ); + } + len =check_and_correct_requested_length (node, off, len); + off += node->page_offset; pagep = node->page + (off >>PAGE_SHIFT ); data =kmap_local_page (*pagep);
fs/hfsplus/hfsplus_fs.h +42 -0
48 lines not on this page · raw message
fs/hfsplus/super.c +19 -6
@@ -67,13 +67,26 @@ struct inode *hfsplus_iget(struct super_block *sb, unsigned long ino)if (!(inode->i_state &I_NEW ))return inode; -INIT_LIST_HEAD (&HFSPLUS_I (inode)->open_dir_list); -spin_lock_init (&HFSPLUS_I (inode)->open_dir_lock); -mutex_init (&HFSPLUS_I (inode)->extents_lock); -HFSPLUS_I (inode)->flags =0 ; +atomic_set (&HFSPLUS_I (inode)->opencnt,0 ); +HFSPLUS_I (inode)->first_blocks =0 ; +HFSPLUS_I (inode)->clump_blocks =0 ; +HFSPLUS_I (inode)->alloc_blocks =0 ; +HFSPLUS_I (inode)->cached_start =U32_MAX ; +HFSPLUS_I (inode)->cached_blocks =0 ; +memset (HFSPLUS_I (inode)->first_extents,0 ,sizeof (hfsplus_extent_rec)); +memset (HFSPLUS_I (inode)->cached_extents,0 ,sizeof (hfsplus_extent_rec));HFSPLUS_I (inode)->extent_state =0 ; +mutex_init (&HFSPLUS_I (inode)->extents_lock);HFSPLUS_I (inode)->rsrc_inode =NULL ; -atomic_set (&HFSPLUS_I (inode)->opencnt,0 ); +HFSPLUS_I (inode)->create_date =0 ; +HFSPLUS_I (inode)->linkid =0 ; +HFSPLUS_I (inode)->flags =0 ; +HFSPLUS_I (inode)->fs_blocks =0 ; +HFSPLUS_I (inode)->userflags =0 ; +HFSPLUS_I (inode)->subfolders =0 ; +INIT_LIST_HEAD (&HFSPLUS_I (inode)->open_dir_list); +spin_lock_init (&HFSPLUS_I (inode)->open_dir_lock); +HFSPLUS_I (inode)->phys_size =0 ;if (inode->i_ino >=HFSPLUS_FIRSTUSER_CNID || inode->i_ino ==HFSPLUS_ROOT_CNID ) {
@@ -525,7 +538,7 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent)if (!hfs_brec_read (&fd, &entry,sizeof (entry))) {hfs_find_exit (&fd);if (entry.type !=cpu_to_be16 (HFSPLUS_FOLDER )) { - err = -EINVAL ; + err = -EIO ; goto out_put_root; } inode =hfsplus_iget (sb,be32_to_cpu (entry.folder.id));
fs/notify/fdinfo.c +6 -0
@@ -17,6 +17,7 @@#include "fanotify/fanotify.h" #include "fdinfo.h" #include "fsnotify.h" +#include "../internal.h" #if defined(CONFIG_PROC_FS )
@@ -50,7 +51,12 @@ static void show_mark_fhandle(struct seq_file *m, struct inode *inode) f.handle.handle_bytes =sizeof (f.pad); size = f.handle.handle_bytes >>2 ; +if (!super_trylock_shared (inode->i_sb)) +return ; + ret =exportfs_encode_fid (inode, (struct fid *)f.handle.f_handle, &size); +up_read (&inode->i_sb->s_umount); +if ((ret ==FILEID_INVALID ) || (ret <0 ))return ;
fs/ocfs2/move_extents.c +5 -0
@@ -868,6 +868,11 @@ static int __ocfs2_move_extents_range(struct buffer_head *di_bh,mlog_errno (ret); goto out; } +/* +* Invalidate extent cache after moving/defragging to prevent +* stale cached data with outdated extent flags. +*/ +ocfs2_extent_map_trunc (inode, cpos); context->clusters_moved += alloc_size; next:
fs/smb/client/cifsglob.h +1 -1
@@ -703,7 +703,7 @@ struct TCP_Server_Info {bool nosharesock;bool tcp_nodelay;bool terminate; -unsigned int credits;/* send no more requests at once */ +int credits;/* send no more requests at once */ unsigned int max_credits;/* can override large 32000 default at mnt */ unsigned int in_flight;/* number of requests on the wire to server */ unsigned int max_in_flight;/* max number of requests that were on wire */
fs/smb/server/transport_ipc.c +7 -1
@@ -249,10 +249,16 @@ static void ipc_msg_handle_free(int handle)static int handle_response (int type,void *payload,size_t sz) { -unsigned int handle = *(unsigned int *)payload; +unsigned int handle;struct ipc_msg_table_entry *entry;int ret =0 ; +/* Prevent 4-byte read beyond declared payload size */ +if (sz <sizeof (unsigned int )) +return -EINVAL ; + + handle = *(unsigned int *)payload; +ipc_update_last_active ();down_read (&ipc_msg_table_lock);hash_for_each_possible (ipc_msg_table, entry, ipc_table_hlist, handle) {
fs/smb/server/transport_rdma.c +7 -4
@@ -938,12 +938,15 @@ static int smb_direct_flush_send_list(struct smb_direct_transport *t, struct smb_direct_sendmsg, list); +if (send_ctx->need_invalidate_rkey) { + first->wr.opcode =IB_WR_SEND_WITH_INV ; + first->wr.ex.invalidate_rkey = send_ctx->remote_key; + send_ctx->need_invalidate_rkey = false; + send_ctx->remote_key =0 ; + } + last->wr.send_flags =IB_SEND_SIGNALED ; last->wr.wr_cqe = &last->cqe; -if (is_last && send_ctx->need_invalidate_rkey) { - last->wr.opcode =IB_WR_SEND_WITH_INV ; - last->wr.ex.invalidate_rkey = send_ctx->remote_key; - } ret =smb_direct_post_send (t, &first->wr);if (!ret) {
fs/xfs/xfs_super.c +21 -12
@@ -1230,16 +1230,25 @@ suffix_kstrtoint(static inline void xfs_fs_warn_deprecated (struct fs_context *fc, -struct fs_parameter *param, -uint64_t flag, -bool value) +struct fs_parameter *param) { -/* Don't print the warning if reconfiguring and current mount point -* already had the flag set +/* +* Always warn about someone passing in a deprecated mount option. +* Previously we wouldn't print the warning if we were reconfiguring +* and current mount point already had the flag set, but that was not +* the right thing to do. +* +* Many distributions mount the root filesystem with no options in the +* initramfs and rely on mount -a to remount the root fs with the +* options in fstab. However, the old behavior meant that there would +* never be a warning about deprecated mount options for the root fs in +* /etc/fstab. On a single-fs system, that means no warning at all. +* +* Compounding this problem are distribution scripts that copy +* /proc/mounts to fstab, which means that we can't remove mount +* options unless we're 100% sure they have only ever been advertised +* in /proc/mounts in response to explicitly provided mount options. */ -if ((fc->purpose &FS_CONTEXT_FOR_RECONFIGURE ) && - !!(XFS_M (fc->root->d_sb)->m_features & flag) == value) -return ;xfs_warn (fc->s_fs_info,"%s mount option is deprecated." , param->key); }
@@ -1378,19 +1387,19 @@ xfs_fs_parse_param(#endif /* Following mount options will be removed in September 2025 */ case Opt_ikeep: -xfs_fs_warn_deprecated (fc, param,XFS_FEAT_IKEEP , true); +xfs_fs_warn_deprecated (fc, param); parsing_mp->m_features |=XFS_FEAT_IKEEP ;return 0 ;case Opt_noikeep: -xfs_fs_warn_deprecated (fc, param,XFS_FEAT_IKEEP , false); +xfs_fs_warn_deprecated (fc, param); parsing_mp->m_features &= ~XFS_FEAT_IKEEP ;return 0 ;case Opt_attr2: -xfs_fs_warn_deprecated (fc, param,XFS_FEAT_ATTR2 , true); +xfs_fs_warn_deprecated (fc, param); parsing_mp->m_features |=XFS_FEAT_ATTR2 ;return 0 ;case Opt_noattr2: -xfs_fs_warn_deprecated (fc, param,XFS_FEAT_NOATTR2 , true); +xfs_fs_warn_deprecated (fc, param); parsing_mp->m_features |=XFS_FEAT_NOATTR2 ;return 0 ;default :
io_uring/filetable.c +1 -1
@@ -62,7 +62,7 @@ void io_free_file_tables(struct io_file_table *table)static int io_install_fixed_file (struct io_ring_ctx *ctx,struct file *file,u32 slot_index) - __must_hold(&req->ctx->uring_lock) + __must_hold(&ctx->uring_lock) {struct io_fixed_file *file_slot;int ret;
kernel/dma/debug.c +4 -1
@@ -23,6 +23,7 @@#include <linux/ctype.h> #include <linux/list.h> #include <linux/slab.h> +#include <linux/swiotlb.h> #include <asm/sections.h> #include "debug.h"
@@ -601,7 +602,9 @@ static void add_dma_entry(struct dma_debug_entry *entry, unsigned long attrs)if (rc == -ENOMEM ) {pr_err_once ("cacheline tracking ENOMEM, dma-debug disabled\n" ); global_disable = true; - }else if (rc == -EEXIST && !(attrs &DMA_ATTR_SKIP_CPU_SYNC )) { + }else if (rc == -EEXIST && !(attrs &DMA_ATTR_SKIP_CPU_SYNC ) && + !(IS_ENABLED (CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC ) && +is_swiotlb_active (entry->dev))) {err_printk (entry->dev, entry,"cacheline tracking EEXIST, overlapping mappings aren't supported\n" ); }
kernel/sched/sched.h +0 -2
@@ -3435,11 +3435,9 @@ static inline int __mm_cid_get(struct rq *rq, struct mm_struct *mm)static inline int mm_cid_get (struct rq *rq,struct mm_struct *mm) {struct mm_cid __percpu *pcpu_cid = mm->pcpu_cid; -struct cpumask *cpumask;int cid;lockdep_assert_rq_held (rq); - cpumask =mm_cidmask (mm); cid =__this_cpu_read (pcpu_cid->cid);if (mm_cid_is_valid (cid)) {mm_cid_snapshot_time (rq, mm);
net/core/rtnetlink.c +0 -3
@@ -4383,9 +4383,6 @@ static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh,int err;u16 vid; -if (!netlink_capable (skb,CAP_NET_ADMIN )) -return -EPERM ; -if (!del_bulk) { err =nlmsg_parse_deprecated (nlh,sizeof (*ndm), tb,NDA_MAX ,NULL , extack);
net/sctp/inqueue.c +7 -6
@@ -169,13 +169,14 @@ struct sctp_chunk *sctp_inq_pop(struct sctp_inq *queue) chunk->head_skb = chunk->skb;/* skbs with "cover letter" */ -if (chunk->head_skb && chunk->skb->data_len == chunk->skb->len) +if (chunk->head_skb && chunk->skb->data_len == chunk->skb->len) { +if (WARN_ON (!skb_shinfo (chunk->skb)->frag_list)) { +__SCTP_INC_STATS (dev_net (chunk->skb->dev), +SCTP_MIB_IN_PKT_DISCARDS ); +sctp_chunk_free (chunk); + goto next_chunk; + } chunk->skb =skb_shinfo (chunk->skb)->frag_list; - -if (WARN_ON (!chunk->skb)) { -__SCTP_INC_STATS (dev_net (chunk->skb->dev),SCTP_MIB_IN_PKT_DISCARDS ); -sctp_chunk_free (chunk); - goto next_chunk; } }
net/vmw_vsock/af_vsock.c +19 -19
@@ -486,12 +486,26 @@ int vsock_assign_transport(struct vsock_sock *vsk, struct vsock_sock *psk) goto err; } -if (vsk->transport) { -if (vsk->transport == new_transport) { - ret =0 ; - goto err; - } +if (vsk->transport && vsk->transport == new_transport) { + ret =0 ; + goto err; + } +/* We increase the module refcnt to prevent the transport unloading +* while there are open sockets assigned to it. +*/ +if (!new_transport || !try_module_get (new_transport->module)) { + ret = -ENODEV ; + goto err; + } + +/* It's safe to release the mutex after a successful try_module_get(). +* Whichever transport `new_transport` points at, it won't go away until +* the last module_put() below or in vsock_deassign_transport(). +*/ +mutex_unlock (&vsock_register_mutex); + +if (vsk->transport) {/* transport->release() must be called with sock lock acquired. * This path can only be taken during vsock_connect(), where we * have already held the sock lock. In the other cases, this
@@ -511,20 +525,6 @@ int vsock_assign_transport(struct vsock_sock *vsk, struct vsock_sock *psk) vsk->peer_shutdown =0 ; } -/* We increase the module refcnt to prevent the transport unloading -* while there are open sockets assigned to it. -*/ -if (!new_transport || !try_module_get (new_transport->module)) { - ret = -ENODEV ; - goto err; - } - -/* It's safe to release the mutex after a successful try_module_get(). -* Whichever transport `new_transport` points at, it won't go away until -* the last module_put() below or in vsock_deassign_transport(). -*/ -mutex_unlock (&vsock_register_mutex); -if (sk->sk_type ==SOCK_SEQPACKET ) {if (!new_transport->seqpacket_allow || !new_transport->seqpacket_allow (remote_cid)) {
tools/testing/selftests/net/mptcp/mptcp_join.sh +3 -3
@@ -3737,7 +3737,7 @@ endpoint_tests() # subflow_rebuild_header is needed to support the implicit flag # userspace pm type prevents add_addr if reset "implicit EP" && - mptcp_lib_kallsyms_has "subflow_rebuild_header$"; then + continue_if mptcp_lib_kallsyms_has "subflow_rebuild_header$"; then pm_nl_set_limits $ns1 2 2 pm_nl_set_limits $ns2 2 2 pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
@@ -3762,7 +3762,7 @@ endpoint_tests() fi if reset_with_tcp_filter "delete and re-add" ns2 10.0.3.2 REJECT OUTPUT && - mptcp_lib_kallsyms_has "subflow_rebuild_header$"; then + continue_if mptcp_lib_kallsyms_has "subflow_rebuild_header$"; then start_events pm_nl_set_limits $ns1 0 3 pm_nl_set_limits $ns2 0 3
@@ -3910,7 +3910,7 @@ endpoint_tests() # flush and re-add if reset_with_tcp_filter "flush re-add" ns2 10.0.3.2 REJECT OUTPUT && - mptcp_lib_kallsyms_has "subflow_rebuild_header$"; then + continue_if mptcp_lib_kallsyms_has "subflow_rebuild_header$"; then pm_nl_set_limits $ns1 0 2 pm_nl_set_limits $ns2 1 2 # broadcast IP: no packet for this address will be received on ns1
tools/testing/selftests/net/sctp_hello.c +2 -15
@@ -29,7 +29,6 @@ static void set_addr(struct sockaddr_storage *ss, char *ip, char *port, int *lenstatic int do_client (int argc,char *argv[]) {struct sockaddr_storage ss;
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/sctp_vrf.sh +48 -37
85 lines not on this page · 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.