From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>,
paulus@samba.org, mpe@ellerman.id.au
Cc: linuxppc-dev@lists.ozlabs.org,
Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Subject: Re: [PATCH] powerpc/mm/cxl: Add barrier when setting mm cpumask
Date: Mon, 28 Aug 2017 16:39:55 +1000 [thread overview]
Message-ID: <1503902395.4850.0.camel@kernel.crashing.org> (raw)
In-Reply-To: <20170828062530.5789-1-aneesh.kumar@linux.vnet.ibm.com>
On Mon, 2017-08-28 at 11:55 +0530, Aneesh Kumar K.V wrote:
> We need to add memory barrier so that the page table walk doesn't happen
> before the cpumask is set and made visible to the other cpus. We need
> to use a sync here instead of lwsync because lwsync is not sufficient for
> store/load ordering.
>
> We also need to add an if (mm) check so that we do the right thing when called
> with a kernel context. For kernel context, we have mm = NULL. W.r.t kernel
> address we can skip setting the mm cpumask.
>
> Fixes: 0f4bc0932e ("powerpc/mm/cxl: Add the fault handling cpu to mm cpumask")
> Cc: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
> Reported-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
> ---
> drivers/misc/cxl/fault.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/misc/cxl/fault.c b/drivers/misc/cxl/fault.c
> index ab507e4ed69b..caed2a523bee 100644
> --- a/drivers/misc/cxl/fault.c
> +++ b/drivers/misc/cxl/fault.c
> @@ -141,9 +141,19 @@ int cxl_handle_mm_fault(struct mm_struct *mm, u64 dsisr, u64 dar)
> /*
> * Add the fault handling cpu to task mm cpumask so that we
> * can do a safe lockless page table walk when inserting the
> - * hash page table entry.
> + * hash page table entry. This function get called with a
> + * valid mm for all user space applications. Hence using
> + * if (mm) check is sufficient here.
> */
> - cpumask_set_cpu(smp_processor_id(), mm_cpumask(mm));
> + if (mm) {
> + cpumask_set_cpu(smp_processor_id(), mm_cpumask(mm));
First test if it's already set as this should be quite common and the
cost of setting is a full atomic.
> + /*
> + * We need to make sure we walk the table only after
> + * we update the cpumask. The other side of the barrier is
> + * explained * in serialize_against_pte_lookup()
> + */
> + smp_mb();
> + }
> if ((result = copro_handle_mm_fault(mm, dar, dsisr, &flt))) {
> pr_devel("copro_handle_mm_fault failed: %#x\n", result);
> return result;
next prev parent reply other threads:[~2017-08-28 6:40 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-28 6:25 [PATCH] powerpc/mm/cxl: Add barrier when setting mm cpumask Aneesh Kumar K.V
2017-08-28 6:30 ` Andrew Donnellan
2017-08-28 6:39 ` Benjamin Herrenschmidt [this message]
2017-08-28 7:53 ` Aneesh Kumar K.V
2017-08-28 7:59 ` Benjamin Herrenschmidt
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=1503902395.4850.0.camel@kernel.crashing.org \
--to=benh@kernel.crashing.org \
--cc=andrew.donnellan@au1.ibm.com \
--cc=aneesh.kumar@linux.vnet.ibm.com \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=paulus@samba.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.