[PATCH 12/13] perf: convert VMA flag tests to use vma_flags_t
From: Lorenzo Stoakes (ARM)
Date: Thu Nov 05 2026 - 16:50:51 EST
Replace use of the legacy vm_flags_t flags with vma_flags_t values in the
perf mmap and mmap event logic.
No functional change intended.
Signed-off-by: Lorenzo Stoakes (ARM) <ljs@xxxxxxxxxx>
---
kernel/events/core.c | 26 ++++++++++++++------------
1 file changed, 14 insertions(+), 12 deletions(-)
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 457d75ea7142..6bc5dfacfa48 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -7224,6 +7224,7 @@ static int map_range(struct perf_buffer *rb, struct vm_area_struct *vma)
unsigned long va = vma->vm_start + PAGE_SIZE * pagenum;
struct page *page = perf_mmap_to_page(rb,
vma_start_pgoff(vma) + pagenum);
+ vma_flags_t vma_flags = vma->flags;
if (page == NULL) {
err = -EINVAL;
@@ -7231,8 +7232,9 @@ static int map_range(struct perf_buffer *rb, struct vm_area_struct *vma)
}
/* Map readonly, perf_mmap_pfn_mkwrite() called on write fault. */
+ vma_flags_clear(&vma_flags, VMA_SHARED_BIT);
err = remap_pfn_range(vma, va, page_to_pfn(page), PAGE_SIZE,
- vm_get_page_prot(vma->vm_flags & ~VM_SHARED));
+ vma_flags_to_page_prot(vma_flags));
if (err)
break;
}
@@ -7350,7 +7352,7 @@ static int perf_mmap_rb(struct vm_area_struct *vma, struct perf_event *event,
if (!perf_mmap_calc_limits(vma, &user_extra, &extra))
return -EPERM;
- if (vma->vm_flags & VM_WRITE)
+ if (vma_test(vma, VMA_WRITE_BIT))
rb_flags |= RING_BUFFER_WRITABLE;
rb = rb_alloc(nr_pages,
@@ -7431,7 +7433,7 @@ static int perf_mmap_aux(struct vm_area_struct *vma, struct perf_event *event,
WARN_ON(!rb && event->rb);
- if (vma->vm_flags & VM_WRITE)
+ if (vma_test(vma, VMA_WRITE_BIT))
rb_flags |= RING_BUFFER_WRITABLE;
ret = rb_alloc_aux(rb, event, pgoff_start, nr_pages,
@@ -7466,7 +7468,7 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)
if (event->cpu == -1 && event->attr.inherit)
return -EINVAL;
- if (!(vma->vm_flags & VM_SHARED))
+ if (!vma_test(vma, VMA_SHARED_BIT))
return -EINVAL;
ret = security_perf_event_read(event);
@@ -9829,7 +9831,7 @@ static int perf_event_mmap_match(struct perf_event *event,
{
struct perf_mmap_event *mmap_event = data;
struct vm_area_struct *vma = mmap_event->vma;
- int executable = vma->vm_flags & VM_EXEC;
+ bool executable = vma_test(vma, VMA_EXEC_BIT);
return (!executable && event->attr.mmap_data) ||
(executable && (event->attr.mmap || event->attr.mmap2));
@@ -9862,7 +9864,7 @@ static void perf_event_mmap_output(struct perf_event *event,
if (use_build_id)
misc |= PERF_RECORD_MISC_MMAP_BUILD_ID;
}
- if (!(mmap_event->vma->vm_flags & VM_EXEC))
+ if (!vma_test(mmap_event->vma, VMA_EXEC_BIT))
misc |= PERF_RECORD_MISC_MMAP_DATA;
perf_event_header__init(&mmap_event->event_id.header, &sample,
@@ -9913,19 +9915,19 @@ static void perf_event_mmap_event(struct perf_mmap_event *mmap_event)
char *buf = NULL;
char *name = NULL;
- if (vma->vm_flags & VM_READ)
+ if (vma_test(vma, VMA_READ_BIT))
prot |= PROT_READ;
- if (vma->vm_flags & VM_WRITE)
+ if (vma_test(vma, VMA_WRITE_BIT))
prot |= PROT_WRITE;
- if (vma->vm_flags & VM_EXEC)
+ if (vma_test(vma, VMA_EXEC_BIT))
prot |= PROT_EXEC;
- if (vma->vm_flags & VM_MAYSHARE)
+ if (vma_test(vma, VMA_MAYSHARE_BIT))
flags = MAP_SHARED;
else
flags = MAP_PRIVATE;
- if (vma->vm_flags & VM_LOCKED)
+ if (vma_test(vma, VMA_LOCKED_BIT))
flags |= MAP_LOCKED;
if (vma_is_hugetlb(vma))
flags |= MAP_HUGETLB;
@@ -10091,7 +10093,7 @@ static void perf_addr_filters_adjust(struct vm_area_struct *vma)
* Data tracing isn't supported yet and as such there is no need
* to keep track of anything that isn't related to executable code:
*/
- if (!(vma->vm_flags & VM_EXEC))
+ if (!vma_test(vma, VMA_EXEC_BIT))
return;
rcu_read_lock();
--
2.56.0