Linux 6.7.5
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.7.5 kernel.
All users of the 6.7 kernel series must upgrade.
The updated 6.7.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.7.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
------------
Makefile | 2 arch/arc/include/asm/cacheflush.h | 1 arch/arm/include/asm/cacheflush.h | 2 arch/csky/abiv1/inc/abi/cacheflush.h | 1 arch/csky/abiv2/inc/abi/cacheflush.h | 1 arch/m68k/include/asm/cacheflush_mm.h | 1 arch/mips/include/asm/cacheflush.h | 2 arch/nios2/include/asm/cacheflush.h | 1 arch/parisc/include/asm/cacheflush.h | 1 arch/riscv/include/asm/cacheflush.h | 3 arch/riscv/include/asm/hugetlb.h | 3 arch/riscv/include/asm/stacktrace.h | 5 arch/riscv/include/asm/tlb.h | 2 arch/riscv/include/asm/tlbflush.h | 2 arch/riscv/mm/hugetlbpage.c | 78 ++++++- arch/riscv/mm/init.c | 4 arch/riscv/mm/tlbflush.c | 6 arch/sh/include/asm/cacheflush.h | 1 arch/sparc/include/asm/cacheflush_32.h | 1 arch/sparc/include/asm/cacheflush_64.h | 1 arch/x86/boot/header.S | 14 - arch/x86/boot/setup.ld | 6 arch/x86/lib/getuser.S | 24 +- arch/x86/lib/putuser.S | 20 - arch/xtensa/include/asm/cacheflush.h | 6 block/blk-iocost.c | 7 drivers/atm/idt77252.c | 2 drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c | 10 drivers/dma/fsl-qdma.c | 28 -- drivers/dma/ti/k3-udma.c | 10 drivers/firmware/efi/libstub/efistub.h | 3 drivers/firmware/efi/libstub/kaslr.c | 2 drivers/firmware/efi/libstub/randomalloc.c | 12 - drivers/firmware/efi/libstub/x86-stub.c | 25 +- drivers/firmware/efi/libstub/x86-stub.h | 4 drivers/firmware/efi/libstub/zboot.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 24 -- drivers/gpu/drm/amd/display/dc/dcn301/dcn301_resource.c | 2 drivers/gpu/drm/amd/display/dc/hwss/dcn21/dcn21_hwseq.c | 63 +++-- drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 33 --- drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h | 1 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c | 8 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c | 8 drivers/gpu/drm/i915/gvt/handlers.c | 3 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 4 drivers/gpu/drm/msm/dp/dp_ctrl.c | 5 drivers/gpu/drm/msm/dp/dp_link.c | 22 +- drivers/gpu/drm/msm/dp/dp_reg.h | 3 drivers/hwmon/aspeed-pwm-tacho.c | 7 drivers/hwmon/coretemp.c | 40 +-- drivers/input/keyboard/atkbd.c | 13 - drivers/input/serio/i8042-acpipnpio.h | 6 drivers/net/ethernet/aquantia/atlantic/aq_ptp.c | 4 drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 13 + drivers/net/ethernet/aquantia/atlantic/aq_ring.h | 1 drivers/net/ethernet/engleder/tsnep_main.c | 16 + drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c | 14 + drivers/net/ethernet/stmicro/stmmac/common.h | 1 drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h | 3 drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c | 58 +++++ drivers/net/netdevsim/dev.c | 8 drivers/net/ppp/ppp_async.c | 4 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 6 drivers/net/wireless/intel/iwlwifi/fw/api/debug.h | 2 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 6 drivers/net/wireless/intel/iwlwifi/mvm/mld-mac80211.c | 9 drivers/nvme/host/core.c | 7 drivers/pci/bus.c | 49 +++- drivers/pci/controller/dwc/pcie-qcom.c | 2 drivers/pci/pci.c | 78 ++++--- drivers/pci/pci.h | 4 drivers/pci/pcie/aspm.c | 13 - drivers/phy/qualcomm/phy-qcom-qmp-usb.c | 30 ++ drivers/phy/renesas/phy-rcar-gen3-usb2.c | 4 drivers/phy/ti/phy-omap-usb2.c | 4 drivers/scsi/scsi_error.c | 3 drivers/scsi/scsi_lib.c | 4 drivers/usb/dwc3/dwc3-pci.c | 4 drivers/usb/dwc3/host.c | 4 drivers/usb/host/xhci-plat.c | 3 drivers/usb/host/xhci-ring.c | 80 ++++++- drivers/usb/host/xhci.h | 1 drivers/usb/serial/cp210x.c | 1 drivers/usb/serial/option.c | 1 drivers/usb/serial/qcserial.c | 2 drivers/usb/typec/tcpm/tcpm.c | 3 fs/bcachefs/clock.c | 4 fs/bcachefs/fs-io.c | 2 fs/bcachefs/fs-ioctl.c | 42 ++- fs/bcachefs/journal_io.c | 3 fs/bcachefs/move.c | 2 fs/bcachefs/move.h | 1 fs/bcachefs/rebalance.c | 13 + fs/bcachefs/replicas.c | 10 fs/bcachefs/snapshot.c | 2 fs/bcachefs/util.c | 5 fs/ceph/inode.c | 2 fs/ext4/mballoc.c | 20 + fs/namei.c | 16 + fs/ntfs3/ntfs_fs.h | 2 fs/smb/client/sess.c | 2 fs/smb/client/smb2pdu.c | 2 include/asm-generic/cacheflush.h | 6 include/linux/ceph/messenger.h | 2 include/linux/dmaengine.h | 3 include/linux/hrtimer.h | 4 include/linux/namei.h | 1 include/linux/pci.h | 5 include/net/cfg80211.h | 4 include/net/netfilter/nf_tables.h | 16 + include/trace/events/rxrpc.h | 8 include/uapi/linux/netfilter/nf_tables.h | 2 io_uring/io_uring.h | 7 io_uring/net.c | 50 +++- io_uring/poll.c | 49 ++-- io_uring/poll.h | 9 io_uring/rw.c | 10 kernel/time/hrtimer.c | 3 mm/percpu.c | 8 net/ceph/messenger_v1.c | 33 +-- net/ceph/messenger_v2.c | 4 net/ceph/osd_client.c | 9 net/core/datagram.c | 2 net/devlink/core.c | 12 - net/ipv4/af_inet.c | 6 net/ipv4/ip_tunnel_core.c | 2 net/mac80211/cfg.c | 14 - net/mac80211/mlme.c | 106 +++++++-- net/mac80211/tx.c | 7 net/netfilter/nf_tables_api.c | 4 net/netfilter/nfnetlink_queue.c | 13 - net/netfilter/nft_compat.c | 17 + net/netfilter/nft_ct.c | 3 net/netfilter/nft_set_hash.c | 8 net/netfilter/nft_set_pipapo.c | 128 ++++++------ net/netfilter/nft_set_pipapo.h | 18 + net/netfilter/nft_set_pipapo_avx2.c | 17 - net/netfilter/nft_set_rbtree.c | 17 - net/rxrpc/ar-internal.h | 37 ++- net/rxrpc/call_event.c | 12 - net/rxrpc/call_object.c | 1 net/rxrpc/conn_event.c | 10 net/rxrpc/input.c | 115 +++++++++- net/rxrpc/output.c | 8 net/rxrpc/proc.c | 2 net/rxrpc/rxkad.c | 4 net/tipc/bearer.c | 6 net/unix/garbage.c | 11 + net/wireless/scan.c | 63 +++++ sound/soc/amd/acp-config.c | 15 - sound/usb/quirks.c | 38 ++- tools/perf/tests/shell/script.sh | 73 ++++++ tools/perf/util/evlist.c | 9 tools/testing/selftests/core/close_range_test.c | 1 tools/testing/selftests/net/big_tcp.sh | 4 tools/testing/selftests/net/cmsg_ipv6.sh | 4 tools/testing/selftests/net/pmtu.sh | 52 ++-- tools/testing/selftests/net/udpgro_fwd.sh | 14 + tools/testing/selftests/net/udpgso_bench_rx.c | 2 tools/testing/selftests/net/unicast_extensions.sh | 101 ++++----- 160 files changed, 1559 insertions(+), 735 deletions(-)
Abhinav Kumar (1):
drm/msm/dpu: check for valid hw_pp in dpu_encoder_helper_phys_cleanup
Al Viro (2):
new helper: user_path_locked_at()
bch2_ioctl_subvolume_destroy(): fix locking
Alexander Tsoy (1):
ALSA: usb-audio: Add delay quirk for MOTU M Series 2nd revision
Alexandre Ghiti (5):
mm: Introduce flush_cache_vmap_early()
riscv: Fix set_huge_pte_at() for NAPOT mapping
riscv: Fix hugetlb_mask_last_page() when NAPOT is enabled
riscv: Flush the tlb when a page directory is freed
riscv: Fix arch_hugetlb_migration_supported() for NAPOT
Antoine Tenart (1):
tunnels: fix out of bounds access when building IPv6 PMTU error
Ard Biesheuvel (3):
x86/efistub: Give up if memory attribute protocol returns an error x86/efistub: Avoid placing the kernel below LOAD_PHYSICAL_ADDR x86/efistub: Use 1:1 file:memory mapping for PE/COFF .compat section
Badhri Jagan Sridharan (1):
Revert "usb: typec: tcpm: fix cc role at port reset"
Baokun Li (1):
ext4: regenerate buddy after block freeing failed if under fc replay
Ben Dooks (1):
riscv: declare overflow_stack as exported from traps.c
Benjamin Berg (2):
wifi: iwlwifi: mvm: skip adding debugfs symlink for reconfig
wifi: cfg80211: consume both probe response and beacon IEs
Christoph Hellwig (1):
bcachefs: fix incorrect usage of REQ_OP_FLUSH
Christophe JAILLET (2):
dmaengine: fsl-qdma: Fix a memory leak related to the status queue DMA
dmaengine: fsl-qdma: Fix a memory leak related to the queue command DMA
Dan Carpenter (2):
drm/i915/gvt: Fix uninitialized variable in handle_mmio() fs/ntfs3: Fix an NULL dereference bug
Daniel Hill (1):
bcachefs: rebalance should wakeup on shutdown if disabled
David Howells (4):
rxrpc: Fix generation of serial numbers to skip zero
rxrpc: Fix delayed ACKs to not set the reference serial number
rxrpc: Fix response to PING RESPONSE ACKs to a dead call
rxrpc: Fix counting of new acks and nacks
Emmanuel Grumbach (1):
wifi: iwlwifi: mvm: fix a battery life regression
Eric Dumazet (3):
netdevsim: avoid potential loop in nsim_dev_trap_report_work()
inet: read sk->sk_family once in inet_recv_error()
ppp_async: limit MRU to 64K
Florian Westphal (4):
netfilter: nfnetlink_queue: un-break NF_REPEAT
netfilter: nft_set_pipapo: store index in scratch maps
netfilter: nft_set_pipapo: add helper to release pcpu scratch area
netfilter: nft_set_pipapo: remove scratch_aligned pointer
Frank Li (1):
dmaengine: fix is_slave_direction() return false when DMA_DEV_TO_DEV
Frederic Weisbecker (1):
hrtimer: Report offline hrtimer enqueue
Furong Xu (2):
net: stmmac: xgmac: fix handling of DPP safety error for DMA channels
net: stmmac: xgmac: fix a typo of register name in DPP safety handling
Gerhard Engleder (1):
tsnep: Fix mapping for zero copy XDP_TX action
Greg Kroah-Hartman (2):
Revert "ASoC: amd: Add new dmi entries for acp5x platform" Linux 6.7.5
Guanhua Gao (1):
dmaengine: fsl-dpaa2-qdma: Fix the size of dma pools
Guoyu Ou (1):
bcachefs: unlock parent dir if entry is not found in subvolume deletion
Hangbin Liu (2):
selftests/net: convert unicast_extensions.sh to run it in unique namespace selftests/net: convert pmtu.sh to run it in unique namespace
Hans de Goede (1):
Input: atkbd - skip ATKBD_CMD_SETLEDS when skipping ATKBD_CMD_GETID
Heikki Krogerus (1):
usb: dwc3: pci: add support for the Intel Arrow Lake-H
Ian Rogers (1):
perf tests: Add perf script test
Ivan Vecera (1):
net: atlantic: Fix DMA mapping for PTP hwts ring
JackBB Wu (1):
USB: serial: qcserial: add new usb-id for Dell Wireless DW5826e
Jai Luthra (1):
dmaengine: ti: k3-udma: Report short packet errors
Jakub Kicinski (1):
selftests: cmsg_ipv6: repeat the exact packet
James Clark (1):
perf evlist: Fix evlist__new_default() for > 1 core PMU
Jens Axboe (6):
io_uring/net: fix sr->len for IORING_OP_RECV with MSG_WAITALL and buffers io_uring/poll: move poll execution helpers higher up io_uring/net: un-indent mshot retry path in io_recv_finish() io_uring/rw: ensure poll based multishot read retries appropriately io_uring/poll: add requeue return code from poll multishot handling io_uring/net: limit inline multishot retries
Jiri Pirko (1):
devlink: avoid potential loop in devlink_rel_nested_in_notify_work()
Johan Hovold (1):
PCI/ASPM: Fix deadlock when enabling ASPM
Johannes Berg (5):
wifi: cfg80211: detect stuck ECSA element in probe resp
wifi: mac80211: improve CSA/ECSA connection refusal
wifi: mac80211: fix RCU use in TDLS fast-xmit
wifi: mac80211: fix unsolicited broadcast probe config
wifi: mac80211: fix waiting for beacons logic
Julian Sikorski (1):
ALSA: usb-audio: Add a quirk for Yamaha YIT-W12TX transmitter
Kees Cook (1):
wifi: brcmfmac: Adjust n_channels usage for __counted_by
Kent Overstreet (4):
bcachefs: Don't pass memcmp() as a pointer
bcachefs: Add missing bch2_moving_ctxt_flush_all()
bcachefs: bch2_kthread_io_clock_wait() no longer sleeps until full amount
bcachefs: time_stats: Check for last_event == 0 when updating freq stats
Kuniyuki Iwashima (1):
af_unix: Call kfree_skb() for dead unix_(sk)->oob_skb in GC.
Kuogee Hsieh (2):
drm/msms/dp: fixed link clock divider bits be over written in BPC unknown case drm/msm/dp: return correct Colorimetry for DP_TEST_DYNAMIC_RANGE_CEA case
Leonard Dallmayr (1):
USB: serial: cp210x: add ID for IMST iM871A-USB
Loic Prylli (1):
hwmon: (aspeed-pwm-tacho) mutex for tach reading
Mantas Pucka (2):
phy: qcom-qmp-usb: fix register offsets for ipq8074/ipq6018
phy: qcom-qmp-usb: fix serdes init sequence for IPQ6018
Mario Limonciello (1):
Revert "drm/amd/pm: fix the high voltage and temperature issue"
Mathias Nyman (1):
xhci: process isoc TD properly when there was a transaction error mid TD.
Maurizio Lombardi (1):
nvme-host: fix the updating of the firmware version
Michael Lass (1):
net: Fix from address in memcpy_to_iter_csum()
Michal Pecio (1):
xhci: handle isoc Babble and Buffer Overrun events properly
Ming Lei (1):
scsi: core: Move scsi_host_busy() out of host lock if it is for per-command
Miri Korenblit (1):
wifi: iwlwifi: exit eSR only after the FW does
Muhammad Usama Anjum (1):
selftests: core: include linux/close_range.h for CLOSE_RANGE_* macros
Pablo Neira Ayuso (7):
netfilter: nft_compat: narrow down revision to unsigned 8-bits
netfilter: nft_compat: reject unused compat flag
netfilter: nft_compat: restrict match/target protocol to u16
netfilter: nft_set_pipapo: remove static in nft_pipapo_get()
netfilter: nft_ct: reject direction for ct id
netfilter: nf_tables: use timestamp to check for set element timeout
netfilter: nft_set_rbtree: skip end interval element from gc
Paolo Abeni (4):
selftests: net: cut more slack for gro fwd tests.
selftests: net: fix tcp listener handling in pmtu.sh
selftests: net: avoid just another constant wait
selftests: net: let big_tcp test cope with slow env
Prashanth K (2):
usb: dwc3: host: Set XHCI_SG_TRB_CACHE_SIZE_QUIRK
usb: host: xhci-plat: Add support for XHCI_SG_TRB_CACHE_SIZE_QUIRK
Puliang Lu (1):
USB: serial: option: add Fibocom FM101-GL variant
Qiuxu Zhuo (1):
x86/lib: Revert to _ASM_EXTABLE_UA() for {get,put}_user() fixups
Sean Young (1):
ALSA: usb-audio: add quirk for RODE NT-USB+
Shigeru Yoshida (1):
tipc: Check the bearer type before calling tipc_udp_nl_bearer_add()
Shyam Prasad N (2):
cifs: avoid redundant calls to disable multichannel
cifs: failure to add channel on iface should bump up weight
Simon Horman (1):
net: stmmac: xgmac: use #define for string constants
Srinivasan Shanmugam (3):
drm/amd/display: Fix 'panel_cntl' could be null in 'dcn21_set_backlight_level()' drm/amd/display: Add NULL test for 'timing generator' in 'dcn21_set_pipe()' drm/amd/display: Implement bounds check for stream encoder creation in DCN301
Su Yue (2):
bcachefs: kvfree bch_fs::snapshots in bch2_fs_snapshots_exit
bcachefs: grab s_umount only if snapshotting
Takashi Iwai (1):
ALSA: usb-audio: Sort quirk table entries
Tejun Heo (1):
blk-iocost: Fix an UBSAN shift-out-of-bounds warning
Thomas Richter (1):
perf test: Fix 'perf script' tests on s390
Tony Lindgren (1):
phy: ti: phy-omap-usb2: Fix NULL pointer dereference for SRP
Vincent Chen (1):
riscv: mm: execute local TLB flush after populating vmemmap
Werner Sembach (1):
Input: i8042 - fix strange behavior of touchpad on Clevo NS70PU
Xiubo Li (3):
libceph: rename read_sparse_msg_*() to read_partial_sparse_msg_*()
libceph: just wait for more data to be available on the socket
ceph: always set initial i_blkbits to CEPH_FSCRYPT_BLOCK_SHIFT
Yoshihiro Shimoda (1):
phy: renesas: rcar-gen3-usb2: Fix returning wrong error code
Yujie Liu (1):
selftests/net: change shebang to bash to support "source"
Zhang Rui (2):
hwmon: (coretemp) Fix out-of-bounds memory access
hwmon: (coretemp) Fix bogus core_id to attr name mapping
Zhipeng Lu (2):
atm: idt77252: fix a memleak in open_card_ubr0
octeontx2-pf: Fix a memleak otx2_sq_init
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 7 -SUBLEVEL = 4 +SUBLEVEL = 5 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arc/include/asm/cacheflush.h +1 -0
@@ -40,6 +40,7 @@ void dma_cache_wback(phys_addr_t start, unsigned long sz);/* TBD: optimize this */ #define flush_cache_vmap (start, end) flush_cache_all() +#define flush_cache_vmap_early (start, end) do { } while (0)#define flush_cache_vunmap (start, end) flush_cache_all()#define flush_cache_dup_mm (mm)/* called on fork (VIVT only) */
arch/arm/include/asm/cacheflush.h +2 -0
@@ -340,6 +340,8 @@ static inline void flush_cache_vmap(unsigned long start, unsigned long end)dsb (ishst); } +#define flush_cache_vmap_early (start, end) do { } while (0) +static inline void flush_cache_vunmap (unsigned long start,unsigned long end) {if (!cache_is_vipt_nonaliasing ())
arch/csky/abiv1/inc/abi/cacheflush.h +1 -0
@@ -43,6 +43,7 @@ static inline void flush_anon_page(struct vm_area_struct *vma,*/ extern void flush_cache_range (struct vm_area_struct *vma,unsigned long start,unsigned long end);#define flush_cache_vmap (start, end) cache_wbinv_all() +#define flush_cache_vmap_early (start, end) do { } while (0)#define flush_cache_vunmap (start, end) cache_wbinv_all()#define flush_icache_range (start, end) cache_wbinv_range(start, end)
arch/csky/abiv2/inc/abi/cacheflush.h +1 -0
@@ -41,6 +41,7 @@ void flush_icache_mm_range(struct mm_struct *mm,void flush_icache_deferred (struct mm_struct *mm);#define flush_cache_vmap (start, end) do { } while (0) +#define flush_cache_vmap_early (start, end) do { } while (0)#define flush_cache_vunmap (start, end) do { } while (0)#define copy_to_user_page (vma, page, vaddr, dst, src, len) \
arch/m68k/include/asm/cacheflush_mm.h +1 -0
@@ -191,6 +191,7 @@ extern void cache_push_v(unsigned long vaddr, int len);#define flush_cache_all () __flush_cache_all()#define flush_cache_vmap (start, end) flush_cache_all() +#define flush_cache_vmap_early (start, end) do { } while (0)#define flush_cache_vunmap (start, end) flush_cache_all()static inline void flush_cache_mm (struct mm_struct *mm)
arch/mips/include/asm/cacheflush.h +2 -0
@@ -97,6 +97,8 @@ static inline void flush_cache_vmap(unsigned long start, unsigned long end)__flush_cache_vmap (); } +#define flush_cache_vmap_early (start, end) do { } while (0) +extern void (*__flush_cache_vunmap)(void );static inline void flush_cache_vunmap (unsigned long start,unsigned long end)
arch/nios2/include/asm/cacheflush.h +1 -0
@@ -38,6 +38,7 @@ void flush_icache_pages(struct vm_area_struct *vma, struct page *page,#define flush_icache_pages flush_icache_pages#define flush_cache_vmap (start, end) flush_dcache_range(start, end) +#define flush_cache_vmap_early (start, end) do { } while (0)#define flush_cache_vunmap (start, end) flush_dcache_range(start, end) extern void copy_to_user_page(struct vm_area_struct *vma, struct page *page,
arch/parisc/include/asm/cacheflush.h +1 -0
@@ -41,6 +41,7 @@ void flush_kernel_vmap_range(void *vaddr, int size);void invalidate_kernel_vmap_range (void *vaddr,int size);#define flush_cache_vmap (start, end) flush_cache_all() +#define flush_cache_vmap_early (start, end) do { } while (0)#define flush_cache_vunmap (start, end) flush_cache_all()void flush_dcache_folio (struct folio *folio);
arch/riscv/include/asm/cacheflush.h +2 -1
@@ -37,7 +37,8 @@ static inline void flush_dcache_page(struct page *page) flush_icache_mm(vma->vm_mm, 0)#ifdef CONFIG_64BIT -#define flush_cache_vmap (start, end) flush_tlb_kernel_range(start, end) +#define flush_cache_vmap (start, end) flush_tlb_kernel_range(start, end) +#define flush_cache_vmap_early (start, end) local_flush_tlb_kernel_range(start, end)#endif #ifndef CONFIG_SMP
arch/riscv/include/asm/hugetlb.h +3 -0
@@ -11,6 +11,9 @@ static inline void arch_clear_hugepage_flags(struct page *page) }#define arch_clear_hugepage_flags arch_clear_hugepage_flags +bool arch_hugetlb_migration_supported (struct hstate *h); +#define arch_hugetlb_migration_supported arch_hugetlb_migration_supported +#ifdef CONFIG_RISCV_ISA_SVNAPOT #define __HAVE_ARCH_HUGE_PTE_CLEAR void huge_pte_clear(struct mm_struct *mm, unsigned long addr,
arch/riscv/include/asm/stacktrace.h +5 -0
@@ -21,4 +21,9 @@ static inline bool on_thread_stack(void)return !(((unsigned long )(current->stack) ^ current_stack_pointer) & ~(THREAD_SIZE -1 )); } + +#ifdef CONFIG_VMAP_STACK +DECLARE_PER_CPU(unsigned long [OVERFLOW_STACK_SIZE/sizeof(long)], overflow_stack); +#endif /* CONFIG_VMAP_STACK */ +#endif /* _ASM_RISCV_STACKTRACE_H */
arch/riscv/include/asm/tlb.h +1 -1
@@ -16,7 +16,7 @@ static void tlb_flush(struct mmu_gather *tlb);static inline void tlb_flush (struct mmu_gather *tlb) {#ifdef CONFIG_MMU -if (tlb->fullmm || tlb->need_flush_all) +if (tlb->fullmm || tlb->need_flush_all || tlb->freed_tables)flush_tlb_mm (tlb->mm);else flush_tlb_mm_range(tlb->mm, tlb->start, tlb->end,
arch/riscv/include/asm/tlbflush.h +2 -0
@@ -41,6 +41,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr);void flush_tlb_range (struct vm_area_struct *vma,unsigned long start,unsigned long end);void flush_tlb_kernel_range (unsigned long start,unsigned long end); +void local_flush_tlb_kernel_range (unsigned long start,unsigned long end);#ifdef CONFIG_TRANSPARENT_HUGEPAGE #define __HAVE_ARCH_FLUSH_PMD_TLB_RANGE void flush_pmd_tlb_range(struct vm_area_struct *vma, unsigned long start,
@@ -66,6 +67,7 @@ static inline void flush_tlb_kernel_range(unsigned long start,#define flush_tlb_mm (mm) flush_tlb_all()#define flush_tlb_mm_range (mm, start, end, page_size) flush_tlb_all() +#define local_flush_tlb_kernel_range (start, end) flush_tlb_all()#endif /* !CONFIG_SMP || !CONFIG_MMU */ #endif /* _ASM_RISCV_TLBFLUSH_H */
arch/riscv/mm/hugetlbpage.c +73 -5
126 lines not on this page · raw message
arch/riscv/mm/init.c +4 -0
@@ -1385,6 +1385,10 @@ void __init misc_mem_init(void)early_memtest (min_low_pfn <<PAGE_SHIFT , max_low_pfn <<PAGE_SHIFT );arch_numa_init ();sparse_init (); +#ifdef CONFIG_SPARSEMEM_VMEMMAP +/* The entire VMEMMAP region has been populated. Flush TLB for this region */ +local_flush_tlb_kernel_range (VMEMMAP_START ,VMEMMAP_END ); +#endif zone_sizes_init ();arch_reserve_crashkernel ();memblock_dump_all ();
arch/riscv/mm/tlbflush.c +6 -0
@@ -66,6 +66,12 @@ static inline void local_flush_tlb_range_asid(unsigned long start,local_flush_tlb_range_threshold_asid (start, size, stride, asid); } +/* Flush a range of kernel pages without broadcasting */ +void local_flush_tlb_kernel_range (unsigned long start,unsigned long end) +{ +local_flush_tlb_range_asid (start, end - start,PAGE_SIZE ,FLUSH_TLB_NO_ASID ); +} +static void __ipi_flush_tlb_all (void *info) {local_flush_tlb_all ();
arch/sh/include/asm/cacheflush.h +1 -0
@@ -90,6 +90,7 @@ extern void copy_from_user_page(struct vm_area_struct *vma, unsigned long len);#define flush_cache_vmap (start, end) local_flush_cache_all(NULL) +#define flush_cache_vmap_early (start, end) do { } while (0)#define flush_cache_vunmap (start, end) local_flush_cache_all(NULL)#define flush_dcache_mmap_lock (mapping) do { } while (0)
arch/sparc/include/asm/cacheflush_32.h +1 -0
@@ -48,6 +48,7 @@ static inline void flush_dcache_page(struct page *page)#define flush_dcache_mmap_unlock (mapping) do { } while (0)#define flush_cache_vmap (start, end) flush_cache_all() +#define flush_cache_vmap_early (start, end) do { } while (0)#define flush_cache_vunmap (start, end) flush_cache_all()/* When a context switch happens we must flush all user windows so that
arch/sparc/include/asm/cacheflush_64.h +1 -0
@@ -75,6 +75,7 @@ void flush_ptrace_access(struct vm_area_struct *, struct page *,#define flush_dcache_mmap_unlock (mapping) do { } while (0)#define flush_cache_vmap (start, end) do { } while (0) +#define flush_cache_vmap_early (start, end) do { } while (0)#define flush_cache_vunmap (start, end) do { } while (0)#endif /* !__ASSEMBLY__ */
arch/x86/boot/header.S +6 -8
@@ -106,8 +106,7 @@ extra_header_fields: .word 0 # MinorSubsystemVersion .long 0 # Win32VersionValue - .long setup_size + ZO__end + pecompat_vsize - # SizeOfImage + .long setup_size + ZO__end # SizeOfImage .long salign # SizeOfHeaders .long 0 # CheckSum
@@ -143,7 +142,7 @@ section_table: .ascii ".setup" .byte 0 .byte 0 - .long setup_size - salign # VirtualSize + .long pecompat_fstart - salign # VirtualSize .long salign # VirtualAddress .long pecompat_fstart - salign # SizeOfRawData .long salign # PointerToRawData
@@ -156,8 +155,8 @@ section_table: #ifdef CONFIG_EFI_MIXED .asciz ".compat" - .long 8 # VirtualSize - .long setup_size + ZO__end # VirtualAddress + .long pecompat_fsize # VirtualSize + .long pecompat_fstart # VirtualAddress .long pecompat_fsize # SizeOfRawData .long pecompat_fstart # PointerToRawData
@@ -172,17 +171,16 @@ section_table: * modes this image supports. */ .pushsection ".pecompat", "a", @progbits - .balign falign - .set pecompat_vsize, salign + .balign salign .globl pecompat_fstart pecompat_fstart: .byte 0x1 # Version .byte 8 # Size .word IMAGE_FILE_MACHINE_I386 # PE machine type .long setup_size + ZO_efi32_pe_entry # Entrypoint + .byte 0x0 # Sentinel .popsection #else - .set pecompat_vsize, 0 .set pecompat_fstart, setup_size #endif .ascii ".text"
arch/x86/boot/setup.ld +3 -3
@@ -24,6 +24,9 @@ SECTIONS .text : { *(.text .text.*) } .text32 : { *(.text32) } + .pecompat : { *(.pecompat) } + PROVIDE(pecompat_fsize = setup_size - pecompat_fstart); + . = ALIGN(16); .rodata : { *(.rodata*) }
@@ -36,9 +39,6 @@ SECTIONS . = ALIGN(16); .data : { *(.data*) } - .pecompat : { *(.pecompat) } - PROVIDE(pecompat_fsize = setup_size - pecompat_fstart); - .signature : { setup_sig = .; LONG(0x5a5aaa55)
arch/x86/lib/getuser.S +12 -12
@@ -163,23 +163,23 @@ SYM_CODE_END(__get_user_8_handle_exception) #endif /* get_user */ - _ASM_EXTABLE(1b, __get_user_handle_exception) - _ASM_EXTABLE(2b, __get_user_handle_exception) - _ASM_EXTABLE(3b, __get_user_handle_exception) + _ASM_EXTABLE_UA(1b, __get_user_handle_exception) + _ASM_EXTABLE_UA(2b, __get_user_handle_exception) + _ASM_EXTABLE_UA(3b, __get_user_handle_exception) #ifdef CONFIG_X86_64 - _ASM_EXTABLE(4b, __get_user_handle_exception) + _ASM_EXTABLE_UA(4b, __get_user_handle_exception) #else - _ASM_EXTABLE(4b, __get_user_8_handle_exception) - _ASM_EXTABLE(5b, __get_user_8_handle_exception) + _ASM_EXTABLE_UA(4b, __get_user_8_handle_exception) + _ASM_EXTABLE_UA(5b, __get_user_8_handle_exception) #endif /* __get_user */ - _ASM_EXTABLE(6b, __get_user_handle_exception) - _ASM_EXTABLE(7b, __get_user_handle_exception) - _ASM_EXTABLE(8b, __get_user_handle_exception) + _ASM_EXTABLE_UA(6b, __get_user_handle_exception) + _ASM_EXTABLE_UA(7b, __get_user_handle_exception) + _ASM_EXTABLE_UA(8b, __get_user_handle_exception) #ifdef CONFIG_X86_64 - _ASM_EXTABLE(9b, __get_user_handle_exception) + _ASM_EXTABLE_UA(9b, __get_user_handle_exception) #else - _ASM_EXTABLE(9b, __get_user_8_handle_exception) - _ASM_EXTABLE(10b, __get_user_8_handle_exception) + _ASM_EXTABLE_UA(9b, __get_user_8_handle_exception) + _ASM_EXTABLE_UA(10b, __get_user_8_handle_exception) #endif
arch/x86/lib/putuser.S +10 -10
@@ -133,15 +133,15 @@ SYM_CODE_START_LOCAL(__put_user_handle_exception) RET SYM_CODE_END(__put_user_handle_exception) - _ASM_EXTABLE(1b, __put_user_handle_exception) - _ASM_EXTABLE(2b, __put_user_handle_exception) - _ASM_EXTABLE(3b, __put_user_handle_exception) - _ASM_EXTABLE(4b, __put_user_handle_exception) - _ASM_EXTABLE(5b, __put_user_handle_exception) - _ASM_EXTABLE(6b, __put_user_handle_exception) - _ASM_EXTABLE(7b, __put_user_handle_exception) - _ASM_EXTABLE(9b, __put_user_handle_exception) + _ASM_EXTABLE_UA(1b, __put_user_handle_exception) + _ASM_EXTABLE_UA(2b, __put_user_handle_exception) + _ASM_EXTABLE_UA(3b, __put_user_handle_exception) + _ASM_EXTABLE_UA(4b, __put_user_handle_exception) + _ASM_EXTABLE_UA(5b, __put_user_handle_exception) + _ASM_EXTABLE_UA(6b, __put_user_handle_exception) + _ASM_EXTABLE_UA(7b, __put_user_handle_exception) + _ASM_EXTABLE_UA(9b, __put_user_handle_exception) #ifdef CONFIG_X86_32 - _ASM_EXTABLE(8b, __put_user_handle_exception) - _ASM_EXTABLE(10b, __put_user_handle_exception) + _ASM_EXTABLE_UA(8b, __put_user_handle_exception) + _ASM_EXTABLE_UA(10b, __put_user_handle_exception) #endif
arch/xtensa/include/asm/cacheflush.h +4 -2
@@ -116,8 +116,9 @@ void flush_cache_page(struct vm_area_struct*,#define flush_cache_mm (mm) flush_cache_all()#define flush_cache_dup_mm (mm) flush_cache_mm(mm) -#define flush_cache_vmap (start,end) flush_cache_all() -#define flush_cache_vunmap (start,end) flush_cache_all() +#define flush_cache_vmap (start,end) flush_cache_all() +#define flush_cache_vmap_early (start,end) do { } while (0) +#define flush_cache_vunmap (start,end) flush_cache_all()void flush_dcache_folio (struct folio *folio);#define flush_dcache_folio flush_dcache_folio
@@ -140,6 +141,7 @@ void local_flush_cache_page(struct vm_area_struct *vma,#define flush_cache_dup_mm (mm) do { } while (0)#define flush_cache_vmap (start,end) do { } while (0) +#define flush_cache_vmap_early (start,end) do { } while (0)#define flush_cache_vunmap (start,end) do { } while (0)#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0
block/blk-iocost.c +7 -0
@@ -1353,6 +1353,13 @@ static bool iocg_kick_delay(struct ioc_gq *iocg, struct ioc_now *now)lockdep_assert_held (&iocg->waitq.lock); +/* +* If the delay is set by another CPU, we may be in the past. No need to +* change anything if so. This avoids decay calculation underflow. +*/ +if (time_before64 (now->now, iocg->delay_at)) +return false; +/* calculate the current delay in effect - 1/2 every second */ tdelta = now->now - iocg->delay_at;if (iocg->delay)
drivers/atm/idt77252.c +2 -0
@@ -2930,6 +2930,8 @@ open_card_ubr0(struct idt77252_dev *card) vc->scq =alloc_scq (card, vc->class);if (!vc->scq) {printk ("%s: can't get SCQ.\n" , card->name); +kfree (card->vcs[0 ]); + card->vcs[0 ] =NULL ;return -ENOMEM ; }
drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c +6 -4
@@ -38,15 +38,17 @@ static int dpaa2_qdma_alloc_chan_resources(struct dma_chan *chan)if (!dpaa2_chan->fd_pool) goto err; - dpaa2_chan->fl_pool =dma_pool_create ("fl_pool" , dev, -sizeof (struct dpaa2_fl_entry ), -sizeof (struct dpaa2_fl_entry ),0 ); + dpaa2_chan->fl_pool = +dma_pool_create ("fl_pool" , dev, +sizeof (struct dpaa2_fl_entry ) *3 , +sizeof (struct dpaa2_fl_entry ),0 ); +if (!dpaa2_chan->fl_pool) goto err_fd; dpaa2_chan->sdd_pool =dma_pool_create ("sdd_pool" , dev, -sizeof (struct dpaa2_qdma_sd_d ), +sizeof (struct dpaa2_qdma_sd_d ) *2 ,sizeof (struct dpaa2_qdma_sd_d ),0 );if (!dpaa2_chan->sdd_pool) goto err_fl;
drivers/dma/fsl-qdma.c +10 -18
@@ -514,11 +514,11 @@ static struct fsl_qdma_queue queue_temp = queue_head + i + (j * queue_num); queue_temp->cq = -dma_alloc_coherent (&pdev->dev, -sizeof (struct fsl_qdma_format ) * - queue_size[i], - &queue_temp->bus_addr, -GFP_KERNEL ); +dmam_alloc_coherent (&pdev->dev, +sizeof (struct fsl_qdma_format ) * + queue_size[i], + &queue_temp->bus_addr, +GFP_KERNEL );if (!queue_temp->cq)return NULL ; queue_temp->block_base = fsl_qdma->block_base +
@@ -563,11 +563,11 @@ static struct fsl_qdma_queue/* * Buffer for queue command */ - status_head->cq =dma_alloc_coherent (&pdev->dev, -sizeof (struct fsl_qdma_format ) * - status_size, - &status_head->bus_addr, -GFP_KERNEL ); + status_head->cq =dmam_alloc_coherent (&pdev->dev, +sizeof (struct fsl_qdma_format ) * + status_size, + &status_head->bus_addr, +GFP_KERNEL );if (!status_head->cq) {devm_kfree (&pdev->dev, status_head);return NULL ;
@@ -1268,8 +1268,6 @@ static void fsl_qdma_cleanup_vchan(struct dma_device *dmadev)static void fsl_qdma_remove (struct platform_device *pdev) { -int i; -struct fsl_qdma_queue *status;struct device_node *np = pdev->dev.of_node;struct fsl_qdma_engine *fsl_qdma =platform_get_drvdata (pdev);
@@ -1277,12 +1275,6 @@ static void fsl_qdma_remove(struct platform_device *pdev)fsl_qdma_cleanup_vchan (&fsl_qdma->dma_dev);of_dma_controller_free (np);dma_async_device_unregister (&fsl_qdma->dma_dev); - -for (i =0 ; i < fsl_qdma->block_number; i++) { - status = fsl_qdma->status[i]; -dma_free_coherent (&pdev->dev,sizeof (struct fsl_qdma_format ) * - status->n_cq, status->cq, status->bus_addr); - } }static const struct of_device_id fsl_qdma_dt_ids[] = {
drivers/dma/ti/k3-udma.c +8 -2
@@ -3968,6 +3968,7 @@ static void udma_desc_pre_callback(struct virt_dma_chan *vc, {struct udma_chan *uc =to_udma_chan (&vc->chan);struct udma_desc *d; +u8 status;if (!vd)return ;
@@ -3977,12 +3978,12 @@ static void udma_desc_pre_callback(struct virt_dma_chan *vc,if (d->metadata_size)udma_fetch_epib (uc, d); -/* Provide residue information for the client */ if (result) {void *desc_vaddr =udma_curr_cppi5_desc_vaddr (d, d->desc_idx);if (cppi5_desc_get_type (desc_vaddr) ==CPPI5_INFO0_DESC_TYPE_VAL_HOST ) { +/* Provide residue information for the client */ result->residue = d->residue -cppi5_hdesc_get_pktlen (desc_vaddr);if (result->residue)
@@ -3991,7 +3992,12 @@ static void udma_desc_pre_callback(struct virt_dma_chan *vc, result->result =DMA_TRANS_NOERROR ; }else { result->residue =0 ; - result->result =DMA_TRANS_NOERROR ; +/* Propagate TR Response errors to the client */ + status = d->hwdesc[0 ].tr_resp_base->status; +if (status) + result->result =DMA_TRANS_ABORTED ; +else + result->result =DMA_TRANS_NOERROR ; } } }
drivers/firmware/efi/libstub/efistub.h +2 -1
@@ -956,7 +956,8 @@ efi_status_t efi_get_random_bytes(unsigned long size, u8 *out);efi_status_t efi_random_alloc (unsigned long size,unsigned long align,unsigned long *addr,unsigned long random_seed, -int memory_type,unsigned long alloc_limit); +int memory_type,unsigned long alloc_min, +unsigned long alloc_max);efi_status_t efi_random_get_seed (void );
drivers/firmware/efi/libstub/kaslr.c +1 -1
@@ -119,7 +119,7 @@ efi_status_t efi_kaslr_relocate_kernel(unsigned long *image_addr,*/ status =efi_random_alloc (*reserve_size, min_kimg_align, reserve_addr, phys_seed, -EFI_LOADER_CODE ,EFI_ALLOC_LIMIT ); +EFI_LOADER_CODE ,0 ,EFI_ALLOC_LIMIT );if (status !=EFI_SUCCESS )efi_warn ("efi_random_alloc() failed: 0x%lx\n" , status); }else {
drivers/firmware/efi/libstub/randomalloc.c +7 -5
@@ -17,7 +17,7 @@static unsigned long get_entry_num_slots (efi_memory_desc_t *md,unsigned long size,unsigned long align_shift, -u64 alloc_limit) +u64 alloc_min,u64 alloc_max) {unsigned long align =1UL << align_shift;u64 first_slot, last_slot, region_end;
@@ -30,11 +30,11 @@ static unsigned long get_entry_num_slots(efi_memory_desc_t *md,return 0 ; region_end =min (md->phys_addr + md->num_pages *EFI_PAGE_SIZE -1 , - alloc_limit); + alloc_max);if (region_end < size)return 0 ; - first_slot =round_up (md->phys_addr, align); + first_slot =round_up (max (md->phys_addr, alloc_min), align); last_slot =round_down (region_end - size +1 , align);if (first_slot > last_slot)
@@ -56,7 +56,8 @@ efi_status_t efi_random_alloc(unsigned long size,unsigned long *addr, unsigned long random_seed, int memory_type, - unsigned long alloc_limit) + unsigned long alloc_min, + unsigned long alloc_max) { unsigned long total_slots = 0, target_slot;unsigned long total_mirrored_slots =0 ;
@@ -78,7 +79,8 @@ efi_status_t efi_random_alloc(unsigned long size,efi_memory_desc_t *md = (void *)map->map + map_offset;unsigned long slots; - slots =get_entry_num_slots (md, size,ilog2 (align), alloc_limit); + slots =get_entry_num_slots (md, size,ilog2 (align), alloc_min, + alloc_max);MD_NUM_SLOTS (md) = slots; total_slots += slots;if (md->attribute &EFI_MEMORY_MORE_RELIABLE )
drivers/firmware/efi/libstub/x86-stub.c +15 -10
@@ -223,8 +223,8 @@ static void retrieve_apple_device_properties(struct boot_params *boot_params) } } -void efi_adjust_memory_range_protection (unsigned long start, -unsigned long size) +efi_status_t efi_adjust_memory_range_protection (unsigned long start, +unsigned long size) {efi_status_t status;efi_gcd_memory_space_desc_t desc;
@@ -236,13 +236,17 @@ void efi_adjust_memory_range_protection(unsigned long start, rounded_end =roundup (start + size,EFI_PAGE_SIZE );if (memattr !=NULL ) { -efi_call_proto (memattr, clear_memory_attributes, rounded_start, - rounded_end - rounded_start,EFI_MEMORY_XP ); -return ; + status =efi_call_proto (memattr, clear_memory_attributes, + rounded_start, + rounded_end - rounded_start, +EFI_MEMORY_XP ); +if (status !=EFI_SUCCESS ) +efi_warn ("Failed to clear EFI_MEMORY_XP attribute\n" ); +return status; }if (efi_dxe_table ==NULL ) -return ; +return EFI_SUCCESS ;/* * Don't modify memory region attributes, they are
@@ -255,7 +259,7 @@ void efi_adjust_memory_range_protection(unsigned long start, status =efi_dxe_call (get_memory_space_descriptor, start, &desc);if (status !=EFI_SUCCESS ) -return ; +break ; next = desc.base_address + desc.length;
@@ -280,8 +284,10 @@ void efi_adjust_memory_range_protection(unsigned long start, unprotect_start, unprotect_start + unprotect_size, status); +break ; } } +return EFI_SUCCESS ; }static void setup_unaccepted_memory (void )
@@ -793,6 +799,7 @@ static efi_status_t efi_decompress_kernel(unsigned long *kernel_entry) status =efi_random_alloc (alloc_size,CONFIG_PHYSICAL_ALIGN , &addr, seed[0 ],EFI_LOADER_CODE , +LOAD_PHYSICAL_ADDR ,EFI_X86_KERNEL_ALLOC_LIMIT );if (status !=EFI_SUCCESS )return status;
@@ -805,9 +812,7 @@ static efi_status_t efi_decompress_kernel(unsigned long *kernel_entry) *kernel_entry = addr + entry; -efi_adjust_memory_range_protection (addr, kernel_total_size); - -return EFI_SUCCESS ; +return efi_adjust_memory_range_protection (addr, kernel_total_size); } static void __noreturn enter_kernel(unsigned long kernel_addr,
drivers/firmware/efi/libstub/x86-stub.h +2 -2
@@ -5,8 +5,8 @@extern void trampoline_32bit_src (void *,bool );extern const u16 trampoline_ljmp_imm_offset; -void efi_adjust_memory_range_protection (unsigned long start, -unsigned long size); +efi_status_t efi_adjust_memory_range_protection (unsigned long start, +unsigned long size);#ifdef CONFIG_X86_64 efi_status_t efi_setup_5level_paging (void );
drivers/firmware/efi/libstub/zboot.c +1 -1
@@ -119,7 +119,7 @@ efi_zboot_entry(efi_handle_t handle, efi_system_table_t *systab) } status =efi_random_alloc (alloc_size, min_kimg_align, &image_base, - seed,EFI_LOADER_CODE ,EFI_ALLOC_LIMIT ); + seed,EFI_LOADER_CODE ,0 ,EFI_ALLOC_LIMIT );if (status !=EFI_SUCCESS ) {efi_err ("Failed to allocate memory\n" ); goto free_cmdline;
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +7 -17
@@ -4051,23 +4051,13 @@ int amdgpu_device_init(struct amdgpu_device *adev, } } }else { -switch (amdgpu_ip_version (adev,MP1_HWIP ,0 )) { -case IP_VERSION (13 ,0 ,0 ): -case IP_VERSION (13 ,0 ,7 ): -case IP_VERSION (13 ,0 ,10 ): - r =psp_gpu_reset (adev); -break ; -default : - tmp = amdgpu_reset_method; -/* It should do a default reset when loading or reloading the driver, -* regardless of the module parameter reset_method. -*/ - amdgpu_reset_method =AMD_RESET_METHOD_NONE ; - r =amdgpu_asic_reset (adev); - amdgpu_reset_method = tmp; -break ; - } - + tmp = amdgpu_reset_method; +/* It should do a default reset when loading or reloading the driver, +* regardless of the module parameter reset_method. +*/ + amdgpu_reset_method =AMD_RESET_METHOD_NONE ; + r =amdgpu_asic_reset (adev); + amdgpu_reset_method = tmp;if (r) {dev_err (adev->dev,"asic reset on init failed\n" ); goto failed;
drivers/gpu/drm/amd/display/dc/dcn301/dcn301_resource.c +1 -1
@@ -999,7 +999,7 @@ static struct stream_encoder *dcn301_stream_encoder_create(enum engine_id eng_id vpg =dcn301_vpg_create (ctx, vpg_inst); afmt =dcn301_afmt_create (ctx, afmt_inst); -if (!enc1 || !vpg || !afmt) { +if (!enc1 || !vpg || !afmt || eng_id >=ARRAY_SIZE (stream_enc_regs)) {kfree (enc1);kfree (vpg);kfree (afmt);
drivers/gpu/drm/amd/display/dc/hwss/dcn21/dcn21_hwseq.c +34 -29
96 lines not on this page · raw message
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +2 -31
@@ -734,7 +734,7 @@ static int smu_early_init(void *handle) smu->adev = adev; smu->pm_enabled = !!amdgpu_dpm; smu->is_apu = false; - smu->smu_baco.state =SMU_BACO_STATE_NONE ; + smu->smu_baco.state =SMU_BACO_STATE_EXIT ; smu->smu_baco.platform_support = false; smu->user_dpm_profile.fan_mode =-1 ;
@@ -1746,31 +1746,10 @@ static int smu_smc_hw_cleanup(struct smu_context *smu)return 0 ; } -static int smu_reset_mp1_state (struct smu_context *smu) -{ -struct amdgpu_device *adev = smu->adev; -int ret =0 ; - -if ((!adev->in_runpm) && (!adev->in_suspend) && - (!amdgpu_in_reset (adev))) -switch (amdgpu_ip_version (adev,MP1_HWIP ,0 )) { -case IP_VERSION (13 ,0 ,0 ): -case IP_VERSION (13 ,0 ,7 ): -case IP_VERSION (13 ,0 ,10 ): - ret =smu_set_mp1_state (smu,PP_MP1_STATE_UNLOAD ); -break ; -default : -break ; - } - -return ret; -} -static int smu_hw_fini (void *handle) {struct amdgpu_device *adev = (struct amdgpu_device *)handle;struct smu_context *smu = adev->powerplay.pp_handle; -int ret;if (amdgpu_sriov_vf (adev) && !amdgpu_sriov_is_pp_one_vf (adev))return 0 ;
@@ -1788,15 +1767,7 @@ static int smu_hw_fini(void *handle) adev->pm.dpm_enabled = false; - ret =smu_smc_hw_cleanup (smu); -if (ret) -return ret; - - ret =smu_reset_mp1_state (smu); -if (ret) -return ret; - -return 0 ; +return smu_smc_hw_cleanup (smu); }static void smu_late_fini (void *handle)
drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h +0 -1
@@ -419,7 +419,6 @@ enum smu_reset_mode {enum smu_baco_state {SMU_BACO_STATE_ENTER =0 ,SMU_BACO_STATE_EXIT , -SMU_BACO_STATE_NONE , };struct smu_baco_context {
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c +1 -7
@@ -2773,13 +2773,7 @@ static int smu_v13_0_0_set_mp1_state(struct smu_context *smu,switch (mp1_state) {case PP_MP1_STATE_UNLOAD : - ret =smu_cmn_send_smc_msg_with_param (smu, - SMU_MSG_PrepareMp1ForUnload, -0x55 ,NULL ); - -if (!ret && smu->smu_baco.state ==SMU_BACO_STATE_EXIT ) - ret =smu_v13_0_disable_pmfw_state (smu); - + ret =smu_cmn_set_mp1_state (smu, mp1_state);break ;default :/* Ignore others */
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c +1 -7
@@ -2500,13 +2500,7 @@ static int smu_v13_0_7_set_mp1_state(struct smu_context *smu,switch (mp1_state) {case PP_MP1_STATE_UNLOAD : - ret =smu_cmn_send_smc_msg_with_param (smu, - SMU_MSG_PrepareMp1ForUnload, -0x55 ,NULL ); - -if (!ret && smu->smu_baco.state ==SMU_BACO_STATE_EXIT ) - ret =smu_v13_0_disable_pmfw_state (smu); - + ret =smu_cmn_set_mp1_state (smu, mp1_state);break ;default :/* Ignore others */
drivers/gpu/drm/i915/gvt/handlers.c +1 -2
@@ -2850,8 +2850,7 @@ static int handle_mmio(struct intel_gvt_mmio_table_iter *iter, u32 offset,for (i = start; i < end; i +=4 ) { p =intel_gvt_find_mmio_info (gvt, i);if (p) { -WARN (1 ,"dup mmio definition offset %x\n" , - info->offset); +WARN (1 ,"dup mmio definition offset %x\n" , i);/* We return -EEXIST here to make GVT-g load fail. * So duplicated MMIO can be found as soon as
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +2 -2
@@ -2075,7 +2075,7 @@ void dpu_encoder_helper_phys_cleanup(struct dpu_encoder_phys *phys_enc) }/* reset the merge 3D HW block */ -if (phys_enc->hw_pp->merge_3d) { +if (phys_enc->hw_pp && phys_enc->hw_pp->merge_3d) { phys_enc->hw_pp->merge_3d->ops.setup_3d_mode (phys_enc->hw_pp->merge_3d,BLEND_3D_NONE );if (phys_enc->hw_ctl->ops.update_pending_flush_merge_3d)
@@ -2097,7 +2097,7 @@ void dpu_encoder_helper_phys_cleanup(struct dpu_encoder_phys *phys_enc)if (phys_enc->hw_wb) intf_cfg.wb = phys_enc->hw_wb->idx; -if (phys_enc->hw_pp->merge_3d) +if (phys_enc->hw_pp && phys_enc->hw_pp->merge_3d) intf_cfg.merge_3d = phys_enc->hw_pp->merge_3d->idx;if (ctl->ops.reset_intf_cfg)
drivers/gpu/drm/msm/dp/dp_ctrl.c +0 -5
@@ -135,11 +135,6 @@ static void dp_ctrl_config_ctrl(struct dp_ctrl_private *ctrl) tbd =dp_link_get_test_bits_depth (ctrl->link, ctrl->panel->dp_mode.bpp); -if (tbd ==DP_TEST_BIT_DEPTH_UNKNOWN ) { -pr_debug ("BIT_DEPTH not set. Configure default\n" ); - tbd =DP_TEST_BIT_DEPTH_8 ; - } - config |= tbd <<DP_CONFIGURATION_CTRL_BPC_SHIFT ;/* Num of Lanes */
drivers/gpu/drm/msm/dp/dp_link.c +14 -8
@@ -7,6 +7,7 @@#include <drm/drm_print.h> +#include "dp_reg.h" #include "dp_link.h" #include "dp_panel.h"
@@ -1082,7 +1083,7 @@ int dp_link_process_request(struct dp_link *dp_link)int dp_link_get_colorimetry_config (struct dp_link *dp_link) { -u32 cc; +u32 cc =DP_MISC0_COLORIMERY_CFG_LEGACY_RGB ;struct dp_link_private *link;if (!dp_link) {
@@ -1096,10 +1097,11 @@ int dp_link_get_colorimetry_config(struct dp_link *dp_link)* Unless a video pattern CTS test is ongoing, use RGB_VESA * Only RGB_VESA and RGB_CEA supported for now */ -if (dp_link_is_video_pattern_requested (link)) - cc = link->dp_link.test_video.test_dyn_range; -else - cc =DP_TEST_DYNAMIC_RANGE_VESA ; +if (dp_link_is_video_pattern_requested (link)) { +if (link->dp_link.test_video.test_dyn_range & +DP_TEST_DYNAMIC_RANGE_CEA ) + cc =DP_MISC0_COLORIMERY_CFG_CEA_RGB ; + }return cc; }
@@ -1179,6 +1181,9 @@ void dp_link_reset_phy_params_vx_px(struct dp_link *dp_link)u32 dp_link_get_test_bits_depth (struct dp_link *dp_link,u32 bpp) {u32 tbd; +struct dp_link_private *link; + + link = container_of(dp_link, struct dp_link_private, dp_link);/* * Few simplistic rules and assumptions made here:
@@ -1196,12 +1201,13 @@ u32 dp_link_get_test_bits_depth(struct dp_link *dp_link, u32 bpp) tbd =DP_TEST_BIT_DEPTH_10 ;break ;default : - tbd =DP_TEST_BIT_DEPTH_UNKNOWN ; +drm_dbg_dp (link->drm_dev,"bpp=%d not supported, use bpc=8\n" , + bpp); + tbd =DP_TEST_BIT_DEPTH_8 ;break ; } -if (tbd !=DP_TEST_BIT_DEPTH_UNKNOWN ) - tbd = (tbd >>DP_TEST_BIT_DEPTH_SHIFT ); + tbd = (tbd >>DP_TEST_BIT_DEPTH_SHIFT );return tbd; }
drivers/gpu/drm/msm/dp/dp_reg.h +3 -0
@@ -143,6 +143,9 @@#define DP_MISC0_COLORIMETRY_CFG_SHIFT (0x00000001)#define DP_MISC0_TEST_BITS_DEPTH_SHIFT (0x00000005) +#define DP_MISC0_COLORIMERY_CFG_LEGACY_RGB (0) +#define DP_MISC0_COLORIMERY_CFG_CEA_RGB (0x04) +#define REG_DP_VALID_BOUNDARY (0x00000030)#define REG_DP_VALID_BOUNDARY_2 (0x00000034)
drivers/hwmon/aspeed-pwm-tacho.c +7 -0
@@ -193,6 +193,8 @@ struct aspeed_pwm_tacho_data {u8 fan_tach_ch_source[16 ];struct aspeed_cooling_device *cdev[8 ];const struct attribute_group *groups[3 ]; +/* protects access to shared ASPEED_PTCR_RESULT */ +struct mutex tach_lock; };enum type {TYPEM ,TYPEN ,TYPEO };
@@ -527,6 +529,8 @@ static int aspeed_get_fan_tach_ch_rpm(struct aspeed_pwm_tacho_data *priv,u8 fan_tach_ch_source, type, mode, both;int ret; +mutex_lock (&priv->tach_lock); +regmap_write (priv->regmap,ASPEED_PTCR_TRIGGER ,0 );regmap_write (priv->regmap,ASPEED_PTCR_TRIGGER ,0x1 << fan_tach_ch);
@@ -544,6 +548,8 @@ static int aspeed_get_fan_tach_ch_rpm(struct aspeed_pwm_tacho_data *priv,ASPEED_RPM_STATUS_SLEEP_USEC , usec); +mutex_unlock (&priv->tach_lock); +/* return -ETIMEDOUT if we didn't get an answer. */ if (ret)return ret;
@@ -903,6 +909,7 @@ static int aspeed_pwm_tacho_probe(struct platform_device *pdev) priv =devm_kzalloc (dev,sizeof (*priv),GFP_KERNEL );if (!priv)return -ENOMEM ; +mutex_init (&priv->tach_lock); priv->regmap =devm_regmap_init (dev,NULL , (__force void *)regs, &aspeed_pwm_tacho_regmap_config);if (IS_ERR (priv->regmap))
drivers/hwmon/coretemp.c +21 -19
@@ -419,7 +419,7 @@ static ssize_t show_temp(struct device *dev, }static int create_core_attrs (struct temp_data *tdata,struct device *dev, -int attr_no) +int index) {int i; static ssize_t (*const rd_ptr[TOTAL_ATTRS]) (struct device *dev,
@@ -431,13 +431,20 @@ static int create_core_attrs(struct temp_data *tdata, struct device *dev, };for (i =0 ; i < tdata->attr_size; i++) { +/* +* We map the attr number to core id of the CPU +* The attr number is always core id + 2 +* The Pkgtemp will always show up as temp1_*, if available +*/ +int attr_no = tdata->is_pkg_data ?1 : tdata->cpu_core_id +2 ; +snprintf (tdata->attr_name[i],CORETEMP_NAME_LENGTH ,"temp%d_%s" , attr_no, suffixes[i]);sysfs_attr_init (&tdata->sd_attrs[i].dev_attr.attr); tdata->sd_attrs[i].dev_attr.attr.name = tdata->attr_name[i]; tdata->sd_attrs[i].dev_attr.attr.mode =0444 ; tdata->sd_attrs[i].dev_attr.show = rd_ptr[i]; - tdata->sd_attrs[i].index = attr_no; + tdata->sd_attrs[i].index = index; tdata->attrs[i] = &tdata->sd_attrs[i].dev_attr.attr; } tdata->attr_group.attrs = tdata->attrs;
@@ -495,30 +502,25 @@ static int create_core_data(struct platform_device *pdev, unsigned int cpu,struct platform_data *pdata =platform_get_drvdata (pdev);struct cpuinfo_x86 *c = &cpu_data (cpu);u32 eax, edx; -int err, index, attr_no; +int err, index;if (!housekeeping_cpu (cpu,HK_TYPE_MISC ))return 0 ;/* -* Find attr number for sysfs: -* We map the attr number to core id of the CPU -* The attr number is always core id + 2 -* The Pkgtemp will always show up as temp1_*, if available +* Get the index of tdata in pdata->core_data[] +* tdata for package: pdata->core_data[1] +* tdata for core: pdata->core_data[2] .. pdata->core_data[NUM_REAL_CORES + 1] */ if (pkg_flag) { - attr_no =PKG_SYSFS_ATTR_NO ; + index =PKG_SYSFS_ATTR_NO ; }else { - index =ida_alloc (&pdata->ida,GFP_KERNEL ); + index =ida_alloc_max (&pdata->ida,NUM_REAL_CORES -1 ,GFP_KERNEL );if (index <0 )return index; - pdata->cpu_map[index] =topology_core_id (cpu); - attr_no = index +BASE_SYSFS_ATTR_NO ; - } -if (attr_no >MAX_CORE_DATA -1 ) { - err = -ERANGE ; - goto ida_free; + pdata->cpu_map[index] =topology_core_id (cpu); + index +=BASE_SYSFS_ATTR_NO ; } tdata =init_temp_data (cpu, pkg_flag);
@@ -544,20 +546,20 @@ static int create_core_data(struct platform_device *pdev, unsigned int cpu,if (get_ttarget (tdata, &pdev->dev) >=0 ) tdata->attr_size++; - pdata->core_data[attr_no] = tdata; + pdata->core_data[index] = tdata;/* Create sysfs interfaces */ - err =create_core_attrs (tdata, pdata->hwmon_dev, attr_no); + err =create_core_attrs (tdata, pdata->hwmon_dev, index);if (err) goto exit_free;return 0 ; exit_free: - pdata->core_data[attr_no] =NULL ; + pdata->core_data[index] =NULL ;kfree (tdata); ida_free:if (!pkg_flag) -ida_free (&pdata->ida, index); +ida_free (&pdata->ida, index -BASE_SYSFS_ATTR_NO );return err; }
drivers/input/keyboard/atkbd.c +8 -5
@@ -811,7 +811,6 @@ static int atkbd_probe(struct atkbd *atkbd) {struct ps2dev *ps2dev = &atkbd->ps2dev;unsigned char param[2 ]; -bool skip_getid;/* * Some systems, where the bit-twiddling when testing the io-lines of the
@@ -825,6 +824,11 @@ static int atkbd_probe(struct atkbd *atkbd)"keyboard reset failed on %s\n" , ps2dev->serio->phys); +if (atkbd_skip_getid (atkbd)) { + atkbd->id =0xab83 ; +return 0 ; + } +/* * Then we check the keyboard ID. We should get 0xab83 under normal conditions. * Some keyboards report different values, but the first byte is always 0xab or
@@ -833,18 +837,17 @@ static int atkbd_probe(struct atkbd *atkbd)*/ param[0 ] = param[1 ] =0xa5 ;/* initialize with invalid values */ - skip_getid =atkbd_skip_getid (atkbd); -if (skip_getid ||ps2_command (ps2dev, param,ATKBD_CMD_GETID )) { +if (ps2_command (ps2dev, param,ATKBD_CMD_GETID )) {/* -* If the get ID command was skipped or failed, we check if we can at least set +* If the get ID command failed, we check if we can at least set * the LEDs on the keyboard. This should work on every keyboard out there. * It also turns the LEDs off, which we want anyway. */ param[0 ] =0 ;if (ps2_command (ps2dev, param,ATKBD_CMD_SETLEDS ))return -1 ; - atkbd->id = skip_getid ?0xab83 :0xabba ; + atkbd->id =0xabba ;return 0 ; }
drivers/input/serio/i8042-acpipnpio.h +6 -0
@@ -1208,6 +1208,12 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = {SERIO_QUIRK_RESET_ALWAYS |SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) }, + { + .matches = { + DMI_MATCH(DMI_BOARD_NAME, "NS5x_7xPU"), + }, + .driver_data = (void *)(SERIO_QUIRK_NOAUX ) + }, { .matches = { DMI_MATCH(DMI_BOARD_NAME, "NJ50_70CU"),
drivers/net/ethernet/aquantia/atlantic/aq_ptp.c +2 -2
@@ -993,7 +993,7 @@ int aq_ptp_ring_alloc(struct aq_nic_s *aq_nic)return 0 ; err_exit_hwts_rx: -aq_ring_free (&aq_ptp->hwts_rx); +aq_ring_hwts_rx_free (&aq_ptp->hwts_rx); err_exit_ptp_rx:aq_ring_free (&aq_ptp->ptp_rx); err_exit_ptp_tx:
@@ -1011,7 +1011,7 @@ void aq_ptp_ring_free(struct aq_nic_s *aq_nic)aq_ring_free (&aq_ptp->ptp_tx);aq_ring_free (&aq_ptp->ptp_rx); -aq_ring_free (&aq_ptp->hwts_rx); +aq_ring_hwts_rx_free (&aq_ptp->hwts_rx);aq_ptp_skb_ring_release (&aq_ptp->skb_ring); }
drivers/net/ethernet/aquantia/atlantic/aq_ring.c +13 -0
@@ -919,6 +919,19 @@ void aq_ring_free(struct aq_ring_s *self) } } +void aq_ring_hwts_rx_free (struct aq_ring_s *self) +{ +if (!self) +return ; + +if (self->dx_ring) { +dma_free_coherent (aq_nic_get_dev (self->aq_nic), + self->size * self->dx_size +AQ_CFG_RXDS_DEF , + self->dx_ring, self->dx_ring_pa); + self->dx_ring =NULL ; + } +} +unsigned int aq_ring_fill_stats_data (struct aq_ring_s *self,u64 *data) {unsigned int count;
drivers/net/ethernet/aquantia/atlantic/aq_ring.h +1 -0
@@ -210,6 +210,7 @@ int aq_ring_rx_fill(struct aq_ring_s *self);int aq_ring_hwts_rx_alloc (struct aq_ring_s *self,struct aq_nic_s *aq_nic,unsigned int idx,unsigned int size,unsigned int dx_size); +void aq_ring_hwts_rx_free (struct aq_ring_s *self);void aq_ring_hwts_rx_clean (struct aq_ring_s *self,struct aq_nic_s *aq_nic);unsigned int aq_ring_fill_stats_data (struct aq_ring_s *self,u64 *data);
drivers/net/ethernet/engleder/tsnep_main.c +12 -4
@@ -719,17 +719,25 @@ static void tsnep_xdp_xmit_flush(struct tsnep_tx *tx)static bool tsnep_xdp_xmit_back (struct tsnep_adapter *adapter,struct xdp_buff *xdp, -struct netdev_queue *tx_nq,struct tsnep_tx *tx) +struct netdev_queue *tx_nq,struct tsnep_tx *tx, +bool zc) {struct xdp_frame *xdpf =xdp_convert_buff_to_frame (xdp);bool xmit; +u32 type;if (unlikely (!xdpf))return false; +/* no page pool for zero copy */ +if (zc) + type =TSNEP_TX_TYPE_XDP_NDO ; +else + type =TSNEP_TX_TYPE_XDP_TX ; +__netif_tx_lock (tx_nq,smp_processor_id ()); - xmit =tsnep_xdp_xmit_frame_ring (xdpf, tx,TSNEP_TX_TYPE_XDP_TX ); + xmit =tsnep_xdp_xmit_frame_ring (xdpf, tx, type);/* Avoid transmit queue timeout since we share it with the slow path */ if (xmit)
@@ -1273,7 +1281,7 @@ static bool tsnep_xdp_run_prog(struct tsnep_rx *rx, struct bpf_prog *prog,case XDP_PASS :return false;case XDP_TX : -if (!tsnep_xdp_xmit_back (rx->adapter, xdp, tx_nq, tx)) +if (!tsnep_xdp_xmit_back (rx->adapter, xdp, tx_nq, tx, false)) goto out_failure; *status |=TSNEP_XDP_TX ;return true;
@@ -1323,7 +1331,7 @@ static bool tsnep_xdp_run_prog_zc(struct tsnep_rx *rx, struct bpf_prog *prog,case XDP_PASS :return false;case XDP_TX : -if (!tsnep_xdp_xmit_back (rx->adapter, xdp, tx_nq, tx)) +if (!tsnep_xdp_xmit_back (rx->adapter, xdp, tx_nq, tx, true)) goto out_failure; *status |=TSNEP_XDP_TX ;return true;
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c +12 -2
@@ -951,8 +951,11 @@ int otx2_sq_init(struct otx2_nic *pfvf, u16 qidx, u16 sqb_aura)if (pfvf->ptp && qidx < pfvf->hw.tx_queues) { err =qmem_alloc (pfvf->dev, &sq->timestamps, qset->sqe_cnt,sizeof (*sq->timestamps)); -if (err) +if (err) { +kfree (sq->sg); + sq->sg =NULL ;return err; + } } sq->head =0 ;
@@ -968,7 +971,14 @@ int otx2_sq_init(struct otx2_nic *pfvf, u16 qidx, u16 sqb_aura) sq->stats.bytes =0 ; sq->stats.pkts =0 ; -return pfvf->hw_ops->sq_aq_init (pfvf, qidx, sqb_aura); + err = pfvf->hw_ops->sq_aq_init (pfvf, qidx, sqb_aura); +if (err) { +kfree (sq->sg); + sq->sg =NULL ; +return err; + } + +return 0 ; }
drivers/net/ethernet/stmicro/stmmac/common.h +1 -0
@@ -216,6 +216,7 @@ struct stmmac_safety_stats {unsigned long mac_errors[32 ];unsigned long mtl_errors[32 ];unsigned long dma_errors[32 ]; +unsigned long dma_dpp_errors[32 ]; };/* Number of fields in Safety Stats */
drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h +3 -0
@@ -319,6 +319,8 @@#define XGMAC_RXCEIE BIT(4)#define XGMAC_TXCEIE BIT(0)#define XGMAC_MTL_ECC_INT_STATUS 0x000010cc +#define XGMAC_MTL_DPP_CONTROL 0x000010e0 +#define XGMAC_DPP_DISABLE BIT(0)#define XGMAC_MTL_TXQ_OPMODE (x) (0x00001100 + (0x80 * (x)))#define XGMAC_TQS GENMASK(25, 16)#define XGMAC_TQS_SHIFT 16
@@ -401,6 +403,7 @@#define XGMAC_DCEIE BIT(1)#define XGMAC_TCEIE BIT(0)#define XGMAC_DMA_ECC_INT_STATUS 0x0000306c +#define XGMAC_DMA_DPP_INT_STATUS 0x00003074#define XGMAC_DMA_CH_CONTROL (x) (0x00003100 + (0x80 * (x)))#define XGMAC_SPH BIT(24)#define XGMAC_PBLx8 BIT(16)
drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c +57 -1
88 lines not on this page · raw message
drivers/net/netdevsim/dev.c +4 -4
@@ -835,14 +835,14 @@ static void nsim_dev_trap_report_work(struct work_struct *work) trap_report_dw.work); nsim_dev = nsim_trap_data->nsim_dev; -/* For each running port and enabled packet trap, generate a UDP -* packet with a random 5-tuple and report it. -*/ if (!devl_trylock (priv_to_devlink (nsim_dev))) { -schedule_delayed_work (&nsim_dev->trap_data->trap_report_dw,0 ); +schedule_delayed_work (&nsim_dev->trap_data->trap_report_dw,1 );return ; } +/* For each running port and enabled packet trap, generate a UDP +* packet with a random 5-tuple and report it. +*/ list_for_each_entry (nsim_dev_port, &nsim_dev->port_list, list) {if (!netif_running (nsim_dev_port->ns->netdev))continue ;
drivers/net/ppp/ppp_async.c +4 -0
@@ -460,6 +460,10 @@ ppp_async_ioctl(struct ppp_channel *chan, unsigned int cmd, unsigned long arg)case PPPIOCSMRU :if (get_user (val, p))break ; +if (val >U16_MAX ) { + err = -EINVAL ; +break ; + }if (val <PPP_MRU ) val =PPP_MRU ; ap->mru = val;
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +4 -2
@@ -3779,8 +3779,10 @@ static int brcmf_internal_escan_add_info(struct cfg80211_scan_request *req,if (req->channels[i] == chan)break ; } -if (i == req->n_channels) - req->channels[req->n_channels++] = chan; +if (i == req->n_channels) { + req->n_channels++; + req->channels[i] = chan; + }for (i =0 ; i < req->n_ssids; i++) { if (req->ssids[i].ssid_len == ssid_len &&
drivers/net/wireless/intel/iwlwifi/fw/api/debug.h +1 -1
@@ -531,7 +531,7 @@ enum iwl_fw_dbg_config_cmd_type { };/* LDBG_CFG_CMD_TYPE_API_E_VER_1 */ /* this token disables debug asserts in the firmware */ -#define IWL_FW_DBG_CONFIG_TOKEN 0x00011301 +#define IWL_FW_DBG_CONFIG_TOKEN 0x00010001/** * struct iwl_fw_dbg_config_cmd - configure FW debug
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +4 -2
@@ -1586,7 +1586,8 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw,*/ if (vif->type ==NL80211_IFTYPE_AP || vif->type ==NL80211_IFTYPE_ADHOC ) { -iwl_mvm_vif_dbgfs_add_link (mvm, vif); +if (!test_bit (IWL_MVM_STATUS_IN_HW_RESTART , &mvm->status)) +iwl_mvm_vif_dbgfs_add_link (mvm, vif); ret =0 ; goto out; }
@@ -1626,7 +1627,8 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw,iwl_mvm_chandef_get_primary_80 (&vif->bss_conf.chandef); } -iwl_mvm_vif_dbgfs_add_link (mvm, vif); +if (!test_bit (IWL_MVM_STATUS_IN_HW_RESTART , &mvm->status)) +iwl_mvm_vif_dbgfs_add_link (mvm, vif); if (!test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status) && vif->type == NL80211_IFTYPE_STATION && !vif->p2p &&
drivers/net/wireless/intel/iwlwifi/mvm/mld-mac80211.c +5 -4
@@ -81,7 +81,8 @@ static int iwl_mvm_mld_mac_add_interface(struct ieee80211_hw *hw,ieee80211_hw_set (mvm->hw,RX_INCLUDES_FCS ); } -iwl_mvm_vif_dbgfs_add_link (mvm, vif); +if (!test_bit (IWL_MVM_STATUS_IN_HW_RESTART , &mvm->status)) +iwl_mvm_vif_dbgfs_add_link (mvm, vif); if (!test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status) && vif->type == NL80211_IFTYPE_STATION && !vif->p2p &&
@@ -437,6 +438,9 @@ __iwl_mvm_mld_unassign_vif_chanctx(struct iwl_mvm *mvm, mvmvif->ap_ibss_active = false; } +iwl_mvm_link_changed (mvm, vif, link_conf, +LINK_CONTEXT_MODIFY_ACTIVE , false); +if (iwl_mvm_is_esr_supported (mvm->fwrt.trans) && n_active >1 ) {int ret =iwl_mvm_esr_mode_inactive (mvm, vif);
@@ -448,9 +452,6 @@ __iwl_mvm_mld_unassign_vif_chanctx(struct iwl_mvm *mvm,if (vif->type ==NL80211_IFTYPE_MONITOR )iwl_mvm_mld_rm_snif_sta (mvm, vif); -iwl_mvm_link_changed (mvm, vif, link_conf, -LINK_CONTEXT_MODIFY_ACTIVE , false); -if (switching_chanctx)return ; mvmvif->link[link_id]->phy_ctxt =NULL ;
drivers/nvme/host/core.c +5 -2
@@ -4107,6 +4107,7 @@ static bool nvme_ctrl_pp_status(struct nvme_ctrl *ctrl)static void nvme_get_fw_slot_info (struct nvme_ctrl *ctrl) {struct nvme_fw_slot_info_log *log; +u8 next_fw_slot, cur_fw_slot; log =kmalloc (sizeof (*log),GFP_KERNEL );if (!log)
@@ -4118,13 +4119,15 @@ static void nvme_get_fw_slot_info(struct nvme_ctrl *ctrl) goto out_free_log; } -if (log->afi &0x70 || !(log->afi &0x7 )) { + cur_fw_slot = log->afi &0x7 ; + next_fw_slot = (log->afi &0x70 ) >>4 ; +if (!cur_fw_slot || (next_fw_slot && (cur_fw_slot != next_fw_slot))) {dev_info (ctrl->device,"Firmware is activated after next Controller Level Reset\n" ); goto out_free_log; } -memcpy (ctrl->subsys->firmware_rev, &log->frs[(log->afi &0x7 ) -1 ], +memcpy (ctrl->subsys->firmware_rev, &log->frs[cur_fw_slot -1 ],sizeof (ctrl->subsys->firmware_rev)); out_free_log:
drivers/pci/bus.c +32 -17
70 lines not on this page · raw message
drivers/pci/controller/dwc/pcie-qcom.c +1 -1
@@ -972,7 +972,7 @@ static int qcom_pcie_enable_aspm(struct pci_dev *pdev, void *userdata)* Downstream devices need to be in D0 state before enabling PCI PM * substates. */ -pci_set_power_state (pdev,PCI_D0 ); +pci_set_power_state_locked (pdev,PCI_D0 );pci_enable_link_state_locked (pdev,PCIE_LINK_STATE_ALL );return 0 ;
drivers/pci/pci.c +52 -26
149 lines not on this page · raw message
drivers/pci/pci.h +2 -2
@@ -569,12 +569,12 @@ int pcie_retrain_link(struct pci_dev *pdev, bool use_lt);#ifdef CONFIG_PCIEASPM void pcie_aspm_init_link_state (struct pci_dev *pdev);void pcie_aspm_exit_link_state (struct pci_dev *pdev); -void pcie_aspm_pm_state_change (struct pci_dev *pdev); +void pcie_aspm_pm_state_change (struct pci_dev *pdev,bool locked);void pcie_aspm_powersave_config_link (struct pci_dev *pdev);#else static inline void pcie_aspm_init_link_state (struct pci_dev *pdev) { }static inline void pcie_aspm_exit_link_state (struct pci_dev *pdev) { } -static inline void pcie_aspm_pm_state_change (struct pci_dev *pdev) { } +static inline void pcie_aspm_pm_state_change (struct pci_dev *pdev,bool locked) { }static inline void pcie_aspm_powersave_config_link (struct pci_dev *pdev) { }#endif
drivers/pci/pcie/aspm.c +9 -4
@@ -1008,8 +1008,11 @@ void pcie_aspm_exit_link_state(struct pci_dev *pdev)up_read (&pci_bus_sem); } -/* @pdev: the root port or switch downstream port */ -void pcie_aspm_pm_state_change (struct pci_dev *pdev) +/* +* @pdev: the root port or switch downstream port +* @locked: whether pci_bus_sem is held +*/ +void pcie_aspm_pm_state_change (struct pci_dev *pdev,bool locked) {struct pcie_link_state *link = pdev->link_state;
@@ -1019,12 +1022,14 @@ void pcie_aspm_pm_state_change(struct pci_dev *pdev)* Devices changed PM state, we should recheck if latency * meets all functions' requirement */ -down_read (&pci_bus_sem); +if (!locked) +down_read (&pci_bus_sem);mutex_lock (&aspm_lock);pcie_update_aspm_capable (link->root);pcie_config_aspm_path (link);mutex_unlock (&aspm_lock); -up_read (&pci_bus_sem); +if (!locked) +up_read (&pci_bus_sem); }void pcie_aspm_powersave_config_link (struct pci_dev *pdev)
drivers/phy/qualcomm/phy-qcom-qmp-usb.c +28 -2
@@ -1276,6 +1276,14 @@ static const char * const qmp_phy_vreg_l[] = { "vdda-phy", "vdda-pll", }; +static const struct qmp_usb_offsets qmp_usb_offsets_ipq8074 = { + .serdes =0 , + .pcs =0x800 , + .pcs_misc =0x600 , + .tx =0x200 , + .rx =0x400 , +}; +static const struct qmp_usb_offsets qmp_usb_offsets_ipq9574 = { .serdes =0 , .pcs =0x800 ,
@@ -1317,10 +1325,28 @@ static const struct qmp_usb_offsets qmp_usb_offsets_v5 = { .rx = 0x1000, }; +static const struct qmp_phy_cfg ipq6018_usb3phy_cfg = { + .lanes =1 , + + .offsets = &qmp_usb_offsets_ipq8074, + + .serdes_tbl = ipq9574_usb3_serdes_tbl, + .serdes_tbl_num =ARRAY_SIZE (ipq9574_usb3_serdes_tbl), + .tx_tbl = msm8996_usb3_tx_tbl, + .tx_tbl_num =ARRAY_SIZE (msm8996_usb3_tx_tbl), + .rx_tbl = ipq8074_usb3_rx_tbl, + .rx_tbl_num =ARRAY_SIZE (ipq8074_usb3_rx_tbl), + .pcs_tbl = ipq8074_usb3_pcs_tbl, + .pcs_tbl_num =ARRAY_SIZE (ipq8074_usb3_pcs_tbl), + .vreg_list = qmp_phy_vreg_l, + .num_vregs =ARRAY_SIZE (qmp_phy_vreg_l), + .regs = qmp_v3_usb3phy_regs_layout, +}; +static const struct qmp_phy_cfg ipq8074_usb3phy_cfg = { .lanes =1 , - .offsets = &qmp_usb_offsets_v3, + .offsets = &qmp_usb_offsets_ipq8074, .serdes_tbl = ipq8074_usb3_serdes_tbl, .serdes_tbl_num =ARRAY_SIZE (ipq8074_usb3_serdes_tbl),
@@ -2225,7 +2251,7 @@ static int qmp_usb_probe(struct platform_device *pdev)static const struct of_device_id qmp_usb_of_match_table[] = { { .compatible ="qcom,ipq6018-qmp-usb3-phy" , - .data = &ipq8074_usb3phy_cfg, + .data = &ipq6018_usb3phy_cfg, }, { .compatible ="qcom,ipq8074-qmp-usb3-phy" , .data = &ipq8074_usb3phy_cfg,
drivers/phy/renesas/phy-rcar-gen3-usb2.c +0 -4
@@ -673,8 +673,6 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) channel->irq =platform_get_irq_optional (pdev,0 ); channel->dr_mode =rcar_gen3_get_dr_mode (dev->of_node);if (channel->dr_mode !=USB_DR_MODE_UNKNOWN ) { -int ret; - channel->is_otg_channel = true; channel->uses_otg_pins = !of_property_read_bool (dev->of_node,"renesas,no-otg-pins" );
@@ -738,8 +736,6 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) ret =PTR_ERR (provider); goto error; }else if (channel->is_otg_channel) { -int ret; - ret =device_create_file (dev, &dev_attr_role);if (ret <0 ) goto error;
drivers/phy/ti/phy-omap-usb2.c +2 -2
@@ -117,7 +117,7 @@ static int omap_usb_set_vbus(struct usb_otg *otg, bool enabled) {struct omap_usb *phy =phy_to_omapusb (otg->usb_phy); -if (!phy->comparator) +if (!phy->comparator || !phy->comparator->set_vbus)return -ENODEV ;return phy->comparator->set_vbus (phy->comparator, enabled);
@@ -127,7 +127,7 @@ static int omap_usb_start_srp(struct usb_otg *otg) {struct omap_usb *phy =phy_to_omapusb (otg->usb_phy); -if (!phy->comparator) +if (!phy->comparator || !phy->comparator->start_srp)return -ENODEV ;return phy->comparator->start_srp (phy->comparator);
drivers/scsi/scsi_error.c +2 -1
@@ -282,11 +282,12 @@ static void scsi_eh_inc_host_failed(struct rcu_head *head) {struct scsi_cmnd *scmd =container_of (head,typeof (*scmd), rcu);struct Scsi_Host *shost = scmd->device->host; +unsigned int busy =scsi_host_busy (shost);unsigned long flags;spin_lock_irqsave (shost->host_lock, flags); shost->host_failed++; -scsi_eh_wakeup (shost,scsi_host_busy (shost)); +scsi_eh_wakeup (shost, busy);spin_unlock_irqrestore (shost->host_lock, flags); }
drivers/scsi/scsi_lib.c +3 -1
@@ -278,9 +278,11 @@ static void scsi_dec_host_busy(struct Scsi_Host *shost, struct scsi_cmnd *cmd)rcu_read_lock ();__clear_bit (SCMD_STATE_INFLIGHT , &cmd->state);if (unlikely (scsi_host_in_recovery (shost))) { +unsigned int busy =scsi_host_busy (shost); +spin_lock_irqsave (shost->host_lock, flags);if (shost->host_failed || shost->host_eh_scheduled) -scsi_eh_wakeup (shost,scsi_host_busy (shost)); +scsi_eh_wakeup (shost, busy);spin_unlock_irqrestore (shost->host_lock, flags); }rcu_read_unlock ();
drivers/usb/dwc3/dwc3-pci.c +4 -0
@@ -51,6 +51,8 @@#define PCI_DEVICE_ID_INTEL_MTLP 0x7ec1#define PCI_DEVICE_ID_INTEL_MTLS 0x7f6f#define PCI_DEVICE_ID_INTEL_MTL 0x7e7e +#define PCI_DEVICE_ID_INTEL_ARLH 0x7ec1 +#define PCI_DEVICE_ID_INTEL_ARLH_PCH 0x777e#define PCI_DEVICE_ID_INTEL_TGL 0x9a15#define PCI_DEVICE_ID_AMD_MR 0x163a
@@ -421,6 +423,8 @@ static const struct pci_device_id dwc3_pci_id_table[] = { { PCI_DEVICE_DATA(INTEL, MTLP, &dwc3_pci_intel_swnode) }, { PCI_DEVICE_DATA(INTEL, MTL, &dwc3_pci_intel_swnode) }, { PCI_DEVICE_DATA(INTEL, MTLS, &dwc3_pci_intel_swnode) }, + { PCI_DEVICE_DATA(INTEL, ARLH, &dwc3_pci_intel_swnode) }, + { PCI_DEVICE_DATA(INTEL, ARLH_PCH, &dwc3_pci_intel_swnode) }, { PCI_DEVICE_DATA(INTEL, TGL, &dwc3_pci_intel_swnode) }, { PCI_DEVICE_DATA(AMD, NL_USB, &dwc3_pci_amd_swnode) },
drivers/usb/dwc3/host.c +3 -1
@@ -61,7 +61,7 @@ static int dwc3_host_get_irq(struct dwc3 *dwc)int dwc3_host_init (struct dwc3 *dwc) { -struct property_entry props[4 ]; +struct property_entry props[5 ];struct platform_device *xhci;int ret, irq;int prop_idx =0 ;
@@ -89,6 +89,8 @@ int dwc3_host_init(struct dwc3 *dwc)memset (props,0 ,sizeof (struct property_entry ) *ARRAY_SIZE (props)); + props[prop_idx++] =PROPERTY_ENTRY_BOOL ("xhci-sg-trb-cache-size-quirk" ); +if (dwc->usb3_lpm_capable) props[prop_idx++] =PROPERTY_ENTRY_BOOL ("usb3-lpm-capable" );
drivers/usb/host/xhci-plat.c +3 -0
@@ -250,6 +250,9 @@ int xhci_plat_probe(struct platform_device *pdev, struct device *sysdev, const sif (device_property_read_bool (tmpdev,"quirk-broken-port-ped" )) xhci->quirks |=XHCI_BROKEN_PORT_PED ; +if (device_property_read_bool (tmpdev,"xhci-sg-trb-cache-size-quirk" )) + xhci->quirks |=XHCI_SG_TRB_CACHE_SIZE_QUIRK ; +device_property_read_u32 (tmpdev,"imod-interval-ns" , &xhci->imod_interval); }
drivers/usb/host/xhci-ring.c +65 -15
126 lines not on this page · raw message
drivers/usb/host/xhci.h +1 -0
@@ -1547,6 +1547,7 @@ struct xhci_td {struct xhci_segment *bounce_seg;/* actual_length of the URB has already been set */ bool urb_length_set; +bool error_mid_td;unsigned int num_trbs; };
drivers/usb/serial/cp210x.c +1 -0
@@ -146,6 +146,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */ { USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */ { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */ + { USB_DEVICE(0x10C4, 0x87ED) }, /* IMST USB-Stick for Smart Meter */ { USB_DEVICE(0x10C4, 0x8856) }, /* CEL EM357 ZigBee USB Stick - LR */ { USB_DEVICE(0x10C4, 0x8857) }, /* CEL EM357 ZigBee USB Stick */ { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */
drivers/usb/serial/option.c +1 -0
@@ -2269,6 +2269,7 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0111, 0xff) }, /* Fibocom FM160 (MBIM mode) */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a2, 0xff) }, /* Fibocom FM101-GL (laptop MBIM) */ + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a3, 0xff) }, /* Fibocom FM101-GL (laptop MBIM) */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a4, 0xff), /* Fibocom FM101-GL (laptop MBIM) */ .driver_info = RSVD(4) }, { USB_DEVICE_INTERFACE_CLASS(0x2df3, 0x9d03, 0xff) }, /* LongSung M5710 */
drivers/usb/serial/qcserial.c +2 -0
@@ -184,6 +184,8 @@ static const struct usb_device_id id_table[] = { {DEVICE_SWI(0x413c, 0x81d0)}, /* Dell Wireless 5819 */ {DEVICE_SWI(0x413c, 0x81d1)}, /* Dell Wireless 5818 */ {DEVICE_SWI(0x413c, 0x81d2)}, /* Dell Wireless 5818 */ + {DEVICE_SWI(0x413c, 0x8217)}, /* Dell Wireless DW5826e */ + {DEVICE_SWI(0x413c, 0x8218)}, /* Dell Wireless DW5826e QDL *//* Huawei devices */ {DEVICE_HWI(0x03f0, 0x581d)}, /* HP lt4112 LTE/HSPA+ Gobi 4G Modem (Huawei me906e) */
drivers/usb/typec/tcpm/tcpm.c +1 -2
@@ -4862,8 +4862,7 @@ static void run_state_machine(struct tcpm_port *port)break ;case PORT_RESET :tcpm_reset_port (port); -tcpm_set_cc (port,tcpm_default_state (port) ==SNK_UNATTACHED ? -TYPEC_CC_RD :tcpm_rp_cc (port)); +tcpm_set_cc (port,TYPEC_CC_OPEN );tcpm_set_state (port,PORT_RESET_WAIT_OFF ,PD_T_ERROR_RECOVERY );break ;
fs/bcachefs/clock.c +2 -2
@@ -109,7 +109,7 @@ void bch2_kthread_io_clock_wait(struct io_clock *clock,if (cpu_timeout !=MAX_SCHEDULE_TIMEOUT )mod_timer (&wait.cpu_timer, cpu_timeout + jiffies); -while (1 ) { + do { set_current_state(TASK_INTERRUPTIBLE); if (kthread && kthread_should_stop()) break;
@@ -119,7 +119,7 @@ void bch2_kthread_io_clock_wait(struct io_clock *clock,schedule ();try_to_freeze (); - } + }while (0 );__set_current_state (TASK_RUNNING );del_timer_sync (&wait.cpu_timer);
fs/bcachefs/fs-io.c +1 -1
@@ -79,7 +79,7 @@ void bch2_inode_flush_nocow_writes_async(struct bch_fs *c,continue ; bio =container_of (bio_alloc_bioset (ca->disk_sb.bdev,0 , -REQ_OP_FLUSH , +REQ_OP_WRITE |REQ_PREFLUSH ,GFP_KERNEL , &c->nocow_flush_bioset), struct nocow_flush, bio);
fs/bcachefs/fs-ioctl.c +22 -20
74 lines not on this page · raw message
fs/bcachefs/journal_io.c +2 -1
@@ -1948,7 +1948,8 @@ CLOSURE_CALLBACK(bch2_journal_write)percpu_ref_get (&ca->io_ref); bio = ca->journal.bio; -bio_reset (bio, ca->disk_sb.bdev,REQ_OP_FLUSH ); +bio_reset (bio, ca->disk_sb.bdev, +REQ_OP_WRITE |REQ_PREFLUSH ); bio->bi_end_io = journal_write_endio; bio->bi_private = ca;closure_bio_submit (bio, cl);
fs/bcachefs/move.c +1 -1
@@ -152,7 +152,7 @@ void bch2_move_ctxt_wait_for_io(struct moving_context *ctxt) atomic_read(&ctxt->write_sectors) != sectors_pending); } -static void bch2_moving_ctxt_flush_all (struct moving_context *ctxt) +void bch2_moving_ctxt_flush_all (struct moving_context *ctxt) {move_ctxt_wait_event (ctxt,list_empty (&ctxt->reads));bch2_trans_unlock_long (ctxt->trans);
fs/bcachefs/move.h +1 -0
@@ -81,6 +81,7 @@ void bch2_moving_ctxt_init(struct moving_context *, struct bch_fs *, struct write_point_specifier, bool);struct moving_io *bch2_moving_ctxt_next_pending_write (struct moving_context *);void bch2_moving_ctxt_do_pending_writes (struct moving_context *); +void bch2_moving_ctxt_flush_all (struct moving_context *);void bch2_move_ctxt_wait_for_io (struct moving_context *);int bch2_move_ratelimit (struct moving_context *);
fs/bcachefs/rebalance.c +11 -2
@@ -317,8 +317,16 @@ static int do_rebalance(struct moving_context *ctxt) BTREE_ID_rebalance_work,POS_MIN , BTREE_ITER_ALL_SNAPSHOTS); -while (!bch2_move_ratelimit (ctxt) && - !kthread_wait_freezable (r->enabled)) { +while (!bch2_move_ratelimit (ctxt)) { +if (!r->enabled) { +bch2_moving_ctxt_flush_all (ctxt); +kthread_wait_freezable (r->enabled || +kthread_should_stop ()); + } + +if (kthread_should_stop ()) +break ; +bch2_trans_begin (trans); ret =bkey_err (k =next_rebalance_entry (trans, &rebalance_work_iter));
@@ -348,6 +356,7 @@ static int do_rebalance(struct moving_context *ctxt) !kthread_should_stop() && !atomic64_read(&r->work_stats.sectors_seen) && !atomic64_read(&r->scan_stats.sectors_seen)) { +bch2_moving_ctxt_flush_all (ctxt);bch2_trans_unlock_long (trans);rebalance_wait (c); }
fs/bcachefs/replicas.c +8 -2
@@ -9,6 +9,12 @@static int bch2_cpu_replicas_to_sb_replicas (struct bch_fs *,struct bch_replicas_cpu *); +/* Some (buggy!) compilers don't allow memcmp to be passed as a pointer */ +static int bch2_memcmp (const void *l,const void *r,size_t size) +{ +return memcmp (l, r, size); +} +/* Replicas tracking - in memory: */ static void verify_replicas_entry (struct bch_replicas_entry *e)
@@ -33,7 +39,7 @@ void bch2_replicas_entry_sort(struct bch_replicas_entry *e)static void bch2_cpu_replicas_sort (struct bch_replicas_cpu *r) { -eytzinger0_sort (r->entries, r->nr, r->entry_size, memcmp,NULL ); +eytzinger0_sort (r->entries, r->nr, r->entry_size, bch2_memcmp,NULL ); } static void bch2_replicas_entry_v0_to_text(struct printbuf *out,
@@ -833,7 +839,7 @@ static int bch2_cpu_replicas_validate(struct bch_replicas_cpu *cpu_r,sort_cmp_size (cpu_r->entries, cpu_r->nr, cpu_r->entry_size, - memcmp,NULL ); + bch2_memcmp,NULL );for (i =0 ; i < cpu_r->nr; i++) { struct bch_replicas_entry *e =
fs/bcachefs/snapshot.c +1 -1
@@ -1709,5 +1709,5 @@ int bch2_snapshots_read(struct bch_fs *c)void bch2_fs_snapshots_exit (struct bch_fs *c) { -kfree (rcu_dereference_protected (c->snapshots, true)); +kvfree (rcu_dereference_protected (c->snapshots, true)); }
fs/bcachefs/util.c +3 -2
@@ -362,14 +362,15 @@ static inline void bch2_time_stats_update_one(struct bch2_time_stats *stats,bch2_quantiles_update (&stats->quantiles, duration); } -if (time_after64 (end, stats->last_event)) { +if (stats->last_event &&time_after64 (end, stats->last_event)) { freq = end - stats->last_event;mean_and_variance_update (&stats->freq_stats, freq);mean_and_variance_weighted_update (&stats->freq_stats_weighted, freq); stats->max_freq =max (stats->max_freq, freq); stats->min_freq =min (stats->min_freq, freq); - stats->last_event = end; } + + stats->last_event = end; } static noinline void bch2_time_stats_clear_buffer(struct bch2_time_stats *stats,
fs/ceph/inode.c +2 -0
@@ -78,6 +78,8 @@ struct inode *ceph_new_inode(struct inode *dir, struct dentry *dentry,if (!inode)return ERR_PTR (-ENOMEM ); + inode->i_blkbits =CEPH_FSCRYPT_BLOCK_SHIFT ; +if (!S_ISLNK (*mode)) { err =ceph_pre_init_acls (dir, mode, as_ctx);if (err <0 )
fs/ext4/mballoc.c +20 -0
@@ -1233,6 +1233,24 @@ void ext4_mb_generate_buddy(struct super_block *sb,atomic64_add (period, &sbi->s_mb_generation_time); } +static void mb_regenerate_buddy (struct ext4_buddy *e4b) +{ +int count; +int order =1 ; +void *buddy; + +while ((buddy =mb_find_buddy (e4b, order++, &count))) +mb_set_bits (buddy,0 , count); + + e4b->bd_info->bb_fragments =0 ; +memset (e4b->bd_info->bb_counters,0 , +sizeof (*e4b->bd_info->bb_counters) * + (e4b->bd_sb->s_blocksize_bits +2 )); + +ext4_mb_generate_buddy (e4b->bd_sb, e4b->bd_buddy, + e4b->bd_bitmap, e4b->bd_group, e4b->bd_info); +} +/* The buddy information is attached the buddy cache inode * for convenience. The information regarding each group * is loaded via ext4_mb_load_buddy. The information involve
@@ -1921,6 +1939,8 @@ static void mb_free_blocks(struct inode *inode, struct ext4_buddy *e4b,ext4_mark_group_bitmap_corrupted ( sb, e4b->bd_group,EXT4_GROUP_INFO_BBITMAP_CORRUPT ); + }else { +mb_regenerate_buddy (e4b); } goto done; }
fs/namei.c +13 -3
@@ -2573,13 +2573,13 @@ static int filename_parentat(int dfd, struct filename *name, }/* does lookup, returns the object with parent locked */ -static struct dentry *__kern_path_locked (struct filename *name,struct path *path) +static struct dentry *__kern_path_locked (int dfd,struct filename *name,struct path *path) {struct dentry *d;struct qstr last;int type, error; - error =filename_parentat (AT_FDCWD , name,0 , path, &last, &type); + error =filename_parentat (dfd, name,0 , path, &last, &type);if (error)return ERR_PTR (error);if (unlikely (type !=LAST_NORM )) {
@@ -2598,12 +2598,22 @@ static struct dentry *__kern_path_locked(struct filename *name, struct path *patstruct dentry *kern_path_locked (const char *name,struct path *path) {struct filename *filename =getname_kernel (name); -struct dentry *res =__kern_path_locked (filename, path); +struct dentry *res =__kern_path_locked (AT_FDCWD , filename, path);putname (filename);return res; } +struct dentry *user_path_locked_at (int dfd,const char __user *name,struct path *path) +{ +struct filename *filename =getname (name); +struct dentry *res =__kern_path_locked (dfd, filename, path); + +putname (filename); +return res; +} +EXPORT_SYMBOL (user_path_locked_at); +int kern_path (const char *name,unsigned int flags,struct path *path) {struct filename *filename =getname_kernel (name);
fs/ntfs3/ntfs_fs.h +1 -1
@@ -473,7 +473,7 @@ bool al_delete_le(struct ntfs_inode *ni, enum ATTR_TYPE type, CLST vcn,int al_update (struct ntfs_inode *ni,int sync);static inline size_t al_aligned (size_t size) { -return (size +1023 ) & ~(size_t )1023 ; +return size_add (size,1023 ) & ~(size_t )1023 ; }/* Globals from bitfunc.c */
fs/smb/client/sess.c +2 -0
@@ -269,6 +269,8 @@ int cifs_try_adding_channels(struct cifs_ses *ses) &iface->sockaddr, rc);kref_put (&iface->refcount, release_iface); +/* failure to add chan should increase weight */ + iface->weight_fulfilled++;continue ; }
fs/smb/client/smb2pdu.c +1 -1
@@ -410,7 +410,7 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon, rc =SMB3_request_interfaces (xid, tcon, false);free_xid (xid); -if (rc == -EOPNOTSUPP ) { +if (rc == -EOPNOTSUPP && ses->chan_count >1 ) {/* * some servers like Azure SMB server do not advertise * that multichannel has been disabled with server
include/asm-generic/cacheflush.h +6 -0
@@ -91,6 +91,12 @@ static inline void flush_cache_vmap(unsigned long start, unsigned long end) }#endif +#ifndef flush_cache_vmap_early +static inline void flush_cache_vmap_early (unsigned long start,unsigned long end) +{ +} +#endif +#ifndef flush_cache_vunmapstatic inline void flush_cache_vunmap (unsigned long start,unsigned long end) {
include/linux/ceph/messenger.h +1 -1
@@ -283,7 +283,7 @@ struct ceph_msg {struct kref kref;bool more_to_follow;bool needs_out_seq; -bool sparse_read; +u64 sparse_read_total;int front_alloc_len;struct ceph_msgpool *pool;
include/linux/dmaengine.h +2 -1
@@ -953,7 +953,8 @@ static inline int dmaengine_slave_config(struct dma_chan *chan,static inline bool is_slave_direction (enum dma_transfer_direction direction) { -return (direction ==DMA_MEM_TO_DEV ) || (direction ==DMA_DEV_TO_MEM ); +return (direction ==DMA_MEM_TO_DEV ) || (direction ==DMA_DEV_TO_MEM ) || + (direction ==DMA_DEV_TO_DEV ); } static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_single(
include/linux/hrtimer.h +3 -1
@@ -197,6 +197,7 @@ enum hrtimer_base_type {* @max_hang_time: Maximum time spent in hrtimer_interrupt * @softirq_expiry_lock: Lock which is taken while softirq based hrtimer are * expired +* @online: CPU is online from an hrtimers point of view * @timer_waiters: A hrtimer_cancel() invocation waits for the timer * callback to finish. * @expires_next: absolute time of the next event, is required for remote
@@ -219,7 +220,8 @@ struct hrtimer_cpu_base { unsigned int hres_active : 1, in_hrtirq : 1, hang_detected : 1, - softirq_activated : 1; + softirq_activated : 1, + online : 1;#ifdef CONFIG_HIGH_RES_TIMERS unsigned int nr_events;unsigned short nr_retries;
include/linux/namei.h +1 -0
@@ -66,6 +66,7 @@ extern struct dentry *kern_path_create(int, const char *, struct path *, unsigneextern struct dentry *user_path_create (int ,const char __user *,struct path *,unsigned int );extern void done_path_create (struct path *,struct dentry *);extern struct dentry *kern_path_locked (const char *,struct path *); +extern struct dentry *user_path_locked_at (int ,const char __user *,struct path *);int vfs_path_parent_lookup (struct filename *filename,unsigned int flags,struct path *parent,struct qstr *last,int *type,const struct path *root);
include/linux/pci.h +5 -0
@@ -1417,6 +1417,7 @@ int pci_load_and_free_saved_state(struct pci_dev *dev, struct pci_saved_state **state);int pci_platform_power_transition (struct pci_dev *dev,pci_power_t state);int pci_set_power_state (struct pci_dev *dev,pci_power_t state); +int pci_set_power_state_locked (struct pci_dev *dev,pci_power_t state);pci_power_t pci_choose_state (struct pci_dev *dev,pm_message_t state);bool pci_pme_capable (struct pci_dev *dev,pci_power_t state);void pci_pme_active (struct pci_dev *dev,bool enable);
@@ -1620,6 +1621,8 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,void pci_walk_bus (struct pci_bus *top,int (*cb)(struct pci_dev *,void *),void *userdata); +void pci_walk_bus_locked (struct pci_bus *top,int (*cb)(struct pci_dev *,void *), +void *userdata);int pci_cfg_space_size (struct pci_dev *dev);unsigned char pci_bus_max_busnr (struct pci_bus *bus);void pci_setup_bridge (struct pci_bus *bus);
@@ -2019,6 +2022,8 @@ static inline int pci_save_state(struct pci_dev *dev) { return 0; }static inline void pci_restore_state (struct pci_dev *dev) { }static inline int pci_set_power_state (struct pci_dev *dev,pci_power_t state) {return 0 ; } +static inline int pci_set_power_state_locked (struct pci_dev *dev,pci_power_t state) +{return 0 ; }static inline int pci_wake_from_d3 (struct pci_dev *dev,bool enable) {return 0 ; } static inline pci_power_t pci_choose_state(struct pci_dev *dev,
include/net/cfg80211.h +4 -0
@@ -2865,6 +2865,8 @@ struct cfg80211_bss_ies {* own the beacon_ies, but they're just pointers to the ones from the * @hidden_beacon_bss struct) * @proberesp_ies: the information elements from the last Probe Response frame +* @proberesp_ecsa_stuck: ECSA element is stuck in the Probe Response frame, +* cannot rely on it having valid data * @hidden_beacon_bss: in case this BSS struct represents a probe response from * a BSS that hides the SSID in its beacon, this points to the BSS struct * that holds the beacon data. @beacon_ies is still valid, of course, and
@@ -2900,6 +2902,8 @@ struct cfg80211_bss {u8 chains;s8 chain_signal[IEEE80211_MAX_CHAINS ]; + u8 proberesp_ecsa_stuck:1; +u8 bssid_index;u8 max_bssid_indicator;
include/net/netfilter/nf_tables.h +14 -2
@@ -798,10 +798,16 @@ static inline struct nft_set_elem_expr *nft_set_ext_expr(const struct nft_set_exreturn nft_set_ext (ext,NFT_SET_EXT_EXPRESSIONS ); } -static inline bool nft_set_elem_expired (const struct nft_set_ext *ext) +static inline bool __nft_set_elem_expired (const struct nft_set_ext *ext, +u64 tstamp) {return nft_set_ext_exists (ext,NFT_SET_EXT_EXPIRATION ) && -time_is_before_eq_jiffies64 (*nft_set_ext_expiration (ext)); +time_after_eq64 (tstamp, *nft_set_ext_expiration (ext)); +} + +static inline bool nft_set_elem_expired (const struct nft_set_ext *ext) +{ +return __nft_set_elem_expired (ext,get_jiffies_64 ()); } static inline struct nft_set_ext *nft_set_elem_ext(const struct nft_set *set,
@@ -1750,6 +1756,7 @@ struct nftables_pernet {struct list_head notify_list;struct mutex commit_mutex;u64 table_handle; +u64 tstamp;unsigned int base_seq;unsigned int gc_seq;u8 validate_state;
@@ -1762,6 +1769,11 @@ static inline struct nftables_pernet *nft_pernet(const struct net *net)return net_generic (net, nf_tables_net_id); } +static inline u64 nft_net_tstamp (const struct net *net) +{ +return nft_pernet (net)->tstamp; +} +#define __NFT_REDUCE_READONLY 1UL#define NFT_REDUCE_READONLY (void *)__NFT_REDUCE_READONLY
include/trace/events/rxrpc.h +5 -3
@@ -128,6 +128,7 @@ EM(rxrpc_skb_eaten_by_unshare_nomem, "ETN unshar-nm") \ EM(rxrpc_skb_get_conn_secured, "GET conn-secd") \ EM(rxrpc_skb_get_conn_work, "GET conn-work") \ + EM(rxrpc_skb_get_last_nack, "GET last-nack") \ EM(rxrpc_skb_get_local_work, "GET locl-work") \ EM(rxrpc_skb_get_reject_work, "GET rej-work ") \EM (rxrpc_skb_get_to_recvmsg,"GET to-recv " ) \
@@ -141,6 +142,7 @@ EM(rxrpc_skb_put_error_report, "PUT error-rep") \ EM(rxrpc_skb_put_input, "PUT input ") \ EM(rxrpc_skb_put_jumbo_subpacket, "PUT jumbo-sub") \ + EM(rxrpc_skb_put_last_nack, "PUT last-nack") \ EM(rxrpc_skb_put_purge, "PUT purge ") \ EM(rxrpc_skb_put_rotate, "PUT rotate ") \EM (rxrpc_skb_put_unknown,"PUT unknown " ) \
@@ -1552,7 +1554,7 @@ TRACE_EVENT(rxrpc_congest,memcpy (&__entry->sum, summary,sizeof (__entry->sum)); ), - TP_printk("c=%08x r=%08x %s q=%08x %s cw=%u ss=%u nA=%u,%u+%u r=%u b=%u u=%u d=%u l=%x%s%s%s", + TP_printk("c=%08x r=%08x %s q=%08x %s cw=%u ss=%u nA=%u,%u+%u,%u b=%u u=%u d=%u l=%x%s%s%s", __entry->call, __entry->ack_serial, __print_symbolic(__entry->sum.ack_reason, rxrpc_ack_names),
@@ -1560,9 +1562,9 @@ TRACE_EVENT(rxrpc_congest,__print_symbolic (__entry->sum.mode, rxrpc_congest_modes), __entry->sum.cwnd, __entry->sum.ssthresh, - __entry->sum.nr_acks, __entry->sum.saw_nacks, + __entry->sum.nr_acks, __entry->sum.nr_retained_nacks, __entry->sum.nr_new_acks, - __entry->sum.nr_rot_new_acks, + __entry->sum.nr_new_nacks, __entry->top - __entry->hard_ack, __entry->sum.cumulative_acks, __entry->sum.dup_acks,
include/uapi/linux/netfilter/nf_tables.h +2 -0
@@ -285,9 +285,11 @@ enum nft_rule_attributes {/** * enum nft_rule_compat_flags - nf_tables rule compat flags * +* @NFT_RULE_COMPAT_F_UNUSED: unused * @NFT_RULE_COMPAT_F_INV: invert the check result */ enum nft_rule_compat_flags { +NFT_RULE_COMPAT_F_UNUSED = (1 <<0 ),NFT_RULE_COMPAT_F_INV = (1 <<1 ),NFT_RULE_COMPAT_F_MASK =NFT_RULE_COMPAT_F_INV , };
io_uring/io_uring.h +7 -0
@@ -30,6 +30,13 @@ enum {IOU_OK =0 ,IOU_ISSUE_SKIP_COMPLETE = -EIOCBQUEUED , +/* +* Requeue the task_work to restart operations on this request. The +* actual value isn't important, should just be not an otherwise +* valid error code, yet less than -MAX_ERRNO and valid internally. +*/ +IOU_REQUEUE =-3072 , +/* * Intended only when both IO_URING_F_MULTISHOT is passed * to indicate to the poll runner that multishot should be
io_uring/net.c +36 -14
83 lines not on this page · raw message
io_uring/poll.c +28 -21
76 lines not on this page · raw message
io_uring/poll.h +9 -0
@@ -24,6 +24,15 @@ struct async_poll {struct io_poll *double_poll; }; +/* +* Must only be called inside issue_flags & IO_URING_F_MULTISHOT, or +* potentially other cases where we already "own" this poll request. +*/ +static inline void io_poll_multishot_retry (struct io_kiocb *req) +{ +atomic_inc (&req->poll_refs); +} +int io_poll_add_prep (struct io_kiocb *req,const struct io_uring_sqe *sqe);int io_poll_add (struct io_kiocb *req,unsigned int issue_flags);
io_uring/rw.c +9 -1
@@ -18,6 +18,7 @@#include "opdef.h" #include "kbuf.h" #include "rsrc.h" +#include "poll.h" #include "rw.h" struct io_rw {
@@ -956,8 +957,15 @@ int io_read_mshot(struct io_kiocb *req, unsigned int issue_flags)if (io_fill_cqe_req_aux (req, issue_flags &IO_URING_F_COMPLETE_DEFER , ret, cflags |IORING_CQE_F_MORE )) { -if (issue_flags &IO_URING_F_MULTISHOT ) +if (issue_flags &IO_URING_F_MULTISHOT ) { +/* +* Force retry, as we might have more data to +* be read and otherwise it won't get retried +* until (if ever) another poll is triggered. +*/ +io_poll_multishot_retry (req);return IOU_ISSUE_SKIP_COMPLETE ; + }return -EAGAIN ; } }
kernel/time/hrtimer.c +3 -0
@@ -1085,6 +1085,7 @@ static int enqueue_hrtimer(struct hrtimer *timer, enum hrtimer_mode mode) {debug_activate (timer, mode); +WARN_ON_ONCE (!base->cpu_base->online); base->cpu_base->active_bases |=1 << base->index;
@@ -2183,6 +2184,7 @@ int hrtimers_prepare_cpu(unsigned int cpu) cpu_base->softirq_next_timer =NULL ; cpu_base->expires_next =KTIME_MAX ; cpu_base->softirq_expires_next =KTIME_MAX ; + cpu_base->online =1 ;hrtimer_cpu_base_init_expiry_lock (cpu_base);return 0 ; }
@@ -2250,6 +2252,7 @@ int hrtimers_cpu_dying(unsigned int dying_cpu)smp_call_function_single (ncpu, retrigger_next_event,NULL ,0 );raw_spin_unlock (&new_base->lock); + old_base->online =0 ;raw_spin_unlock (&old_base->lock);return 0 ;
mm/percpu.c +1 -7
@@ -3333,13 +3333,7 @@ int __init pcpu_page_first_chunk(size_t reserved_size, pcpu_fc_cpu_to_node_fn_tif (rc <0 )panic ("failed to map percpu area, err=%d\n" , rc); -/* -* FIXME: Archs with virtual cache should flush local -* cache for the linear mapping here - something -* equivalent to flush_cache_vmap() on the local cpu. -* flush_cache_vmap() can't be used as most supporting -* data structures are not set up yet. -*/ +flush_cache_vmap_early (unit_addr, unit_addr + ai->unit_size);/* copy static data */ memcpy ((void *)unit_addr, __per_cpu_load, ai->static_size);
net/ceph/messenger_v1.c +17 -16
@@ -160,8 +160,9 @@ static size_t sizeof_footer(struct ceph_connection *con)static void prepare_message_data (struct ceph_msg *msg,u32 data_len) {/* Initialize data cursor if it's not a sparse read */ -if (!msg->sparse_read) -ceph_msg_data_cursor_init (&msg->cursor, msg, data_len); +u64 len = msg->sparse_read_total ? : data_len; + +ceph_msg_data_cursor_init (&msg->cursor, msg, len); }/*
@@ -991,7 +992,7 @@ static inline int read_partial_message_section(struct ceph_connection *con,return read_partial_message_chunk (con, section, sec_len, crc); } -static int read_sparse_msg_extent (struct ceph_connection *con,u32 *crc) +static int read_partial_sparse_msg_extent (struct ceph_connection *con,u32 *crc) {struct ceph_msg_data_cursor *cursor = &con->in_msg->cursor;bool do_bounce =ceph_test_opt (from_msgr (con->msgr),RXBOUNCE );
@@ -1026,7 +1027,7 @@ static int read_sparse_msg_extent(struct ceph_connection *con, u32 *crc)return 1 ; } -static int read_sparse_msg_data (struct ceph_connection *con) +static int read_partial_sparse_msg_data (struct ceph_connection *con) {struct ceph_msg_data_cursor *cursor = &con->in_msg->cursor;bool do_datacrc = !ceph_test_opt (from_msgr (con->msgr),NOCRC );
@@ -1036,31 +1037,31 @@ static int read_sparse_msg_data(struct ceph_connection *con)if (do_datacrc) crc = con->in_data_crc; -do { +while (cursor->total_resid) {if (con->v1.in_sr_kvec.iov_base) ret =read_partial_message_chunk (con, &con->v1.in_sr_kvec, con->v1.in_sr_len, &crc);else if (cursor->sr_resid >0 ) - ret =read_sparse_msg_extent (con, &crc); - -if (ret <=0 ) { -if (do_datacrc) - con->in_data_crc = crc; -return ret; - } + ret =read_partial_sparse_msg_extent (con, &crc); +if (ret <=0 ) +break ;memset (&con->v1.in_sr_kvec,0 ,sizeof (con->v1.in_sr_kvec)); ret = con->ops->sparse_read (con, cursor, (char **)&con->v1.in_sr_kvec.iov_base); +if (ret <=0 ) { + ret = ret ? ret :1 ;/* must return > 0 to indicate success */ +break ; + } con->v1.in_sr_len = ret; - }while (ret >0 ); + }if (do_datacrc) con->in_data_crc = crc; -return ret <0 ? ret :1 ;/* must return > 0 to indicate success */ +return ret; }static int read_partial_msg_data (struct ceph_connection *con)
@@ -1253,8 +1254,8 @@ static int read_partial_message(struct ceph_connection *con)if (!m->num_data_items)return -EIO ; -if (m->sparse_read) - ret =read_sparse_msg_data (con); +if (m->sparse_read_total) + ret =read_partial_sparse_msg_data (con);else if (ceph_test_opt (from_msgr (con->msgr),RXBOUNCE )) ret =read_partial_msg_data_bounce (con);else
net/ceph/messenger_v2.c +2 -2
@@ -1128,7 +1128,7 @@ static int decrypt_tail(struct ceph_connection *con)struct sg_table enc_sgt = {};struct sg_table sgt = {};struct page **pages =NULL ; -bool sparse = con->in_msg->sparse_read; +bool sparse = !!con->in_msg->sparse_read_total;int dpos =0 ;int tail_len;int ret;
@@ -2060,7 +2060,7 @@ static int prepare_read_tail_plain(struct ceph_connection *con) }if (data_len (msg)) { -if (msg->sparse_read) +if (msg->sparse_read_total) con->v2.in_state =IN_S_PREPARE_SPARSE_DATA ;else con->v2.in_state =IN_S_PREPARE_READ_DATA ;
net/ceph/osd_client.c +3 -6
@@ -5510,7 +5510,7 @@ static struct ceph_msg *get_reply(struct ceph_connection *con, } m =ceph_msg_get (req->r_reply); - m->sparse_read = (bool )srlen; + m->sparse_read_total = srlen;dout ("get_reply tid %lld %p\n" , tid, m);
@@ -5777,11 +5777,8 @@ static int prep_next_sparse_read(struct ceph_connection *con, }if (o->o_sparse_op_idx <0 ) { -u64 srlen =sparse_data_requested (req); - -dout ("%s: [%d] starting new sparse read req. srlen=0x%llx\n" , - __func__, o->o_osd, srlen); -ceph_msg_data_cursor_init (cursor, con->in_msg, srlen); +dout ("%s: [%d] starting new sparse read req\n" , + __func__, o->o_osd); }else {u64 end;
net/core/datagram.c +1 -1
@@ -751,7 +751,7 @@ size_t memcpy_to_iter_csum(void *iter_to, size_t progress, size_t len, void *from, void *priv2) { __wsum *csum = priv2; -__wsum next =csum_partial_copy_nocheck (from, iter_to, len); +__wsum next =csum_partial_copy_nocheck (from + progress, iter_to, len); *csum =csum_block_add (*csum, next, progress);return 0 ;
net/devlink/core.c +6 -6
@@ -46,7 +46,7 @@ struct devlink_rel {u32 obj_index;devlink_rel_notify_cb_t *notify_cb;devlink_rel_cleanup_cb_t *cleanup_cb; -struct work_struct notify_work; +struct delayed_work notify_work; } nested_in; };
@@ -70,7 +70,7 @@ static void __devlink_rel_put(struct devlink_rel *rel)static void devlink_rel_nested_in_notify_work (struct work_struct *work) { struct devlink_rel *rel = container_of(work, struct devlink_rel, - nested_in.notify_work); + nested_in.notify_work.work);struct devlink *devlink; devlink =devlinks_xa_get (rel->nested_in.devlink_index);
@@ -96,13 +96,13 @@ static void devlink_rel_nested_in_notify_work(struct work_struct *work)return ; reschedule_work: -schedule_work (&rel->nested_in.notify_work); +schedule_delayed_work (&rel->nested_in.notify_work,1 ); }static void devlink_rel_nested_in_notify_work_schedule (struct devlink_rel *rel) {__devlink_rel_get (rel); -schedule_work (&rel->nested_in.notify_work); +schedule_delayed_work (&rel->nested_in.notify_work,0 ); }static struct devlink_rel *devlink_rel_alloc (void )
@@ -123,8 +123,8 @@ static struct devlink_rel *devlink_rel_alloc(void) }refcount_set (&rel->refcount,1 ); -INIT_WORK (&rel->nested_in.notify_work, - &devlink_rel_nested_in_notify_work); +INIT_DELAYED_WORK (&rel->nested_in.notify_work, + &devlink_rel_nested_in_notify_work);return rel; }
net/ipv4/af_inet.c +4 -2
@@ -1628,10 +1628,12 @@ EXPORT_SYMBOL(inet_current_timestamp);int inet_recv_error (struct sock *sk,struct msghdr *msg,int len,int *addr_len) { -if (sk->sk_family ==AF_INET ) +unsigned int family =READ_ONCE (sk->sk_family); + +if (family ==AF_INET )return ip_recv_error (sk, msg, len, addr_len);
Lines of this file are not shown. View the raw message.
net/mac80211/mlme.c +77 -29
106 lines not on this page · raw message
net/netfilter/nft_set_pipapo.c +66 -62
128 lines not on this page · raw message
net/rxrpc/input.c +97 -18
115 lines not on this page · raw message
net/wireless/scan.c +61 -2
63 lines not on this page · raw message
tools/perf/tests/shell/script.sh new file +73 -0
73 lines not on this page · raw message
tools/testing/selftests/core/close_range_test.c +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/cmsg_ipv6.sh +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/pmtu.sh +27 -25
52 lines not on this page · raw message
tools/testing/selftests/net/udpgro_fwd.sh +12 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/udpgso_bench_rx.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/unicast_extensions.sh +47 -54
101 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.