linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alexander Shishkin <alexander.shishkin@linux.intel.com>
To: Song Liu <songliubraving@fb.com>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
	Kernel Team <Kernel-team@fb.com>,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	Jiri Olsa <jolsa@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	alexander.shishkin@linux.intel.com
Subject: Re: [PATCH] perf/core: fix mlock accounting in perf_mmap()
Date: Wed, 22 Jan 2020 10:50:35 +0200	[thread overview]
Message-ID: <878slzc1t0.fsf@ashishki-desk.ger.corp.intel.com> (raw)
In-Reply-To: <5145CBD8-9CBA-4B26-B48E-2E974E42A28E@fb.com>

Song Liu <songliubraving@fb.com> writes:

> Actually, I think this is cleaner. 

I don't think multiple conditional blocks are cleaner, at least in this
case.

> diff --git i/kernel/events/core.c w/kernel/events/core.c
> index 2173c23c25b4..debd84fcf9cc 100644
> --- i/kernel/events/core.c
> +++ w/kernel/events/core.c
> @@ -5916,14 +5916,18 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)
>          */
>         user_lock_limit *= num_online_cpus();
>
> -       user_locked = atomic_long_read(&user->locked_vm) + user_extra;
> +       user_locked = atomic_long_read(&user->locked_vm);
>
>         if (user_locked > user_lock_limit) {
> +               /* charge all to pinned_vm */
> +               extra = user_extra;
> +               user_extra = 0;
> +       } else if (user_lock + user_extra > user_lock_limit)

You probably mean "user_locked" here.

>                 /*
>                  * charge locked_vm until it hits user_lock_limit;
>                  * charge the rest from pinned_vm
>                  */
> -               extra = user_locked - user_lock_limit;
> +               extra = user_locked + user_extra - user_lock_limit;

To me, this is a bit harder to read.

>                 user_extra -= extra;
>         }
>
> Alexander, does this look good to you? 

I like to think of this as: we charge the pages to locked_vm until we
exhaust user_lock_limit, and the rest we charge to pinned_vm. Everything
else are just corner cases, and they fit into the same general case. When
we start calculating each corner case in its own block, we just multiply
the potential errors. And there have been errors in this particular path
before. So, the shorter, and the fewer the "if...else if..." statements,
the better it looks to me. Otherwise, it's a matter of preference.

Thanks,
--
Alex

      reply	other threads:[~2020-01-22  8:50 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-17 23:45 [PATCH] perf/core: fix mlock accounting in perf_mmap() Song Liu
2020-01-20  8:24 ` Alexander Shishkin
2020-01-21 18:55   ` Song Liu
2020-01-23  9:19     ` Alexander Shishkin
2020-01-23 17:24       ` Song Liu
2020-01-21 19:35   ` Song Liu
2020-01-22  8:50     ` Alexander Shishkin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=878slzc1t0.fsf@ashishki-desk.ger.corp.intel.com \
    --to=alexander.shishkin@linux.intel.com \
    --cc=Kernel-team@fb.com \
    --cc=acme@redhat.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=songliubraving@fb.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).