Commit 70785f43 authored by Paul Mackerras's avatar Paul Mackerras Committed by Linus Torvalds

[PATCH] ppc64: make sure lppaca doesn't cross page boundary

This patch is from Will Schmidt <willschm@us.ibm.com>, with some extra
comments from me.

On iSeries and on POWER5 machines, there is a data structure which is
used for communication between the hypervisor and the kernel, called
the `lppaca'.  The kernel tells the hypervisor where it is, and the
hypervisor requires that it doesn't cross a page boundary.  With other
changes in the last few months we have ended up with a situation where
it could cross a page boundary.  This patch increases the alignment
requirement for the struct to make sure that it can't cross a page
boundary.

This is a bug fix and should go into 2.6.10.
Signed-off-by: default avatarWill Schmidt  <willschm@us.ibm.com>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 5e9a9303
...@@ -99,11 +99,17 @@ struct paca_struct { ...@@ -99,11 +99,17 @@ struct paca_struct {
u64 exdsi[8]; /* used for linear mapping hash table misses */ u64 exdsi[8]; /* used for linear mapping hash table misses */
/* /*
* iSeries structues which the hypervisor knows about - Not * iSeries structure which the hypervisor knows about -
* sure if these particularly need to be cacheline aligned. * this structure should not cross a page boundary.
* The vpa_init/register_vpa call is now known to fail if the
* lppaca structure crosses a page boundary.
* The lppaca is also used on POWER5 pSeries boxes. * The lppaca is also used on POWER5 pSeries boxes.
* The lppaca is 640 bytes long, and cannot readily change
* since the hypervisor knows its layout, so a 1kB
* alignment will suffice to ensure that it doesn't
* cross a page boundary.
*/ */
struct ItLpPaca lppaca __attribute__((aligned(0x80))); struct ItLpPaca lppaca __attribute__((__aligned__(0x400)));
#ifdef CONFIG_PPC_ISERIES #ifdef CONFIG_PPC_ISERIES
struct ItLpRegSave reg_save; struct ItLpRegSave reg_save;
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment