From: Nathan Fontenot <nfont@linux.vnet.ibm.com>
To: Michael Bringmann <mwb@linux.vnet.ibm.com>,
linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org
Cc: Michael Ellerman <mpe@ellerman.id.au>,
John Allen <jallen@linux.vnet.ibm.com>
Subject: Re: [PATCH V13 4/4] powerpc/vphn: Fix numa update end-loop bug
Date: Wed, 6 Sep 2017 09:45:52 -0500 [thread overview]
Message-ID: <0babc60c-8e66-e2f2-c316-c569a2ee1dfb@linux.vnet.ibm.com> (raw)
In-Reply-To: <b967cb9b-efc4-3ff3-27c8-876a81250133@linux.vnet.ibm.com>
On 09/01/2017 10:48 AM, Michael Bringmann wrote:
> powerpc/vphn: On Power systems with shared configurations of CPUs
> and memory, there are some issues with the association of additional
> CPUs and memory to nodes when hot-adding resources. This patch
> fixes an end-of-updates processing problem observed occasionally
> in numa_update_cpu_topology().
>
> Signed-off-by: Michael Bringmann <mwb@linux.vnet.ibm.com>
> ---
> arch/powerpc/mm/numa.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
> index 3a5b334..fccf23f 100644
> --- a/arch/powerpc/mm/numa.c
> +++ b/arch/powerpc/mm/numa.c
> @@ -1410,6 +1410,13 @@ int numa_update_cpu_topology(bool cpus_locked)
> cpu = cpu_last_thread_sibling(cpu);
> }
>
> + /*
> + * Prevent processing of 'updates' from overflowing array
> + * in cases where last entry filled in a 'next' pointer.
> + */
> + if (i)
> + updates[i-1].next = NULL;
> +
This really looks like the bug is in the code above this where we
fill in the updates array for each of the sibling cpus. The code
there assumes that if the current update entry is not the end that
there will be more updates and blindly sets the next pointer.
Perhaps correcting the logic in that code to next pointers. Set the
ud pointer to NULL before the outer for_each_cpu() loop. Then in the
inner for_each_cpu(sibling,...) loop update the ud-> next pointer as
the first operation.
for_each_cpu(sibling, cpu_sibling_mask(cpu)) {
if (ud)
ud->next = &updates[i];
...
}
Obviously untested, but I think this would prevent setting the next
pointer in the last update entry that is filled out erroneously.
-Nathan
> pr_debug("Topology update for the following CPUs:\n");
> if (cpumask_weight(&updated_cpus)) {
> for (ud = &updates[0]; ud; ud = ud->next) {
>
next prev parent reply other threads:[~2017-09-06 14:46 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-01 15:47 [PATCH V13 0/4] powerpc/vphn: Update CPU topology when VPHN enabled Michael Bringmann
2017-09-01 15:48 ` [PATCH V13 1/4] " Michael Bringmann
2017-09-06 14:20 ` Nathan Fontenot
2017-09-01 15:48 ` [PATCH V13 2/4] powerpc/vphn: Improve recognition of PRRN/VPHN Michael Bringmann
2017-09-06 14:24 ` Nathan Fontenot
2017-09-01 15:48 ` [PATCH V13 3/4] powerpc/hotplug: Improve responsiveness of hotplug change Michael Bringmann
2017-09-06 14:33 ` Nathan Fontenot
2017-09-01 15:48 ` [PATCH V13 4/4] powerpc/vphn: Fix numa update end-loop bug Michael Bringmann
2017-09-06 14:45 ` Nathan Fontenot [this message]
2017-09-06 22:03 ` Michael Bringmann
2017-09-07 13:35 ` Nathan Fontenot
2017-09-07 20:04 ` Michael Bringmann
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=0babc60c-8e66-e2f2-c316-c569a2ee1dfb@linux.vnet.ibm.com \
--to=nfont@linux.vnet.ibm.com \
--cc=jallen@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=mwb@linux.vnet.ibm.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).