summaryrefslogtreecommitdiff
path: root/kernel/bpf/stackmap.c
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2026-10-09 21:05:28 +0200
committerMark Brown <broonie@kernel.org>2026-10-09 21:05:28 +0200
commitf3e80afbdf1062ea584754bb17569ee363adb267 (patch)
tree4597822c603897ce4c44de74984c7c0b18e98615 /kernel/bpf/stackmap.c
parente1d3fd91d7f0e85fb4b836a9553910c8f523a980 (diff)
parent605853007d931814e37dc6b7eb60f56c2d102526 (diff)
downloadlinux-next-f3e80afbdf1062ea584754bb17569ee363adb267.tar.gz
linux-next-f3e80afbdf1062ea584754bb17569ee363adb267.zip
Merge branch 'for-next' of https://git.kernel.org/pub/scm/linux/kernel/git/mm/linux.git
Diffstat (limited to 'kernel/bpf/stackmap.c')
-rw-r--r--kernel/bpf/stackmap.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c
index d09d4c3fe547..f7e8d766d128 100644
--- a/kernel/bpf/stackmap.c
+++ b/kernel/bpf/stackmap.c
@@ -272,13 +272,10 @@ struct stack_map_vma_lock {
/*
* Acquire a stable read-side reference on the VMA covering @ip.
*
- * With CONFIG_PER_VMA_LOCK=y this returns a VMA with its per-VMA read
- * lock held and mmap_lock dropped, so the caller may sleep.
- *
- * With CONFIG_PER_VMA_LOCK=n it returns a VMA with mmap_lock still
- * held; the caller must snapshot any fields it needs and pin vm_file
- * with get_file() before stack_map_unlock_vma() drops mmap_lock, as
- * the VMA may be split, merged, or freed after that.
+ * On NOMMU configurations, returns with the mmap_lock held. If the MMU
+ * is enabled, the per-VMA lock will be held instead. The lock
+ * should be released with stack_map_unlock_vma() which will release the
+ * appropriate lock. Once the lock is released, the VMA may be freed.
*
* Returns NULL on failure, in which case no lock is held.
*/
@@ -288,7 +285,6 @@ stack_map_lock_vma(struct stack_map_vma_lock *lock, unsigned long ip)
struct mm_struct *mm = lock->mm;
struct vm_area_struct *vma;
- /* noop under !CONFIG_PER_VMA_LOCK */
vma = lock_vma_under_rcu(mm, ip);
if (vma) {
lock->vma = vma;
@@ -308,21 +304,20 @@ stack_map_lock_vma(struct stack_map_vma_lock *lock, unsigned long ip)
return NULL;
}
-#ifdef CONFIG_PER_VMA_LOCK
+#ifdef CONFIG_MMU
if (!vma_start_read_locked(vma)) {
mmap_read_unlock(mm);
return NULL;
}
mmap_read_unlock(mm);
#endif
-
lock->vma = vma;
return vma;
}
static void stack_map_unlock_vma(struct stack_map_vma_lock *lock)
{
-#ifdef CONFIG_PER_VMA_LOCK
+#ifdef CONFIG_MMU
vma_end_read(lock->vma);
#else
mmap_read_unlock(lock->mm);