Re: [PATCH v3 05/15] perf: Merge consecutive conditionals in perf_mmap()

From: Lorenzo Stoakes
Date: Wed Aug 13 2025 - 01:43:30 EST


On Tue, Aug 12, 2025 at 12:39:03PM +0200, Peter Zijlstra wrote:
> if (cond) {
> A;
> } else {
> B;
> }
>
> if (cond) {
> C;
> } else {
> D;
> }
>
> into:
>
> if (cond) {
> A;
> C;
> } else {
> B;
> D;
> }
>
> Notably the conditions are not identical in form, but are equivalent.

Good to point out.

>
> Suggested-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>

Seems logical and reduces complexity, so LGTM and:

Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>

> ---
> kernel/events/core.c | 41 +++++++++++++++++++----------------------
> 1 file changed, 19 insertions(+), 22 deletions(-)
>
> --- a/kernel/events/core.c
> +++ b/kernel/events/core.c
> @@ -7064,6 +7064,25 @@ static int perf_mmap(struct file *file,
> if (vma->vm_flags & VM_WRITE)
> flags |= RING_BUFFER_WRITABLE;
>
> + rb = rb_alloc(nr_pages,
> + event->attr.watermark ? event->attr.wakeup_watermark : 0,
> + event->cpu, flags);
> +
> + if (!rb) {
> + ret = -ENOMEM;
> + goto unlock;
> + }
> +
> + atomic_set(&rb->mmap_count, 1);
> + rb->mmap_user = get_current_user();
> + rb->mmap_locked = extra;
> +
> + ring_buffer_attach(event, rb);
> +
> + perf_event_update_time(event);
> + perf_event_init_userpage(event);
> + perf_event_update_userpage(event);
> + ret = 0;
> } else {
> /*
> * AUX area mapping: if rb->aux_nr_pages != 0, it's already
> @@ -7120,29 +7139,7 @@ static int perf_mmap(struct file *file,
>
> if (vma->vm_flags & VM_WRITE)
> flags |= RING_BUFFER_WRITABLE;
> - }
>
> - if (!rb) {
> - rb = rb_alloc(nr_pages,
> - event->attr.watermark ? event->attr.wakeup_watermark : 0,
> - event->cpu, flags);
> -
> - if (!rb) {
> - ret = -ENOMEM;
> - goto unlock;
> - }
> -
> - atomic_set(&rb->mmap_count, 1);
> - rb->mmap_user = get_current_user();
> - rb->mmap_locked = extra;
> -
> - ring_buffer_attach(event, rb);
> -
> - perf_event_update_time(event);
> - perf_event_init_userpage(event);
> - perf_event_update_userpage(event);
> - ret = 0;
> - } else {
> ret = rb_alloc_aux(rb, event, vma->vm_pgoff, nr_pages,
> event->attr.aux_watermark, flags);
> if (!ret) {
>
>