Skip to content

Commit

Permalink
perf/core: Further simplify perf_mmap()
Browse files Browse the repository at this point in the history
Perform CSE and such.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Ravi Bangoria <ravi.bangoria@amd.com>
Link: https://lore.kernel.org/r/20241104135519.354909594@infradead.org
  • Loading branch information
Peter Zijlstra authored and Ingo Molnar committed Mar 4, 2025
1 parent 9548783 commit 0c8a4e4
Showing 1 changed file with 10 additions and 11 deletions.
21 changes: 10 additions & 11 deletions kernel/events/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -6698,9 +6698,18 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)
return ret;

vma_size = vma->vm_end - vma->vm_start;
nr_pages = vma_size / PAGE_SIZE;

if (nr_pages > INT_MAX)
return -ENOMEM;

if (vma_size != PAGE_SIZE * nr_pages)
return -EINVAL;

user_extra = nr_pages;

if (vma->vm_pgoff == 0) {
nr_pages = (vma_size / PAGE_SIZE) - 1;
nr_pages -= 1;

/*
* If we have rb pages ensure they're a power-of-two number, so we
Expand All @@ -6709,9 +6718,6 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)
if (nr_pages != 0 && !is_power_of_2(nr_pages))
return -EINVAL;

if (vma_size != PAGE_SIZE * (1 + nr_pages))
return -EINVAL;

WARN_ON_ONCE(event->ctx->parent_ctx);
again:
mutex_lock(&event->mmap_mutex);
Expand All @@ -6735,8 +6741,6 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)
rb = event->rb;
goto unlock;
}

user_extra = nr_pages + 1;
} else {
/*
* AUX area mapping: if rb->aux_nr_pages != 0, it's already
Expand All @@ -6748,10 +6752,6 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)
if (!event->rb)
return -EINVAL;

nr_pages = vma_size / PAGE_SIZE;
if (nr_pages > INT_MAX)
return -ENOMEM;

mutex_lock(&event->mmap_mutex);
ret = -EINVAL;

Expand Down Expand Up @@ -6795,7 +6795,6 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)
}

atomic_set(&rb->aux_mmap_count, 1);
user_extra = nr_pages;
}

user_lock_limit = sysctl_perf_event_mlock >> (PAGE_SHIFT - 10);
Expand Down

0 comments on commit 0c8a4e4

Please sign in to comment.