vserver 1.9.5.x5
[linux-2.6.git] / include / asm-ppc64 / paca.h
index 71de51a..f893406 100644 (file)
@@ -18,7 +18,7 @@
 
 #include       <linux/config.h>
 #include       <asm/types.h>
-#include       <asm/iSeries/ItLpPaca.h>
+#include       <asm/lppaca.h>
 #include       <asm/iSeries/ItLpRegSave.h>
 #include       <asm/mmu.h>
 
@@ -34,8 +34,8 @@ struct ItLpQueue;
  *
  * This structure is not directly accessed by firmware or the service
  * processor except for the first two pointers that point to the
- * ItLpPaca area and the ItLpRegSave area for this CPU.  Both the
- * ItLpPaca and ItLpRegSave objects are currently contained within the
+ * lppaca area and the ItLpRegSave area for this CPU.  Both the
+ * lppaca and ItLpRegSave objects are currently contained within the
  * PACA but they do not need to be.
  */
 struct paca_struct {
@@ -50,7 +50,7 @@ struct paca_struct {
         * MAGIC: These first two pointers can't be moved - they're
         * accessed by the firmware
         */
-       struct ItLpPaca *lppaca_ptr;    /* Pointer to LpPaca for PLIC */
+       struct lppaca *lppaca_ptr;      /* Pointer to LpPaca for PLIC */
        struct ItLpRegSave *reg_save_ptr; /* Pointer to LpRegSave for PLIC */
 
        /*
@@ -68,7 +68,7 @@ struct paca_struct {
        u64 stab_real;                  /* Absolute address of segment table */
        u64 stab_addr;                  /* Virtual address of segment table */
        void *emergency_sp;             /* pointer to emergency stack */
-       u16 hw_cpu_id;                  /* Physical processor number */
+       s16 hw_cpu_id;                  /* Physical processor number */
        u8 cpu_start;                   /* At startup, processor spins until */
                                        /* this becomes non-zero. */
 
@@ -99,11 +99,17 @@ struct paca_struct {
        u64 exdsi[8];           /* used for linear mapping hash table misses */
 
        /*
-        * iSeries structues which the hypervisor knows about - Not
-        * sure if these particularly need to be cacheline aligned.
+        * iSeries structure which the hypervisor knows about -
+        * 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 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 lppaca lppaca __attribute__((__aligned__(0x400)));
 #ifdef CONFIG_PPC_ISERIES
        struct ItLpRegSave reg_save;
 #endif