diff options
Diffstat (limited to 'arch/alpha/kernel')
-rw-r--r-- | arch/alpha/kernel/entry.S | 399 | ||||
-rw-r--r-- | arch/alpha/kernel/irq_alpha.c | 2 | ||||
-rw-r--r-- | arch/alpha/kernel/smp.c | 5 | ||||
-rw-r--r-- | arch/alpha/kernel/sys_dp264.c | 8 | ||||
-rw-r--r-- | arch/alpha/kernel/sys_marvel.c | 3 | ||||
-rw-r--r-- | arch/alpha/kernel/systbls.S | 2 | ||||
-rw-r--r-- | arch/alpha/kernel/time.c | 4 | ||||
-rw-r--r-- | arch/alpha/kernel/traps.c | 8 |
8 files changed, 300 insertions, 131 deletions
diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S index f62a994ef126..a969b95ee5ac 100644 --- a/arch/alpha/kernel/entry.S +++ b/arch/alpha/kernel/entry.S | |||
@@ -12,11 +12,32 @@ | |||
12 | 12 | ||
13 | .text | 13 | .text |
14 | .set noat | 14 | .set noat |
15 | .cfi_sections .debug_frame | ||
15 | 16 | ||
16 | /* Stack offsets. */ | 17 | /* Stack offsets. */ |
17 | #define SP_OFF 184 | 18 | #define SP_OFF 184 |
18 | #define SWITCH_STACK_SIZE 320 | 19 | #define SWITCH_STACK_SIZE 320 |
19 | 20 | ||
21 | .macro CFI_START_OSF_FRAME func | ||
22 | .align 4 | ||
23 | .globl \func | ||
24 | .type \func,@function | ||
25 | \func: | ||
26 | .cfi_startproc simple | ||
27 | .cfi_return_column 64 | ||
28 | .cfi_def_cfa $sp, 48 | ||
29 | .cfi_rel_offset 64, 8 | ||
30 | .cfi_rel_offset $gp, 16 | ||
31 | .cfi_rel_offset $16, 24 | ||
32 | .cfi_rel_offset $17, 32 | ||
33 | .cfi_rel_offset $18, 40 | ||
34 | .endm | ||
35 | |||
36 | .macro CFI_END_OSF_FRAME func | ||
37 | .cfi_endproc | ||
38 | .size \func, . - \func | ||
39 | .endm | ||
40 | |||
20 | /* | 41 | /* |
21 | * This defines the normal kernel pt-regs layout. | 42 | * This defines the normal kernel pt-regs layout. |
22 | * | 43 | * |
@@ -27,100 +48,158 @@ | |||
27 | * the palcode-provided values are available to the signal handler. | 48 | * the palcode-provided values are available to the signal handler. |
28 | */ | 49 | */ |
29 | 50 | ||
30 | #define SAVE_ALL \ | 51 | .macro SAVE_ALL |
31 | subq $sp, SP_OFF, $sp; \ | 52 | subq $sp, SP_OFF, $sp |
32 | stq $0, 0($sp); \ | 53 | .cfi_adjust_cfa_offset SP_OFF |
33 | stq $1, 8($sp); \ | 54 | stq $0, 0($sp) |
34 | stq $2, 16($sp); \ | 55 | stq $1, 8($sp) |
35 | stq $3, 24($sp); \ | 56 | stq $2, 16($sp) |
36 | stq $4, 32($sp); \ | 57 | stq $3, 24($sp) |
37 | stq $28, 144($sp); \ | 58 | stq $4, 32($sp) |
38 | lda $2, alpha_mv; \ | 59 | stq $28, 144($sp) |
39 | stq $5, 40($sp); \ | 60 | .cfi_rel_offset $0, 0 |
40 | stq $6, 48($sp); \ | 61 | .cfi_rel_offset $1, 8 |
41 | stq $7, 56($sp); \ | 62 | .cfi_rel_offset $2, 16 |
42 | stq $8, 64($sp); \ | 63 | .cfi_rel_offset $3, 24 |
43 | stq $19, 72($sp); \ | 64 | .cfi_rel_offset $4, 32 |
44 | stq $20, 80($sp); \ | 65 | .cfi_rel_offset $28, 144 |
45 | stq $21, 88($sp); \ | 66 | lda $2, alpha_mv |
46 | ldq $2, HAE_CACHE($2); \ | 67 | stq $5, 40($sp) |
47 | stq $22, 96($sp); \ | 68 | stq $6, 48($sp) |
48 | stq $23, 104($sp); \ | 69 | stq $7, 56($sp) |
49 | stq $24, 112($sp); \ | 70 | stq $8, 64($sp) |
50 | stq $25, 120($sp); \ | 71 | stq $19, 72($sp) |
51 | stq $26, 128($sp); \ | 72 | stq $20, 80($sp) |
52 | stq $27, 136($sp); \ | 73 | stq $21, 88($sp) |
53 | stq $2, 152($sp); \ | 74 | ldq $2, HAE_CACHE($2) |
54 | stq $16, 160($sp); \ | 75 | stq $22, 96($sp) |
55 | stq $17, 168($sp); \ | 76 | stq $23, 104($sp) |
77 | stq $24, 112($sp) | ||
78 | stq $25, 120($sp) | ||
79 | stq $26, 128($sp) | ||
80 | stq $27, 136($sp) | ||
81 | stq $2, 152($sp) | ||
82 | stq $16, 160($sp) | ||
83 | stq $17, 168($sp) | ||
56 | stq $18, 176($sp) | 84 | stq $18, 176($sp) |
85 | .cfi_rel_offset $5, 40 | ||
86 | .cfi_rel_offset $6, 48 | ||
87 | .cfi_rel_offset $7, 56 | ||
88 | .cfi_rel_offset $8, 64 | ||
89 | .cfi_rel_offset $19, 72 | ||
90 | .cfi_rel_offset $20, 80 | ||
91 | .cfi_rel_offset $21, 88 | ||
92 | .cfi_rel_offset $22, 96 | ||
93 | .cfi_rel_offset $23, 104 | ||
94 | .cfi_rel_offset $24, 112 | ||
95 | .cfi_rel_offset $25, 120 | ||
96 | .cfi_rel_offset $26, 128 | ||
97 | .cfi_rel_offset $27, 136 | ||
98 | .endm | ||
57 | 99 | ||
58 | #define RESTORE_ALL \ | 100 | .macro RESTORE_ALL |
59 | lda $19, alpha_mv; \ | 101 | lda $19, alpha_mv |
60 | ldq $0, 0($sp); \ | 102 | ldq $0, 0($sp) |
61 | ldq $1, 8($sp); \ | 103 | ldq $1, 8($sp) |
62 | ldq $2, 16($sp); \ | 104 | ldq $2, 16($sp) |
63 | ldq $3, 24($sp); \ | 105 | ldq $3, 24($sp) |
64 | ldq $21, 152($sp); \ | 106 | ldq $21, 152($sp) |
65 | ldq $20, HAE_CACHE($19); \ | 107 | ldq $20, HAE_CACHE($19) |
66 | ldq $4, 32($sp); \ | 108 | ldq $4, 32($sp) |
67 | ldq $5, 40($sp); \ | 109 | ldq $5, 40($sp) |
68 | ldq $6, 48($sp); \ | 110 | ldq $6, 48($sp) |
69 | ldq $7, 56($sp); \ | 111 | ldq $7, 56($sp) |
70 | subq $20, $21, $20; \ | 112 | subq $20, $21, $20 |
71 | ldq $8, 64($sp); \ | 113 | ldq $8, 64($sp) |
72 | beq $20, 99f; \ | 114 | beq $20, 99f |
73 | ldq $20, HAE_REG($19); \ | 115 | ldq $20, HAE_REG($19) |
74 | stq $21, HAE_CACHE($19); \ | 116 | stq $21, HAE_CACHE($19) |
75 | stq $21, 0($20); \ | 117 | stq $21, 0($20) |
76 | 99:; \ | 118 | 99: ldq $19, 72($sp) |
77 | ldq $19, 72($sp); \ | 119 | ldq $20, 80($sp) |
78 | ldq $20, 80($sp); \ | 120 | ldq $21, 88($sp) |
79 | ldq $21, 88($sp); \ | 121 | ldq $22, 96($sp) |
80 | ldq $22, 96($sp); \ | 122 | ldq $23, 104($sp) |
81 | ldq $23, 104($sp); \ | 123 | ldq $24, 112($sp) |
82 | ldq $24, 112($sp); \ | 124 | ldq $25, 120($sp) |
83 | ldq $25, 120($sp); \ | 125 | ldq $26, 128($sp) |
84 | ldq $26, 128($sp); \ | 126 | ldq $27, 136($sp) |
85 | ldq $27, 136($sp); \ | 127 | ldq $28, 144($sp) |
86 | ldq $28, 144($sp); \ | ||
87 | addq $sp, SP_OFF, $sp | 128 | addq $sp, SP_OFF, $sp |
129 | .cfi_restore $0 | ||
130 | .cfi_restore $1 | ||
131 | .cfi_restore $2 | ||
132 | .cfi_restore $3 | ||
133 | .cfi_restore $4 | ||
134 | .cfi_restore $5 | ||
135 | .cfi_restore $6 | ||
136 | .cfi_restore $7 | ||
137 | .cfi_restore $8 | ||
138 | .cfi_restore $19 | ||
139 | .cfi_restore $20 | ||
140 | .cfi_restore $21 | ||
141 | .cfi_restore $22 | ||
142 | .cfi_restore $23 | ||
143 | .cfi_restore $24 | ||
144 | .cfi_restore $25 | ||
145 | .cfi_restore $26 | ||
146 | .cfi_restore $27 | ||
147 | .cfi_restore $28 | ||
148 | .cfi_adjust_cfa_offset -SP_OFF | ||
149 | .endm | ||
150 | |||
151 | .macro DO_SWITCH_STACK | ||
152 | bsr $1, do_switch_stack | ||
153 | .cfi_adjust_cfa_offset SWITCH_STACK_SIZE | ||
154 | .cfi_rel_offset $9, 0 | ||
155 | .cfi_rel_offset $10, 8 | ||
156 | .cfi_rel_offset $11, 16 | ||
157 | .cfi_rel_offset $12, 24 | ||
158 | .cfi_rel_offset $13, 32 | ||
159 | .cfi_rel_offset $14, 40 | ||
160 | .cfi_rel_offset $15, 48 | ||
161 | /* We don't really care about the FP registers for debugging. */ | ||
162 | .endm | ||
163 | |||
164 | .macro UNDO_SWITCH_STACK | ||
165 | bsr $1, undo_switch_stack | ||
166 | .cfi_restore $9 | ||
167 | .cfi_restore $10 | ||
168 | .cfi_restore $11 | ||
169 | .cfi_restore $12 | ||
170 | .cfi_restore $13 | ||
171 | .cfi_restore $14 | ||
172 | .cfi_restore $15 | ||
173 | .cfi_adjust_cfa_offset -SWITCH_STACK_SIZE | ||
174 | .endm | ||
88 | 175 | ||
89 | /* | 176 | /* |
90 | * Non-syscall kernel entry points. | 177 | * Non-syscall kernel entry points. |
91 | */ | 178 | */ |
92 | 179 | ||
93 | .align 4 | 180 | CFI_START_OSF_FRAME entInt |
94 | .globl entInt | ||
95 | .ent entInt | ||
96 | entInt: | ||
97 | SAVE_ALL | 181 | SAVE_ALL |
98 | lda $8, 0x3fff | 182 | lda $8, 0x3fff |
99 | lda $26, ret_from_sys_call | 183 | lda $26, ret_from_sys_call |
100 | bic $sp, $8, $8 | 184 | bic $sp, $8, $8 |
101 | mov $sp, $19 | 185 | mov $sp, $19 |
102 | jsr $31, do_entInt | 186 | jsr $31, do_entInt |
103 | .end entInt | 187 | CFI_END_OSF_FRAME entInt |
104 | 188 | ||
105 | .align 4 | 189 | CFI_START_OSF_FRAME entArith |
106 | .globl entArith | ||
107 | .ent entArith | ||
108 | entArith: | ||
109 | SAVE_ALL | 190 | SAVE_ALL |
110 | lda $8, 0x3fff | 191 | lda $8, 0x3fff |
111 | lda $26, ret_from_sys_call | 192 | lda $26, ret_from_sys_call |
112 | bic $sp, $8, $8 | 193 | bic $sp, $8, $8 |
113 | mov $sp, $18 | 194 | mov $sp, $18 |
114 | jsr $31, do_entArith | 195 | jsr $31, do_entArith |
115 | .end entArith | 196 | CFI_END_OSF_FRAME entArith |
116 | 197 | ||
117 | .align 4 | 198 | CFI_START_OSF_FRAME entMM |
118 | .globl entMM | ||
119 | .ent entMM | ||
120 | entMM: | ||
121 | SAVE_ALL | 199 | SAVE_ALL |
122 | /* save $9 - $15 so the inline exception code can manipulate them. */ | 200 | /* save $9 - $15 so the inline exception code can manipulate them. */ |
123 | subq $sp, 56, $sp | 201 | subq $sp, 56, $sp |
202 | .cfi_adjust_cfa_offset 56 | ||
124 | stq $9, 0($sp) | 203 | stq $9, 0($sp) |
125 | stq $10, 8($sp) | 204 | stq $10, 8($sp) |
126 | stq $11, 16($sp) | 205 | stq $11, 16($sp) |
@@ -128,6 +207,13 @@ entMM: | |||
128 | stq $13, 32($sp) | 207 | stq $13, 32($sp) |
129 | stq $14, 40($sp) | 208 | stq $14, 40($sp) |
130 | stq $15, 48($sp) | 209 | stq $15, 48($sp) |
210 | .cfi_rel_offset $9, 0 | ||
211 | .cfi_rel_offset $10, 8 | ||
212 | .cfi_rel_offset $11, 16 | ||
213 | .cfi_rel_offset $12, 24 | ||
214 | .cfi_rel_offset $13, 32 | ||
215 | .cfi_rel_offset $14, 40 | ||
216 | .cfi_rel_offset $15, 48 | ||
131 | addq $sp, 56, $19 | 217 | addq $sp, 56, $19 |
132 | /* handle the fault */ | 218 | /* handle the fault */ |
133 | lda $8, 0x3fff | 219 | lda $8, 0x3fff |
@@ -142,28 +228,33 @@ entMM: | |||
142 | ldq $14, 40($sp) | 228 | ldq $14, 40($sp) |
143 | ldq $15, 48($sp) | 229 | ldq $15, 48($sp) |
144 | addq $sp, 56, $sp | 230 | addq $sp, 56, $sp |
231 | .cfi_restore $9 | ||
232 | .cfi_restore $10 | ||
233 | .cfi_restore $11 | ||
234 | .cfi_restore $12 | ||
235 | .cfi_restore $13 | ||
236 | .cfi_restore $14 | ||
237 | .cfi_restore $15 | ||
238 | .cfi_adjust_cfa_offset -56 | ||
145 | /* finish up the syscall as normal. */ | 239 | /* finish up the syscall as normal. */ |
146 | br ret_from_sys_call | 240 | br ret_from_sys_call |
147 | .end entMM | 241 | CFI_END_OSF_FRAME entMM |
148 | 242 | ||
149 | .align 4 | 243 | CFI_START_OSF_FRAME entIF |
150 | .globl entIF | ||
151 | .ent entIF | ||
152 | entIF: | ||
153 | SAVE_ALL | 244 | SAVE_ALL |
154 | lda $8, 0x3fff | 245 | lda $8, 0x3fff |
155 | lda $26, ret_from_sys_call | 246 | lda $26, ret_from_sys_call |
156 | bic $sp, $8, $8 | 247 | bic $sp, $8, $8 |
157 | mov $sp, $17 | 248 | mov $sp, $17 |
158 | jsr $31, do_entIF | 249 | jsr $31, do_entIF |
159 | .end entIF | 250 | CFI_END_OSF_FRAME entIF |
160 | 251 | ||
161 | .align 4 | 252 | CFI_START_OSF_FRAME entUna |
162 | .globl entUna | ||
163 | .ent entUna | ||
164 | entUna: | ||
165 | lda $sp, -256($sp) | 253 | lda $sp, -256($sp) |
254 | .cfi_adjust_cfa_offset 256 | ||
166 | stq $0, 0($sp) | 255 | stq $0, 0($sp) |
256 | .cfi_rel_offset $0, 0 | ||
257 | .cfi_remember_state | ||
167 | ldq $0, 256($sp) /* get PS */ | 258 | ldq $0, 256($sp) /* get PS */ |
168 | stq $1, 8($sp) | 259 | stq $1, 8($sp) |
169 | stq $2, 16($sp) | 260 | stq $2, 16($sp) |
@@ -195,6 +286,32 @@ entUna: | |||
195 | stq $28, 224($sp) | 286 | stq $28, 224($sp) |
196 | mov $sp, $19 | 287 | mov $sp, $19 |
197 | stq $gp, 232($sp) | 288 | stq $gp, 232($sp) |
289 | .cfi_rel_offset $1, 1*8 | ||
290 | .cfi_rel_offset $2, 2*8 | ||
291 | .cfi_rel_offset $3, 3*8 | ||
292 | .cfi_rel_offset $4, 4*8 | ||
293 | .cfi_rel_offset $5, 5*8 | ||
294 | .cfi_rel_offset $6, 6*8 | ||
295 | .cfi_rel_offset $7, 7*8 | ||
296 | .cfi_rel_offset $8, 8*8 | ||
297 | .cfi_rel_offset $9, 9*8 | ||
298 | .cfi_rel_offset $10, 10*8 | ||
299 | .cfi_rel_offset $11, 11*8 | ||
300 | .cfi_rel_offset $12, 12*8 | ||
301 | .cfi_rel_offset $13, 13*8 | ||
302 | .cfi_rel_offset $14, 14*8 | ||
303 | .cfi_rel_offset $15, 15*8 | ||
304 | .cfi_rel_offset $19, 19*8 | ||
305 | .cfi_rel_offset $20, 20*8 | ||
306 | .cfi_rel_offset $21, 21*8 | ||
307 | .cfi_rel_offset $22, 22*8 | ||
308 | .cfi_rel_offset $23, 23*8 | ||
309 | .cfi_rel_offset $24, 24*8 | ||
310 | .cfi_rel_offset $25, 25*8 | ||
311 | .cfi_rel_offset $26, 26*8 | ||
312 | .cfi_rel_offset $27, 27*8 | ||
313 | .cfi_rel_offset $28, 28*8 | ||
314 | .cfi_rel_offset $29, 29*8 | ||
198 | lda $8, 0x3fff | 315 | lda $8, 0x3fff |
199 | stq $31, 248($sp) | 316 | stq $31, 248($sp) |
200 | bic $sp, $8, $8 | 317 | bic $sp, $8, $8 |
@@ -228,16 +345,45 @@ entUna: | |||
228 | ldq $28, 224($sp) | 345 | ldq $28, 224($sp) |
229 | ldq $gp, 232($sp) | 346 | ldq $gp, 232($sp) |
230 | lda $sp, 256($sp) | 347 | lda $sp, 256($sp) |
348 | .cfi_restore $1 | ||
349 | .cfi_restore $2 | ||
350 | .cfi_restore $3 | ||
351 | .cfi_restore $4 | ||
352 | .cfi_restore $5 | ||
353 | .cfi_restore $6 | ||
354 | .cfi_restore $7 | ||
355 | .cfi_restore $8 | ||
356 | .cfi_restore $9 | ||
357 | .cfi_restore $10 | ||
358 | .cfi_restore $11 | ||
359 | .cfi_restore $12 | ||
360 | .cfi_restore $13 | ||
361 | .cfi_restore $14 | ||
362 | .cfi_restore $15 | ||
363 | .cfi_restore $19 | ||
364 | .cfi_restore $20 | ||
365 | .cfi_restore $21 | ||
366 | .cfi_restore $22 | ||
367 | .cfi_restore $23 | ||
368 | .cfi_restore $24 | ||
369 | .cfi_restore $25 | ||
370 | .cfi_restore $26 | ||
371 | .cfi_restore $27 | ||
372 | .cfi_restore $28 | ||
373 | .cfi_restore $29 | ||
374 | .cfi_adjust_cfa_offset -256 | ||
231 | call_pal PAL_rti | 375 | call_pal PAL_rti |
232 | .end entUna | ||
233 | 376 | ||
234 | .align 4 | 377 | .align 4 |
235 | .ent entUnaUser | ||
236 | entUnaUser: | 378 | entUnaUser: |
379 | .cfi_restore_state | ||
237 | ldq $0, 0($sp) /* restore original $0 */ | 380 | ldq $0, 0($sp) /* restore original $0 */ |
238 | lda $sp, 256($sp) /* pop entUna's stack frame */ | 381 | lda $sp, 256($sp) /* pop entUna's stack frame */ |
382 | .cfi_restore $0 | ||
383 | .cfi_adjust_cfa_offset -256 | ||
239 | SAVE_ALL /* setup normal kernel stack */ | 384 | SAVE_ALL /* setup normal kernel stack */ |
240 | lda $sp, -56($sp) | 385 | lda $sp, -56($sp) |
386 | .cfi_adjust_cfa_offset 56 | ||
241 | stq $9, 0($sp) | 387 | stq $9, 0($sp) |
242 | stq $10, 8($sp) | 388 | stq $10, 8($sp) |
243 | stq $11, 16($sp) | 389 | stq $11, 16($sp) |
@@ -245,6 +391,13 @@ entUnaUser: | |||
245 | stq $13, 32($sp) | 391 | stq $13, 32($sp) |
246 | stq $14, 40($sp) | 392 | stq $14, 40($sp) |
247 | stq $15, 48($sp) | 393 | stq $15, 48($sp) |
394 | .cfi_rel_offset $9, 0 | ||
395 | .cfi_rel_offset $10, 8 | ||
396 | .cfi_rel_offset $11, 16 | ||
397 | .cfi_rel_offset $12, 24 | ||
398 | .cfi_rel_offset $13, 32 | ||
399 | .cfi_rel_offset $14, 40 | ||
400 | .cfi_rel_offset $15, 48 | ||
248 | lda $8, 0x3fff | 401 | lda $8, 0x3fff |
249 | addq $sp, 56, $19 | 402 | addq $sp, 56, $19 |
250 | bic $sp, $8, $8 | 403 | bic $sp, $8, $8 |
@@ -257,20 +410,25 @@ entUnaUser: | |||
257 | ldq $14, 40($sp) | 410 | ldq $14, 40($sp) |
258 | ldq $15, 48($sp) | 411 | ldq $15, 48($sp) |
259 | lda $sp, 56($sp) | 412 | lda $sp, 56($sp) |
413 | .cfi_restore $9 | ||
414 | .cfi_restore $10 | ||
415 | .cfi_restore $11 | ||
416 | .cfi_restore $12 | ||
417 | .cfi_restore $13 | ||
418 | .cfi_restore $14 | ||
419 | .cfi_restore $15 | ||
420 | .cfi_adjust_cfa_offset -56 | ||
260 | br ret_from_sys_call | 421 | br ret_from_sys_call |
261 | .end entUnaUser | 422 | CFI_END_OSF_FRAME entUna |
262 | 423 | ||
263 | .align 4 | 424 | CFI_START_OSF_FRAME entDbg |
264 | .globl entDbg | ||
265 | .ent entDbg | ||
266 | entDbg: | ||
267 | SAVE_ALL | 425 | SAVE_ALL |
268 | lda $8, 0x3fff | 426 | lda $8, 0x3fff |
269 | lda $26, ret_from_sys_call | 427 | lda $26, ret_from_sys_call |
270 | bic $sp, $8, $8 | 428 | bic $sp, $8, $8 |
271 | mov $sp, $16 | 429 | mov $sp, $16 |
272 | jsr $31, do_entDbg | 430 | jsr $31, do_entDbg |
273 | .end entDbg | 431 | CFI_END_OSF_FRAME entDbg |
274 | 432 | ||
275 | /* | 433 | /* |
276 | * The system call entry point is special. Most importantly, it looks | 434 | * The system call entry point is special. Most importantly, it looks |
@@ -285,8 +443,12 @@ entDbg: | |||
285 | 443 | ||
286 | .align 4 | 444 | .align 4 |
287 | .globl entSys | 445 | .globl entSys |
288 | .globl ret_from_sys_call | 446 | .type entSys, @function |
289 | .ent entSys | 447 | .cfi_startproc simple |
448 | .cfi_return_column 64 | ||
449 | .cfi_def_cfa $sp, 48 | ||
450 | .cfi_rel_offset 64, 8 | ||
451 | .cfi_rel_offset $gp, 16 | ||
290 | entSys: | 452 | entSys: |
291 | SAVE_ALL | 453 | SAVE_ALL |
292 | lda $8, 0x3fff | 454 | lda $8, 0x3fff |
@@ -300,6 +462,9 @@ entSys: | |||
300 | stq $17, SP_OFF+32($sp) | 462 | stq $17, SP_OFF+32($sp) |
301 | s8addq $0, $5, $5 | 463 | s8addq $0, $5, $5 |
302 | stq $18, SP_OFF+40($sp) | 464 | stq $18, SP_OFF+40($sp) |
465 | .cfi_rel_offset $16, SP_OFF+24 | ||
466 | .cfi_rel_offset $17, SP_OFF+32 | ||
467 | .cfi_rel_offset $18, SP_OFF+40 | ||
303 | blbs $3, strace | 468 | blbs $3, strace |
304 | beq $4, 1f | 469 | beq $4, 1f |
305 | ldq $27, 0($5) | 470 | ldq $27, 0($5) |
@@ -310,6 +475,7 @@ entSys: | |||
310 | stq $31, 72($sp) /* a3=0 => no error */ | 475 | stq $31, 72($sp) /* a3=0 => no error */ |
311 | 476 | ||
312 | .align 4 | 477 | .align 4 |
478 | .globl ret_from_sys_call | ||
313 | ret_from_sys_call: | 479 | ret_from_sys_call: |
314 | cmovne $26, 0, $18 /* $18 = 0 => non-restartable */ | 480 | cmovne $26, 0, $18 /* $18 = 0 => non-restartable */ |
315 | ldq $0, SP_OFF($sp) | 481 | ldq $0, SP_OFF($sp) |
@@ -324,10 +490,12 @@ ret_to_user: | |||
324 | and $17, _TIF_WORK_MASK, $2 | 490 | and $17, _TIF_WORK_MASK, $2 |
325 | bne $2, work_pending | 491 | bne $2, work_pending |
326 | restore_all: | 492 | restore_all: |
493 | .cfi_remember_state | ||
327 | RESTORE_ALL | 494 | RESTORE_ALL |
328 | call_pal PAL_rti | 495 | call_pal PAL_rti |
329 | 496 | ||
330 | ret_to_kernel: | 497 | ret_to_kernel: |
498 | .cfi_restore_state | ||
331 | lda $16, 7 | 499 | lda $16, 7 |
332 | call_pal PAL_swpipl | 500 | call_pal PAL_swpipl |
333 | br restore_all | 501 | br restore_all |
@@ -356,7 +524,6 @@ $ret_success: | |||
356 | stq $0, 0($sp) | 524 | stq $0, 0($sp) |
357 | stq $31, 72($sp) /* a3=0 => no error */ | 525 | stq $31, 72($sp) /* a3=0 => no error */ |
358 | br ret_from_sys_call | 526 | br ret_from_sys_call |
359 | .end entSys | ||
360 | 527 | ||
361 | /* | 528 | /* |
362 | * Do all cleanup when returning from all interrupts and system calls. | 529 | * Do all cleanup when returning from all interrupts and system calls. |
@@ -370,7 +537,7 @@ $ret_success: | |||
370 | */ | 537 | */ |
371 | 538 | ||
372 | .align 4 | 539 | .align 4 |
373 | .ent work_pending | 540 | .type work_pending, @function |
374 | work_pending: | 541 | work_pending: |
375 | and $17, _TIF_NOTIFY_RESUME | _TIF_SIGPENDING, $2 | 542 | and $17, _TIF_NOTIFY_RESUME | _TIF_SIGPENDING, $2 |
376 | bne $2, $work_notifysig | 543 | bne $2, $work_notifysig |
@@ -387,23 +554,22 @@ $work_resched: | |||
387 | 554 | ||
388 | $work_notifysig: | 555 | $work_notifysig: |
389 | mov $sp, $16 | 556 | mov $sp, $16 |
390 | bsr $1, do_switch_stack | 557 | DO_SWITCH_STACK |
391 | jsr $26, do_work_pending | 558 | jsr $26, do_work_pending |
392 | bsr $1, undo_switch_stack | 559 | UNDO_SWITCH_STACK |
393 | br restore_all | 560 | br restore_all |
394 | .end work_pending | ||
395 | 561 | ||
396 | /* | 562 | /* |
397 | * PTRACE syscall handler | 563 | * PTRACE syscall handler |
398 | */ | 564 | */ |
399 | 565 | ||
400 | .align 4 | 566 | .align 4 |
401 | .ent strace | 567 | .type strace, @function |
402 | strace: | 568 | strace: |
403 | /* set up signal stack, call syscall_trace */ | 569 | /* set up signal stack, call syscall_trace */ |
404 | bsr $1, do_switch_stack | 570 | DO_SWITCH_STACK |
405 | jsr $26, syscall_trace_enter /* returns the syscall number */ | 571 | jsr $26, syscall_trace_enter /* returns the syscall number */ |
406 | bsr $1, undo_switch_stack | 572 | UNDO_SWITCH_STACK |
407 | 573 | ||
408 | /* get the arguments back.. */ | 574 | /* get the arguments back.. */ |
409 | ldq $16, SP_OFF+24($sp) | 575 | ldq $16, SP_OFF+24($sp) |
@@ -431,9 +597,9 @@ ret_from_straced: | |||
431 | $strace_success: | 597 | $strace_success: |
432 | stq $0, 0($sp) /* save return value */ | 598 | stq $0, 0($sp) /* save return value */ |
433 | 599 | ||
434 | bsr $1, do_switch_stack | 600 | DO_SWITCH_STACK |
435 | jsr $26, syscall_trace_leave | 601 | jsr $26, syscall_trace_leave |
436 | bsr $1, undo_switch_stack | 602 | UNDO_SWITCH_STACK |
437 | br $31, ret_from_sys_call | 603 | br $31, ret_from_sys_call |
438 | 604 | ||
439 | .align 3 | 605 | .align 3 |
@@ -447,26 +613,31 @@ $strace_error: | |||
447 | stq $0, 0($sp) | 613 | stq $0, 0($sp) |
448 | stq $1, 72($sp) /* a3 for return */ | 614 | stq $1, 72($sp) /* a3 for return */ |
449 | 615 | ||
450 | bsr $1, do_switch_stack | 616 | DO_SWITCH_STACK |
451 | mov $18, $9 /* save old syscall number */ | 617 | mov $18, $9 /* save old syscall number */ |
452 | mov $19, $10 /* save old a3 */ | 618 | mov $19, $10 /* save old a3 */ |
453 | jsr $26, syscall_trace_leave | 619 | jsr $26, syscall_trace_leave |
454 | mov $9, $18 | 620 | mov $9, $18 |
455 | mov $10, $19 | 621 | mov $10, $19 |
456 | bsr $1, undo_switch_stack | 622 | UNDO_SWITCH_STACK |
457 | 623 | ||
458 | mov $31, $26 /* tell "ret_from_sys_call" we can restart */ | 624 | mov $31, $26 /* tell "ret_from_sys_call" we can restart */ |
459 | br ret_from_sys_call | 625 | br ret_from_sys_call |
460 | .end strace | 626 | CFI_END_OSF_FRAME entSys |
461 | 627 | ||
462 | /* | 628 | /* |
463 | * Save and restore the switch stack -- aka the balance of the user context. | 629 | * Save and restore the switch stack -- aka the balance of the user context. |
464 | */ | 630 | */ |
465 | 631 | ||
466 | .align 4 | 632 | .align 4 |
467 | .ent do_switch_stack | 633 | .type do_switch_stack, @function |
634 | .cfi_startproc simple | ||
635 | .cfi_return_column 64 | ||
636 | .cfi_def_cfa $sp, 0 | ||
637 | .cfi_register 64, $1 | ||
468 | do_switch_stack: | 638 | do_switch_stack: |
469 | lda $sp, -SWITCH_STACK_SIZE($sp) | 639 | lda $sp, -SWITCH_STACK_SIZE($sp) |
640 | .cfi_adjust_cfa_offset SWITCH_STACK_SIZE | ||
470 | stq $9, 0($sp) | 641 | stq $9, 0($sp) |
471 | stq $10, 8($sp) | 642 | stq $10, 8($sp) |
472 | stq $11, 16($sp) | 643 | stq $11, 16($sp) |
@@ -510,10 +681,14 @@ do_switch_stack: | |||
510 | stt $f0, 312($sp) # save fpcr in slot of $f31 | 681 | stt $f0, 312($sp) # save fpcr in slot of $f31 |
511 | ldt $f0, 64($sp) # dont let "do_switch_stack" change fp state. | 682 | ldt $f0, 64($sp) # dont let "do_switch_stack" change fp state. |
512 | ret $31, ($1), 1 | 683 | ret $31, ($1), 1 |
513 | .end do_switch_stack | 684 | .cfi_endproc |
685 | .size do_switch_stack, .-do_switch_stack | ||
514 | 686 | ||
515 | .align 4 | 687 | .align 4 |
516 | .ent undo_switch_stack | 688 | .type undo_switch_stack, @function |
689 | .cfi_startproc simple | ||
690 | .cfi_def_cfa $sp, 0 | ||
691 | .cfi_register 64, $1 | ||
517 | undo_switch_stack: | 692 | undo_switch_stack: |
518 | ldq $9, 0($sp) | 693 | ldq $9, 0($sp) |
519 | ldq $10, 8($sp) | 694 | ldq $10, 8($sp) |
@@ -558,7 +733,8 @@ undo_switch_stack: | |||
558 | ldt $f30, 304($sp) | 733 | ldt $f30, 304($sp) |
559 | lda $sp, SWITCH_STACK_SIZE($sp) | 734 | lda $sp, SWITCH_STACK_SIZE($sp) |
560 | ret $31, ($1), 1 | 735 | ret $31, ($1), 1 |
561 | .end undo_switch_stack | 736 | .cfi_endproc |
737 | .size undo_switch_stack, .-undo_switch_stack | ||
562 | 738 | ||
563 | /* | 739 | /* |
564 | * The meat of the context switch code. | 740 | * The meat of the context switch code. |
@@ -566,17 +742,18 @@ undo_switch_stack: | |||
566 | 742 | ||
567 | .align 4 | 743 | .align 4 |
568 | .globl alpha_switch_to | 744 | .globl alpha_switch_to |
569 | .ent alpha_switch_to | 745 | .type alpha_switch_to, @function |
746 | .cfi_startproc | ||
570 | alpha_switch_to: | 747 | alpha_switch_to: |
571 | .prologue 0 | 748 | DO_SWITCH_STACK |
572 | bsr $1, do_switch_stack | ||
573 | call_pal PAL_swpctx | 749 | call_pal PAL_swpctx |
574 | lda $8, 0x3fff | 750 | lda $8, 0x3fff |
575 | bsr $1, undo_switch_stack | 751 | UNDO_SWITCH_STACK |
576 | bic $sp, $8, $8 | 752 | bic $sp, $8, $8 |
577 | mov $17, $0 | 753 | mov $17, $0 |
578 | ret | 754 | ret |
579 | .end alpha_switch_to | 755 | .cfi_endproc |
756 | .size alpha_switch_to, .-alpha_switch_to | ||
580 | 757 | ||
581 | /* | 758 | /* |
582 | * New processes begin life here. | 759 | * New processes begin life here. |
diff --git a/arch/alpha/kernel/irq_alpha.c b/arch/alpha/kernel/irq_alpha.c index f433fc11877a..28e4429596f3 100644 --- a/arch/alpha/kernel/irq_alpha.c +++ b/arch/alpha/kernel/irq_alpha.c | |||
@@ -236,7 +236,7 @@ void __init | |||
236 | init_rtc_irq(void) | 236 | init_rtc_irq(void) |
237 | { | 237 | { |
238 | irq_set_chip_and_handler_name(RTC_IRQ, &dummy_irq_chip, | 238 | irq_set_chip_and_handler_name(RTC_IRQ, &dummy_irq_chip, |
239 | handle_simple_irq, "RTC"); | 239 | handle_percpu_irq, "RTC"); |
240 | setup_irq(RTC_IRQ, &timer_irqaction); | 240 | setup_irq(RTC_IRQ, &timer_irqaction); |
241 | } | 241 | } |
242 | 242 | ||
diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c index 53b18a620e1c..9dbbcb3b9146 100644 --- a/arch/alpha/kernel/smp.c +++ b/arch/alpha/kernel/smp.c | |||
@@ -264,9 +264,10 @@ recv_secondary_console_msg(void) | |||
264 | if (cnt <= 0 || cnt >= 80) | 264 | if (cnt <= 0 || cnt >= 80) |
265 | strcpy(buf, "<<< BOGUS MSG >>>"); | 265 | strcpy(buf, "<<< BOGUS MSG >>>"); |
266 | else { | 266 | else { |
267 | cp1 = (char *) &cpu->ipc_buffer[11]; | 267 | cp1 = (char *) &cpu->ipc_buffer[1]; |
268 | cp2 = buf; | 268 | cp2 = buf; |
269 | strcpy(cp2, cp1); | 269 | memcpy(cp2, cp1, cnt); |
270 | cp2[cnt] = '\0'; | ||
270 | 271 | ||
271 | while ((cp2 = strchr(cp2, '\r')) != 0) { | 272 | while ((cp2 = strchr(cp2, '\r')) != 0) { |
272 | *cp2 = ' '; | 273 | *cp2 = ' '; |
diff --git a/arch/alpha/kernel/sys_dp264.c b/arch/alpha/kernel/sys_dp264.c index 5bf401f7ea97..6c35159bc00e 100644 --- a/arch/alpha/kernel/sys_dp264.c +++ b/arch/alpha/kernel/sys_dp264.c | |||
@@ -190,9 +190,6 @@ static struct irq_chip clipper_irq_type = { | |||
190 | static void | 190 | static void |
191 | dp264_device_interrupt(unsigned long vector) | 191 | dp264_device_interrupt(unsigned long vector) |
192 | { | 192 | { |
193 | #if 1 | ||
194 | printk("dp264_device_interrupt: NOT IMPLEMENTED YET!!\n"); | ||
195 | #else | ||
196 | unsigned long pld; | 193 | unsigned long pld; |
197 | unsigned int i; | 194 | unsigned int i; |
198 | 195 | ||
@@ -210,12 +207,7 @@ dp264_device_interrupt(unsigned long vector) | |||
210 | isa_device_interrupt(vector); | 207 | isa_device_interrupt(vector); |
211 | else | 208 | else |
212 | handle_irq(16 + i); | 209 | handle_irq(16 + i); |
213 | #if 0 | ||
214 | TSUNAMI_cchip->dir0.csr = 1UL << i; mb(); | ||
215 | tmp = TSUNAMI_cchip->dir0.csr; | ||
216 | #endif | ||
217 | } | 210 | } |
218 | #endif | ||
219 | } | 211 | } |
220 | 212 | ||
221 | static void | 213 | static void |
diff --git a/arch/alpha/kernel/sys_marvel.c b/arch/alpha/kernel/sys_marvel.c index 407accc80877..c92e389ff219 100644 --- a/arch/alpha/kernel/sys_marvel.c +++ b/arch/alpha/kernel/sys_marvel.c | |||
@@ -317,8 +317,9 @@ marvel_init_irq(void) | |||
317 | } | 317 | } |
318 | 318 | ||
319 | static int | 319 | static int |
320 | marvel_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | 320 | marvel_map_irq(const struct pci_dev *cdev, u8 slot, u8 pin) |
321 | { | 321 | { |
322 | struct pci_dev *dev = (struct pci_dev *)cdev; | ||
322 | struct pci_controller *hose = dev->sysdata; | 323 | struct pci_controller *hose = dev->sysdata; |
323 | struct io7_port *io7_port = hose->sysdata; | 324 | struct io7_port *io7_port = hose->sysdata; |
324 | struct io7 *io7 = io7_port->io7; | 325 | struct io7 *io7 = io7_port->io7; |
diff --git a/arch/alpha/kernel/systbls.S b/arch/alpha/kernel/systbls.S index 4284ec798ec9..dca9b3fb0071 100644 --- a/arch/alpha/kernel/systbls.S +++ b/arch/alpha/kernel/systbls.S | |||
@@ -524,6 +524,8 @@ sys_call_table: | |||
524 | .quad sys_sendmmsg | 524 | .quad sys_sendmmsg |
525 | .quad sys_process_vm_readv | 525 | .quad sys_process_vm_readv |
526 | .quad sys_process_vm_writev /* 505 */ | 526 | .quad sys_process_vm_writev /* 505 */ |
527 | .quad sys_kcmp | ||
528 | .quad sys_finit_module | ||
527 | 529 | ||
528 | .size sys_call_table, . - sys_call_table | 530 | .size sys_call_table, . - sys_call_table |
529 | .type sys_call_table, @object | 531 | .type sys_call_table, @object |
diff --git a/arch/alpha/kernel/time.c b/arch/alpha/kernel/time.c index e336694ca042..ea3395036556 100644 --- a/arch/alpha/kernel/time.c +++ b/arch/alpha/kernel/time.c | |||
@@ -105,9 +105,7 @@ void arch_irq_work_raise(void) | |||
105 | 105 | ||
106 | static inline __u32 rpcc(void) | 106 | static inline __u32 rpcc(void) |
107 | { | 107 | { |
108 | __u32 result; | 108 | return __builtin_alpha_rpcc(); |
109 | asm volatile ("rpcc %0" : "=r"(result)); | ||
110 | return result; | ||
111 | } | 109 | } |
112 | 110 | ||
113 | int update_persistent_clock(struct timespec now) | 111 | int update_persistent_clock(struct timespec now) |
diff --git a/arch/alpha/kernel/traps.c b/arch/alpha/kernel/traps.c index be1fba334bd0..bd0665cdc840 100644 --- a/arch/alpha/kernel/traps.c +++ b/arch/alpha/kernel/traps.c | |||
@@ -66,8 +66,8 @@ dik_show_regs(struct pt_regs *regs, unsigned long *r9_15) | |||
66 | { | 66 | { |
67 | printk("pc = [<%016lx>] ra = [<%016lx>] ps = %04lx %s\n", | 67 | printk("pc = [<%016lx>] ra = [<%016lx>] ps = %04lx %s\n", |
68 | regs->pc, regs->r26, regs->ps, print_tainted()); | 68 | regs->pc, regs->r26, regs->ps, print_tainted()); |
69 | print_symbol("pc is at %s\n", regs->pc); | 69 | printk("pc is at %pSR\n", (void *)regs->pc); |
70 | print_symbol("ra is at %s\n", regs->r26 ); | 70 | printk("ra is at %pSR\n", (void *)regs->r26); |
71 | printk("v0 = %016lx t0 = %016lx t1 = %016lx\n", | 71 | printk("v0 = %016lx t0 = %016lx t1 = %016lx\n", |
72 | regs->r0, regs->r1, regs->r2); | 72 | regs->r0, regs->r1, regs->r2); |
73 | printk("t2 = %016lx t3 = %016lx t4 = %016lx\n", | 73 | printk("t2 = %016lx t3 = %016lx t4 = %016lx\n", |
@@ -132,9 +132,7 @@ dik_show_trace(unsigned long *sp) | |||
132 | continue; | 132 | continue; |
133 | if (tmp >= (unsigned long) &_etext) | 133 | if (tmp >= (unsigned long) &_etext) |
134 | continue; | 134 | continue; |
135 | printk("[<%lx>]", tmp); | 135 | printk("[<%lx>] %pSR\n", tmp, (void *)tmp); |
136 | print_symbol(" %s", tmp); | ||
137 | printk("\n"); | ||
138 | if (i > 40) { | 136 | if (i > 40) { |
139 | printk(" ..."); | 137 | printk(" ..."); |
140 | break; | 138 | break; |