aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/kernel/paca.c10
-rw-r--r--arch/powerpc/platforms/iseries/lpardata.c7
-rw-r--r--include/asm-powerpc/iseries/it_lp_reg_save.h2
-rw-r--r--include/asm-powerpc/paca.h14
4 files changed, 18 insertions, 15 deletions
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
index a7b68f911eb1..25420406c8c0 100644
--- a/arch/powerpc/kernel/paca.c
+++ b/arch/powerpc/kernel/paca.c
@@ -17,6 +17,7 @@
17#include <asm/page.h> 17#include <asm/page.h>
18#include <asm/lppaca.h> 18#include <asm/lppaca.h>
19#include <asm/iseries/it_lp_queue.h> 19#include <asm/iseries/it_lp_queue.h>
20#include <asm/iseries/it_lp_reg_save.h>
20#include <asm/paca.h> 21#include <asm/paca.h>
21 22
22 23
@@ -26,8 +27,7 @@ extern unsigned long __toc_start;
26 27
27/* The Paca is an array with one entry per processor. Each contains an 28/* The Paca is an array with one entry per processor. Each contains an
28 * lppaca, which contains the information shared between the 29 * lppaca, which contains the information shared between the
29 * hypervisor and Linux. Each also contains an ItLpRegSave area which 30 * hypervisor and Linux.
30 * is used by the hypervisor to save registers.
31 * On systems with hardware multi-threading, there are two threads 31 * On systems with hardware multi-threading, there are two threads
32 * per processor. The Paca array must contain an entry for each thread. 32 * per processor. The Paca array must contain an entry for each thread.
33 * The VPD Areas will give a max logical processors = 2 * max physical 33 * The VPD Areas will give a max logical processors = 2 * max physical
@@ -57,11 +57,7 @@ extern unsigned long __toc_start;
57#ifdef CONFIG_PPC_ISERIES 57#ifdef CONFIG_PPC_ISERIES
58#define PACA_INIT_ISERIES(number) \ 58#define PACA_INIT_ISERIES(number) \
59 .lppaca_ptr = &paca[number].lppaca, \ 59 .lppaca_ptr = &paca[number].lppaca, \
60 .reg_save_ptr = &paca[number].reg_save, \ 60 .reg_save_ptr = &iseries_reg_save[number],
61 .reg_save = { \
62 .xDesc = 0xd397d9e2, /* "LpRS" */ \
63 .xSize = sizeof(struct ItLpRegSave) \
64 }
65 61
66#define PACA_INIT(number) \ 62#define PACA_INIT(number) \
67{ \ 63{ \
diff --git a/arch/powerpc/platforms/iseries/lpardata.c b/arch/powerpc/platforms/iseries/lpardata.c
index bb8c91537f35..ea72385aaf0a 100644
--- a/arch/powerpc/platforms/iseries/lpardata.c
+++ b/arch/powerpc/platforms/iseries/lpardata.c
@@ -225,3 +225,10 @@ struct ItVpdAreas itVpdAreas = {
225 0,0 225 0,0
226 } 226 }
227}; 227};
228
229struct ItLpRegSave iseries_reg_save[] = {
230 [0 ... (NR_CPUS-1)] = {
231 .xDesc = 0xd397d9e2, /* "LpRS" */
232 .xSize = sizeof(struct ItLpRegSave),
233 },
234};
diff --git a/include/asm-powerpc/iseries/it_lp_reg_save.h b/include/asm-powerpc/iseries/it_lp_reg_save.h
index 288044b702de..81824e1bb767 100644
--- a/include/asm-powerpc/iseries/it_lp_reg_save.h
+++ b/include/asm-powerpc/iseries/it_lp_reg_save.h
@@ -81,4 +81,6 @@ struct ItLpRegSave {
81 u8 xRsvd3[176]; // Reserved 350-3FF 81 u8 xRsvd3[176]; // Reserved 350-3FF
82}; 82};
83 83
84extern struct ItLpRegSave iseries_reg_save[];
85
84#endif /* _ITLPREGSAVE_H */ 86#endif /* _ITLPREGSAVE_H */
diff --git a/include/asm-powerpc/paca.h b/include/asm-powerpc/paca.h
index 92c765c35bd0..73693db546b3 100644
--- a/include/asm-powerpc/paca.h
+++ b/include/asm-powerpc/paca.h
@@ -18,7 +18,6 @@
18#include <linux/config.h> 18#include <linux/config.h>
19#include <asm/types.h> 19#include <asm/types.h>
20#include <asm/lppaca.h> 20#include <asm/lppaca.h>
21#include <asm/iseries/it_lp_reg_save.h>
22#include <asm/mmu.h> 21#include <asm/mmu.h>
23 22
24register struct paca_struct *local_paca asm("r13"); 23register struct paca_struct *local_paca asm("r13");
@@ -31,9 +30,9 @@ struct task_struct;
31 * 30 *
32 * This structure is not directly accessed by firmware or the service 31 * This structure is not directly accessed by firmware or the service
33 * processor except for the first two pointers that point to the 32 * processor except for the first two pointers that point to the
34 * lppaca area and the ItLpRegSave area for this CPU. Both the 33 * lppaca area and the ItLpRegSave area for this CPU. The lppaca
35 * lppaca and ItLpRegSave objects are currently contained within the 34 * object is currently contained within the PACA but it doesn't need
36 * PACA but they do not need to be. 35 * to be.
37 */ 36 */
38struct paca_struct { 37struct paca_struct {
39 /* 38 /*
@@ -48,7 +47,9 @@ struct paca_struct {
48 * accessed by the firmware 47 * accessed by the firmware
49 */ 48 */
50 struct lppaca *lppaca_ptr; /* Pointer to LpPaca for PLIC */ 49 struct lppaca *lppaca_ptr; /* Pointer to LpPaca for PLIC */
51 struct ItLpRegSave *reg_save_ptr; /* Pointer to LpRegSave for PLIC */ 50#ifdef CONFIG_PPC_ISERIES
51 void *reg_save_ptr; /* Pointer to LpRegSave for PLIC */
52#endif /* CONFIG_PPC_ISERIES */
52 53
53 /* 54 /*
54 * MAGIC: the spinlock functions in arch/ppc64/lib/locks.c 55 * MAGIC: the spinlock functions in arch/ppc64/lib/locks.c
@@ -110,9 +111,6 @@ struct paca_struct {
110 * cross a page boundary. 111 * cross a page boundary.
111 */ 112 */
112 struct lppaca lppaca __attribute__((__aligned__(0x400))); 113 struct lppaca lppaca __attribute__((__aligned__(0x400)));
113#ifdef CONFIG_PPC_ISERIES
114 struct ItLpRegSave reg_save;
115#endif
116}; 114};
117 115
118extern struct paca_struct paca[]; 116extern struct paca_struct paca[];