This source file includes following definitions.
- allocate_paca_ptrs
- allocate_paca
- free_unused_pacas
1
2
3
4
5
6
7
8
9 #ifndef _ASM_POWERPC_PACA_H
10 #define _ASM_POWERPC_PACA_H
11 #ifdef __KERNEL__
12
13 #ifdef CONFIG_PPC64
14
15 #include <linux/string.h>
16 #include <asm/types.h>
17 #include <asm/lppaca.h>
18 #include <asm/mmu.h>
19 #include <asm/page.h>
20 #ifdef CONFIG_PPC_BOOK3E
21 #include <asm/exception-64e.h>
22 #else
23 #include <asm/exception-64s.h>
24 #endif
25 #ifdef CONFIG_KVM_BOOK3S_64_HANDLER
26 #include <asm/kvm_book3s_asm.h>
27 #endif
28 #include <asm/accounting.h>
29 #include <asm/hmi.h>
30 #include <asm/cpuidle.h>
31 #include <asm/atomic.h>
32
33 #include <asm-generic/mmiowb_types.h>
34
35 register struct paca_struct *local_paca asm("r13");
36
37 #if defined(CONFIG_DEBUG_PREEMPT) && defined(CONFIG_SMP)
38 extern unsigned int debug_smp_processor_id(void);
39
40
41
42
43 #define get_paca() ((void) debug_smp_processor_id(), local_paca)
44 #else
45 #define get_paca() local_paca
46 #endif
47
48 #ifdef CONFIG_PPC_PSERIES
49 #define get_lppaca() (get_paca()->lppaca_ptr)
50 #endif
51
52 #define get_slb_shadow() (get_paca()->slb_shadow_ptr)
53
54 struct task_struct;
55
56
57
58
59
60
61
62 struct paca_struct {
63 #ifdef CONFIG_PPC_PSERIES
64
65
66
67
68
69
70
71 struct lppaca *lppaca_ptr;
72 #endif
73
74
75
76
77
78
79
80 #ifdef __BIG_ENDIAN__
81 u16 lock_token;
82 u16 paca_index;
83 #else
84 u16 paca_index;
85 u16 lock_token;
86 #endif
87
88 u64 kernel_toc;
89 u64 kernelbase;
90 u64 kernel_msr;
91 void *emergency_sp;
92 u64 data_offset;
93 s16 hw_cpu_id;
94 u8 cpu_start;
95
96 u8 kexec_state;
97 #ifdef CONFIG_PPC_BOOK3S_64
98 struct slb_shadow *slb_shadow_ptr;
99 struct dtl_entry *dispatch_log;
100 struct dtl_entry *dispatch_log_end;
101 #endif
102 u64 dscr_default;
103
104 #ifdef CONFIG_PPC_BOOK3S_64
105
106
107
108
109 u64 exgen[EX_SIZE] __attribute__((aligned(0x80)));
110 u64 exslb[EX_SIZE];
111
112
113 u16 vmalloc_sllp;
114 u8 slb_cache_ptr;
115 u8 stab_rr;
116 #ifdef CONFIG_DEBUG_VM
117 u8 in_kernel_slb_handler;
118 #endif
119 u32 slb_used_bitmap;
120 u32 slb_kern_bitmap;
121 u32 slb_cache[SLB_CACHE_ENTRIES];
122 #endif
123
124 #ifdef CONFIG_PPC_BOOK3E
125 u64 exgen[8] __aligned(0x40);
126
127 pgd_t *pgd __aligned(0x40);
128 pgd_t *kernel_pgd;
129
130
131 struct tlb_core_data *tcd_ptr;
132
133
134
135
136
137 u64 extlb[12][EX_TLB_SIZE / sizeof(u64)];
138 u64 exmc[8];
139 u64 excrit[8];
140 u64 exdbg[8];
141
142
143 void *mc_kstack;
144 void *crit_kstack;
145 void *dbg_kstack;
146
147 struct tlb_core_data tcd;
148 #endif
149
150 #ifdef CONFIG_PPC_BOOK3S
151 mm_context_id_t mm_ctx_id;
152 #ifdef CONFIG_PPC_MM_SLICES
153 unsigned char mm_ctx_low_slices_psize[BITS_PER_LONG / BITS_PER_BYTE];
154 unsigned char mm_ctx_high_slices_psize[SLICE_ARRAY_SIZE];
155 unsigned long mm_ctx_slb_addr_limit;
156 #else
157 u16 mm_ctx_user_psize;
158 u16 mm_ctx_sllp;
159 #endif
160 #endif
161
162
163
164
165 struct task_struct *__current;
166 u64 kstack;
167 u64 saved_r1;
168 u64 saved_msr;
169 #ifdef CONFIG_PPC_BOOK3E
170 u16 trap_save;
171 #endif
172 u8 irq_soft_mask;
173 u8 irq_happened;
174 u8 irq_work_pending;
175 #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
176 u8 pmcregs_in_use;
177 #endif
178 u64 sprg_vdso;
179 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
180 u64 tm_scratch;
181 #endif
182
183 #ifdef CONFIG_PPC_POWERNV
184
185
186 unsigned long idle_state;
187 union {
188
189 struct {
190
191 u8 thread_idle_state;
192
193 u8 subcore_sibling_mask;
194 };
195
196
197 struct {
198 #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
199
200 u64 requested_psscr;
201
202 atomic_t dont_stop;
203 #endif
204 };
205 };
206 #endif
207
208 #ifdef CONFIG_PPC_BOOK3S_64
209
210 u64 exnmi[EX_SIZE];
211 u64 exmc[EX_SIZE];
212 #endif
213 #ifdef CONFIG_PPC_BOOK3S_64
214
215 void *nmi_emergency_sp;
216 void *mc_emergency_sp;
217
218 u16 in_nmi;
219
220
221
222
223
224 u16 in_mce;
225 u8 hmi_event_available;
226 u8 hmi_p9_special_emu;
227 #endif
228 u8 ftrace_enabled;
229
230
231 struct cpu_accounting_data accounting;
232 u64 dtl_ridx;
233 struct dtl_entry *dtl_curr;
234
235 #ifdef CONFIG_KVM_BOOK3S_HANDLER
236 #ifdef CONFIG_KVM_BOOK3S_PR_POSSIBLE
237
238 struct kvmppc_book3s_shadow_vcpu shadow_vcpu;
239 #endif
240 struct kvmppc_host_state kvm_hstate;
241 #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
242
243
244
245
246 struct sibling_subcore_state *sibling_subcore_state;
247 #endif
248 #endif
249 #ifdef CONFIG_PPC_BOOK3S_64
250
251
252
253
254 u64 exrfi[EX_SIZE] __aligned(0x80);
255 void *rfi_flush_fallback_area;
256 u64 l1d_flush_size;
257 #endif
258 #ifdef CONFIG_PPC_PSERIES
259 u8 *mce_data_buf;
260 #endif
261
262 #ifdef CONFIG_PPC_BOOK3S_64
263
264 struct slb_entry *mce_faulty_slbs;
265 u16 slb_save_cache_ptr;
266 #endif
267 #ifdef CONFIG_STACKPROTECTOR
268 unsigned long canary;
269 #endif
270 #ifdef CONFIG_MMIOWB
271 struct mmiowb_state mmiowb_state;
272 #endif
273 } ____cacheline_aligned;
274
275 extern void copy_mm_to_paca(struct mm_struct *mm);
276 extern struct paca_struct **paca_ptrs;
277 extern void initialise_paca(struct paca_struct *new_paca, int cpu);
278 extern void setup_paca(struct paca_struct *new_paca);
279 extern void allocate_paca_ptrs(void);
280 extern void allocate_paca(int cpu);
281 extern void free_unused_pacas(void);
282
283 #else
284
285 static inline void allocate_paca_ptrs(void) { };
286 static inline void allocate_paca(int cpu) { };
287 static inline void free_unused_pacas(void) { };
288
289 #endif
290
291 #endif
292 #endif