Linux 6.1.116
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.116 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.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/alpha/include/asm/pgtable.h | 2 arch/arc/include/asm/pgtable-bits-arcv2.h | 2 arch/arm/include/asm/pgtable-nommu.h | 2 arch/arm/include/asm/pgtable.h | 4 arch/arm64/include/asm/pgtable.h | 2 arch/arm64/mm/mmu.c | 47 - arch/arm64/mm/pageattr.c | 3 arch/csky/include/asm/pgtable.h | 3 arch/hexagon/include/asm/page.h | 7 arch/ia64/include/asm/pgtable.h | 16 arch/loongarch/include/asm/pgtable.h | 2 arch/loongarch/kernel/vdso.c | 28 arch/m68k/include/asm/pgtable_mm.h | 2 arch/m68k/include/asm/pgtable_no.h | 1 arch/microblaze/include/asm/pgtable.h | 3 arch/mips/include/asm/pgtable.h | 2 arch/nios2/include/asm/pgtable.h | 2 arch/openrisc/include/asm/pgtable.h | 2 arch/parisc/include/asm/pgtable.h | 15 arch/powerpc/include/asm/pgtable.h | 7 arch/riscv/include/asm/pgtable.h | 2 arch/riscv/kernel/asm-offsets.c | 2 arch/riscv/kernel/cpu-hotplug.c | 2 arch/riscv/kernel/efi-header.S | 2 arch/riscv/kernel/traps_misaligned.c | 2 arch/riscv/kernel/vdso/Makefile | 1 arch/s390/include/asm/io.h | 2 arch/s390/include/asm/pgtable.h | 2 arch/sh/include/asm/pgtable.h | 2 arch/sparc/include/asm/pgtable_32.h | 6 arch/sparc/mm/init_32.c | 3 arch/sparc/mm/init_64.c | 1 arch/um/include/asm/pgtable.h | 2 arch/x86/include/asm/nospec-branch.h | 11 arch/x86/include/asm/pgtable_32.h | 9 arch/x86/include/asm/pgtable_64.h | 1 arch/x86/mm/init_64.c | 41 - arch/xtensa/include/asm/pgtable.h | 2 block/blk-map.c | 4 drivers/acpi/cppc_acpi.c | 9 drivers/base/core.c | 13 drivers/base/module.c | 4 drivers/cpufreq/mediatek-cpufreq-hw.c | 14 drivers/cxl/acpi.c | 17 drivers/cxl/core/port.c | 26 drivers/cxl/cxl.h | 3 drivers/firmware/arm_sdei.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 10 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c | 3 drivers/iio/adc/ad7124.c | 2 drivers/iio/light/veml6030.c | 2 drivers/infiniband/hw/bnxt_re/qplib_fp.c | 4 drivers/infiniband/hw/bnxt_re/qplib_rcfw.c | 13 drivers/infiniband/hw/bnxt_re/qplib_rcfw.h | 2 drivers/infiniband/hw/cxgb4/provider.c | 1 drivers/infiniband/hw/mlx5/qp.c | 4 drivers/misc/sgi-gru/grukservices.c | 2 drivers/misc/sgi-gru/grumain.c | 4 drivers/misc/sgi-gru/grutlbpurge.c | 2 drivers/mtd/spi-nor/winbond.c | 7 drivers/net/ethernet/amd/mvme147.c | 7 drivers/net/ethernet/mellanox/mlxsw/spectrum_ipip.c | 119 ++- drivers/net/ethernet/mellanox/mlxsw/spectrum_ipip.h | 1 drivers/net/ethernet/mellanox/mlxsw/spectrum_ptp.c | 7 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 2 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 22 drivers/net/gtp.c | 22 drivers/net/macsec.c | 3 drivers/net/mctp/mctp-i2c.c | 3 drivers/net/netdevsim/fib.c | 4 drivers/net/wireless/ath/ath10k/wmi-tlv.c | 7 drivers/net/wireless/ath/ath10k/wmi.c | 2 drivers/net/wireless/ath/ath11k/dp_rx.c | 7 drivers/net/wireless/broadcom/brcm80211/Kconfig | 1 drivers/net/wireless/intel/iwlegacy/common.c | 15 drivers/net/wireless/intel/iwlegacy/common.h | 12 drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 22 drivers/net/wireless/intel/iwlwifi/mvm/scan.c | 3 drivers/nvme/target/auth.c | 1 drivers/scsi/scsi_transport_fc.c | 4 drivers/staging/iio/frequency/ad9832.c | 7 drivers/tty/vt/vt.c | 2 drivers/usb/gadget/udc/dummy_hcd.c | 57 + drivers/usb/host/xhci-pci.c | 6 drivers/usb/host/xhci-ring.c | 16 drivers/usb/phy/phy.c | 2 drivers/usb/typec/class.c | 1 fs/afs/dir.c | 25 fs/afs/dir_edit.c | 91 ++ fs/afs/internal.h | 2 fs/dax.c | 45 - fs/iomap/buffered-io.c | 31 fs/nfs/delegation.c | 5 fs/nilfs2/namei.c | 3 fs/nilfs2/page.c | 1 fs/ntfs3/frecord.c | 4 fs/ntfs3/inode.c | 10 fs/ntfs3/lznt.c | 3 fs/ntfs3/namei.c | 2 fs/ntfs3/ntfs_fs.h | 2 fs/ocfs2/file.c | 8 fs/proc/kcore.c | 94 +- include/acpi/cppc_acpi.h | 2 include/linux/compiler-gcc.h | 12 include/linux/cpufreq.h | 34 include/linux/fs.h | 36 + include/linux/iomap.h | 19 include/linux/migrate.h | 1 include/net/ip_tunnels.h | 2 include/trace/events/afs.h | 240 ------ io_uring/io_uring.c | 11 io_uring/rw.c | 52 - kernel/bpf/cgroup.c | 19 kernel/bpf/lpm_trie.c | 2 kernel/cgroup/cgroup.c | 4 mm/huge_memory.c | 4 mm/internal.h | 13 mm/kasan/kasan_test.c | 27 mm/migrate.c | 636 ++++++++++++------ mm/page_alloc.c | 93 +- mm/shmem.c | 2 net/bluetooth/hci_sync.c | 18 net/core/dev.c | 4 net/ipv6/netfilter/nf_reject_ipv6.c | 15 net/mac80211/Kconfig | 2 net/mac80211/agg-tx.c | 4 net/mac80211/cfg.c | 3 net/mac80211/key.c | 42 - net/netfilter/nft_payload.c | 3 net/netfilter/x_tables.c | 2 net/sched/sch_api.c | 2 net/wireless/core.c | 1 sound/pci/hda/patch_realtek.c | 22 sound/soc/codecs/cs42l51.c | 7 sound/usb/mixer_quirks.c | 3 tools/testing/selftests/vm/hmm-tests.c | 2 tools/usb/usbip/src/usbip_detach.c | 1 138 files changed, 1421 insertions(+), 995 deletions(-)
Alan Stern (1):
USB: gadget: dummy-hcd: Fix "task hung" problem
Alex Hung (1):
drm/amd/display: Skip on writeback when it's not applicable
Alexander Gordeev (1):
fs/proc/kcore.c: allow translation of physical memory addresses
Alexandre Ghiti (1):
riscv: vdso: Prevent the compiler from inserting calls to memset()
Amir Goldstein (3):
io_uring: rename kiocb_end_write() local helper
fs: create kiocb_{start,end}_write() helpers
io_uring: use kiocb_{start,end}_write() helpers
Amit Cohen (1):
mlxsw: spectrum_ptp: Add missing verification before pushing Tx header
Andrew Ballance (1):
fs/ntfs3: Check if more than chunk-size bytes are written
Andrey Konovalov (2):
usb: gadget: dummy_hcd: execute hrtimer callback in softirq context
kasan: remove vmalloc_percpu test
Baolin Wang (1):
mm: migrate: try again if THP split is failed due to page refcnt
Basavaraj Natikar (1):
xhci: Use pm_runtime_get to prevent RPM on unsupported systems
Ben Hutchings (1):
wifi: iwlegacy: Fix "field-spanning write" warning in il_enqueue_hcmd()
Benjamin Marzinski (1):
scsi: scsi_transport_fc: Allow setting rport state to current state
Benoît Monin (1):
net: skip offload for NETIF_F_IPV6_CSUM if ipv6 header contains extension
Byeonguk Jeong (1):
bpf: Fix out-of-bounds write in trie_get_next_key()
Chen Ridong (1):
cgroup/bpf: use a dedicated workqueue for cgroup bpf destruction
Christoffer Sandberg (1):
ALSA: hda/realtek: Fix headset mic on TUXEDO Stellaris 16 Gen6 mb1
Christoph Hellwig (2):
iomap: improve shared block detection in iomap_unshare_iter
iomap: turn iomap_want_unshare_iter into an inline function
Christophe JAILLET (1):
ASoC: cs42l51: Fix some error handling paths in cs42l51_probe()
Chunyan Zhang (2):
riscv: Remove unused GENERATING_ASM_OFFSETS
riscv: Remove duplicated GET_RM
Dai Ngo (1):
NFS: remove revoked delegation from server's delegation list
Dan Williams (2):
cxl/acpi: Move rescan to the workqueue cxl/port: Fix cxl_bus_rescan() vs bus_rescan_devices()
Daniel Gabay (1):
wifi: iwlwifi: mvm: Fix response handling in iwl_mvm_send_recovery_cmd()
Daniel Palmer (1):
net: amd: mvme147: Fix probe banner message
Darrick J. Wong (5):
iomap: convert iomap_unshare_iter to use large folios
iomap: don't bother unsharing delalloc extents
iomap: share iomap_unshare_iter predicate code with fsdax
fsdax: remove zeroing code from dax_unshare_iter
fsdax: dax_unshare_iter needs to copy entire blocks
David Howells (2):
afs: Automatically generate trace tag enums
afs: Fix missing subdir edit when renamed between parent dirs
Dimitri Sivanich (1):
misc: sgi-gru: Don't disable preemption in GRU driver
Donet Tom (1):
selftests/mm: fix incorrect buffer->mirror size in hmm2 double_map test
Dong Chenchen (1):
netfilter: Fix use-after-free in get_info()
Edward Adam Davis (1):
ocfs2: pass u64 to ocfs2_truncate_inline maybe overflow
Emmanuel Grumbach (1):
wifi: iwlwifi: mvm: disconnect station vifs if recovery failed
Eric Dumazet (1):
netfilter: nf_reject_ipv6: fix potential crash in nf_send_reset6()
Faisal Hassan (1):
xhci: Fix Link TRB DMA in command ring stopped completion event
Felix Fietkau (2):
wifi: mac80211: skip non-uploaded keys in ieee80211_iter_keys
wifi: mac80211: do not pass a stopped vif to the driver in .get_txpower
Furong Xu (1):
net: stmmac: TSO: Fix unbalanced DMA map/unmap for non-paged SKB data
Geert Uytterhoeven (2):
mac80211: MAC80211_MESSAGE_TRACING should depend on TRACING
wifi: brcm80211: BRCM_TRACING should depend on TRACING
Greg Kroah-Hartman (2):
Revert "driver core: Fix uevent_show() vs driver detach race" Linux 6.1.116
Gregory Price (1):
vmscan,migrate: fix page count imbalance on node stats when demoting pages
Hector Martin (1):
cpufreq: Generalize of_perf_domain_get_sharing_cpumask phandle format
Heinrich Schuchardt (1):
riscv: efi: Set NX compat flag in PE/COFF header
Huacai Chen (1):
LoongArch: Fix build errors due to backported TIMENS
Huang Ying (7):
migrate: convert unmap_and_move() to use folios
migrate: convert migrate_pages() to use folios
migrate_pages: organize stats with struct migrate_pages_stats
migrate_pages: separate hugetlb folios migration
migrate_pages: restrict number of pages to migrate in batch
migrate_pages: split unmap_and_move() to _unmap() and _move()
migrate_pages_batch: fix statistics for longterm pin retry
Ido Schimmel (4):
ipv4: ip_tunnel: Fix suspicious RCU usage warning in ip_tunnel_init_flow()
mlxsw: spectrum_router: Add support for double entry RIFs
mlxsw: spectrum_ipip: Rename Spectrum-2 ip6gre operations
mlxsw: spectrum_ipip: Fix memory leak when changing remote IPv6 address
Jan Schär (1):
ALSA: usb-audio: Add quirks for Dell WD19 dock
Javier Carrasco (2):
usb: typec: fix unreleased fwnode_handle in typec_port_register_altmodes()
iio: light: veml6030: fix microlux value calculation
Jens Axboe (1):
io_uring/rw: fix missing NOWAIT check for O_DIRECT start write
Jeongjun Park (2):
mm: shmem: fix data-race in shmem_getattr()
vt: prevent kernel-infoleak in con_font_get()
Jianbo Liu (1):
macsec: Fix use-after-free while sending the offloading packet
Johannes Berg (2):
wifi: cfg80211: clear wdev->cqm_config pointer on free
wifi: iwlwifi: mvm: fix 6 GHz scan construction
Kailang Yang (1):
ALSA: hda/realtek: Limit internal Mic boost on Dell platform
Kefeng Wang (1):
mm: remove kern_addr_valid() completely
Konstantin Komarov (4):
fs/ntfs3: Fix warning possible deadlock in ntfs_set_state fs/ntfs3: Stale inode instead of bad
fs/ntfs3: Fix possible deadlock in mi_read fs/ntfs3: Additional check in ni_clear()
Leon Romanovsky (1):
RDMA/cxgb4: Dump vendor specific QP details
Linus Torvalds (1):
mm: avoid gcc complaint about pointer casting
Lorenzo Stoakes (3):
fs/proc/kcore: avoid bounce buffer for ktext data fs/proc/kcore: convert read_kcore() to read_kcore_iter() fs/proc/kcore: reinstate bounce buffer for KCORE_TEXT regions
Manikanta Pubbisetty (1):
wifi: ath10k: Fix memory leak in management tx
Marcello Sylvester Bauer (2):
usb: gadget: dummy_hcd: Switch to hrtimer transfer scheduler
usb: gadget: dummy_hcd: Set transfer interval to 1 microframe
Marco Elver (1):
kasan: Fix Software Tag-Based KASAN with GCC
Matt Fleming (1):
mm/page_alloc: let GFP_ATOMIC order-0 allocs access highatomic reserves
Matt Johnston (1):
mctp i2c: handle NULL header address
Mel Gorman (5):
mm/page_alloc: rename ALLOC_HIGH to ALLOC_MIN_RESERVE
mm/page_alloc: treat RT tasks similar to __GFP_HIGH
mm/page_alloc: explicitly record high-order atomic allocations in alloc_flags mm/page_alloc: explicitly define what alloc flags deplete min reserves mm/page_alloc: explicitly define how __GFP_HIGH non-blocking allocations accesses reserves
Michael Walle (1):
mtd: spi-nor: winbond: fix w25q128 regression
Miguel Ojeda (2):
compiler-gcc: be consistent with underscores use for no_sanitize
compiler-gcc: remove attribute support check for __no_sanitize_address__
Miquel Sabaté Solà (1):
cpufreq: Avoid a bad reference count on CPU node
Pablo Neira Ayuso (2):
gtp: allow -1 to be specified as file description from userspace
netfilter: nft_payload: sanitize offset and length before calling skb_checksum()
Patrisious Haddad (1):
RDMA/mlx5: Round max_rd_atomic/max_dest_rd_atomic up instead of down
Pavel Begunkov (1):
io_uring: always lock __io_cqring_overflow_flush
Pawan Gupta (1):
x86/bugs: Use code segment selector for VERW operand
Pedro Tammela (1):
net/sched: stop qdisc_tree_reduce_backlog on TC_H_ROOT
Pierre Gondois (1):
ACPI: CPPC: Make rmw_lock a raw_spin_lock
Remi Pommarel (1):
wifi: ath11k: Fix invalid ring usage in full monitor mode
Ryusuke Konishi (2):
nilfs2: fix potential deadlock with newly created symlinks
nilfs2: fix kernel bug due to missing clearing of checked flag
Selvin Xavier (1):
RDMA/bnxt_re: synchronize the qp-handle table array
Srinivasan Shanmugam (1):
drm/amd/display: Add null checks for 'stream' and 'plane' before dereferencing
Sungwoo Kim (1):
Bluetooth: hci: fix null-ptr-deref in hci_read_supported_codecs
Ville Syrjälä (1):
wifi: iwlegacy: Clear stale interrupts before resuming device
Vitaliy Shevtsov (1):
nvmet-auth: assign dh_key to NULL after kfree_sensitive
WangYuli (1):
riscv: Use '%u' to format the output of 'cpu'
Xinyu Zhang (1):
block: fix sanity checks in blk_rq_map_user_bvec
Xiongfeng Wang (1):
firmware: arm_sdei: Fix the input parameter of cpuhp_remove_state()
Xiu Jianfeng (1):
cgroup: Fix potential overflow issue when checking max_depth
Yang Li (1):
mm/migrate.c: stop using 0 as NULL pointer
Zichen Xie (1):
netdevsim: Add trailing zero to terminate the string in nsim_nexthop_bucket_activity_write()
Zicheng Qu (2):
staging: iio: frequency: ad9832: fix division by zero in ad9832_calc_freqreg()
iio: adc: ad7124: fix division by zero in ad7124_set_channel_odr()
Zijun Hu (1):
usb: phy: Fix API devm_usb_put_phy() can not release the phy
Zong-Zhe Yang (1):
wifi: mac80211: fix NULL dereference at band check in starting tx ba session
Zongmin Zhou (1):
usbip: tools: Fix detach_port() invalid port error path
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 115 +SUBLEVEL = 116 EXTRAVERSION = NAME = Curry Ramen
arch/alpha/include/asm/pgtable.h +0 -2
@@ -313,8 +313,6 @@ extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -#define kern_addr_valid (addr) (1) -#define pte_ERROR (e) \ printk("%s:%d: bad pte %016lx.\n", __FILE__, __LINE__, pte_val(e))#define pmd_ERROR (e) \
arch/arc/include/asm/pgtable-bits-arcv2.h +0 -2
@@ -120,8 +120,6 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -#define kern_addr_valid (addr) (1) -#ifdef CONFIG_TRANSPARENT_HUGEPAGE #include <asm/hugepage.h> #endif
arch/arm/include/asm/pgtable-nommu.h +0 -2
@@ -21,8 +21,6 @@#define pgd_none (pgd) (0)#define pgd_bad (pgd) (0)#define pgd_clear (pgdp) -#define kern_addr_valid (addr) (1) -/* FIXME */ /* * PMD_SHIFT determines the size of the area a second-level page table can map * PGDIR_SHIFT determines what a third-level page table entry can map
arch/arm/include/asm/pgtable.h +0 -4
@@ -300,10 +300,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)*/ #define MAX_SWAPFILES_CHECK () BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > __SWP_TYPE_BITS) -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -/* FIXME: this is not correct */ -#define kern_addr_valid (addr) (1) -/* * We provide our own arch_get_unmapped_area to cope with VIPT caches. */
arch/arm64/include/asm/pgtable.h +0 -2
@@ -1027,8 +1027,6 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma,*/ #define MAX_SWAPFILES_CHECK () BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > __SWP_TYPE_BITS) -extern int kern_addr_valid (unsigned long addr); -#ifdef CONFIG_ARM64_MTE #define __HAVE_ARCH_PREPARE_TO_SWAP
arch/arm64/mm/mmu.c +0 -47
53 lines not on this page · raw message
arch/arm64/mm/pageattr.c +1 -2
@@ -204,8 +204,7 @@ void __kernel_map_pages(struct page *page, int numpages, int enable)/* * This function is used to determine if a linear map page has been marked as -* not-valid. Walk the page table and check the PTE_VALID bit. This is based -* on kern_addr_valid(), which almost does what we need. +* not-valid. Walk the page table and check the PTE_VALID bit. * * Because this is only called on the kernel linear map, p?d_sect() implies * p?d_present(). When debug_pagealloc is enabled, sections mappings are
arch/csky/include/asm/pgtable.h +0 -3
@@ -249,9 +249,6 @@ extern void paging_init(void);void update_mmu_cache (struct vm_area_struct *vma,unsigned long address,pte_t *pte); -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define kern_addr_valid (addr) (1) -#define io_remap_pfn_range (vma, vaddr, pfn, size, prot) \ remap_pfn_range(vma, vaddr, pfn, size, prot)
arch/hexagon/include/asm/page.h +0 -7
@@ -131,13 +131,6 @@ static inline void clear_page(void *page)#define page_to_virt (page) __va(page_to_phys(page)) -/* -* For port to Hexagon Virtual Machine, MAYBE we check for attempts -* to reference reserved HVM space, but in any case, the VM will be -* protected. -*/ -#define kern_addr_valid (addr) (1) -#include <asm/mem-layout.h> #include <asm-generic/memory_model.h> /* XXX Todo: implement assembly-optimized version of getorder. */
arch/ia64/include/asm/pgtable.h +0 -16
@@ -181,22 +181,6 @@ ia64_phys_addr_valid (unsigned long addr)return (addr & (local_cpu_data->unimpl_pa_mask)) ==0 ; } -/* -* kern_addr_valid(ADDR) tests if ADDR is pointing to valid kernel -* memory. For the return value to be meaningful, ADDR must be >= -* PAGE_OFFSET. This operation can be relatively expensive (e.g., -* require a hash-, or multi-level tree-lookup or something of that -* sort) but it guarantees to return TRUE only if accessing the page -* at that address does not cause an error. Note that there may be -* addresses for which kern_addr_valid() returns FALSE even though an -* access would not cause an error (e.g., this is typically true for -* memory mapped I/O regions. -* -* XXX Need to implement this for IA-64. -*/ -#define kern_addr_valid (addr) (1) - -/* * Now come the defines and routines to manage and access the three-level * page table.
arch/loongarch/include/asm/pgtable.h +0 -2
@@ -425,8 +425,6 @@ static inline void update_mmu_cache_pmd(struct vm_area_struct *vma,__update_tlb (vma, address, (pte_t *)pmdp); } -#define kern_addr_valid (addr) (1) -static inline unsigned long pmd_pfn (pmd_t pmd) {return (pmd_val (pmd) & _PFN_MASK) >> _PFN_SHIFT;
arch/loongarch/kernel/vdso.c +27 -1
@@ -40,6 +40,8 @@ static struct page *vdso_pages[] = { NULL };struct vdso_data *vdso_data = generic_vdso_data.data;struct vdso_pcpu_data *vdso_pdata = loongarch_vdso_data.vdata.pdata; +static struct page *find_timens_vvar_page (struct vm_area_struct *vma); +static int vdso_mremap (const struct vm_special_mapping *sm,struct vm_area_struct *new_vma) { current->mm->context.vdso = (void *)(new_vma->vm_start);
@@ -139,13 +141,37 @@ int vdso_join_timens(struct task_struct *task, struct time_namespace *ns)mmap_read_lock (mm);for_each_vma (vmi, vma) { +unsigned long size = vma->vm_end - vma->vm_start; +if (vma_is_special_mapping (vma, &vdso_info.data_mapping)) -zap_vma_pages (vma); +zap_page_range (vma, vma->vm_start, size); }mmap_read_unlock (mm); return 0; } + +static struct page *find_timens_vvar_page (struct vm_area_struct *vma) +{ +if (likely (vma->vm_mm == current->mm)) +return current->nsproxy->time_ns->vvar_page; + +/* +* VM_PFNMAP | VM_IO protect .fault() handler from being called +* through interfaces like /proc/$pid/mem or +* process_vm_{readv,writev}() as long as there's no .access() +* in special_mapping_vmops. +* For more details check_vma_flags() and __access_remote_vm() +*/ +WARN (1 ,"vvar_page accessed remotely" ); + +return NULL ; +} +#else +static struct page *find_timens_vvar_page (struct vm_area_struct *vma) +{ +return NULL ; +}#endif static unsigned long vdso_base (void )
arch/m68k/include/asm/pgtable_mm.h +0 -2
@@ -145,8 +145,6 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,#endif /* !__ASSEMBLY__ */ -#define kern_addr_valid (addr) (1) -/* MMU-specific headers */ #ifdef CONFIG_SUN3
arch/m68k/include/asm/pgtable_no.h +0 -1
@@ -20,7 +20,6 @@#define pgd_none (pgd) (0)#define pgd_bad (pgd) (0)#define pgd_clear (pgdp) -#define kern_addr_valid (addr) (1)#define pmd_offset (a, b) ((void *)0)#define PAGE_NONE __pgprot(0)
arch/microblaze/include/asm/pgtable.h +0 -3
@@ -416,9 +416,6 @@ extern unsigned long iopa(unsigned long addr);#define IOMAP_NOCACHE_NONSER 2#define IOMAP_NO_COPYBACK 3 -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define kern_addr_valid (addr) (1) -void do_page_fault (struct pt_regs *regs,unsigned long address,unsigned long error_code);
arch/mips/include/asm/pgtable.h +0 -2
@@ -550,8 +550,6 @@ static inline void update_mmu_cache_pmd(struct vm_area_struct *vma,__update_tlb (vma, address, pte); } -#define kern_addr_valid (addr) (1) -/* * Allow physical addresses to be fixed up to help 36-bit peripherals. */
arch/nios2/include/asm/pgtable.h +0 -2
@@ -249,8 +249,6 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd)#define __swp_entry_to_pte (swp) ((pte_t) { (swp).val })#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) }) -#define kern_addr_valid (addr) (1) -extern void __init paging_init (void );extern void __init mmu_init (void );
arch/openrisc/include/asm/pgtable.h +0 -2
@@ -395,8 +395,6 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -#define kern_addr_valid (addr) (1) -typedef pte_t *pte_addr_t ;#endif /* __ASSEMBLY__ */
arch/parisc/include/asm/pgtable.h +0 -15
@@ -23,21 +23,6 @@#include <asm/processor.h> #include <asm/cache.h> -/* -* kern_addr_valid(ADDR) tests if ADDR is pointing to valid kernel -* memory. For the return value to be meaningful, ADDR must be >= -* PAGE_OFFSET. This operation can be relatively expensive (e.g., -* require a hash-, or multi-level tree-lookup or something of that -* sort) but it guarantees to return TRUE only if accessing the page -* at that address does not cause an error. Note that there may be -* addresses for which kern_addr_valid() returns FALSE even though an -* access would not cause an error (e.g., this is typically true for -* memory mapped I/O regions. -* -* XXX Need to implement this for parisc. -*/ -#define kern_addr_valid (addr) (1) -/* This is for the serialization of PxTLB broadcasts. At least on the N class * systems, only one PxTLB inter processor broadcast can be active at any one * time on the Merced bus. */
arch/powerpc/include/asm/pgtable.h +0 -7
@@ -81,13 +81,6 @@ void poking_init(void);extern unsigned long ioremap_bot;extern const pgprot_t protection_map[16 ]; -/* -* kern_addr_valid is intended to indicate whether an address is a valid -* kernel address. Most 32-bit archs define it as always true (like this) -* but most 64-bit archs actually perform a test. What should we do here? -*/ -#define kern_addr_valid (addr) (1) -#ifndef CONFIG_TRANSPARENT_HUGEPAGE #define pmd_large (pmd) 0#endif
arch/riscv/include/asm/pgtable.h +0 -2
@@ -805,8 +805,6 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma,#endif /* !CONFIG_MMU */ -#define kern_addr_valid (addr) (1)/* FIXME */ -extern char _start[];extern void *_dtb_early_va;extern uintptr_t _dtb_early_pa;
arch/riscv/kernel/asm-offsets.c +0 -2
@@ -4,8 +4,6 @@* Copyright (C) 2017 SiFive */ -#define GENERATING_ASM_OFFSETS -#include <linux/kbuild.h> #include <linux/mm.h> #include <linux/sched.h>
arch/riscv/kernel/cpu-hotplug.c +1 -1
@@ -65,7 +65,7 @@ void __cpu_die(unsigned int cpu)if (cpu_ops[cpu]->cpu_is_stopped) ret = cpu_ops[cpu]->cpu_is_stopped (cpu);if (ret) -pr_warn ("CPU%d may not have stopped: %d\n" , cpu, ret); +pr_warn ("CPU%u may not have stopped: %d\n" , cpu, ret); }/*
arch/riscv/kernel/efi-header.S +1 -1
@@ -59,7 +59,7 @@ extra_header_fields: .long efi_header_end - _start // SizeOfHeaders .long 0 // CheckSum .short IMAGE_SUBSYSTEM_EFI_APPLICATION // Subsystem - .short 0 // DllCharacteristics + .short IMAGE_DLL_CHARACTERISTICS_NX_COMPAT // DllCharacteristics .quad 0 // SizeOfStackReserve .quad 0 // SizeOfStackCommit .quad 0 // SizeOfHeapReserve
arch/riscv/kernel/traps_misaligned.c +0 -2
@@ -132,8 +132,6 @@#define REG_PTR (insn, pos, regs) \ (ulong *)((ulong)(regs) + REG_OFFSET(insn, pos)) -#define GET_RM (insn) (((insn) >> 12) & 7) -#define GET_RS1 (insn, regs) (*REG_PTR(insn, SH_RS1, regs))#define GET_RS2 (insn, regs) (*REG_PTR(insn, SH_RS2, regs))#define GET_RS1S (insn, regs) (*REG_PTR(RVC_RS1S(insn), 0, regs))
arch/riscv/kernel/vdso/Makefile +1 -0
@@ -18,6 +18,7 @@ obj-vdso = $(patsubst %, %.o, $(vdso-syms)) note.o ccflags-y := -fno-stack-protector ccflags-y += -DDISABLE_BRANCH_PROFILING +ccflags-y += -fno-builtin ifneq ($(c-gettimeofday-y),) CFLAGS_vgettimeofday.o += -fPIC -include $(c-gettimeofday-y)
arch/s390/include/asm/io.h +2 -0
@@ -16,8 +16,10 @@#include <asm/pci_io.h> #define xlate_dev_mem_ptr xlate_dev_mem_ptr +#define kc_xlate_dev_mem_ptr xlate_dev_mem_ptrvoid *xlate_dev_mem_ptr (phys_addr_t phys);#define unxlate_dev_mem_ptr unxlate_dev_mem_ptr +#define kc_unxlate_dev_mem_ptr unxlate_dev_mem_ptrvoid unxlate_dev_mem_ptr (phys_addr_t phys,void *addr);#define IO_SPACE_LIMIT 0
arch/s390/include/asm/pgtable.h +0 -2
@@ -1776,8 +1776,6 @@ static inline swp_entry_t __swp_entry(unsigned long type, unsigned long offset)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -#define kern_addr_valid (addr) (1) -extern int vmem_add_mapping (unsigned long start,unsigned long size);extern void vmem_remove_mapping (unsigned long start,unsigned long size);extern int __vmem_map_4k_page (unsigned long addr,unsigned long phys,pgprot_t prot,bool alloc);
arch/sh/include/asm/pgtable.h +0 -2
@@ -92,8 +92,6 @@ static inline unsigned long phys_addr_mask(void)typedef pte_t *pte_addr_t ; -#define kern_addr_valid (addr) (1) -#define pte_pfn (x) ((unsigned long)(((x).pte_low >> PAGE_SHIFT)))struct vm_area_struct ;
arch/sparc/include/asm/pgtable_32.h +0 -6
@@ -368,12 +368,6 @@ __get_iospace (unsigned long addr) } } -extern unsigned long *sparc_valid_addr_bitmap; - -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define kern_addr_valid (addr) \ - (test_bit(__pa((unsigned long)(addr))>>20, sparc_valid_addr_bitmap)) -/* * For sparc32&64, the pfn in io_remap_pfn_range() carries <iospace> in * its high 4 bits. These macros/functions put it there or get it from there.
arch/sparc/mm/init_32.c +1 -2
@@ -37,8 +37,7 @@#include "mm_32.h" -unsigned long *sparc_valid_addr_bitmap; -EXPORT_SYMBOL (sparc_valid_addr_bitmap); +static unsigned long *sparc_valid_addr_bitmap;unsigned long phys_base;EXPORT_SYMBOL (phys_base);
arch/sparc/mm/init_64.c +0 -1
@@ -1667,7 +1667,6 @@ bool kern_addr_valid(unsigned long addr)return pfn_valid (pte_pfn (*pte)); } -EXPORT_SYMBOL (kern_addr_valid); static unsigned long __ref kernel_map_hugepud(unsigned long vstart, unsigned long vend,
arch/um/include/asm/pgtable.h +0 -2
@@ -298,8 +298,6 @@ extern pte_t *virt_to_pte(struct mm_struct *mm, unsigned long addr); ((swp_entry_t) { pte_val(pte_mkuptodate(pte)) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -#define kern_addr_valid (addr) (1) -/* Clear a kernel PTE and flush it from the TLB */ #define kpte_clear_flush (ptep, vaddr) \ do { \
arch/x86/include/asm/nospec-branch.h +10 -1
@@ -211,7 +211,16 @@*/ .macro CLEAR_CPU_BUFFERS ALTERNATIVE "jmp .Lskip_verw_\@", "", X86_FEATURE_CLEAR_CPU_BUF - verw _ASM_RIP(mds_verw_sel) +#ifdef CONFIG_X86_64 + verw mds_verw_sel(%rip) +#else +/* +* In 32bit mode, the memory operand must be a %cs reference. The data +* segments may not be usable (vm86 mode), and the stack segment may not +* be flat (ESPFIX32). +*/ + verw %cs:mds_verw_sel +#endif .Lskip_verw_\@: .endm
arch/x86/include/asm/pgtable_32.h +0 -9
@@ -47,15 +47,6 @@ do { \#endif /* !__ASSEMBLY__ */ -/* -* kern_addr_valid() is (1) for FLATMEM and (0) for SPARSEMEM -*/ -#ifdef CONFIG_FLATMEM -#define kern_addr_valid (addr) (1) -#else -#define kern_addr_valid (kaddr) (0) -#endif -/* * This is used to calculate the .brk reservation for initial pagetables. * Enough space is reserved to allocate pagetables sufficient to cover all
arch/x86/include/asm/pgtable_64.h +0 -1
@@ -240,7 +240,6 @@ static inline void native_pgd_clear(pgd_t *pgd)#define __swp_entry_to_pte (x) (__pte((x).val))#define __swp_entry_to_pmd (x) (__pmd((x).val)) -extern int kern_addr_valid (unsigned long addr);extern void cleanup_highmap (void );#define HAVE_ARCH_UNMAPPED_AREA
arch/x86/mm/init_64.c +0 -41
47 lines not on this page · raw message
arch/xtensa/include/asm/pgtable.h +0 -2
@@ -386,8 +386,6 @@ ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep)#else -#define kern_addr_valid (addr) (1) -extern void update_mmu_cache (struct vm_area_struct * vma,unsigned long address,pte_t *ptep);
block/blk-map.c +1 -3
@@ -597,9 +597,7 @@ static int blk_rq_map_user_bvec(struct request *rq, const struct iov_iter *iter)if (nsegs >= nr_segs || bytes >UINT_MAX - bv->bv_len) goto put_bio;if (bytes + bv->bv_len > nr_iter) - goto put_bio; -if (bv->bv_offset + bv->bv_len >PAGE_SIZE ) - goto put_bio; +break ; nsegs++; bytes += bv->bv_len;
drivers/acpi/cppc_acpi.c +5 -4
@@ -857,7 +857,7 @@ int acpi_cppc_processor_probe(struct acpi_processor *pr)/* Store CPU Logical ID */ cpc_ptr->cpu_id = pr->id; -spin_lock_init (&cpc_ptr->rmw_lock); +raw_spin_lock_init (&cpc_ptr->rmw_lock);/* Parse PSD data for this CPU */ ret =acpi_get_psd (cpc_ptr, handle);
@@ -1077,6 +1077,7 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val)int pcc_ss_id =per_cpu (cpu_pcc_subspace_idx, cpu);struct cpc_reg *reg = ®_res->cpc_entry.reg;struct cpc_desc *cpc_desc; +unsigned long flags; size =GET_BIT_WIDTH (reg);
@@ -1116,7 +1117,7 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val)return -ENODEV ; } -spin_lock (&cpc_desc->rmw_lock); +raw_spin_lock_irqsave (&cpc_desc->rmw_lock, flags);switch (size) {case 8 : prev_val =readb_relaxed (vaddr);
@@ -1131,7 +1132,7 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val) prev_val =readq_relaxed (vaddr);break ;default : -spin_unlock (&cpc_desc->rmw_lock); +raw_spin_unlock_irqrestore (&cpc_desc->rmw_lock, flags);return -EFAULT ; } val =MASK_VAL_WRITE (reg, prev_val, val);
@@ -1164,7 +1165,7 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val) }if (reg->space_id ==ACPI_ADR_SPACE_SYSTEM_MEMORY ) -spin_unlock (&cpc_desc->rmw_lock); +raw_spin_unlock_irqrestore (&cpc_desc->rmw_lock, flags);return ret_val; }
drivers/base/core.c +5 -8
@@ -25,7 +25,6 @@#include <linux/mutex.h> #include <linux/pm_runtime.h> #include <linux/netdevice.h> -#include <linux/rcupdate.h> #include <linux/sched/signal.h> #include <linux/sched/mm.h> #include <linux/swiotlb.h>
@@ -2559,7 +2558,6 @@ static const char *dev_uevent_name(struct kobject *kobj)static int dev_uevent (struct kobject *kobj,struct kobj_uevent_env *env) {struct device *dev =kobj_to_dev (kobj); -struct device_driver *driver;int retval =0 ;/* add device node properties if present */
@@ -2588,12 +2586,8 @@ static int dev_uevent(struct kobject *kobj, struct kobj_uevent_env *env)if (dev->type && dev->type->name)add_uevent_var (env,"DEVTYPE=%s" , dev->type->name); -/* Synchronize with module_remove_driver() */ -rcu_read_lock (); - driver =READ_ONCE (dev->driver); -if (driver) -add_uevent_var (env,"DRIVER=%s" , driver->name); -rcu_read_unlock (); +if (dev->driver) +add_uevent_var (env,"DRIVER=%s" , dev->driver->name);/* Add common DT information about the device */ of_device_uevent (dev, env);
@@ -2663,8 +2657,11 @@ static ssize_t uevent_show(struct device *dev, struct device_attribute *attr,if (!env)return -ENOMEM ; +/* Synchronize with really_probe() */ +device_lock (dev);/* let the kset specific function add its keys */ retval = kset->uevent_ops->uevent (&dev->kobj, env); +device_unlock (dev);if (retval) goto out;
drivers/base/module.c +0 -4
@@ -7,7 +7,6 @@#include <linux/errno.h> #include <linux/slab.h> #include <linux/string.h> -#include <linux/rcupdate.h> #include "base.h" static char *make_driver_name (struct device_driver *drv)
@@ -78,9 +77,6 @@ void module_remove_driver(struct device_driver *drv)if (!drv)return ; -/* Synchronize with dev_uevent() */ -synchronize_rcu (); -sysfs_remove_link (&drv->p->kobj,"module" );if (drv->owner)
drivers/cpufreq/mediatek-cpufreq-hw.c +9 -5
@@ -162,6 +162,7 @@ static int mtk_cpu_resources_init(struct platform_device *pdev,struct mtk_cpufreq_data *data;struct device *dev = &pdev->dev;struct resource *res; +struct of_phandle_args args;void __iomem *base;int ret, i;int index;
@@ -170,11 +171,14 @@ static int mtk_cpu_resources_init(struct platform_device *pdev,if (!data)return -ENOMEM ; - index =of_perf_domain_get_sharing_cpumask (policy->cpu,"performance-domains" , -"#performance-domain-cells" , - policy->cpus); -if (index <0 ) -return index; + ret =of_perf_domain_get_sharing_cpumask (policy->cpu,"performance-domains" , +"#performance-domain-cells" , + policy->cpus, &args); +if (ret <0 ) +return ret; + + index = args.args[0 ]; +of_node_put (args.np); res =platform_get_resource (pdev,IORESOURCE_MEM , index);if (!res) {
drivers/cxl/acpi.c +15 -2
@@ -509,7 +509,8 @@ static int cxl_acpi_probe(struct platform_device *pdev)return rc;/* In case PCI is scanned before ACPI re-trigger memdev attach */ -return cxl_bus_rescan (); +cxl_bus_rescan (); +return 0 ; }static const struct acpi_device_id cxl_acpi_ids[] = {
@@ -533,7 +534,19 @@ static struct platform_driver cxl_acpi_driver = { .id_table = cxl_test_ids, }; -module_platform_driver (cxl_acpi_driver); +static int __init cxl_acpi_init (void ) +{ +return platform_driver_register (&cxl_acpi_driver); +} + +static void __exit cxl_acpi_exit(void) +{ +platform_driver_unregister (&cxl_acpi_driver); +cxl_bus_drain (); +} + +module_init (cxl_acpi_init); +module_exit (cxl_acpi_exit);MODULE_LICENSE ("GPL v2" );MODULE_IMPORT_NS (CXL );MODULE_IMPORT_NS (ACPI );
drivers/cxl/core/port.c +24 -2
@@ -1786,12 +1786,34 @@ static void cxl_bus_remove(struct device *dev)static struct workqueue_struct *cxl_bus_wq; -int cxl_bus_rescan (void ) +static int cxl_rescan_attach (struct device *dev,void *data) { -return bus_rescan_devices (&cxl_bus_type); +int rc =device_attach (dev); + +dev_vdbg (dev,"rescan: %s\n" , rc ?"attach" :"detached" ); + +return 0 ; +} + +static void cxl_bus_rescan_queue (struct work_struct *w) +{ +bus_for_each_dev (&cxl_bus_type,NULL ,NULL , cxl_rescan_attach); +} + +void cxl_bus_rescan (void ) +{ + static DECLARE_WORK(rescan_work, cxl_bus_rescan_queue); + +queue_work (cxl_bus_wq, &rescan_work); }EXPORT_SYMBOL_NS_GPL (cxl_bus_rescan,CXL ); +void cxl_bus_drain (void ) +{ +drain_workqueue (cxl_bus_wq); +} +EXPORT_SYMBOL_NS_GPL (cxl_bus_drain,CXL ); +bool schedule_cxl_memdev_detach (struct cxl_memdev *cxlmd) {return queue_work (cxl_bus_wq, &cxlmd->detach_work);
drivers/cxl/cxl.h +2 -1
@@ -564,7 +564,8 @@ struct cxl_port *devm_cxl_add_port(struct device *host, struct device *uport, struct cxl_dport *parent_dport);struct cxl_port *find_cxl_root (struct device *dev);int devm_cxl_enumerate_ports (struct cxl_memdev *cxlmd); -int cxl_bus_rescan (void ); +void cxl_bus_rescan (void ); +void cxl_bus_drain (void );struct cxl_port *cxl_mem_find_port (struct cxl_memdev *cxlmd,struct cxl_dport **dport);bool schedule_cxl_memdev_detach (struct cxl_memdev *cxlmd);
drivers/firmware/arm_sdei.c +1 -1
@@ -763,7 +763,7 @@ static int sdei_device_freeze(struct device *dev)int err;/* unregister private events */ -cpuhp_remove_state (sdei_entry_point); +cpuhp_remove_state (sdei_hp_state); err =sdei_unregister_shared ();if (err)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +10 -0
@@ -2990,6 +2990,10 @@ static int dm_resume(void *handle)/* Do mst topology probing after resuming cached state*/ drm_connector_list_iter_begin (ddev, &iter);drm_for_each_connector_iter (connector, &iter) { + +if (connector->connector_type ==DRM_MODE_CONNECTOR_WRITEBACK ) +continue ; + aconnector =to_amdgpu_dm_connector (connector);if (aconnector->dc_link->type != dc_connection_mst_branch || aconnector->mst_port)
@@ -5722,6 +5726,9 @@ get_highest_refresh_rate_mode(struct amdgpu_dm_connector *aconnector, &aconnector->base.probed_modes : &aconnector->base.modes; +if (aconnector->base.connector_type ==DRM_MODE_CONNECTOR_WRITEBACK ) +return NULL ; +if (aconnector->freesync_vid_base.clock !=0 )return &aconnector->freesync_vid_base;
@@ -8242,6 +8249,9 @@ static void amdgpu_dm_commit_audio(struct drm_device *dev,continue ; notify: +if (connector->connector_type ==DRM_MODE_CONNECTOR_WRITEBACK ) +continue ; + aconnector =to_amdgpu_dm_connector (connector);mutex_lock (&adev->dm.audio_lock);
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c +3 -0
@@ -762,6 +762,9 @@ bool dcn30_apply_idle_power_optimizations(struct dc *dc, bool enable) stream = dc->current_state->streams[0 ]; plane = (stream ? dc->current_state->stream_status[0 ].plane_states[0 ] :NULL ); +if (!stream || !plane) +return false; +if (stream && plane) { cursor_cache_enable = stream->cursor_position.enable && plane->address.grph.cursor_cache_addr.quad_part;
drivers/iio/adc/ad7124.c +1 -1
@@ -642,7 +642,7 @@ static int ad7124_write_raw(struct iio_dev *indio_dev,switch (info) {case IIO_CHAN_INFO_SAMP_FREQ : -if (val2 !=0 ) { +if (val2 !=0 || val ==0 ) { ret = -EINVAL ;break ; }
drivers/iio/light/veml6030.c +1 -1
@@ -522,7 +522,7 @@ static int veml6030_read_raw(struct iio_dev *indio_dev, }if (mask ==IIO_CHAN_INFO_PROCESSED ) { *val = (reg * data->cur_resolution) /10000 ; - *val2 = (reg * data->cur_resolution) %10000 ; + *val2 = (reg * data->cur_resolution) %10000 *100 ;return IIO_VAL_INT_PLUS_MICRO ; } *val = reg;
drivers/infiniband/hw/bnxt_re/qplib_fp.c +4 -0
@@ -1496,9 +1496,11 @@ int bnxt_qplib_destroy_qp(struct bnxt_qplib_res *res,u32 tbl_indx;int rc; +spin_lock_bh (&rcfw->tbl_lock); tbl_indx =map_qp_id_to_tbl_indx (qp->id, rcfw); rcfw->qp_tbl[tbl_indx].qp_id =BNXT_QPLIB_QP_ID_INVALID ; rcfw->qp_tbl[tbl_indx].qp_handle =NULL ; +spin_unlock_bh (&rcfw->tbl_lock);RCFW_CMD_PREP (req,DESTROY_QP , cmd_flags);
@@ -1506,8 +1508,10 @@ int bnxt_qplib_destroy_qp(struct bnxt_qplib_res *res, rc =bnxt_qplib_rcfw_send_message (rcfw, (void *)&req, (void *)&resp,NULL ,0 );if (rc) { +spin_lock_bh (&rcfw->tbl_lock); rcfw->qp_tbl[tbl_indx].qp_id = qp->id; rcfw->qp_tbl[tbl_indx].qp_handle = qp; +spin_unlock_bh (&rcfw->tbl_lock);return rc; }
drivers/infiniband/hw/bnxt_re/qplib_rcfw.c +9 -4
@@ -320,17 +320,21 @@ static int bnxt_qplib_process_qp_event(struct bnxt_qplib_rcfw *rcfw,case CREQ_QP_EVENT_EVENT_QP_ERROR_NOTIFICATION : err_event = (struct creq_qp_error_notification *)qp_event; qp_id =le32_to_cpu (err_event->xid); +spin_lock (&rcfw->tbl_lock); tbl_indx =map_qp_id_to_tbl_indx (qp_id, rcfw); qp = rcfw->qp_tbl[tbl_indx].qp_handle; +if (!qp) { +spin_unlock (&rcfw->tbl_lock); +break ; + } +bnxt_qplib_mark_qp_error (qp); + rc = rcfw->creq.aeq_handler (rcfw, qp_event, qp); +spin_unlock (&rcfw->tbl_lock);dev_dbg (&pdev->dev,"Received QP error notification\n" );dev_dbg (&pdev->dev,"qpid 0x%x, req_err=0x%x, resp_err=0x%x\n" , qp_id, err_event->req_err_state_reason, err_event->res_err_state_reason); -if (!qp) -break ; -bnxt_qplib_mark_qp_error (qp); - rc = rcfw->creq.aeq_handler (rcfw, qp_event, qp);break ;default :/*
@@ -629,6 +633,7 @@ int bnxt_qplib_alloc_rcfw_channel(struct bnxt_qplib_res *res, GFP_KERNEL);if (!rcfw->qp_tbl) goto fail; +spin_lock_init (&rcfw->tbl_lock);return 0 ;
drivers/infiniband/hw/bnxt_re/qplib_rcfw.h +2 -0
@@ -186,6 +186,8 @@ struct bnxt_qplib_rcfw {struct bnxt_qplib_crsqe *crsqe_tbl;int qp_tbl_size;struct bnxt_qplib_qp_node *qp_tbl; +/* To synchronize the qp-handle hash table */ +spinlock_t tbl_lock;u64 oos_prev;u32 init_oos_stats;u32 cmdq_depth;
drivers/infiniband/hw/cxgb4/provider.c +1 -0
@@ -474,6 +474,7 @@ static const struct ib_device_ops c4iw_dev_ops = { .fill_res_cq_entry = c4iw_fill_res_cq_entry, .fill_res_cm_id_entry = c4iw_fill_res_cm_id_entry, .fill_res_mr_entry = c4iw_fill_res_mr_entry, + .fill_res_qp_entry = c4iw_fill_res_qp_entry, .get_dev_fw_str = get_dev_fw_str, .get_dma_mr = c4iw_get_dma_mr, .get_hw_stats = c4iw_get_mib,
drivers/infiniband/hw/mlx5/qp.c +2 -2
@@ -4187,14 +4187,14 @@ static int __mlx5_ib_modify_qp(struct ib_qp *ibqp,MLX5_SET (qpc, qpc, retry_count, attr->retry_cnt);if (attr_mask &IB_QP_MAX_QP_RD_ATOMIC && attr->max_rd_atomic) -MLX5_SET (qpc, qpc, log_sra_max,ilog2 (attr->max_rd_atomic)); +MLX5_SET (qpc, qpc, log_sra_max,fls (attr->max_rd_atomic -1 ));if (attr_mask &IB_QP_SQ_PSN )MLX5_SET (qpc, qpc, next_send_psn, attr->sq_psn);if (attr_mask &IB_QP_MAX_DEST_RD_ATOMIC && attr->max_dest_rd_atomic)MLX5_SET (qpc, qpc, log_rra_max, -ilog2 (attr->max_dest_rd_atomic)); +fls (attr->max_dest_rd_atomic -1 ));if (attr_mask & (IB_QP_ACCESS_FLAGS |IB_QP_MAX_DEST_RD_ATOMIC )) { err =set_qpc_atomic_flags (qp, attr, attr_mask, qpc);
drivers/misc/sgi-gru/grukservices.c +0 -2
@@ -258,7 +258,6 @@ static int gru_get_cpu_resources(int dsr_bytes, void **cb, void **dsr)int lcpu;BUG_ON (dsr_bytes >GRU_NUM_KERNEL_DSR_BYTES ); -preempt_disable (); bs =gru_lock_kernel_context (-1 ); lcpu =uv_blade_processor_id (); *cb = bs->kernel_cb + lcpu *GRU_HANDLE_STRIDE ;
@@ -272,7 +271,6 @@ static int gru_get_cpu_resources(int dsr_bytes, void **cb, void **dsr)static void gru_free_cpu_resources (void *cb,void *dsr) {gru_unlock_kernel_context (uv_numa_blade_id ()); -preempt_enable (); }/*
drivers/misc/sgi-gru/grumain.c +0 -4
@@ -941,10 +941,8 @@ vm_fault_t gru_fault(struct vm_fault *vmf) again:mutex_lock (>s->ts_ctxlock); -preempt_disable ();if (gru_check_context_placement (gts)) { -preempt_enable ();mutex_unlock (>s->ts_ctxlock);gru_unload_context (gts,1 );return VM_FAULT_NOPAGE ;
@@ -953,7 +951,6 @@ vm_fault_t gru_fault(struct vm_fault *vmf)if (!gts->ts_gru) {STAT (load_user_context);if (!gru_assign_gru_context (gts)) { -preempt_enable ();mutex_unlock (>s->ts_ctxlock);set_current_state (TASK_INTERRUPTIBLE );schedule_timeout (GRU_ASSIGN_DELAY );/* true hack ZZZ */
@@ -969,7 +966,6 @@ vm_fault_t gru_fault(struct vm_fault *vmf) vma->vm_page_prot); } -preempt_enable ();mutex_unlock (>s->ts_ctxlock);return VM_FAULT_NOPAGE ;
drivers/misc/sgi-gru/grutlbpurge.c +0 -2
@@ -65,7 +65,6 @@ static struct gru_tlb_global_handle *get_lock_tgh_handle(struct gru_statestruct gru_tlb_global_handle *tgh;int n; -preempt_disable ();if (uv_numa_blade_id () == gru->gs_blade_id) n =get_on_blade_tgh (gru);else
@@ -79,7 +78,6 @@ static struct gru_tlb_global_handle *get_lock_tgh_handle(struct gru_statestatic void get_unlock_tgh_handle (struct gru_tlb_global_handle *tgh) {unlock_tgh_handle (tgh); -preempt_enable (); }/*
drivers/mtd/spi-nor/winbond.c +4 -3
@@ -120,9 +120,10 @@ static const struct flash_info winbond_nor_parts[] = { NO_SFDP_FLAGS(SECT_4K) }, { "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16) NO_SFDP_FLAGS(SECT_4K) }, - { "w25q128", INFO(0xef4018, 0, 0, 0) - PARSE_SFDP - FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) }, + { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256) + FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) + NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | + SPI_NOR_QUAD_READ) }, { "w25q256", INFO(0xef4019, 0, 64 * 1024, 512) NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) .fixups = &w25q256_fixups },
drivers/net/ethernet/amd/mvme147.c +3 -4
@@ -105,10 +105,6 @@ static struct net_device * __init mvme147lance_probe(void) macaddr[3 ] = address&0xff ;eth_hw_addr_set (dev, macaddr); -printk ("%s: MVME147 at 0x%08lx, irq %d, Hardware Address %pM\n" , - dev->name, dev->base_addr,MVME147_LANCE_IRQ , - dev->dev_addr); - lp =netdev_priv (dev); lp->ram =__get_dma_pages (GFP_ATOMIC ,3 );/* 32K */ if (!lp->ram) {
@@ -138,6 +134,9 @@ static struct net_device * __init mvme147lance_probe(void)return ERR_PTR (err); } +netdev_info (dev,"MVME147 at 0x%08lx, irq %d, Hardware Address %pM\n" , + dev->base_addr,MVME147_LANCE_IRQ , dev->dev_addr); +return dev; }
drivers/net/ethernet/mellanox/mlxsw/spectrum_ipip.c +71 -48
176 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlxsw/spectrum_ipip.h +1 -0
@@ -49,6 +49,7 @@ struct mlxsw_sp_ipip_ops {int dev_type;enum mlxsw_sp_l3proto ul_proto;/* Underlay. */ bool inc_parsing_depth; +bool double_rif_entry;struct mlxsw_sp_ipip_parms (*parms_init)(const struct net_device *ol_dev);
drivers/net/ethernet/mellanox/mlxsw/spectrum_ptp.c +7 -0
@@ -16,6 +16,7 @@#include "spectrum.h" #include "spectrum_ptp.h" #include "core.h" +#include "txheader.h" #define MLXSW_SP1_PTP_CLOCK_CYCLES_SHIFT 29#define MLXSW_SP1_PTP_CLOCK_FREQ_KHZ 156257/* 6.4nSec */
@@ -1696,6 +1697,12 @@ int mlxsw_sp_ptp_txhdr_construct(struct mlxsw_core *mlxsw_core,struct sk_buff *skb, const struct mlxsw_tx_info *tx_info) { + if (skb_cow_head(skb, MLXSW_TXHDR_LEN)) { + this_cpu_inc(mlxsw_sp_port->pcpu_stats->tx_dropped); +dev_kfree_skb_any (skb); +return -ENOMEM ; + } +mlxsw_sp_txhdr_construct (skb, tx_info);return 0 ; }
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +2 -0
@@ -77,6 +77,7 @@ struct mlxsw_sp_rif_params { };u16 vid;bool lag; +bool double_entry; };struct mlxsw_sp_rif_subport {
@@ -1068,6 +1069,7 @@ mlxsw_sp_ipip_ol_ipip_lb_create(struct mlxsw_sp *mlxsw_sp, lb_params = (struct mlxsw_sp_rif_params_ipip_lb ) { .common.dev = ol_dev, .common.lag = false, + .common.double_entry = ipip_ops->double_rif_entry, .lb_config = ipip_ops->ol_loopback_config (mlxsw_sp, ol_dev), };
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +17 -5
@@ -4183,11 +4183,6 @@ static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev)if (dma_mapping_error (priv->device, des)) goto dma_map_err; - tx_q->tx_skbuff_dma[first_entry].buf = des; - tx_q->tx_skbuff_dma[first_entry].len =skb_headlen (skb); - tx_q->tx_skbuff_dma[first_entry].map_as_page = false; - tx_q->tx_skbuff_dma[first_entry].buf_type =STMMAC_TXBUF_T_SKB ; -if (priv->dma_cap.addr64 <=32 ) { first->des0 =cpu_to_le32 (des);
@@ -4206,6 +4201,23 @@ static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev)stmmac_tso_allocator (priv, des, tmp_pay_len, (nfrags ==0 ), queue); +/* In case two or more DMA transmit descriptors are allocated for this +* non-paged SKB data, the DMA buffer address should be saved to +* tx_q->tx_skbuff_dma[].buf corresponding to the last descriptor, +* and leave the other tx_q->tx_skbuff_dma[].buf as NULL to guarantee +* that stmmac_tx_clean() does not unmap the entire DMA buffer too early +* since the tail areas of the DMA buffer can be accessed by DMA engine +* sooner or later. +* By saving the DMA buffer address to tx_q->tx_skbuff_dma[].buf +* corresponding to the last descriptor, stmmac_tx_clean() will unmap +* this DMA buffer right after the DMA engine completely finishes the +* full buffer transmission. +*/ + tx_q->tx_skbuff_dma[tx_q->cur_tx].buf = des; + tx_q->tx_skbuff_dma[tx_q->cur_tx].len =skb_headlen (skb); + tx_q->tx_skbuff_dma[tx_q->cur_tx].map_as_page = false; + tx_q->tx_skbuff_dma[tx_q->cur_tx].buf_type =STMMAC_TXBUF_T_SKB ; +/* Prepare fragments */ for (i =0 ; i < nfrags; i++) {const skb_frag_t *frag = &skb_shinfo (skb)->frags[i];
drivers/net/gtp.c +13 -9
@@ -1262,20 +1262,24 @@ static int gtp_encap_enable(struct gtp_dev *gtp, struct nlattr *data[])return -EINVAL ;if (data[IFLA_GTP_FD0 ]) { -u32 fd0 =nla_get_u32 (data[IFLA_GTP_FD0 ]); +int fd0 =nla_get_u32 (data[IFLA_GTP_FD0 ]); - sk0 =gtp_encap_enable_socket (fd0,UDP_ENCAP_GTP0 , gtp); -if (IS_ERR (sk0)) -return PTR_ERR (sk0); +if (fd0 >=0 ) { + sk0 =gtp_encap_enable_socket (fd0,UDP_ENCAP_GTP0 , gtp); +if (IS_ERR (sk0)) +return PTR_ERR (sk0); + } }if (data[IFLA_GTP_FD1 ]) { -u32 fd1 =nla_get_u32 (data[IFLA_GTP_FD1 ]); +int fd1 =nla_get_u32 (data[IFLA_GTP_FD1 ]); - sk1u =gtp_encap_enable_socket (fd1,UDP_ENCAP_GTP1U , gtp); -if (IS_ERR (sk1u)) { -gtp_encap_disable_sock (sk0); -return PTR_ERR (sk1u); +if (fd1 >=0 ) { + sk1u =gtp_encap_enable_socket (fd1,UDP_ENCAP_GTP1U , gtp); +if (IS_ERR (sk1u)) { +gtp_encap_disable_sock (sk0); +return PTR_ERR (sk1u); + } } }
drivers/net/macsec.c +1 -2
@@ -3726,8 +3726,7 @@ static void macsec_free_netdev(struct net_device *dev) {struct macsec_dev *macsec =macsec_priv (dev); -if (macsec->secy.tx_sc.md_dst) -metadata_dst_free (macsec->secy.tx_sc.md_dst); +dst_release (&macsec->secy.tx_sc.md_dst->dst);free_percpu (macsec->stats);free_percpu (macsec->secy.tx_sc.stats);
drivers/net/mctp/mctp-i2c.c +3 -0
@@ -547,6 +547,9 @@ static int mctp_i2c_header_create(struct sk_buff *skb, struct net_device *dev,if (len >MCTP_I2C_MAXMTU )return -EMSGSIZE ; +if (!daddr || !saddr) +return -EINVAL ; + lldst = *((u8 *)daddr); llsrc = *((u8 *)saddr);
drivers/net/netdevsim/fib.c +3 -1
@@ -1377,10 +1377,12 @@ static ssize_t nsim_nexthop_bucket_activity_write(struct file *file,if (pos !=0 )return -EINVAL ; -if (size >sizeof (buf)) +if (size >sizeof (buf) -1 )return -EINVAL ;if (copy_from_user (buf, user_buf, size))return -EFAULT ; + buf[size] =0 ; +if (sscanf (buf,"%u %hu" , &nhid, &bucket_index) !=2 )return -EINVAL ;
drivers/net/wireless/ath/ath10k/wmi-tlv.c +6 -1
@@ -3035,9 +3035,14 @@ ath10k_wmi_tlv_op_cleanup_mgmt_tx_send(struct ath10k *ar, struct sk_buff *msdu) {struct ath10k_skb_cb *cb =ATH10K_SKB_CB (msdu); +struct ath10k_mgmt_tx_pkt_addr *pkt_addr;struct ath10k_wmi *wmi = &ar->wmi; -idr_remove (&wmi->mgmt_pending_tx, cb->msdu_id); +spin_lock_bh (&ar->data_lock); + pkt_addr =idr_remove (&wmi->mgmt_pending_tx, cb->msdu_id); +spin_unlock_bh (&ar->data_lock); + +kfree (pkt_addr);return 0 ; }
drivers/net/wireless/ath/ath10k/wmi.c +2 -0
@@ -2440,6 +2440,7 @@ wmi_process_mgmt_tx_comp(struct ath10k *ar, struct mgmt_tx_compl_params *param)dma_unmap_single (ar->dev, pkt_addr->paddr, msdu->len,DMA_TO_DEVICE ); info =IEEE80211_SKB_CB (msdu); +kfree (pkt_addr);if (param->status) { info->flags &= ~IEEE80211_TX_STAT_ACK ;
@@ -9581,6 +9582,7 @@ static int ath10k_wmi_mgmt_tx_clean_up_pending(int msdu_id, void *ptr,dma_unmap_single (ar->dev, pkt_addr->paddr, msdu->len,DMA_TO_DEVICE );ieee80211_free_txskb (ar->hw, msdu); +kfree (pkt_addr);return 0 ; }
drivers/net/wireless/ath/ath11k/dp_rx.c +5 -2
@@ -5224,8 +5224,11 @@ int ath11k_dp_rx_process_mon_status(struct ath11k_base *ab, int mac_id, hal_status == HAL_TLV_STATUS_PPDU_DONE) { rx_mon_stats->status_ppdu_done++; pmon->mon_ppdu_status =DP_PPDU_STATUS_DONE ; -ath11k_dp_rx_mon_dest_process (ar, mac_id, budget, napi); - pmon->mon_ppdu_status =DP_PPDU_STATUS_START ; +if (!ab->hw_params.full_monitor_mode) { +ath11k_dp_rx_mon_dest_process (ar, mac_id, + budget, napi); + pmon->mon_ppdu_status =DP_PPDU_STATUS_START ; + } } if (ppdu_info->peer_id == HAL_INVALID_PEERID ||
drivers/net/wireless/broadcom/brcm80211/Kconfig +1 -0
@@ -27,6 +27,7 @@ source "drivers/net/wireless/broadcom/brcm80211/brcmfmac/Kconfig" config BRCM_TRACING bool "Broadcom device tracing" depends on BRCMSMAC || BRCMFMAC + depends on TRACING help If you say Y here, the Broadcom wireless drivers will register with ftrace to dump event information into the trace ringbuffer.
drivers/net/wireless/intel/iwlegacy/common.c +14 -1
@@ -3119,6 +3119,7 @@ il_enqueue_hcmd(struct il_priv *il, struct il_host_cmd *cmd)struct il_cmd_meta *out_meta;dma_addr_t phys_addr;unsigned long flags; +u8 *out_payload;u32 idx;u16 fix_size;
@@ -3154,6 +3155,16 @@ il_enqueue_hcmd(struct il_priv *il, struct il_host_cmd *cmd) out_cmd = txq->cmd[idx]; out_meta = &txq->meta[idx]; +/* The payload is in the same place in regular and huge +* command buffers, but we need to let the compiler know when +* we're using a larger payload buffer to avoid "field- +* spanning write" warnings at run-time for huge commands. +*/ +if (cmd->flags &CMD_SIZE_HUGE ) + out_payload = ((struct il_device_cmd_huge *)out_cmd)->cmd.payload; +else + out_payload = out_cmd->cmd.payload; +if (WARN_ON (out_meta->flags &CMD_MAPPED )) {spin_unlock_irqrestore (&il->hcmd_lock, flags);return -ENOSPC ;
@@ -3167,7 +3178,7 @@ il_enqueue_hcmd(struct il_priv *il, struct il_host_cmd *cmd) out_meta->callback = cmd->callback; out_cmd->hdr.cmd = cmd->id; -memcpy (&out_cmd->cmd.payload, cmd->data, cmd->len); +memcpy (out_payload, cmd->data, cmd->len);/* At this point, the out_cmd now has all of the incoming cmd * information */
@@ -4961,6 +4972,8 @@ il_pci_resume(struct device *device)*/ pci_write_config_byte (pdev,PCI_CFG_RETRY_TIMEOUT ,0x00 ); +_il_wr (il,CSR_INT ,0xffffffff ); +_il_wr (il,CSR_FH_INT_STATUS ,0xffffffff );il_enable_interrupts (il);if (!(_il_rd (il,CSR_GP_CNTRL ) &CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW ))
drivers/net/wireless/intel/iwlegacy/common.h +12 -0
@@ -560,6 +560,18 @@ struct il_device_cmd {#define TFD_MAX_PAYLOAD_SIZE (sizeof(struct il_device_cmd)) +/** +* struct il_device_cmd_huge +* +* For use when sending huge commands. +*/ +struct il_device_cmd_huge { +struct il_cmd_header hdr;/* uCode API */ +union { +u8 payload[IL_MAX_CMD_SIZE -sizeof (struct il_cmd_header )]; + } __packed cmd; +} __packed; +struct il_host_cmd {const void *data; unsigned long reply_page;
drivers/net/wireless/intel/iwlwifi/mvm/fw.c +16 -6
@@ -1348,11 +1348,18 @@ void iwl_mvm_get_acpi_tables(struct iwl_mvm *mvm)#endif /* CONFIG_ACPI */ +static void iwl_mvm_disconnect_iterator (void *data,u8 *mac, +struct ieee80211_vif *vif) +{ +if (vif->type ==NL80211_IFTYPE_STATION ) +ieee80211_hw_restart_disconnect (vif); +} +void iwl_mvm_send_recovery_cmd (struct iwl_mvm *mvm,u32 flags) {u32 error_log_size = mvm->fw->ucode_capa.error_log_size; +u32 status =0 ;int ret; -u32 resp;struct iwl_fw_error_recovery_cmd recovery_cmd = { .flags =cpu_to_le32 (flags),
@@ -1360,7 +1367,6 @@ void iwl_mvm_send_recovery_cmd(struct iwl_mvm *mvm, u32 flags) };struct iwl_host_cmd host_cmd = { .id =WIDE_ID (SYSTEM_GROUP ,FW_ERROR_RECOVERY_CMD ), - .flags =CMD_WANT_SKB , .data = {&recovery_cmd, }, .len = {sizeof (recovery_cmd), }, };
@@ -1380,7 +1386,7 @@ void iwl_mvm_send_recovery_cmd(struct iwl_mvm *mvm, u32 flags) recovery_cmd.buf_size =cpu_to_le32 (error_log_size); } - ret =iwl_mvm_send_cmd (mvm, &host_cmd); + ret =iwl_mvm_send_cmd_status (mvm, &host_cmd, &status);kfree (mvm->error_recovery_buf); mvm->error_recovery_buf =NULL ;
@@ -1391,11 +1397,15 @@ void iwl_mvm_send_recovery_cmd(struct iwl_mvm *mvm, u32 flags)/* skb respond is only relevant in ERROR_RECOVERY_UPDATE_DB */ if (flags &ERROR_RECOVERY_UPDATE_DB ) { - resp =le32_to_cpu (*(__le32 *)host_cmd.resp_pkt->data); -if (resp) +if (status) {IWL_ERR (mvm,"Failed to send recovery cmd blob was invalid %d\n" , - resp); + status); + +ieee80211_iterate_interfaces (mvm->hw,0 , + iwl_mvm_disconnect_iterator, + mvm); + } } }
drivers/net/wireless/intel/iwlwifi/mvm/scan.c +2 -1
@@ -1739,7 +1739,8 @@ iwl_mvm_umac_scan_cfg_channels_v6_6g(struct iwl_mvm *mvm, &cp->channel_config[ch_cnt];u32 s_ssid_bitmap =0 , bssid_bitmap =0 , flags =0 ; -u8 j, k, s_max =0 , b_max =0 , n_used_bssid_entries; +u8 k, s_max =0 , b_max =0 , n_used_bssid_entries; +u32 j;bool force_passive, found = false, allow_passive = true, unsolicited_probe_on_chan = false, psc_no_listen = false;
drivers/nvme/target/auth.c +1 -0
@@ -101,6 +101,7 @@ int nvmet_setup_dhgroup(struct nvmet_ctrl *ctrl, u8 dhgroup_id)pr_debug ("%s: ctrl %d failed to generate private key, err %d\n" , __func__, ctrl->cntlid, ret);kfree_sensitive (ctrl->dh_key); + ctrl->dh_key =NULL ;return ret; } ctrl->dh_keysize =crypto_kpp_maxsize (ctrl->dh_tfm);
drivers/scsi/scsi_transport_fc.c +2 -2
@@ -1252,7 +1252,7 @@ static ssize_t fc_rport_set_marginal_state(struct device *dev,*/ if (rport->port_state ==FC_PORTSTATE_ONLINE ) rport->port_state = port_state; -else +else if (port_state != rport->port_state)return -EINVAL ; }else if (port_state ==FC_PORTSTATE_ONLINE ) {/*
@@ -1262,7 +1262,7 @@ static ssize_t fc_rport_set_marginal_state(struct device *dev,*/ if (rport->port_state ==FC_PORTSTATE_MARGINAL ) rport->port_state = port_state; -else +else if (port_state != rport->port_state)return -EINVAL ; }else return -EINVAL ;
drivers/staging/iio/frequency/ad9832.c +5 -2
@@ -129,12 +129,15 @@ static unsigned long ad9832_calc_freqreg(unsigned long mclk, unsigned long fout)static int ad9832_write_frequency (struct ad9832_state *st,unsigned int addr,unsigned long fout) { +unsigned long clk_freq;unsigned long regval; -if (fout > (clk_get_rate (st->mclk) /2 )) + clk_freq =clk_get_rate (st->mclk); + +if (!clk_freq || fout > (clk_freq /2 ))return -EINVAL ; - regval =ad9832_calc_freqreg (clk_get_rate (st->mclk), fout); + regval =ad9832_calc_freqreg (clk_freq, fout); st->freq_data[0] = cpu_to_be16((AD9832_CMD_FRE8BITSW << CMD_SHIFT) | (addr << ADD_SHIFT) |
drivers/tty/vt/vt.c +1 -1
@@ -4603,7 +4603,7 @@ static int con_font_get(struct vc_data *vc, struct console_font_op *op)int c;if (op->data) { - font.data =kmalloc (max_font_size,GFP_KERNEL ); + font.data =kzalloc (max_font_size,GFP_KERNEL );if (!font.data)return -ENOMEM ; }else
drivers/usb/gadget/udc/dummy_hcd.c +38 -19
146 lines not on this page · raw message
drivers/usb/host/xhci-pci.c +4 -2
@@ -526,7 +526,7 @@ static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)pm_runtime_put_noidle (&dev->dev);if (pci_choose_state (dev,PMSG_SUSPEND ) ==PCI_D0 ) -pm_runtime_forbid (&dev->dev); +pm_runtime_get (&dev->dev);else if (xhci->quirks &XHCI_DEFAULT_PM_RUNTIME_ALLOW )pm_runtime_allow (&dev->dev);
@@ -553,7 +553,9 @@ static void xhci_pci_remove(struct pci_dev *dev) xhci->xhc_state |=XHCI_STATE_REMOVING ; -if (xhci->quirks &XHCI_DEFAULT_PM_RUNTIME_ALLOW ) +if (pci_choose_state (dev,PMSG_SUSPEND ) ==PCI_D0 ) +pm_runtime_put (&dev->dev); +else if (xhci->quirks &XHCI_DEFAULT_PM_RUNTIME_ALLOW )pm_runtime_forbid (&dev->dev);if (xhci->shared_hcd) {
drivers/usb/host/xhci-ring.c +8 -8
@@ -1704,6 +1704,14 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,trace_xhci_handle_command (xhci->cmd_ring, &cmd_trb->generic); + cmd_comp_code =GET_COMP_CODE (le32_to_cpu (event->status)); + +/* If CMD ring stopped we own the trbs between enqueue and dequeue */ +if (cmd_comp_code ==COMP_COMMAND_RING_STOPPED ) { +complete_all (&xhci->cmd_ring_stop_completion); +return ; + } + cmd_dequeue_dma =xhci_trb_virt_to_dma (xhci->cmd_ring->deq_seg, cmd_trb);/*
@@ -1720,14 +1728,6 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,cancel_delayed_work (&xhci->cmd_timer); - cmd_comp_code =GET_COMP_CODE (le32_to_cpu (event->status)); - -/* If CMD ring stopped we own the trbs between enqueue and dequeue */ -if (cmd_comp_code ==COMP_COMMAND_RING_STOPPED ) { -complete_all (&xhci->cmd_ring_stop_completion); -return ; - } -if (cmd->command_trb != xhci->cmd_ring->dequeue) {xhci_err (xhci,"Command completion event does not match command\n" );
drivers/usb/phy/phy.c +1 -1
@@ -628,7 +628,7 @@ void devm_usb_put_phy(struct device *dev, struct usb_phy *phy) {int r; - r =devres_destroy (dev, devm_usb_phy_release, devm_usb_phy_match, phy); + r =devres_release (dev, devm_usb_phy_release, devm_usb_phy_match, phy);dev_WARN_ONCE (dev, r,"couldn't find PHY resource\n" ); }EXPORT_SYMBOL_GPL (devm_usb_put_phy);
drivers/usb/typec/class.c +1 -0
@@ -2165,6 +2165,7 @@ void typec_port_register_altmodes(struct typec_port *port, altmodes[index] = alt; index++; } +fwnode_handle_put (altmodes_node); }EXPORT_SYMBOL_GPL (typec_port_register_altmodes);
fs/afs/dir.c +25 -0
@@ -12,6 +12,7 @@#include <linux/swap.h> #include <linux/ctype.h> #include <linux/sched.h> +#include <linux/iversion.h> #include <linux/task_io_accounting_ops.h> #include "internal.h" #include "afs_fs.h"
@@ -1808,6 +1809,8 @@ static int afs_symlink(struct user_namespace *mnt_userns, struct inode *dir,static void afs_rename_success (struct afs_operation *op) { +struct afs_vnode *vnode =AFS_FS_I (d_inode (op->dentry)); +_enter ("op=%08x" , op->debug_id); op->ctime = op->file[0 ].scb.status.mtime_client;
@@ -1817,6 +1820,22 @@ static void afs_rename_success(struct afs_operation *op) op->ctime = op->file[1 ].scb.status.mtime_client;afs_vnode_commit_status (op, &op->file[1 ]); } + +/* If we're moving a subdir between dirs, we need to update +* its DV counter too as the ".." will be altered. +*/ +if (S_ISDIR (vnode->netfs.inode.i_mode) && + op->file[0 ].vnode != op->file[1 ].vnode) { +u64 new_dv; + +write_seqlock (&vnode->cb_lock); + + new_dv = vnode->status.data_version +1 ; + vnode->status.data_version = new_dv; +inode_set_iversion_raw (&vnode->netfs.inode, new_dv); + +write_sequnlock (&vnode->cb_lock); + } }static void afs_rename_edit_dir (struct afs_operation *op)
@@ -1858,6 +1877,12 @@ static void afs_rename_edit_dir(struct afs_operation *op) &vnode->fid, afs_edit_dir_for_rename_2); } +if (S_ISDIR (vnode->netfs.inode.i_mode) && + new_dvnode != orig_dvnode && +test_bit (AFS_VNODE_DIR_VALID , &vnode->flags)) +afs_edit_dir_update_dotdot (vnode, new_dvnode, + afs_edit_dir_for_rename_sub); + new_inode =d_inode (new_dentry);if (new_inode) {spin_lock (&new_inode->i_lock);
fs/afs/dir_edit.c +89 -2
102 lines not on this page · raw message
fs/afs/internal.h +2 -0
@@ -1043,6 +1043,8 @@ extern void afs_check_for_remote_deletion(struct afs_operation *);extern void afs_edit_dir_add (struct afs_vnode *,struct qstr *,struct afs_fid *,enum afs_edit_dir_reason );extern void afs_edit_dir_remove (struct afs_vnode *,struct qstr *,enum afs_edit_dir_reason ); +void afs_edit_dir_update_dotdot (struct afs_vnode *vnode,struct afs_vnode *new_dvnode, +enum afs_edit_dir_reason why);/* * dir_silly.c
fs/dax.c +28 -17
63 lines not on this page · raw message
fs/iomap/buffered-io.c +15 -16
@@ -1087,42 +1087,41 @@ EXPORT_SYMBOL_GPL(iomap_file_buffered_write_punch_delalloc);static loff_t iomap_unshare_iter (struct iomap_iter *iter) {struct iomap *iomap = &iter->iomap; -const struct iomap *srcmap =iomap_iter_srcmap (iter);loff_t pos = iter->pos;loff_t length =iomap_length (iter); -long status =0 ;loff_t written =0 ; -/* don't bother with blocks that are not shared to start with */ -if (!(iomap->flags &IOMAP_F_SHARED )) -return length; -/* don't bother with holes or unwritten extents */ -if (srcmap->type ==IOMAP_HOLE || srcmap->type ==IOMAP_UNWRITTEN ) +if (!iomap_want_unshare_iter (iter))return length;do { -unsigned long offset =offset_in_page (pos); -unsigned long bytes =min_t (loff_t,PAGE_SIZE - offset, length);struct folio *folio; +int status; +size_t offset; +size_t bytes =min_t (u64,SIZE_MAX , length); status =iomap_write_begin (iter, pos, bytes, &folio);if (unlikely (status))return status; -if (iter->iomap.flags &IOMAP_F_STALE ) +if (iomap->flags &IOMAP_F_STALE )break ; - status =iomap_write_end (iter, pos, bytes, bytes, folio); -if (WARN_ON_ONCE (status ==0 )) + offset =offset_in_folio (folio, pos); +if (bytes >folio_size (folio) - offset) + bytes =folio_size (folio) - offset; + + bytes =iomap_write_end (iter, pos, bytes, bytes, folio); +if (WARN_ON_ONCE (bytes ==0 ))return -EIO ;cond_resched (); - pos += status; - written += status; - length -= status; + pos += bytes; + written += bytes; + length -= bytes;balance_dirty_pages_ratelimited (iter->inode->i_mapping); - }while (length); + }while (length >0 );return written; }
fs/nfs/delegation.c +5 -0
@@ -981,6 +981,11 @@ void nfs_delegation_mark_returned(struct inode *inode, }nfs_mark_delegation_revoked (delegation); +clear_bit (NFS_DELEGATION_RETURNING , &delegation->flags); +spin_unlock (&delegation->lock); +if (nfs_detach_delegation (NFS_I (inode), delegation,NFS_SERVER (inode))) +nfs_put_delegation (delegation); + goto out_rcu_unlock; out_clear_returning:clear_bit (NFS_DELEGATION_RETURNING , &delegation->flags);
fs/nilfs2/namei.c +3 -0
@@ -157,6 +157,9 @@ static int nilfs_symlink(struct user_namespace *mnt_userns, struct inode *dir,/* slow symlink */ inode->i_op = &nilfs_symlink_inode_operations;inode_nohighmem (inode); +mapping_set_gfp_mask (inode->i_mapping, +mapping_gfp_constraint (inode->i_mapping, + ~__GFP_FS)); inode->i_mapping->a_ops = &nilfs_aops; err =page_symlink (inode, symname, l);if (err)
fs/nilfs2/page.c +1 -0
@@ -404,6 +404,7 @@ void nilfs_clear_dirty_page(struct page *page, bool silent)ClearPageUptodate (page);ClearPageMappedToDisk (page); +ClearPageChecked (page);if (page_has_buffers (page)) {struct buffer_head *bh, *head;
fs/ntfs3/frecord.c +3 -1
@@ -102,7 +102,9 @@ void ni_clear(struct ntfs_inode *ni) {struct rb_node *node; -if (!ni->vfs_inode.i_nlink && ni->mi.mrec &&is_rec_inuse (ni->mi.mrec)) +if (!ni->vfs_inode.i_nlink && ni->mi.mrec && +is_rec_inuse (ni->mi.mrec) && + !(ni->mi.sbi->flags &NTFS_FLAGS_LOG_REPLAYING ))ni_delete_all (ni);al_destroy (ni);
fs/ntfs3/inode.c +7 -3
@@ -524,11 +524,15 @@ struct inode *ntfs_iget5(struct super_block *sb, const struct MFT_REF *ref,if (inode->i_state &I_NEW ) inode =ntfs_read_mft (inode, name, ref);else if (ref->seq !=ntfs_i (inode)->mi.mrec->seq) { -/* Inode overlaps? */ -_ntfs_bad_inode (inode); +/* +* Sequence number is not expected. +* Looks like inode was reused but caller uses the old reference +*/ +iput (inode); + inode =ERR_PTR (-ESTALE ); } -if (IS_ERR (inode) && name) +if (IS_ERR (inode))ntfs_set_state (sb->s_fs_info,NTFS_DIRTY_ERROR );return inode;
fs/ntfs3/lznt.c +3 -0
@@ -236,6 +236,9 @@ static inline ssize_t decompress_chunk(u8 *unc, u8 *unc_end, const u8 *cmpr,/* Do decompression until pointers are inside range. */ while (up < unc_end && cmpr < cmpr_end) { +// return err if more than LZNT_CHUNK_SIZE bytes are written +if (up - unc >LZNT_CHUNK_SIZE ) +return -EINVAL ;/* Correct index */ while (unc + s_max_off[index] < up) index +=1 ;
fs/ntfs3/namei.c +1 -1
@@ -79,7 +79,7 @@ static struct dentry *ntfs_lookup(struct inode *dir, struct dentry *dentry,if (err <0 ) inode =ERR_PTR (err);else { -ni_lock (ni); +ni_lock_dir (ni); inode =dir_search_u (dir, uni,NULL );ni_unlock (ni); }
fs/ntfs3/ntfs_fs.h +1 -1
@@ -328,7 +328,7 @@ struct mft_inode {/* Nested class for ntfs_inode::ni_lock. */ enum ntfs_inode_mutex_lock_class { -NTFS_INODE_MUTEX_DIRTY , +NTFS_INODE_MUTEX_DIRTY =1 ,NTFS_INODE_MUTEX_SECURITY ,NTFS_INODE_MUTEX_OBJID ,NTFS_INODE_MUTEX_REPARSE ,
fs/ocfs2/file.c +8 -0
@@ -1784,6 +1784,14 @@ int ocfs2_remove_inode_range(struct inode *inode,return 0 ;if (OCFS2_I (inode)->ip_dyn_features &OCFS2_INLINE_DATA_FL ) { +int id_count =ocfs2_max_inline_data_with_xattr (inode->i_sb, di); + +if (byte_start > id_count || byte_start + byte_len > id_count) { + ret = -EINVAL ; +mlog_errno (ret); + goto out; + } + ret =ocfs2_truncate_inline (inode, di_bh, byte_start, byte_start + byte_len,0 );if (ret) {
fs/proc/kcore.c +61 -33
217 lines not on this page · raw message
include/acpi/cppc_acpi.h +1 -1
@@ -65,7 +65,7 @@ struct cpc_desc {int write_cmd_status;int write_cmd_id;/* Lock used for RMW operations in cpc_write() */ -spinlock_t rmw_lock; +raw_spinlock_t rmw_lock;struct cpc_register_resource cpc_regs[MAX_CPC_REG_ENT ];struct acpi_psd_package domain_info;struct kobject kobj;
include/linux/compiler-gcc.h +6 -6
@@ -102,26 +102,26 @@#define __noscs __attribute__((__no_sanitize__("shadow-call-stack")))#endif -#if __has_attribute (__no_sanitize_address__) -#define __no_sanitize_address __attribute__((no_sanitize_address)) +#ifdef __SANITIZE_HWADDRESS__ +#define __no_sanitize_address __attribute__((__no_sanitize__("hwaddress")))#else -#define __no_sanitize_address +#define __no_sanitize_address __attribute__((__no_sanitize_address__))#endif #if defined(__SANITIZE_THREAD__) &&__has_attribute (__no_sanitize_thread__) -#define __no_sanitize_thread __attribute__((no_sanitize_thread)) +#define __no_sanitize_thread __attribute__((__no_sanitize_thread__))#else #define __no_sanitize_thread#endif #if __has_attribute (__no_sanitize_undefined__) -#define __no_sanitize_undefined __attribute__((no_sanitize_undefined)) +#define __no_sanitize_undefined __attribute__((__no_sanitize_undefined__))#else #define __no_sanitize_undefined#endif #if defined(CONFIG_KCOV ) &&__has_attribute (__no_sanitize_coverage__) -#define __no_sanitize_coverage __attribute__((no_sanitize_coverage)) +#define __no_sanitize_coverage __attribute__((__no_sanitize_coverage__))#else #define __no_sanitize_coverage#endif
include/linux/cpufreq.h +17 -17
@@ -1123,52 +1123,51 @@ cpufreq_table_set_inefficient(struct cpufreq_policy *policy, }static inline int parse_perf_domain (int cpu,const char *list_name, -const char *cell_name) +const char *cell_name, +struct of_phandle_args *args) { -struct device_node *cpu_np; -struct of_phandle_args args;int ret; - cpu_np =of_cpu_device_node_get (cpu); + struct device_node *cpu_np __free(device_node) = of_cpu_device_node_get(cpu);if (!cpu_np)return -ENODEV ; ret =of_parse_phandle_with_args (cpu_np, list_name, cell_name,0 , - &args); + args);if (ret <0 )return ret; - -of_node_put (cpu_np); - -return args.args[0 ]; +return 0 ; }static inline int of_perf_domain_get_sharing_cpumask (int pcpu,const char *list_name, -const char *cell_name,struct cpumask *cpumask) +const char *cell_name,struct cpumask *cpumask, +struct of_phandle_args *pargs) { -int target_idx;int cpu, ret; +struct of_phandle_args args; - ret =parse_perf_domain (pcpu, list_name, cell_name); + ret =parse_perf_domain (pcpu, list_name, cell_name, pargs);if (ret <0 )return ret; - target_idx = ret;cpumask_set_cpu (pcpu, cpumask);for_each_possible_cpu (cpu) {if (cpu == pcpu)continue ; - ret =parse_perf_domain (cpu, list_name, cell_name); + ret =parse_perf_domain (cpu, list_name, cell_name, &args);if (ret <0 )continue ; -if (target_idx == ret) +if (pargs->np == args.np && pargs->args_count == args.args_count && + !memcmp (pargs->args, args.args,sizeof (args.args[0 ]) * args.args_count))cpumask_set_cpu (cpu, cpumask); + +of_node_put (args.np); } -return target_idx; +return 0 ; }#else static inline int cpufreq_boost_trigger_state (int state)
@@ -1198,7 +1197,8 @@ cpufreq_table_set_inefficient(struct cpufreq_policy *policy, }static inline int of_perf_domain_get_sharing_cpumask (int pcpu,const char *list_name, -const char *cell_name,struct cpumask *cpumask) +const char *cell_name,struct cpumask *cpumask, +struct of_phandle_args *pargs) {return -EOPNOTSUPP ; }
include/linux/fs.h +36 -0
@@ -3029,6 +3029,42 @@ static inline void file_end_write(struct file *file)__sb_end_write (file_inode (file)->i_sb,SB_FREEZE_WRITE ); } +/** +* kiocb_start_write - get write access to a superblock for async file io +* @iocb: the io context we want to submit the write with +* +* This is a variant of sb_start_write() for async io submission. +* Should be matched with a call to kiocb_end_write(). +*/ +static inline void kiocb_start_write (struct kiocb *iocb) +{ +struct inode *inode =file_inode (iocb->ki_filp); + +sb_start_write (inode->i_sb); +/* +* Fool lockdep by telling it the lock got released so that it +* doesn't complain about the held lock when we return to userspace. +*/ +__sb_writers_release (inode->i_sb,SB_FREEZE_WRITE ); +} + +/** +* kiocb_end_write - drop write access to a superblock after async file io +* @iocb: the io context we sumbitted the write with +* +* Should be matched with a call to kiocb_start_write(). +*/ +static inline void kiocb_end_write (struct kiocb *iocb) +{ +struct inode *inode =file_inode (iocb->ki_filp); + +/* +* Tell lockdep we inherited freeze protection from submission thread. +*/ +__sb_writers_acquired (inode->i_sb,SB_FREEZE_WRITE ); +sb_end_write (inode->i_sb); +} +/* * This is used for regular files where some users -- especially the * currently executed binary in a process, previously handled via
include/linux/iomap.h +19 -0
@@ -251,6 +251,25 @@ static inline const struct iomap *iomap_iter_srcmap(const struct iomap_iter *i)return &i->iomap; } +/* +* Check if the range needs to be unshared for a FALLOC_FL_UNSHARE_RANGE +* operation. +* +* Don't bother with blocks that are not shared to start with; or mappings that +* cannot be shared, such as inline data, delalloc reservations, holes or +* unwritten extents. +* +* Note that we use srcmap directly instead of iomap_iter_srcmap as unsharing +* requires providing a separate source map, and the presence of one is a good +* indicator that unsharing is needed, unlike IOMAP_F_SHARED which can be set +* for any data that goes into the COW fork for XFS. +*/ +static inline bool iomap_want_unshare_iter (const struct iomap_iter *iter) +{ +return (iter->iomap.flags &IOMAP_F_SHARED ) && + iter->srcmap.type ==IOMAP_MAPPED ; +} +ssize_t iomap_file_buffered_write (struct kiocb *iocb,struct iov_iter *from,const struct iomap_ops *ops); int iomap_file_buffered_write_punch_delalloc(struct inode *inode,
include/linux/migrate.h +1 -0
@@ -18,6 +18,7 @@ struct migration_target_control;* - zero on page migration success; */ #define MIGRATEPAGE_SUCCESS 0 +#define MIGRATEPAGE_UNMAP 1/** * struct movable_operations - Driver page migration
include/net/ip_tunnels.h +1 -1
@@ -252,7 +252,7 @@ static inline void ip_tunnel_init_flow(struct flowi4 *fl4,memset (fl4,0 ,sizeof (*fl4));if (oif) { - fl4->flowi4_l3mdev =l3mdev_master_upper_ifindex_by_index_rcu (net, oif); + fl4->flowi4_l3mdev =l3mdev_master_upper_ifindex_by_index (net, oif);/* Legacy VRF/l3mdev use case */ fl4->flowi4_oif = fl4->flowi4_l3mdev ?0 : oif; }
include/trace/events/afs.h +33 -207
276 lines not on this page · raw message
io_uring/io_uring.c +6 -5
@@ -593,6 +593,8 @@ static bool __io_cqring_overflow_flush(struct io_ring_ctx *ctx, bool force)bool all_flushed;size_t cqe_size =sizeof (struct io_uring_cqe ); +lockdep_assert_held (&ctx->uring_lock); +if (!force &&__io_cqring_events (ctx) == ctx->cq_entries)return false;
@@ -647,12 +649,9 @@ static bool io_cqring_overflow_flush(struct io_ring_ctx *ctx)bool ret = true;if (test_bit (IO_CHECK_CQ_OVERFLOW_BIT , &ctx->check_cq)) { -/* iopoll syncs against uring_lock, not completion_lock */ -if (ctx->flags &IORING_SETUP_IOPOLL ) -mutex_lock (&ctx->uring_lock); +mutex_lock (&ctx->uring_lock); ret =__io_cqring_overflow_flush (ctx, false); -if (ctx->flags &IORING_SETUP_IOPOLL ) -mutex_unlock (&ctx->uring_lock); +mutex_unlock (&ctx->uring_lock); }return ret;
@@ -1405,6 +1404,8 @@ static int io_iopoll_check(struct io_ring_ctx *ctx, long min)int ret =0 ;unsigned long check_cq; +lockdep_assert_held (&ctx->uring_lock); +if (!io_allowed_run_tw (ctx))return -EEXIST ;
io_uring/rw.c +28 -24
97 lines not on this page · raw message
kernel/bpf/cgroup.c +18 -1
@@ -24,6 +24,23 @@DEFINE_STATIC_KEY_ARRAY_FALSE (cgroup_bpf_enabled_key,MAX_CGROUP_BPF_ATTACH_TYPE );EXPORT_SYMBOL (cgroup_bpf_enabled_key); +/* +* cgroup bpf destruction makes heavy use of work items and there can be a lot +* of concurrent destructions. Use a separate workqueue so that cgroup bpf +* destruction work items don't end up filling up max_active of system_wq +* which may lead to deadlock. +*/ +static struct workqueue_struct *cgroup_bpf_destroy_wq; + +static int __init cgroup_bpf_wq_init (void ) +{ + cgroup_bpf_destroy_wq =alloc_workqueue ("cgroup_bpf_destroy" ,0 ,1 ); +if (!cgroup_bpf_destroy_wq) +panic ("Failed to alloc workqueue for cgroup bpf destroy.\n" ); +return 0 ; +} +core_initcall (cgroup_bpf_wq_init); +/* __always_inline is necessary to prevent indirect call through run_prog * function pointer. */
@@ -334,7 +351,7 @@ static void cgroup_bpf_release_fn(struct percpu_ref *ref) struct cgroup *cgrp = container_of(ref, struct cgroup, bpf.refcnt);INIT_WORK (&cgrp->bpf.release_work, cgroup_bpf_release); -queue_work (system_wq, &cgrp->bpf.release_work); +queue_work (cgroup_bpf_destroy_wq, &cgrp->bpf.release_work); }/* Get underlying bpf_prog of bpf_prog_list entry, regardless if it's through
kernel/bpf/lpm_trie.c +1 -1
@@ -650,7 +650,7 @@ static int trie_get_next_key(struct bpf_map *map, void *_key, void *_next_key)if (!key || key->prefixlen > trie->max_prefixlen) goto find_leftmost; - node_stack =kmalloc_array (trie->max_prefixlen, + node_stack =kmalloc_array (trie->max_prefixlen +1 ,sizeof (struct lpm_trie_node *),GFP_ATOMIC | __GFP_NOWARN);if (!node_stack)
kernel/cgroup/cgroup.c +2 -2
@@ -5707,7 +5707,7 @@ static bool cgroup_check_hierarchy_limits(struct cgroup *parent) {struct cgroup *cgroup;int ret = false; -int level =1 ; +int level =0 ;lockdep_assert_held (&cgroup_mutex);
@@ -5715,7 +5715,7 @@ static bool cgroup_check_hierarchy_limits(struct cgroup *parent)if (cgroup->nr_descendants >= cgroup->max_descendants) goto fail; -if (level > cgroup->max_depth) +if (level >= cgroup->max_depth) goto fail; level++;
mm/huge_memory.c +2 -2
@@ -2728,7 +2728,7 @@ int split_huge_page_to_list(struct page *page, struct list_head *list)* split PMDs */ if (!can_split_folio (folio, &extra_pins)) { - ret = -EBUSY ; + ret = -EAGAIN ; goto out_unlock; }
@@ -2780,7 +2780,7 @@ int split_huge_page_to_list(struct page *page, struct list_head *list)xas_unlock (&xas);local_irq_enable ();remap_page (folio,folio_nr_pages (folio)); - ret = -EBUSY ; + ret = -EAGAIN ; } out_unlock:
mm/internal.h +11 -2
@@ -754,8 +754,13 @@ unsigned int reclaim_clean_pages_from_list(struct zone *zone,#define ALLOC_OOM ALLOC_NO_WATERMARKS#endif -#define ALLOC_HARDER 0x10/* try to alloc harder */ -#define ALLOC_HIGH 0x20/* __GFP_HIGH set */ +#define ALLOC_NON_BLOCK 0x10/* Caller cannot block. Allow access +* to 25% of the min watermark or +* 62.5% if __GFP_HIGH is set. +*/ +#define ALLOC_MIN_RESERVE 0x20/* __GFP_HIGH set. Allow access to 50% +* of the min watermark. +*/ #define ALLOC_CPUSET 0x40/* check for correct cpuset */ #define ALLOC_CMA 0x80/* allow allocations from CMA areas */ #ifdef CONFIG_ZONE_DMA32
@@ -763,8 +768,12 @@ unsigned int reclaim_clean_pages_from_list(struct zone *zone,#else #define ALLOC_NOFRAGMENT 0x0#endif +#define ALLOC_HIGHATOMIC 0x200/* Allows access to MIGRATE_HIGHATOMIC */ #define ALLOC_KSWAPD 0x800/* allow waking of kswapd, __GFP_KSWAPD_RECLAIM set */ +/* Flags that allow allocations below the min watermark. */ +#define ALLOC_RESERVES (ALLOC_NON_BLOCK|ALLOC_MIN_RESERVE|ALLOC_HIGHATOMIC|ALLOC_OOM) +enum ttu_flags ;struct tlbflush_unmap_batch ;
mm/kasan/kasan_test.c +0 -27
@@ -1260,32 +1260,6 @@ static void vm_map_ram_tags(struct kunit *test)free_pages ((unsigned long )p_ptr,1 ); } -static void vmalloc_percpu (struct kunit *test) -{ -char __percpu *ptr; -int cpu; - -/* -* This test is specifically crafted for the software tag-based mode, -* the only tag-based mode that poisons percpu mappings. -*/ -KASAN_TEST_NEEDS_CONFIG_ON (test,CONFIG_KASAN_SW_TAGS ); - - ptr =__alloc_percpu (PAGE_SIZE ,PAGE_SIZE ); - -for_each_possible_cpu (cpu) { -char *c_ptr =per_cpu_ptr (ptr, cpu); - -KUNIT_EXPECT_GE (test, (u8 )get_tag (c_ptr), (u8 )KASAN_TAG_MIN ); -KUNIT_EXPECT_LT (test, (u8 )get_tag (c_ptr), (u8 )KASAN_TAG_KERNEL ); - -/* Make sure that in-bounds accesses don't crash the kernel. */ - *c_ptr =0 ; - } - -free_percpu (ptr); -} -/* * Check that the assigned pointer tag falls within the [KASAN_TAG_MIN, * KASAN_TAG_KERNEL) range (note: excluding the match-all tag) for tag-based
@@ -1439,7 +1413,6 @@ static struct kunit_case kasan_kunit_test_cases[] = {KUNIT_CASE (vmalloc_oob),KUNIT_CASE (vmap_tags),KUNIT_CASE (vm_map_ram_tags), -KUNIT_CASE (vmalloc_percpu),KUNIT_CASE (match_all_not_assigned),KUNIT_CASE (match_all_ptr_tag), KUNIT_CASE(match_all_mem_tag),
mm/migrate.c +451 -185
8 lines not on this page · raw message
mm/page_alloc.c +62 -31
93 lines not on this page · raw message
net/mac80211/key.c +25 -17
42 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.