powerpc/vphn: parsing code rewrite
authorGreg Kurz <gkurz@linux.vnet.ibm.com>
Mon, 23 Feb 2015 15:14:37 +0000 (16:14 +0100)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 17 Mar 2015 23:48:59 +0000 (10:48 +1100)
commit3338a65badd5758c8723e2b1e5a0db88151f2774
tree64d0f14de7a054c890dcd620b8b9281d2d183886
parent4b6cfb2a8cd7520e8a747718e5c1da047697ca31
powerpc/vphn: parsing code rewrite

The current VPHN parsing logic has some flaws that this patch aims to fix:

1) when the value 0xffff is read, the value 0xffffffff gets added to the
   the output list and its element count isn't incremented. This is wrong.
   According to PAPR+ the domain identifiers are packed into a sequence
   terminated by the "reserved value of all ones". This means that 0xffff
   is a stream terminator.

2) the combination of byteswaps and casts make the code hardly readable.
   Let's parse the stream one 16-bit field at a time instead.

3) it is assumed that the hypercall returns 12 32-bit values packed into
   6 64-bit registers. According to PAPR+, the domain identifiers may be
   streamed as 16-bit values. Let's increase the number of expected numbers
   to 24.

Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/mm/vphn.c
arch/powerpc/mm/vphn.h