diff options
author | Jeff Garzik <jeff@garzik.org> | 2006-10-11 04:59:46 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-10-11 04:59:46 -0400 |
commit | 701328a7b58d50d8640c21ba5fdf3170b1ddac16 (patch) | |
tree | 99a3fe44310a97e92ad1cb3a01f2ee3f6ed0d59a /arch/alpha | |
parent | 53e36ada37cb8b01cfbf674580a79edc0bb764c7 (diff) | |
parent | 53a5fbdc2dff55161a206ed1a1385a8fa8055c34 (diff) |
Merge branch 'master' into upstream-fixes
Diffstat (limited to 'arch/alpha')
39 files changed, 162 insertions, 162 deletions
diff --git a/arch/alpha/kernel/core_apecs.c b/arch/alpha/kernel/core_apecs.c index a27ba12ba35e..ca46b2c24457 100644 --- a/arch/alpha/kernel/core_apecs.c +++ b/arch/alpha/kernel/core_apecs.c | |||
@@ -387,8 +387,7 @@ apecs_pci_clr_err(void) | |||
387 | } | 387 | } |
388 | 388 | ||
389 | void | 389 | void |
390 | apecs_machine_check(unsigned long vector, unsigned long la_ptr, | 390 | apecs_machine_check(unsigned long vector, unsigned long la_ptr) |
391 | struct pt_regs * regs) | ||
392 | { | 391 | { |
393 | struct el_common *mchk_header; | 392 | struct el_common *mchk_header; |
394 | struct el_apecs_procdata *mchk_procdata; | 393 | struct el_apecs_procdata *mchk_procdata; |
@@ -412,7 +411,7 @@ apecs_machine_check(unsigned long vector, unsigned long la_ptr, | |||
412 | wrmces(0x7); /* reset machine check pending flag */ | 411 | wrmces(0x7); /* reset machine check pending flag */ |
413 | mb(); | 412 | mb(); |
414 | 413 | ||
415 | process_mcheck_info(vector, la_ptr, regs, "APECS", | 414 | process_mcheck_info(vector, la_ptr, "APECS", |
416 | (mcheck_expected(0) | 415 | (mcheck_expected(0) |
417 | && (mchk_sysdata->epic_dcsr & 0x0c00UL))); | 416 | && (mchk_sysdata->epic_dcsr & 0x0c00UL))); |
418 | } | 417 | } |
diff --git a/arch/alpha/kernel/core_cia.c b/arch/alpha/kernel/core_cia.c index fd563064363c..1d6ee6c985f9 100644 --- a/arch/alpha/kernel/core_cia.c +++ b/arch/alpha/kernel/core_cia.c | |||
@@ -1192,8 +1192,7 @@ cia_decode_mchk(unsigned long la_ptr) | |||
1192 | } | 1192 | } |
1193 | 1193 | ||
1194 | void | 1194 | void |
1195 | cia_machine_check(unsigned long vector, unsigned long la_ptr, | 1195 | cia_machine_check(unsigned long vector, unsigned long la_ptr) |
1196 | struct pt_regs * regs) | ||
1197 | { | 1196 | { |
1198 | int expected; | 1197 | int expected; |
1199 | 1198 | ||
@@ -1208,5 +1207,5 @@ cia_machine_check(unsigned long vector, unsigned long la_ptr, | |||
1208 | expected = mcheck_expected(0); | 1207 | expected = mcheck_expected(0); |
1209 | if (!expected && vector == 0x660) | 1208 | if (!expected && vector == 0x660) |
1210 | expected = cia_decode_mchk(la_ptr); | 1209 | expected = cia_decode_mchk(la_ptr); |
1211 | process_mcheck_info(vector, la_ptr, regs, "CIA", expected); | 1210 | process_mcheck_info(vector, la_ptr, "CIA", expected); |
1212 | } | 1211 | } |
diff --git a/arch/alpha/kernel/core_lca.c b/arch/alpha/kernel/core_lca.c index 6a5a9145c676..4843f6ec9f3a 100644 --- a/arch/alpha/kernel/core_lca.c +++ b/arch/alpha/kernel/core_lca.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/tty.h> | 19 | #include <linux/tty.h> |
20 | 20 | ||
21 | #include <asm/ptrace.h> | 21 | #include <asm/ptrace.h> |
22 | #include <asm/irq_regs.h> | ||
22 | #include <asm/smp.h> | 23 | #include <asm/smp.h> |
23 | 24 | ||
24 | #include "proto.h" | 25 | #include "proto.h" |
@@ -386,8 +387,7 @@ ioc_error(__u32 stat0, __u32 stat1) | |||
386 | } | 387 | } |
387 | 388 | ||
388 | void | 389 | void |
389 | lca_machine_check(unsigned long vector, unsigned long la_ptr, | 390 | lca_machine_check(unsigned long vector, unsigned long la_ptr) |
390 | struct pt_regs *regs) | ||
391 | { | 391 | { |
392 | const char * reason; | 392 | const char * reason; |
393 | union el_lca el; | 393 | union el_lca el; |
@@ -397,7 +397,7 @@ lca_machine_check(unsigned long vector, unsigned long la_ptr, | |||
397 | wrmces(rdmces()); /* reset machine check pending flag */ | 397 | wrmces(rdmces()); /* reset machine check pending flag */ |
398 | 398 | ||
399 | printk(KERN_CRIT "LCA machine check: vector=%#lx pc=%#lx code=%#x\n", | 399 | printk(KERN_CRIT "LCA machine check: vector=%#lx pc=%#lx code=%#x\n", |
400 | vector, regs->pc, (unsigned int) el.c->code); | 400 | vector, get_irq_regs()->pc, (unsigned int) el.c->code); |
401 | 401 | ||
402 | /* | 402 | /* |
403 | * The first quadword after the common header always seems to | 403 | * The first quadword after the common header always seems to |
diff --git a/arch/alpha/kernel/core_mcpcia.c b/arch/alpha/kernel/core_mcpcia.c index 28849c894153..8d019071190a 100644 --- a/arch/alpha/kernel/core_mcpcia.c +++ b/arch/alpha/kernel/core_mcpcia.c | |||
@@ -572,8 +572,7 @@ mcpcia_print_system_area(unsigned long la_ptr) | |||
572 | } | 572 | } |
573 | 573 | ||
574 | void | 574 | void |
575 | mcpcia_machine_check(unsigned long vector, unsigned long la_ptr, | 575 | mcpcia_machine_check(unsigned long vector, unsigned long la_ptr) |
576 | struct pt_regs * regs) | ||
577 | { | 576 | { |
578 | struct el_common *mchk_header; | 577 | struct el_common *mchk_header; |
579 | struct el_MCPCIA_uncorrected_frame_mcheck *mchk_logout; | 578 | struct el_MCPCIA_uncorrected_frame_mcheck *mchk_logout; |
@@ -610,7 +609,7 @@ mcpcia_machine_check(unsigned long vector, unsigned long la_ptr, | |||
610 | wrmces(0x7); | 609 | wrmces(0x7); |
611 | mb(); | 610 | mb(); |
612 | 611 | ||
613 | process_mcheck_info(vector, la_ptr, regs, "MCPCIA", expected != 0); | 612 | process_mcheck_info(vector, la_ptr, "MCPCIA", expected != 0); |
614 | if (!expected && vector != 0x620 && vector != 0x630) { | 613 | if (!expected && vector != 0x620 && vector != 0x630) { |
615 | mcpcia_print_uncorrectable(mchk_logout); | 614 | mcpcia_print_uncorrectable(mchk_logout); |
616 | mcpcia_print_system_area(la_ptr); | 615 | mcpcia_print_system_area(la_ptr); |
diff --git a/arch/alpha/kernel/core_polaris.c b/arch/alpha/kernel/core_polaris.c index 277674a500ff..c5a271d37abd 100644 --- a/arch/alpha/kernel/core_polaris.c +++ b/arch/alpha/kernel/core_polaris.c | |||
@@ -187,8 +187,7 @@ polaris_pci_clr_err(void) | |||
187 | } | 187 | } |
188 | 188 | ||
189 | void | 189 | void |
190 | polaris_machine_check(unsigned long vector, unsigned long la_ptr, | 190 | polaris_machine_check(unsigned long vector, unsigned long la_ptr) |
191 | struct pt_regs * regs) | ||
192 | { | 191 | { |
193 | /* Clear the error before any reporting. */ | 192 | /* Clear the error before any reporting. */ |
194 | mb(); | 193 | mb(); |
@@ -198,6 +197,6 @@ polaris_machine_check(unsigned long vector, unsigned long la_ptr, | |||
198 | wrmces(0x7); | 197 | wrmces(0x7); |
199 | mb(); | 198 | mb(); |
200 | 199 | ||
201 | process_mcheck_info(vector, la_ptr, regs, "POLARIS", | 200 | process_mcheck_info(vector, la_ptr, "POLARIS", |
202 | mcheck_expected(0)); | 201 | mcheck_expected(0)); |
203 | } | 202 | } |
diff --git a/arch/alpha/kernel/core_t2.c b/arch/alpha/kernel/core_t2.c index ecce09e3626a..f5ca5255eb06 100644 --- a/arch/alpha/kernel/core_t2.c +++ b/arch/alpha/kernel/core_t2.c | |||
@@ -551,8 +551,7 @@ t2_clear_errors(int cpu) | |||
551 | * Hence all the taken/expected/any_expected/last_taken stuff... | 551 | * Hence all the taken/expected/any_expected/last_taken stuff... |
552 | */ | 552 | */ |
553 | void | 553 | void |
554 | t2_machine_check(unsigned long vector, unsigned long la_ptr, | 554 | t2_machine_check(unsigned long vector, unsigned long la_ptr) |
555 | struct pt_regs * regs) | ||
556 | { | 555 | { |
557 | int cpu = smp_processor_id(); | 556 | int cpu = smp_processor_id(); |
558 | #ifdef CONFIG_VERBOSE_MCHECK | 557 | #ifdef CONFIG_VERBOSE_MCHECK |
@@ -618,5 +617,5 @@ t2_machine_check(unsigned long vector, unsigned long la_ptr, | |||
618 | } | 617 | } |
619 | #endif | 618 | #endif |
620 | 619 | ||
621 | process_mcheck_info(vector, la_ptr, regs, "T2", mcheck_expected(cpu)); | 620 | process_mcheck_info(vector, la_ptr, "T2", mcheck_expected(cpu)); |
622 | } | 621 | } |
diff --git a/arch/alpha/kernel/core_tsunami.c b/arch/alpha/kernel/core_tsunami.c index 8aa305bd6a2c..ce623c6e55e1 100644 --- a/arch/alpha/kernel/core_tsunami.c +++ b/arch/alpha/kernel/core_tsunami.c | |||
@@ -443,8 +443,7 @@ tsunami_pci_clr_err(void) | |||
443 | } | 443 | } |
444 | 444 | ||
445 | void | 445 | void |
446 | tsunami_machine_check(unsigned long vector, unsigned long la_ptr, | 446 | tsunami_machine_check(unsigned long vector, unsigned long la_ptr) |
447 | struct pt_regs * regs) | ||
448 | { | 447 | { |
449 | /* Clear error before any reporting. */ | 448 | /* Clear error before any reporting. */ |
450 | mb(); | 449 | mb(); |
@@ -454,6 +453,6 @@ tsunami_machine_check(unsigned long vector, unsigned long la_ptr, | |||
454 | wrmces(0x7); | 453 | wrmces(0x7); |
455 | mb(); | 454 | mb(); |
456 | 455 | ||
457 | process_mcheck_info(vector, la_ptr, regs, "TSUNAMI", | 456 | process_mcheck_info(vector, la_ptr, "TSUNAMI", |
458 | mcheck_expected(smp_processor_id())); | 457 | mcheck_expected(smp_processor_id())); |
459 | } | 458 | } |
diff --git a/arch/alpha/kernel/core_wildfire.c b/arch/alpha/kernel/core_wildfire.c index 2b767a1bad96..7e072443d7fd 100644 --- a/arch/alpha/kernel/core_wildfire.c +++ b/arch/alpha/kernel/core_wildfire.c | |||
@@ -322,8 +322,7 @@ wildfire_init_arch(void) | |||
322 | } | 322 | } |
323 | 323 | ||
324 | void | 324 | void |
325 | wildfire_machine_check(unsigned long vector, unsigned long la_ptr, | 325 | wildfire_machine_check(unsigned long vector, unsigned long la_ptr) |
326 | struct pt_regs * regs) | ||
327 | { | 326 | { |
328 | mb(); | 327 | mb(); |
329 | mb(); /* magic */ | 328 | mb(); /* magic */ |
@@ -332,7 +331,7 @@ wildfire_machine_check(unsigned long vector, unsigned long la_ptr, | |||
332 | wrmces(0x7); | 331 | wrmces(0x7); |
333 | mb(); | 332 | mb(); |
334 | 333 | ||
335 | process_mcheck_info(vector, la_ptr, regs, "WILDFIRE", | 334 | process_mcheck_info(vector, la_ptr, "WILDFIRE", |
336 | mcheck_expected(smp_processor_id())); | 335 | mcheck_expected(smp_processor_id())); |
337 | } | 336 | } |
338 | 337 | ||
diff --git a/arch/alpha/kernel/err_ev6.c b/arch/alpha/kernel/err_ev6.c index 64f59f2fcf5c..69b5f4ea7355 100644 --- a/arch/alpha/kernel/err_ev6.c +++ b/arch/alpha/kernel/err_ev6.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/sched.h> | 11 | #include <linux/sched.h> |
12 | 12 | ||
13 | #include <asm/io.h> | 13 | #include <asm/io.h> |
14 | #include <asm/irq_regs.h> | ||
14 | #include <asm/hwrpb.h> | 15 | #include <asm/hwrpb.h> |
15 | #include <asm/smp.h> | 16 | #include <asm/smp.h> |
16 | #include <asm/err_common.h> | 17 | #include <asm/err_common.h> |
@@ -229,7 +230,7 @@ ev6_process_logout_frame(struct el_common *mchk_header, int print) | |||
229 | } | 230 | } |
230 | 231 | ||
231 | void | 232 | void |
232 | ev6_machine_check(u64 vector, u64 la_ptr, struct pt_regs *regs) | 233 | ev6_machine_check(u64 vector, u64 la_ptr) |
233 | { | 234 | { |
234 | struct el_common *mchk_header = (struct el_common *)la_ptr; | 235 | struct el_common *mchk_header = (struct el_common *)la_ptr; |
235 | 236 | ||
@@ -260,7 +261,7 @@ ev6_machine_check(u64 vector, u64 la_ptr, struct pt_regs *regs) | |||
260 | (unsigned int)vector, (int)smp_processor_id()); | 261 | (unsigned int)vector, (int)smp_processor_id()); |
261 | 262 | ||
262 | ev6_process_logout_frame(mchk_header, 1); | 263 | ev6_process_logout_frame(mchk_header, 1); |
263 | dik_show_regs(regs, NULL); | 264 | dik_show_regs(get_irq_regs(), NULL); |
264 | 265 | ||
265 | err_print_prefix = saved_err_prefix; | 266 | err_print_prefix = saved_err_prefix; |
266 | } | 267 | } |
diff --git a/arch/alpha/kernel/err_ev7.c b/arch/alpha/kernel/err_ev7.c index fed6b3d1b803..95463ab1cf35 100644 --- a/arch/alpha/kernel/err_ev7.c +++ b/arch/alpha/kernel/err_ev7.c | |||
@@ -118,7 +118,7 @@ ev7_collect_logout_frame_subpackets(struct el_subpacket *el_ptr, | |||
118 | } | 118 | } |
119 | 119 | ||
120 | void | 120 | void |
121 | ev7_machine_check(u64 vector, u64 la_ptr, struct pt_regs *regs) | 121 | ev7_machine_check(u64 vector, u64 la_ptr) |
122 | { | 122 | { |
123 | struct el_subpacket *el_ptr = (struct el_subpacket *)la_ptr; | 123 | struct el_subpacket *el_ptr = (struct el_subpacket *)la_ptr; |
124 | char *saved_err_prefix = err_print_prefix; | 124 | char *saved_err_prefix = err_print_prefix; |
diff --git a/arch/alpha/kernel/err_impl.h b/arch/alpha/kernel/err_impl.h index 64e9b73809fa..3c12258158e6 100644 --- a/arch/alpha/kernel/err_impl.h +++ b/arch/alpha/kernel/err_impl.h | |||
@@ -60,26 +60,26 @@ extern struct ev7_lf_subpackets * | |||
60 | ev7_collect_logout_frame_subpackets(struct el_subpacket *, | 60 | ev7_collect_logout_frame_subpackets(struct el_subpacket *, |
61 | struct ev7_lf_subpackets *); | 61 | struct ev7_lf_subpackets *); |
62 | extern void ev7_register_error_handlers(void); | 62 | extern void ev7_register_error_handlers(void); |
63 | extern void ev7_machine_check(u64, u64, struct pt_regs *); | 63 | extern void ev7_machine_check(u64, u64); |
64 | 64 | ||
65 | /* | 65 | /* |
66 | * err_ev6.c | 66 | * err_ev6.c |
67 | */ | 67 | */ |
68 | extern void ev6_register_error_handlers(void); | 68 | extern void ev6_register_error_handlers(void); |
69 | extern int ev6_process_logout_frame(struct el_common *, int); | 69 | extern int ev6_process_logout_frame(struct el_common *, int); |
70 | extern void ev6_machine_check(u64, u64, struct pt_regs *); | 70 | extern void ev6_machine_check(u64, u64); |
71 | 71 | ||
72 | /* | 72 | /* |
73 | * err_marvel.c | 73 | * err_marvel.c |
74 | */ | 74 | */ |
75 | extern void marvel_machine_check(u64, u64, struct pt_regs *); | 75 | extern void marvel_machine_check(u64, u64); |
76 | extern void marvel_register_error_handlers(void); | 76 | extern void marvel_register_error_handlers(void); |
77 | 77 | ||
78 | /* | 78 | /* |
79 | * err_titan.c | 79 | * err_titan.c |
80 | */ | 80 | */ |
81 | extern int titan_process_logout_frame(struct el_common *, int); | 81 | extern int titan_process_logout_frame(struct el_common *, int); |
82 | extern void titan_machine_check(u64, u64, struct pt_regs *); | 82 | extern void titan_machine_check(u64, u64); |
83 | extern void titan_register_error_handlers(void); | 83 | extern void titan_register_error_handlers(void); |
84 | extern int privateer_process_logout_frame(struct el_common *, int); | 84 | extern int privateer_process_logout_frame(struct el_common *, int); |
85 | extern void privateer_machine_check(u64, u64, struct pt_regs *); | 85 | extern void privateer_machine_check(u64, u64); |
diff --git a/arch/alpha/kernel/err_marvel.c b/arch/alpha/kernel/err_marvel.c index 70b38b1d2af3..f2956ac8dccc 100644 --- a/arch/alpha/kernel/err_marvel.c +++ b/arch/alpha/kernel/err_marvel.c | |||
@@ -1042,7 +1042,7 @@ marvel_process_logout_frame(struct ev7_lf_subpackets *lf_subpackets, int print) | |||
1042 | } | 1042 | } |
1043 | 1043 | ||
1044 | void | 1044 | void |
1045 | marvel_machine_check(u64 vector, u64 la_ptr, struct pt_regs *regs) | 1045 | marvel_machine_check(u64 vector, u64 la_ptr) |
1046 | { | 1046 | { |
1047 | struct el_subpacket *el_ptr = (struct el_subpacket *)la_ptr; | 1047 | struct el_subpacket *el_ptr = (struct el_subpacket *)la_ptr; |
1048 | int (*process_frame)(struct ev7_lf_subpackets *, int) = NULL; | 1048 | int (*process_frame)(struct ev7_lf_subpackets *, int) = NULL; |
@@ -1077,7 +1077,7 @@ marvel_machine_check(u64 vector, u64 la_ptr, struct pt_regs *regs) | |||
1077 | 1077 | ||
1078 | default: | 1078 | default: |
1079 | /* Don't know it - pass it up. */ | 1079 | /* Don't know it - pass it up. */ |
1080 | ev7_machine_check(vector, la_ptr, regs); | 1080 | ev7_machine_check(vector, la_ptr); |
1081 | return; | 1081 | return; |
1082 | } | 1082 | } |
1083 | 1083 | ||
diff --git a/arch/alpha/kernel/err_titan.c b/arch/alpha/kernel/err_titan.c index 7e6720d45f02..febe71c6869f 100644 --- a/arch/alpha/kernel/err_titan.c +++ b/arch/alpha/kernel/err_titan.c | |||
@@ -379,7 +379,7 @@ titan_process_logout_frame(struct el_common *mchk_header, int print) | |||
379 | } | 379 | } |
380 | 380 | ||
381 | void | 381 | void |
382 | titan_machine_check(u64 vector, u64 la_ptr, struct pt_regs *regs) | 382 | titan_machine_check(u64 vector, u64 la_ptr) |
383 | { | 383 | { |
384 | struct el_common *mchk_header = (struct el_common *)la_ptr; | 384 | struct el_common *mchk_header = (struct el_common *)la_ptr; |
385 | struct el_TITAN_sysdata_mcheck *tmchk = | 385 | struct el_TITAN_sysdata_mcheck *tmchk = |
@@ -408,7 +408,7 @@ titan_machine_check(u64 vector, u64 la_ptr, struct pt_regs *regs) | |||
408 | * Only handle system errors here | 408 | * Only handle system errors here |
409 | */ | 409 | */ |
410 | if ((vector != SCB_Q_SYSMCHK) && (vector != SCB_Q_SYSERR)) { | 410 | if ((vector != SCB_Q_SYSMCHK) && (vector != SCB_Q_SYSERR)) { |
411 | ev6_machine_check(vector, la_ptr, regs); | 411 | ev6_machine_check(vector, la_ptr); |
412 | return; | 412 | return; |
413 | } | 413 | } |
414 | 414 | ||
@@ -442,7 +442,7 @@ titan_machine_check(u64 vector, u64 la_ptr, struct pt_regs *regs) | |||
442 | #ifdef CONFIG_VERBOSE_MCHECK | 442 | #ifdef CONFIG_VERBOSE_MCHECK |
443 | titan_process_logout_frame(mchk_header, alpha_verbose_mcheck); | 443 | titan_process_logout_frame(mchk_header, alpha_verbose_mcheck); |
444 | if (alpha_verbose_mcheck) | 444 | if (alpha_verbose_mcheck) |
445 | dik_show_regs(regs, NULL); | 445 | dik_show_regs(get_irq_regs(), NULL); |
446 | #endif /* CONFIG_VERBOSE_MCHECK */ | 446 | #endif /* CONFIG_VERBOSE_MCHECK */ |
447 | 447 | ||
448 | err_print_prefix = saved_err_prefix; | 448 | err_print_prefix = saved_err_prefix; |
@@ -452,7 +452,7 @@ titan_machine_check(u64 vector, u64 la_ptr, struct pt_regs *regs) | |||
452 | * machine checks to interrupts | 452 | * machine checks to interrupts |
453 | */ | 453 | */ |
454 | irqmask = tmchk->c_dirx & TITAN_MCHECK_INTERRUPT_MASK; | 454 | irqmask = tmchk->c_dirx & TITAN_MCHECK_INTERRUPT_MASK; |
455 | titan_dispatch_irqs(irqmask, regs); | 455 | titan_dispatch_irqs(irqmask); |
456 | } | 456 | } |
457 | 457 | ||
458 | 458 | ||
@@ -701,7 +701,7 @@ privateer_process_logout_frame(struct el_common *mchk_header, int print) | |||
701 | } | 701 | } |
702 | 702 | ||
703 | void | 703 | void |
704 | privateer_machine_check(u64 vector, u64 la_ptr, struct pt_regs *regs) | 704 | privateer_machine_check(u64 vector, u64 la_ptr) |
705 | { | 705 | { |
706 | struct el_common *mchk_header = (struct el_common *)la_ptr; | 706 | struct el_common *mchk_header = (struct el_common *)la_ptr; |
707 | struct el_TITAN_sysdata_mcheck *tmchk = | 707 | struct el_TITAN_sysdata_mcheck *tmchk = |
@@ -723,7 +723,7 @@ privateer_machine_check(u64 vector, u64 la_ptr, struct pt_regs *regs) | |||
723 | * Only handle system events here. | 723 | * Only handle system events here. |
724 | */ | 724 | */ |
725 | if (vector != SCB_Q_SYSEVENT) | 725 | if (vector != SCB_Q_SYSEVENT) |
726 | return titan_machine_check(vector, la_ptr, regs); | 726 | return titan_machine_check(vector, la_ptr); |
727 | 727 | ||
728 | /* | 728 | /* |
729 | * Report the event - System Events should be reported even if no | 729 | * Report the event - System Events should be reported even if no |
@@ -746,7 +746,7 @@ privateer_machine_check(u64 vector, u64 la_ptr, struct pt_regs *regs) | |||
746 | /* | 746 | /* |
747 | * Dispatch the interrupt(s). | 747 | * Dispatch the interrupt(s). |
748 | */ | 748 | */ |
749 | titan_dispatch_irqs(irqmask, regs); | 749 | titan_dispatch_irqs(irqmask); |
750 | 750 | ||
751 | /* | 751 | /* |
752 | * Release the logout frame. | 752 | * Release the logout frame. |
diff --git a/arch/alpha/kernel/irq.c b/arch/alpha/kernel/irq.c index 729c475d2269..facf82a5499a 100644 --- a/arch/alpha/kernel/irq.c +++ b/arch/alpha/kernel/irq.c | |||
@@ -127,7 +127,7 @@ unlock: | |||
127 | #define MAX_ILLEGAL_IRQS 16 | 127 | #define MAX_ILLEGAL_IRQS 16 |
128 | 128 | ||
129 | void | 129 | void |
130 | handle_irq(int irq, struct pt_regs * regs) | 130 | handle_irq(int irq) |
131 | { | 131 | { |
132 | /* | 132 | /* |
133 | * We ack quickly, we don't want the irq controller | 133 | * We ack quickly, we don't want the irq controller |
@@ -157,6 +157,6 @@ handle_irq(int irq, struct pt_regs * regs) | |||
157 | * at IPL 0. | 157 | * at IPL 0. |
158 | */ | 158 | */ |
159 | local_irq_disable(); | 159 | local_irq_disable(); |
160 | __do_IRQ(irq, regs); | 160 | __do_IRQ(irq); |
161 | irq_exit(); | 161 | irq_exit(); |
162 | } | 162 | } |
diff --git a/arch/alpha/kernel/irq_alpha.c b/arch/alpha/kernel/irq_alpha.c index ddf5cf8dcb0b..6dd126b8be85 100644 --- a/arch/alpha/kernel/irq_alpha.c +++ b/arch/alpha/kernel/irq_alpha.c | |||
@@ -39,6 +39,7 @@ asmlinkage void | |||
39 | do_entInt(unsigned long type, unsigned long vector, | 39 | do_entInt(unsigned long type, unsigned long vector, |
40 | unsigned long la_ptr, struct pt_regs *regs) | 40 | unsigned long la_ptr, struct pt_regs *regs) |
41 | { | 41 | { |
42 | struct pt_regs *old_regs; | ||
42 | switch (type) { | 43 | switch (type) { |
43 | case 0: | 44 | case 0: |
44 | #ifdef CONFIG_SMP | 45 | #ifdef CONFIG_SMP |
@@ -51,6 +52,7 @@ do_entInt(unsigned long type, unsigned long vector, | |||
51 | #endif | 52 | #endif |
52 | break; | 53 | break; |
53 | case 1: | 54 | case 1: |
55 | old_regs = set_irq_regs(regs); | ||
54 | #ifdef CONFIG_SMP | 56 | #ifdef CONFIG_SMP |
55 | { | 57 | { |
56 | long cpu; | 58 | long cpu; |
@@ -61,18 +63,23 @@ do_entInt(unsigned long type, unsigned long vector, | |||
61 | if (cpu != boot_cpuid) { | 63 | if (cpu != boot_cpuid) { |
62 | kstat_cpu(cpu).irqs[RTC_IRQ]++; | 64 | kstat_cpu(cpu).irqs[RTC_IRQ]++; |
63 | } else { | 65 | } else { |
64 | handle_irq(RTC_IRQ, regs); | 66 | handle_irq(RTC_IRQ); |
65 | } | 67 | } |
66 | } | 68 | } |
67 | #else | 69 | #else |
68 | handle_irq(RTC_IRQ, regs); | 70 | handle_irq(RTC_IRQ); |
69 | #endif | 71 | #endif |
72 | set_irq_regs(old_regs); | ||
70 | return; | 73 | return; |
71 | case 2: | 74 | case 2: |
72 | alpha_mv.machine_check(vector, la_ptr, regs); | 75 | old_regs = set_irq_regs(regs); |
76 | alpha_mv.machine_check(vector, la_ptr); | ||
77 | set_irq_regs(old_regs); | ||
73 | return; | 78 | return; |
74 | case 3: | 79 | case 3: |
75 | alpha_mv.device_interrupt(vector, regs); | 80 | old_regs = set_irq_regs(regs); |
81 | alpha_mv.device_interrupt(vector); | ||
82 | set_irq_regs(old_regs); | ||
76 | return; | 83 | return; |
77 | case 4: | 84 | case 4: |
78 | perf_irq(la_ptr, regs); | 85 | perf_irq(la_ptr, regs); |
@@ -120,8 +127,7 @@ struct mcheck_info __mcheck_info; | |||
120 | 127 | ||
121 | void | 128 | void |
122 | process_mcheck_info(unsigned long vector, unsigned long la_ptr, | 129 | process_mcheck_info(unsigned long vector, unsigned long la_ptr, |
123 | struct pt_regs *regs, const char *machine, | 130 | const char *machine, int expected) |
124 | int expected) | ||
125 | { | 131 | { |
126 | struct el_common *mchk_header; | 132 | struct el_common *mchk_header; |
127 | const char *reason; | 133 | const char *reason; |
@@ -148,7 +154,7 @@ process_mcheck_info(unsigned long vector, unsigned long la_ptr, | |||
148 | mchk_header = (struct el_common *)la_ptr; | 154 | mchk_header = (struct el_common *)la_ptr; |
149 | 155 | ||
150 | printk(KERN_CRIT "%s machine check: vector=0x%lx pc=0x%lx code=0x%x\n", | 156 | printk(KERN_CRIT "%s machine check: vector=0x%lx pc=0x%lx code=0x%x\n", |
151 | machine, vector, regs->pc, mchk_header->code); | 157 | machine, vector, get_irq_regs()->pc, mchk_header->code); |
152 | 158 | ||
153 | switch (mchk_header->code) { | 159 | switch (mchk_header->code) { |
154 | /* Machine check reasons. Defined according to PALcode sources. */ | 160 | /* Machine check reasons. Defined according to PALcode sources. */ |
@@ -189,7 +195,7 @@ process_mcheck_info(unsigned long vector, unsigned long la_ptr, | |||
189 | printk(KERN_CRIT "machine check type: %s%s\n", | 195 | printk(KERN_CRIT "machine check type: %s%s\n", |
190 | reason, mchk_header->retry ? " (retryable)" : ""); | 196 | reason, mchk_header->retry ? " (retryable)" : ""); |
191 | 197 | ||
192 | dik_show_regs(regs, NULL); | 198 | dik_show_regs(get_irq_regs(), NULL); |
193 | 199 | ||
194 | #ifdef CONFIG_VERBOSE_MCHECK | 200 | #ifdef CONFIG_VERBOSE_MCHECK |
195 | if (alpha_verbose_mcheck > 1) { | 201 | if (alpha_verbose_mcheck > 1) { |
diff --git a/arch/alpha/kernel/irq_i8259.c b/arch/alpha/kernel/irq_i8259.c index ebbadbc0c36a..9405bee9894e 100644 --- a/arch/alpha/kernel/irq_i8259.c +++ b/arch/alpha/kernel/irq_i8259.c | |||
@@ -137,7 +137,7 @@ init_i8259a_irqs(void) | |||
137 | 137 | ||
138 | #if defined(IACK_SC) | 138 | #if defined(IACK_SC) |
139 | void | 139 | void |
140 | isa_device_interrupt(unsigned long vector, struct pt_regs *regs) | 140 | isa_device_interrupt(unsigned long vector) |
141 | { | 141 | { |
142 | /* | 142 | /* |
143 | * Generate a PCI interrupt acknowledge cycle. The PIC will | 143 | * Generate a PCI interrupt acknowledge cycle. The PIC will |
@@ -147,13 +147,13 @@ isa_device_interrupt(unsigned long vector, struct pt_regs *regs) | |||
147 | */ | 147 | */ |
148 | int j = *(vuip) IACK_SC; | 148 | int j = *(vuip) IACK_SC; |
149 | j &= 0xff; | 149 | j &= 0xff; |
150 | handle_irq(j, regs); | 150 | handle_irq(j); |
151 | } | 151 | } |
152 | #endif | 152 | #endif |
153 | 153 | ||
154 | #if defined(CONFIG_ALPHA_GENERIC) || !defined(IACK_SC) | 154 | #if defined(CONFIG_ALPHA_GENERIC) || !defined(IACK_SC) |
155 | void | 155 | void |
156 | isa_no_iack_sc_device_interrupt(unsigned long vector, struct pt_regs *regs) | 156 | isa_no_iack_sc_device_interrupt(unsigned long vector) |
157 | { | 157 | { |
158 | unsigned long pic; | 158 | unsigned long pic; |
159 | 159 | ||
@@ -176,7 +176,7 @@ isa_no_iack_sc_device_interrupt(unsigned long vector, struct pt_regs *regs) | |||
176 | while (pic) { | 176 | while (pic) { |
177 | int j = ffz(~pic); | 177 | int j = ffz(~pic); |
178 | pic &= pic - 1; | 178 | pic &= pic - 1; |
179 | handle_irq(j, regs); | 179 | handle_irq(j); |
180 | } | 180 | } |
181 | } | 181 | } |
182 | #endif | 182 | #endif |
diff --git a/arch/alpha/kernel/irq_impl.h b/arch/alpha/kernel/irq_impl.h index f201d8ffc0d9..cc9a8a7aa279 100644 --- a/arch/alpha/kernel/irq_impl.h +++ b/arch/alpha/kernel/irq_impl.h | |||
@@ -15,10 +15,10 @@ | |||
15 | 15 | ||
16 | #define RTC_IRQ 8 | 16 | #define RTC_IRQ 8 |
17 | 17 | ||
18 | extern void isa_device_interrupt(unsigned long, struct pt_regs *); | 18 | extern void isa_device_interrupt(unsigned long); |
19 | extern void isa_no_iack_sc_device_interrupt(unsigned long, struct pt_regs *); | 19 | extern void isa_no_iack_sc_device_interrupt(unsigned long); |
20 | extern void srm_device_interrupt(unsigned long, struct pt_regs *); | 20 | extern void srm_device_interrupt(unsigned long); |
21 | extern void pyxis_device_interrupt(unsigned long, struct pt_regs *); | 21 | extern void pyxis_device_interrupt(unsigned long); |
22 | 22 | ||
23 | extern struct irqaction timer_irqaction; | 23 | extern struct irqaction timer_irqaction; |
24 | extern struct irqaction isa_cascade_irqaction; | 24 | extern struct irqaction isa_cascade_irqaction; |
@@ -39,4 +39,4 @@ extern void i8259a_end_irq(unsigned int); | |||
39 | extern struct hw_interrupt_type i8259a_irq_type; | 39 | extern struct hw_interrupt_type i8259a_irq_type; |
40 | extern void init_i8259a_irqs(void); | 40 | extern void init_i8259a_irqs(void); |
41 | 41 | ||
42 | extern void handle_irq(int irq, struct pt_regs * regs); | 42 | extern void handle_irq(int irq); |
diff --git a/arch/alpha/kernel/irq_pyxis.c b/arch/alpha/kernel/irq_pyxis.c index 3b581415bab0..d53edbccbfe5 100644 --- a/arch/alpha/kernel/irq_pyxis.c +++ b/arch/alpha/kernel/irq_pyxis.c | |||
@@ -81,7 +81,7 @@ static struct hw_interrupt_type pyxis_irq_type = { | |||
81 | }; | 81 | }; |
82 | 82 | ||
83 | void | 83 | void |
84 | pyxis_device_interrupt(unsigned long vector, struct pt_regs *regs) | 84 | pyxis_device_interrupt(unsigned long vector) |
85 | { | 85 | { |
86 | unsigned long pld; | 86 | unsigned long pld; |
87 | unsigned int i; | 87 | unsigned int i; |
@@ -98,9 +98,9 @@ pyxis_device_interrupt(unsigned long vector, struct pt_regs *regs) | |||
98 | i = ffz(~pld); | 98 | i = ffz(~pld); |
99 | pld &= pld - 1; /* clear least bit set */ | 99 | pld &= pld - 1; /* clear least bit set */ |
100 | if (i == 7) | 100 | if (i == 7) |
101 | isa_device_interrupt(vector, regs); | 101 | isa_device_interrupt(vector); |
102 | else | 102 | else |
103 | handle_irq(16+i, regs); | 103 | handle_irq(16+i); |
104 | } | 104 | } |
105 | } | 105 | } |
106 | 106 | ||
diff --git a/arch/alpha/kernel/irq_srm.c b/arch/alpha/kernel/irq_srm.c index 8e4d121f84cc..32212014fbe9 100644 --- a/arch/alpha/kernel/irq_srm.c +++ b/arch/alpha/kernel/irq_srm.c | |||
@@ -72,8 +72,8 @@ init_srm_irqs(long max, unsigned long ignore_mask) | |||
72 | } | 72 | } |
73 | 73 | ||
74 | void | 74 | void |
75 | srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | 75 | srm_device_interrupt(unsigned long vector) |
76 | { | 76 | { |
77 | int irq = (vector - 0x800) >> 4; | 77 | int irq = (vector - 0x800) >> 4; |
78 | handle_irq(irq, regs); | 78 | handle_irq(irq); |
79 | } | 79 | } |
diff --git a/arch/alpha/kernel/proto.h b/arch/alpha/kernel/proto.h index 21f71287b6f5..95912ecc65e1 100644 --- a/arch/alpha/kernel/proto.h +++ b/arch/alpha/kernel/proto.h | |||
@@ -20,7 +20,7 @@ struct pci_controller; | |||
20 | extern struct pci_ops apecs_pci_ops; | 20 | extern struct pci_ops apecs_pci_ops; |
21 | extern void apecs_init_arch(void); | 21 | extern void apecs_init_arch(void); |
22 | extern void apecs_pci_clr_err(void); | 22 | extern void apecs_pci_clr_err(void); |
23 | extern void apecs_machine_check(u64, u64, struct pt_regs *); | 23 | extern void apecs_machine_check(u64, u64); |
24 | extern void apecs_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 24 | extern void apecs_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
25 | 25 | ||
26 | /* core_cia.c */ | 26 | /* core_cia.c */ |
@@ -29,27 +29,27 @@ extern void cia_init_pci(void); | |||
29 | extern void cia_init_arch(void); | 29 | extern void cia_init_arch(void); |
30 | extern void pyxis_init_arch(void); | 30 | extern void pyxis_init_arch(void); |
31 | extern void cia_kill_arch(int); | 31 | extern void cia_kill_arch(int); |
32 | extern void cia_machine_check(u64, u64, struct pt_regs *); | 32 | extern void cia_machine_check(u64, u64); |
33 | extern void cia_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 33 | extern void cia_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
34 | 34 | ||
35 | /* core_irongate.c */ | 35 | /* core_irongate.c */ |
36 | extern struct pci_ops irongate_pci_ops; | 36 | extern struct pci_ops irongate_pci_ops; |
37 | extern int irongate_pci_clr_err(void); | 37 | extern int irongate_pci_clr_err(void); |
38 | extern void irongate_init_arch(void); | 38 | extern void irongate_init_arch(void); |
39 | extern void irongate_machine_check(u64, u64, struct pt_regs *); | 39 | extern void irongate_machine_check(u64, u64); |
40 | #define irongate_pci_tbi ((void *)0) | 40 | #define irongate_pci_tbi ((void *)0) |
41 | 41 | ||
42 | /* core_lca.c */ | 42 | /* core_lca.c */ |
43 | extern struct pci_ops lca_pci_ops; | 43 | extern struct pci_ops lca_pci_ops; |
44 | extern void lca_init_arch(void); | 44 | extern void lca_init_arch(void); |
45 | extern void lca_machine_check(u64, u64, struct pt_regs *); | 45 | extern void lca_machine_check(u64, u64); |
46 | extern void lca_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 46 | extern void lca_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
47 | 47 | ||
48 | /* core_marvel.c */ | 48 | /* core_marvel.c */ |
49 | extern struct pci_ops marvel_pci_ops; | 49 | extern struct pci_ops marvel_pci_ops; |
50 | extern void marvel_init_arch(void); | 50 | extern void marvel_init_arch(void); |
51 | extern void marvel_kill_arch(int); | 51 | extern void marvel_kill_arch(int); |
52 | extern void marvel_machine_check(u64, u64, struct pt_regs *); | 52 | extern void marvel_machine_check(u64, u64); |
53 | extern void marvel_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 53 | extern void marvel_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
54 | extern int marvel_pa_to_nid(unsigned long); | 54 | extern int marvel_pa_to_nid(unsigned long); |
55 | extern int marvel_cpuid_to_nid(int); | 55 | extern int marvel_cpuid_to_nid(int); |
@@ -64,7 +64,7 @@ void io7_clear_errors(struct io7 *io7); | |||
64 | extern struct pci_ops mcpcia_pci_ops; | 64 | extern struct pci_ops mcpcia_pci_ops; |
65 | extern void mcpcia_init_arch(void); | 65 | extern void mcpcia_init_arch(void); |
66 | extern void mcpcia_init_hoses(void); | 66 | extern void mcpcia_init_hoses(void); |
67 | extern void mcpcia_machine_check(u64, u64, struct pt_regs *); | 67 | extern void mcpcia_machine_check(u64, u64); |
68 | extern void mcpcia_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 68 | extern void mcpcia_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
69 | 69 | ||
70 | /* core_polaris.c */ | 70 | /* core_polaris.c */ |
@@ -72,21 +72,21 @@ extern struct pci_ops polaris_pci_ops; | |||
72 | extern int polaris_read_config_dword(struct pci_dev *, int, u32 *); | 72 | extern int polaris_read_config_dword(struct pci_dev *, int, u32 *); |
73 | extern int polaris_write_config_dword(struct pci_dev *, int, u32); | 73 | extern int polaris_write_config_dword(struct pci_dev *, int, u32); |
74 | extern void polaris_init_arch(void); | 74 | extern void polaris_init_arch(void); |
75 | extern void polaris_machine_check(u64, u64, struct pt_regs *); | 75 | extern void polaris_machine_check(u64, u64); |
76 | #define polaris_pci_tbi ((void *)0) | 76 | #define polaris_pci_tbi ((void *)0) |
77 | 77 | ||
78 | /* core_t2.c */ | 78 | /* core_t2.c */ |
79 | extern struct pci_ops t2_pci_ops; | 79 | extern struct pci_ops t2_pci_ops; |
80 | extern void t2_init_arch(void); | 80 | extern void t2_init_arch(void); |
81 | extern void t2_kill_arch(int); | 81 | extern void t2_kill_arch(int); |
82 | extern void t2_machine_check(u64, u64, struct pt_regs *); | 82 | extern void t2_machine_check(u64, u64); |
83 | extern void t2_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 83 | extern void t2_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
84 | 84 | ||
85 | /* core_titan.c */ | 85 | /* core_titan.c */ |
86 | extern struct pci_ops titan_pci_ops; | 86 | extern struct pci_ops titan_pci_ops; |
87 | extern void titan_init_arch(void); | 87 | extern void titan_init_arch(void); |
88 | extern void titan_kill_arch(int); | 88 | extern void titan_kill_arch(int); |
89 | extern void titan_machine_check(u64, u64, struct pt_regs *); | 89 | extern void titan_machine_check(u64, u64); |
90 | extern void titan_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 90 | extern void titan_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
91 | extern struct _alpha_agp_info *titan_agp_info(void); | 91 | extern struct _alpha_agp_info *titan_agp_info(void); |
92 | 92 | ||
@@ -94,14 +94,14 @@ extern struct _alpha_agp_info *titan_agp_info(void); | |||
94 | extern struct pci_ops tsunami_pci_ops; | 94 | extern struct pci_ops tsunami_pci_ops; |
95 | extern void tsunami_init_arch(void); | 95 | extern void tsunami_init_arch(void); |
96 | extern void tsunami_kill_arch(int); | 96 | extern void tsunami_kill_arch(int); |
97 | extern void tsunami_machine_check(u64, u64, struct pt_regs *); | 97 | extern void tsunami_machine_check(u64, u64); |
98 | extern void tsunami_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 98 | extern void tsunami_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
99 | 99 | ||
100 | /* core_wildfire.c */ | 100 | /* core_wildfire.c */ |
101 | extern struct pci_ops wildfire_pci_ops; | 101 | extern struct pci_ops wildfire_pci_ops; |
102 | extern void wildfire_init_arch(void); | 102 | extern void wildfire_init_arch(void); |
103 | extern void wildfire_kill_arch(int); | 103 | extern void wildfire_kill_arch(int); |
104 | extern void wildfire_machine_check(u64, u64, struct pt_regs *); | 104 | extern void wildfire_machine_check(u64, u64); |
105 | extern void wildfire_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 105 | extern void wildfire_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
106 | extern int wildfire_pa_to_nid(unsigned long); | 106 | extern int wildfire_pa_to_nid(unsigned long); |
107 | extern int wildfire_cpuid_to_nid(int); | 107 | extern int wildfire_cpuid_to_nid(int); |
@@ -133,7 +133,7 @@ extern void smp_percpu_timer_interrupt(struct pt_regs *); | |||
133 | /* extern void reset_for_srm(void); */ | 133 | /* extern void reset_for_srm(void); */ |
134 | 134 | ||
135 | /* time.c */ | 135 | /* time.c */ |
136 | extern irqreturn_t timer_interrupt(int irq, void *dev, struct pt_regs * regs); | 136 | extern irqreturn_t timer_interrupt(int irq, void *dev); |
137 | extern void common_init_rtc(void); | 137 | extern void common_init_rtc(void); |
138 | extern unsigned long est_cycle_freq; | 138 | extern unsigned long est_cycle_freq; |
139 | 139 | ||
@@ -177,7 +177,7 @@ extern void dik_show_regs(struct pt_regs *regs, unsigned long *r9_15); | |||
177 | extern void die_if_kernel(char *, struct pt_regs *, long, unsigned long *); | 177 | extern void die_if_kernel(char *, struct pt_regs *, long, unsigned long *); |
178 | 178 | ||
179 | /* sys_titan.c */ | 179 | /* sys_titan.c */ |
180 | extern void titan_dispatch_irqs(u64, struct pt_regs *); | 180 | extern void titan_dispatch_irqs(u64); |
181 | 181 | ||
182 | /* ../mm/init.c */ | 182 | /* ../mm/init.c */ |
183 | extern void switch_to_system_map(void); | 183 | extern void switch_to_system_map(void); |
@@ -214,5 +214,4 @@ extern struct mcheck_info | |||
214 | #endif | 214 | #endif |
215 | 215 | ||
216 | extern void process_mcheck_info(unsigned long vector, unsigned long la_ptr, | 216 | extern void process_mcheck_info(unsigned long vector, unsigned long la_ptr, |
217 | struct pt_regs *regs, const char *machine, | 217 | const char *machine, int expected); |
218 | int expected); | ||
diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c index 4dc273e537fd..596780e2c7da 100644 --- a/arch/alpha/kernel/smp.c +++ b/arch/alpha/kernel/smp.c | |||
@@ -515,12 +515,15 @@ smp_cpus_done(unsigned int max_cpus) | |||
515 | void | 515 | void |
516 | smp_percpu_timer_interrupt(struct pt_regs *regs) | 516 | smp_percpu_timer_interrupt(struct pt_regs *regs) |
517 | { | 517 | { |
518 | struct pt_regs *old_regs; | ||
518 | int cpu = smp_processor_id(); | 519 | int cpu = smp_processor_id(); |
519 | unsigned long user = user_mode(regs); | 520 | unsigned long user = user_mode(regs); |
520 | struct cpuinfo_alpha *data = &cpu_data[cpu]; | 521 | struct cpuinfo_alpha *data = &cpu_data[cpu]; |
521 | 522 | ||
523 | old_regs = set_irq_regs(regs); | ||
524 | |||
522 | /* Record kernel PC. */ | 525 | /* Record kernel PC. */ |
523 | profile_tick(CPU_PROFILING, regs); | 526 | profile_tick(CPU_PROFILING); |
524 | 527 | ||
525 | if (!--data->prof_counter) { | 528 | if (!--data->prof_counter) { |
526 | /* We need to make like a normal interrupt -- otherwise | 529 | /* We need to make like a normal interrupt -- otherwise |
@@ -534,6 +537,7 @@ smp_percpu_timer_interrupt(struct pt_regs *regs) | |||
534 | 537 | ||
535 | irq_exit(); | 538 | irq_exit(); |
536 | } | 539 | } |
540 | set_irq_regs(old_regs); | ||
537 | } | 541 | } |
538 | 542 | ||
539 | int __init | 543 | int __init |
diff --git a/arch/alpha/kernel/sys_alcor.c b/arch/alpha/kernel/sys_alcor.c index d6926b7b1e99..49bedfbbd31b 100644 --- a/arch/alpha/kernel/sys_alcor.c +++ b/arch/alpha/kernel/sys_alcor.c | |||
@@ -100,7 +100,7 @@ static struct hw_interrupt_type alcor_irq_type = { | |||
100 | }; | 100 | }; |
101 | 101 | ||
102 | static void | 102 | static void |
103 | alcor_device_interrupt(unsigned long vector, struct pt_regs *regs) | 103 | alcor_device_interrupt(unsigned long vector) |
104 | { | 104 | { |
105 | unsigned long pld; | 105 | unsigned long pld; |
106 | unsigned int i; | 106 | unsigned int i; |
@@ -116,9 +116,9 @@ alcor_device_interrupt(unsigned long vector, struct pt_regs *regs) | |||
116 | i = ffz(~pld); | 116 | i = ffz(~pld); |
117 | pld &= pld - 1; /* clear least bit set */ | 117 | pld &= pld - 1; /* clear least bit set */ |
118 | if (i == 31) { | 118 | if (i == 31) { |
119 | isa_device_interrupt(vector, regs); | 119 | isa_device_interrupt(vector); |
120 | } else { | 120 | } else { |
121 | handle_irq(16 + i, regs); | 121 | handle_irq(16 + i); |
122 | } | 122 | } |
123 | } | 123 | } |
124 | } | 124 | } |
diff --git a/arch/alpha/kernel/sys_cabriolet.c b/arch/alpha/kernel/sys_cabriolet.c index 25a215067da8..ace475c124f6 100644 --- a/arch/alpha/kernel/sys_cabriolet.c +++ b/arch/alpha/kernel/sys_cabriolet.c | |||
@@ -82,7 +82,7 @@ static struct hw_interrupt_type cabriolet_irq_type = { | |||
82 | }; | 82 | }; |
83 | 83 | ||
84 | static void | 84 | static void |
85 | cabriolet_device_interrupt(unsigned long v, struct pt_regs *r) | 85 | cabriolet_device_interrupt(unsigned long v) |
86 | { | 86 | { |
87 | unsigned long pld; | 87 | unsigned long pld; |
88 | unsigned int i; | 88 | unsigned int i; |
@@ -98,15 +98,15 @@ cabriolet_device_interrupt(unsigned long v, struct pt_regs *r) | |||
98 | i = ffz(~pld); | 98 | i = ffz(~pld); |
99 | pld &= pld - 1; /* clear least bit set */ | 99 | pld &= pld - 1; /* clear least bit set */ |
100 | if (i == 4) { | 100 | if (i == 4) { |
101 | isa_device_interrupt(v, r); | 101 | isa_device_interrupt(v); |
102 | } else { | 102 | } else { |
103 | handle_irq(16 + i, r); | 103 | handle_irq(16 + i); |
104 | } | 104 | } |
105 | } | 105 | } |
106 | } | 106 | } |
107 | 107 | ||
108 | static void __init | 108 | static void __init |
109 | common_init_irq(void (*srm_dev_int)(unsigned long v, struct pt_regs *r)) | 109 | common_init_irq(void (*srm_dev_int)(unsigned long v)) |
110 | { | 110 | { |
111 | init_i8259a_irqs(); | 111 | init_i8259a_irqs(); |
112 | 112 | ||
@@ -154,18 +154,18 @@ cabriolet_init_irq(void) | |||
154 | too invasive though. */ | 154 | too invasive though. */ |
155 | 155 | ||
156 | static void | 156 | static void |
157 | pc164_srm_device_interrupt(unsigned long v, struct pt_regs *r) | 157 | pc164_srm_device_interrupt(unsigned long v) |
158 | { | 158 | { |
159 | __min_ipl = getipl(); | 159 | __min_ipl = getipl(); |
160 | srm_device_interrupt(v, r); | 160 | srm_device_interrupt(v); |
161 | __min_ipl = 0; | 161 | __min_ipl = 0; |
162 | } | 162 | } |
163 | 163 | ||
164 | static void | 164 | static void |
165 | pc164_device_interrupt(unsigned long v, struct pt_regs *r) | 165 | pc164_device_interrupt(unsigned long v) |
166 | { | 166 | { |
167 | __min_ipl = getipl(); | 167 | __min_ipl = getipl(); |
168 | cabriolet_device_interrupt(v, r); | 168 | cabriolet_device_interrupt(v); |
169 | __min_ipl = 0; | 169 | __min_ipl = 0; |
170 | } | 170 | } |
171 | 171 | ||
diff --git a/arch/alpha/kernel/sys_dp264.c b/arch/alpha/kernel/sys_dp264.c index dd6103b867e7..85d2f933dd07 100644 --- a/arch/alpha/kernel/sys_dp264.c +++ b/arch/alpha/kernel/sys_dp264.c | |||
@@ -217,7 +217,7 @@ static struct hw_interrupt_type clipper_irq_type = { | |||
217 | }; | 217 | }; |
218 | 218 | ||
219 | static void | 219 | static void |
220 | dp264_device_interrupt(unsigned long vector, struct pt_regs * regs) | 220 | dp264_device_interrupt(unsigned long vector) |
221 | { | 221 | { |
222 | #if 1 | 222 | #if 1 |
223 | printk("dp264_device_interrupt: NOT IMPLEMENTED YET!! \n"); | 223 | printk("dp264_device_interrupt: NOT IMPLEMENTED YET!! \n"); |
@@ -236,9 +236,9 @@ dp264_device_interrupt(unsigned long vector, struct pt_regs * regs) | |||
236 | i = ffz(~pld); | 236 | i = ffz(~pld); |
237 | pld &= pld - 1; /* clear least bit set */ | 237 | pld &= pld - 1; /* clear least bit set */ |
238 | if (i == 55) | 238 | if (i == 55) |
239 | isa_device_interrupt(vector, regs); | 239 | isa_device_interrupt(vector); |
240 | else | 240 | else |
241 | handle_irq(16 + i, 16 + i, regs); | 241 | handle_irq(16 + i); |
242 | #if 0 | 242 | #if 0 |
243 | TSUNAMI_cchip->dir0.csr = 1UL << i; mb(); | 243 | TSUNAMI_cchip->dir0.csr = 1UL << i; mb(); |
244 | tmp = TSUNAMI_cchip->dir0.csr; | 244 | tmp = TSUNAMI_cchip->dir0.csr; |
@@ -248,7 +248,7 @@ dp264_device_interrupt(unsigned long vector, struct pt_regs * regs) | |||
248 | } | 248 | } |
249 | 249 | ||
250 | static void | 250 | static void |
251 | dp264_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | 251 | dp264_srm_device_interrupt(unsigned long vector) |
252 | { | 252 | { |
253 | int irq; | 253 | int irq; |
254 | 254 | ||
@@ -268,11 +268,11 @@ dp264_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | |||
268 | if (irq >= 32) | 268 | if (irq >= 32) |
269 | irq -= 16; | 269 | irq -= 16; |
270 | 270 | ||
271 | handle_irq(irq, regs); | 271 | handle_irq(irq); |
272 | } | 272 | } |
273 | 273 | ||
274 | static void | 274 | static void |
275 | clipper_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | 275 | clipper_srm_device_interrupt(unsigned long vector) |
276 | { | 276 | { |
277 | int irq; | 277 | int irq; |
278 | 278 | ||
@@ -290,7 +290,7 @@ clipper_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | |||
290 | * | 290 | * |
291 | * Eg IRQ 24 is DRIR bit 8, etc, etc | 291 | * Eg IRQ 24 is DRIR bit 8, etc, etc |
292 | */ | 292 | */ |
293 | handle_irq(irq, regs); | 293 | handle_irq(irq); |
294 | } | 294 | } |
295 | 295 | ||
296 | static void __init | 296 | static void __init |
diff --git a/arch/alpha/kernel/sys_eb64p.c b/arch/alpha/kernel/sys_eb64p.c index ed108b66ec09..9c5a306dc0ee 100644 --- a/arch/alpha/kernel/sys_eb64p.c +++ b/arch/alpha/kernel/sys_eb64p.c | |||
@@ -80,7 +80,7 @@ static struct hw_interrupt_type eb64p_irq_type = { | |||
80 | }; | 80 | }; |
81 | 81 | ||
82 | static void | 82 | static void |
83 | eb64p_device_interrupt(unsigned long vector, struct pt_regs *regs) | 83 | eb64p_device_interrupt(unsigned long vector) |
84 | { | 84 | { |
85 | unsigned long pld; | 85 | unsigned long pld; |
86 | unsigned int i; | 86 | unsigned int i; |
@@ -97,9 +97,9 @@ eb64p_device_interrupt(unsigned long vector, struct pt_regs *regs) | |||
97 | pld &= pld - 1; /* clear least bit set */ | 97 | pld &= pld - 1; /* clear least bit set */ |
98 | 98 | ||
99 | if (i == 5) { | 99 | if (i == 5) { |
100 | isa_device_interrupt(vector, regs); | 100 | isa_device_interrupt(vector); |
101 | } else { | 101 | } else { |
102 | handle_irq(16 + i, regs); | 102 | handle_irq(16 + i); |
103 | } | 103 | } |
104 | } | 104 | } |
105 | } | 105 | } |
diff --git a/arch/alpha/kernel/sys_eiger.c b/arch/alpha/kernel/sys_eiger.c index 64a785baf53a..7ef3b6fb3700 100644 --- a/arch/alpha/kernel/sys_eiger.c +++ b/arch/alpha/kernel/sys_eiger.c | |||
@@ -91,7 +91,7 @@ static struct hw_interrupt_type eiger_irq_type = { | |||
91 | }; | 91 | }; |
92 | 92 | ||
93 | static void | 93 | static void |
94 | eiger_device_interrupt(unsigned long vector, struct pt_regs * regs) | 94 | eiger_device_interrupt(unsigned long vector) |
95 | { | 95 | { |
96 | unsigned intstatus; | 96 | unsigned intstatus; |
97 | 97 | ||
@@ -118,20 +118,20 @@ eiger_device_interrupt(unsigned long vector, struct pt_regs * regs) | |||
118 | * despatch an interrupt if it's set. | 118 | * despatch an interrupt if it's set. |
119 | */ | 119 | */ |
120 | 120 | ||
121 | if (intstatus & 8) handle_irq(16+3, regs); | 121 | if (intstatus & 8) handle_irq(16+3); |
122 | if (intstatus & 4) handle_irq(16+2, regs); | 122 | if (intstatus & 4) handle_irq(16+2); |
123 | if (intstatus & 2) handle_irq(16+1, regs); | 123 | if (intstatus & 2) handle_irq(16+1); |
124 | if (intstatus & 1) handle_irq(16+0, regs); | 124 | if (intstatus & 1) handle_irq(16+0); |
125 | } else { | 125 | } else { |
126 | isa_device_interrupt(vector, regs); | 126 | isa_device_interrupt(vector); |
127 | } | 127 | } |
128 | } | 128 | } |
129 | 129 | ||
130 | static void | 130 | static void |
131 | eiger_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | 131 | eiger_srm_device_interrupt(unsigned long vector) |
132 | { | 132 | { |
133 | int irq = (vector - 0x800) >> 4; | 133 | int irq = (vector - 0x800) >> 4; |
134 | handle_irq(irq, regs); | 134 | handle_irq(irq); |
135 | } | 135 | } |
136 | 136 | ||
137 | static void __init | 137 | static void __init |
diff --git a/arch/alpha/kernel/sys_jensen.c b/arch/alpha/kernel/sys_jensen.c index 4ac2b328b8de..2c3de97de46c 100644 --- a/arch/alpha/kernel/sys_jensen.c +++ b/arch/alpha/kernel/sys_jensen.c | |||
@@ -129,7 +129,7 @@ static struct hw_interrupt_type jensen_local_irq_type = { | |||
129 | }; | 129 | }; |
130 | 130 | ||
131 | static void | 131 | static void |
132 | jensen_device_interrupt(unsigned long vector, struct pt_regs * regs) | 132 | jensen_device_interrupt(unsigned long vector) |
133 | { | 133 | { |
134 | int irq; | 134 | int irq; |
135 | 135 | ||
@@ -189,7 +189,7 @@ jensen_device_interrupt(unsigned long vector, struct pt_regs * regs) | |||
189 | if (cc - last_msg > ((JENSEN_CYCLES_PER_SEC) * 3) || | 189 | if (cc - last_msg > ((JENSEN_CYCLES_PER_SEC) * 3) || |
190 | irq != last_irq) { | 190 | irq != last_irq) { |
191 | printk(KERN_CRIT " irq %d count %d cc %u @ %lx\n", | 191 | printk(KERN_CRIT " irq %d count %d cc %u @ %lx\n", |
192 | irq, count, cc-last_cc, regs->pc); | 192 | irq, count, cc-last_cc, get_irq_regs()->pc); |
193 | count = 0; | 193 | count = 0; |
194 | last_msg = cc; | 194 | last_msg = cc; |
195 | last_irq = irq; | 195 | last_irq = irq; |
@@ -198,7 +198,7 @@ jensen_device_interrupt(unsigned long vector, struct pt_regs * regs) | |||
198 | } | 198 | } |
199 | #endif | 199 | #endif |
200 | 200 | ||
201 | handle_irq(irq, regs); | 201 | handle_irq(irq); |
202 | } | 202 | } |
203 | 203 | ||
204 | static void __init | 204 | static void __init |
@@ -244,7 +244,7 @@ jensen_init_arch(void) | |||
244 | } | 244 | } |
245 | 245 | ||
246 | static void | 246 | static void |
247 | jensen_machine_check (u64 vector, u64 la, struct pt_regs *regs) | 247 | jensen_machine_check (u64 vector, u64 la) |
248 | { | 248 | { |
249 | printk(KERN_CRIT "Machine check\n"); | 249 | printk(KERN_CRIT "Machine check\n"); |
250 | } | 250 | } |
diff --git a/arch/alpha/kernel/sys_marvel.c b/arch/alpha/kernel/sys_marvel.c index 36d215954376..e349f03b830e 100644 --- a/arch/alpha/kernel/sys_marvel.c +++ b/arch/alpha/kernel/sys_marvel.c | |||
@@ -38,7 +38,7 @@ | |||
38 | * Interrupt handling. | 38 | * Interrupt handling. |
39 | */ | 39 | */ |
40 | static void | 40 | static void |
41 | io7_device_interrupt(unsigned long vector, struct pt_regs * regs) | 41 | io7_device_interrupt(unsigned long vector) |
42 | { | 42 | { |
43 | unsigned int pid; | 43 | unsigned int pid; |
44 | unsigned int irq; | 44 | unsigned int irq; |
@@ -64,7 +64,7 @@ io7_device_interrupt(unsigned long vector, struct pt_regs * regs) | |||
64 | irq &= MARVEL_IRQ_VEC_IRQ_MASK; /* not too many bits */ | 64 | irq &= MARVEL_IRQ_VEC_IRQ_MASK; /* not too many bits */ |
65 | irq |= pid << MARVEL_IRQ_VEC_PE_SHIFT; /* merge the pid */ | 65 | irq |= pid << MARVEL_IRQ_VEC_PE_SHIFT; /* merge the pid */ |
66 | 66 | ||
67 | handle_irq(irq, regs); | 67 | handle_irq(irq); |
68 | } | 68 | } |
69 | 69 | ||
70 | static volatile unsigned long * | 70 | static volatile unsigned long * |
diff --git a/arch/alpha/kernel/sys_miata.c b/arch/alpha/kernel/sys_miata.c index 61ac56f8eeea..b8b817feb1ee 100644 --- a/arch/alpha/kernel/sys_miata.c +++ b/arch/alpha/kernel/sys_miata.c | |||
@@ -33,7 +33,7 @@ | |||
33 | 33 | ||
34 | 34 | ||
35 | static void | 35 | static void |
36 | miata_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | 36 | miata_srm_device_interrupt(unsigned long vector) |
37 | { | 37 | { |
38 | int irq; | 38 | int irq; |
39 | 39 | ||
@@ -56,7 +56,7 @@ miata_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | |||
56 | if (irq >= 16) | 56 | if (irq >= 16) |
57 | irq = irq + 8; | 57 | irq = irq + 8; |
58 | 58 | ||
59 | handle_irq(irq, regs); | 59 | handle_irq(irq); |
60 | } | 60 | } |
61 | 61 | ||
62 | static void __init | 62 | static void __init |
diff --git a/arch/alpha/kernel/sys_mikasa.c b/arch/alpha/kernel/sys_mikasa.c index cc4c58111366..8d3e9429c5ee 100644 --- a/arch/alpha/kernel/sys_mikasa.c +++ b/arch/alpha/kernel/sys_mikasa.c | |||
@@ -79,7 +79,7 @@ static struct hw_interrupt_type mikasa_irq_type = { | |||
79 | }; | 79 | }; |
80 | 80 | ||
81 | static void | 81 | static void |
82 | mikasa_device_interrupt(unsigned long vector, struct pt_regs *regs) | 82 | mikasa_device_interrupt(unsigned long vector) |
83 | { | 83 | { |
84 | unsigned long pld; | 84 | unsigned long pld; |
85 | unsigned int i; | 85 | unsigned int i; |
@@ -97,9 +97,9 @@ mikasa_device_interrupt(unsigned long vector, struct pt_regs *regs) | |||
97 | i = ffz(~pld); | 97 | i = ffz(~pld); |
98 | pld &= pld - 1; /* clear least bit set */ | 98 | pld &= pld - 1; /* clear least bit set */ |
99 | if (i < 16) { | 99 | if (i < 16) { |
100 | isa_device_interrupt(vector, regs); | 100 | isa_device_interrupt(vector); |
101 | } else { | 101 | } else { |
102 | handle_irq(i, regs); | 102 | handle_irq(i); |
103 | } | 103 | } |
104 | } | 104 | } |
105 | } | 105 | } |
@@ -182,8 +182,7 @@ mikasa_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | |||
182 | 182 | ||
183 | #if defined(CONFIG_ALPHA_GENERIC) || !defined(CONFIG_ALPHA_PRIMO) | 183 | #if defined(CONFIG_ALPHA_GENERIC) || !defined(CONFIG_ALPHA_PRIMO) |
184 | static void | 184 | static void |
185 | mikasa_apecs_machine_check(unsigned long vector, unsigned long la_ptr, | 185 | mikasa_apecs_machine_check(unsigned long vector, unsigned long la_ptr) |
186 | struct pt_regs * regs) | ||
187 | { | 186 | { |
188 | #define MCHK_NO_DEVSEL 0x205U | 187 | #define MCHK_NO_DEVSEL 0x205U |
189 | #define MCHK_NO_TABT 0x204U | 188 | #define MCHK_NO_TABT 0x204U |
@@ -202,7 +201,7 @@ mikasa_apecs_machine_check(unsigned long vector, unsigned long la_ptr, | |||
202 | mb(); | 201 | mb(); |
203 | 202 | ||
204 | code = mchk_header->code; | 203 | code = mchk_header->code; |
205 | process_mcheck_info(vector, la_ptr, regs, "MIKASA APECS", | 204 | process_mcheck_info(vector, la_ptr, "MIKASA APECS", |
206 | (mcheck_expected(0) | 205 | (mcheck_expected(0) |
207 | && (code == MCHK_NO_DEVSEL | 206 | && (code == MCHK_NO_DEVSEL |
208 | || code == MCHK_NO_TABT))); | 207 | || code == MCHK_NO_TABT))); |
diff --git a/arch/alpha/kernel/sys_nautilus.c b/arch/alpha/kernel/sys_nautilus.c index c0d696efec5b..93744bab73fb 100644 --- a/arch/alpha/kernel/sys_nautilus.c +++ b/arch/alpha/kernel/sys_nautilus.c | |||
@@ -124,8 +124,7 @@ naut_sys_machine_check(unsigned long vector, unsigned long la_ptr, | |||
124 | in the system. They are analysed separately but all starts here. */ | 124 | in the system. They are analysed separately but all starts here. */ |
125 | 125 | ||
126 | void | 126 | void |
127 | nautilus_machine_check(unsigned long vector, unsigned long la_ptr, | 127 | nautilus_machine_check(unsigned long vector, unsigned long la_ptr) |
128 | struct pt_regs *regs) | ||
129 | { | 128 | { |
130 | char *mchk_class; | 129 | char *mchk_class; |
131 | 130 | ||
@@ -165,7 +164,7 @@ nautilus_machine_check(unsigned long vector, unsigned long la_ptr, | |||
165 | else if (vector == SCB_Q_SYSMCHK) | 164 | else if (vector == SCB_Q_SYSMCHK) |
166 | mchk_class = "Fatal"; | 165 | mchk_class = "Fatal"; |
167 | else { | 166 | else { |
168 | ev6_machine_check(vector, la_ptr, regs); | 167 | ev6_machine_check(vector, la_ptr); |
169 | return; | 168 | return; |
170 | } | 169 | } |
171 | 170 | ||
@@ -173,7 +172,7 @@ nautilus_machine_check(unsigned long vector, unsigned long la_ptr, | |||
173 | "[%s System Machine Check (NMI)]\n", | 172 | "[%s System Machine Check (NMI)]\n", |
174 | vector, mchk_class); | 173 | vector, mchk_class); |
175 | 174 | ||
176 | naut_sys_machine_check(vector, la_ptr, regs); | 175 | naut_sys_machine_check(vector, la_ptr, get_irq_regs()); |
177 | 176 | ||
178 | /* Tell the PALcode to clear the machine check */ | 177 | /* Tell the PALcode to clear the machine check */ |
179 | draina(); | 178 | draina(); |
diff --git a/arch/alpha/kernel/sys_noritake.c b/arch/alpha/kernel/sys_noritake.c index 2d3cff7e8c5f..de6ba3432e8a 100644 --- a/arch/alpha/kernel/sys_noritake.c +++ b/arch/alpha/kernel/sys_noritake.c | |||
@@ -77,7 +77,7 @@ static struct hw_interrupt_type noritake_irq_type = { | |||
77 | }; | 77 | }; |
78 | 78 | ||
79 | static void | 79 | static void |
80 | noritake_device_interrupt(unsigned long vector, struct pt_regs *regs) | 80 | noritake_device_interrupt(unsigned long vector) |
81 | { | 81 | { |
82 | unsigned long pld; | 82 | unsigned long pld; |
83 | unsigned int i; | 83 | unsigned int i; |
@@ -96,15 +96,15 @@ noritake_device_interrupt(unsigned long vector, struct pt_regs *regs) | |||
96 | i = ffz(~pld); | 96 | i = ffz(~pld); |
97 | pld &= pld - 1; /* clear least bit set */ | 97 | pld &= pld - 1; /* clear least bit set */ |
98 | if (i < 16) { | 98 | if (i < 16) { |
99 | isa_device_interrupt(vector, regs); | 99 | isa_device_interrupt(vector); |
100 | } else { | 100 | } else { |
101 | handle_irq(i, regs); | 101 | handle_irq(i); |
102 | } | 102 | } |
103 | } | 103 | } |
104 | } | 104 | } |
105 | 105 | ||
106 | static void | 106 | static void |
107 | noritake_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | 107 | noritake_srm_device_interrupt(unsigned long vector) |
108 | { | 108 | { |
109 | int irq; | 109 | int irq; |
110 | 110 | ||
@@ -122,7 +122,7 @@ noritake_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | |||
122 | if (irq >= 16) | 122 | if (irq >= 16) |
123 | irq = irq + 1; | 123 | irq = irq + 1; |
124 | 124 | ||
125 | handle_irq(irq, regs); | 125 | handle_irq(irq); |
126 | } | 126 | } |
127 | 127 | ||
128 | static void __init | 128 | static void __init |
@@ -264,8 +264,7 @@ noritake_swizzle(struct pci_dev *dev, u8 *pinp) | |||
264 | 264 | ||
265 | #if defined(CONFIG_ALPHA_GENERIC) || !defined(CONFIG_ALPHA_PRIMO) | 265 | #if defined(CONFIG_ALPHA_GENERIC) || !defined(CONFIG_ALPHA_PRIMO) |
266 | static void | 266 | static void |
267 | noritake_apecs_machine_check(unsigned long vector, unsigned long la_ptr, | 267 | noritake_apecs_machine_check(unsigned long vector, unsigned long la_ptr) |
268 | struct pt_regs * regs) | ||
269 | { | 268 | { |
270 | #define MCHK_NO_DEVSEL 0x205U | 269 | #define MCHK_NO_DEVSEL 0x205U |
271 | #define MCHK_NO_TABT 0x204U | 270 | #define MCHK_NO_TABT 0x204U |
@@ -284,7 +283,7 @@ noritake_apecs_machine_check(unsigned long vector, unsigned long la_ptr, | |||
284 | mb(); | 283 | mb(); |
285 | 284 | ||
286 | code = mchk_header->code; | 285 | code = mchk_header->code; |
287 | process_mcheck_info(vector, la_ptr, regs, "NORITAKE APECS", | 286 | process_mcheck_info(vector, la_ptr, "NORITAKE APECS", |
288 | (mcheck_expected(0) | 287 | (mcheck_expected(0) |
289 | && (code == MCHK_NO_DEVSEL | 288 | && (code == MCHK_NO_DEVSEL |
290 | || code == MCHK_NO_TABT))); | 289 | || code == MCHK_NO_TABT))); |
diff --git a/arch/alpha/kernel/sys_rawhide.c b/arch/alpha/kernel/sys_rawhide.c index 949607e3d6fb..581d08c70b92 100644 --- a/arch/alpha/kernel/sys_rawhide.c +++ b/arch/alpha/kernel/sys_rawhide.c | |||
@@ -134,7 +134,7 @@ static struct hw_interrupt_type rawhide_irq_type = { | |||
134 | }; | 134 | }; |
135 | 135 | ||
136 | static void | 136 | static void |
137 | rawhide_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | 137 | rawhide_srm_device_interrupt(unsigned long vector) |
138 | { | 138 | { |
139 | int irq; | 139 | int irq; |
140 | 140 | ||
@@ -158,7 +158,7 @@ rawhide_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | |||
158 | /* Adjust by which hose it is from. */ | 158 | /* Adjust by which hose it is from. */ |
159 | irq -= ((irq + 16) >> 2) & 0x38; | 159 | irq -= ((irq + 16) >> 2) & 0x38; |
160 | 160 | ||
161 | handle_irq(irq, regs); | 161 | handle_irq(irq); |
162 | } | 162 | } |
163 | 163 | ||
164 | static void __init | 164 | static void __init |
diff --git a/arch/alpha/kernel/sys_rx164.c b/arch/alpha/kernel/sys_rx164.c index 6ae506052635..ce1faa6f1df1 100644 --- a/arch/alpha/kernel/sys_rx164.c +++ b/arch/alpha/kernel/sys_rx164.c | |||
@@ -83,7 +83,7 @@ static struct hw_interrupt_type rx164_irq_type = { | |||
83 | }; | 83 | }; |
84 | 84 | ||
85 | static void | 85 | static void |
86 | rx164_device_interrupt(unsigned long vector, struct pt_regs *regs) | 86 | rx164_device_interrupt(unsigned long vector) |
87 | { | 87 | { |
88 | unsigned long pld; | 88 | unsigned long pld; |
89 | volatile unsigned int *dirr; | 89 | volatile unsigned int *dirr; |
@@ -102,9 +102,9 @@ rx164_device_interrupt(unsigned long vector, struct pt_regs *regs) | |||
102 | i = ffz(~pld); | 102 | i = ffz(~pld); |
103 | pld &= pld - 1; /* clear least bit set */ | 103 | pld &= pld - 1; /* clear least bit set */ |
104 | if (i == 20) { | 104 | if (i == 20) { |
105 | isa_no_iack_sc_device_interrupt(vector, regs); | 105 | isa_no_iack_sc_device_interrupt(vector); |
106 | } else { | 106 | } else { |
107 | handle_irq(16+i, regs); | 107 | handle_irq(16+i); |
108 | } | 108 | } |
109 | } | 109 | } |
110 | } | 110 | } |
diff --git a/arch/alpha/kernel/sys_sable.c b/arch/alpha/kernel/sys_sable.c index a7a14647b50e..906019cfa681 100644 --- a/arch/alpha/kernel/sys_sable.c +++ b/arch/alpha/kernel/sys_sable.c | |||
@@ -512,7 +512,7 @@ static struct hw_interrupt_type sable_lynx_irq_type = { | |||
512 | }; | 512 | }; |
513 | 513 | ||
514 | static void | 514 | static void |
515 | sable_lynx_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | 515 | sable_lynx_srm_device_interrupt(unsigned long vector) |
516 | { | 516 | { |
517 | /* Note that the vector reported by the SRM PALcode corresponds | 517 | /* Note that the vector reported by the SRM PALcode corresponds |
518 | to the interrupt mask bits, but we have to manage via the | 518 | to the interrupt mask bits, but we have to manage via the |
@@ -526,7 +526,7 @@ sable_lynx_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | |||
526 | printk("%s: vector 0x%lx bit 0x%x irq 0x%x\n", | 526 | printk("%s: vector 0x%lx bit 0x%x irq 0x%x\n", |
527 | __FUNCTION__, vector, bit, irq); | 527 | __FUNCTION__, vector, bit, irq); |
528 | #endif | 528 | #endif |
529 | handle_irq(irq, regs); | 529 | handle_irq(irq); |
530 | } | 530 | } |
531 | 531 | ||
532 | static void __init | 532 | static void __init |
diff --git a/arch/alpha/kernel/sys_takara.c b/arch/alpha/kernel/sys_takara.c index 2c75cd1fd81a..9bd9a31450c6 100644 --- a/arch/alpha/kernel/sys_takara.c +++ b/arch/alpha/kernel/sys_takara.c | |||
@@ -85,7 +85,7 @@ static struct hw_interrupt_type takara_irq_type = { | |||
85 | }; | 85 | }; |
86 | 86 | ||
87 | static void | 87 | static void |
88 | takara_device_interrupt(unsigned long vector, struct pt_regs *regs) | 88 | takara_device_interrupt(unsigned long vector) |
89 | { | 89 | { |
90 | unsigned intstatus; | 90 | unsigned intstatus; |
91 | 91 | ||
@@ -112,20 +112,20 @@ takara_device_interrupt(unsigned long vector, struct pt_regs *regs) | |||
112 | * despatch an interrupt if it's set. | 112 | * despatch an interrupt if it's set. |
113 | */ | 113 | */ |
114 | 114 | ||
115 | if (intstatus & 8) handle_irq(16+3, regs); | 115 | if (intstatus & 8) handle_irq(16+3); |
116 | if (intstatus & 4) handle_irq(16+2, regs); | 116 | if (intstatus & 4) handle_irq(16+2); |
117 | if (intstatus & 2) handle_irq(16+1, regs); | 117 | if (intstatus & 2) handle_irq(16+1); |
118 | if (intstatus & 1) handle_irq(16+0, regs); | 118 | if (intstatus & 1) handle_irq(16+0); |
119 | } else { | 119 | } else { |
120 | isa_device_interrupt (vector, regs); | 120 | isa_device_interrupt (vector); |
121 | } | 121 | } |
122 | } | 122 | } |
123 | 123 | ||
124 | static void | 124 | static void |
125 | takara_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | 125 | takara_srm_device_interrupt(unsigned long vector) |
126 | { | 126 | { |
127 | int irq = (vector - 0x800) >> 4; | 127 | int irq = (vector - 0x800) >> 4; |
128 | handle_irq(irq, regs); | 128 | handle_irq(irq); |
129 | } | 129 | } |
130 | 130 | ||
131 | static void __init | 131 | static void __init |
diff --git a/arch/alpha/kernel/sys_titan.c b/arch/alpha/kernel/sys_titan.c index 302aab38d95f..29ab7db81c30 100644 --- a/arch/alpha/kernel/sys_titan.c +++ b/arch/alpha/kernel/sys_titan.c | |||
@@ -167,18 +167,18 @@ titan_set_irq_affinity(unsigned int irq, cpumask_t affinity) | |||
167 | } | 167 | } |
168 | 168 | ||
169 | static void | 169 | static void |
170 | titan_device_interrupt(unsigned long vector, struct pt_regs * regs) | 170 | titan_device_interrupt(unsigned long vector) |
171 | { | 171 | { |
172 | printk("titan_device_interrupt: NOT IMPLEMENTED YET!! \n"); | 172 | printk("titan_device_interrupt: NOT IMPLEMENTED YET!! \n"); |
173 | } | 173 | } |
174 | 174 | ||
175 | static void | 175 | static void |
176 | titan_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) | 176 | titan_srm_device_interrupt(unsigned long vector) |
177 | { | 177 | { |
178 | int irq; | 178 | int irq; |
179 | 179 | ||
180 | irq = (vector - 0x800) >> 4; | 180 | irq = (vector - 0x800) >> 4; |
181 | handle_irq(irq, regs); | 181 | handle_irq(irq); |
182 | } | 182 | } |
183 | 183 | ||
184 | 184 | ||
@@ -204,7 +204,7 @@ static struct hw_interrupt_type titan_irq_type = { | |||
204 | }; | 204 | }; |
205 | 205 | ||
206 | static irqreturn_t | 206 | static irqreturn_t |
207 | titan_intr_nop(int irq, void *dev_id, struct pt_regs *regs) | 207 | titan_intr_nop(int irq, void *dev_id) |
208 | { | 208 | { |
209 | /* | 209 | /* |
210 | * This is a NOP interrupt handler for the purposes of | 210 | * This is a NOP interrupt handler for the purposes of |
@@ -243,7 +243,7 @@ titan_legacy_init_irq(void) | |||
243 | } | 243 | } |
244 | 244 | ||
245 | void | 245 | void |
246 | titan_dispatch_irqs(u64 mask, struct pt_regs *regs) | 246 | titan_dispatch_irqs(u64 mask) |
247 | { | 247 | { |
248 | unsigned long vector; | 248 | unsigned long vector; |
249 | 249 | ||
@@ -263,7 +263,7 @@ titan_dispatch_irqs(u64 mask, struct pt_regs *regs) | |||
263 | vector = 0x900 + (vector << 4); /* convert to SRM vector */ | 263 | vector = 0x900 + (vector << 4); /* convert to SRM vector */ |
264 | 264 | ||
265 | /* dispatch it */ | 265 | /* dispatch it */ |
266 | alpha_mv.device_interrupt(vector, regs); | 266 | alpha_mv.device_interrupt(vector); |
267 | } | 267 | } |
268 | } | 268 | } |
269 | 269 | ||
diff --git a/arch/alpha/kernel/sys_wildfire.c b/arch/alpha/kernel/sys_wildfire.c index 22c5798fe083..42c3eede4d09 100644 --- a/arch/alpha/kernel/sys_wildfire.c +++ b/arch/alpha/kernel/sys_wildfire.c | |||
@@ -234,7 +234,7 @@ wildfire_init_irq(void) | |||
234 | } | 234 | } |
235 | 235 | ||
236 | static void | 236 | static void |
237 | wildfire_device_interrupt(unsigned long vector, struct pt_regs * regs) | 237 | wildfire_device_interrupt(unsigned long vector) |
238 | { | 238 | { |
239 | int irq; | 239 | int irq; |
240 | 240 | ||
@@ -246,7 +246,7 @@ wildfire_device_interrupt(unsigned long vector, struct pt_regs * regs) | |||
246 | * bits 5-0: irq in PCA | 246 | * bits 5-0: irq in PCA |
247 | */ | 247 | */ |
248 | 248 | ||
249 | handle_irq(irq, regs); | 249 | handle_irq(irq); |
250 | return; | 250 | return; |
251 | } | 251 | } |
252 | 252 | ||
diff --git a/arch/alpha/kernel/time.c b/arch/alpha/kernel/time.c index 581ddcc22fc5..cf0666523989 100644 --- a/arch/alpha/kernel/time.c +++ b/arch/alpha/kernel/time.c | |||
@@ -104,7 +104,7 @@ unsigned long long sched_clock(void) | |||
104 | * timer_interrupt() needs to keep up the real-time clock, | 104 | * timer_interrupt() needs to keep up the real-time clock, |
105 | * as well as call the "do_timer()" routine every clocktick | 105 | * as well as call the "do_timer()" routine every clocktick |
106 | */ | 106 | */ |
107 | irqreturn_t timer_interrupt(int irq, void *dev, struct pt_regs * regs) | 107 | irqreturn_t timer_interrupt(int irq, void *dev) |
108 | { | 108 | { |
109 | unsigned long delta; | 109 | unsigned long delta; |
110 | __u32 now; | 110 | __u32 now; |
@@ -112,7 +112,7 @@ irqreturn_t timer_interrupt(int irq, void *dev, struct pt_regs * regs) | |||
112 | 112 | ||
113 | #ifndef CONFIG_SMP | 113 | #ifndef CONFIG_SMP |
114 | /* Not SMP, do kernel PC profiling here. */ | 114 | /* Not SMP, do kernel PC profiling here. */ |
115 | profile_tick(CPU_PROFILING, regs); | 115 | profile_tick(CPU_PROFILING); |
116 | #endif | 116 | #endif |
117 | 117 | ||
118 | write_seqlock(&xtime_lock); | 118 | write_seqlock(&xtime_lock); |
@@ -132,7 +132,7 @@ irqreturn_t timer_interrupt(int irq, void *dev, struct pt_regs * regs) | |||
132 | while (nticks > 0) { | 132 | while (nticks > 0) { |
133 | do_timer(1); | 133 | do_timer(1); |
134 | #ifndef CONFIG_SMP | 134 | #ifndef CONFIG_SMP |
135 | update_process_times(user_mode(regs)); | 135 | update_process_times(user_mode(get_irq_regs())); |
136 | #endif | 136 | #endif |
137 | nticks--; | 137 | nticks--; |
138 | } | 138 | } |