[Acked] [Trusty/Utopic][SRU][PATCH] powerpc/vphn: NUMA node code expects big-endian
Andy Whitcroft
apw at canonical.com
Mon Dec 15 17:44:09 UTC 2014
On Mon, Dec 15, 2014 at 11:11:55AM -0600, Chris J Arges wrote:
> From: Greg Kurz <gkurz at linux.vnet.ibm.com>
>
> BugLink: http://bugs.launchpad.net/bugs/1401150
>
> The associativity domain numbers are obtained from the hypervisor through
> registers and written into memory by the guest: the packed array passed to
> vphn_unpack_associativity() is then native-endian, unlike what was assumed
> in the following commit:
>
> commit b08a2a12e44eaec5024b2b969f4fcb98169d1ca3 > Author: Alistair Popple <alistair at popple.id.au>
> Date: Wed Aug 7 02:01:44 2013 +1000
>
> powerpc: Make NUMA device node code endian safe
>
> This issue fills the topology with bogus data and makes it unusable. It may
> lead to severe performance breakdowns.
>
> We should ideally patch the vphn_unpack_associativity() function to do the
> 64-bit loads, but this requires some more brain storming.
>
> In the meantime, let's go for a suboptimal and temporary bug fix: this patch
> converts each 64-bit value of the packed array to big endian, as expected by
> the current parsing code in vphn_unpack_associativity().
>
> Signed-off-by: Greg Kurz <gkurz at linux.vnet.ibm.com>
> Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>
> (cherry picked from commit 5c9fb1899400096c6818181c525897a31d57e488)
> Signed-off-by: Chris J Arges <chris.j.arges at canonical.com>
> ---
> arch/powerpc/mm/numa.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
> index c752d50..a115c56 100644
> --- a/arch/powerpc/mm/numa.c
> +++ b/arch/powerpc/mm/numa.c
> @@ -1417,8 +1417,11 @@ static long hcall_vphn(unsigned long cpu, __be32 *associativity)
> long retbuf[PLPAR_HCALL9_BUFSIZE] = {0};
> u64 flags = 1;
> int hwcpu = get_hard_smp_processor_id(cpu);
> + int i;
>
> rc = plpar_hcall9(H_HOME_NODE_ASSOCIATIVITY, retbuf, flags, hwcpu);
> + for (i = 0; i < 6; i++)
> + retbuf[i] = cpu_to_be64(retbuf[i]);
> vphn_unpack_associativity(retbuf, associativity);
>
> return rc;
Uggg. I assume that as this is "temporary" that someone will make this
6 go away upstream. Nasty.
Acked-by: Andy Whitcroft <apw at canonical.com>
-apw
More information about the kernel-team
mailing list