mirror-linux/tools/include/linux
Suren Baghdasaryan 3104138517 mm: make vma cache SLAB_TYPESAFE_BY_RCU
To enable SLAB_TYPESAFE_BY_RCU for vma cache we need to ensure that
object reuse before RCU grace period is over will be detected by
lock_vma_under_rcu().

Current checks are sufficient as long as vma is detached before it is
freed.  The only place this is not currently happening is in exit_mmap(). 
Add the missing vma_mark_detached() in exit_mmap().

Another issue which might trick lock_vma_under_rcu() during vma reuse is
vm_area_dup(), which copies the entire content of the vma into a new one,
overriding new vma's vm_refcnt and temporarily making it appear as
attached.  This might trick a racing lock_vma_under_rcu() to operate on a
reused vma if it found the vma before it got reused.  To prevent this
situation, we should ensure that vm_refcnt stays at detached state (0)
when it is copied and advances to attached state only after it is added
into the vma tree.  Introduce vm_area_init_from() which preserves new
vma's vm_refcnt and use it in vm_area_dup().  Since all vmas are in
detached state with no current readers when they are freed,

lock_vma_under_rcu() will not be able to take vm_refcnt after vma got
detached even if vma is reused. vma_mark_attached() in modified to
include a release fence to ensure all stores to the vma happen before
vm_refcnt gets initialized.

Finally, make vm_area_cachep SLAB_TYPESAFE_BY_RCU. This will facilitate
vm_area_struct reuse and will minimize the number of call_rcu() calls.

[surenb@google.com: remove atomic_set_release() usage in tools/]
  Link: https://lkml.kernel.org/r/20250217054351.2973666-1-surenb@google.com
Link: https://lkml.kernel.org/r/20250213224655.1680278-18-surenb@google.com
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Reviewed-by: Vlastimil Babka <vbabka@suse.cz>
Tested-by: Shivank Garg <shivankg@amd.com>
  Link: https://lkml.kernel.org/r/5e19ec93-8307-47c2-bb13-3ddf7150624e@amd.com
Cc: Christian Brauner <brauner@kernel.org>
Cc: David Hildenbrand <david@redhat.com>
Cc: David Howells <dhowells@redhat.com>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Hugh Dickins <hughd@google.com>
Cc: Jann Horn <jannh@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Klara Modin <klarasmodin@gmail.com>
Cc: Liam R. Howlett <Liam.Howlett@Oracle.com>
Cc: Lokesh Gidra <lokeshgidra@google.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Mateusz Guzik <mjguzik@gmail.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Minchan Kim <minchan@google.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Pasha Tatashin <pasha.tatashin@soleen.com>
Cc: "Paul E . McKenney" <paulmck@kernel.org>
Cc: Peter Xu <peterx@redhat.com>
Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Shakeel Butt <shakeel.butt@linux.dev>
Cc: Sourav Panda <souravpanda@google.com>
Cc: Wei Yang <richard.weiyang@gmail.com>
Cc: Will Deacon <will@kernel.org>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2025-03-16 22:06:21 -07:00
..
sched
unaligned
align.h tools: move alignment-related macros to new <linux/align.h> 2024-04-01 10:49:28 +01:00
arm-smccc.h
atomic.h
bitfield.h
bitmap.h radix tree test suite: put definition of bitmap_clear() into lib/bitmap.c 2024-07-10 14:24:27 -07:00
bitops.h asm-generic cleanups for 6.10 2024-05-20 15:18:34 -07:00
bits.h tools headers: Synchronize {uapi/}linux/bits.h with the kernel sources 2024-10-28 12:32:25 -03:00
btf_ids.h tools/resolve_btfids: fix build with musl libc 2024-03-28 18:58:29 -07:00
bug.h
build_bug.h
cache.h
compiler-gcc.h Improve consistency of '#error' directive messages 2024-11-11 17:17:04 -08:00
compiler.h memblock: updates for 6.12-rc1 2024-09-25 11:35:19 -07:00
compiler_types.h work around gcc bugs with 'asm goto' with outputs 2024-02-09 15:57:48 -08:00
const.h compiler.h: move __is_constexpr() to compiler.h 2023-10-18 14:43:22 -07:00
coresight-pmu.h perf: cs-etm: Support version 0.1 of HW_ID packets 2024-08-29 15:56:13 -03:00
ctype.h
debugfs.h
delay.h
err.h docs: move x86 documentation into Documentation/arch/ 2023-03-30 12:58:51 -06:00
export.h
filter.h bpftool: Probe for ISA v4 instruction set extension 2024-12-12 17:25:17 +01:00
find.h
ftrace.h
gfp.h
gfp_types.h
hash.h
hashtable.h
init.h memblock test: add the definition of __setup() 2024-08-06 08:21:25 +03:00
interrupt.h
interval_tree_generic.h
io.h
jhash.h
kallsyms.h
kasan-tags.h tools: arm64: Update sysreg.h header files 2025-01-12 12:50:11 +00:00
kconfig.h
kern_levels.h
kernel.h memblock tests: fix undefined reference to `panic' 2024-04-04 11:08:33 +03:00
linkage.h more s390 updates for 6.12 merge window 2024-09-28 09:11:46 -07:00
list.h
list_sort.h
log2.h
math.h
math64.h
mm.h memblock test: fix implicit declaration of function 'virt_to_phys' 2024-08-06 08:20:03 +03:00
module.h
mutex.h
nmi.h
numa.h memblock tests: fix implicit declaration of function 'numa_valid_node' 2024-07-05 11:24:47 +03:00
objtool_types.h objtool: Convert {.UN}REACHABLE to ANNOTATE 2024-12-02 12:01:44 +01:00
overflow.h
panic.h memblock tests: fix undefined reference to `panic' 2024-04-04 11:08:33 +03:00
pfn.h mm/memblock: introduce a new helper memblock_estimated_nr_free_pages() 2024-08-11 19:18:52 +03:00
poison.h slab: delete useless RED_INACTIVE and RED_ACTIVE 2024-06-24 21:41:41 +02:00
rbtree.h
rbtree_augmented.h tools lib rbtree: pick some improvements from the kernel rbtree code 2024-05-08 08:41:27 -07:00
rcu.h
refcount.h mm: make vma cache SLAB_TYPESAFE_BY_RCU 2025-03-16 22:06:21 -07:00
ring_buffer.h tools: Optimize ring buffer for riscv 2024-09-20 01:46:47 -07:00
rwsem.h maple_tree: update check_forking() and bench_forking() 2023-12-10 16:51:33 -08:00
seq_file.h memblock tests: fix warning ‘struct seq_file’ declared inside parameter list 2023-09-14 10:51:28 +03:00
sizes.h
slab.h slab: remove PARTIAL_NODE slab_state 2024-03-05 11:12:47 +01:00
spinlock.h maple_tree: introduce {mtree,mas}_lock_nested() 2023-12-10 16:51:31 -08:00
static_call_types.h
string.h memblock: updates for 6.12-rc1 2024-09-25 11:35:19 -07:00
stringify.h
time64.h
types.h tools/virtio: fix build caused by virtio_ring changes 2023-04-21 03:02:35 -04:00
unaligned.h tools headers: Update the linux/unaligned.h copy with the kernel sources 2024-10-28 12:34:28 -03:00
zalloc.h