From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Gregory Price <gourry.memverge@gmail.com>
Cc: <linux-mm@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-arch@vger.kernel.org>, <linux-api@vger.kernel.org>,
<linux-cxl@vger.kernel.org>, <luto@kernel.org>,
<tglx@linutronix.de>, <mingo@redhat.com>, <bp@alien8.de>,
<dave.hansen@linux.intel.com>, <hpa@zytor.com>, <arnd@arndb.de>,
<akpm@linux-foundation.org>, <x86@kernel.org>,
Gregory Price <gregory.price@memverge.com>
Subject: Re: [RFC PATCH 1/3] mm/mempolicy: refactor do_set_mempolicy for code re-use
Date: Mon, 2 Oct 2023 12:03:17 +0100 [thread overview]
Message-ID: <20231002120317.000058ef@Huawei.com> (raw)
In-Reply-To: <20230914235457.482710-2-gregory.price@memverge.com>
On Thu, 14 Sep 2023 19:54:55 -0400
Gregory Price <gourry.memverge@gmail.com> wrote:
> Refactors do_set_mempolicy into swap_mempolicy and do_set_mempolicy
> so that swap_mempolicy can be re-used with set_mempolicy2.
>
> Signed-off-by: Gregory Price <gregory.price@memverge.com>
Obviously this is an RFC, so you probably didn't give it the polish
a finished patch might have. Still I was curious and reading it and
I can't resist pointing out trivial stuff.. So....
> ---
> mm/mempolicy.c | 44 +++++++++++++++++++++++++++++---------------
> 1 file changed, 29 insertions(+), 15 deletions(-)
>
> diff --git a/mm/mempolicy.c b/mm/mempolicy.c
> index 42b5567e3773..f49337f6f300 100644
> --- a/mm/mempolicy.c
> +++ b/mm/mempolicy.c
> @@ -855,28 +855,21 @@ static int mbind_range(struct vma_iterator *vmi, struct vm_area_struct *vma,
> return vma_replace_policy(vma, new_pol);
> }
>
> -/* Set the process memory policy */
> -static long do_set_mempolicy(unsigned short mode, unsigned short flags,
> - nodemask_t *nodes)
> +/* Swap in a new mempolicy, release the old one if successful */
Not really swapping. More replacing given we don't get the
old one back to do something else with it.
> +static long swap_mempolicy(struct mempolicy *new,
> + nodemask_t *nodes)
Excessive wrapping.
> {
> - struct mempolicy *new, *old;
> - NODEMASK_SCRATCH(scratch);
> + struct mempolicy *old = NULL;
> int ret;
> + NODEMASK_SCRATCH(scratch);
I'd avoid the reordering as makes it look like slightly more is happening
in this change than is actually the case.
>
> if (!scratch)
> return -ENOMEM;
>
> - new = mpol_new(mode, flags, nodes);
> - if (IS_ERR(new)) {
> - ret = PTR_ERR(new);
> - goto out;
> - }
> -
> task_lock(current);
> ret = mpol_set_nodemask(new, nodes, scratch);
> if (ret) {
> task_unlock(current);
> - mpol_put(new);
> goto out;
> }
>
> @@ -884,14 +877,35 @@ static long do_set_mempolicy(unsigned short mode, unsigned short flags,
> current->mempolicy = new;
> if (new && new->mode == MPOL_INTERLEAVE)
> current->il_prev = MAX_NUMNODES-1;
> - task_unlock(current);
> - mpol_put(old);
> - ret = 0;
> out:
> + task_unlock(current);
> + if (old)
> + mpol_put(old);
It's protected against NULL parameter internally, so
mpol_put(old);
which has advantage that a block of diff will hopefully disappear making
this patch easier to read.
> +
> NODEMASK_SCRATCH_FREE(scratch);
> return ret;
> }
>
> +/* Set the process memory policy */
> +static long do_set_mempolicy(unsigned short mode, unsigned short flags,
> + nodemask_t *nodes)
> +{
> + struct mempolicy *new;
> + int ret;
> +
> + new = mpol_new(mode, flags, nodes);
> + if (IS_ERR(new)) {
> + ret = PTR_ERR(new);
> + goto out;
Given nothing to do at out lable, in keeping with at least some local
style, you could do direct returns on errors.
if (IS_ERR(new))
return PTR_ERR(new)
ret = swap_mempolicy(new, nodes);
if (ret) {
mpol_put(new);
return ret;
}
return 0;
> + }
> +
> + ret = swap_mempolicy(new, nodes);
> + if (ret)
> + mpol_put(new);
> +out:
> + return ret;
> +}
> +
> /*
> * Return nodemask for policy for get_mempolicy() query
> *
next prev parent reply other threads:[~2023-10-02 11:03 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-14 23:54 [RFC PATCH 0/3] mm/mempolicy: set/get_mempolicy2 Gregory Price
2023-09-14 23:54 ` [RFC PATCH 1/3] mm/mempolicy: refactor do_set_mempolicy for code re-use Gregory Price
2023-10-02 11:03 ` Jonathan Cameron [this message]
2023-09-14 23:54 ` [RFC PATCH 2/3] mm/mempolicy: Implement set_mempolicy2 and get_mempolicy2 syscalls Gregory Price
2023-09-15 1:29 ` kernel test robot
2023-09-15 2:12 ` kernel test robot
2023-09-15 4:21 ` kernel test robot
2023-10-02 13:30 ` Jonathan Cameron
2023-10-02 15:30 ` Gregory Price
2023-10-02 18:03 ` Gregory Price
2023-09-14 23:54 ` [RFC PATCH 3/3] mm/mempolicy: implement a partial-interleave mempolicy Gregory Price
2023-10-02 13:40 ` Jonathan Cameron
2023-10-02 16:10 ` Gregory Price
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=20231002120317.000058ef@Huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=gourry.memverge@gmail.com \
--cc=gregory.price@memverge.com \
--cc=hpa@zytor.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-cxl@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.