hc
2023-12-11 1f93a7dfd1f8d5ff7a5c53246c7534fe2332d6f4
kernel/arch/powerpc/kernel/asm-offsets.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * This program is used to generate definitions needed by
34 * assembly language modules.
....@@ -6,12 +7,9 @@
67 * generate asm statements containing #defines,
78 * compile this file to assembler, and then extract the
89 * #defines from the assembly-language output.
9
- *
10
- * This program is free software; you can redistribute it and/or
11
- * modify it under the terms of the GNU General Public License
12
- * as published by the Free Software Foundation; either version
13
- * 2 of the License, or (at your option) any later version.
1410 */
11
+
12
+#define GENERATING_ASM_OFFSETS /* asm/smp.h */
1513
1614 #include <linux/compat.h>
1715 #include <linux/signal.h>
....@@ -32,7 +30,6 @@
3230
3331 #include <asm/io.h>
3432 #include <asm/page.h>
35
-#include <asm/pgtable.h>
3633 #include <asm/processor.h>
3734 #include <asm/cputable.h>
3835 #include <asm/thread_info.h>
....@@ -72,6 +69,10 @@
7269 #include <asm/fixmap.h>
7370 #endif
7471
72
+#ifdef CONFIG_XMON
73
+#include "../xmon/xmon_bpts.h"
74
+#endif
75
+
7576 #define STACK_PT_REGS_OFFSET(sym, val) \
7677 DEFINE(sym, STACK_FRAME_OVERHEAD + offsetof(struct pt_regs, val))
7778
....@@ -79,16 +80,26 @@
7980 {
8081 OFFSET(THREAD, task_struct, thread);
8182 OFFSET(MM, task_struct, mm);
83
+#ifdef CONFIG_STACKPROTECTOR
84
+ OFFSET(TASK_CANARY, task_struct, stack_canary);
85
+#ifdef CONFIG_PPC64
86
+ OFFSET(PACA_CANARY, paca_struct, canary);
87
+#endif
88
+#endif
8289 OFFSET(MMCONTEXTID, mm_struct, context.id);
8390 #ifdef CONFIG_PPC64
8491 DEFINE(SIGSEGV, SIGSEGV);
8592 DEFINE(NMI_MASK, NMI_MASK);
86
- OFFSET(TASKTHREADPPR, task_struct, thread.ppr);
8793 #else
88
- OFFSET(THREAD_INFO, task_struct, stack);
89
- DEFINE(THREAD_INFO_GAP, _ALIGN_UP(sizeof(struct thread_info), 16));
9094 OFFSET(KSP_LIMIT, thread_struct, ksp_limit);
95
+#ifdef CONFIG_PPC_RTAS
96
+ OFFSET(RTAS_SP, thread_struct, rtas_sp);
97
+#endif
9198 #endif /* CONFIG_PPC64 */
99
+ OFFSET(TASK_STACK, task_struct, stack);
100
+#ifdef CONFIG_SMP
101
+ OFFSET(TASK_CPU, task_struct, cpu);
102
+#endif
92103
93104 #ifdef CONFIG_LIVEPATCH
94105 OFFSET(TI_livepatch_sp, thread_info, livepatch_sp);
....@@ -119,6 +130,24 @@
119130 OFFSET(KSP_VSID, thread_struct, ksp_vsid);
120131 #else /* CONFIG_PPC64 */
121132 OFFSET(PGDIR, thread_struct, pgdir);
133
+#ifdef CONFIG_VMAP_STACK
134
+ OFFSET(SRR0, thread_struct, srr0);
135
+ OFFSET(SRR1, thread_struct, srr1);
136
+ OFFSET(DAR, thread_struct, dar);
137
+ OFFSET(DSISR, thread_struct, dsisr);
138
+#ifdef CONFIG_PPC_BOOK3S_32
139
+ OFFSET(THR0, thread_struct, r0);
140
+ OFFSET(THR3, thread_struct, r3);
141
+ OFFSET(THR4, thread_struct, r4);
142
+ OFFSET(THR5, thread_struct, r5);
143
+ OFFSET(THR6, thread_struct, r6);
144
+ OFFSET(THR8, thread_struct, r8);
145
+ OFFSET(THR9, thread_struct, r9);
146
+ OFFSET(THR11, thread_struct, r11);
147
+ OFFSET(THLR, thread_struct, lr);
148
+ OFFSET(THCTR, thread_struct, ctr);
149
+#endif
150
+#endif
122151 #ifdef CONFIG_SPE
123152 OFFSET(THREAD_EVR0, thread_struct, evr[0]);
124153 OFFSET(THREAD_ACC, thread_struct, acc);
....@@ -135,6 +164,9 @@
135164 #if defined(CONFIG_KVM) && defined(CONFIG_BOOKE)
136165 OFFSET(THREAD_KVM_VCPU, thread_struct, kvm_vcpu);
137166 #endif
167
+#if defined(CONFIG_PPC_BOOK3S_32) && defined(CONFIG_PPC_KUAP)
168
+ OFFSET(KUAP, thread_struct, kuap);
169
+#endif
138170
139171 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
140172 OFFSET(PACATMSCRATCH, paca_struct, tm_scratch);
....@@ -144,6 +176,7 @@
144176 OFFSET(THREAD_TM_TAR, thread_struct, tm_tar);
145177 OFFSET(THREAD_TM_PPR, thread_struct, tm_ppr);
146178 OFFSET(THREAD_TM_DSCR, thread_struct, tm_dscr);
179
+ OFFSET(THREAD_TM_AMR, thread_struct, tm_amr);
147180 OFFSET(PT_CKPT_REGS, thread_struct, ckpt_regs);
148181 OFFSET(THREAD_CKVRSTATE, thread_struct, ckvr_state.vr);
149182 OFFSET(THREAD_CKVRSAVE, thread_struct, ckvrsave);
....@@ -157,8 +190,6 @@
157190 OFFSET(TI_LOCAL_FLAGS, thread_info, local_flags);
158191 OFFSET(TI_PREEMPT, thread_info, preempt_count);
159192 OFFSET(TI_PREEMPT_LAZY, thread_info, preempt_lazy_count);
160
- OFFSET(TI_TASK, thread_info, task);
161
- OFFSET(TI_CPU, thread_info, cpu);
162193
163194 #ifdef CONFIG_PPC64
164195 OFFSET(DCACHEL1BLOCKSIZE, ppc64_caches, l1d.block_size);
....@@ -173,8 +204,9 @@
173204 OFFSET(PACAPROCSTART, paca_struct, cpu_start);
174205 OFFSET(PACAKSAVE, paca_struct, kstack);
175206 OFFSET(PACACURRENT, paca_struct, __current);
207
+ DEFINE(PACA_THREAD_INFO, offsetof(struct paca_struct, __current) +
208
+ offsetof(struct task_struct, thread_info));
176209 OFFSET(PACASAVEDMSR, paca_struct, saved_msr);
177
- OFFSET(PACASTABRR, paca_struct, stab_rr);
178210 OFFSET(PACAR1, paca_struct, saved_r1);
179211 OFFSET(PACATOC, paca_struct, kernel_toc);
180212 OFFSET(PACAKBASE, paca_struct, kernelbase);
....@@ -213,6 +245,7 @@
213245 #ifdef CONFIG_PPC_BOOK3S_64
214246 OFFSET(PACASLBCACHE, paca_struct, slb_cache);
215247 OFFSET(PACASLBCACHEPTR, paca_struct, slb_cache_ptr);
248
+ OFFSET(PACASTABRR, paca_struct, stab_rr);
216249 OFFSET(PACAVMALLOCSLLP, paca_struct, vmalloc_sllp);
217250 #ifdef CONFIG_PPC_MM_SLICES
218251 OFFSET(MMUPSIZESLLP, mmu_psize_def, sllp);
....@@ -256,8 +289,9 @@
256289 OFFSET(ACCOUNT_STARTTIME_USER, paca_struct, accounting.starttime_user);
257290 OFFSET(ACCOUNT_USER_TIME, paca_struct, accounting.utime);
258291 OFFSET(ACCOUNT_SYSTEM_TIME, paca_struct, accounting.stime);
292
+#ifdef CONFIG_PPC_BOOK3E
259293 OFFSET(PACA_TRAP_SAVE, paca_struct, trap_save);
260
- OFFSET(PACA_NAPSTATELOST, paca_struct, nap_state_lost);
294
+#endif
261295 OFFSET(PACA_SPRG_VDSO, paca_struct, sprg_vdso);
262296 #else /* CONFIG_PPC64 */
263297 #ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
....@@ -274,12 +308,7 @@
274308
275309 /* Interrupt register frame */
276310 DEFINE(INT_FRAME_SIZE, STACK_INT_FRAME_SIZE);
277
- DEFINE(SWITCH_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs));
278
-#ifdef CONFIG_PPC64
279
- /* Create extra stack space for SRR0 and SRR1 when calling prom/rtas. */
280
- DEFINE(PROM_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs) + 16);
281
- DEFINE(RTAS_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs) + 16);
282
-#endif /* CONFIG_PPC64 */
311
+ DEFINE(SWITCH_FRAME_SIZE, STACK_FRAME_WITH_PT_REGS);
283312 STACK_PT_REGS_OFFSET(GPR0, gpr[0]);
284313 STACK_PT_REGS_OFFSET(GPR1, gpr[1]);
285314 STACK_PT_REGS_OFFSET(GPR2, gpr[2]);
....@@ -323,11 +352,12 @@
323352 STACK_PT_REGS_OFFSET(_ESR, dsisr);
324353 #else /* CONFIG_PPC64 */
325354 STACK_PT_REGS_OFFSET(SOFTE, softe);
326
-
327
- /* These _only_ to be used with {PROM,RTAS}_FRAME_SIZE!!! */
328
- DEFINE(_SRR0, STACK_FRAME_OVERHEAD+sizeof(struct pt_regs));
329
- DEFINE(_SRR1, STACK_FRAME_OVERHEAD+sizeof(struct pt_regs)+8);
355
+ STACK_PT_REGS_OFFSET(_PPR, ppr);
330356 #endif /* CONFIG_PPC64 */
357
+
358
+#ifdef CONFIG_PPC_KUAP
359
+ STACK_PT_REGS_OFFSET(STACK_REGS_KUAP, kuap);
360
+#endif
331361
332362 #if defined(CONFIG_PPC32)
333363 #if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
....@@ -378,29 +408,25 @@
378408 OFFSET(CFG_SYSCALL_MAP32, vdso_data, syscall_map_32);
379409 OFFSET(WTOM_CLOCK_SEC, vdso_data, wtom_clock_sec);
380410 OFFSET(WTOM_CLOCK_NSEC, vdso_data, wtom_clock_nsec);
381
- OFFSET(STAMP_XTIME, vdso_data, stamp_xtime);
411
+ OFFSET(STAMP_XTIME_SEC, vdso_data, stamp_xtime_sec);
412
+ OFFSET(STAMP_XTIME_NSEC, vdso_data, stamp_xtime_nsec);
382413 OFFSET(STAMP_SEC_FRAC, vdso_data, stamp_sec_fraction);
383414 OFFSET(CLOCK_HRTIMER_RES, vdso_data, hrtimer_res);
415
+#ifdef CONFIG_PPC64
384416 OFFSET(CFG_ICACHE_BLOCKSZ, vdso_data, icache_block_size);
385417 OFFSET(CFG_DCACHE_BLOCKSZ, vdso_data, dcache_block_size);
386418 OFFSET(CFG_ICACHE_LOGBLOCKSZ, vdso_data, icache_log_block_size);
387419 OFFSET(CFG_DCACHE_LOGBLOCKSZ, vdso_data, dcache_log_block_size);
388
-#ifdef CONFIG_PPC64
389420 OFFSET(CFG_SYSCALL_MAP64, vdso_data, syscall_map_64);
390
- OFFSET(TVAL64_TV_SEC, timeval, tv_sec);
391
- OFFSET(TVAL64_TV_USEC, timeval, tv_usec);
392
- OFFSET(TVAL32_TV_SEC, compat_timeval, tv_sec);
393
- OFFSET(TVAL32_TV_USEC, compat_timeval, tv_usec);
394
- OFFSET(TSPC64_TV_SEC, timespec, tv_sec);
395
- OFFSET(TSPC64_TV_NSEC, timespec, tv_nsec);
396
- OFFSET(TSPC32_TV_SEC, compat_timespec, tv_sec);
397
- OFFSET(TSPC32_TV_NSEC, compat_timespec, tv_nsec);
398
-#else
399
- OFFSET(TVAL32_TV_SEC, timeval, tv_sec);
400
- OFFSET(TVAL32_TV_USEC, timeval, tv_usec);
401
- OFFSET(TSPC32_TV_SEC, timespec, tv_sec);
402
- OFFSET(TSPC32_TV_NSEC, timespec, tv_nsec);
421
+ OFFSET(TVAL64_TV_SEC, __kernel_old_timeval, tv_sec);
422
+ OFFSET(TVAL64_TV_USEC, __kernel_old_timeval, tv_usec);
403423 #endif
424
+ OFFSET(TSPC64_TV_SEC, __kernel_timespec, tv_sec);
425
+ OFFSET(TSPC64_TV_NSEC, __kernel_timespec, tv_nsec);
426
+ OFFSET(TVAL32_TV_SEC, old_timeval32, tv_sec);
427
+ OFFSET(TVAL32_TV_USEC, old_timeval32, tv_usec);
428
+ OFFSET(TSPC32_TV_SEC, old_timespec32, tv_sec);
429
+ OFFSET(TSPC32_TV_NSEC, old_timespec32, tv_nsec);
404430 /* timeval/timezone offsets for use by vdso */
405431 OFFSET(TZONE_TZ_MINWEST, timezone, tz_minuteswest);
406432 OFFSET(TZONE_TZ_DSTTIME, timezone, tz_dsttime);
....@@ -410,7 +436,10 @@
410436 DEFINE(CLOCK_MONOTONIC, CLOCK_MONOTONIC);
411437 DEFINE(CLOCK_REALTIME_COARSE, CLOCK_REALTIME_COARSE);
412438 DEFINE(CLOCK_MONOTONIC_COARSE, CLOCK_MONOTONIC_COARSE);
439
+ DEFINE(CLOCK_MAX, CLOCK_TAI);
413440 DEFINE(NSEC_PER_SEC, NSEC_PER_SEC);
441
+ DEFINE(EINVAL, EINVAL);
442
+ DEFINE(KTIME_LOW_RES, KTIME_LOW_RES);
414443
415444 #ifdef CONFIG_BUG
416445 DEFINE(BUG_ENTRY_SIZE, sizeof(struct bug_entry));
....@@ -499,11 +528,13 @@
499528 OFFSET(KVM_VRMA_SLB_V, kvm, arch.vrma_slb_v);
500529 OFFSET(KVM_RADIX, kvm, arch.radix);
501530 OFFSET(KVM_FWNMI, kvm, arch.fwnmi_enabled);
531
+ OFFSET(KVM_SECURE_GUEST, kvm, arch.secure_guest);
502532 OFFSET(VCPU_DSISR, kvm_vcpu, arch.shregs.dsisr);
503533 OFFSET(VCPU_DAR, kvm_vcpu, arch.shregs.dar);
504534 OFFSET(VCPU_VPA, kvm_vcpu, arch.vpa.pinned_addr);
505535 OFFSET(VCPU_VPA_DIRTY, kvm_vcpu, arch.vpa.dirty);
506536 OFFSET(VCPU_HEIR, kvm_vcpu, arch.emul_inst);
537
+ OFFSET(VCPU_NESTED, kvm_vcpu, arch.nested);
507538 OFFSET(VCPU_CPU, kvm_vcpu, cpu);
508539 OFFSET(VCPU_THREAD_CPU, kvm_vcpu, arch.thread_cpu);
509540 #endif
....@@ -530,6 +561,8 @@
530561 OFFSET(VCPU_IRQ_PENDING, kvm_vcpu, arch.irq_pending);
531562 OFFSET(VCPU_DBELL_REQ, kvm_vcpu, arch.doorbell_request);
532563 OFFSET(VCPU_MMCR, kvm_vcpu, arch.mmcr);
564
+ OFFSET(VCPU_MMCRA, kvm_vcpu, arch.mmcra);
565
+ OFFSET(VCPU_MMCRS, kvm_vcpu, arch.mmcrs);
533566 OFFSET(VCPU_PMC, kvm_vcpu, arch.pmc);
534567 OFFSET(VCPU_SPMC, kvm_vcpu, arch.spmc);
535568 OFFSET(VCPU_SIAR, kvm_vcpu, arch.siar);
....@@ -667,6 +700,9 @@
667700 HSTATE_FIELD(HSTATE_SDAR, host_mmcr[4]);
668701 HSTATE_FIELD(HSTATE_MMCR2, host_mmcr[5]);
669702 HSTATE_FIELD(HSTATE_SIER, host_mmcr[6]);
703
+ HSTATE_FIELD(HSTATE_MMCR3, host_mmcr[7]);
704
+ HSTATE_FIELD(HSTATE_SIER2, host_mmcr[8]);
705
+ HSTATE_FIELD(HSTATE_SIER3, host_mmcr[9]);
670706 HSTATE_FIELD(HSTATE_PMC1, host_pmc[0]);
671707 HSTATE_FIELD(HSTATE_PMC2, host_pmc[1]);
672708 HSTATE_FIELD(HSTATE_PMC3, host_pmc[2]);
....@@ -762,23 +798,6 @@
762798 OFFSET(VCPU_TIMING_LAST_ENTER_TBL, kvm_vcpu, arch.timing_last_enter.tv32.tbl);
763799 #endif
764800
765
-#ifdef CONFIG_PPC_POWERNV
766
- OFFSET(PACA_CORE_IDLE_STATE_PTR, paca_struct, core_idle_state_ptr);
767
- OFFSET(PACA_THREAD_IDLE_STATE, paca_struct, thread_idle_state);
768
- OFFSET(PACA_THREAD_MASK, paca_struct, thread_mask);
769
- OFFSET(PACA_SUBCORE_SIBLING_MASK, paca_struct, subcore_sibling_mask);
770
- OFFSET(PACA_REQ_PSSCR, paca_struct, requested_psscr);
771
- OFFSET(PACA_DONT_STOP, paca_struct, dont_stop);
772
-#define STOP_SPR(x, f) OFFSET(x, paca_struct, stop_sprs.f)
773
- STOP_SPR(STOP_PID, pid);
774
- STOP_SPR(STOP_LDBAR, ldbar);
775
- STOP_SPR(STOP_FSCR, fscr);
776
- STOP_SPR(STOP_HFSCR, hfscr);
777
- STOP_SPR(STOP_MMCR1, mmcr1);
778
- STOP_SPR(STOP_MMCR2, mmcr2);
779
- STOP_SPR(STOP_MMCRA, mmcra);
780
-#endif
781
-
782801 DEFINE(PPC_DBELL_SERVER, PPC_DBELL_SERVER);
783802 DEFINE(PPC_DBELL_MSGTYPE, PPC_DBELL_MSGTYPE);
784803
....@@ -786,5 +805,9 @@
786805 DEFINE(VIRT_IMMR_BASE, (u64)__fix_to_virt(FIX_IMMR_BASE));
787806 #endif
788807
808
+#ifdef CONFIG_XMON
809
+ DEFINE(BPT_SIZE, BPT_SIZE);
810
+#endif
811
+
789812 return 0;
790813 }