diff options
-rw-r--r-- | arch/s390/include/asm/lowcore.h | 241 | ||||
-rw-r--r-- | arch/s390/include/asm/setup.h | 6 | ||||
-rw-r--r-- | arch/s390/include/asm/thread_info.h | 2 | ||||
-rw-r--r-- | arch/s390/kernel/asm-offsets.c | 91 | ||||
-rw-r--r-- | arch/s390/kernel/base.S | 2 | ||||
-rw-r--r-- | arch/s390/kernel/entry.S | 1 | ||||
-rw-r--r-- | arch/s390/kernel/entry64.S | 2 | ||||
-rw-r--r-- | arch/s390/kernel/ftrace.c | 2 | ||||
-rw-r--r-- | arch/s390/kernel/head.S | 1 | ||||
-rw-r--r-- | arch/s390/kernel/ipl.c | 6 | ||||
-rw-r--r-- | arch/s390/kernel/reipl.S | 2 | ||||
-rw-r--r-- | arch/s390/kernel/reipl64.S | 2 | ||||
-rw-r--r-- | arch/s390/kernel/setup.c | 7 | ||||
-rw-r--r-- | arch/s390/kernel/smp.c | 3 | ||||
-rw-r--r-- | arch/s390/kernel/switch_cpu.S | 1 | ||||
-rw-r--r-- | arch/s390/kernel/switch_cpu64.S | 1 | ||||
-rw-r--r-- | arch/s390/kernel/vdso.c | 1 | ||||
-rw-r--r-- | arch/s390/kvm/interrupt.c | 10 | ||||
-rw-r--r-- | arch/s390/kvm/kvm-s390.c | 1 | ||||
-rw-r--r-- | arch/s390/mm/fault.c | 1 | ||||
-rw-r--r-- | drivers/s390/char/zcore.c | 1 | ||||
-rw-r--r-- | drivers/s390/cio/ccwreq.c | 2 | ||||
-rw-r--r-- | drivers/s390/cio/chsc_sch.c | 2 | ||||
-rw-r--r-- | drivers/s390/cio/cio.c | 12 | ||||
-rw-r--r-- | drivers/s390/cio/device_fsm.c | 4 | ||||
-rw-r--r-- | drivers/s390/kvm/kvm_virtio.c | 4 |
26 files changed, 174 insertions, 234 deletions
diff --git a/arch/s390/include/asm/lowcore.h b/arch/s390/include/asm/lowcore.h index a9eb6834d921..05527c040b7a 100644 --- a/arch/s390/include/asm/lowcore.h +++ b/arch/s390/include/asm/lowcore.h | |||
@@ -1,144 +1,16 @@ | |||
1 | /* | 1 | /* |
2 | * include/asm-s390/lowcore.h | 2 | * Copyright IBM Corp. 1999,2010 |
3 | * | 3 | * Author(s): Hartmut Penner <hp@de.ibm.com>, |
4 | * S390 version | 4 | * Martin Schwidefsky <schwidefsky@de.ibm.com>, |
5 | * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation | 5 | * Denis Joseph Barrow, |
6 | * Author(s): Hartmut Penner (hp@de.ibm.com), | ||
7 | * Martin Schwidefsky (schwidefsky@de.ibm.com), | ||
8 | * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) | ||
9 | */ | 6 | */ |
10 | 7 | ||
11 | #ifndef _ASM_S390_LOWCORE_H | 8 | #ifndef _ASM_S390_LOWCORE_H |
12 | #define _ASM_S390_LOWCORE_H | 9 | #define _ASM_S390_LOWCORE_H |
13 | 10 | ||
14 | #define __LC_IPL_PARMBLOCK_PTR 0x0014 | ||
15 | #define __LC_EXT_PARAMS 0x0080 | ||
16 | #define __LC_CPU_ADDRESS 0x0084 | ||
17 | #define __LC_EXT_INT_CODE 0x0086 | ||
18 | |||
19 | #define __LC_SVC_ILC 0x0088 | ||
20 | #define __LC_SVC_INT_CODE 0x008a | ||
21 | #define __LC_PGM_ILC 0x008c | ||
22 | #define __LC_PGM_INT_CODE 0x008e | ||
23 | |||
24 | #define __LC_PER_ATMID 0x0096 | ||
25 | #define __LC_PER_ADDRESS 0x0098 | ||
26 | #define __LC_PER_ACCESS_ID 0x00a1 | ||
27 | #define __LC_AR_MODE_ID 0x00a3 | ||
28 | |||
29 | #define __LC_SUBCHANNEL_ID 0x00b8 | ||
30 | #define __LC_SUBCHANNEL_NR 0x00ba | ||
31 | #define __LC_IO_INT_PARM 0x00bc | ||
32 | #define __LC_IO_INT_WORD 0x00c0 | ||
33 | #define __LC_STFL_FAC_LIST 0x00c8 | ||
34 | #define __LC_MCCK_CODE 0x00e8 | ||
35 | |||
36 | #define __LC_DUMP_REIPL 0x0e00 | ||
37 | |||
38 | #ifndef __s390x__ | ||
39 | #define __LC_RST_NEW_PSW 0x0000 | ||
40 | #define __LC_RST_OLD_PSW 0x0008 | ||
41 | #define __LC_EXT_OLD_PSW 0x0018 | ||
42 | #define __LC_SVC_OLD_PSW 0x0020 | ||
43 | #define __LC_PGM_OLD_PSW 0x0028 | ||
44 | #define __LC_MCK_OLD_PSW 0x0030 | ||
45 | #define __LC_IO_OLD_PSW 0x0038 | ||
46 | #define __LC_EXT_NEW_PSW 0x0058 | ||
47 | #define __LC_SVC_NEW_PSW 0x0060 | ||
48 | #define __LC_PGM_NEW_PSW 0x0068 | ||
49 | #define __LC_MCK_NEW_PSW 0x0070 | ||
50 | #define __LC_IO_NEW_PSW 0x0078 | ||
51 | #define __LC_SAVE_AREA 0x0200 | ||
52 | #define __LC_RETURN_PSW 0x0240 | ||
53 | #define __LC_RETURN_MCCK_PSW 0x0248 | ||
54 | #define __LC_SYNC_ENTER_TIMER 0x0250 | ||
55 | #define __LC_ASYNC_ENTER_TIMER 0x0258 | ||
56 | #define __LC_EXIT_TIMER 0x0260 | ||
57 | #define __LC_USER_TIMER 0x0268 | ||
58 | #define __LC_SYSTEM_TIMER 0x0270 | ||
59 | #define __LC_STEAL_TIMER 0x0278 | ||
60 | #define __LC_LAST_UPDATE_TIMER 0x0280 | ||
61 | #define __LC_LAST_UPDATE_CLOCK 0x0288 | ||
62 | #define __LC_CURRENT 0x0290 | ||
63 | #define __LC_THREAD_INFO 0x0294 | ||
64 | #define __LC_KERNEL_STACK 0x0298 | ||
65 | #define __LC_ASYNC_STACK 0x029c | ||
66 | #define __LC_PANIC_STACK 0x02a0 | ||
67 | #define __LC_KERNEL_ASCE 0x02a4 | ||
68 | #define __LC_USER_ASCE 0x02a8 | ||
69 | #define __LC_USER_EXEC_ASCE 0x02ac | ||
70 | #define __LC_CPUID 0x02b0 | ||
71 | #define __LC_INT_CLOCK 0x02c8 | ||
72 | #define __LC_MACHINE_FLAGS 0x02d8 | ||
73 | #define __LC_FTRACE_FUNC 0x02dc | ||
74 | #define __LC_IRB 0x0300 | ||
75 | #define __LC_PFAULT_INTPARM 0x0080 | ||
76 | #define __LC_CPU_TIMER_SAVE_AREA 0x00d8 | ||
77 | #define __LC_CLOCK_COMP_SAVE_AREA 0x00e0 | ||
78 | #define __LC_PSW_SAVE_AREA 0x0100 | ||
79 | #define __LC_PREFIX_SAVE_AREA 0x0108 | ||
80 | #define __LC_AREGS_SAVE_AREA 0x0120 | ||
81 | #define __LC_FPREGS_SAVE_AREA 0x0160 | ||
82 | #define __LC_GPREGS_SAVE_AREA 0x0180 | ||
83 | #define __LC_CREGS_SAVE_AREA 0x01c0 | ||
84 | #else /* __s390x__ */ | ||
85 | #define __LC_LAST_BREAK 0x0110 | ||
86 | #define __LC_RST_OLD_PSW 0x0120 | ||
87 | #define __LC_EXT_OLD_PSW 0x0130 | ||
88 | #define __LC_SVC_OLD_PSW 0x0140 | ||
89 | #define __LC_PGM_OLD_PSW 0x0150 | ||
90 | #define __LC_MCK_OLD_PSW 0x0160 | ||
91 | #define __LC_IO_OLD_PSW 0x0170 | ||
92 | #define __LC_RST_NEW_PSW 0x01a0 | ||
93 | #define __LC_EXT_NEW_PSW 0x01b0 | ||
94 | #define __LC_SVC_NEW_PSW 0x01c0 | ||
95 | #define __LC_PGM_NEW_PSW 0x01d0 | ||
96 | #define __LC_MCK_NEW_PSW 0x01e0 | ||
97 | #define __LC_IO_NEW_PSW 0x01f0 | ||
98 | #define __LC_SAVE_AREA 0x0200 | ||
99 | #define __LC_RETURN_PSW 0x0280 | ||
100 | #define __LC_RETURN_MCCK_PSW 0x0290 | ||
101 | #define __LC_SYNC_ENTER_TIMER 0x02a0 | ||
102 | #define __LC_ASYNC_ENTER_TIMER 0x02a8 | ||
103 | #define __LC_EXIT_TIMER 0x02b0 | ||
104 | #define __LC_USER_TIMER 0x02b8 | ||
105 | #define __LC_SYSTEM_TIMER 0x02c0 | ||
106 | #define __LC_STEAL_TIMER 0x02c8 | ||
107 | #define __LC_LAST_UPDATE_TIMER 0x02d0 | ||
108 | #define __LC_LAST_UPDATE_CLOCK 0x02d8 | ||
109 | #define __LC_CURRENT 0x02e0 | ||
110 | #define __LC_THREAD_INFO 0x02e8 | ||
111 | #define __LC_KERNEL_STACK 0x02f0 | ||
112 | #define __LC_ASYNC_STACK 0x02f8 | ||
113 | #define __LC_PANIC_STACK 0x0300 | ||
114 | #define __LC_KERNEL_ASCE 0x0308 | ||
115 | #define __LC_USER_ASCE 0x0310 | ||
116 | #define __LC_USER_EXEC_ASCE 0x0318 | ||
117 | #define __LC_CPUID 0x0320 | ||
118 | #define __LC_INT_CLOCK 0x0340 | ||
119 | #define __LC_VDSO_PER_CPU 0x0350 | ||
120 | #define __LC_MACHINE_FLAGS 0x0358 | ||
121 | #define __LC_FTRACE_FUNC 0x0360 | ||
122 | #define __LC_IRB 0x0380 | ||
123 | #define __LC_PASTE 0x03c0 | ||
124 | #define __LC_PFAULT_INTPARM 0x11b8 | ||
125 | #define __LC_FPREGS_SAVE_AREA 0x1200 | ||
126 | #define __LC_GPREGS_SAVE_AREA 0x1280 | ||
127 | #define __LC_PSW_SAVE_AREA 0x1300 | ||
128 | #define __LC_PREFIX_SAVE_AREA 0x1318 | ||
129 | #define __LC_FP_CREG_SAVE_AREA 0x131c | ||
130 | #define __LC_TODREG_SAVE_AREA 0x1324 | ||
131 | #define __LC_CPU_TIMER_SAVE_AREA 0x1328 | ||
132 | #define __LC_CLOCK_COMP_SAVE_AREA 0x1331 | ||
133 | #define __LC_AREGS_SAVE_AREA 0x1340 | ||
134 | #define __LC_CREGS_SAVE_AREA 0x1380 | ||
135 | #endif /* __s390x__ */ | ||
136 | |||
137 | #ifndef __ASSEMBLY__ | ||
138 | |||
139 | #include <asm/cpu.h> | ||
140 | #include <asm/ptrace.h> | ||
141 | #include <linux/types.h> | 11 | #include <linux/types.h> |
12 | #include <asm/ptrace.h> | ||
13 | #include <asm/cpu.h> | ||
142 | 14 | ||
143 | void restart_int_handler(void); | 15 | void restart_int_handler(void); |
144 | void ext_int_handler(void); | 16 | void ext_int_handler(void); |
@@ -149,6 +21,9 @@ void io_int_handler(void); | |||
149 | 21 | ||
150 | #ifdef CONFIG_32BIT | 22 | #ifdef CONFIG_32BIT |
151 | 23 | ||
24 | #define LC_ORDER 0 | ||
25 | #define LC_PAGES 1 | ||
26 | |||
152 | struct save_area { | 27 | struct save_area { |
153 | u32 ext_save; | 28 | u32 ext_save; |
154 | u64 timer; | 29 | u64 timer; |
@@ -161,46 +36,13 @@ struct save_area { | |||
161 | u64 fp_regs[4]; | 36 | u64 fp_regs[4]; |
162 | u32 gp_regs[16]; | 37 | u32 gp_regs[16]; |
163 | u32 ctrl_regs[16]; | 38 | u32 ctrl_regs[16]; |
164 | } __attribute__((packed)); | 39 | } __packed; |
165 | |||
166 | #define SAVE_AREA_BASE offsetof(struct _lowcore, extended_save_area_addr) | ||
167 | |||
168 | #else /* CONFIG_32BIT */ | ||
169 | |||
170 | struct save_area { | ||
171 | u64 fp_regs[16]; | ||
172 | u64 gp_regs[16]; | ||
173 | u8 psw[16]; | ||
174 | u8 pad1[8]; | ||
175 | u32 pref_reg; | ||
176 | u32 fp_ctrl_reg; | ||
177 | u8 pad2[4]; | ||
178 | u32 tod_reg; | ||
179 | u64 timer; | ||
180 | u64 clk_cmp; | ||
181 | u8 pad3[8]; | ||
182 | u32 acc_regs[16]; | ||
183 | u64 ctrl_regs[16]; | ||
184 | } __attribute__((packed)); | ||
185 | 40 | ||
186 | #define SAVE_AREA_BASE offsetof(struct _lowcore, floating_pt_save_area) | 41 | struct _lowcore { |
187 | |||
188 | #endif /* CONFIG_32BIT */ | ||
189 | |||
190 | #ifndef __s390x__ | ||
191 | #define LC_ORDER 0 | ||
192 | #else | ||
193 | #define LC_ORDER 1 | ||
194 | #endif | ||
195 | |||
196 | #define LC_PAGES (1UL << LC_ORDER) | ||
197 | |||
198 | struct _lowcore | ||
199 | { | ||
200 | #ifndef __s390x__ | ||
201 | /* 0x0000 - 0x01ff: defined by architecture */ | ||
202 | psw_t restart_psw; /* 0x0000 */ | 42 | psw_t restart_psw; /* 0x0000 */ |
203 | __u32 ccw2[4]; /* 0x0008 */ | 43 | psw_t restart_old_psw; /* 0x0008 */ |
44 | __u8 pad_0x0010[0x0014-0x0010]; /* 0x0010 */ | ||
45 | __u32 ipl_parmblock_ptr; /* 0x0014 */ | ||
204 | psw_t external_old_psw; /* 0x0018 */ | 46 | psw_t external_old_psw; /* 0x0018 */ |
205 | psw_t svc_old_psw; /* 0x0020 */ | 47 | psw_t svc_old_psw; /* 0x0020 */ |
206 | psw_t program_old_psw; /* 0x0028 */ | 48 | psw_t program_old_psw; /* 0x0028 */ |
@@ -226,7 +68,9 @@ struct _lowcore | |||
226 | __u32 monitor_code; /* 0x009c */ | 68 | __u32 monitor_code; /* 0x009c */ |
227 | __u8 exc_access_id; /* 0x00a0 */ | 69 | __u8 exc_access_id; /* 0x00a0 */ |
228 | __u8 per_access_id; /* 0x00a1 */ | 70 | __u8 per_access_id; /* 0x00a1 */ |
229 | __u8 pad_0x00a2[0x00b8-0x00a2]; /* 0x00a2 */ | 71 | __u8 op_access_id; /* 0x00a2 */ |
72 | __u8 ar_access_id; /* 0x00a3 */ | ||
73 | __u8 pad_0x00a4[0x00b8-0x00a4]; /* 0x00a4 */ | ||
230 | __u16 subchannel_id; /* 0x00b8 */ | 74 | __u16 subchannel_id; /* 0x00b8 */ |
231 | __u16 subchannel_nr; /* 0x00ba */ | 75 | __u16 subchannel_nr; /* 0x00ba */ |
232 | __u32 io_int_parm; /* 0x00bc */ | 76 | __u32 io_int_parm; /* 0x00bc */ |
@@ -242,8 +86,9 @@ struct _lowcore | |||
242 | __u32 external_damage_code; /* 0x00f4 */ | 86 | __u32 external_damage_code; /* 0x00f4 */ |
243 | __u32 failing_storage_address; /* 0x00f8 */ | 87 | __u32 failing_storage_address; /* 0x00f8 */ |
244 | __u8 pad_0x00fc[0x0100-0x00fc]; /* 0x00fc */ | 88 | __u8 pad_0x00fc[0x0100-0x00fc]; /* 0x00fc */ |
245 | __u32 st_status_fixed_logout[4]; /* 0x0100 */ | 89 | psw_t psw_save_area; /* 0x0100 */ |
246 | __u8 pad_0x0110[0x0120-0x0110]; /* 0x0110 */ | 90 | __u32 prefixreg_save_area; /* 0x0108 */ |
91 | __u8 pad_0x010c[0x0120-0x010c]; /* 0x010c */ | ||
247 | 92 | ||
248 | /* CPU register save area: defined by architecture */ | 93 | /* CPU register save area: defined by architecture */ |
249 | __u32 access_regs_save_area[16]; /* 0x0120 */ | 94 | __u32 access_regs_save_area[16]; /* 0x0120 */ |
@@ -307,10 +152,32 @@ struct _lowcore | |||
307 | 152 | ||
308 | /* Align to the top 1k of prefix area */ | 153 | /* Align to the top 1k of prefix area */ |
309 | __u8 pad_0x0e08[0x1000-0x0e08]; /* 0x0e08 */ | 154 | __u8 pad_0x0e08[0x1000-0x0e08]; /* 0x0e08 */ |
310 | #else /* !__s390x__ */ | 155 | } __packed; |
311 | /* 0x0000 - 0x01ff: defined by architecture */ | 156 | |
312 | __u32 ccw1[2]; /* 0x0000 */ | 157 | #else /* CONFIG_32BIT */ |
313 | __u32 ccw2[4]; /* 0x0008 */ | 158 | |
159 | #define LC_ORDER 1 | ||
160 | #define LC_PAGES 2 | ||
161 | |||
162 | struct save_area { | ||
163 | u64 fp_regs[16]; | ||
164 | u64 gp_regs[16]; | ||
165 | u8 psw[16]; | ||
166 | u8 pad1[8]; | ||
167 | u32 pref_reg; | ||
168 | u32 fp_ctrl_reg; | ||
169 | u8 pad2[4]; | ||
170 | u32 tod_reg; | ||
171 | u64 timer; | ||
172 | u64 clk_cmp; | ||
173 | u8 pad3[8]; | ||
174 | u32 acc_regs[16]; | ||
175 | u64 ctrl_regs[16]; | ||
176 | } __packed; | ||
177 | |||
178 | struct _lowcore { | ||
179 | __u8 pad_0x0000[0x0014-0x0000]; /* 0x0000 */ | ||
180 | __u32 ipl_parmblock_ptr; /* 0x0014 */ | ||
314 | __u8 pad_0x0018[0x0080-0x0018]; /* 0x0018 */ | 181 | __u8 pad_0x0018[0x0080-0x0018]; /* 0x0018 */ |
315 | __u32 ext_params; /* 0x0080 */ | 182 | __u32 ext_params; /* 0x0080 */ |
316 | __u16 cpu_addr; /* 0x0084 */ | 183 | __u16 cpu_addr; /* 0x0084 */ |
@@ -341,7 +208,9 @@ struct _lowcore | |||
341 | __u8 pad_0x00f0[0x00f4-0x00f0]; /* 0x00f0 */ | 208 | __u8 pad_0x00f0[0x00f4-0x00f0]; /* 0x00f0 */ |
342 | __u32 external_damage_code; /* 0x00f4 */ | 209 | __u32 external_damage_code; /* 0x00f4 */ |
343 | addr_t failing_storage_address; /* 0x00f8 */ | 210 | addr_t failing_storage_address; /* 0x00f8 */ |
344 | __u8 pad_0x0100[0x0120-0x0100]; /* 0x0100 */ | 211 | __u8 pad_0x0100[0x0110-0x0100]; /* 0x0100 */ |
212 | __u64 breaking_event_addr; /* 0x0110 */ | ||
213 | __u8 pad_0x0118[0x0120-0x0118]; /* 0x0118 */ | ||
345 | psw_t restart_old_psw; /* 0x0120 */ | 214 | psw_t restart_old_psw; /* 0x0120 */ |
346 | psw_t external_old_psw; /* 0x0130 */ | 215 | psw_t external_old_psw; /* 0x0130 */ |
347 | psw_t svc_old_psw; /* 0x0140 */ | 216 | psw_t svc_old_psw; /* 0x0140 */ |
@@ -422,7 +291,7 @@ struct _lowcore | |||
422 | /* CPU register save area: defined by architecture */ | 291 | /* CPU register save area: defined by architecture */ |
423 | __u64 floating_pt_save_area[16]; /* 0x1200 */ | 292 | __u64 floating_pt_save_area[16]; /* 0x1200 */ |
424 | __u64 gpregs_save_area[16]; /* 0x1280 */ | 293 | __u64 gpregs_save_area[16]; /* 0x1280 */ |
425 | __u32 st_status_fixed_logout[4]; /* 0x1300 */ | 294 | psw_t psw_save_area; /* 0x1300 */ |
426 | __u8 pad_0x1310[0x1318-0x1310]; /* 0x1310 */ | 295 | __u8 pad_0x1310[0x1318-0x1310]; /* 0x1310 */ |
427 | __u32 prefixreg_save_area; /* 0x1318 */ | 296 | __u32 prefixreg_save_area; /* 0x1318 */ |
428 | __u32 fpt_creg_save_area; /* 0x131c */ | 297 | __u32 fpt_creg_save_area; /* 0x131c */ |
@@ -436,10 +305,12 @@ struct _lowcore | |||
436 | 305 | ||
437 | /* align to the top of the prefix area */ | 306 | /* align to the top of the prefix area */ |
438 | __u8 pad_0x1400[0x2000-0x1400]; /* 0x1400 */ | 307 | __u8 pad_0x1400[0x2000-0x1400]; /* 0x1400 */ |
439 | #endif /* !__s390x__ */ | 308 | } __packed; |
440 | } __attribute__((packed)); /* End structure*/ | 309 | |
310 | #endif /* CONFIG_32BIT */ | ||
441 | 311 | ||
442 | #define S390_lowcore (*((struct _lowcore *) 0)) | 312 | #define S390_lowcore (*((struct _lowcore *) 0)) |
313 | |||
443 | extern struct _lowcore *lowcore_ptr[]; | 314 | extern struct _lowcore *lowcore_ptr[]; |
444 | 315 | ||
445 | static inline void set_prefix(__u32 address) | 316 | static inline void set_prefix(__u32 address) |
@@ -455,6 +326,4 @@ static inline __u32 store_prefix(void) | |||
455 | return address; | 326 | return address; |
456 | } | 327 | } |
457 | 328 | ||
458 | #endif | 329 | #endif /* _ASM_S390_LOWCORE_H */ |
459 | |||
460 | #endif | ||
diff --git a/arch/s390/include/asm/setup.h b/arch/s390/include/asm/setup.h index 76f530b65f00..9ab6bd3a65d1 100644 --- a/arch/s390/include/asm/setup.h +++ b/arch/s390/include/asm/setup.h | |||
@@ -14,14 +14,14 @@ | |||
14 | 14 | ||
15 | #ifdef __KERNEL__ | 15 | #ifdef __KERNEL__ |
16 | 16 | ||
17 | #include <asm/lowcore.h> | ||
18 | #include <asm/types.h> | ||
19 | |||
20 | #define PARMAREA 0x10400 | 17 | #define PARMAREA 0x10400 |
21 | #define MEMORY_CHUNKS 256 | 18 | #define MEMORY_CHUNKS 256 |
22 | 19 | ||
23 | #ifndef __ASSEMBLY__ | 20 | #ifndef __ASSEMBLY__ |
24 | 21 | ||
22 | #include <asm/lowcore.h> | ||
23 | #include <asm/types.h> | ||
24 | |||
25 | #ifndef __s390x__ | 25 | #ifndef __s390x__ |
26 | #define IPL_DEVICE (*(unsigned long *) (0x10404)) | 26 | #define IPL_DEVICE (*(unsigned long *) (0x10404)) |
27 | #define INITRD_START (*(unsigned long *) (0x1040C)) | 27 | #define INITRD_START (*(unsigned long *) (0x1040C)) |
diff --git a/arch/s390/include/asm/thread_info.h b/arch/s390/include/asm/thread_info.h index 66069e736842..34f0873d6525 100644 --- a/arch/s390/include/asm/thread_info.h +++ b/arch/s390/include/asm/thread_info.h | |||
@@ -73,7 +73,7 @@ struct thread_info { | |||
73 | /* how to get the thread information struct from C */ | 73 | /* how to get the thread information struct from C */ |
74 | static inline struct thread_info *current_thread_info(void) | 74 | static inline struct thread_info *current_thread_info(void) |
75 | { | 75 | { |
76 | return (struct thread_info *)((*(unsigned long *) __LC_KERNEL_STACK)-THREAD_SIZE); | 76 | return (struct thread_info *)(S390_lowcore.kernel_stack - THREAD_SIZE); |
77 | } | 77 | } |
78 | 78 | ||
79 | #define THREAD_SIZE_ORDER THREAD_ORDER | 79 | #define THREAD_SIZE_ORDER THREAD_ORDER |
diff --git a/arch/s390/kernel/asm-offsets.c b/arch/s390/kernel/asm-offsets.c index a5850a0cfe80..08db736dded0 100644 --- a/arch/s390/kernel/asm-offsets.c +++ b/arch/s390/kernel/asm-offsets.c | |||
@@ -4,8 +4,10 @@ | |||
4 | * and format the required data. | 4 | * and format the required data. |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #include <linux/sched.h> | 7 | #define ASM_OFFSETS_C |
8 | |||
8 | #include <linux/kbuild.h> | 9 | #include <linux/kbuild.h> |
10 | #include <linux/sched.h> | ||
9 | #include <asm/vdso.h> | 11 | #include <asm/vdso.h> |
10 | #include <asm/sigp.h> | 12 | #include <asm/sigp.h> |
11 | 13 | ||
@@ -22,8 +24,7 @@ int main(void) | |||
22 | DEFINE(__THREAD_info, offsetof(struct task_struct, stack)); | 24 | DEFINE(__THREAD_info, offsetof(struct task_struct, stack)); |
23 | DEFINE(__THREAD_ksp, offsetof(struct task_struct, thread.ksp)); | 25 | DEFINE(__THREAD_ksp, offsetof(struct task_struct, thread.ksp)); |
24 | DEFINE(__THREAD_per, offsetof(struct task_struct, thread.per_info)); | 26 | DEFINE(__THREAD_per, offsetof(struct task_struct, thread.per_info)); |
25 | DEFINE(__THREAD_mm_segment, | 27 | DEFINE(__THREAD_mm_segment, offsetof(struct task_struct, thread.mm_segment)); |
26 | offsetof(struct task_struct, thread.mm_segment)); | ||
27 | BLANK(); | 28 | BLANK(); |
28 | DEFINE(__TASK_pid, offsetof(struct task_struct, pid)); | 29 | DEFINE(__TASK_pid, offsetof(struct task_struct, pid)); |
29 | BLANK(); | 30 | BLANK(); |
@@ -60,18 +61,94 @@ int main(void) | |||
60 | DEFINE(__VDSO_WTOM_NSEC, offsetof(struct vdso_data, wtom_clock_nsec)); | 61 | DEFINE(__VDSO_WTOM_NSEC, offsetof(struct vdso_data, wtom_clock_nsec)); |
61 | DEFINE(__VDSO_TIMEZONE, offsetof(struct vdso_data, tz_minuteswest)); | 62 | DEFINE(__VDSO_TIMEZONE, offsetof(struct vdso_data, tz_minuteswest)); |
62 | DEFINE(__VDSO_ECTG_OK, offsetof(struct vdso_data, ectg_available)); | 63 | DEFINE(__VDSO_ECTG_OK, offsetof(struct vdso_data, ectg_available)); |
63 | DEFINE(__VDSO_ECTG_BASE, | 64 | DEFINE(__VDSO_ECTG_BASE, offsetof(struct vdso_per_cpu_data, ectg_timer_base)); |
64 | offsetof(struct vdso_per_cpu_data, ectg_timer_base)); | 65 | DEFINE(__VDSO_ECTG_USER, offsetof(struct vdso_per_cpu_data, ectg_user_time)); |
65 | DEFINE(__VDSO_ECTG_USER, | ||
66 | offsetof(struct vdso_per_cpu_data, ectg_user_time)); | ||
67 | /* constants used by the vdso */ | 66 | /* constants used by the vdso */ |
68 | DEFINE(CLOCK_REALTIME, CLOCK_REALTIME); | 67 | DEFINE(CLOCK_REALTIME, CLOCK_REALTIME); |
69 | DEFINE(CLOCK_MONOTONIC, CLOCK_MONOTONIC); | 68 | DEFINE(CLOCK_MONOTONIC, CLOCK_MONOTONIC); |
70 | DEFINE(CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC); | 69 | DEFINE(CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC); |
70 | BLANK(); | ||
71 | /* constants for SIGP */ | 71 | /* constants for SIGP */ |
72 | DEFINE(__SIGP_STOP, sigp_stop); | 72 | DEFINE(__SIGP_STOP, sigp_stop); |
73 | DEFINE(__SIGP_RESTART, sigp_restart); | 73 | DEFINE(__SIGP_RESTART, sigp_restart); |
74 | DEFINE(__SIGP_SENSE, sigp_sense); | 74 | DEFINE(__SIGP_SENSE, sigp_sense); |
75 | DEFINE(__SIGP_INITIAL_CPU_RESET, sigp_initial_cpu_reset); | 75 | DEFINE(__SIGP_INITIAL_CPU_RESET, sigp_initial_cpu_reset); |
76 | BLANK(); | ||
77 | /* lowcore offsets */ | ||
78 | DEFINE(__LC_EXT_PARAMS, offsetof(struct _lowcore, ext_params)); | ||
79 | DEFINE(__LC_CPU_ADDRESS, offsetof(struct _lowcore, cpu_addr)); | ||
80 | DEFINE(__LC_EXT_INT_CODE, offsetof(struct _lowcore, ext_int_code)); | ||
81 | DEFINE(__LC_SVC_ILC, offsetof(struct _lowcore, svc_ilc)); | ||
82 | DEFINE(__LC_SVC_INT_CODE, offsetof(struct _lowcore, svc_code)); | ||
83 | DEFINE(__LC_PGM_ILC, offsetof(struct _lowcore, pgm_ilc)); | ||
84 | DEFINE(__LC_PGM_INT_CODE, offsetof(struct _lowcore, pgm_code)); | ||
85 | DEFINE(__LC_PER_ATMID, offsetof(struct _lowcore, per_perc_atmid)); | ||
86 | DEFINE(__LC_PER_ADDRESS, offsetof(struct _lowcore, per_address)); | ||
87 | DEFINE(__LC_PER_ACCESS_ID, offsetof(struct _lowcore, per_access_id)); | ||
88 | DEFINE(__LC_AR_MODE_ID, offsetof(struct _lowcore, ar_access_id)); | ||
89 | DEFINE(__LC_SUBCHANNEL_ID, offsetof(struct _lowcore, subchannel_id)); | ||
90 | DEFINE(__LC_SUBCHANNEL_NR, offsetof(struct _lowcore, subchannel_nr)); | ||
91 | DEFINE(__LC_IO_INT_PARM, offsetof(struct _lowcore, io_int_parm)); | ||
92 | DEFINE(__LC_IO_INT_WORD, offsetof(struct _lowcore, io_int_word)); | ||
93 | DEFINE(__LC_STFL_FAC_LIST, offsetof(struct _lowcore, stfl_fac_list)); | ||
94 | DEFINE(__LC_MCCK_CODE, offsetof(struct _lowcore, mcck_interruption_code)); | ||
95 | DEFINE(__LC_DUMP_REIPL, offsetof(struct _lowcore, ipib)); | ||
96 | BLANK(); | ||
97 | DEFINE(__LC_RST_NEW_PSW, offsetof(struct _lowcore, restart_psw)); | ||
98 | DEFINE(__LC_RST_OLD_PSW, offsetof(struct _lowcore, restart_old_psw)); | ||
99 | DEFINE(__LC_EXT_OLD_PSW, offsetof(struct _lowcore, external_old_psw)); | ||
100 | DEFINE(__LC_SVC_OLD_PSW, offsetof(struct _lowcore, svc_old_psw)); | ||
101 | DEFINE(__LC_PGM_OLD_PSW, offsetof(struct _lowcore, program_old_psw)); | ||
102 | DEFINE(__LC_MCK_OLD_PSW, offsetof(struct _lowcore, mcck_old_psw)); | ||
103 | DEFINE(__LC_IO_OLD_PSW, offsetof(struct _lowcore, io_old_psw)); | ||
104 | DEFINE(__LC_EXT_NEW_PSW, offsetof(struct _lowcore, external_new_psw)); | ||
105 | DEFINE(__LC_SVC_NEW_PSW, offsetof(struct _lowcore, svc_new_psw)); | ||
106 | DEFINE(__LC_PGM_NEW_PSW, offsetof(struct _lowcore, program_new_psw)); | ||
107 | DEFINE(__LC_MCK_NEW_PSW, offsetof(struct _lowcore, mcck_new_psw)); | ||
108 | DEFINE(__LC_IO_NEW_PSW, offsetof(struct _lowcore, io_new_psw)); | ||
109 | DEFINE(__LC_SAVE_AREA, offsetof(struct _lowcore, save_area)); | ||
110 | DEFINE(__LC_RETURN_PSW, offsetof(struct _lowcore, return_psw)); | ||
111 | DEFINE(__LC_RETURN_MCCK_PSW, offsetof(struct _lowcore, return_mcck_psw)); | ||
112 | DEFINE(__LC_SYNC_ENTER_TIMER, offsetof(struct _lowcore, sync_enter_timer)); | ||
113 | DEFINE(__LC_ASYNC_ENTER_TIMER, offsetof(struct _lowcore, async_enter_timer)); | ||
114 | DEFINE(__LC_EXIT_TIMER, offsetof(struct _lowcore, exit_timer)); | ||
115 | DEFINE(__LC_USER_TIMER, offsetof(struct _lowcore, user_timer)); | ||
116 | DEFINE(__LC_SYSTEM_TIMER, offsetof(struct _lowcore, system_timer)); | ||
117 | DEFINE(__LC_STEAL_TIMER, offsetof(struct _lowcore, steal_timer)); | ||
118 | DEFINE(__LC_LAST_UPDATE_TIMER, offsetof(struct _lowcore, last_update_timer)); | ||
119 | DEFINE(__LC_LAST_UPDATE_CLOCK, offsetof(struct _lowcore, last_update_clock)); | ||
120 | DEFINE(__LC_CURRENT, offsetof(struct _lowcore, current_task)); | ||
121 | DEFINE(__LC_THREAD_INFO, offsetof(struct _lowcore, thread_info)); | ||
122 | DEFINE(__LC_KERNEL_STACK, offsetof(struct _lowcore, kernel_stack)); | ||
123 | DEFINE(__LC_ASYNC_STACK, offsetof(struct _lowcore, async_stack)); | ||
124 | DEFINE(__LC_PANIC_STACK, offsetof(struct _lowcore, panic_stack)); | ||
125 | DEFINE(__LC_KERNEL_ASCE, offsetof(struct _lowcore, kernel_asce)); | ||
126 | DEFINE(__LC_USER_ASCE, offsetof(struct _lowcore, user_asce)); | ||
127 | DEFINE(__LC_USER_EXEC_ASCE, offsetof(struct _lowcore, user_exec_asce)); | ||
128 | DEFINE(__LC_CPUID, offsetof(struct _lowcore, cpu_id)); | ||
129 | DEFINE(__LC_INT_CLOCK, offsetof(struct _lowcore, int_clock)); | ||
130 | DEFINE(__LC_MACHINE_FLAGS, offsetof(struct _lowcore, machine_flags)); | ||
131 | DEFINE(__LC_FTRACE_FUNC, offsetof(struct _lowcore, ftrace_func)); | ||
132 | DEFINE(__LC_IRB, offsetof(struct _lowcore, irb)); | ||
133 | DEFINE(__LC_CPU_TIMER_SAVE_AREA, offsetof(struct _lowcore, cpu_timer_save_area)); | ||
134 | DEFINE(__LC_CLOCK_COMP_SAVE_AREA, offsetof(struct _lowcore, clock_comp_save_area)); | ||
135 | DEFINE(__LC_PSW_SAVE_AREA, offsetof(struct _lowcore, psw_save_area)); | ||
136 | DEFINE(__LC_PREFIX_SAVE_AREA, offsetof(struct _lowcore, prefixreg_save_area)); | ||
137 | DEFINE(__LC_AREGS_SAVE_AREA, offsetof(struct _lowcore, access_regs_save_area)); | ||
138 | DEFINE(__LC_FPREGS_SAVE_AREA, offsetof(struct _lowcore, floating_pt_save_area)); | ||
139 | DEFINE(__LC_GPREGS_SAVE_AREA, offsetof(struct _lowcore, gpregs_save_area)); | ||
140 | DEFINE(__LC_CREGS_SAVE_AREA, offsetof(struct _lowcore, cregs_save_area)); | ||
141 | #ifdef CONFIG_32BIT | ||
142 | DEFINE(__LC_PFAULT_INTPARM, offsetof(struct _lowcore, ext_params)); | ||
143 | DEFINE(SAVE_AREA_BASE, offsetof(struct _lowcore, extended_save_area_addr)); | ||
144 | #else /* CONFIG_32BIT */ | ||
145 | DEFINE(__LC_PFAULT_INTPARM, offsetof(struct _lowcore, ext_params2)); | ||
146 | DEFINE(__LC_EXT_PARAMS2, offsetof(struct _lowcore, ext_params2)); | ||
147 | DEFINE(SAVE_AREA_BASE, offsetof(struct _lowcore, floating_pt_save_area)); | ||
148 | DEFINE(__LC_PASTE, offsetof(struct _lowcore, paste)); | ||
149 | DEFINE(__LC_FP_CREG_SAVE_AREA, offsetof(struct _lowcore, fpt_creg_save_area)); | ||
150 | DEFINE(__LC_LAST_BREAK, offsetof(struct _lowcore, breaking_event_addr)); | ||
151 | DEFINE(__LC_VDSO_PER_CPU, offsetof(struct _lowcore, vdso_per_cpu_data)); | ||
152 | #endif /* CONFIG_32BIT */ | ||
76 | return 0; | 153 | return 0; |
77 | } | 154 | } |
diff --git a/arch/s390/kernel/base.S b/arch/s390/kernel/base.S index dc7e5259770f..15e46ca94335 100644 --- a/arch/s390/kernel/base.S +++ b/arch/s390/kernel/base.S | |||
@@ -6,8 +6,8 @@ | |||
6 | * Michael Holzheu <holzheu@de.ibm.com> | 6 | * Michael Holzheu <holzheu@de.ibm.com> |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <asm/asm-offsets.h> | ||
9 | #include <asm/ptrace.h> | 10 | #include <asm/ptrace.h> |
10 | #include <asm/lowcore.h> | ||
11 | 11 | ||
12 | #ifdef CONFIG_64BIT | 12 | #ifdef CONFIG_64BIT |
13 | 13 | ||
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S index e8ef21c51bbe..4348f9bc5393 100644 --- a/arch/s390/kernel/entry.S +++ b/arch/s390/kernel/entry.S | |||
@@ -13,7 +13,6 @@ | |||
13 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <asm/cache.h> | 15 | #include <asm/cache.h> |
16 | #include <asm/lowcore.h> | ||
17 | #include <asm/errno.h> | 16 | #include <asm/errno.h> |
18 | #include <asm/ptrace.h> | 17 | #include <asm/ptrace.h> |
19 | #include <asm/thread_info.h> | 18 | #include <asm/thread_info.h> |
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index f33658f09dd7..29fd0f1e6ec4 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S | |||
@@ -9,11 +9,9 @@ | |||
9 | * Heiko Carstens <heiko.carstens@de.ibm.com> | 9 | * Heiko Carstens <heiko.carstens@de.ibm.com> |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/sys.h> | ||
13 | #include <linux/linkage.h> | 12 | #include <linux/linkage.h> |
14 | #include <linux/init.h> | 13 | #include <linux/init.h> |
15 | #include <asm/cache.h> | 14 | #include <asm/cache.h> |
16 | #include <asm/lowcore.h> | ||
17 | #include <asm/errno.h> | 15 | #include <asm/errno.h> |
18 | #include <asm/ptrace.h> | 16 | #include <asm/ptrace.h> |
19 | #include <asm/thread_info.h> | 17 | #include <asm/thread_info.h> |
diff --git a/arch/s390/kernel/ftrace.c b/arch/s390/kernel/ftrace.c index 5a82bc68193e..314d8f09cf31 100644 --- a/arch/s390/kernel/ftrace.c +++ b/arch/s390/kernel/ftrace.c | |||
@@ -13,7 +13,7 @@ | |||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/types.h> | 14 | #include <linux/types.h> |
15 | #include <trace/syscall.h> | 15 | #include <trace/syscall.h> |
16 | #include <asm/lowcore.h> | 16 | #include <asm/asm-offsets.h> |
17 | 17 | ||
18 | #ifdef CONFIG_DYNAMIC_FTRACE | 18 | #ifdef CONFIG_DYNAMIC_FTRACE |
19 | 19 | ||
diff --git a/arch/s390/kernel/head.S b/arch/s390/kernel/head.S index c52b4f7742fa..9e4dc6084875 100644 --- a/arch/s390/kernel/head.S +++ b/arch/s390/kernel/head.S | |||
@@ -23,7 +23,6 @@ | |||
23 | 23 | ||
24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
25 | #include <asm/setup.h> | 25 | #include <asm/setup.h> |
26 | #include <asm/lowcore.h> | ||
27 | #include <asm/asm-offsets.h> | 26 | #include <asm/asm-offsets.h> |
28 | #include <asm/thread_info.h> | 27 | #include <asm/thread_info.h> |
29 | #include <asm/page.h> | 28 | #include <asm/page.h> |
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c index 998bde3ec5ea..7eedbbcb54aa 100644 --- a/arch/s390/kernel/ipl.c +++ b/arch/s390/kernel/ipl.c | |||
@@ -1917,7 +1917,6 @@ void __init ipl_update_parameters(void) | |||
1917 | void __init ipl_save_parameters(void) | 1917 | void __init ipl_save_parameters(void) |
1918 | { | 1918 | { |
1919 | struct cio_iplinfo iplinfo; | 1919 | struct cio_iplinfo iplinfo; |
1920 | unsigned int *ipl_ptr; | ||
1921 | void *src, *dst; | 1920 | void *src, *dst; |
1922 | 1921 | ||
1923 | if (cio_get_iplinfo(&iplinfo)) | 1922 | if (cio_get_iplinfo(&iplinfo)) |
@@ -1928,11 +1927,10 @@ void __init ipl_save_parameters(void) | |||
1928 | if (!iplinfo.is_qdio) | 1927 | if (!iplinfo.is_qdio) |
1929 | return; | 1928 | return; |
1930 | ipl_flags |= IPL_PARMBLOCK_VALID; | 1929 | ipl_flags |= IPL_PARMBLOCK_VALID; |
1931 | ipl_ptr = (unsigned int *)__LC_IPL_PARMBLOCK_PTR; | 1930 | src = (void *)(unsigned long)S390_lowcore.ipl_parmblock_ptr; |
1932 | src = (void *)(unsigned long)*ipl_ptr; | ||
1933 | dst = (void *)IPL_PARMBLOCK_ORIGIN; | 1931 | dst = (void *)IPL_PARMBLOCK_ORIGIN; |
1934 | memmove(dst, src, PAGE_SIZE); | 1932 | memmove(dst, src, PAGE_SIZE); |
1935 | *ipl_ptr = IPL_PARMBLOCK_ORIGIN; | 1933 | S390_lowcore.ipl_parmblock_ptr = IPL_PARMBLOCK_ORIGIN; |
1936 | } | 1934 | } |
1937 | 1935 | ||
1938 | static LIST_HEAD(rcall); | 1936 | static LIST_HEAD(rcall); |
diff --git a/arch/s390/kernel/reipl.S b/arch/s390/kernel/reipl.S index 2f481cc3d1c9..cb899d9f8505 100644 --- a/arch/s390/kernel/reipl.S +++ b/arch/s390/kernel/reipl.S | |||
@@ -6,7 +6,7 @@ | |||
6 | * Author(s): Holger Smolinski (Holger.Smolinski@de.ibm.com) | 6 | * Author(s): Holger Smolinski (Holger.Smolinski@de.ibm.com) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <asm/lowcore.h> | 9 | #include <asm/asm-offsets.h> |
10 | 10 | ||
11 | # | 11 | # |
12 | # do_reipl_asm | 12 | # do_reipl_asm |
diff --git a/arch/s390/kernel/reipl64.S b/arch/s390/kernel/reipl64.S index 774147824c3d..5e73dee63baa 100644 --- a/arch/s390/kernel/reipl64.S +++ b/arch/s390/kernel/reipl64.S | |||
@@ -4,7 +4,7 @@ | |||
4 | * Denis Joseph Barrow, | 4 | * Denis Joseph Barrow, |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #include <asm/lowcore.h> | 7 | #include <asm/asm-offsets.h> |
8 | 8 | ||
9 | # | 9 | # |
10 | # do_reipl_asm | 10 | # do_reipl_asm |
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index d9fb98cde0fa..77a63ae419f0 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c | |||
@@ -396,15 +396,12 @@ static void __init | |||
396 | setup_lowcore(void) | 396 | setup_lowcore(void) |
397 | { | 397 | { |
398 | struct _lowcore *lc; | 398 | struct _lowcore *lc; |
399 | int lc_pages; | ||
400 | 399 | ||
401 | /* | 400 | /* |
402 | * Setup lowcore for boot cpu | 401 | * Setup lowcore for boot cpu |
403 | */ | 402 | */ |
404 | lc_pages = sizeof(void *) == 8 ? 2 : 1; | 403 | BUILD_BUG_ON(sizeof(struct _lowcore) != LC_PAGES * 4096); |
405 | lc = (struct _lowcore *) | 404 | lc = __alloc_bootmem(LC_PAGES * PAGE_SIZE, LC_PAGES * PAGE_SIZE, 0); |
406 | __alloc_bootmem(lc_pages * PAGE_SIZE, lc_pages * PAGE_SIZE, 0); | ||
407 | memset(lc, 0, lc_pages * PAGE_SIZE); | ||
408 | lc->restart_psw.mask = PSW_BASE_BITS | PSW_DEFAULT_KEY; | 405 | lc->restart_psw.mask = PSW_BASE_BITS | PSW_DEFAULT_KEY; |
409 | lc->restart_psw.addr = | 406 | lc->restart_psw.addr = |
410 | PSW_ADDR_AMODE | (unsigned long) restart_int_handler; | 407 | PSW_ADDR_AMODE | (unsigned long) restart_int_handler; |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index d8a0b115c7c1..8b10127c00ad 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/cpu.h> | 36 | #include <linux/cpu.h> |
37 | #include <linux/timex.h> | 37 | #include <linux/timex.h> |
38 | #include <linux/bootmem.h> | 38 | #include <linux/bootmem.h> |
39 | #include <asm/asm-offsets.h> | ||
39 | #include <asm/ipl.h> | 40 | #include <asm/ipl.h> |
40 | #include <asm/setup.h> | 41 | #include <asm/setup.h> |
41 | #include <asm/sigp.h> | 42 | #include <asm/sigp.h> |
@@ -121,7 +122,7 @@ void smp_switch_to_ipl_cpu(void (*func)(void *), void *data) | |||
121 | sp -= sizeof(struct pt_regs); | 122 | sp -= sizeof(struct pt_regs); |
122 | regs = (struct pt_regs *) sp; | 123 | regs = (struct pt_regs *) sp; |
123 | memcpy(®s->gprs, ¤t_lc->gpregs_save_area, sizeof(regs->gprs)); | 124 | memcpy(®s->gprs, ¤t_lc->gpregs_save_area, sizeof(regs->gprs)); |
124 | memcpy(®s->psw, ¤t_lc->st_status_fixed_logout, sizeof(psw_t)); | 125 | regs->psw = lc->psw_save_area; |
125 | sp -= STACK_FRAME_OVERHEAD; | 126 | sp -= STACK_FRAME_OVERHEAD; |
126 | sf = (struct stack_frame *) sp; | 127 | sf = (struct stack_frame *) sp; |
127 | sf->back_chain = regs->gprs[15]; | 128 | sf->back_chain = regs->gprs[15]; |
diff --git a/arch/s390/kernel/switch_cpu.S b/arch/s390/kernel/switch_cpu.S index c05ee6c221d8..469f11b574fa 100644 --- a/arch/s390/kernel/switch_cpu.S +++ b/arch/s390/kernel/switch_cpu.S | |||
@@ -6,7 +6,6 @@ | |||
6 | */ | 6 | */ |
7 | 7 | ||
8 | #include <asm/asm-offsets.h> | 8 | #include <asm/asm-offsets.h> |
9 | #include <asm/lowcore.h> | ||
10 | #include <asm/ptrace.h> | 9 | #include <asm/ptrace.h> |
11 | 10 | ||
12 | # smp_switch_to_cpu switches to destination cpu and executes the passed function | 11 | # smp_switch_to_cpu switches to destination cpu and executes the passed function |
diff --git a/arch/s390/kernel/switch_cpu64.S b/arch/s390/kernel/switch_cpu64.S index c73ede3c1d68..d94aacc898cb 100644 --- a/arch/s390/kernel/switch_cpu64.S +++ b/arch/s390/kernel/switch_cpu64.S | |||
@@ -6,7 +6,6 @@ | |||
6 | */ | 6 | */ |
7 | 7 | ||
8 | #include <asm/asm-offsets.h> | 8 | #include <asm/asm-offsets.h> |
9 | #include <asm/lowcore.h> | ||
10 | #include <asm/ptrace.h> | 9 | #include <asm/ptrace.h> |
11 | 10 | ||
12 | # smp_switch_to_cpu switches to destination cpu and executes the passed function | 11 | # smp_switch_to_cpu switches to destination cpu and executes the passed function |
diff --git a/arch/s390/kernel/vdso.c b/arch/s390/kernel/vdso.c index 5f99e66c51c3..6bc9c197aa91 100644 --- a/arch/s390/kernel/vdso.c +++ b/arch/s390/kernel/vdso.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/security.h> | 23 | #include <linux/security.h> |
24 | #include <linux/bootmem.h> | 24 | #include <linux/bootmem.h> |
25 | #include <linux/compat.h> | 25 | #include <linux/compat.h> |
26 | #include <asm/asm-offsets.h> | ||
26 | #include <asm/pgtable.h> | 27 | #include <asm/pgtable.h> |
27 | #include <asm/system.h> | 28 | #include <asm/system.h> |
28 | #include <asm/processor.h> | 29 | #include <asm/processor.h> |
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c index da20c3df3ec1..834774d8d5f3 100644 --- a/arch/s390/kvm/interrupt.c +++ b/arch/s390/kvm/interrupt.c | |||
@@ -10,12 +10,12 @@ | |||
10 | * Author(s): Carsten Otte <cotte@de.ibm.com> | 10 | * Author(s): Carsten Otte <cotte@de.ibm.com> |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <asm/lowcore.h> | ||
14 | #include <asm/uaccess.h> | ||
15 | #include <linux/hrtimer.h> | ||
16 | #include <linux/interrupt.h> | 13 | #include <linux/interrupt.h> |
17 | #include <linux/kvm_host.h> | 14 | #include <linux/kvm_host.h> |
15 | #include <linux/hrtimer.h> | ||
18 | #include <linux/signal.h> | 16 | #include <linux/signal.h> |
17 | #include <asm/asm-offsets.h> | ||
18 | #include <asm/uaccess.h> | ||
19 | #include "kvm-s390.h" | 19 | #include "kvm-s390.h" |
20 | #include "gaccess.h" | 20 | #include "gaccess.h" |
21 | 21 | ||
@@ -187,8 +187,8 @@ static void __do_deliver_interrupt(struct kvm_vcpu *vcpu, | |||
187 | if (rc == -EFAULT) | 187 | if (rc == -EFAULT) |
188 | exception = 1; | 188 | exception = 1; |
189 | 189 | ||
190 | rc = put_guest_u64(vcpu, __LC_PFAULT_INTPARM, | 190 | rc = put_guest_u64(vcpu, __LC_EXT_PARAMS2, |
191 | inti->ext.ext_params2); | 191 | inti->ext.ext_params2); |
192 | if (rc == -EFAULT) | 192 | if (rc == -EFAULT) |
193 | exception = 1; | 193 | exception = 1; |
194 | break; | 194 | break; |
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 7f19340481b7..3fa0a10e4668 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/module.h> | 23 | #include <linux/module.h> |
24 | #include <linux/slab.h> | 24 | #include <linux/slab.h> |
25 | #include <linux/timer.h> | 25 | #include <linux/timer.h> |
26 | #include <asm/asm-offsets.h> | ||
26 | #include <asm/lowcore.h> | 27 | #include <asm/lowcore.h> |
27 | #include <asm/pgtable.h> | 28 | #include <asm/pgtable.h> |
28 | #include <asm/nmi.h> | 29 | #include <asm/nmi.h> |
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index fc102e70d9c2..8af5b3cbed50 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/kprobes.h> | 30 | #include <linux/kprobes.h> |
31 | #include <linux/uaccess.h> | 31 | #include <linux/uaccess.h> |
32 | #include <linux/hugetlb.h> | 32 | #include <linux/hugetlb.h> |
33 | #include <asm/asm-offsets.h> | ||
33 | #include <asm/system.h> | 34 | #include <asm/system.h> |
34 | #include <asm/pgtable.h> | 35 | #include <asm/pgtable.h> |
35 | #include <asm/s390_ext.h> | 36 | #include <asm/s390_ext.h> |
diff --git a/drivers/s390/char/zcore.c b/drivers/s390/char/zcore.c index 1d935b2c9bf4..d688693f09b8 100644 --- a/drivers/s390/char/zcore.c +++ b/drivers/s390/char/zcore.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/miscdevice.h> | 16 | #include <linux/miscdevice.h> |
17 | #include <linux/debugfs.h> | 17 | #include <linux/debugfs.h> |
18 | #include <asm/asm-offsets.h> | ||
18 | #include <asm/ipl.h> | 19 | #include <asm/ipl.h> |
19 | #include <asm/sclp.h> | 20 | #include <asm/sclp.h> |
20 | #include <asm/setup.h> | 21 | #include <asm/setup.h> |
diff --git a/drivers/s390/cio/ccwreq.c b/drivers/s390/cio/ccwreq.c index 7a28a3029a3f..37df42af05ec 100644 --- a/drivers/s390/cio/ccwreq.c +++ b/drivers/s390/cio/ccwreq.c | |||
@@ -224,8 +224,8 @@ static void ccwreq_log_status(struct ccw_device *cdev, enum io_status status) | |||
224 | */ | 224 | */ |
225 | void ccw_request_handler(struct ccw_device *cdev) | 225 | void ccw_request_handler(struct ccw_device *cdev) |
226 | { | 226 | { |
227 | struct irb *irb = (struct irb *)&S390_lowcore.irb; | ||
227 | struct ccw_request *req = &cdev->private->req; | 228 | struct ccw_request *req = &cdev->private->req; |
228 | struct irb *irb = (struct irb *) __LC_IRB; | ||
229 | enum io_status status; | 229 | enum io_status status; |
230 | int rc = -EOPNOTSUPP; | 230 | int rc = -EOPNOTSUPP; |
231 | 231 | ||
diff --git a/drivers/s390/cio/chsc_sch.c b/drivers/s390/cio/chsc_sch.c index df7388e88d31..852612f5dba0 100644 --- a/drivers/s390/cio/chsc_sch.c +++ b/drivers/s390/cio/chsc_sch.c | |||
@@ -51,7 +51,7 @@ static void chsc_subchannel_irq(struct subchannel *sch) | |||
51 | { | 51 | { |
52 | struct chsc_private *private = sch->private; | 52 | struct chsc_private *private = sch->private; |
53 | struct chsc_request *request = private->request; | 53 | struct chsc_request *request = private->request; |
54 | struct irb *irb = (struct irb *)__LC_IRB; | 54 | struct irb *irb = (struct irb *)&S390_lowcore.irb; |
55 | 55 | ||
56 | CHSC_LOG(4, "irb"); | 56 | CHSC_LOG(4, "irb"); |
57 | CHSC_LOG_HEX(4, irb, sizeof(*irb)); | 57 | CHSC_LOG_HEX(4, irb, sizeof(*irb)); |
diff --git a/drivers/s390/cio/cio.c b/drivers/s390/cio/cio.c index f9d8c7936a09..f736cdcf08ad 100644 --- a/drivers/s390/cio/cio.c +++ b/drivers/s390/cio/cio.c | |||
@@ -625,8 +625,8 @@ void __irq_entry do_IRQ(struct pt_regs *regs) | |||
625 | /* | 625 | /* |
626 | * Get interrupt information from lowcore | 626 | * Get interrupt information from lowcore |
627 | */ | 627 | */ |
628 | tpi_info = (struct tpi_info *) __LC_SUBCHANNEL_ID; | 628 | tpi_info = (struct tpi_info *)&S390_lowcore.subchannel_id; |
629 | irb = (struct irb *) __LC_IRB; | 629 | irb = (struct irb *)&S390_lowcore.irb; |
630 | do { | 630 | do { |
631 | kstat_cpu(smp_processor_id()).irqs[IO_INTERRUPT]++; | 631 | kstat_cpu(smp_processor_id()).irqs[IO_INTERRUPT]++; |
632 | /* | 632 | /* |
@@ -682,10 +682,10 @@ static int cio_tpi(void) | |||
682 | struct irb *irb; | 682 | struct irb *irb; |
683 | int irq_context; | 683 | int irq_context; |
684 | 684 | ||
685 | tpi_info = (struct tpi_info *) __LC_SUBCHANNEL_ID; | 685 | tpi_info = (struct tpi_info *)&S390_lowcore.subchannel_id; |
686 | if (tpi(NULL) != 1) | 686 | if (tpi(NULL) != 1) |
687 | return 0; | 687 | return 0; |
688 | irb = (struct irb *) __LC_IRB; | 688 | irb = (struct irb *)&S390_lowcore.irb; |
689 | /* Store interrupt response block to lowcore. */ | 689 | /* Store interrupt response block to lowcore. */ |
690 | if (tsch(tpi_info->schid, irb) != 0) | 690 | if (tsch(tpi_info->schid, irb) != 0) |
691 | /* Not status pending or not operational. */ | 691 | /* Not status pending or not operational. */ |
@@ -885,7 +885,7 @@ __clear_io_subchannel_easy(struct subchannel_id schid) | |||
885 | struct tpi_info ti; | 885 | struct tpi_info ti; |
886 | 886 | ||
887 | if (tpi(&ti)) { | 887 | if (tpi(&ti)) { |
888 | tsch(ti.schid, (struct irb *)__LC_IRB); | 888 | tsch(ti.schid, (struct irb *)&S390_lowcore.irb); |
889 | if (schid_equal(&ti.schid, &schid)) | 889 | if (schid_equal(&ti.schid, &schid)) |
890 | return 0; | 890 | return 0; |
891 | } | 891 | } |
@@ -1083,7 +1083,7 @@ int __init cio_get_iplinfo(struct cio_iplinfo *iplinfo) | |||
1083 | struct subchannel_id schid; | 1083 | struct subchannel_id schid; |
1084 | struct schib schib; | 1084 | struct schib schib; |
1085 | 1085 | ||
1086 | schid = *(struct subchannel_id *)__LC_SUBCHANNEL_ID; | 1086 | schid = *(struct subchannel_id *)&S390_lowcore.subchannel_id; |
1087 | if (!schid.one) | 1087 | if (!schid.one) |
1088 | return -ENODEV; | 1088 | return -ENODEV; |
1089 | if (stsch(schid, &schib)) | 1089 | if (stsch(schid, &schib)) |
diff --git a/drivers/s390/cio/device_fsm.c b/drivers/s390/cio/device_fsm.c index 2cb01861ce34..c56ab94612f9 100644 --- a/drivers/s390/cio/device_fsm.c +++ b/drivers/s390/cio/device_fsm.c | |||
@@ -690,7 +690,7 @@ ccw_device_irq(struct ccw_device *cdev, enum dev_event dev_event) | |||
690 | struct irb *irb; | 690 | struct irb *irb; |
691 | int is_cmd; | 691 | int is_cmd; |
692 | 692 | ||
693 | irb = (struct irb *) __LC_IRB; | 693 | irb = (struct irb *)&S390_lowcore.irb; |
694 | is_cmd = !scsw_is_tm(&irb->scsw); | 694 | is_cmd = !scsw_is_tm(&irb->scsw); |
695 | /* Check for unsolicited interrupt. */ | 695 | /* Check for unsolicited interrupt. */ |
696 | if (!scsw_is_solicited(&irb->scsw)) { | 696 | if (!scsw_is_solicited(&irb->scsw)) { |
@@ -755,7 +755,7 @@ ccw_device_w4sense(struct ccw_device *cdev, enum dev_event dev_event) | |||
755 | { | 755 | { |
756 | struct irb *irb; | 756 | struct irb *irb; |
757 | 757 | ||
758 | irb = (struct irb *) __LC_IRB; | 758 | irb = (struct irb *)&S390_lowcore.irb; |
759 | /* Check for unsolicited interrupt. */ | 759 | /* Check for unsolicited interrupt. */ |
760 | if (scsw_stctl(&irb->scsw) == | 760 | if (scsw_stctl(&irb->scsw) == |
761 | (SCSW_STCTL_STATUS_PEND | SCSW_STCTL_ALERT_STATUS)) { | 761 | (SCSW_STCTL_STATUS_PEND | SCSW_STCTL_ALERT_STATUS)) { |
diff --git a/drivers/s390/kvm/kvm_virtio.c b/drivers/s390/kvm/kvm_virtio.c index 2930fc763ac5..b2fc4fd63f7f 100644 --- a/drivers/s390/kvm/kvm_virtio.c +++ b/drivers/s390/kvm/kvm_virtio.c | |||
@@ -340,11 +340,11 @@ static void kvm_extint_handler(u16 code) | |||
340 | return; | 340 | return; |
341 | 341 | ||
342 | /* The LSB might be overloaded, we have to mask it */ | 342 | /* The LSB might be overloaded, we have to mask it */ |
343 | vq = (struct virtqueue *) ((*(long *) __LC_PFAULT_INTPARM) & ~1UL); | 343 | vq = (struct virtqueue *)(S390_lowcore.ext_params2 & ~1UL); |
344 | 344 | ||
345 | /* We use the LSB of extparam, to decide, if this interrupt is a config | 345 | /* We use the LSB of extparam, to decide, if this interrupt is a config |
346 | * change or a "standard" interrupt */ | 346 | * change or a "standard" interrupt */ |
347 | config_changed = (*(int *) __LC_EXT_PARAMS & 1); | 347 | config_changed = S390_lowcore.ext_params & 1; |
348 | 348 | ||
349 | if (config_changed) { | 349 | if (config_changed) { |
350 | struct virtio_driver *drv; | 350 | struct virtio_driver *drv; |