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 | |
parent | 53e36ada37cb8b01cfbf674580a79edc0bb764c7 (diff) | |
parent | 53a5fbdc2dff55161a206ed1a1385a8fa8055c34 (diff) |
Merge branch 'master' into upstream-fixes
760 files changed, 5631 insertions, 5869 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 84a018ee4556..931e6e40c08b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -2261,6 +2261,17 @@ T: git kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6.git | |||
2261 | T: cvs cvs.parisc-linux.org:/var/cvs/linux-2.6 | 2261 | T: cvs cvs.parisc-linux.org:/var/cvs/linux-2.6 |
2262 | S: Maintained | 2262 | S: Maintained |
2263 | 2263 | ||
2264 | PC87360 HARDWARE MONITORING DRIVER | ||
2265 | P: Jim Cromie | ||
2266 | M: jim.cromie@gmail.com | ||
2267 | L: lm-sensors@lm-sensors.org | ||
2268 | S: Maintained | ||
2269 | |||
2270 | PC8736x GPIO DRIVER | ||
2271 | P: Jim Cromie | ||
2272 | M: jim.cromie@gmail.com | ||
2273 | S: Maintained | ||
2274 | |||
2264 | PCI ERROR RECOVERY | 2275 | PCI ERROR RECOVERY |
2265 | P: Linas Vepstas | 2276 | P: Linas Vepstas |
2266 | M: linas@austin.ibm.com | 2277 | M: linas@austin.ibm.com |
@@ -2592,10 +2603,19 @@ L: lksctp-developers@lists.sourceforge.net | |||
2592 | S: Supported | 2603 | S: Supported |
2593 | 2604 | ||
2594 | SCx200 CPU SUPPORT | 2605 | SCx200 CPU SUPPORT |
2595 | P: Christer Weinigel | 2606 | P: Jim Cromie |
2596 | M: christer@weinigel.se | 2607 | M: jim.cromie@gmail.com |
2597 | W: http://www.weinigel.se | 2608 | S: Odd Fixes |
2598 | S: Supported | 2609 | |
2610 | SCx200 GPIO DRIVER | ||
2611 | P: Jim Cromie | ||
2612 | M: jim.cromie@gmail.com | ||
2613 | S: Maintained | ||
2614 | |||
2615 | SCx200 HRT CLOCKSOURCE DRIVER | ||
2616 | P: Jim Cromie | ||
2617 | M: jim.cromie@gmail.com | ||
2618 | S: Maintained | ||
2599 | 2619 | ||
2600 | SECURITY CONTACT | 2620 | SECURITY CONTACT |
2601 | P: Security Officers | 2621 | P: Security Officers |
@@ -2760,14 +2780,7 @@ S: Maintained | |||
2760 | UltraSPARC (sparc64): | 2780 | UltraSPARC (sparc64): |
2761 | P: David S. Miller | 2781 | P: David S. Miller |
2762 | M: davem@davemloft.net | 2782 | M: davem@davemloft.net |
2763 | P: Eddie C. Dost | ||
2764 | M: ecd@brainaid.de | ||
2765 | P: Jakub Jelinek | ||
2766 | M: jj@sunsite.ms.mff.cuni.cz | ||
2767 | P: Anton Blanchard | ||
2768 | M: anton@samba.org | ||
2769 | L: sparclinux@vger.kernel.org | 2783 | L: sparclinux@vger.kernel.org |
2770 | L: ultralinux@vger.kernel.org | ||
2771 | T: git kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6.git | 2784 | T: git kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6.git |
2772 | S: Maintained | 2785 | S: Maintained |
2773 | 2786 | ||
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 | } |
diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c index 181ef1ead5b8..80a72c75214f 100644 --- a/arch/arm/common/locomo.c +++ b/arch/arm/common/locomo.c | |||
@@ -163,8 +163,7 @@ static struct locomo_dev_info locomo_devices[] = { | |||
163 | #define LOCOMO_IRQ_LT_START (IRQ_LOCOMO_LT) | 163 | #define LOCOMO_IRQ_LT_START (IRQ_LOCOMO_LT) |
164 | #define LOCOMO_IRQ_SPI_START (IRQ_LOCOMO_SPI_RFR) | 164 | #define LOCOMO_IRQ_SPI_START (IRQ_LOCOMO_SPI_RFR) |
165 | 165 | ||
166 | static void locomo_handler(unsigned int irq, struct irqdesc *desc, | 166 | static void locomo_handler(unsigned int irq, struct irqdesc *desc) |
167 | struct pt_regs *regs) | ||
168 | { | 167 | { |
169 | int req, i; | 168 | int req, i; |
170 | struct irqdesc *d; | 169 | struct irqdesc *d; |
@@ -182,7 +181,7 @@ static void locomo_handler(unsigned int irq, struct irqdesc *desc, | |||
182 | d = irq_desc + irq; | 181 | d = irq_desc + irq; |
183 | for (i = 0; i <= 3; i++, d++, irq++) { | 182 | for (i = 0; i <= 3; i++, d++, irq++) { |
184 | if (req & (0x0100 << i)) { | 183 | if (req & (0x0100 << i)) { |
185 | desc_handle_irq(irq, d, regs); | 184 | desc_handle_irq(irq, d); |
186 | } | 185 | } |
187 | 186 | ||
188 | } | 187 | } |
@@ -218,15 +217,14 @@ static struct irq_chip locomo_chip = { | |||
218 | .unmask = locomo_unmask_irq, | 217 | .unmask = locomo_unmask_irq, |
219 | }; | 218 | }; |
220 | 219 | ||
221 | static void locomo_key_handler(unsigned int irq, struct irqdesc *desc, | 220 | static void locomo_key_handler(unsigned int irq, struct irqdesc *desc) |
222 | struct pt_regs *regs) | ||
223 | { | 221 | { |
224 | struct irqdesc *d; | 222 | struct irqdesc *d; |
225 | void __iomem *mapbase = get_irq_chipdata(irq); | 223 | void __iomem *mapbase = get_irq_chipdata(irq); |
226 | 224 | ||
227 | if (locomo_readl(mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC) & 0x0001) { | 225 | if (locomo_readl(mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC) & 0x0001) { |
228 | d = irq_desc + LOCOMO_IRQ_KEY_START; | 226 | d = irq_desc + LOCOMO_IRQ_KEY_START; |
229 | desc_handle_irq(LOCOMO_IRQ_KEY_START, d, regs); | 227 | desc_handle_irq(LOCOMO_IRQ_KEY_START, d); |
230 | } | 228 | } |
231 | } | 229 | } |
232 | 230 | ||
@@ -264,8 +262,7 @@ static struct irq_chip locomo_key_chip = { | |||
264 | .unmask = locomo_key_unmask_irq, | 262 | .unmask = locomo_key_unmask_irq, |
265 | }; | 263 | }; |
266 | 264 | ||
267 | static void locomo_gpio_handler(unsigned int irq, struct irqdesc *desc, | 265 | static void locomo_gpio_handler(unsigned int irq, struct irqdesc *desc) |
268 | struct pt_regs *regs) | ||
269 | { | 266 | { |
270 | int req, i; | 267 | int req, i; |
271 | struct irqdesc *d; | 268 | struct irqdesc *d; |
@@ -280,7 +277,7 @@ static void locomo_gpio_handler(unsigned int irq, struct irqdesc *desc, | |||
280 | d = irq_desc + LOCOMO_IRQ_GPIO_START; | 277 | d = irq_desc + LOCOMO_IRQ_GPIO_START; |
281 | for (i = 0; i <= 15; i++, irq++, d++) { | 278 | for (i = 0; i <= 15; i++, irq++, d++) { |
282 | if (req & (0x0001 << i)) { | 279 | if (req & (0x0001 << i)) { |
283 | desc_handle_irq(irq, d, regs); | 280 | desc_handle_irq(irq, d); |
284 | } | 281 | } |
285 | } | 282 | } |
286 | } | 283 | } |
@@ -328,15 +325,14 @@ static struct irq_chip locomo_gpio_chip = { | |||
328 | .unmask = locomo_gpio_unmask_irq, | 325 | .unmask = locomo_gpio_unmask_irq, |
329 | }; | 326 | }; |
330 | 327 | ||
331 | static void locomo_lt_handler(unsigned int irq, struct irqdesc *desc, | 328 | static void locomo_lt_handler(unsigned int irq, struct irqdesc *desc) |
332 | struct pt_regs *regs) | ||
333 | { | 329 | { |
334 | struct irqdesc *d; | 330 | struct irqdesc *d; |
335 | void __iomem *mapbase = get_irq_chipdata(irq); | 331 | void __iomem *mapbase = get_irq_chipdata(irq); |
336 | 332 | ||
337 | if (locomo_readl(mapbase + LOCOMO_LTINT) & 0x0001) { | 333 | if (locomo_readl(mapbase + LOCOMO_LTINT) & 0x0001) { |
338 | d = irq_desc + LOCOMO_IRQ_LT_START; | 334 | d = irq_desc + LOCOMO_IRQ_LT_START; |
339 | desc_handle_irq(LOCOMO_IRQ_LT_START, d, regs); | 335 | desc_handle_irq(LOCOMO_IRQ_LT_START, d); |
340 | } | 336 | } |
341 | } | 337 | } |
342 | 338 | ||
@@ -374,8 +370,7 @@ static struct irq_chip locomo_lt_chip = { | |||
374 | .unmask = locomo_lt_unmask_irq, | 370 | .unmask = locomo_lt_unmask_irq, |
375 | }; | 371 | }; |
376 | 372 | ||
377 | static void locomo_spi_handler(unsigned int irq, struct irqdesc *desc, | 373 | static void locomo_spi_handler(unsigned int irq, struct irqdesc *desc) |
378 | struct pt_regs *regs) | ||
379 | { | 374 | { |
380 | int req, i; | 375 | int req, i; |
381 | struct irqdesc *d; | 376 | struct irqdesc *d; |
@@ -388,7 +383,7 @@ static void locomo_spi_handler(unsigned int irq, struct irqdesc *desc, | |||
388 | 383 | ||
389 | for (i = 0; i <= 3; i++, irq++, d++) { | 384 | for (i = 0; i <= 3; i++, irq++, d++) { |
390 | if (req & (0x0001 << i)) { | 385 | if (req & (0x0001 << i)) { |
391 | desc_handle_irq(irq, d, regs); | 386 | desc_handle_irq(irq, d); |
392 | } | 387 | } |
393 | } | 388 | } |
394 | } | 389 | } |
diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c index 30046ad41ced..d5f72010a6f3 100644 --- a/arch/arm/common/sa1111.c +++ b/arch/arm/common/sa1111.c | |||
@@ -147,7 +147,7 @@ void __init sa1111_adjust_zones(int node, unsigned long *size, unsigned long *ho | |||
147 | * will call us again if there are more interrupts to process. | 147 | * will call us again if there are more interrupts to process. |
148 | */ | 148 | */ |
149 | static void | 149 | static void |
150 | sa1111_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 150 | sa1111_irq_handler(unsigned int irq, struct irqdesc *desc) |
151 | { | 151 | { |
152 | unsigned int stat0, stat1, i; | 152 | unsigned int stat0, stat1, i; |
153 | void __iomem *base = get_irq_data(irq); | 153 | void __iomem *base = get_irq_data(irq); |
@@ -162,17 +162,17 @@ sa1111_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | |||
162 | sa1111_writel(stat1, base + SA1111_INTSTATCLR1); | 162 | sa1111_writel(stat1, base + SA1111_INTSTATCLR1); |
163 | 163 | ||
164 | if (stat0 == 0 && stat1 == 0) { | 164 | if (stat0 == 0 && stat1 == 0) { |
165 | do_bad_IRQ(irq, desc, regs); | 165 | do_bad_IRQ(irq, desc); |
166 | return; | 166 | return; |
167 | } | 167 | } |
168 | 168 | ||
169 | for (i = IRQ_SA1111_START; stat0; i++, stat0 >>= 1) | 169 | for (i = IRQ_SA1111_START; stat0; i++, stat0 >>= 1) |
170 | if (stat0 & 1) | 170 | if (stat0 & 1) |
171 | handle_edge_irq(i, irq_desc + i, regs); | 171 | handle_edge_irq(i, irq_desc + i); |
172 | 172 | ||
173 | for (i = IRQ_SA1111_START + 32; stat1; i++, stat1 >>= 1) | 173 | for (i = IRQ_SA1111_START + 32; stat1; i++, stat1 >>= 1) |
174 | if (stat1 & 1) | 174 | if (stat1 & 1) |
175 | handle_edge_irq(i, irq_desc + i, regs); | 175 | handle_edge_irq(i, irq_desc + i); |
176 | 176 | ||
177 | /* For level-based interrupts */ | 177 | /* For level-based interrupts */ |
178 | desc->chip->unmask(irq); | 178 | desc->chip->unmask(irq); |
diff --git a/arch/arm/common/sharpsl_pm.c b/arch/arm/common/sharpsl_pm.c index f412dedda684..605dedf96790 100644 --- a/arch/arm/common/sharpsl_pm.c +++ b/arch/arm/common/sharpsl_pm.c | |||
@@ -258,7 +258,7 @@ static void sharpsl_ac_timer(unsigned long data) | |||
258 | } | 258 | } |
259 | 259 | ||
260 | 260 | ||
261 | irqreturn_t sharpsl_ac_isr(int irq, void *dev_id, struct pt_regs *fp) | 261 | irqreturn_t sharpsl_ac_isr(int irq, void *dev_id) |
262 | { | 262 | { |
263 | /* Delay the event slightly to debounce */ | 263 | /* Delay the event slightly to debounce */ |
264 | /* Must be a smaller delay than the chrg_full_isr below */ | 264 | /* Must be a smaller delay than the chrg_full_isr below */ |
@@ -293,7 +293,7 @@ static void sharpsl_chrg_full_timer(unsigned long data) | |||
293 | /* Charging Finished Interrupt (Not present on Corgi) */ | 293 | /* Charging Finished Interrupt (Not present on Corgi) */ |
294 | /* Can trigger at the same time as an AC staus change so | 294 | /* Can trigger at the same time as an AC staus change so |
295 | delay until after that has been processed */ | 295 | delay until after that has been processed */ |
296 | irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id, struct pt_regs *fp) | 296 | irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id) |
297 | { | 297 | { |
298 | if (sharpsl_pm.flags & SHARPSL_SUSPENDED) | 298 | if (sharpsl_pm.flags & SHARPSL_SUSPENDED) |
299 | return IRQ_HANDLED; | 299 | return IRQ_HANDLED; |
@@ -304,7 +304,7 @@ irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id, struct pt_regs *fp) | |||
304 | return IRQ_HANDLED; | 304 | return IRQ_HANDLED; |
305 | } | 305 | } |
306 | 306 | ||
307 | irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id, struct pt_regs *fp) | 307 | irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id) |
308 | { | 308 | { |
309 | int is_fatal = 0; | 309 | int is_fatal = 0; |
310 | 310 | ||
diff --git a/arch/arm/common/time-acorn.c b/arch/arm/common/time-acorn.c index 3f60dd9aca80..34038eccbba9 100644 --- a/arch/arm/common/time-acorn.c +++ b/arch/arm/common/time-acorn.c | |||
@@ -67,10 +67,10 @@ void __init ioctime_init(void) | |||
67 | } | 67 | } |
68 | 68 | ||
69 | static irqreturn_t | 69 | static irqreturn_t |
70 | ioc_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 70 | ioc_timer_interrupt(int irq, void *dev_id) |
71 | { | 71 | { |
72 | write_seqlock(&xtime_lock); | 72 | write_seqlock(&xtime_lock); |
73 | timer_tick(regs); | 73 | timer_tick(); |
74 | write_sequnlock(&xtime_lock); | 74 | write_sequnlock(&xtime_lock); |
75 | return IRQ_HANDLED; | 75 | return IRQ_HANDLED; |
76 | } | 76 | } |
diff --git a/arch/arm/kernel/ecard.c b/arch/arm/kernel/ecard.c index 3e14b1348c0b..b27513a0f11e 100644 --- a/arch/arm/kernel/ecard.c +++ b/arch/arm/kernel/ecard.c | |||
@@ -567,7 +567,7 @@ static void ecard_check_lockup(struct irqdesc *desc) | |||
567 | } | 567 | } |
568 | 568 | ||
569 | static void | 569 | static void |
570 | ecard_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 570 | ecard_irq_handler(unsigned int irq, struct irqdesc *desc) |
571 | { | 571 | { |
572 | ecard_t *ec; | 572 | ecard_t *ec; |
573 | int called = 0; | 573 | int called = 0; |
@@ -586,7 +586,7 @@ ecard_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | |||
586 | 586 | ||
587 | if (pending) { | 587 | if (pending) { |
588 | struct irqdesc *d = irq_desc + ec->irq; | 588 | struct irqdesc *d = irq_desc + ec->irq; |
589 | desc_handle_irq(ec->irq, d, regs); | 589 | desc_handle_irq(ec->irq, d); |
590 | called ++; | 590 | called ++; |
591 | } | 591 | } |
592 | } | 592 | } |
@@ -609,7 +609,7 @@ static unsigned char first_set[] = | |||
609 | }; | 609 | }; |
610 | 610 | ||
611 | static void | 611 | static void |
612 | ecard_irqexp_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 612 | ecard_irqexp_handler(unsigned int irq, struct irqdesc *desc) |
613 | { | 613 | { |
614 | const unsigned int statusmask = 15; | 614 | const unsigned int statusmask = 15; |
615 | unsigned int status; | 615 | unsigned int status; |
@@ -633,7 +633,7 @@ ecard_irqexp_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *reg | |||
633 | * Serial cards should go in 0/1, ethernet/scsi in 2/3 | 633 | * Serial cards should go in 0/1, ethernet/scsi in 2/3 |
634 | * otherwise you will lose serial data at high speeds! | 634 | * otherwise you will lose serial data at high speeds! |
635 | */ | 635 | */ |
636 | desc_handle_irq(ec->irq, d, regs); | 636 | desc_handle_irq(ec->irq, d); |
637 | } else { | 637 | } else { |
638 | printk(KERN_WARNING "card%d: interrupt from unclaimed " | 638 | printk(KERN_WARNING "card%d: interrupt from unclaimed " |
639 | "card???\n", slot); | 639 | "card???\n", slot); |
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index 2e1bf830fe11..2c4ff1cbe334 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c | |||
@@ -111,6 +111,7 @@ static struct irq_desc bad_irq_desc = { | |||
111 | */ | 111 | */ |
112 | asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) | 112 | asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) |
113 | { | 113 | { |
114 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
114 | struct irqdesc *desc = irq_desc + irq; | 115 | struct irqdesc *desc = irq_desc + irq; |
115 | 116 | ||
116 | /* | 117 | /* |
@@ -122,12 +123,13 @@ asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) | |||
122 | 123 | ||
123 | irq_enter(); | 124 | irq_enter(); |
124 | 125 | ||
125 | desc_handle_irq(irq, desc, regs); | 126 | desc_handle_irq(irq, desc); |
126 | 127 | ||
127 | /* AT91 specific workaround */ | 128 | /* AT91 specific workaround */ |
128 | irq_finish(irq); | 129 | irq_finish(irq); |
129 | 130 | ||
130 | irq_exit(); | 131 | irq_exit(); |
132 | set_irq_regs(old_regs); | ||
131 | } | 133 | } |
132 | 134 | ||
133 | void set_irq_flags(unsigned int irq, unsigned int iflags) | 135 | void set_irq_flags(unsigned int irq, unsigned int iflags) |
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c index b030320b17c7..c03cab5c4c79 100644 --- a/arch/arm/kernel/time.c +++ b/arch/arm/kernel/time.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/profile.h> | 27 | #include <linux/profile.h> |
28 | #include <linux/sysdev.h> | 28 | #include <linux/sysdev.h> |
29 | #include <linux/timer.h> | 29 | #include <linux/timer.h> |
30 | #include <linux/irq.h> | ||
30 | 31 | ||
31 | #include <asm/leds.h> | 32 | #include <asm/leds.h> |
32 | #include <asm/thread_info.h> | 33 | #include <asm/thread_info.h> |
@@ -324,9 +325,10 @@ EXPORT_SYMBOL(restore_time_delta); | |||
324 | /* | 325 | /* |
325 | * Kernel system timer support. | 326 | * Kernel system timer support. |
326 | */ | 327 | */ |
327 | void timer_tick(struct pt_regs *regs) | 328 | void timer_tick(void) |
328 | { | 329 | { |
329 | profile_tick(CPU_PROFILING, regs); | 330 | struct pt_regs *regs = get_irq_regs(); |
331 | profile_tick(CPU_PROFILING); | ||
330 | do_leds(); | 332 | do_leds(); |
331 | do_set_rtc(); | 333 | do_set_rtc(); |
332 | do_timer(1); | 334 | do_timer(1); |
diff --git a/arch/arm/mach-aaec2000/core.c b/arch/arm/mach-aaec2000/core.c index baa997c857dc..fe3d297d682d 100644 --- a/arch/arm/mach-aaec2000/core.c +++ b/arch/arm/mach-aaec2000/core.c | |||
@@ -127,12 +127,12 @@ static unsigned long aaec2000_gettimeoffset(void) | |||
127 | 127 | ||
128 | /* We enter here with IRQs enabled */ | 128 | /* We enter here with IRQs enabled */ |
129 | static irqreturn_t | 129 | static irqreturn_t |
130 | aaec2000_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 130 | aaec2000_timer_interrupt(int irq, void *dev_id) |
131 | { | 131 | { |
132 | /* TODO: Check timer accuracy */ | 132 | /* TODO: Check timer accuracy */ |
133 | write_seqlock(&xtime_lock); | 133 | write_seqlock(&xtime_lock); |
134 | 134 | ||
135 | timer_tick(regs); | 135 | timer_tick(); |
136 | TIMER1_CLEAR = 1; | 136 | TIMER1_CLEAR = 1; |
137 | 137 | ||
138 | write_sequnlock(&xtime_lock); | 138 | write_sequnlock(&xtime_lock); |
diff --git a/arch/arm/mach-at91rm9200/at91rm9200_time.c b/arch/arm/mach-at91rm9200/at91rm9200_time.c index a92a8622c78a..07c9cea8961d 100644 --- a/arch/arm/mach-at91rm9200/at91rm9200_time.c +++ b/arch/arm/mach-at91rm9200/at91rm9200_time.c | |||
@@ -65,13 +65,13 @@ static unsigned long at91rm9200_gettimeoffset(void) | |||
65 | /* | 65 | /* |
66 | * IRQ handler for the timer. | 66 | * IRQ handler for the timer. |
67 | */ | 67 | */ |
68 | static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 68 | static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id) |
69 | { | 69 | { |
70 | if (at91_sys_read(AT91_ST_SR) & AT91_ST_PITS) { /* This is a shared interrupt */ | 70 | if (at91_sys_read(AT91_ST_SR) & AT91_ST_PITS) { /* This is a shared interrupt */ |
71 | write_seqlock(&xtime_lock); | 71 | write_seqlock(&xtime_lock); |
72 | 72 | ||
73 | while (((read_CRTR() - last_crtr) & AT91_ST_ALMV) >= LATCH) { | 73 | while (((read_CRTR() - last_crtr) & AT91_ST_ALMV) >= LATCH) { |
74 | timer_tick(regs); | 74 | timer_tick(); |
75 | last_crtr = (last_crtr + LATCH) & AT91_ST_ALMV; | 75 | last_crtr = (last_crtr + LATCH) & AT91_ST_ALMV; |
76 | } | 76 | } |
77 | 77 | ||
diff --git a/arch/arm/mach-at91rm9200/gpio.c b/arch/arm/mach-at91rm9200/gpio.c index 58c9bf5e9520..7467d644f0a3 100644 --- a/arch/arm/mach-at91rm9200/gpio.c +++ b/arch/arm/mach-at91rm9200/gpio.c | |||
@@ -332,7 +332,7 @@ static struct irq_chip gpio_irqchip = { | |||
332 | .set_wake = gpio_irq_set_wake, | 332 | .set_wake = gpio_irq_set_wake, |
333 | }; | 333 | }; |
334 | 334 | ||
335 | static void gpio_irq_handler(unsigned irq, struct irqdesc *desc, struct pt_regs *regs) | 335 | static void gpio_irq_handler(unsigned irq, struct irqdesc *desc) |
336 | { | 336 | { |
337 | unsigned pin; | 337 | unsigned pin; |
338 | struct irqdesc *gpio; | 338 | struct irqdesc *gpio; |
@@ -363,7 +363,7 @@ static void gpio_irq_handler(unsigned irq, struct irqdesc *desc, struct pt_regs | |||
363 | gpio_irq_mask(pin); | 363 | gpio_irq_mask(pin); |
364 | } | 364 | } |
365 | else | 365 | else |
366 | desc_handle_irq(pin, gpio, regs); | 366 | desc_handle_irq(pin, gpio); |
367 | } | 367 | } |
368 | pin++; | 368 | pin++; |
369 | gpio++; | 369 | gpio++; |
diff --git a/arch/arm/mach-clps711x/time.c b/arch/arm/mach-clps711x/time.c index a071eac4a30a..428493dd4687 100644 --- a/arch/arm/mach-clps711x/time.c +++ b/arch/arm/mach-clps711x/time.c | |||
@@ -48,10 +48,10 @@ static unsigned long clps711x_gettimeoffset(void) | |||
48 | * IRQ handler for the timer | 48 | * IRQ handler for the timer |
49 | */ | 49 | */ |
50 | static irqreturn_t | 50 | static irqreturn_t |
51 | p720t_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 51 | p720t_timer_interrupt(int irq, void *dev_id) |
52 | { | 52 | { |
53 | write_seqlock(&xtime_lock); | 53 | write_seqlock(&xtime_lock); |
54 | timer_tick(regs); | 54 | timer_tick(); |
55 | write_sequnlock(&xtime_lock); | 55 | write_sequnlock(&xtime_lock); |
56 | return IRQ_HANDLED; | 56 | return IRQ_HANDLED; |
57 | } | 57 | } |
diff --git a/arch/arm/mach-clps7500/core.c b/arch/arm/mach-clps7500/core.c index 92eaebdd5606..fb10cf252588 100644 --- a/arch/arm/mach-clps7500/core.c +++ b/arch/arm/mach-clps7500/core.c | |||
@@ -292,11 +292,11 @@ extern void ioctime_init(void); | |||
292 | extern unsigned long ioc_timer_gettimeoffset(void); | 292 | extern unsigned long ioc_timer_gettimeoffset(void); |
293 | 293 | ||
294 | static irqreturn_t | 294 | static irqreturn_t |
295 | clps7500_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 295 | clps7500_timer_interrupt(int irq, void *dev_id) |
296 | { | 296 | { |
297 | write_seqlock(&xtime_lock); | 297 | write_seqlock(&xtime_lock); |
298 | 298 | ||
299 | timer_tick(regs); | 299 | timer_tick(); |
300 | 300 | ||
301 | /* Why not using do_leds interface?? */ | 301 | /* Why not using do_leds interface?? */ |
302 | { | 302 | { |
diff --git a/arch/arm/mach-ebsa110/core.c b/arch/arm/mach-ebsa110/core.c index 70dd12ef3c40..90103ab373a6 100644 --- a/arch/arm/mach-ebsa110/core.c +++ b/arch/arm/mach-ebsa110/core.c | |||
@@ -174,7 +174,7 @@ static unsigned long ebsa110_gettimeoffset(void) | |||
174 | } | 174 | } |
175 | 175 | ||
176 | static irqreturn_t | 176 | static irqreturn_t |
177 | ebsa110_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 177 | ebsa110_timer_interrupt(int irq, void *dev_id) |
178 | { | 178 | { |
179 | u32 count; | 179 | u32 count; |
180 | 180 | ||
@@ -190,7 +190,7 @@ ebsa110_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
190 | __raw_writeb(count & 0xff, PIT_T1); | 190 | __raw_writeb(count & 0xff, PIT_T1); |
191 | __raw_writeb(count >> 8, PIT_T1); | 191 | __raw_writeb(count >> 8, PIT_T1); |
192 | 192 | ||
193 | timer_tick(regs); | 193 | timer_tick(); |
194 | 194 | ||
195 | write_sequnlock(&xtime_lock); | 195 | write_sequnlock(&xtime_lock); |
196 | 196 | ||
diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c index a87a784b9201..e3fd1ab6adcc 100644 --- a/arch/arm/mach-ep93xx/core.c +++ b/arch/arm/mach-ep93xx/core.c | |||
@@ -97,7 +97,7 @@ static unsigned int last_jiffy_time; | |||
97 | 97 | ||
98 | #define TIMER4_TICKS_PER_JIFFY ((CLOCK_TICK_RATE + (HZ/2)) / HZ) | 98 | #define TIMER4_TICKS_PER_JIFFY ((CLOCK_TICK_RATE + (HZ/2)) / HZ) |
99 | 99 | ||
100 | static int ep93xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 100 | static int ep93xx_timer_interrupt(int irq, void *dev_id) |
101 | { | 101 | { |
102 | write_seqlock(&xtime_lock); | 102 | write_seqlock(&xtime_lock); |
103 | 103 | ||
@@ -106,7 +106,7 @@ static int ep93xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
106 | (__raw_readl(EP93XX_TIMER4_VALUE_LOW) - last_jiffy_time) | 106 | (__raw_readl(EP93XX_TIMER4_VALUE_LOW) - last_jiffy_time) |
107 | >= TIMER4_TICKS_PER_JIFFY) { | 107 | >= TIMER4_TICKS_PER_JIFFY) { |
108 | last_jiffy_time += TIMER4_TICKS_PER_JIFFY; | 108 | last_jiffy_time += TIMER4_TICKS_PER_JIFFY; |
109 | timer_tick(regs); | 109 | timer_tick(); |
110 | } | 110 | } |
111 | 111 | ||
112 | write_sequnlock(&xtime_lock); | 112 | write_sequnlock(&xtime_lock); |
@@ -245,7 +245,7 @@ EXPORT_SYMBOL(gpio_line_set); | |||
245 | * EP93xx IRQ handling | 245 | * EP93xx IRQ handling |
246 | *************************************************************************/ | 246 | *************************************************************************/ |
247 | static void ep93xx_gpio_ab_irq_handler(unsigned int irq, | 247 | static void ep93xx_gpio_ab_irq_handler(unsigned int irq, |
248 | struct irqdesc *desc, struct pt_regs *regs) | 248 | struct irqdesc *desc) |
249 | { | 249 | { |
250 | unsigned char status; | 250 | unsigned char status; |
251 | int i; | 251 | int i; |
@@ -254,7 +254,7 @@ static void ep93xx_gpio_ab_irq_handler(unsigned int irq, | |||
254 | for (i = 0; i < 8; i++) { | 254 | for (i = 0; i < 8; i++) { |
255 | if (status & (1 << i)) { | 255 | if (status & (1 << i)) { |
256 | desc = irq_desc + IRQ_EP93XX_GPIO(0) + i; | 256 | desc = irq_desc + IRQ_EP93XX_GPIO(0) + i; |
257 | desc_handle_irq(IRQ_EP93XX_GPIO(0) + i, desc, regs); | 257 | desc_handle_irq(IRQ_EP93XX_GPIO(0) + i, desc); |
258 | } | 258 | } |
259 | } | 259 | } |
260 | 260 | ||
@@ -262,7 +262,7 @@ static void ep93xx_gpio_ab_irq_handler(unsigned int irq, | |||
262 | for (i = 0; i < 8; i++) { | 262 | for (i = 0; i < 8; i++) { |
263 | if (status & (1 << i)) { | 263 | if (status & (1 << i)) { |
264 | desc = irq_desc + IRQ_EP93XX_GPIO(8) + i; | 264 | desc = irq_desc + IRQ_EP93XX_GPIO(8) + i; |
265 | desc_handle_irq(IRQ_EP93XX_GPIO(8) + i, desc, regs); | 265 | desc_handle_irq(IRQ_EP93XX_GPIO(8) + i, desc); |
266 | } | 266 | } |
267 | } | 267 | } |
268 | } | 268 | } |
diff --git a/arch/arm/mach-footbridge/dc21285-timer.c b/arch/arm/mach-footbridge/dc21285-timer.c index 2af610811ca4..fa6be870c6c2 100644 --- a/arch/arm/mach-footbridge/dc21285-timer.c +++ b/arch/arm/mach-footbridge/dc21285-timer.c | |||
@@ -28,13 +28,13 @@ static unsigned long timer1_gettimeoffset (void) | |||
28 | } | 28 | } |
29 | 29 | ||
30 | static irqreturn_t | 30 | static irqreturn_t |
31 | timer1_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 31 | timer1_interrupt(int irq, void *dev_id) |
32 | { | 32 | { |
33 | write_seqlock(&xtime_lock); | 33 | write_seqlock(&xtime_lock); |
34 | 34 | ||
35 | *CSR_TIMER1_CLR = 0; | 35 | *CSR_TIMER1_CLR = 0; |
36 | 36 | ||
37 | timer_tick(regs); | 37 | timer_tick(); |
38 | 38 | ||
39 | write_sequnlock(&xtime_lock); | 39 | write_sequnlock(&xtime_lock); |
40 | 40 | ||
diff --git a/arch/arm/mach-footbridge/dc21285.c b/arch/arm/mach-footbridge/dc21285.c index a1ae49df5c3b..fa5d4976f514 100644 --- a/arch/arm/mach-footbridge/dc21285.c +++ b/arch/arm/mach-footbridge/dc21285.c | |||
@@ -154,7 +154,7 @@ static void dc21285_enable_error(unsigned long __data) | |||
154 | /* | 154 | /* |
155 | * Warn on PCI errors. | 155 | * Warn on PCI errors. |
156 | */ | 156 | */ |
157 | static irqreturn_t dc21285_abort_irq(int irq, void *dev_id, struct pt_regs *regs) | 157 | static irqreturn_t dc21285_abort_irq(int irq, void *dev_id) |
158 | { | 158 | { |
159 | unsigned int cmd; | 159 | unsigned int cmd; |
160 | unsigned int status; | 160 | unsigned int status; |
@@ -165,7 +165,7 @@ static irqreturn_t dc21285_abort_irq(int irq, void *dev_id, struct pt_regs *regs | |||
165 | 165 | ||
166 | if (status & PCI_STATUS_REC_MASTER_ABORT) { | 166 | if (status & PCI_STATUS_REC_MASTER_ABORT) { |
167 | printk(KERN_DEBUG "PCI: master abort, pc=0x%08lx\n", | 167 | printk(KERN_DEBUG "PCI: master abort, pc=0x%08lx\n", |
168 | instruction_pointer(regs)); | 168 | instruction_pointer(get_irq_regs())); |
169 | cmd |= PCI_STATUS_REC_MASTER_ABORT << 16; | 169 | cmd |= PCI_STATUS_REC_MASTER_ABORT << 16; |
170 | } | 170 | } |
171 | 171 | ||
@@ -184,7 +184,7 @@ static irqreturn_t dc21285_abort_irq(int irq, void *dev_id, struct pt_regs *regs | |||
184 | return IRQ_HANDLED; | 184 | return IRQ_HANDLED; |
185 | } | 185 | } |
186 | 186 | ||
187 | static irqreturn_t dc21285_serr_irq(int irq, void *dev_id, struct pt_regs *regs) | 187 | static irqreturn_t dc21285_serr_irq(int irq, void *dev_id) |
188 | { | 188 | { |
189 | struct timer_list *timer = dev_id; | 189 | struct timer_list *timer = dev_id; |
190 | unsigned int cntl; | 190 | unsigned int cntl; |
@@ -206,7 +206,7 @@ static irqreturn_t dc21285_serr_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
206 | return IRQ_HANDLED; | 206 | return IRQ_HANDLED; |
207 | } | 207 | } |
208 | 208 | ||
209 | static irqreturn_t dc21285_discard_irq(int irq, void *dev_id, struct pt_regs *regs) | 209 | static irqreturn_t dc21285_discard_irq(int irq, void *dev_id) |
210 | { | 210 | { |
211 | printk(KERN_DEBUG "PCI: discard timer expired\n"); | 211 | printk(KERN_DEBUG "PCI: discard timer expired\n"); |
212 | *CSR_SA110_CNTL &= 0xffffde07; | 212 | *CSR_SA110_CNTL &= 0xffffde07; |
@@ -214,7 +214,7 @@ static irqreturn_t dc21285_discard_irq(int irq, void *dev_id, struct pt_regs *re | |||
214 | return IRQ_HANDLED; | 214 | return IRQ_HANDLED; |
215 | } | 215 | } |
216 | 216 | ||
217 | static irqreturn_t dc21285_dparity_irq(int irq, void *dev_id, struct pt_regs *regs) | 217 | static irqreturn_t dc21285_dparity_irq(int irq, void *dev_id) |
218 | { | 218 | { |
219 | unsigned int cmd; | 219 | unsigned int cmd; |
220 | 220 | ||
@@ -228,7 +228,7 @@ static irqreturn_t dc21285_dparity_irq(int irq, void *dev_id, struct pt_regs *re | |||
228 | return IRQ_HANDLED; | 228 | return IRQ_HANDLED; |
229 | } | 229 | } |
230 | 230 | ||
231 | static irqreturn_t dc21285_parity_irq(int irq, void *dev_id, struct pt_regs *regs) | 231 | static irqreturn_t dc21285_parity_irq(int irq, void *dev_id) |
232 | { | 232 | { |
233 | struct timer_list *timer = dev_id; | 233 | struct timer_list *timer = dev_id; |
234 | unsigned int cmd; | 234 | unsigned int cmd; |
diff --git a/arch/arm/mach-footbridge/isa-irq.c b/arch/arm/mach-footbridge/isa-irq.c index 87448c2d6baa..888dedd501b9 100644 --- a/arch/arm/mach-footbridge/isa-irq.c +++ b/arch/arm/mach-footbridge/isa-irq.c | |||
@@ -85,17 +85,17 @@ static struct irqchip isa_hi_chip = { | |||
85 | }; | 85 | }; |
86 | 86 | ||
87 | static void | 87 | static void |
88 | isa_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 88 | isa_irq_handler(unsigned int irq, struct irqdesc *desc) |
89 | { | 89 | { |
90 | unsigned int isa_irq = *(unsigned char *)PCIIACK_BASE; | 90 | unsigned int isa_irq = *(unsigned char *)PCIIACK_BASE; |
91 | 91 | ||
92 | if (isa_irq < _ISA_IRQ(0) || isa_irq >= _ISA_IRQ(16)) { | 92 | if (isa_irq < _ISA_IRQ(0) || isa_irq >= _ISA_IRQ(16)) { |
93 | do_bad_IRQ(isa_irq, desc, regs); | 93 | do_bad_IRQ(isa_irq, desc); |
94 | return; | 94 | return; |
95 | } | 95 | } |
96 | 96 | ||
97 | desc = irq_desc + isa_irq; | 97 | desc = irq_desc + isa_irq; |
98 | desc_handle_irq(isa_irq, desc, regs); | 98 | desc_handle_irq(isa_irq, desc); |
99 | } | 99 | } |
100 | 100 | ||
101 | static struct irqaction irq_cascade = { | 101 | static struct irqaction irq_cascade = { |
diff --git a/arch/arm/mach-footbridge/isa-timer.c b/arch/arm/mach-footbridge/isa-timer.c index c4810a40c8e1..d884a3954fb4 100644 --- a/arch/arm/mach-footbridge/isa-timer.c +++ b/arch/arm/mach-footbridge/isa-timer.c | |||
@@ -62,10 +62,10 @@ static unsigned long isa_gettimeoffset(void) | |||
62 | } | 62 | } |
63 | 63 | ||
64 | static irqreturn_t | 64 | static irqreturn_t |
65 | isa_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 65 | isa_timer_interrupt(int irq, void *dev_id) |
66 | { | 66 | { |
67 | write_seqlock(&xtime_lock); | 67 | write_seqlock(&xtime_lock); |
68 | timer_tick(regs); | 68 | timer_tick(); |
69 | write_sequnlock(&xtime_lock); | 69 | write_sequnlock(&xtime_lock); |
70 | return IRQ_HANDLED; | 70 | return IRQ_HANDLED; |
71 | } | 71 | } |
diff --git a/arch/arm/mach-h720x/common.c b/arch/arm/mach-h720x/common.c index c096b4569308..4719229a1a78 100644 --- a/arch/arm/mach-h720x/common.c +++ b/arch/arm/mach-h720x/common.c | |||
@@ -101,14 +101,14 @@ static void inline unmask_gpio_irq(u32 irq) | |||
101 | 101 | ||
102 | static void | 102 | static void |
103 | h720x_gpio_handler(unsigned int mask, unsigned int irq, | 103 | h720x_gpio_handler(unsigned int mask, unsigned int irq, |
104 | struct irqdesc *desc, struct pt_regs *regs) | 104 | struct irqdesc *desc) |
105 | { | 105 | { |
106 | IRQDBG("%s irq: %d\n",__FUNCTION__,irq); | 106 | IRQDBG("%s irq: %d\n",__FUNCTION__,irq); |
107 | desc = irq_desc + irq; | 107 | desc = irq_desc + irq; |
108 | while (mask) { | 108 | while (mask) { |
109 | if (mask & 1) { | 109 | if (mask & 1) { |
110 | IRQDBG("handling irq %d\n", irq); | 110 | IRQDBG("handling irq %d\n", irq); |
111 | desc_handle_irq(irq, desc, regs); | 111 | desc_handle_irq(irq, desc); |
112 | } | 112 | } |
113 | irq++; | 113 | irq++; |
114 | desc++; | 114 | desc++; |
@@ -117,63 +117,58 @@ h720x_gpio_handler(unsigned int mask, unsigned int irq, | |||
117 | } | 117 | } |
118 | 118 | ||
119 | static void | 119 | static void |
120 | h720x_gpioa_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | 120 | h720x_gpioa_demux_handler(unsigned int irq_unused, struct irqdesc *desc) |
121 | struct pt_regs *regs) | ||
122 | { | 121 | { |
123 | unsigned int mask, irq; | 122 | unsigned int mask, irq; |
124 | 123 | ||
125 | mask = CPU_REG(GPIO_A_VIRT,GPIO_STAT); | 124 | mask = CPU_REG(GPIO_A_VIRT,GPIO_STAT); |
126 | irq = IRQ_CHAINED_GPIOA(0); | 125 | irq = IRQ_CHAINED_GPIOA(0); |
127 | IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq); | 126 | IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq); |
128 | h720x_gpio_handler(mask, irq, desc, regs); | 127 | h720x_gpio_handler(mask, irq, desc); |
129 | } | 128 | } |
130 | 129 | ||
131 | static void | 130 | static void |
132 | h720x_gpiob_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | 131 | h720x_gpiob_demux_handler(unsigned int irq_unused, struct irqdesc *desc) |
133 | struct pt_regs *regs) | ||
134 | { | 132 | { |
135 | unsigned int mask, irq; | 133 | unsigned int mask, irq; |
136 | mask = CPU_REG(GPIO_B_VIRT,GPIO_STAT); | 134 | mask = CPU_REG(GPIO_B_VIRT,GPIO_STAT); |
137 | irq = IRQ_CHAINED_GPIOB(0); | 135 | irq = IRQ_CHAINED_GPIOB(0); |
138 | IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq); | 136 | IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq); |
139 | h720x_gpio_handler(mask, irq, desc, regs); | 137 | h720x_gpio_handler(mask, irq, desc); |
140 | } | 138 | } |
141 | 139 | ||
142 | static void | 140 | static void |
143 | h720x_gpioc_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | 141 | h720x_gpioc_demux_handler(unsigned int irq_unused, struct irqdesc *desc) |
144 | struct pt_regs *regs) | ||
145 | { | 142 | { |
146 | unsigned int mask, irq; | 143 | unsigned int mask, irq; |
147 | 144 | ||
148 | mask = CPU_REG(GPIO_C_VIRT,GPIO_STAT); | 145 | mask = CPU_REG(GPIO_C_VIRT,GPIO_STAT); |
149 | irq = IRQ_CHAINED_GPIOC(0); | 146 | irq = IRQ_CHAINED_GPIOC(0); |
150 | IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq); | 147 | IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq); |
151 | h720x_gpio_handler(mask, irq, desc, regs); | 148 | h720x_gpio_handler(mask, irq, desc); |
152 | } | 149 | } |
153 | 150 | ||
154 | static void | 151 | static void |
155 | h720x_gpiod_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | 152 | h720x_gpiod_demux_handler(unsigned int irq_unused, struct irqdesc *desc) |
156 | struct pt_regs *regs) | ||
157 | { | 153 | { |
158 | unsigned int mask, irq; | 154 | unsigned int mask, irq; |
159 | 155 | ||
160 | mask = CPU_REG(GPIO_D_VIRT,GPIO_STAT); | 156 | mask = CPU_REG(GPIO_D_VIRT,GPIO_STAT); |
161 | irq = IRQ_CHAINED_GPIOD(0); | 157 | irq = IRQ_CHAINED_GPIOD(0); |
162 | IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq); | 158 | IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq); |
163 | h720x_gpio_handler(mask, irq, desc, regs); | 159 | h720x_gpio_handler(mask, irq, desc); |
164 | } | 160 | } |
165 | 161 | ||
166 | #ifdef CONFIG_CPU_H7202 | 162 | #ifdef CONFIG_CPU_H7202 |
167 | static void | 163 | static void |
168 | h720x_gpioe_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | 164 | h720x_gpioe_demux_handler(unsigned int irq_unused, struct irqdesc *desc) |
169 | struct pt_regs *regs) | ||
170 | { | 165 | { |
171 | unsigned int mask, irq; | 166 | unsigned int mask, irq; |
172 | 167 | ||
173 | mask = CPU_REG(GPIO_E_VIRT,GPIO_STAT); | 168 | mask = CPU_REG(GPIO_E_VIRT,GPIO_STAT); |
174 | irq = IRQ_CHAINED_GPIOE(0); | 169 | irq = IRQ_CHAINED_GPIOE(0); |
175 | IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq); | 170 | IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq); |
176 | h720x_gpio_handler(mask, irq, desc, regs); | 171 | h720x_gpio_handler(mask, irq, desc); |
177 | } | 172 | } |
178 | #endif | 173 | #endif |
179 | 174 | ||
diff --git a/arch/arm/mach-h720x/cpu-h7201.c b/arch/arm/mach-h720x/cpu-h7201.c index a9a8255a3a03..13f76bdb3d9d 100644 --- a/arch/arm/mach-h720x/cpu-h7201.c +++ b/arch/arm/mach-h720x/cpu-h7201.c | |||
@@ -27,12 +27,12 @@ | |||
27 | * Timer interrupt handler | 27 | * Timer interrupt handler |
28 | */ | 28 | */ |
29 | static irqreturn_t | 29 | static irqreturn_t |
30 | h7201_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 30 | h7201_timer_interrupt(int irq, void *dev_id) |
31 | { | 31 | { |
32 | write_seqlock(&xtime_lock); | 32 | write_seqlock(&xtime_lock); |
33 | 33 | ||
34 | CPU_REG (TIMER_VIRT, TIMER_TOPSTAT); | 34 | CPU_REG (TIMER_VIRT, TIMER_TOPSTAT); |
35 | timer_tick(regs); | 35 | timer_tick(); |
36 | 36 | ||
37 | write_sequnlock(&xtime_lock); | 37 | write_sequnlock(&xtime_lock); |
38 | 38 | ||
diff --git a/arch/arm/mach-h720x/cpu-h7202.c b/arch/arm/mach-h720x/cpu-h7202.c index da678d163fd9..06fecaefd8dc 100644 --- a/arch/arm/mach-h720x/cpu-h7202.c +++ b/arch/arm/mach-h720x/cpu-h7202.c | |||
@@ -106,8 +106,7 @@ static struct platform_device *devices[] __initdata = { | |||
106 | * we have to handle all timer interrupts in one place. | 106 | * we have to handle all timer interrupts in one place. |
107 | */ | 107 | */ |
108 | static void | 108 | static void |
109 | h7202_timerx_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | 109 | h7202_timerx_demux_handler(unsigned int irq_unused, struct irqdesc *desc) |
110 | struct pt_regs *regs) | ||
111 | { | 110 | { |
112 | unsigned int mask, irq; | 111 | unsigned int mask, irq; |
113 | 112 | ||
@@ -115,7 +114,7 @@ h7202_timerx_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | |||
115 | 114 | ||
116 | if ( mask & TSTAT_T0INT ) { | 115 | if ( mask & TSTAT_T0INT ) { |
117 | write_seqlock(&xtime_lock); | 116 | write_seqlock(&xtime_lock); |
118 | timer_tick(regs); | 117 | timer_tick(); |
119 | write_sequnlock(&xtime_lock); | 118 | write_sequnlock(&xtime_lock); |
120 | if( mask == TSTAT_T0INT ) | 119 | if( mask == TSTAT_T0INT ) |
121 | return; | 120 | return; |
@@ -126,7 +125,7 @@ h7202_timerx_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | |||
126 | desc = irq_desc + irq; | 125 | desc = irq_desc + irq; |
127 | while (mask) { | 126 | while (mask) { |
128 | if (mask & 1) | 127 | if (mask & 1) |
129 | desc_handle_irq(irq, desc, regs); | 128 | desc_handle_irq(irq, desc); |
130 | irq++; | 129 | irq++; |
131 | desc++; | 130 | desc++; |
132 | mask >>= 1; | 131 | mask >>= 1; |
@@ -137,9 +136,9 @@ h7202_timerx_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | |||
137 | * Timer interrupt handler | 136 | * Timer interrupt handler |
138 | */ | 137 | */ |
139 | static irqreturn_t | 138 | static irqreturn_t |
140 | h7202_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 139 | h7202_timer_interrupt(int irq, void *dev_id) |
141 | { | 140 | { |
142 | h7202_timerx_demux_handler(0, NULL, regs); | 141 | h7202_timerx_demux_handler(0, NULL); |
143 | return IRQ_HANDLED; | 142 | return IRQ_HANDLED; |
144 | } | 143 | } |
145 | 144 | ||
diff --git a/arch/arm/mach-imx/dma.c b/arch/arm/mach-imx/dma.c index 36578871ecc8..6d50d85a618c 100644 --- a/arch/arm/mach-imx/dma.c +++ b/arch/arm/mach-imx/dma.c | |||
@@ -279,8 +279,8 @@ imx_dma_setup_sg(imx_dmach_t dma_ch, | |||
279 | */ | 279 | */ |
280 | int | 280 | int |
281 | imx_dma_setup_handlers(imx_dmach_t dma_ch, | 281 | imx_dma_setup_handlers(imx_dmach_t dma_ch, |
282 | void (*irq_handler) (int, void *, struct pt_regs *), | 282 | void (*irq_handler) (int, void *), |
283 | void (*err_handler) (int, void *, struct pt_regs *, int), | 283 | void (*err_handler) (int, void *, int), |
284 | void *data) | 284 | void *data) |
285 | { | 285 | { |
286 | struct imx_dma_channel *imxdma = &imx_dma_channels[dma_ch]; | 286 | struct imx_dma_channel *imxdma = &imx_dma_channels[dma_ch]; |
@@ -461,7 +461,7 @@ imx_dma_request_by_prio(imx_dmach_t * pdma_ch, const char *name, | |||
461 | return -ENODEV; | 461 | return -ENODEV; |
462 | } | 462 | } |
463 | 463 | ||
464 | static irqreturn_t dma_err_handler(int irq, void *dev_id, struct pt_regs *regs) | 464 | static irqreturn_t dma_err_handler(int irq, void *dev_id) |
465 | { | 465 | { |
466 | int i, disr = DISR; | 466 | int i, disr = DISR; |
467 | struct imx_dma_channel *channel; | 467 | struct imx_dma_channel *channel; |
@@ -500,7 +500,7 @@ static irqreturn_t dma_err_handler(int irq, void *dev_id, struct pt_regs *regs) | |||
500 | /*imx_dma_channels[i].sg = NULL;*/ | 500 | /*imx_dma_channels[i].sg = NULL;*/ |
501 | 501 | ||
502 | if (channel->name && channel->err_handler) { | 502 | if (channel->name && channel->err_handler) { |
503 | channel->err_handler(i, channel->data, regs, errcode); | 503 | channel->err_handler(i, channel->data, errcode); |
504 | continue; | 504 | continue; |
505 | } | 505 | } |
506 | 506 | ||
@@ -517,7 +517,7 @@ static irqreturn_t dma_err_handler(int irq, void *dev_id, struct pt_regs *regs) | |||
517 | return IRQ_HANDLED; | 517 | return IRQ_HANDLED; |
518 | } | 518 | } |
519 | 519 | ||
520 | static irqreturn_t dma_irq_handler(int irq, void *dev_id, struct pt_regs *regs) | 520 | static irqreturn_t dma_irq_handler(int irq, void *dev_id) |
521 | { | 521 | { |
522 | int i, disr = DISR; | 522 | int i, disr = DISR; |
523 | 523 | ||
@@ -536,7 +536,7 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id, struct pt_regs *regs) | |||
536 | } else { | 536 | } else { |
537 | if (channel->irq_handler) | 537 | if (channel->irq_handler) |
538 | channel->irq_handler(i, | 538 | channel->irq_handler(i, |
539 | channel->data, regs); | 539 | channel->data); |
540 | } | 540 | } |
541 | } else { | 541 | } else { |
542 | /* | 542 | /* |
diff --git a/arch/arm/mach-imx/irq.c b/arch/arm/mach-imx/irq.c index 2688bd82c2a2..368b13b058ab 100644 --- a/arch/arm/mach-imx/irq.c +++ b/arch/arm/mach-imx/irq.c | |||
@@ -146,13 +146,13 @@ imx_gpio_unmask_irq(unsigned int irq) | |||
146 | 146 | ||
147 | static void | 147 | static void |
148 | imx_gpio_handler(unsigned int mask, unsigned int irq, | 148 | imx_gpio_handler(unsigned int mask, unsigned int irq, |
149 | struct irqdesc *desc, struct pt_regs *regs) | 149 | struct irqdesc *desc) |
150 | { | 150 | { |
151 | desc = irq_desc + irq; | 151 | desc = irq_desc + irq; |
152 | while (mask) { | 152 | while (mask) { |
153 | if (mask & 1) { | 153 | if (mask & 1) { |
154 | DEBUG_IRQ("handling irq %d\n", irq); | 154 | DEBUG_IRQ("handling irq %d\n", irq); |
155 | desc_handle_irq(irq, desc, regs); | 155 | desc_handle_irq(irq, desc); |
156 | } | 156 | } |
157 | irq++; | 157 | irq++; |
158 | desc++; | 158 | desc++; |
@@ -161,47 +161,43 @@ imx_gpio_handler(unsigned int mask, unsigned int irq, | |||
161 | } | 161 | } |
162 | 162 | ||
163 | static void | 163 | static void |
164 | imx_gpioa_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | 164 | imx_gpioa_demux_handler(unsigned int irq_unused, struct irqdesc *desc) |
165 | struct pt_regs *regs) | ||
166 | { | 165 | { |
167 | unsigned int mask, irq; | 166 | unsigned int mask, irq; |
168 | 167 | ||
169 | mask = ISR(0); | 168 | mask = ISR(0); |
170 | irq = IRQ_GPIOA(0); | 169 | irq = IRQ_GPIOA(0); |
171 | imx_gpio_handler(mask, irq, desc, regs); | 170 | imx_gpio_handler(mask, irq, desc); |
172 | } | 171 | } |
173 | 172 | ||
174 | static void | 173 | static void |
175 | imx_gpiob_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | 174 | imx_gpiob_demux_handler(unsigned int irq_unused, struct irqdesc *desc) |
176 | struct pt_regs *regs) | ||
177 | { | 175 | { |
178 | unsigned int mask, irq; | 176 | unsigned int mask, irq; |
179 | 177 | ||
180 | mask = ISR(1); | 178 | mask = ISR(1); |
181 | irq = IRQ_GPIOB(0); | 179 | irq = IRQ_GPIOB(0); |
182 | imx_gpio_handler(mask, irq, desc, regs); | 180 | imx_gpio_handler(mask, irq, desc); |
183 | } | 181 | } |
184 | 182 | ||
185 | static void | 183 | static void |
186 | imx_gpioc_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | 184 | imx_gpioc_demux_handler(unsigned int irq_unused, struct irqdesc *desc) |
187 | struct pt_regs *regs) | ||
188 | { | 185 | { |
189 | unsigned int mask, irq; | 186 | unsigned int mask, irq; |
190 | 187 | ||
191 | mask = ISR(2); | 188 | mask = ISR(2); |
192 | irq = IRQ_GPIOC(0); | 189 | irq = IRQ_GPIOC(0); |
193 | imx_gpio_handler(mask, irq, desc, regs); | 190 | imx_gpio_handler(mask, irq, desc); |
194 | } | 191 | } |
195 | 192 | ||
196 | static void | 193 | static void |
197 | imx_gpiod_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | 194 | imx_gpiod_demux_handler(unsigned int irq_unused, struct irqdesc *desc) |
198 | struct pt_regs *regs) | ||
199 | { | 195 | { |
200 | unsigned int mask, irq; | 196 | unsigned int mask, irq; |
201 | 197 | ||
202 | mask = ISR(3); | 198 | mask = ISR(3); |
203 | irq = IRQ_GPIOD(0); | 199 | irq = IRQ_GPIOD(0); |
204 | imx_gpio_handler(mask, irq, desc, regs); | 200 | imx_gpio_handler(mask, irq, desc); |
205 | } | 201 | } |
206 | 202 | ||
207 | static struct irq_chip imx_internal_chip = { | 203 | static struct irq_chip imx_internal_chip = { |
diff --git a/arch/arm/mach-imx/time.c b/arch/arm/mach-imx/time.c index 6ed7523c65bb..8ae4a2c5066f 100644 --- a/arch/arm/mach-imx/time.c +++ b/arch/arm/mach-imx/time.c | |||
@@ -56,7 +56,7 @@ static unsigned long imx_gettimeoffset(void) | |||
56 | * IRQ handler for the timer | 56 | * IRQ handler for the timer |
57 | */ | 57 | */ |
58 | static irqreturn_t | 58 | static irqreturn_t |
59 | imx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 59 | imx_timer_interrupt(int irq, void *dev_id) |
60 | { | 60 | { |
61 | write_seqlock(&xtime_lock); | 61 | write_seqlock(&xtime_lock); |
62 | 62 | ||
@@ -64,7 +64,7 @@ imx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
64 | if (IMX_TSTAT(TIMER_BASE)) | 64 | if (IMX_TSTAT(TIMER_BASE)) |
65 | IMX_TSTAT(TIMER_BASE) = 0; | 65 | IMX_TSTAT(TIMER_BASE) = 0; |
66 | 66 | ||
67 | timer_tick(regs); | 67 | timer_tick(); |
68 | write_sequnlock(&xtime_lock); | 68 | write_sequnlock(&xtime_lock); |
69 | 69 | ||
70 | return IRQ_HANDLED; | 70 | return IRQ_HANDLED; |
diff --git a/arch/arm/mach-integrator/core.c b/arch/arm/mach-integrator/core.c index 42021fdfa0c6..8d880cb9ba39 100644 --- a/arch/arm/mach-integrator/core.c +++ b/arch/arm/mach-integrator/core.c | |||
@@ -248,7 +248,7 @@ unsigned long integrator_gettimeoffset(void) | |||
248 | * IRQ handler for the timer | 248 | * IRQ handler for the timer |
249 | */ | 249 | */ |
250 | static irqreturn_t | 250 | static irqreturn_t |
251 | integrator_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 251 | integrator_timer_interrupt(int irq, void *dev_id) |
252 | { | 252 | { |
253 | write_seqlock(&xtime_lock); | 253 | write_seqlock(&xtime_lock); |
254 | 254 | ||
@@ -262,7 +262,7 @@ integrator_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
262 | * primary CPU | 262 | * primary CPU |
263 | */ | 263 | */ |
264 | if (hard_smp_processor_id() == 0) { | 264 | if (hard_smp_processor_id() == 0) { |
265 | timer_tick(regs); | 265 | timer_tick(); |
266 | #ifdef CONFIG_SMP | 266 | #ifdef CONFIG_SMP |
267 | smp_send_timer(); | 267 | smp_send_timer(); |
268 | #endif | 268 | #endif |
@@ -272,7 +272,7 @@ integrator_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
272 | /* | 272 | /* |
273 | * this is the ARM equivalent of the APIC timer interrupt | 273 | * this is the ARM equivalent of the APIC timer interrupt |
274 | */ | 274 | */ |
275 | update_process_times(user_mode(regs)); | 275 | update_process_times(user_mode(get_irq_regs())); |
276 | #endif /* CONFIG_SMP */ | 276 | #endif /* CONFIG_SMP */ |
277 | 277 | ||
278 | write_sequnlock(&xtime_lock); | 278 | write_sequnlock(&xtime_lock); |
diff --git a/arch/arm/mach-integrator/integrator_cp.c b/arch/arm/mach-integrator/integrator_cp.c index 678b6ba2b463..771b65bffe69 100644 --- a/arch/arm/mach-integrator/integrator_cp.c +++ b/arch/arm/mach-integrator/integrator_cp.c | |||
@@ -202,12 +202,12 @@ static struct irq_chip sic_chip = { | |||
202 | }; | 202 | }; |
203 | 203 | ||
204 | static void | 204 | static void |
205 | sic_handle_irq(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 205 | sic_handle_irq(unsigned int irq, struct irqdesc *desc) |
206 | { | 206 | { |
207 | unsigned long status = sic_readl(INTCP_VA_SIC_BASE + IRQ_STATUS); | 207 | unsigned long status = sic_readl(INTCP_VA_SIC_BASE + IRQ_STATUS); |
208 | 208 | ||
209 | if (status == 0) { | 209 | if (status == 0) { |
210 | do_bad_IRQ(irq, desc, regs); | 210 | do_bad_IRQ(irq, desc); |
211 | return; | 211 | return; |
212 | } | 212 | } |
213 | 213 | ||
@@ -218,7 +218,7 @@ sic_handle_irq(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | |||
218 | irq += IRQ_SIC_START; | 218 | irq += IRQ_SIC_START; |
219 | 219 | ||
220 | desc = irq_desc + irq; | 220 | desc = irq_desc + irq; |
221 | desc_handle_irq(irq, desc, regs); | 221 | desc_handle_irq(irq, desc); |
222 | } while (status); | 222 | } while (status); |
223 | } | 223 | } |
224 | 224 | ||
diff --git a/arch/arm/mach-integrator/pci_v3.c b/arch/arm/mach-integrator/pci_v3.c index 4418f6d7572d..fb8c6d97b22b 100644 --- a/arch/arm/mach-integrator/pci_v3.c +++ b/arch/arm/mach-integrator/pci_v3.c | |||
@@ -440,9 +440,10 @@ v3_pci_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | |||
440 | return 1; | 440 | return 1; |
441 | } | 441 | } |
442 | 442 | ||
443 | static irqreturn_t v3_irq(int irq, void *devid, struct pt_regs *regs) | 443 | static irqreturn_t v3_irq(int irq, void *devid) |
444 | { | 444 | { |
445 | #ifdef CONFIG_DEBUG_LL | 445 | #ifdef CONFIG_DEBUG_LL |
446 | struct pt_regs *regs = get_irq_regs(); | ||
446 | unsigned long pc = instruction_pointer(regs); | 447 | unsigned long pc = instruction_pointer(regs); |
447 | unsigned long instr = *(unsigned long *)pc; | 448 | unsigned long instr = *(unsigned long *)pc; |
448 | char buf[128]; | 449 | char buf[128]; |
diff --git a/arch/arm/mach-integrator/time.c b/arch/arm/mach-integrator/time.c index ee49cf790dab..5278f589fcee 100644 --- a/arch/arm/mach-integrator/time.c +++ b/arch/arm/mach-integrator/time.c | |||
@@ -96,8 +96,7 @@ static struct rtc_ops rtc_ops = { | |||
96 | .set_alarm = integrator_rtc_set_alarm, | 96 | .set_alarm = integrator_rtc_set_alarm, |
97 | }; | 97 | }; |
98 | 98 | ||
99 | static irqreturn_t arm_rtc_interrupt(int irq, void *dev_id, | 99 | static irqreturn_t arm_rtc_interrupt(int irq, void *dev_id) |
100 | struct pt_regs *regs) | ||
101 | { | 100 | { |
102 | writel(0, rtc_base + RTC_EOI); | 101 | writel(0, rtc_base + RTC_EOI); |
103 | return IRQ_HANDLED; | 102 | return IRQ_HANDLED; |
diff --git a/arch/arm/mach-ixp2000/core.c b/arch/arm/mach-ixp2000/core.c index 7f91f689a041..22c98e9dad28 100644 --- a/arch/arm/mach-ixp2000/core.c +++ b/arch/arm/mach-ixp2000/core.c | |||
@@ -204,7 +204,7 @@ unsigned long ixp2000_gettimeoffset (void) | |||
204 | return offset / ticks_per_usec; | 204 | return offset / ticks_per_usec; |
205 | } | 205 | } |
206 | 206 | ||
207 | static int ixp2000_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 207 | static int ixp2000_timer_interrupt(int irq, void *dev_id) |
208 | { | 208 | { |
209 | write_seqlock(&xtime_lock); | 209 | write_seqlock(&xtime_lock); |
210 | 210 | ||
@@ -213,7 +213,7 @@ static int ixp2000_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
213 | 213 | ||
214 | while ((signed long)(next_jiffy_time - *missing_jiffy_timer_csr) | 214 | while ((signed long)(next_jiffy_time - *missing_jiffy_timer_csr) |
215 | >= ticks_per_jiffy) { | 215 | >= ticks_per_jiffy) { |
216 | timer_tick(regs); | 216 | timer_tick(); |
217 | next_jiffy_time -= ticks_per_jiffy; | 217 | next_jiffy_time -= ticks_per_jiffy; |
218 | } | 218 | } |
219 | 219 | ||
@@ -308,7 +308,7 @@ EXPORT_SYMBOL(gpio_line_config); | |||
308 | /************************************************************************* | 308 | /************************************************************************* |
309 | * IRQ handling IXP2000 | 309 | * IRQ handling IXP2000 |
310 | *************************************************************************/ | 310 | *************************************************************************/ |
311 | static void ixp2000_GPIO_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 311 | static void ixp2000_GPIO_irq_handler(unsigned int irq, struct irqdesc *desc) |
312 | { | 312 | { |
313 | int i; | 313 | int i; |
314 | unsigned long status = *IXP2000_GPIO_INST; | 314 | unsigned long status = *IXP2000_GPIO_INST; |
@@ -316,7 +316,7 @@ static void ixp2000_GPIO_irq_handler(unsigned int irq, struct irqdesc *desc, str | |||
316 | for (i = 0; i <= 7; i++) { | 316 | for (i = 0; i <= 7; i++) { |
317 | if (status & (1<<i)) { | 317 | if (status & (1<<i)) { |
318 | desc = irq_desc + i + IRQ_IXP2000_GPIO0; | 318 | desc = irq_desc + i + IRQ_IXP2000_GPIO0; |
319 | desc_handle_irq(i + IRQ_IXP2000_GPIO0, desc, regs); | 319 | desc_handle_irq(i + IRQ_IXP2000_GPIO0, desc); |
320 | } | 320 | } |
321 | } | 321 | } |
322 | } | 322 | } |
@@ -401,7 +401,7 @@ static void ixp2000_pci_irq_unmask(unsigned int irq) | |||
401 | /* | 401 | /* |
402 | * Error interrupts. These are used extensively by the microengine drivers | 402 | * Error interrupts. These are used extensively by the microengine drivers |
403 | */ | 403 | */ |
404 | static void ixp2000_err_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 404 | static void ixp2000_err_irq_handler(unsigned int irq, struct irqdesc *desc) |
405 | { | 405 | { |
406 | int i; | 406 | int i; |
407 | unsigned long status = *IXP2000_IRQ_ERR_STATUS; | 407 | unsigned long status = *IXP2000_IRQ_ERR_STATUS; |
@@ -409,7 +409,7 @@ static void ixp2000_err_irq_handler(unsigned int irq, struct irqdesc *desc, str | |||
409 | for(i = 31; i >= 0; i--) { | 409 | for(i = 31; i >= 0; i--) { |
410 | if(status & (1 << i)) { | 410 | if(status & (1 << i)) { |
411 | desc = irq_desc + IRQ_IXP2000_DRAM0_MIN_ERR + i; | 411 | desc = irq_desc + IRQ_IXP2000_DRAM0_MIN_ERR + i; |
412 | desc_handle_irq(IRQ_IXP2000_DRAM0_MIN_ERR + i, desc, regs); | 412 | desc_handle_irq(IRQ_IXP2000_DRAM0_MIN_ERR + i, desc); |
413 | } | 413 | } |
414 | } | 414 | } |
415 | } | 415 | } |
diff --git a/arch/arm/mach-ixp2000/ixdp2x00.c b/arch/arm/mach-ixp2000/ixdp2x00.c index 40eef8b36740..af48cb52dfc4 100644 --- a/arch/arm/mach-ixp2000/ixdp2x00.c +++ b/arch/arm/mach-ixp2000/ixdp2x00.c | |||
@@ -106,7 +106,7 @@ static void ixdp2x00_irq_unmask(unsigned int irq) | |||
106 | ixp2000_release_slowport(&old_cfg); | 106 | ixp2000_release_slowport(&old_cfg); |
107 | } | 107 | } |
108 | 108 | ||
109 | static void ixdp2x00_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 109 | static void ixdp2x00_irq_handler(unsigned int irq, struct irqdesc *desc) |
110 | { | 110 | { |
111 | volatile u32 ex_interrupt = 0; | 111 | volatile u32 ex_interrupt = 0; |
112 | static struct slowport_cfg old_cfg; | 112 | static struct slowport_cfg old_cfg; |
@@ -132,7 +132,7 @@ static void ixdp2x00_irq_handler(unsigned int irq, struct irqdesc *desc, struct | |||
132 | struct irqdesc *cpld_desc; | 132 | struct irqdesc *cpld_desc; |
133 | int cpld_irq = IXP2000_BOARD_IRQ(0) + i; | 133 | int cpld_irq = IXP2000_BOARD_IRQ(0) + i; |
134 | cpld_desc = irq_desc + cpld_irq; | 134 | cpld_desc = irq_desc + cpld_irq; |
135 | desc_handle_irq(cpld_irq, cpld_desc, regs); | 135 | desc_handle_irq(cpld_irq, cpld_desc); |
136 | } | 136 | } |
137 | } | 137 | } |
138 | 138 | ||
diff --git a/arch/arm/mach-ixp2000/ixdp2x01.c b/arch/arm/mach-ixp2000/ixdp2x01.c index 7f42366f60d1..9ccae9e63f70 100644 --- a/arch/arm/mach-ixp2000/ixdp2x01.c +++ b/arch/arm/mach-ixp2000/ixdp2x01.c | |||
@@ -63,7 +63,7 @@ static void ixdp2x01_irq_unmask(unsigned int irq) | |||
63 | 63 | ||
64 | static u32 valid_irq_mask; | 64 | static u32 valid_irq_mask; |
65 | 65 | ||
66 | static void ixdp2x01_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 66 | static void ixdp2x01_irq_handler(unsigned int irq, struct irqdesc *desc) |
67 | { | 67 | { |
68 | u32 ex_interrupt; | 68 | u32 ex_interrupt; |
69 | int i; | 69 | int i; |
@@ -82,7 +82,7 @@ static void ixdp2x01_irq_handler(unsigned int irq, struct irqdesc *desc, struct | |||
82 | struct irqdesc *cpld_desc; | 82 | struct irqdesc *cpld_desc; |
83 | int cpld_irq = IXP2000_BOARD_IRQ(0) + i; | 83 | int cpld_irq = IXP2000_BOARD_IRQ(0) + i; |
84 | cpld_desc = irq_desc + cpld_irq; | 84 | cpld_desc = irq_desc + cpld_irq; |
85 | desc_handle_irq(cpld_irq, cpld_desc, regs); | 85 | desc_handle_irq(cpld_irq, cpld_desc); |
86 | } | 86 | } |
87 | } | 87 | } |
88 | 88 | ||
diff --git a/arch/arm/mach-ixp23xx/core.c b/arch/arm/mach-ixp23xx/core.c index 566a07821c77..a704a1820048 100644 --- a/arch/arm/mach-ixp23xx/core.c +++ b/arch/arm/mach-ixp23xx/core.c | |||
@@ -251,7 +251,7 @@ static void ixp23xx_pci_irq_unmask(unsigned int irq) | |||
251 | /* | 251 | /* |
252 | * TODO: Should this just be done at ASM level? | 252 | * TODO: Should this just be done at ASM level? |
253 | */ | 253 | */ |
254 | static void pci_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 254 | static void pci_handler(unsigned int irq, struct irqdesc *desc) |
255 | { | 255 | { |
256 | u32 pci_interrupt; | 256 | u32 pci_interrupt; |
257 | unsigned int irqno; | 257 | unsigned int irqno; |
@@ -271,7 +271,7 @@ static void pci_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs * | |||
271 | } | 271 | } |
272 | 272 | ||
273 | int_desc = irq_desc + irqno; | 273 | int_desc = irq_desc + irqno; |
274 | desc_handle_irq(irqno, int_desc, regs); | 274 | desc_handle_irq(irqno, int_desc); |
275 | 275 | ||
276 | desc->chip->unmask(irq); | 276 | desc->chip->unmask(irq); |
277 | } | 277 | } |
@@ -348,12 +348,12 @@ ixp23xx_gettimeoffset(void) | |||
348 | } | 348 | } |
349 | 349 | ||
350 | static irqreturn_t | 350 | static irqreturn_t |
351 | ixp23xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 351 | ixp23xx_timer_interrupt(int irq, void *dev_id) |
352 | { | 352 | { |
353 | /* Clear Pending Interrupt by writing '1' to it */ | 353 | /* Clear Pending Interrupt by writing '1' to it */ |
354 | *IXP23XX_TIMER_STATUS = IXP23XX_TIMER1_INT_PEND; | 354 | *IXP23XX_TIMER_STATUS = IXP23XX_TIMER1_INT_PEND; |
355 | while ((signed long)(*IXP23XX_TIMER_CONT - next_jiffy_time) >= LATCH) { | 355 | while ((signed long)(*IXP23XX_TIMER_CONT - next_jiffy_time) >= LATCH) { |
356 | timer_tick(regs); | 356 | timer_tick(); |
357 | next_jiffy_time += LATCH; | 357 | next_jiffy_time += LATCH; |
358 | } | 358 | } |
359 | 359 | ||
diff --git a/arch/arm/mach-ixp23xx/ixdp2351.c b/arch/arm/mach-ixp23xx/ixdp2351.c index 37a32e6bcca2..b6ab0e8bb5e8 100644 --- a/arch/arm/mach-ixp23xx/ixdp2351.c +++ b/arch/arm/mach-ixp23xx/ixdp2351.c | |||
@@ -60,7 +60,7 @@ static void ixdp2351_inta_unmask(unsigned int irq) | |||
60 | *IXDP2351_CPLD_INTA_MASK_CLR_REG = IXDP2351_INTA_IRQ_MASK(irq); | 60 | *IXDP2351_CPLD_INTA_MASK_CLR_REG = IXDP2351_INTA_IRQ_MASK(irq); |
61 | } | 61 | } |
62 | 62 | ||
63 | static void ixdp2351_inta_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 63 | static void ixdp2351_inta_handler(unsigned int irq, struct irqdesc *desc) |
64 | { | 64 | { |
65 | u16 ex_interrupt = | 65 | u16 ex_interrupt = |
66 | *IXDP2351_CPLD_INTA_STAT_REG & IXDP2351_INTA_IRQ_VALID; | 66 | *IXDP2351_CPLD_INTA_STAT_REG & IXDP2351_INTA_IRQ_VALID; |
@@ -74,7 +74,7 @@ static void ixdp2351_inta_handler(unsigned int irq, struct irqdesc *desc, struct | |||
74 | int cpld_irq = | 74 | int cpld_irq = |
75 | IXP23XX_MACH_IRQ(IXDP2351_INTA_IRQ_BASE + i); | 75 | IXP23XX_MACH_IRQ(IXDP2351_INTA_IRQ_BASE + i); |
76 | cpld_desc = irq_desc + cpld_irq; | 76 | cpld_desc = irq_desc + cpld_irq; |
77 | desc_handle_irq(cpld_irq, cpld_desc, regs); | 77 | desc_handle_irq(cpld_irq, cpld_desc); |
78 | } | 78 | } |
79 | } | 79 | } |
80 | 80 | ||
@@ -97,7 +97,7 @@ static void ixdp2351_intb_unmask(unsigned int irq) | |||
97 | *IXDP2351_CPLD_INTB_MASK_CLR_REG = IXDP2351_INTB_IRQ_MASK(irq); | 97 | *IXDP2351_CPLD_INTB_MASK_CLR_REG = IXDP2351_INTB_IRQ_MASK(irq); |
98 | } | 98 | } |
99 | 99 | ||
100 | static void ixdp2351_intb_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 100 | static void ixdp2351_intb_handler(unsigned int irq, struct irqdesc *desc) |
101 | { | 101 | { |
102 | u16 ex_interrupt = | 102 | u16 ex_interrupt = |
103 | *IXDP2351_CPLD_INTB_STAT_REG & IXDP2351_INTB_IRQ_VALID; | 103 | *IXDP2351_CPLD_INTB_STAT_REG & IXDP2351_INTB_IRQ_VALID; |
@@ -111,7 +111,7 @@ static void ixdp2351_intb_handler(unsigned int irq, struct irqdesc *desc, struct | |||
111 | int cpld_irq = | 111 | int cpld_irq = |
112 | IXP23XX_MACH_IRQ(IXDP2351_INTB_IRQ_BASE + i); | 112 | IXP23XX_MACH_IRQ(IXDP2351_INTB_IRQ_BASE + i); |
113 | cpld_desc = irq_desc + cpld_irq; | 113 | cpld_desc = irq_desc + cpld_irq; |
114 | desc_handle_irq(cpld_irq, cpld_desc, regs); | 114 | desc_handle_irq(cpld_irq, cpld_desc); |
115 | } | 115 | } |
116 | } | 116 | } |
117 | 117 | ||
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index 35dd8b3824b0..c7513f6eb50c 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c | |||
@@ -256,7 +256,7 @@ static unsigned volatile last_jiffy_time; | |||
256 | 256 | ||
257 | #define CLOCK_TICKS_PER_USEC ((CLOCK_TICK_RATE + USEC_PER_SEC/2) / USEC_PER_SEC) | 257 | #define CLOCK_TICKS_PER_USEC ((CLOCK_TICK_RATE + USEC_PER_SEC/2) / USEC_PER_SEC) |
258 | 258 | ||
259 | static irqreturn_t ixp4xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 259 | static irqreturn_t ixp4xx_timer_interrupt(int irq, void *dev_id) |
260 | { | 260 | { |
261 | write_seqlock(&xtime_lock); | 261 | write_seqlock(&xtime_lock); |
262 | 262 | ||
@@ -267,7 +267,7 @@ static irqreturn_t ixp4xx_timer_interrupt(int irq, void *dev_id, struct pt_regs | |||
267 | * Catch up with the real idea of time | 267 | * Catch up with the real idea of time |
268 | */ | 268 | */ |
269 | while ((signed long)(*IXP4XX_OSTS - last_jiffy_time) >= LATCH) { | 269 | while ((signed long)(*IXP4XX_OSTS - last_jiffy_time) >= LATCH) { |
270 | timer_tick(regs); | 270 | timer_tick(); |
271 | last_jiffy_time += LATCH; | 271 | last_jiffy_time += LATCH; |
272 | } | 272 | } |
273 | 273 | ||
diff --git a/arch/arm/mach-ixp4xx/nas100d-power.c b/arch/arm/mach-ixp4xx/nas100d-power.c index 81ffcae1f56e..29aa98d3a7fa 100644 --- a/arch/arm/mach-ixp4xx/nas100d-power.c +++ b/arch/arm/mach-ixp4xx/nas100d-power.c | |||
@@ -24,7 +24,7 @@ | |||
24 | 24 | ||
25 | #include <asm/mach-types.h> | 25 | #include <asm/mach-types.h> |
26 | 26 | ||
27 | static irqreturn_t nas100d_reset_handler(int irq, void *dev_id, struct pt_regs *regs) | 27 | static irqreturn_t nas100d_reset_handler(int irq, void *dev_id) |
28 | { | 28 | { |
29 | /* Signal init to do the ctrlaltdel action, this will bypass init if | 29 | /* Signal init to do the ctrlaltdel action, this will bypass init if |
30 | * it hasn't started and do a kernel_restart. | 30 | * it hasn't started and do a kernel_restart. |
diff --git a/arch/arm/mach-ixp4xx/nslu2-power.c b/arch/arm/mach-ixp4xx/nslu2-power.c index a29b3b2b61b6..acd71e9c38a7 100644 --- a/arch/arm/mach-ixp4xx/nslu2-power.c +++ b/arch/arm/mach-ixp4xx/nslu2-power.c | |||
@@ -25,7 +25,7 @@ | |||
25 | 25 | ||
26 | #include <asm/mach-types.h> | 26 | #include <asm/mach-types.h> |
27 | 27 | ||
28 | static irqreturn_t nslu2_power_handler(int irq, void *dev_id, struct pt_regs *regs) | 28 | static irqreturn_t nslu2_power_handler(int irq, void *dev_id) |
29 | { | 29 | { |
30 | /* Signal init to do the ctrlaltdel action, this will bypass init if | 30 | /* Signal init to do the ctrlaltdel action, this will bypass init if |
31 | * it hasn't started and do a kernel_restart. | 31 | * it hasn't started and do a kernel_restart. |
@@ -35,7 +35,7 @@ static irqreturn_t nslu2_power_handler(int irq, void *dev_id, struct pt_regs *re | |||
35 | return IRQ_HANDLED; | 35 | return IRQ_HANDLED; |
36 | } | 36 | } |
37 | 37 | ||
38 | static irqreturn_t nslu2_reset_handler(int irq, void *dev_id, struct pt_regs *regs) | 38 | static irqreturn_t nslu2_reset_handler(int irq, void *dev_id) |
39 | { | 39 | { |
40 | /* This is the paper-clip reset, it shuts the machine down directly. | 40 | /* This is the paper-clip reset, it shuts the machine down directly. |
41 | */ | 41 | */ |
diff --git a/arch/arm/mach-lh7a40x/arch-kev7a400.c b/arch/arm/mach-lh7a40x/arch-kev7a400.c index 4f2ab48800a5..15fbcc911fe7 100644 --- a/arch/arm/mach-lh7a40x/arch-kev7a400.c +++ b/arch/arm/mach-lh7a40x/arch-kev7a400.c | |||
@@ -71,14 +71,13 @@ static struct irq_chip kev7a400_cpld_chip = { | |||
71 | }; | 71 | }; |
72 | 72 | ||
73 | 73 | ||
74 | static void kev7a400_cpld_handler (unsigned int irq, struct irqdesc *desc, | 74 | static void kev7a400_cpld_handler (unsigned int irq, struct irqdesc *desc) |
75 | struct pt_regs *regs) | ||
76 | { | 75 | { |
77 | u32 mask = CPLD_LATCHED_INTS; | 76 | u32 mask = CPLD_LATCHED_INTS; |
78 | irq = IRQ_KEV7A400_CPLD; | 77 | irq = IRQ_KEV7A400_CPLD; |
79 | for (; mask; mask >>= 1, ++irq) { | 78 | for (; mask; mask >>= 1, ++irq) { |
80 | if (mask & 1) | 79 | if (mask & 1) |
81 | desc[irq].handle (irq, desc, regs); | 80 | desc[irq].handle (irq, desc); |
82 | } | 81 | } |
83 | } | 82 | } |
84 | 83 | ||
diff --git a/arch/arm/mach-lh7a40x/arch-lpd7a40x.c b/arch/arm/mach-lh7a40x/arch-lpd7a40x.c index a21b12f06c6b..8441e0a156cb 100644 --- a/arch/arm/mach-lh7a40x/arch-lpd7a40x.c +++ b/arch/arm/mach-lh7a40x/arch-lpd7a40x.c | |||
@@ -207,8 +207,7 @@ static struct irq_chip lpd7a40x_cpld_chip = { | |||
207 | .unmask = lh7a40x_unmask_cpld_irq, | 207 | .unmask = lh7a40x_unmask_cpld_irq, |
208 | }; | 208 | }; |
209 | 209 | ||
210 | static void lpd7a40x_cpld_handler (unsigned int irq, struct irqdesc *desc, | 210 | static void lpd7a40x_cpld_handler (unsigned int irq, struct irqdesc *desc) |
211 | struct pt_regs *regs) | ||
212 | { | 211 | { |
213 | unsigned int mask = CPLD_INTERRUPTS; | 212 | unsigned int mask = CPLD_INTERRUPTS; |
214 | 213 | ||
diff --git a/arch/arm/mach-lh7a40x/irq-kev7a400.c b/arch/arm/mach-lh7a40x/irq-kev7a400.c index f9b3fe9174a5..646071334b8f 100644 --- a/arch/arm/mach-lh7a40x/irq-kev7a400.c +++ b/arch/arm/mach-lh7a40x/irq-kev7a400.c | |||
@@ -51,14 +51,13 @@ irq_chip lh7a400_cpld_chip = { | |||
51 | }; | 51 | }; |
52 | 52 | ||
53 | static void | 53 | static void |
54 | lh7a400_cpld_handler (unsigned int irq, struct irqdesc *desc, | 54 | lh7a400_cpld_handler (unsigned int irq, struct irqdesc *desc) |
55 | struct pt_regs *regs) | ||
56 | { | 55 | { |
57 | u32 mask = CPLD_LATCHED_INTS; | 56 | u32 mask = CPLD_LATCHED_INTS; |
58 | irq = IRQ_KEV_7A400_CPLD; | 57 | irq = IRQ_KEV_7A400_CPLD; |
59 | for (; mask; mask >>= 1, ++irq) { | 58 | for (; mask; mask >>= 1, ++irq) { |
60 | if (mask & 1) | 59 | if (mask & 1) |
61 | desc[irq].handle (irq, desc, regs); | 60 | desc[irq].handle (irq, desc); |
62 | } | 61 | } |
63 | } | 62 | } |
64 | 63 | ||
diff --git a/arch/arm/mach-lh7a40x/irq-lpd7a40x.c b/arch/arm/mach-lh7a40x/irq-lpd7a40x.c index d6055dde6468..b20376804bbb 100644 --- a/arch/arm/mach-lh7a40x/irq-lpd7a40x.c +++ b/arch/arm/mach-lh7a40x/irq-lpd7a40x.c | |||
@@ -57,8 +57,7 @@ static struct irq_chip lh7a40x_cpld_chip = { | |||
57 | .unmask = lh7a40x_unmask_cpld_irq, | 57 | .unmask = lh7a40x_unmask_cpld_irq, |
58 | }; | 58 | }; |
59 | 59 | ||
60 | static void lh7a40x_cpld_handler (unsigned int irq, struct irqdesc *desc, | 60 | static void lh7a40x_cpld_handler (unsigned int irq, struct irqdesc *desc) |
61 | struct pt_regs *regs) | ||
62 | { | 61 | { |
63 | unsigned int mask = CPLD_INTERRUPTS; | 62 | unsigned int mask = CPLD_INTERRUPTS; |
64 | 63 | ||
diff --git a/arch/arm/mach-lh7a40x/time.c b/arch/arm/mach-lh7a40x/time.c index ad5652e01507..bef3c4b68d3b 100644 --- a/arch/arm/mach-lh7a40x/time.c +++ b/arch/arm/mach-lh7a40x/time.c | |||
@@ -39,12 +39,12 @@ | |||
39 | #endif | 39 | #endif |
40 | 40 | ||
41 | static irqreturn_t | 41 | static irqreturn_t |
42 | lh7a40x_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 42 | lh7a40x_timer_interrupt(int irq, void *dev_id) |
43 | { | 43 | { |
44 | write_seqlock(&xtime_lock); | 44 | write_seqlock(&xtime_lock); |
45 | 45 | ||
46 | TIMER_EOI = 0; | 46 | TIMER_EOI = 0; |
47 | timer_tick(regs); | 47 | timer_tick(); |
48 | 48 | ||
49 | write_sequnlock(&xtime_lock); | 49 | write_sequnlock(&xtime_lock); |
50 | 50 | ||
diff --git a/arch/arm/mach-netx/generic.c b/arch/arm/mach-netx/generic.c index af0b13534cfd..edbbbdc3b06b 100644 --- a/arch/arm/mach-netx/generic.c +++ b/arch/arm/mach-netx/generic.c | |||
@@ -69,8 +69,7 @@ static struct platform_device *devices[] __initdata = { | |||
69 | #endif | 69 | #endif |
70 | 70 | ||
71 | static void | 71 | static void |
72 | netx_hif_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | 72 | netx_hif_demux_handler(unsigned int irq_unused, struct irqdesc *desc) |
73 | struct pt_regs *regs) | ||
74 | { | 73 | { |
75 | unsigned int irq = NETX_IRQ_HIF_CHAINED(0); | 74 | unsigned int irq = NETX_IRQ_HIF_CHAINED(0); |
76 | unsigned int stat; | 75 | unsigned int stat; |
@@ -83,7 +82,7 @@ netx_hif_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | |||
83 | while (stat) { | 82 | while (stat) { |
84 | if (stat & 1) { | 83 | if (stat & 1) { |
85 | DEBUG_IRQ("handling irq %d\n", irq); | 84 | DEBUG_IRQ("handling irq %d\n", irq); |
86 | desc_handle_irq(irq, desc, regs); | 85 | desc_handle_irq(irq, desc); |
87 | } | 86 | } |
88 | irq++; | 87 | irq++; |
89 | desc++; | 88 | desc++; |
diff --git a/arch/arm/mach-netx/time.c b/arch/arm/mach-netx/time.c index 6d72c81b7d9f..0993336c0b55 100644 --- a/arch/arm/mach-netx/time.c +++ b/arch/arm/mach-netx/time.c | |||
@@ -38,11 +38,11 @@ static unsigned long netx_gettimeoffset(void) | |||
38 | * IRQ handler for the timer | 38 | * IRQ handler for the timer |
39 | */ | 39 | */ |
40 | static irqreturn_t | 40 | static irqreturn_t |
41 | netx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 41 | netx_timer_interrupt(int irq, void *dev_id) |
42 | { | 42 | { |
43 | write_seqlock(&xtime_lock); | 43 | write_seqlock(&xtime_lock); |
44 | 44 | ||
45 | timer_tick(regs); | 45 | timer_tick(); |
46 | write_sequnlock(&xtime_lock); | 46 | write_sequnlock(&xtime_lock); |
47 | 47 | ||
48 | /* acknowledge interrupt */ | 48 | /* acknowledge interrupt */ |
diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c index 6b05647a6c01..3a622801d7b0 100644 --- a/arch/arm/mach-omap1/board-osk.c +++ b/arch/arm/mach-omap1/board-osk.c | |||
@@ -327,7 +327,7 @@ static struct spi_board_info __initdata mistral_boardinfo[] = { { | |||
327 | 327 | ||
328 | #ifdef CONFIG_PM | 328 | #ifdef CONFIG_PM |
329 | static irqreturn_t | 329 | static irqreturn_t |
330 | osk_mistral_wake_interrupt(int irq, void *ignored, struct pt_regs *regs) | 330 | osk_mistral_wake_interrupt(int irq, void *ignored) |
331 | { | 331 | { |
332 | return IRQ_HANDLED; | 332 | return IRQ_HANDLED; |
333 | } | 333 | } |
diff --git a/arch/arm/mach-omap1/fpga.c b/arch/arm/mach-omap1/fpga.c index efe9bfc6e55f..8e40208b10bb 100644 --- a/arch/arm/mach-omap1/fpga.c +++ b/arch/arm/mach-omap1/fpga.c | |||
@@ -84,8 +84,7 @@ static void fpga_mask_ack_irq(unsigned int irq) | |||
84 | fpga_ack_irq(irq); | 84 | fpga_ack_irq(irq); |
85 | } | 85 | } |
86 | 86 | ||
87 | void innovator_fpga_IRQ_demux(unsigned int irq, struct irqdesc *desc, | 87 | void innovator_fpga_IRQ_demux(unsigned int irq, struct irqdesc *desc) |
88 | struct pt_regs *regs) | ||
89 | { | 88 | { |
90 | struct irqdesc *d; | 89 | struct irqdesc *d; |
91 | u32 stat; | 90 | u32 stat; |
@@ -101,7 +100,7 @@ void innovator_fpga_IRQ_demux(unsigned int irq, struct irqdesc *desc, | |||
101 | fpga_irq++, stat >>= 1) { | 100 | fpga_irq++, stat >>= 1) { |
102 | if (stat & 1) { | 101 | if (stat & 1) { |
103 | d = irq_desc + fpga_irq; | 102 | d = irq_desc + fpga_irq; |
104 | desc_handle_irq(fpga_irq, d, regs); | 103 | desc_handle_irq(fpga_irq, d); |
105 | } | 104 | } |
106 | } | 105 | } |
107 | } | 106 | } |
diff --git a/arch/arm/mach-omap1/pm.c b/arch/arm/mach-omap1/pm.c index cd76185bab74..4834758d340c 100644 --- a/arch/arm/mach-omap1/pm.c +++ b/arch/arm/mach-omap1/pm.c | |||
@@ -682,8 +682,7 @@ static int omap_pm_finish(suspend_state_t state) | |||
682 | } | 682 | } |
683 | 683 | ||
684 | 684 | ||
685 | static irqreturn_t omap_wakeup_interrupt(int irq, void * dev, | 685 | static irqreturn_t omap_wakeup_interrupt(int irq, void *dev) |
686 | struct pt_regs * regs) | ||
687 | { | 686 | { |
688 | return IRQ_HANDLED; | 687 | return IRQ_HANDLED; |
689 | } | 688 | } |
diff --git a/arch/arm/mach-omap1/serial.c b/arch/arm/mach-omap1/serial.c index c4b790217a5b..4cc98a578e4b 100644 --- a/arch/arm/mach-omap1/serial.c +++ b/arch/arm/mach-omap1/serial.c | |||
@@ -204,8 +204,7 @@ void __init omap_serial_init(void) | |||
204 | 204 | ||
205 | #ifdef CONFIG_OMAP_SERIAL_WAKE | 205 | #ifdef CONFIG_OMAP_SERIAL_WAKE |
206 | 206 | ||
207 | static irqreturn_t omap_serial_wake_interrupt(int irq, void *dev_id, | 207 | static irqreturn_t omap_serial_wake_interrupt(int irq, void *dev_id) |
208 | struct pt_regs *regs) | ||
209 | { | 208 | { |
210 | /* Need to do something with serial port right after wake-up? */ | 209 | /* Need to do something with serial port right after wake-up? */ |
211 | return IRQ_HANDLED; | 210 | return IRQ_HANDLED; |
diff --git a/arch/arm/mach-omap1/time.c b/arch/arm/mach-omap1/time.c index 4d91b9f51084..1b7e4a506c26 100644 --- a/arch/arm/mach-omap1/time.c +++ b/arch/arm/mach-omap1/time.c | |||
@@ -160,8 +160,7 @@ static unsigned long omap_mpu_timer_gettimeoffset(void) | |||
160 | * Latency during the interrupt is calculated using timer1. | 160 | * Latency during the interrupt is calculated using timer1. |
161 | * Both timer0 and timer1 are counting at 6MHz (P2 6.5MHz). | 161 | * Both timer0 and timer1 are counting at 6MHz (P2 6.5MHz). |
162 | */ | 162 | */ |
163 | static irqreturn_t omap_mpu_timer_interrupt(int irq, void *dev_id, | 163 | static irqreturn_t omap_mpu_timer_interrupt(int irq, void *dev_id) |
164 | struct pt_regs *regs) | ||
165 | { | 164 | { |
166 | unsigned long now, latency; | 165 | unsigned long now, latency; |
167 | 166 | ||
@@ -169,7 +168,7 @@ static irqreturn_t omap_mpu_timer_interrupt(int irq, void *dev_id, | |||
169 | now = 0 - omap_mpu_timer_read(0); | 168 | now = 0 - omap_mpu_timer_read(0); |
170 | latency = MPU_TICKS_PER_SEC / HZ - omap_mpu_timer_read(1); | 169 | latency = MPU_TICKS_PER_SEC / HZ - omap_mpu_timer_read(1); |
171 | omap_mpu_timer_last = now - latency; | 170 | omap_mpu_timer_last = now - latency; |
172 | timer_tick(regs); | 171 | timer_tick(); |
173 | write_sequnlock(&xtime_lock); | 172 | write_sequnlock(&xtime_lock); |
174 | 173 | ||
175 | return IRQ_HANDLED; | 174 | return IRQ_HANDLED; |
@@ -182,8 +181,7 @@ static struct irqaction omap_mpu_timer_irq = { | |||
182 | }; | 181 | }; |
183 | 182 | ||
184 | static unsigned long omap_mpu_timer1_overflows; | 183 | static unsigned long omap_mpu_timer1_overflows; |
185 | static irqreturn_t omap_mpu_timer1_interrupt(int irq, void *dev_id, | 184 | static irqreturn_t omap_mpu_timer1_interrupt(int irq, void *dev_id) |
186 | struct pt_regs *regs) | ||
187 | { | 185 | { |
188 | omap_mpu_timer1_overflows++; | 186 | omap_mpu_timer1_overflows++; |
189 | return IRQ_HANDLED; | 187 | return IRQ_HANDLED; |
diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c index c37b0e6d1248..03d6905ba490 100644 --- a/arch/arm/mach-omap2/board-apollon.c +++ b/arch/arm/mach-omap2/board-apollon.c | |||
@@ -203,7 +203,7 @@ static void __init apollon_led_init(void) | |||
203 | omap_set_gpio_dataout(LED2_GPIO15, 0); | 203 | omap_set_gpio_dataout(LED2_GPIO15, 0); |
204 | } | 204 | } |
205 | 205 | ||
206 | static irqreturn_t apollon_sw_interrupt(int irq, void *ignored, struct pt_regs *regs) | 206 | static irqreturn_t apollon_sw_interrupt(int irq, void *ignored) |
207 | { | 207 | { |
208 | static unsigned int led0, led1, led2; | 208 | static unsigned int led0, led1, led2; |
209 | 209 | ||
diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c index fe5fd6d42dea..973189cd9766 100644 --- a/arch/arm/mach-omap2/timer-gp.c +++ b/arch/arm/mach-omap2/timer-gp.c | |||
@@ -37,13 +37,12 @@ static inline void omap2_gp_timer_start(unsigned long load_val) | |||
37 | omap_dm_timer_start(gptimer); | 37 | omap_dm_timer_start(gptimer); |
38 | } | 38 | } |
39 | 39 | ||
40 | static irqreturn_t omap2_gp_timer_interrupt(int irq, void *dev_id, | 40 | static irqreturn_t omap2_gp_timer_interrupt(int irq, void *dev_id) |
41 | struct pt_regs *regs) | ||
42 | { | 41 | { |
43 | write_seqlock(&xtime_lock); | 42 | write_seqlock(&xtime_lock); |
44 | 43 | ||
45 | omap_dm_timer_write_status(gptimer, OMAP_TIMER_INT_OVERFLOW); | 44 | omap_dm_timer_write_status(gptimer, OMAP_TIMER_INT_OVERFLOW); |
46 | timer_tick(regs); | 45 | timer_tick(); |
47 | 46 | ||
48 | write_sequnlock(&xtime_lock); | 47 | write_sequnlock(&xtime_lock); |
49 | 48 | ||
diff --git a/arch/arm/mach-pnx4008/dma.c b/arch/arm/mach-pnx4008/dma.c index ec01574f88ac..d6a279e4b524 100644 --- a/arch/arm/mach-pnx4008/dma.c +++ b/arch/arm/mach-pnx4008/dma.c | |||
@@ -32,7 +32,7 @@ | |||
32 | 32 | ||
33 | static struct dma_channel { | 33 | static struct dma_channel { |
34 | char *name; | 34 | char *name; |
35 | void (*irq_handler) (int, int, void *, struct pt_regs *); | 35 | void (*irq_handler) (int, int, void *); |
36 | void *data; | 36 | void *data; |
37 | struct pnx4008_dma_ll *ll; | 37 | struct pnx4008_dma_ll *ll; |
38 | u32 ll_dma; | 38 | u32 ll_dma; |
@@ -150,8 +150,7 @@ static inline void pnx4008_dma_unlock(void) | |||
150 | #define VALID_CHANNEL(c) (((c) >= 0) && ((c) < MAX_DMA_CHANNELS)) | 150 | #define VALID_CHANNEL(c) (((c) >= 0) && ((c) < MAX_DMA_CHANNELS)) |
151 | 151 | ||
152 | int pnx4008_request_channel(char *name, int ch, | 152 | int pnx4008_request_channel(char *name, int ch, |
153 | void (*irq_handler) (int, int, void *, | 153 | void (*irq_handler) (int, int, void *), void *data) |
154 | struct pt_regs *), void *data) | ||
155 | { | 154 | { |
156 | int i, found = 0; | 155 | int i, found = 0; |
157 | 156 | ||
@@ -1033,7 +1032,7 @@ int pnx4008_dma_ch_enabled(int ch) | |||
1033 | 1032 | ||
1034 | EXPORT_SYMBOL_GPL(pnx4008_dma_ch_enabled); | 1033 | EXPORT_SYMBOL_GPL(pnx4008_dma_ch_enabled); |
1035 | 1034 | ||
1036 | static irqreturn_t dma_irq_handler(int irq, void *dev_id, struct pt_regs *regs) | 1035 | static irqreturn_t dma_irq_handler(int irq, void *dev_id) |
1037 | { | 1036 | { |
1038 | int i; | 1037 | int i; |
1039 | unsigned long dint = __raw_readl(DMAC_INT_STAT); | 1038 | unsigned long dint = __raw_readl(DMAC_INT_STAT); |
@@ -1053,8 +1052,7 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id, struct pt_regs *regs) | |||
1053 | cause |= DMA_ERR_INT; | 1052 | cause |= DMA_ERR_INT; |
1054 | if (tcint & i_bit) | 1053 | if (tcint & i_bit) |
1055 | cause |= DMA_TC_INT; | 1054 | cause |= DMA_TC_INT; |
1056 | channel->irq_handler(i, cause, channel->data, | 1055 | channel->irq_handler(i, cause, channel->data); |
1057 | regs); | ||
1058 | } else { | 1056 | } else { |
1059 | /* | 1057 | /* |
1060 | * IRQ for an unregistered DMA channel | 1058 | * IRQ for an unregistered DMA channel |
diff --git a/arch/arm/mach-pnx4008/time.c b/arch/arm/mach-pnx4008/time.c index b986065cd0f3..8621c206ac84 100644 --- a/arch/arm/mach-pnx4008/time.c +++ b/arch/arm/mach-pnx4008/time.c | |||
@@ -47,15 +47,14 @@ static unsigned long pnx4008_gettimeoffset(void) | |||
47 | /*! | 47 | /*! |
48 | * IRQ handler for the timer | 48 | * IRQ handler for the timer |
49 | */ | 49 | */ |
50 | static irqreturn_t pnx4008_timer_interrupt(int irq, void *dev_id, | 50 | static irqreturn_t pnx4008_timer_interrupt(int irq, void *dev_id) |
51 | struct pt_regs *regs) | ||
52 | { | 51 | { |
53 | if (__raw_readl(HSTIM_INT) & MATCH0_INT) { | 52 | if (__raw_readl(HSTIM_INT) & MATCH0_INT) { |
54 | 53 | ||
55 | write_seqlock(&xtime_lock); | 54 | write_seqlock(&xtime_lock); |
56 | 55 | ||
57 | do { | 56 | do { |
58 | timer_tick(regs); | 57 | timer_tick(); |
59 | 58 | ||
60 | /* | 59 | /* |
61 | * this algorithm takes care of possible delay | 60 | * this algorithm takes care of possible delay |
diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c index 337c01c4ac37..a1a900d16665 100644 --- a/arch/arm/mach-pxa/corgi.c +++ b/arch/arm/mach-pxa/corgi.c | |||
@@ -212,7 +212,7 @@ static struct platform_device corgits_device = { | |||
212 | */ | 212 | */ |
213 | static struct pxamci_platform_data corgi_mci_platform_data; | 213 | static struct pxamci_platform_data corgi_mci_platform_data; |
214 | 214 | ||
215 | static int corgi_mci_init(struct device *dev, irqreturn_t (*corgi_detect_int)(int, void *, struct pt_regs *), void *data) | 215 | static int corgi_mci_init(struct device *dev, irq_handler_t corgi_detect_int, void *data) |
216 | { | 216 | { |
217 | int err; | 217 | int err; |
218 | 218 | ||
diff --git a/arch/arm/mach-pxa/dma.c b/arch/arm/mach-pxa/dma.c index 7d8c85486c66..4440babe7b97 100644 --- a/arch/arm/mach-pxa/dma.c +++ b/arch/arm/mach-pxa/dma.c | |||
@@ -27,13 +27,13 @@ | |||
27 | 27 | ||
28 | static struct dma_channel { | 28 | static struct dma_channel { |
29 | char *name; | 29 | char *name; |
30 | void (*irq_handler)(int, void *, struct pt_regs *); | 30 | void (*irq_handler)(int, void *); |
31 | void *data; | 31 | void *data; |
32 | } dma_channels[PXA_DMA_CHANNELS]; | 32 | } dma_channels[PXA_DMA_CHANNELS]; |
33 | 33 | ||
34 | 34 | ||
35 | int pxa_request_dma (char *name, pxa_dma_prio prio, | 35 | int pxa_request_dma (char *name, pxa_dma_prio prio, |
36 | void (*irq_handler)(int, void *, struct pt_regs *), | 36 | void (*irq_handler)(int, void *), |
37 | void *data) | 37 | void *data) |
38 | { | 38 | { |
39 | unsigned long flags; | 39 | unsigned long flags; |
@@ -87,7 +87,7 @@ void pxa_free_dma (int dma_ch) | |||
87 | local_irq_restore(flags); | 87 | local_irq_restore(flags); |
88 | } | 88 | } |
89 | 89 | ||
90 | static irqreturn_t dma_irq_handler(int irq, void *dev_id, struct pt_regs *regs) | 90 | static irqreturn_t dma_irq_handler(int irq, void *dev_id) |
91 | { | 91 | { |
92 | int i, dint = DINT; | 92 | int i, dint = DINT; |
93 | 93 | ||
@@ -95,7 +95,7 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id, struct pt_regs *regs) | |||
95 | if (dint & (1 << i)) { | 95 | if (dint & (1 << i)) { |
96 | struct dma_channel *channel = &dma_channels[i]; | 96 | struct dma_channel *channel = &dma_channels[i]; |
97 | if (channel->name && channel->irq_handler) { | 97 | if (channel->name && channel->irq_handler) { |
98 | channel->irq_handler(i, channel->data, regs); | 98 | channel->irq_handler(i, channel->data); |
99 | } else { | 99 | } else { |
100 | /* | 100 | /* |
101 | * IRQ for an unregistered DMA channel: | 101 | * IRQ for an unregistered DMA channel: |
diff --git a/arch/arm/mach-pxa/idp.c b/arch/arm/mach-pxa/idp.c index 3e4b0ab71c66..64df44043a65 100644 --- a/arch/arm/mach-pxa/idp.c +++ b/arch/arm/mach-pxa/idp.c | |||
@@ -125,7 +125,7 @@ static struct pxafb_mach_info sharp_lm8v31 = { | |||
125 | .pxafb_lcd_power = &idp_lcd_power | 125 | .pxafb_lcd_power = &idp_lcd_power |
126 | }; | 126 | }; |
127 | 127 | ||
128 | static int idp_mci_init(struct device *dev, irqreturn_t (*idp_detect_int)(int, void *, struct pt_regs *), void *data) | 128 | static int idp_mci_init(struct device *dev, irq_handler_t idp_detect_int, void *data) |
129 | { | 129 | { |
130 | /* setup GPIO for PXA25x MMC controller */ | 130 | /* setup GPIO for PXA25x MMC controller */ |
131 | pxa_gpio_mode(GPIO6_MMCCLK_MD); | 131 | pxa_gpio_mode(GPIO6_MMCCLK_MD); |
diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c index 12141e2a50cc..ab1a16025d51 100644 --- a/arch/arm/mach-pxa/irq.c +++ b/arch/arm/mach-pxa/irq.c | |||
@@ -143,8 +143,7 @@ static struct irq_chip pxa_low_gpio_chip = { | |||
143 | * Demux handler for GPIO>=2 edge detect interrupts | 143 | * Demux handler for GPIO>=2 edge detect interrupts |
144 | */ | 144 | */ |
145 | 145 | ||
146 | static void pxa_gpio_demux_handler(unsigned int irq, struct irqdesc *desc, | 146 | static void pxa_gpio_demux_handler(unsigned int irq, struct irqdesc *desc) |
147 | struct pt_regs *regs) | ||
148 | { | 147 | { |
149 | unsigned int mask; | 148 | unsigned int mask; |
150 | int loop; | 149 | int loop; |
@@ -160,7 +159,7 @@ static void pxa_gpio_demux_handler(unsigned int irq, struct irqdesc *desc, | |||
160 | mask >>= 2; | 159 | mask >>= 2; |
161 | do { | 160 | do { |
162 | if (mask & 1) | 161 | if (mask & 1) |
163 | desc_handle_irq(irq, desc, regs); | 162 | desc_handle_irq(irq, desc); |
164 | irq++; | 163 | irq++; |
165 | desc++; | 164 | desc++; |
166 | mask >>= 1; | 165 | mask >>= 1; |
@@ -175,7 +174,7 @@ static void pxa_gpio_demux_handler(unsigned int irq, struct irqdesc *desc, | |||
175 | desc = irq_desc + irq; | 174 | desc = irq_desc + irq; |
176 | do { | 175 | do { |
177 | if (mask & 1) | 176 | if (mask & 1) |
178 | desc_handle_irq(irq, desc, regs); | 177 | desc_handle_irq(irq, desc); |
179 | irq++; | 178 | irq++; |
180 | desc++; | 179 | desc++; |
181 | mask >>= 1; | 180 | mask >>= 1; |
@@ -190,7 +189,7 @@ static void pxa_gpio_demux_handler(unsigned int irq, struct irqdesc *desc, | |||
190 | desc = irq_desc + irq; | 189 | desc = irq_desc + irq; |
191 | do { | 190 | do { |
192 | if (mask & 1) | 191 | if (mask & 1) |
193 | desc_handle_irq(irq, desc, regs); | 192 | desc_handle_irq(irq, desc); |
194 | irq++; | 193 | irq++; |
195 | desc++; | 194 | desc++; |
196 | mask >>= 1; | 195 | mask >>= 1; |
@@ -206,7 +205,7 @@ static void pxa_gpio_demux_handler(unsigned int irq, struct irqdesc *desc, | |||
206 | desc = irq_desc + irq; | 205 | desc = irq_desc + irq; |
207 | do { | 206 | do { |
208 | if (mask & 1) | 207 | if (mask & 1) |
209 | desc_handle_irq(irq, desc, regs); | 208 | desc_handle_irq(irq, desc); |
210 | irq++; | 209 | irq++; |
211 | desc++; | 210 | desc++; |
212 | mask >>= 1; | 211 | mask >>= 1; |
diff --git a/arch/arm/mach-pxa/lpd270.c b/arch/arm/mach-pxa/lpd270.c index eff2a91b2565..5749f6b72e12 100644 --- a/arch/arm/mach-pxa/lpd270.c +++ b/arch/arm/mach-pxa/lpd270.c | |||
@@ -75,8 +75,7 @@ static struct irq_chip lpd270_irq_chip = { | |||
75 | .unmask = lpd270_unmask_irq, | 75 | .unmask = lpd270_unmask_irq, |
76 | }; | 76 | }; |
77 | 77 | ||
78 | static void lpd270_irq_handler(unsigned int irq, struct irqdesc *desc, | 78 | static void lpd270_irq_handler(unsigned int irq, struct irqdesc *desc) |
79 | struct pt_regs *regs) | ||
80 | { | 79 | { |
81 | unsigned long pending; | 80 | unsigned long pending; |
82 | 81 | ||
@@ -86,7 +85,7 @@ static void lpd270_irq_handler(unsigned int irq, struct irqdesc *desc, | |||
86 | if (likely(pending)) { | 85 | if (likely(pending)) { |
87 | irq = LPD270_IRQ(0) + __ffs(pending); | 86 | irq = LPD270_IRQ(0) + __ffs(pending); |
88 | desc = irq_desc + irq; | 87 | desc = irq_desc + irq; |
89 | desc_handle_irq(irq, desc, regs); | 88 | desc_handle_irq(irq, desc); |
90 | 89 | ||
91 | pending = __raw_readw(LPD270_INT_STATUS) & | 90 | pending = __raw_readw(LPD270_INT_STATUS) & |
92 | lpd270_irq_enabled; | 91 | lpd270_irq_enabled; |
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c index 157cf47cbe66..ee80d62119d3 100644 --- a/arch/arm/mach-pxa/lubbock.c +++ b/arch/arm/mach-pxa/lubbock.c | |||
@@ -85,8 +85,7 @@ static struct irq_chip lubbock_irq_chip = { | |||
85 | .unmask = lubbock_unmask_irq, | 85 | .unmask = lubbock_unmask_irq, |
86 | }; | 86 | }; |
87 | 87 | ||
88 | static void lubbock_irq_handler(unsigned int irq, struct irqdesc *desc, | 88 | static void lubbock_irq_handler(unsigned int irq, struct irqdesc *desc) |
89 | struct pt_regs *regs) | ||
90 | { | 89 | { |
91 | unsigned long pending = LUB_IRQ_SET_CLR & lubbock_irq_enabled; | 90 | unsigned long pending = LUB_IRQ_SET_CLR & lubbock_irq_enabled; |
92 | do { | 91 | do { |
@@ -94,7 +93,7 @@ static void lubbock_irq_handler(unsigned int irq, struct irqdesc *desc, | |||
94 | if (likely(pending)) { | 93 | if (likely(pending)) { |
95 | irq = LUBBOCK_IRQ(0) + __ffs(pending); | 94 | irq = LUBBOCK_IRQ(0) + __ffs(pending); |
96 | desc = irq_desc + irq; | 95 | desc = irq_desc + irq; |
97 | desc_handle_irq(irq, desc, regs); | 96 | desc_handle_irq(irq, desc); |
98 | } | 97 | } |
99 | pending = LUB_IRQ_SET_CLR & lubbock_irq_enabled; | 98 | pending = LUB_IRQ_SET_CLR & lubbock_irq_enabled; |
100 | } while (pending); | 99 | } while (pending); |
@@ -379,7 +378,7 @@ static struct pxafb_mach_info sharp_lm8v31 = { | |||
379 | #define MMC_POLL_RATE msecs_to_jiffies(1000) | 378 | #define MMC_POLL_RATE msecs_to_jiffies(1000) |
380 | 379 | ||
381 | static void lubbock_mmc_poll(unsigned long); | 380 | static void lubbock_mmc_poll(unsigned long); |
382 | static irqreturn_t (*mmc_detect_int)(int, void *, struct pt_regs *); | 381 | static irq_handler_t mmc_detect_int; |
383 | 382 | ||
384 | static struct timer_list mmc_timer = { | 383 | static struct timer_list mmc_timer = { |
385 | .function = lubbock_mmc_poll, | 384 | .function = lubbock_mmc_poll, |
@@ -403,17 +402,17 @@ static void lubbock_mmc_poll(unsigned long data) | |||
403 | } | 402 | } |
404 | } | 403 | } |
405 | 404 | ||
406 | static irqreturn_t lubbock_detect_int(int irq, void *data, struct pt_regs *regs) | 405 | static irqreturn_t lubbock_detect_int(int irq, void *data) |
407 | { | 406 | { |
408 | /* IRQ is level triggered; disable, and poll for removal */ | 407 | /* IRQ is level triggered; disable, and poll for removal */ |
409 | disable_irq(irq); | 408 | disable_irq(irq); |
410 | mod_timer(&mmc_timer, jiffies + MMC_POLL_RATE); | 409 | mod_timer(&mmc_timer, jiffies + MMC_POLL_RATE); |
411 | 410 | ||
412 | return mmc_detect_int(irq, data, regs); | 411 | return mmc_detect_int(irq, data); |
413 | } | 412 | } |
414 | 413 | ||
415 | static int lubbock_mci_init(struct device *dev, | 414 | static int lubbock_mci_init(struct device *dev, |
416 | irqreturn_t (*detect_int)(int, void *, struct pt_regs *), | 415 | irq_handler_t detect_int, |
417 | void *data) | 416 | void *data) |
418 | { | 417 | { |
419 | /* setup GPIO for PXA25x MMC controller */ | 418 | /* setup GPIO for PXA25x MMC controller */ |
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c index 7ba0447d6fa3..49c34d94a9fe 100644 --- a/arch/arm/mach-pxa/mainstone.c +++ b/arch/arm/mach-pxa/mainstone.c | |||
@@ -71,8 +71,7 @@ static struct irq_chip mainstone_irq_chip = { | |||
71 | .unmask = mainstone_unmask_irq, | 71 | .unmask = mainstone_unmask_irq, |
72 | }; | 72 | }; |
73 | 73 | ||
74 | static void mainstone_irq_handler(unsigned int irq, struct irqdesc *desc, | 74 | static void mainstone_irq_handler(unsigned int irq, struct irqdesc *desc) |
75 | struct pt_regs *regs) | ||
76 | { | 75 | { |
77 | unsigned long pending = MST_INTSETCLR & mainstone_irq_enabled; | 76 | unsigned long pending = MST_INTSETCLR & mainstone_irq_enabled; |
78 | do { | 77 | do { |
@@ -80,7 +79,7 @@ static void mainstone_irq_handler(unsigned int irq, struct irqdesc *desc, | |||
80 | if (likely(pending)) { | 79 | if (likely(pending)) { |
81 | irq = MAINSTONE_IRQ(0) + __ffs(pending); | 80 | irq = MAINSTONE_IRQ(0) + __ffs(pending); |
82 | desc = irq_desc + irq; | 81 | desc = irq_desc + irq; |
83 | desc_handle_irq(irq, desc, regs); | 82 | desc_handle_irq(irq, desc); |
84 | } | 83 | } |
85 | pending = MST_INTSETCLR & mainstone_irq_enabled; | 84 | pending = MST_INTSETCLR & mainstone_irq_enabled; |
86 | } while (pending); | 85 | } while (pending); |
@@ -314,7 +313,7 @@ static struct pxafb_mach_info mainstone_pxafb_info = { | |||
314 | .pxafb_backlight_power = mainstone_backlight_power, | 313 | .pxafb_backlight_power = mainstone_backlight_power, |
315 | }; | 314 | }; |
316 | 315 | ||
317 | static int mainstone_mci_init(struct device *dev, irqreturn_t (*mstone_detect_int)(int, void *, struct pt_regs *), void *data) | 316 | static int mainstone_mci_init(struct device *dev, irq_handler_t mstone_detect_int, void *data) |
318 | { | 317 | { |
319 | int err; | 318 | int err; |
320 | 319 | ||
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c index 5e8c098ca139..34fb80b37023 100644 --- a/arch/arm/mach-pxa/poodle.c +++ b/arch/arm/mach-pxa/poodle.c | |||
@@ -197,7 +197,7 @@ static struct platform_device poodle_ts_device = { | |||
197 | */ | 197 | */ |
198 | static struct pxamci_platform_data poodle_mci_platform_data; | 198 | static struct pxamci_platform_data poodle_mci_platform_data; |
199 | 199 | ||
200 | static int poodle_mci_init(struct device *dev, irqreturn_t (*poodle_detect_int)(int, void *, struct pt_regs *), void *data) | 200 | static int poodle_mci_init(struct device *dev, irq_handler_t poodle_detect_int, void *data) |
201 | { | 201 | { |
202 | int err; | 202 | int err; |
203 | 203 | ||
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c index 401cdb850fbc..3cbac63bed3c 100644 --- a/arch/arm/mach-pxa/spitz.c +++ b/arch/arm/mach-pxa/spitz.c | |||
@@ -291,7 +291,7 @@ static struct platform_device spitzts_device = { | |||
291 | 291 | ||
292 | static struct pxamci_platform_data spitz_mci_platform_data; | 292 | static struct pxamci_platform_data spitz_mci_platform_data; |
293 | 293 | ||
294 | static int spitz_mci_init(struct device *dev, irqreturn_t (*spitz_detect_int)(int, void *, struct pt_regs *), void *data) | 294 | static int spitz_mci_init(struct device *dev, irq_handler_t spitz_detect_int, void *data) |
295 | { | 295 | { |
296 | int err; | 296 | int err; |
297 | 297 | ||
diff --git a/arch/arm/mach-pxa/ssp.c b/arch/arm/mach-pxa/ssp.c index 1fddfeaa630d..6cc202755fb4 100644 --- a/arch/arm/mach-pxa/ssp.c +++ b/arch/arm/mach-pxa/ssp.c | |||
@@ -65,7 +65,7 @@ static const struct ssp_info_ ssp_info[PXA_SSP_PORTS] = { | |||
65 | static DEFINE_MUTEX(mutex); | 65 | static DEFINE_MUTEX(mutex); |
66 | static int use_count[PXA_SSP_PORTS] = {0, 0, 0}; | 66 | static int use_count[PXA_SSP_PORTS] = {0, 0, 0}; |
67 | 67 | ||
68 | static irqreturn_t ssp_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 68 | static irqreturn_t ssp_interrupt(int irq, void *dev_id) |
69 | { | 69 | { |
70 | struct ssp_dev *dev = (struct ssp_dev*) dev_id; | 70 | struct ssp_dev *dev = (struct ssp_dev*) dev_id; |
71 | unsigned int status = SSSR_P(dev->port); | 71 | unsigned int status = SSSR_P(dev->port); |
diff --git a/arch/arm/mach-pxa/time.c b/arch/arm/mach-pxa/time.c index 5dbd191c57c4..3ac268fa419b 100644 --- a/arch/arm/mach-pxa/time.c +++ b/arch/arm/mach-pxa/time.c | |||
@@ -75,7 +75,7 @@ static int match_posponed; | |||
75 | #endif | 75 | #endif |
76 | 76 | ||
77 | static irqreturn_t | 77 | static irqreturn_t |
78 | pxa_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 78 | pxa_timer_interrupt(int irq, void *dev_id) |
79 | { | 79 | { |
80 | int next_match; | 80 | int next_match; |
81 | 81 | ||
@@ -105,7 +105,7 @@ pxa_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
105 | * exactly one tick period which should be a pretty rare event. | 105 | * exactly one tick period which should be a pretty rare event. |
106 | */ | 106 | */ |
107 | do { | 107 | do { |
108 | timer_tick(regs); | 108 | timer_tick(); |
109 | OSSR = OSSR_M0; /* Clear match on timer 0 */ | 109 | OSSR = OSSR_M0; /* Clear match on timer 0 */ |
110 | next_match = (OSMR0 += LATCH); | 110 | next_match = (OSMR0 += LATCH); |
111 | } while( (signed long)(next_match - OSCR) <= 8 ); | 111 | } while( (signed long)(next_match - OSCR) <= 8 ); |
@@ -157,13 +157,13 @@ static void pxa_dyn_tick_reprogram(unsigned long ticks) | |||
157 | } | 157 | } |
158 | 158 | ||
159 | static irqreturn_t | 159 | static irqreturn_t |
160 | pxa_dyn_tick_handler(int irq, void *dev_id, struct pt_regs *regs) | 160 | pxa_dyn_tick_handler(int irq, void *dev_id) |
161 | { | 161 | { |
162 | if (match_posponed) { | 162 | if (match_posponed) { |
163 | match_posponed = 0; | 163 | match_posponed = 0; |
164 | OSMR0 = initial_match; | 164 | OSMR0 = initial_match; |
165 | if ( (signed long)(initial_match - OSCR) <= 8 ) | 165 | if ( (signed long)(initial_match - OSCR) <= 8 ) |
166 | return pxa_timer_interrupt(irq, dev_id, regs); | 166 | return pxa_timer_interrupt(irq, dev_id); |
167 | } | 167 | } |
168 | return IRQ_NONE; | 168 | return IRQ_NONE; |
169 | } | 169 | } |
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c index 249353616aba..7915a5a22865 100644 --- a/arch/arm/mach-pxa/tosa.c +++ b/arch/arm/mach-pxa/tosa.c | |||
@@ -174,7 +174,7 @@ static struct pxa2xx_udc_mach_info udc_info __initdata = { | |||
174 | */ | 174 | */ |
175 | static struct pxamci_platform_data tosa_mci_platform_data; | 175 | static struct pxamci_platform_data tosa_mci_platform_data; |
176 | 176 | ||
177 | static int tosa_mci_init(struct device *dev, irqreturn_t (*tosa_detect_int)(int, void *, struct pt_regs *), void *data) | 177 | static int tosa_mci_init(struct device *dev, irq_handler_t tosa_detect_int, void *data) |
178 | { | 178 | { |
179 | int err; | 179 | int err; |
180 | 180 | ||
diff --git a/arch/arm/mach-pxa/trizeps4.c b/arch/arm/mach-pxa/trizeps4.c index 910571e9a190..c1827d021ba8 100644 --- a/arch/arm/mach-pxa/trizeps4.c +++ b/arch/arm/mach-pxa/trizeps4.c | |||
@@ -270,7 +270,7 @@ void board_pcmcia_power(int power) {;} | |||
270 | #endif /* CONFIG_MACH_TRIZEPS4_CONXS */ | 270 | #endif /* CONFIG_MACH_TRIZEPS4_CONXS */ |
271 | EXPORT_SYMBOL(board_pcmcia_power); | 271 | EXPORT_SYMBOL(board_pcmcia_power); |
272 | 272 | ||
273 | static int trizeps4_mci_init(struct device *dev, irqreturn_t (*mci_detect_int)(int, void *, struct pt_regs *), void *data) | 273 | static int trizeps4_mci_init(struct device *dev, irq_handler_t mci_detect_int, void *data) |
274 | { | 274 | { |
275 | int err; | 275 | int err; |
276 | /* setup GPIO for PXA27x MMC controller */ | 276 | /* setup GPIO for PXA27x MMC controller */ |
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c index da0286973823..68c67053f479 100644 --- a/arch/arm/mach-realview/core.c +++ b/arch/arm/mach-realview/core.c | |||
@@ -515,18 +515,18 @@ static unsigned long realview_gettimeoffset(void) | |||
515 | /* | 515 | /* |
516 | * IRQ handler for the timer | 516 | * IRQ handler for the timer |
517 | */ | 517 | */ |
518 | static irqreturn_t realview_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 518 | static irqreturn_t realview_timer_interrupt(int irq, void *dev_id) |
519 | { | 519 | { |
520 | write_seqlock(&xtime_lock); | 520 | write_seqlock(&xtime_lock); |
521 | 521 | ||
522 | // ...clear the interrupt | 522 | // ...clear the interrupt |
523 | writel(1, TIMER0_VA_BASE + TIMER_INTCLR); | 523 | writel(1, TIMER0_VA_BASE + TIMER_INTCLR); |
524 | 524 | ||
525 | timer_tick(regs); | 525 | timer_tick(); |
526 | 526 | ||
527 | #if defined(CONFIG_SMP) && !defined(CONFIG_LOCAL_TIMERS) | 527 | #if defined(CONFIG_SMP) && !defined(CONFIG_LOCAL_TIMERS) |
528 | smp_send_timer(); | 528 | smp_send_timer(); |
529 | update_process_times(user_mode(regs)); | 529 | update_process_times(user_mode(get_irq_regs())); |
530 | #endif | 530 | #endif |
531 | 531 | ||
532 | write_sequnlock(&xtime_lock); | 532 | write_sequnlock(&xtime_lock); |
diff --git a/arch/arm/mach-rpc/dma.c b/arch/arm/mach-rpc/dma.c index ac511d41d4d7..596379a4cf82 100644 --- a/arch/arm/mach-rpc/dma.c +++ b/arch/arm/mach-rpc/dma.c | |||
@@ -83,7 +83,7 @@ static void iomd_get_next_sg(struct scatterlist *sg, dma_t *dma) | |||
83 | sg->length |= flags; | 83 | sg->length |= flags; |
84 | } | 84 | } |
85 | 85 | ||
86 | static irqreturn_t iomd_dma_handle(int irq, void *dev_id, struct pt_regs *regs) | 86 | static irqreturn_t iomd_dma_handle(int irq, void *dev_id) |
87 | { | 87 | { |
88 | dma_t *dma = (dma_t *)dev_id; | 88 | dma_t *dma = (dma_t *)dev_id; |
89 | unsigned long base = dma->dma_base; | 89 | unsigned long base = dma->dma_base; |
diff --git a/arch/arm/mach-s3c2410/bast-irq.c b/arch/arm/mach-s3c2410/bast-irq.c index 440e9aa0211a..23d5beea5568 100644 --- a/arch/arm/mach-s3c2410/bast-irq.c +++ b/arch/arm/mach-s3c2410/bast-irq.c | |||
@@ -112,8 +112,7 @@ static struct irqchip bast_pc104_chip = { | |||
112 | 112 | ||
113 | static void | 113 | static void |
114 | bast_irq_pc104_demux(unsigned int irq, | 114 | bast_irq_pc104_demux(unsigned int irq, |
115 | struct irqdesc *desc, | 115 | struct irqdesc *desc) |
116 | struct pt_regs *regs) | ||
117 | { | 116 | { |
118 | unsigned int stat; | 117 | unsigned int stat; |
119 | unsigned int irqno; | 118 | unsigned int irqno; |
@@ -133,7 +132,7 @@ bast_irq_pc104_demux(unsigned int irq, | |||
133 | if (stat & 1) { | 132 | if (stat & 1) { |
134 | irqno = bast_pc104_irqs[i]; | 133 | irqno = bast_pc104_irqs[i]; |
135 | desc = irq_desc + irqno; | 134 | desc = irq_desc + irqno; |
136 | desc_handle_irq(irqno, desc, regs); | 135 | desc_handle_irq(irqno, desc); |
137 | } | 136 | } |
138 | } | 137 | } |
139 | } | 138 | } |
diff --git a/arch/arm/mach-s3c2410/dma.c b/arch/arm/mach-s3c2410/dma.c index d264bbbd8bef..3d211dc2f2f9 100644 --- a/arch/arm/mach-s3c2410/dma.c +++ b/arch/arm/mach-s3c2410/dma.c | |||
@@ -595,7 +595,7 @@ s3c2410_dma_lastxfer(struct s3c2410_dma_chan *chan) | |||
595 | #define dmadbg2(x...) | 595 | #define dmadbg2(x...) |
596 | 596 | ||
597 | static irqreturn_t | 597 | static irqreturn_t |
598 | s3c2410_dma_irq(int irq, void *devpw, struct pt_regs *regs) | 598 | s3c2410_dma_irq(int irq, void *devpw) |
599 | { | 599 | { |
600 | struct s3c2410_dma_chan *chan = (struct s3c2410_dma_chan *)devpw; | 600 | struct s3c2410_dma_chan *chan = (struct s3c2410_dma_chan *)devpw; |
601 | struct s3c2410_dma_buf *buf; | 601 | struct s3c2410_dma_buf *buf; |
diff --git a/arch/arm/mach-s3c2410/irq.c b/arch/arm/mach-s3c2410/irq.c index 3e9f3462c61b..683b3491ba3c 100644 --- a/arch/arm/mach-s3c2410/irq.c +++ b/arch/arm/mach-s3c2410/irq.c | |||
@@ -480,8 +480,7 @@ static struct irqchip s3c_irq_adc = { | |||
480 | 480 | ||
481 | /* irq demux for adc */ | 481 | /* irq demux for adc */ |
482 | static void s3c_irq_demux_adc(unsigned int irq, | 482 | static void s3c_irq_demux_adc(unsigned int irq, |
483 | struct irqdesc *desc, | 483 | struct irqdesc *desc) |
484 | struct pt_regs *regs) | ||
485 | { | 484 | { |
486 | unsigned int subsrc, submsk; | 485 | unsigned int subsrc, submsk; |
487 | unsigned int offset = 9; | 486 | unsigned int offset = 9; |
@@ -500,17 +499,16 @@ static void s3c_irq_demux_adc(unsigned int irq, | |||
500 | if (subsrc != 0) { | 499 | if (subsrc != 0) { |
501 | if (subsrc & 1) { | 500 | if (subsrc & 1) { |
502 | mydesc = irq_desc + IRQ_TC; | 501 | mydesc = irq_desc + IRQ_TC; |
503 | desc_handle_irq(IRQ_TC, mydesc, regs); | 502 | desc_handle_irq(IRQ_TC, mydesc); |
504 | } | 503 | } |
505 | if (subsrc & 2) { | 504 | if (subsrc & 2) { |
506 | mydesc = irq_desc + IRQ_ADC; | 505 | mydesc = irq_desc + IRQ_ADC; |
507 | desc_handle_irq(IRQ_ADC, mydesc, regs); | 506 | desc_handle_irq(IRQ_ADC, mydesc); |
508 | } | 507 | } |
509 | } | 508 | } |
510 | } | 509 | } |
511 | 510 | ||
512 | static void s3c_irq_demux_uart(unsigned int start, | 511 | static void s3c_irq_demux_uart(unsigned int start) |
513 | struct pt_regs *regs) | ||
514 | { | 512 | { |
515 | unsigned int subsrc, submsk; | 513 | unsigned int subsrc, submsk; |
516 | unsigned int offset = start - IRQ_S3CUART_RX0; | 514 | unsigned int offset = start - IRQ_S3CUART_RX0; |
@@ -533,17 +531,17 @@ static void s3c_irq_demux_uart(unsigned int start, | |||
533 | desc = irq_desc + start; | 531 | desc = irq_desc + start; |
534 | 532 | ||
535 | if (subsrc & 1) | 533 | if (subsrc & 1) |
536 | desc_handle_irq(start, desc, regs); | 534 | desc_handle_irq(start, desc); |
537 | 535 | ||
538 | desc++; | 536 | desc++; |
539 | 537 | ||
540 | if (subsrc & 2) | 538 | if (subsrc & 2) |
541 | desc_handle_irq(start+1, desc, regs); | 539 | desc_handle_irq(start+1, desc); |
542 | 540 | ||
543 | desc++; | 541 | desc++; |
544 | 542 | ||
545 | if (subsrc & 4) | 543 | if (subsrc & 4) |
546 | desc_handle_irq(start+2, desc, regs); | 544 | desc_handle_irq(start+2, desc); |
547 | } | 545 | } |
548 | } | 546 | } |
549 | 547 | ||
@@ -551,35 +549,31 @@ static void s3c_irq_demux_uart(unsigned int start, | |||
551 | 549 | ||
552 | static void | 550 | static void |
553 | s3c_irq_demux_uart0(unsigned int irq, | 551 | s3c_irq_demux_uart0(unsigned int irq, |
554 | struct irqdesc *desc, | 552 | struct irqdesc *desc) |
555 | struct pt_regs *regs) | ||
556 | { | 553 | { |
557 | irq = irq; | 554 | irq = irq; |
558 | s3c_irq_demux_uart(IRQ_S3CUART_RX0, regs); | 555 | s3c_irq_demux_uart(IRQ_S3CUART_RX0); |
559 | } | 556 | } |
560 | 557 | ||
561 | static void | 558 | static void |
562 | s3c_irq_demux_uart1(unsigned int irq, | 559 | s3c_irq_demux_uart1(unsigned int irq, |
563 | struct irqdesc *desc, | 560 | struct irqdesc *desc) |
564 | struct pt_regs *regs) | ||
565 | { | 561 | { |
566 | irq = irq; | 562 | irq = irq; |
567 | s3c_irq_demux_uart(IRQ_S3CUART_RX1, regs); | 563 | s3c_irq_demux_uart(IRQ_S3CUART_RX1); |
568 | } | 564 | } |
569 | 565 | ||
570 | static void | 566 | static void |
571 | s3c_irq_demux_uart2(unsigned int irq, | 567 | s3c_irq_demux_uart2(unsigned int irq, |
572 | struct irqdesc *desc, | 568 | struct irqdesc *desc) |
573 | struct pt_regs *regs) | ||
574 | { | 569 | { |
575 | irq = irq; | 570 | irq = irq; |
576 | s3c_irq_demux_uart(IRQ_S3CUART_RX2, regs); | 571 | s3c_irq_demux_uart(IRQ_S3CUART_RX2); |
577 | } | 572 | } |
578 | 573 | ||
579 | static void | 574 | static void |
580 | s3c_irq_demux_extint8(unsigned int irq, | 575 | s3c_irq_demux_extint8(unsigned int irq, |
581 | struct irqdesc *desc, | 576 | struct irqdesc *desc) |
582 | struct pt_regs *regs) | ||
583 | { | 577 | { |
584 | unsigned long eintpnd = __raw_readl(S3C24XX_EINTPEND); | 578 | unsigned long eintpnd = __raw_readl(S3C24XX_EINTPEND); |
585 | unsigned long eintmsk = __raw_readl(S3C24XX_EINTMASK); | 579 | unsigned long eintmsk = __raw_readl(S3C24XX_EINTMASK); |
@@ -594,15 +588,14 @@ s3c_irq_demux_extint8(unsigned int irq, | |||
594 | eintpnd &= ~(1<<irq); | 588 | eintpnd &= ~(1<<irq); |
595 | 589 | ||
596 | irq += (IRQ_EINT4 - 4); | 590 | irq += (IRQ_EINT4 - 4); |
597 | desc_handle_irq(irq, irq_desc + irq, regs); | 591 | desc_handle_irq(irq, irq_desc + irq); |
598 | } | 592 | } |
599 | 593 | ||
600 | } | 594 | } |
601 | 595 | ||
602 | static void | 596 | static void |
603 | s3c_irq_demux_extint4t7(unsigned int irq, | 597 | s3c_irq_demux_extint4t7(unsigned int irq, |
604 | struct irqdesc *desc, | 598 | struct irqdesc *desc) |
605 | struct pt_regs *regs) | ||
606 | { | 599 | { |
607 | unsigned long eintpnd = __raw_readl(S3C24XX_EINTPEND); | 600 | unsigned long eintpnd = __raw_readl(S3C24XX_EINTPEND); |
608 | unsigned long eintmsk = __raw_readl(S3C24XX_EINTMASK); | 601 | unsigned long eintmsk = __raw_readl(S3C24XX_EINTMASK); |
@@ -618,7 +611,7 @@ s3c_irq_demux_extint4t7(unsigned int irq, | |||
618 | 611 | ||
619 | irq += (IRQ_EINT4 - 4); | 612 | irq += (IRQ_EINT4 - 4); |
620 | 613 | ||
621 | desc_handle_irq(irq, irq_desc + irq, regs); | 614 | desc_handle_irq(irq, irq_desc + irq); |
622 | } | 615 | } |
623 | } | 616 | } |
624 | 617 | ||
diff --git a/arch/arm/mach-s3c2410/mach-amlm5900.c b/arch/arm/mach-s3c2410/mach-amlm5900.c index ba5109af40b4..817e2c684410 100644 --- a/arch/arm/mach-s3c2410/mach-amlm5900.c +++ b/arch/arm/mach-s3c2410/mach-amlm5900.c | |||
@@ -226,7 +226,7 @@ static struct s3c2410fb_mach_info __initdata amlm5900_lcd_info = { | |||
226 | #endif | 226 | #endif |
227 | 227 | ||
228 | static irqreturn_t | 228 | static irqreturn_t |
229 | amlm5900_wake_interrupt(int irq, void *ignored, struct pt_regs *regs) | 229 | amlm5900_wake_interrupt(int irq, void *ignored) |
230 | { | 230 | { |
231 | return IRQ_HANDLED; | 231 | return IRQ_HANDLED; |
232 | } | 232 | } |
diff --git a/arch/arm/mach-s3c2410/s3c2440-irq.c b/arch/arm/mach-s3c2410/s3c2440-irq.c index fc08febe2e54..39db0752d53b 100644 --- a/arch/arm/mach-s3c2410/s3c2440-irq.c +++ b/arch/arm/mach-s3c2410/s3c2440-irq.c | |||
@@ -42,8 +42,7 @@ | |||
42 | /* WDT/AC97 */ | 42 | /* WDT/AC97 */ |
43 | 43 | ||
44 | static void s3c_irq_demux_wdtac97(unsigned int irq, | 44 | static void s3c_irq_demux_wdtac97(unsigned int irq, |
45 | struct irqdesc *desc, | 45 | struct irqdesc *desc) |
46 | struct pt_regs *regs) | ||
47 | { | 46 | { |
48 | unsigned int subsrc, submsk; | 47 | unsigned int subsrc, submsk; |
49 | struct irqdesc *mydesc; | 48 | struct irqdesc *mydesc; |
@@ -61,11 +60,11 @@ static void s3c_irq_demux_wdtac97(unsigned int irq, | |||
61 | if (subsrc != 0) { | 60 | if (subsrc != 0) { |
62 | if (subsrc & 1) { | 61 | if (subsrc & 1) { |
63 | mydesc = irq_desc + IRQ_S3C2440_WDT; | 62 | mydesc = irq_desc + IRQ_S3C2440_WDT; |
64 | desc_handle_irq(IRQ_S3C2440_WDT, mydesc, regs); | 63 | desc_handle_irq(IRQ_S3C2440_WDT, mydesc); |
65 | } | 64 | } |
66 | if (subsrc & 2) { | 65 | if (subsrc & 2) { |
67 | mydesc = irq_desc + IRQ_S3C2440_AC97; | 66 | mydesc = irq_desc + IRQ_S3C2440_AC97; |
68 | desc_handle_irq(IRQ_S3C2440_AC97, mydesc, regs); | 67 | desc_handle_irq(IRQ_S3C2440_AC97, mydesc); |
69 | } | 68 | } |
70 | } | 69 | } |
71 | } | 70 | } |
diff --git a/arch/arm/mach-s3c2410/s3c244x-irq.c b/arch/arm/mach-s3c2410/s3c244x-irq.c index ec702f88b299..146f2109dd90 100644 --- a/arch/arm/mach-s3c2410/s3c244x-irq.c +++ b/arch/arm/mach-s3c2410/s3c244x-irq.c | |||
@@ -42,8 +42,7 @@ | |||
42 | /* camera irq */ | 42 | /* camera irq */ |
43 | 43 | ||
44 | static void s3c_irq_demux_cam(unsigned int irq, | 44 | static void s3c_irq_demux_cam(unsigned int irq, |
45 | struct irqdesc *desc, | 45 | struct irqdesc *desc) |
46 | struct pt_regs *regs) | ||
47 | { | 46 | { |
48 | unsigned int subsrc, submsk; | 47 | unsigned int subsrc, submsk; |
49 | struct irqdesc *mydesc; | 48 | struct irqdesc *mydesc; |
@@ -61,11 +60,11 @@ static void s3c_irq_demux_cam(unsigned int irq, | |||
61 | if (subsrc != 0) { | 60 | if (subsrc != 0) { |
62 | if (subsrc & 1) { | 61 | if (subsrc & 1) { |
63 | mydesc = irq_desc + IRQ_S3C2440_CAM_C; | 62 | mydesc = irq_desc + IRQ_S3C2440_CAM_C; |
64 | desc_handle_irq(IRQ_S3C2440_CAM_C, mydesc, regs); | 63 | desc_handle_irq(IRQ_S3C2440_CAM_C, mydesc); |
65 | } | 64 | } |
66 | if (subsrc & 2) { | 65 | if (subsrc & 2) { |
67 | mydesc = irq_desc + IRQ_S3C2440_CAM_P; | 66 | mydesc = irq_desc + IRQ_S3C2440_CAM_P; |
68 | desc_handle_irq(IRQ_S3C2440_CAM_P, mydesc, regs); | 67 | desc_handle_irq(IRQ_S3C2440_CAM_P, mydesc); |
69 | } | 68 | } |
70 | } | 69 | } |
71 | } | 70 | } |
diff --git a/arch/arm/mach-s3c2410/time.c b/arch/arm/mach-s3c2410/time.c index 00d1cfca9712..9910bf0f2cea 100644 --- a/arch/arm/mach-s3c2410/time.c +++ b/arch/arm/mach-s3c2410/time.c | |||
@@ -128,10 +128,10 @@ static unsigned long s3c2410_gettimeoffset (void) | |||
128 | * IRQ handler for the timer | 128 | * IRQ handler for the timer |
129 | */ | 129 | */ |
130 | static irqreturn_t | 130 | static irqreturn_t |
131 | s3c2410_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 131 | s3c2410_timer_interrupt(int irq, void *dev_id) |
132 | { | 132 | { |
133 | write_seqlock(&xtime_lock); | 133 | write_seqlock(&xtime_lock); |
134 | timer_tick(regs); | 134 | timer_tick(); |
135 | write_sequnlock(&xtime_lock); | 135 | write_sequnlock(&xtime_lock); |
136 | return IRQ_HANDLED; | 136 | return IRQ_HANDLED; |
137 | } | 137 | } |
diff --git a/arch/arm/mach-s3c2410/usb-simtec.c b/arch/arm/mach-s3c2410/usb-simtec.c index c635efa7cd31..22b0e1cdd4bf 100644 --- a/arch/arm/mach-s3c2410/usb-simtec.c +++ b/arch/arm/mach-s3c2410/usb-simtec.c | |||
@@ -58,7 +58,7 @@ usb_simtec_powercontrol(int port, int to) | |||
58 | } | 58 | } |
59 | 59 | ||
60 | static irqreturn_t | 60 | static irqreturn_t |
61 | usb_simtec_ocirq(int irq, void *pw, struct pt_regs *regs) | 61 | usb_simtec_ocirq(int irq, void *pw) |
62 | { | 62 | { |
63 | struct s3c2410_hcd_info *info = (struct s3c2410_hcd_info *)pw; | 63 | struct s3c2410_hcd_info *info = (struct s3c2410_hcd_info *)pw; |
64 | 64 | ||
diff --git a/arch/arm/mach-sa1100/dma.c b/arch/arm/mach-sa1100/dma.c index 2ea2a657a034..1fbe053e8b59 100644 --- a/arch/arm/mach-sa1100/dma.c +++ b/arch/arm/mach-sa1100/dma.c | |||
@@ -42,7 +42,7 @@ static sa1100_dma_t dma_chan[SA1100_DMA_CHANNELS]; | |||
42 | static spinlock_t dma_list_lock; | 42 | static spinlock_t dma_list_lock; |
43 | 43 | ||
44 | 44 | ||
45 | static irqreturn_t dma_irq_handler(int irq, void *dev_id, struct pt_regs *regs) | 45 | static irqreturn_t dma_irq_handler(int irq, void *dev_id) |
46 | { | 46 | { |
47 | dma_regs_t *dma_regs = dev_id; | 47 | dma_regs_t *dma_regs = dev_id; |
48 | sa1100_dma_t *dma = dma_chan + (((u_int)dma_regs >> 5) & 7); | 48 | sa1100_dma_t *dma = dma_chan + (((u_int)dma_regs >> 5) & 7); |
diff --git a/arch/arm/mach-sa1100/h3600.c b/arch/arm/mach-sa1100/h3600.c index 7364478cec12..fa6dc71bd6ad 100644 --- a/arch/arm/mach-sa1100/h3600.c +++ b/arch/arm/mach-sa1100/h3600.c | |||
@@ -702,7 +702,7 @@ static u32 gpio_irq_mask[] = { | |||
702 | GPIO2_SD_CON_SLT, | 702 | GPIO2_SD_CON_SLT, |
703 | }; | 703 | }; |
704 | 704 | ||
705 | static void h3800_IRQ_demux(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 705 | static void h3800_IRQ_demux(unsigned int irq, struct irqdesc *desc) |
706 | { | 706 | { |
707 | int i; | 707 | int i; |
708 | 708 | ||
@@ -719,14 +719,14 @@ static void h3800_IRQ_demux(unsigned int irq, struct irqdesc *desc, struct pt_re | |||
719 | if (0) printk("%s KPIO 0x%08X\n", __FUNCTION__, irq); | 719 | if (0) printk("%s KPIO 0x%08X\n", __FUNCTION__, irq); |
720 | for (j = 0; j < H3800_KPIO_IRQ_COUNT; j++) | 720 | for (j = 0; j < H3800_KPIO_IRQ_COUNT; j++) |
721 | if (irq & kpio_irq_mask[j]) | 721 | if (irq & kpio_irq_mask[j]) |
722 | do_edge_IRQ(H3800_KPIO_IRQ_COUNT + j, irq_desc + H3800_KPIO_IRQ_COUNT + j, regs); | 722 | do_edge_IRQ(H3800_KPIO_IRQ_COUNT + j, irq_desc + H3800_KPIO_IRQ_COUNT + j); |
723 | 723 | ||
724 | /* GPIO2 */ | 724 | /* GPIO2 */ |
725 | irq = H3800_ASIC2_GPIINTFLAG; | 725 | irq = H3800_ASIC2_GPIINTFLAG; |
726 | if (0) printk("%s GPIO 0x%08X\n", __FUNCTION__, irq); | 726 | if (0) printk("%s GPIO 0x%08X\n", __FUNCTION__, irq); |
727 | for (j = 0; j < H3800_GPIO_IRQ_COUNT; j++) | 727 | for (j = 0; j < H3800_GPIO_IRQ_COUNT; j++) |
728 | if (irq & gpio_irq_mask[j]) | 728 | if (irq & gpio_irq_mask[j]) |
729 | do_edge_IRQ(H3800_GPIO_IRQ_COUNT + j, irq_desc + H3800_GPIO_IRQ_COUNT + j , regs); | 729 | do_edge_IRQ(H3800_GPIO_IRQ_COUNT + j, irq_desc + H3800_GPIO_IRQ_COUNT + j); |
730 | } | 730 | } |
731 | 731 | ||
732 | if (i >= MAX_ASIC_ISR_LOOPS) | 732 | if (i >= MAX_ASIC_ISR_LOOPS) |
diff --git a/arch/arm/mach-sa1100/irq.c b/arch/arm/mach-sa1100/irq.c index b55b90a2e8fe..f4c6322ca33e 100644 --- a/arch/arm/mach-sa1100/irq.c +++ b/arch/arm/mach-sa1100/irq.c | |||
@@ -110,8 +110,7 @@ static struct irq_chip sa1100_low_gpio_chip = { | |||
110 | * and call the handler. | 110 | * and call the handler. |
111 | */ | 111 | */ |
112 | static void | 112 | static void |
113 | sa1100_high_gpio_handler(unsigned int irq, struct irqdesc *desc, | 113 | sa1100_high_gpio_handler(unsigned int irq, struct irqdesc *desc) |
114 | struct pt_regs *regs) | ||
115 | { | 114 | { |
116 | unsigned int mask; | 115 | unsigned int mask; |
117 | 116 | ||
@@ -128,7 +127,7 @@ sa1100_high_gpio_handler(unsigned int irq, struct irqdesc *desc, | |||
128 | mask >>= 11; | 127 | mask >>= 11; |
129 | do { | 128 | do { |
130 | if (mask & 1) | 129 | if (mask & 1) |
131 | desc_handle_irq(irq, desc, regs); | 130 | desc_handle_irq(irq, desc); |
132 | mask >>= 1; | 131 | mask >>= 1; |
133 | irq++; | 132 | irq++; |
134 | desc++; | 133 | desc++; |
diff --git a/arch/arm/mach-sa1100/neponset.c b/arch/arm/mach-sa1100/neponset.c index af6d2775cf82..354d5e91da59 100644 --- a/arch/arm/mach-sa1100/neponset.c +++ b/arch/arm/mach-sa1100/neponset.c | |||
@@ -29,7 +29,7 @@ | |||
29 | * is rather unfortunate. | 29 | * is rather unfortunate. |
30 | */ | 30 | */ |
31 | static void | 31 | static void |
32 | neponset_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 32 | neponset_irq_handler(unsigned int irq, struct irqdesc *desc) |
33 | { | 33 | { |
34 | unsigned int irr; | 34 | unsigned int irr; |
35 | 35 | ||
@@ -69,12 +69,12 @@ neponset_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *reg | |||
69 | 69 | ||
70 | if (irr & IRR_ETHERNET) { | 70 | if (irr & IRR_ETHERNET) { |
71 | d = irq_desc + IRQ_NEPONSET_SMC9196; | 71 | d = irq_desc + IRQ_NEPONSET_SMC9196; |
72 | desc_handle_irq(IRQ_NEPONSET_SMC9196, d, regs); | 72 | desc_handle_irq(IRQ_NEPONSET_SMC9196, d); |
73 | } | 73 | } |
74 | 74 | ||
75 | if (irr & IRR_USAR) { | 75 | if (irr & IRR_USAR) { |
76 | d = irq_desc + IRQ_NEPONSET_USAR; | 76 | d = irq_desc + IRQ_NEPONSET_USAR; |
77 | desc_handle_irq(IRQ_NEPONSET_USAR, d, regs); | 77 | desc_handle_irq(IRQ_NEPONSET_USAR, d); |
78 | } | 78 | } |
79 | 79 | ||
80 | desc->chip->unmask(irq); | 80 | desc->chip->unmask(irq); |
@@ -82,7 +82,7 @@ neponset_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *reg | |||
82 | 82 | ||
83 | if (irr & IRR_SA1111) { | 83 | if (irr & IRR_SA1111) { |
84 | d = irq_desc + IRQ_NEPONSET_SA1111; | 84 | d = irq_desc + IRQ_NEPONSET_SA1111; |
85 | desc_handle_irq(IRQ_NEPONSET_SA1111, d, regs); | 85 | desc_handle_irq(IRQ_NEPONSET_SA1111, d); |
86 | } | 86 | } |
87 | } | 87 | } |
88 | } | 88 | } |
diff --git a/arch/arm/mach-sa1100/ssp.c b/arch/arm/mach-sa1100/ssp.c index 5eba5fbbb561..59703c6fb29b 100644 --- a/arch/arm/mach-sa1100/ssp.c +++ b/arch/arm/mach-sa1100/ssp.c | |||
@@ -25,7 +25,7 @@ | |||
25 | 25 | ||
26 | #define TIMEOUT 100000 | 26 | #define TIMEOUT 100000 |
27 | 27 | ||
28 | static irqreturn_t ssp_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 28 | static irqreturn_t ssp_interrupt(int irq, void *dev_id) |
29 | { | 29 | { |
30 | unsigned int status = Ser4SSSR; | 30 | unsigned int status = Ser4SSSR; |
31 | 31 | ||
diff --git a/arch/arm/mach-sa1100/time.c b/arch/arm/mach-sa1100/time.c index 49ae716e16c2..4284bd6f7a1f 100644 --- a/arch/arm/mach-sa1100/time.c +++ b/arch/arm/mach-sa1100/time.c | |||
@@ -77,7 +77,7 @@ static int match_posponed; | |||
77 | #endif | 77 | #endif |
78 | 78 | ||
79 | static irqreturn_t | 79 | static irqreturn_t |
80 | sa1100_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 80 | sa1100_timer_interrupt(int irq, void *dev_id) |
81 | { | 81 | { |
82 | unsigned int next_match; | 82 | unsigned int next_match; |
83 | 83 | ||
@@ -99,7 +99,7 @@ sa1100_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
99 | * handlers. | 99 | * handlers. |
100 | */ | 100 | */ |
101 | do { | 101 | do { |
102 | timer_tick(regs); | 102 | timer_tick(); |
103 | OSSR = OSSR_M0; /* Clear match on timer 0 */ | 103 | OSSR = OSSR_M0; /* Clear match on timer 0 */ |
104 | next_match = (OSMR0 += LATCH); | 104 | next_match = (OSMR0 += LATCH); |
105 | } while ((signed long)(next_match - OSCR) <= 0); | 105 | } while ((signed long)(next_match - OSCR) <= 0); |
@@ -151,13 +151,13 @@ static void sa1100_dyn_tick_reprogram(unsigned long ticks) | |||
151 | } | 151 | } |
152 | 152 | ||
153 | static irqreturn_t | 153 | static irqreturn_t |
154 | sa1100_dyn_tick_handler(int irq, void *dev_id, struct pt_regs *regs) | 154 | sa1100_dyn_tick_handler(int irq, void *dev_id) |
155 | { | 155 | { |
156 | if (match_posponed) { | 156 | if (match_posponed) { |
157 | match_posponed = 0; | 157 | match_posponed = 0; |
158 | OSMR0 = initial_match; | 158 | OSMR0 = initial_match; |
159 | if ((signed long)(initial_match - OSCR) <= 0) | 159 | if ((signed long)(initial_match - OSCR) <= 0) |
160 | return sa1100_timer_interrupt(irq, dev_id, regs); | 160 | return sa1100_timer_interrupt(irq, dev_id); |
161 | } | 161 | } |
162 | return IRQ_NONE; | 162 | return IRQ_NONE; |
163 | } | 163 | } |
diff --git a/arch/arm/mach-shark/core.c b/arch/arm/mach-shark/core.c index 1095df34fec0..0e480fae8ec5 100644 --- a/arch/arm/mach-shark/core.c +++ b/arch/arm/mach-shark/core.c | |||
@@ -80,10 +80,10 @@ static void __init shark_map_io(void) | |||
80 | #define HZ_TIME ((1193180 + HZ/2) / HZ) | 80 | #define HZ_TIME ((1193180 + HZ/2) / HZ) |
81 | 81 | ||
82 | static irqreturn_t | 82 | static irqreturn_t |
83 | shark_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 83 | shark_timer_interrupt(int irq, void *dev_id) |
84 | { | 84 | { |
85 | write_seqlock(&xtime_lock); | 85 | write_seqlock(&xtime_lock); |
86 | timer_tick(regs); | 86 | timer_tick(); |
87 | write_sequnlock(&xtime_lock); | 87 | write_sequnlock(&xtime_lock); |
88 | return IRQ_HANDLED; | 88 | return IRQ_HANDLED; |
89 | } | 89 | } |
diff --git a/arch/arm/mach-shark/irq.c b/arch/arm/mach-shark/irq.c index b227052296cf..297ecf130650 100644 --- a/arch/arm/mach-shark/irq.c +++ b/arch/arm/mach-shark/irq.c | |||
@@ -61,7 +61,7 @@ static void shark_enable_8259A_irq(unsigned int irq) | |||
61 | 61 | ||
62 | static void shark_ack_8259A_irq(unsigned int irq){} | 62 | static void shark_ack_8259A_irq(unsigned int irq){} |
63 | 63 | ||
64 | static irqreturn_t bogus_int(int irq, void *dev_id, struct pt_regs *regs) | 64 | static irqreturn_t bogus_int(int irq, void *dev_id) |
65 | { | 65 | { |
66 | printk("Got interrupt %i!\n",irq); | 66 | printk("Got interrupt %i!\n",irq); |
67 | return IRQ_NONE; | 67 | return IRQ_NONE; |
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c index f2bbef07b1e4..2aa150b57ba1 100644 --- a/arch/arm/mach-versatile/core.c +++ b/arch/arm/mach-versatile/core.c | |||
@@ -77,12 +77,12 @@ static struct irq_chip sic_chip = { | |||
77 | }; | 77 | }; |
78 | 78 | ||
79 | static void | 79 | static void |
80 | sic_handle_irq(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | 80 | sic_handle_irq(unsigned int irq, struct irqdesc *desc) |
81 | { | 81 | { |
82 | unsigned long status = readl(VA_SIC_BASE + SIC_IRQ_STATUS); | 82 | unsigned long status = readl(VA_SIC_BASE + SIC_IRQ_STATUS); |
83 | 83 | ||
84 | if (status == 0) { | 84 | if (status == 0) { |
85 | do_bad_IRQ(irq, desc, regs); | 85 | do_bad_IRQ(irq, desc); |
86 | return; | 86 | return; |
87 | } | 87 | } |
88 | 88 | ||
@@ -93,7 +93,7 @@ sic_handle_irq(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) | |||
93 | irq += IRQ_SIC_START; | 93 | irq += IRQ_SIC_START; |
94 | 94 | ||
95 | desc = irq_desc + irq; | 95 | desc = irq_desc + irq; |
96 | desc_handle_irq(irq, desc, regs); | 96 | desc_handle_irq(irq, desc); |
97 | } while (status); | 97 | } while (status); |
98 | } | 98 | } |
99 | 99 | ||
@@ -851,14 +851,14 @@ static unsigned long versatile_gettimeoffset(void) | |||
851 | /* | 851 | /* |
852 | * IRQ handler for the timer | 852 | * IRQ handler for the timer |
853 | */ | 853 | */ |
854 | static irqreturn_t versatile_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 854 | static irqreturn_t versatile_timer_interrupt(int irq, void *dev_id) |
855 | { | 855 | { |
856 | write_seqlock(&xtime_lock); | 856 | write_seqlock(&xtime_lock); |
857 | 857 | ||
858 | // ...clear the interrupt | 858 | // ...clear the interrupt |
859 | writel(1, TIMER0_VA_BASE + TIMER_INTCLR); | 859 | writel(1, TIMER0_VA_BASE + TIMER_INTCLR); |
860 | 860 | ||
861 | timer_tick(regs); | 861 | timer_tick(); |
862 | 862 | ||
863 | write_sequnlock(&xtime_lock); | 863 | write_sequnlock(&xtime_lock); |
864 | 864 | ||
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c index 591fc3187c7f..465440592791 100644 --- a/arch/arm/mm/ioremap.c +++ b/arch/arm/mm/ioremap.c | |||
@@ -361,14 +361,14 @@ __ioremap(unsigned long phys_addr, size_t size, unsigned long flags) | |||
361 | } | 361 | } |
362 | EXPORT_SYMBOL(__ioremap); | 362 | EXPORT_SYMBOL(__ioremap); |
363 | 363 | ||
364 | void __iounmap(void __iomem *addr) | 364 | void __iounmap(volatile void __iomem *addr) |
365 | { | 365 | { |
366 | #ifndef CONFIG_SMP | 366 | #ifndef CONFIG_SMP |
367 | struct vm_struct **p, *tmp; | 367 | struct vm_struct **p, *tmp; |
368 | #endif | 368 | #endif |
369 | unsigned int section_mapping = 0; | 369 | unsigned int section_mapping = 0; |
370 | 370 | ||
371 | addr = (void __iomem *)(PAGE_MASK & (unsigned long)addr); | 371 | addr = (volatile void __iomem *)(PAGE_MASK & (unsigned long)addr); |
372 | 372 | ||
373 | #ifndef CONFIG_SMP | 373 | #ifndef CONFIG_SMP |
374 | /* | 374 | /* |
@@ -395,6 +395,6 @@ void __iounmap(void __iomem *addr) | |||
395 | #endif | 395 | #endif |
396 | 396 | ||
397 | if (!section_mapping) | 397 | if (!section_mapping) |
398 | vunmap(addr); | 398 | vunmap((void __force *)addr); |
399 | } | 399 | } |
400 | EXPORT_SYMBOL(__iounmap); | 400 | EXPORT_SYMBOL(__iounmap); |
diff --git a/arch/arm/oprofile/op_model_xscale.c b/arch/arm/oprofile/op_model_xscale.c index 726ad2b3b435..7899d3ca75a3 100644 --- a/arch/arm/oprofile/op_model_xscale.c +++ b/arch/arm/oprofile/op_model_xscale.c | |||
@@ -341,7 +341,7 @@ static void inline __xsc2_check_ctrs(void) | |||
341 | __asm__ __volatile__ ("mcr p14, 0, %0, c5, c1, 0" : : "r" (flag)); | 341 | __asm__ __volatile__ ("mcr p14, 0, %0, c5, c1, 0" : : "r" (flag)); |
342 | } | 342 | } |
343 | 343 | ||
344 | static irqreturn_t xscale_pmu_interrupt(int irq, void *arg, struct pt_regs *regs) | 344 | static irqreturn_t xscale_pmu_interrupt(int irq, void *arg) |
345 | { | 345 | { |
346 | int i; | 346 | int i; |
347 | u32 pmnc; | 347 | u32 pmnc; |
@@ -356,7 +356,7 @@ static irqreturn_t xscale_pmu_interrupt(int irq, void *arg, struct pt_regs *regs | |||
356 | continue; | 356 | continue; |
357 | 357 | ||
358 | write_counter(i, -(u32)results[i].reset_counter); | 358 | write_counter(i, -(u32)results[i].reset_counter); |
359 | oprofile_add_sample(regs, i); | 359 | oprofile_add_sample(get_irq_regs(), i); |
360 | results[i].ovf--; | 360 | results[i].ovf--; |
361 | } | 361 | } |
362 | 362 | ||
diff --git a/arch/arm/plat-iop/time.c b/arch/arm/plat-iop/time.c index 06282dffbdc6..f530abdaa7a1 100644 --- a/arch/arm/plat-iop/time.c +++ b/arch/arm/plat-iop/time.c | |||
@@ -47,7 +47,7 @@ unsigned long iop3xx_gettimeoffset(void) | |||
47 | } | 47 | } |
48 | 48 | ||
49 | static irqreturn_t | 49 | static irqreturn_t |
50 | iop3xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 50 | iop3xx_timer_interrupt(int irq, void *dev_id) |
51 | { | 51 | { |
52 | write_seqlock(&xtime_lock); | 52 | write_seqlock(&xtime_lock); |
53 | 53 | ||
@@ -57,7 +57,7 @@ iop3xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
57 | 57 | ||
58 | while ((signed long)(next_jiffy_time - *IOP3XX_TU_TCR1) | 58 | while ((signed long)(next_jiffy_time - *IOP3XX_TU_TCR1) |
59 | >= ticks_per_jiffy) { | 59 | >= ticks_per_jiffy) { |
60 | timer_tick(regs); | 60 | timer_tick(); |
61 | next_jiffy_time -= ticks_per_jiffy; | 61 | next_jiffy_time -= ticks_per_jiffy; |
62 | } | 62 | } |
63 | 63 | ||
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index 1bbb431843ce..bb045e5ddbd8 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c | |||
@@ -899,8 +899,7 @@ static int omap1_dma_handle_ch(int ch) | |||
899 | return 1; | 899 | return 1; |
900 | } | 900 | } |
901 | 901 | ||
902 | static irqreturn_t omap1_dma_irq_handler(int irq, void *dev_id, | 902 | static irqreturn_t omap1_dma_irq_handler(int irq, void *dev_id) |
903 | struct pt_regs *regs) | ||
904 | { | 903 | { |
905 | int ch = ((int) dev_id) - 1; | 904 | int ch = ((int) dev_id) - 1; |
906 | int handled = 0; | 905 | int handled = 0; |
@@ -962,8 +961,7 @@ static int omap2_dma_handle_ch(int ch) | |||
962 | } | 961 | } |
963 | 962 | ||
964 | /* STATUS register count is from 1-32 while our is 0-31 */ | 963 | /* STATUS register count is from 1-32 while our is 0-31 */ |
965 | static irqreturn_t omap2_dma_irq_handler(int irq, void *dev_id, | 964 | static irqreturn_t omap2_dma_irq_handler(int irq, void *dev_id) |
966 | struct pt_regs *regs) | ||
967 | { | 965 | { |
968 | u32 val; | 966 | u32 val; |
969 | int i; | 967 | int i; |
@@ -1220,8 +1218,7 @@ static void set_b1_regs(void) | |||
1220 | omap_writew(fi, OMAP1610_DMA_LCD_SRC_FI_B1_L); | 1218 | omap_writew(fi, OMAP1610_DMA_LCD_SRC_FI_B1_L); |
1221 | } | 1219 | } |
1222 | 1220 | ||
1223 | static irqreturn_t lcd_dma_irq_handler(int irq, void *dev_id, | 1221 | static irqreturn_t lcd_dma_irq_handler(int irq, void *dev_id) |
1224 | struct pt_regs *regs) | ||
1225 | { | 1222 | { |
1226 | u16 w; | 1223 | u16 w; |
1227 | 1224 | ||
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index f55f99ae58ae..8162eed8b500 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c | |||
@@ -783,8 +783,7 @@ void omap_free_gpio(int gpio) | |||
783 | * line's interrupt handler has been run, we may miss some nested | 783 | * line's interrupt handler has been run, we may miss some nested |
784 | * interrupts. | 784 | * interrupts. |
785 | */ | 785 | */ |
786 | static void gpio_irq_handler(unsigned int irq, struct irqdesc *desc, | 786 | static void gpio_irq_handler(unsigned int irq, struct irqdesc *desc) |
787 | struct pt_regs *regs) | ||
788 | { | 787 | { |
789 | void __iomem *isr_reg = NULL; | 788 | void __iomem *isr_reg = NULL; |
790 | u32 isr; | 789 | u32 isr; |
@@ -882,7 +881,7 @@ static void gpio_irq_handler(unsigned int irq, struct irqdesc *desc, | |||
882 | continue; | 881 | continue; |
883 | } | 882 | } |
884 | 883 | ||
885 | desc_handle_irq(gpio_irq, d, regs); | 884 | desc_handle_irq(gpio_irq, d); |
886 | 885 | ||
887 | if (unlikely((d->status & IRQ_PENDING) && !d->depth)) { | 886 | if (unlikely((d->status & IRQ_PENDING) && !d->depth)) { |
888 | irq_mask = 1 << | 887 | irq_mask = 1 << |
diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c index ade9a0fa6ef6..ec50008a2df6 100644 --- a/arch/arm/plat-omap/mcbsp.c +++ b/arch/arm/plat-omap/mcbsp.c | |||
@@ -96,7 +96,7 @@ static void omap_mcbsp_dump_reg(u8 id) | |||
96 | DBG("***********************\n"); | 96 | DBG("***********************\n"); |
97 | } | 97 | } |
98 | 98 | ||
99 | static irqreturn_t omap_mcbsp_tx_irq_handler(int irq, void *dev_id, struct pt_regs *regs) | 99 | static irqreturn_t omap_mcbsp_tx_irq_handler(int irq, void *dev_id) |
100 | { | 100 | { |
101 | struct omap_mcbsp * mcbsp_tx = (struct omap_mcbsp *)(dev_id); | 101 | struct omap_mcbsp * mcbsp_tx = (struct omap_mcbsp *)(dev_id); |
102 | 102 | ||
@@ -106,7 +106,7 @@ static irqreturn_t omap_mcbsp_tx_irq_handler(int irq, void *dev_id, struct pt_re | |||
106 | return IRQ_HANDLED; | 106 | return IRQ_HANDLED; |
107 | } | 107 | } |
108 | 108 | ||
109 | static irqreturn_t omap_mcbsp_rx_irq_handler(int irq, void *dev_id, struct pt_regs *regs) | 109 | static irqreturn_t omap_mcbsp_rx_irq_handler(int irq, void *dev_id) |
110 | { | 110 | { |
111 | struct omap_mcbsp * mcbsp_rx = (struct omap_mcbsp *)(dev_id); | 111 | struct omap_mcbsp * mcbsp_rx = (struct omap_mcbsp *)(dev_id); |
112 | 112 | ||
diff --git a/arch/arm/plat-omap/timer32k.c b/arch/arm/plat-omap/timer32k.c index cf6df3378d37..265310601161 100644 --- a/arch/arm/plat-omap/timer32k.c +++ b/arch/arm/plat-omap/timer32k.c | |||
@@ -194,8 +194,7 @@ unsigned long long sched_clock(void) | |||
194 | * issues with dynamic tick. In the dynamic tick case, we need to lock | 194 | * issues with dynamic tick. In the dynamic tick case, we need to lock |
195 | * with irqsave. | 195 | * with irqsave. |
196 | */ | 196 | */ |
197 | static inline irqreturn_t _omap_32k_timer_interrupt(int irq, void *dev_id, | 197 | static inline irqreturn_t _omap_32k_timer_interrupt(int irq, void *dev_id) |
198 | struct pt_regs *regs) | ||
199 | { | 198 | { |
200 | unsigned long now; | 199 | unsigned long now; |
201 | 200 | ||
@@ -205,7 +204,7 @@ static inline irqreturn_t _omap_32k_timer_interrupt(int irq, void *dev_id, | |||
205 | while ((signed long)(now - omap_32k_last_tick) | 204 | while ((signed long)(now - omap_32k_last_tick) |
206 | >= OMAP_32K_TICKS_PER_HZ) { | 205 | >= OMAP_32K_TICKS_PER_HZ) { |
207 | omap_32k_last_tick += OMAP_32K_TICKS_PER_HZ; | 206 | omap_32k_last_tick += OMAP_32K_TICKS_PER_HZ; |
208 | timer_tick(regs); | 207 | timer_tick(); |
209 | } | 208 | } |
210 | 209 | ||
211 | /* Restart timer so we don't drift off due to modulo or dynamic tick. | 210 | /* Restart timer so we don't drift off due to modulo or dynamic tick. |
@@ -218,19 +217,17 @@ static inline irqreturn_t _omap_32k_timer_interrupt(int irq, void *dev_id, | |||
218 | return IRQ_HANDLED; | 217 | return IRQ_HANDLED; |
219 | } | 218 | } |
220 | 219 | ||
221 | static irqreturn_t omap_32k_timer_handler(int irq, void *dev_id, | 220 | static irqreturn_t omap_32k_timer_handler(int irq, void *dev_id) |
222 | struct pt_regs *regs) | ||
223 | { | 221 | { |
224 | return _omap_32k_timer_interrupt(irq, dev_id, regs); | 222 | return _omap_32k_timer_interrupt(irq, dev_id); |
225 | } | 223 | } |
226 | 224 | ||
227 | static irqreturn_t omap_32k_timer_interrupt(int irq, void *dev_id, | 225 | static irqreturn_t omap_32k_timer_interrupt(int irq, void *dev_id) |
228 | struct pt_regs *regs) | ||
229 | { | 226 | { |
230 | unsigned long flags; | 227 | unsigned long flags; |
231 | 228 | ||
232 | write_seqlock_irqsave(&xtime_lock, flags); | 229 | write_seqlock_irqsave(&xtime_lock, flags); |
233 | _omap_32k_timer_interrupt(irq, dev_id, regs); | 230 | _omap_32k_timer_interrupt(irq, dev_id); |
234 | write_sequnlock_irqrestore(&xtime_lock, flags); | 231 | write_sequnlock_irqrestore(&xtime_lock, flags); |
235 | 232 | ||
236 | return IRQ_HANDLED; | 233 | return IRQ_HANDLED; |
diff --git a/arch/i386/kernel/apic.c b/arch/i386/kernel/apic.c index 7d500da0e63b..2fd4b7d927c2 100644 --- a/arch/i386/kernel/apic.c +++ b/arch/i386/kernel/apic.c | |||
@@ -1197,7 +1197,7 @@ inline void smp_local_timer_interrupt(void) | |||
1197 | { | 1197 | { |
1198 | profile_tick(CPU_PROFILING); | 1198 | profile_tick(CPU_PROFILING); |
1199 | #ifdef CONFIG_SMP | 1199 | #ifdef CONFIG_SMP |
1200 | update_process_times(user_mode_vm(irq_regs)); | 1200 | update_process_times(user_mode_vm(get_irq_regs())); |
1201 | #endif | 1201 | #endif |
1202 | 1202 | ||
1203 | /* | 1203 | /* |
diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c index b7287fb499f3..cd082c36ca03 100644 --- a/arch/i386/kernel/io_apic.c +++ b/arch/i386/kernel/io_apic.c | |||
@@ -1184,8 +1184,8 @@ static int __assign_irq_vector(int irq) | |||
1184 | 1184 | ||
1185 | BUG_ON((unsigned)irq >= NR_IRQ_VECTORS); | 1185 | BUG_ON((unsigned)irq >= NR_IRQ_VECTORS); |
1186 | 1186 | ||
1187 | if (IO_APIC_VECTOR(irq) > 0) | 1187 | if (irq_vector[irq] > 0) |
1188 | return IO_APIC_VECTOR(irq); | 1188 | return irq_vector[irq]; |
1189 | 1189 | ||
1190 | current_vector += 8; | 1190 | current_vector += 8; |
1191 | if (current_vector == SYSCALL_VECTOR) | 1191 | if (current_vector == SYSCALL_VECTOR) |
@@ -1199,7 +1199,7 @@ static int __assign_irq_vector(int irq) | |||
1199 | } | 1199 | } |
1200 | 1200 | ||
1201 | vector = current_vector; | 1201 | vector = current_vector; |
1202 | IO_APIC_VECTOR(irq) = vector; | 1202 | irq_vector[irq] = vector; |
1203 | 1203 | ||
1204 | return vector; | 1204 | return vector; |
1205 | } | 1205 | } |
@@ -1967,7 +1967,7 @@ static void ack_ioapic_quirk_irq(unsigned int irq) | |||
1967 | * operation to prevent an edge-triggered interrupt escaping meanwhile. | 1967 | * operation to prevent an edge-triggered interrupt escaping meanwhile. |
1968 | * The idea is from Manfred Spraul. --macro | 1968 | * The idea is from Manfred Spraul. --macro |
1969 | */ | 1969 | */ |
1970 | i = IO_APIC_VECTOR(irq); | 1970 | i = irq_vector[irq]; |
1971 | 1971 | ||
1972 | v = apic_read(APIC_TMR + ((i & ~0x1f) >> 1)); | 1972 | v = apic_read(APIC_TMR + ((i & ~0x1f) >> 1)); |
1973 | 1973 | ||
@@ -1984,7 +1984,7 @@ static void ack_ioapic_quirk_irq(unsigned int irq) | |||
1984 | 1984 | ||
1985 | static int ioapic_retrigger_irq(unsigned int irq) | 1985 | static int ioapic_retrigger_irq(unsigned int irq) |
1986 | { | 1986 | { |
1987 | send_IPI_self(IO_APIC_VECTOR(irq)); | 1987 | send_IPI_self(irq_vector[irq]); |
1988 | 1988 | ||
1989 | return 1; | 1989 | return 1; |
1990 | } | 1990 | } |
@@ -2020,7 +2020,7 @@ static inline void init_IO_APIC_traps(void) | |||
2020 | */ | 2020 | */ |
2021 | for (irq = 0; irq < NR_IRQS ; irq++) { | 2021 | for (irq = 0; irq < NR_IRQS ; irq++) { |
2022 | int tmp = irq; | 2022 | int tmp = irq; |
2023 | if (IO_APIC_IRQ(tmp) && !IO_APIC_VECTOR(tmp)) { | 2023 | if (IO_APIC_IRQ(tmp) && !irq_vector[tmp]) { |
2024 | /* | 2024 | /* |
2025 | * Hmm.. We don't have an entry for this, | 2025 | * Hmm.. We don't have an entry for this, |
2026 | * so default to an old-fashioned 8259 | 2026 | * so default to an old-fashioned 8259 |
diff --git a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c index 3f221f5eb47e..78af572fd17c 100644 --- a/arch/i386/kernel/time.c +++ b/arch/i386/kernel/time.c | |||
@@ -201,8 +201,8 @@ irqreturn_t timer_interrupt(int irq, void *dev_id) | |||
201 | high bit of the PPI port B (0x61). Note that some PS/2s, | 201 | high bit of the PPI port B (0x61). Note that some PS/2s, |
202 | notably the 55SX, work fine if this is removed. */ | 202 | notably the 55SX, work fine if this is removed. */ |
203 | 203 | ||
204 | irq = inb_p( 0x61 ); /* read the current state */ | 204 | u8 irq_v = inb_p( 0x61 ); /* read the current state */ |
205 | outb_p( irq|0x80, 0x61 ); /* reset the IRQ */ | 205 | outb_p( irq_v|0x80, 0x61 ); /* reset the IRQ */ |
206 | } | 206 | } |
207 | 207 | ||
208 | write_sequnlock(&xtime_lock); | 208 | write_sequnlock(&xtime_lock); |
diff --git a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c index 47f02af74be3..dbc4aae91959 100644 --- a/arch/i386/pci/irq.c +++ b/arch/i386/pci/irq.c | |||
@@ -1141,10 +1141,6 @@ static int pirq_enable_irq(struct pci_dev *dev) | |||
1141 | } | 1141 | } |
1142 | dev = temp_dev; | 1142 | dev = temp_dev; |
1143 | if (irq >= 0) { | 1143 | if (irq >= 0) { |
1144 | #ifdef CONFIG_PCI_MSI | ||
1145 | if (!platform_legacy_irq(irq)) | ||
1146 | irq = IO_APIC_VECTOR(irq); | ||
1147 | #endif | ||
1148 | printk(KERN_INFO "PCI->APIC IRQ transform: %s[%c] -> IRQ %d\n", | 1144 | printk(KERN_INFO "PCI->APIC IRQ transform: %s[%c] -> IRQ %d\n", |
1149 | pci_name(dev), 'A' + pin, irq); | 1145 | pci_name(dev), 'A' + pin, irq); |
1150 | dev->irq = irq; | 1146 | dev->irq = irq; |
diff --git a/arch/ia64/hp/sim/simeth.c b/arch/ia64/hp/sim/simeth.c index e1a1b11473e2..424e9257c9a0 100644 --- a/arch/ia64/hp/sim/simeth.c +++ b/arch/ia64/hp/sim/simeth.c | |||
@@ -54,7 +54,7 @@ static int simeth_close(struct net_device *dev); | |||
54 | static int simeth_tx(struct sk_buff *skb, struct net_device *dev); | 54 | static int simeth_tx(struct sk_buff *skb, struct net_device *dev); |
55 | static int simeth_rx(struct net_device *dev); | 55 | static int simeth_rx(struct net_device *dev); |
56 | static struct net_device_stats *simeth_get_stats(struct net_device *dev); | 56 | static struct net_device_stats *simeth_get_stats(struct net_device *dev); |
57 | static irqreturn_t simeth_interrupt(int irq, void *dev_id, struct pt_regs * regs); | 57 | static irqreturn_t simeth_interrupt(int irq, void *dev_id); |
58 | static void set_multicast_list(struct net_device *dev); | 58 | static void set_multicast_list(struct net_device *dev); |
59 | static int simeth_device_event(struct notifier_block *this,unsigned long event, void *ptr); | 59 | static int simeth_device_event(struct notifier_block *this,unsigned long event, void *ptr); |
60 | 60 | ||
@@ -87,7 +87,7 @@ static int simeth_debug; /* set to 1 to get debug information */ | |||
87 | */ | 87 | */ |
88 | static struct notifier_block simeth_dev_notifier = { | 88 | static struct notifier_block simeth_dev_notifier = { |
89 | simeth_device_event, | 89 | simeth_device_event, |
90 | 0 | 90 | NULL |
91 | }; | 91 | }; |
92 | 92 | ||
93 | 93 | ||
@@ -497,7 +497,7 @@ simeth_rx(struct net_device *dev) | |||
497 | * Interrupt handler (Yes, we can do it too !!!) | 497 | * Interrupt handler (Yes, we can do it too !!!) |
498 | */ | 498 | */ |
499 | static irqreturn_t | 499 | static irqreturn_t |
500 | simeth_interrupt(int irq, void *dev_id, struct pt_regs * regs) | 500 | simeth_interrupt(int irq, void *dev_id) |
501 | { | 501 | { |
502 | struct net_device *dev = dev_id; | 502 | struct net_device *dev = dev_id; |
503 | 503 | ||
diff --git a/arch/ia64/hp/sim/simscsi.c b/arch/ia64/hp/sim/simscsi.c index 8f0a16a79a67..bb87682bbb1b 100644 --- a/arch/ia64/hp/sim/simscsi.c +++ b/arch/ia64/hp/sim/simscsi.c | |||
@@ -103,7 +103,7 @@ simscsi_interrupt (unsigned long val) | |||
103 | 103 | ||
104 | while ((sc = queue[rd].sc) != 0) { | 104 | while ((sc = queue[rd].sc) != 0) { |
105 | atomic_dec(&num_reqs); | 105 | atomic_dec(&num_reqs); |
106 | queue[rd].sc = 0; | 106 | queue[rd].sc = NULL; |
107 | if (DBG) | 107 | if (DBG) |
108 | printk("simscsi_interrupt: done with %ld\n", sc->serial_number); | 108 | printk("simscsi_interrupt: done with %ld\n", sc->serial_number); |
109 | (*sc->scsi_done)(sc); | 109 | (*sc->scsi_done)(sc); |
diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c index 246eb3d3757a..caab986af70c 100644 --- a/arch/ia64/hp/sim/simserial.c +++ b/arch/ia64/hp/sim/simserial.c | |||
@@ -92,7 +92,7 @@ static struct serial_uart_config uart_config[] = { | |||
92 | { "ST16650V2", 32, UART_CLEAR_FIFO | UART_USE_FIFO | | 92 | { "ST16650V2", 32, UART_CLEAR_FIFO | UART_USE_FIFO | |
93 | UART_STARTECH }, | 93 | UART_STARTECH }, |
94 | { "TI16750", 64, UART_CLEAR_FIFO | UART_USE_FIFO}, | 94 | { "TI16750", 64, UART_CLEAR_FIFO | UART_USE_FIFO}, |
95 | { 0, 0} | 95 | { NULL, 0} |
96 | }; | 96 | }; |
97 | 97 | ||
98 | struct tty_driver *hp_simserial_driver; | 98 | struct tty_driver *hp_simserial_driver; |
@@ -130,7 +130,7 @@ static void rs_start(struct tty_struct *tty) | |||
130 | #endif | 130 | #endif |
131 | } | 131 | } |
132 | 132 | ||
133 | static void receive_chars(struct tty_struct *tty, struct pt_regs *regs) | 133 | static void receive_chars(struct tty_struct *tty) |
134 | { | 134 | { |
135 | unsigned char ch; | 135 | unsigned char ch; |
136 | static unsigned char seen_esc = 0; | 136 | static unsigned char seen_esc = 0; |
@@ -152,7 +152,7 @@ static void receive_chars(struct tty_struct *tty, struct pt_regs *regs) | |||
152 | ch = ia64_ssc(0, 0, 0, 0, | 152 | ch = ia64_ssc(0, 0, 0, 0, |
153 | SSC_GETCHAR); | 153 | SSC_GETCHAR); |
154 | while (!ch); | 154 | while (!ch); |
155 | handle_sysrq(ch, regs, NULL); | 155 | handle_sysrq(ch, NULL); |
156 | } | 156 | } |
157 | #endif | 157 | #endif |
158 | seen_esc = 0; | 158 | seen_esc = 0; |
@@ -170,7 +170,7 @@ static void receive_chars(struct tty_struct *tty, struct pt_regs *regs) | |||
170 | /* | 170 | /* |
171 | * This is the serial driver's interrupt routine for a single port | 171 | * This is the serial driver's interrupt routine for a single port |
172 | */ | 172 | */ |
173 | static irqreturn_t rs_interrupt_single(int irq, void *dev_id, struct pt_regs * regs) | 173 | static irqreturn_t rs_interrupt_single(int irq, void *dev_id) |
174 | { | 174 | { |
175 | struct async_struct * info; | 175 | struct async_struct * info; |
176 | 176 | ||
@@ -187,7 +187,7 @@ static irqreturn_t rs_interrupt_single(int irq, void *dev_id, struct pt_regs * r | |||
187 | * pretty simple in our case, because we only get interrupts | 187 | * pretty simple in our case, because we only get interrupts |
188 | * on inbound traffic | 188 | * on inbound traffic |
189 | */ | 189 | */ |
190 | receive_chars(info->tty, regs); | 190 | receive_chars(info->tty); |
191 | return IRQ_HANDLED; | 191 | return IRQ_HANDLED; |
192 | } | 192 | } |
193 | 193 | ||
@@ -555,7 +555,7 @@ static void shutdown(struct async_struct * info) | |||
555 | 555 | ||
556 | if (info->xmit.buf) { | 556 | if (info->xmit.buf) { |
557 | free_page((unsigned long) info->xmit.buf); | 557 | free_page((unsigned long) info->xmit.buf); |
558 | info->xmit.buf = 0; | 558 | info->xmit.buf = NULL; |
559 | } | 559 | } |
560 | 560 | ||
561 | if (info->tty) set_bit(TTY_IO_ERROR, &info->tty->flags); | 561 | if (info->tty) set_bit(TTY_IO_ERROR, &info->tty->flags); |
@@ -628,7 +628,7 @@ static void rs_close(struct tty_struct *tty, struct file * filp) | |||
628 | if (tty->driver->flush_buffer) tty->driver->flush_buffer(tty); | 628 | if (tty->driver->flush_buffer) tty->driver->flush_buffer(tty); |
629 | if (tty->ldisc.flush_buffer) tty->ldisc.flush_buffer(tty); | 629 | if (tty->ldisc.flush_buffer) tty->ldisc.flush_buffer(tty); |
630 | info->event = 0; | 630 | info->event = 0; |
631 | info->tty = 0; | 631 | info->tty = NULL; |
632 | if (info->blocked_open) { | 632 | if (info->blocked_open) { |
633 | if (info->close_delay) | 633 | if (info->close_delay) |
634 | schedule_timeout_interruptible(info->close_delay); | 634 | schedule_timeout_interruptible(info->close_delay); |
@@ -668,7 +668,7 @@ static void rs_hangup(struct tty_struct *tty) | |||
668 | info->event = 0; | 668 | info->event = 0; |
669 | state->count = 0; | 669 | state->count = 0; |
670 | info->flags &= ~ASYNC_NORMAL_ACTIVE; | 670 | info->flags &= ~ASYNC_NORMAL_ACTIVE; |
671 | info->tty = 0; | 671 | info->tty = NULL; |
672 | wake_up_interruptible(&info->open_wait); | 672 | wake_up_interruptible(&info->open_wait); |
673 | } | 673 | } |
674 | 674 | ||
@@ -714,7 +714,7 @@ startup(struct async_struct *info) | |||
714 | { | 714 | { |
715 | unsigned long flags; | 715 | unsigned long flags; |
716 | int retval=0; | 716 | int retval=0; |
717 | irqreturn_t (*handler)(int, void *, struct pt_regs *); | 717 | irq_handler_t handler; |
718 | struct serial_state *state= info->state; | 718 | struct serial_state *state= info->state; |
719 | unsigned long page; | 719 | unsigned long page; |
720 | 720 | ||
@@ -769,7 +769,7 @@ startup(struct async_struct *info) | |||
769 | /* | 769 | /* |
770 | * Insert serial port into IRQ chain. | 770 | * Insert serial port into IRQ chain. |
771 | */ | 771 | */ |
772 | info->prev_port = 0; | 772 | info->prev_port = NULL; |
773 | info->next_port = IRQ_ports[state->irq]; | 773 | info->next_port = IRQ_ports[state->irq]; |
774 | if (info->next_port) | 774 | if (info->next_port) |
775 | info->next_port->prev_port = info; | 775 | info->next_port->prev_port = info; |
diff --git a/arch/ia64/kernel/irq.c b/arch/ia64/kernel/irq.c index 7852382de2fa..f07c0864b0b4 100644 --- a/arch/ia64/kernel/irq.c +++ b/arch/ia64/kernel/irq.c | |||
@@ -194,8 +194,11 @@ void fixup_irqs(void) | |||
194 | */ | 194 | */ |
195 | for (irq=0; irq < NR_IRQS; irq++) { | 195 | for (irq=0; irq < NR_IRQS; irq++) { |
196 | if (vectors_in_migration[irq]) { | 196 | if (vectors_in_migration[irq]) { |
197 | struct pt_regs *old_regs = set_irq_regs(NULL); | ||
198 | |||
197 | vectors_in_migration[irq]=0; | 199 | vectors_in_migration[irq]=0; |
198 | __do_IRQ(irq, NULL); | 200 | __do_IRQ(irq); |
201 | set_irq_regs(old_regs); | ||
199 | } | 202 | } |
200 | } | 203 | } |
201 | 204 | ||
diff --git a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c index 7fd3ef9e064d..68339dd0c9e2 100644 --- a/arch/ia64/kernel/irq_ia64.c +++ b/arch/ia64/kernel/irq_ia64.c | |||
@@ -226,6 +226,8 @@ void ia64_process_pending_intr(void) | |||
226 | */ | 226 | */ |
227 | while (vector != IA64_SPURIOUS_INT_VECTOR) { | 227 | while (vector != IA64_SPURIOUS_INT_VECTOR) { |
228 | if (!IS_RESCHEDULE(vector)) { | 228 | if (!IS_RESCHEDULE(vector)) { |
229 | struct pt_regs *old_regs = set_irq_regs(NULL); | ||
230 | |||
229 | ia64_setreg(_IA64_REG_CR_TPR, vector); | 231 | ia64_setreg(_IA64_REG_CR_TPR, vector); |
230 | ia64_srlz_d(); | 232 | ia64_srlz_d(); |
231 | 233 | ||
@@ -236,7 +238,8 @@ void ia64_process_pending_intr(void) | |||
236 | * Probably could shared code. | 238 | * Probably could shared code. |
237 | */ | 239 | */ |
238 | vectors_in_migration[local_vector_to_irq(vector)]=0; | 240 | vectors_in_migration[local_vector_to_irq(vector)]=0; |
239 | __do_IRQ(local_vector_to_irq(vector), NULL); | 241 | __do_IRQ(local_vector_to_irq(vector)); |
242 | set_irq_regs(old_regs); | ||
240 | 243 | ||
241 | /* | 244 | /* |
242 | * Disable interrupts and send EOI | 245 | * Disable interrupts and send EOI |
@@ -253,7 +256,7 @@ void ia64_process_pending_intr(void) | |||
253 | 256 | ||
254 | 257 | ||
255 | #ifdef CONFIG_SMP | 258 | #ifdef CONFIG_SMP |
256 | extern irqreturn_t handle_IPI (int irq, void *dev_id, struct pt_regs *regs); | 259 | extern irqreturn_t handle_IPI (int irq, void *dev_id); |
257 | 260 | ||
258 | static struct irqaction ipi_irqaction = { | 261 | static struct irqaction ipi_irqaction = { |
259 | .handler = handle_IPI, | 262 | .handler = handle_IPI, |
diff --git a/arch/ia64/sn/kernel/huberror.c b/arch/ia64/sn/kernel/huberror.c index 96fb81e6321f..abca6bd7962f 100644 --- a/arch/ia64/sn/kernel/huberror.c +++ b/arch/ia64/sn/kernel/huberror.c | |||
@@ -22,7 +22,7 @@ | |||
22 | void hubiio_crb_error_handler(struct hubdev_info *hubdev_info); | 22 | void hubiio_crb_error_handler(struct hubdev_info *hubdev_info); |
23 | extern void bte_crb_error_handler(cnodeid_t, int, int, ioerror_t *, | 23 | extern void bte_crb_error_handler(cnodeid_t, int, int, ioerror_t *, |
24 | int); | 24 | int); |
25 | static irqreturn_t hub_eint_handler(int irq, void *arg, struct pt_regs *ep) | 25 | static irqreturn_t hub_eint_handler(int irq, void *arg) |
26 | { | 26 | { |
27 | struct hubdev_info *hubdev_info; | 27 | struct hubdev_info *hubdev_info; |
28 | struct ia64_sal_retval ret_stuff; | 28 | struct ia64_sal_retval ret_stuff; |
@@ -178,7 +178,7 @@ void hubiio_crb_error_handler(struct hubdev_info *hubdev_info) | |||
178 | */ | 178 | */ |
179 | void hub_error_init(struct hubdev_info *hubdev_info) | 179 | void hub_error_init(struct hubdev_info *hubdev_info) |
180 | { | 180 | { |
181 | if (request_irq(SGI_II_ERROR, (void *)hub_eint_handler, IRQF_SHARED, | 181 | if (request_irq(SGI_II_ERROR, hub_eint_handler, IRQF_SHARED, |
182 | "SN_hub_error", (void *)hubdev_info)) | 182 | "SN_hub_error", (void *)hubdev_info)) |
183 | printk("hub_error_init: Failed to request_irq for 0x%p\n", | 183 | printk("hub_error_init: Failed to request_irq for 0x%p\n", |
184 | hubdev_info); | 184 | hubdev_info); |
diff --git a/arch/ia64/sn/kernel/sn2/timer_interrupt.c b/arch/ia64/sn/kernel/sn2/timer_interrupt.c index fa7f69945917..103d6ea8e94b 100644 --- a/arch/ia64/sn/kernel/sn2/timer_interrupt.c +++ b/arch/ia64/sn/kernel/sn2/timer_interrupt.c | |||
@@ -36,7 +36,7 @@ extern irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs); | |||
36 | 36 | ||
37 | #define SN_LB_INT_WAR_INTERVAL 100 | 37 | #define SN_LB_INT_WAR_INTERVAL 100 |
38 | 38 | ||
39 | void sn_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 39 | void sn_timer_interrupt(int irq, void *dev_id) |
40 | { | 40 | { |
41 | /* LED blinking */ | 41 | /* LED blinking */ |
42 | if (!pda->hb_count--) { | 42 | if (!pda->hb_count--) { |
diff --git a/arch/ia64/sn/kernel/xpc_main.c b/arch/ia64/sn/kernel/xpc_main.c index 4d026f9dd98b..fa96dfc0e1aa 100644 --- a/arch/ia64/sn/kernel/xpc_main.c +++ b/arch/ia64/sn/kernel/xpc_main.c | |||
@@ -222,7 +222,7 @@ xpc_timeout_partition_disengage_request(unsigned long data) | |||
222 | * Notify the heartbeat check thread that an IRQ has been received. | 222 | * Notify the heartbeat check thread that an IRQ has been received. |
223 | */ | 223 | */ |
224 | static irqreturn_t | 224 | static irqreturn_t |
225 | xpc_act_IRQ_handler(int irq, void *dev_id, struct pt_regs *regs) | 225 | xpc_act_IRQ_handler(int irq, void *dev_id) |
226 | { | 226 | { |
227 | atomic_inc(&xpc_act_IRQ_rcvd); | 227 | atomic_inc(&xpc_act_IRQ_rcvd); |
228 | wake_up_interruptible(&xpc_act_IRQ_wq); | 228 | wake_up_interruptible(&xpc_act_IRQ_wq); |
@@ -607,12 +607,9 @@ xpc_activate_partition(struct xpc_partition *part) | |||
607 | * irq - Interrupt ReQuest number. NOT USED. | 607 | * irq - Interrupt ReQuest number. NOT USED. |
608 | * | 608 | * |
609 | * dev_id - partid of IPI's potential sender. | 609 | * dev_id - partid of IPI's potential sender. |
610 | * | ||
611 | * regs - processor's context before the processor entered | ||
612 | * interrupt code. NOT USED. | ||
613 | */ | 610 | */ |
614 | irqreturn_t | 611 | irqreturn_t |
615 | xpc_notify_IRQ_handler(int irq, void *dev_id, struct pt_regs *regs) | 612 | xpc_notify_IRQ_handler(int irq, void *dev_id) |
616 | { | 613 | { |
617 | partid_t partid = (partid_t) (u64) dev_id; | 614 | partid_t partid = (partid_t) (u64) dev_id; |
618 | struct xpc_partition *part = &xpc_partitions[partid]; | 615 | struct xpc_partition *part = &xpc_partitions[partid]; |
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_ate.c b/arch/ia64/sn/pci/pcibr/pcibr_ate.c index 5eb1e1e078b4..935029fc400d 100644 --- a/arch/ia64/sn/pci/pcibr/pcibr_ate.c +++ b/arch/ia64/sn/pci/pcibr/pcibr_ate.c | |||
@@ -126,7 +126,7 @@ int pcibr_ate_alloc(struct pcibus_info *pcibus_info, int count) | |||
126 | * Setup an Address Translation Entry as specified. Use either the Bridge | 126 | * Setup an Address Translation Entry as specified. Use either the Bridge |
127 | * internal maps or the external map RAM, as appropriate. | 127 | * internal maps or the external map RAM, as appropriate. |
128 | */ | 128 | */ |
129 | static inline u64 *pcibr_ate_addr(struct pcibus_info *pcibus_info, | 129 | static inline u64 __iomem *pcibr_ate_addr(struct pcibus_info *pcibus_info, |
130 | int ate_index) | 130 | int ate_index) |
131 | { | 131 | { |
132 | if (ate_index < pcibus_info->pbi_int_ate_size) { | 132 | if (ate_index < pcibus_info->pbi_int_ate_size) { |
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_provider.c b/arch/ia64/sn/pci/pcibr/pcibr_provider.c index 838c93c9a16a..27dd7df0f446 100644 --- a/arch/ia64/sn/pci/pcibr/pcibr_provider.c +++ b/arch/ia64/sn/pci/pcibr/pcibr_provider.c | |||
@@ -95,7 +95,7 @@ u16 sn_ioboard_to_pci_bus(struct pci_bus *pci_bus) | |||
95 | * bridge sends an error interrupt. | 95 | * bridge sends an error interrupt. |
96 | */ | 96 | */ |
97 | static irqreturn_t | 97 | static irqreturn_t |
98 | pcibr_error_intr_handler(int irq, void *arg, struct pt_regs *regs) | 98 | pcibr_error_intr_handler(int irq, void *arg) |
99 | { | 99 | { |
100 | struct pcibus_info *soft = (struct pcibus_info *)arg; | 100 | struct pcibus_info *soft = (struct pcibus_info *)arg; |
101 | 101 | ||
@@ -138,7 +138,7 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont | |||
138 | /* | 138 | /* |
139 | * register the bridge's error interrupt handler | 139 | * register the bridge's error interrupt handler |
140 | */ | 140 | */ |
141 | if (request_irq(SGI_PCIASIC_ERROR, (void *)pcibr_error_intr_handler, | 141 | if (request_irq(SGI_PCIASIC_ERROR, pcibr_error_intr_handler, |
142 | IRQF_SHARED, "PCIBR error", (void *)(soft))) { | 142 | IRQF_SHARED, "PCIBR error", (void *)(soft))) { |
143 | printk(KERN_WARNING | 143 | printk(KERN_WARNING |
144 | "pcibr cannot allocate interrupt for error handler\n"); | 144 | "pcibr cannot allocate interrupt for error handler\n"); |
diff --git a/arch/ia64/sn/pci/tioce_provider.c b/arch/ia64/sn/pci/tioce_provider.c index 0e81f68aaf8e..46e16dcf5971 100644 --- a/arch/ia64/sn/pci/tioce_provider.c +++ b/arch/ia64/sn/pci/tioce_provider.c | |||
@@ -53,7 +53,7 @@ | |||
53 | */ | 53 | */ |
54 | 54 | ||
55 | static void inline | 55 | static void inline |
56 | tioce_mmr_war_pre(struct tioce_kernel *kern, void *mmr_addr) | 56 | tioce_mmr_war_pre(struct tioce_kernel *kern, void __iomem *mmr_addr) |
57 | { | 57 | { |
58 | u64 mmr_base; | 58 | u64 mmr_base; |
59 | u64 mmr_offset; | 59 | u64 mmr_offset; |
@@ -62,7 +62,7 @@ tioce_mmr_war_pre(struct tioce_kernel *kern, void *mmr_addr) | |||
62 | return; | 62 | return; |
63 | 63 | ||
64 | mmr_base = kern->ce_common->ce_pcibus.bs_base; | 64 | mmr_base = kern->ce_common->ce_pcibus.bs_base; |
65 | mmr_offset = (u64)mmr_addr - mmr_base; | 65 | mmr_offset = (unsigned long)mmr_addr - mmr_base; |
66 | 66 | ||
67 | if (mmr_offset < 0x45000) { | 67 | if (mmr_offset < 0x45000) { |
68 | u64 mmr_war_offset; | 68 | u64 mmr_war_offset; |
@@ -79,7 +79,7 @@ tioce_mmr_war_pre(struct tioce_kernel *kern, void *mmr_addr) | |||
79 | } | 79 | } |
80 | 80 | ||
81 | static void inline | 81 | static void inline |
82 | tioce_mmr_war_post(struct tioce_kernel *kern, void *mmr_addr) | 82 | tioce_mmr_war_post(struct tioce_kernel *kern, void __iomem *mmr_addr) |
83 | { | 83 | { |
84 | u64 mmr_base; | 84 | u64 mmr_base; |
85 | u64 mmr_offset; | 85 | u64 mmr_offset; |
@@ -88,7 +88,7 @@ tioce_mmr_war_post(struct tioce_kernel *kern, void *mmr_addr) | |||
88 | return; | 88 | return; |
89 | 89 | ||
90 | mmr_base = kern->ce_common->ce_pcibus.bs_base; | 90 | mmr_base = kern->ce_common->ce_pcibus.bs_base; |
91 | mmr_offset = (u64)mmr_addr - mmr_base; | 91 | mmr_offset = (unsigned long)mmr_addr - mmr_base; |
92 | 92 | ||
93 | if (mmr_offset < 0x45000) { | 93 | if (mmr_offset < 0x45000) { |
94 | if (mmr_offset == 0x100) | 94 | if (mmr_offset == 0x100) |
@@ -223,7 +223,7 @@ tioce_dma_d64(unsigned long ct_addr, int dma_flags) | |||
223 | * @pci_dev. | 223 | * @pci_dev. |
224 | */ | 224 | */ |
225 | static inline void | 225 | static inline void |
226 | pcidev_to_tioce(struct pci_dev *pdev, struct tioce **base, | 226 | pcidev_to_tioce(struct pci_dev *pdev, struct tioce __iomem **base, |
227 | struct tioce_kernel **kernel, int *port) | 227 | struct tioce_kernel **kernel, int *port) |
228 | { | 228 | { |
229 | struct pcidev_info *pcidev_info; | 229 | struct pcidev_info *pcidev_info; |
@@ -235,7 +235,7 @@ pcidev_to_tioce(struct pci_dev *pdev, struct tioce **base, | |||
235 | ce_kernel = (struct tioce_kernel *)ce_common->ce_kernel_private; | 235 | ce_kernel = (struct tioce_kernel *)ce_common->ce_kernel_private; |
236 | 236 | ||
237 | if (base) | 237 | if (base) |
238 | *base = (struct tioce *)ce_common->ce_pcibus.bs_base; | 238 | *base = (struct tioce __iomem *)ce_common->ce_pcibus.bs_base; |
239 | if (kernel) | 239 | if (kernel) |
240 | *kernel = ce_kernel; | 240 | *kernel = ce_kernel; |
241 | 241 | ||
@@ -275,13 +275,13 @@ tioce_alloc_map(struct tioce_kernel *ce_kern, int type, int port, | |||
275 | u64 pagesize; | 275 | u64 pagesize; |
276 | int msi_capable, msi_wanted; | 276 | int msi_capable, msi_wanted; |
277 | u64 *ate_shadow; | 277 | u64 *ate_shadow; |
278 | u64 *ate_reg; | 278 | u64 __iomem *ate_reg; |
279 | u64 addr; | 279 | u64 addr; |
280 | struct tioce *ce_mmr; | 280 | struct tioce __iomem *ce_mmr; |
281 | u64 bus_base; | 281 | u64 bus_base; |
282 | struct tioce_dmamap *map; | 282 | struct tioce_dmamap *map; |
283 | 283 | ||
284 | ce_mmr = (struct tioce *)ce_kern->ce_common->ce_pcibus.bs_base; | 284 | ce_mmr = (struct tioce __iomem *)ce_kern->ce_common->ce_pcibus.bs_base; |
285 | 285 | ||
286 | switch (type) { | 286 | switch (type) { |
287 | case TIOCE_ATE_M32: | 287 | case TIOCE_ATE_M32: |
@@ -386,7 +386,7 @@ tioce_dma_d32(struct pci_dev *pdev, u64 ct_addr, int dma_flags) | |||
386 | { | 386 | { |
387 | int dma_ok; | 387 | int dma_ok; |
388 | int port; | 388 | int port; |
389 | struct tioce *ce_mmr; | 389 | struct tioce __iomem *ce_mmr; |
390 | struct tioce_kernel *ce_kern; | 390 | struct tioce_kernel *ce_kern; |
391 | u64 ct_upper; | 391 | u64 ct_upper; |
392 | u64 ct_lower; | 392 | u64 ct_lower; |
@@ -461,7 +461,7 @@ tioce_dma_unmap(struct pci_dev *pdev, dma_addr_t bus_addr, int dir) | |||
461 | int i; | 461 | int i; |
462 | int port; | 462 | int port; |
463 | struct tioce_kernel *ce_kern; | 463 | struct tioce_kernel *ce_kern; |
464 | struct tioce *ce_mmr; | 464 | struct tioce __iomem *ce_mmr; |
465 | unsigned long flags; | 465 | unsigned long flags; |
466 | 466 | ||
467 | bus_addr = tioce_dma_barrier(bus_addr, 0); | 467 | bus_addr = tioce_dma_barrier(bus_addr, 0); |
@@ -700,9 +700,9 @@ static void | |||
700 | tioce_reserve_m32(struct tioce_kernel *ce_kern, u64 base, u64 limit) | 700 | tioce_reserve_m32(struct tioce_kernel *ce_kern, u64 base, u64 limit) |
701 | { | 701 | { |
702 | int ate_index, last_ate, ps; | 702 | int ate_index, last_ate, ps; |
703 | struct tioce *ce_mmr; | 703 | struct tioce __iomem *ce_mmr; |
704 | 704 | ||
705 | ce_mmr = (struct tioce *)ce_kern->ce_common->ce_pcibus.bs_base; | 705 | ce_mmr = (struct tioce __iomem *)ce_kern->ce_common->ce_pcibus.bs_base; |
706 | ps = ce_kern->ce_ate3240_pagesize; | 706 | ps = ce_kern->ce_ate3240_pagesize; |
707 | ate_index = ATE_PAGE(base, ps); | 707 | ate_index = ATE_PAGE(base, ps); |
708 | last_ate = ate_index + ATE_NPAGES(base, limit-base+1, ps) - 1; | 708 | last_ate = ate_index + ATE_NPAGES(base, limit-base+1, ps) - 1; |
@@ -736,7 +736,7 @@ tioce_kern_init(struct tioce_common *tioce_common) | |||
736 | int dev; | 736 | int dev; |
737 | u32 tmp; | 737 | u32 tmp; |
738 | unsigned int seg, bus; | 738 | unsigned int seg, bus; |
739 | struct tioce *tioce_mmr; | 739 | struct tioce __iomem *tioce_mmr; |
740 | struct tioce_kernel *tioce_kern; | 740 | struct tioce_kernel *tioce_kern; |
741 | 741 | ||
742 | tioce_kern = kzalloc(sizeof(struct tioce_kernel), GFP_KERNEL); | 742 | tioce_kern = kzalloc(sizeof(struct tioce_kernel), GFP_KERNEL); |
@@ -767,7 +767,7 @@ tioce_kern_init(struct tioce_common *tioce_common) | |||
767 | * the ate's. | 767 | * the ate's. |
768 | */ | 768 | */ |
769 | 769 | ||
770 | tioce_mmr = (struct tioce *)tioce_common->ce_pcibus.bs_base; | 770 | tioce_mmr = (struct tioce __iomem *)tioce_common->ce_pcibus.bs_base; |
771 | tioce_mmr_clri(tioce_kern, &tioce_mmr->ce_ure_page_map, | 771 | tioce_mmr_clri(tioce_kern, &tioce_mmr->ce_ure_page_map, |
772 | CE_URE_PAGESIZE_MASK); | 772 | CE_URE_PAGESIZE_MASK); |
773 | tioce_mmr_seti(tioce_kern, &tioce_mmr->ce_ure_page_map, | 773 | tioce_mmr_seti(tioce_kern, &tioce_mmr->ce_ure_page_map, |
@@ -858,7 +858,7 @@ tioce_force_interrupt(struct sn_irq_info *sn_irq_info) | |||
858 | struct pcidev_info *pcidev_info; | 858 | struct pcidev_info *pcidev_info; |
859 | struct tioce_common *ce_common; | 859 | struct tioce_common *ce_common; |
860 | struct tioce_kernel *ce_kern; | 860 | struct tioce_kernel *ce_kern; |
861 | struct tioce *ce_mmr; | 861 | struct tioce __iomem *ce_mmr; |
862 | u64 force_int_val; | 862 | u64 force_int_val; |
863 | 863 | ||
864 | if (!sn_irq_info->irq_bridge) | 864 | if (!sn_irq_info->irq_bridge) |
@@ -872,7 +872,7 @@ tioce_force_interrupt(struct sn_irq_info *sn_irq_info) | |||
872 | return; | 872 | return; |
873 | 873 | ||
874 | ce_common = (struct tioce_common *)pcidev_info->pdi_pcibus_info; | 874 | ce_common = (struct tioce_common *)pcidev_info->pdi_pcibus_info; |
875 | ce_mmr = (struct tioce *)ce_common->ce_pcibus.bs_base; | 875 | ce_mmr = (struct tioce __iomem *)ce_common->ce_pcibus.bs_base; |
876 | ce_kern = (struct tioce_kernel *)ce_common->ce_kernel_private; | 876 | ce_kern = (struct tioce_kernel *)ce_common->ce_kernel_private; |
877 | 877 | ||
878 | /* | 878 | /* |
@@ -953,7 +953,7 @@ tioce_target_interrupt(struct sn_irq_info *sn_irq_info) | |||
953 | struct pcidev_info *pcidev_info; | 953 | struct pcidev_info *pcidev_info; |
954 | struct tioce_common *ce_common; | 954 | struct tioce_common *ce_common; |
955 | struct tioce_kernel *ce_kern; | 955 | struct tioce_kernel *ce_kern; |
956 | struct tioce *ce_mmr; | 956 | struct tioce __iomem *ce_mmr; |
957 | int bit; | 957 | int bit; |
958 | u64 vector; | 958 | u64 vector; |
959 | 959 | ||
@@ -962,7 +962,7 @@ tioce_target_interrupt(struct sn_irq_info *sn_irq_info) | |||
962 | return; | 962 | return; |
963 | 963 | ||
964 | ce_common = (struct tioce_common *)pcidev_info->pdi_pcibus_info; | 964 | ce_common = (struct tioce_common *)pcidev_info->pdi_pcibus_info; |
965 | ce_mmr = (struct tioce *)ce_common->ce_pcibus.bs_base; | 965 | ce_mmr = (struct tioce __iomem *)ce_common->ce_pcibus.bs_base; |
966 | ce_kern = (struct tioce_kernel *)ce_common->ce_kernel_private; | 966 | ce_kern = (struct tioce_kernel *)ce_common->ce_kernel_private; |
967 | 967 | ||
968 | bit = sn_irq_info->irq_int_bit; | 968 | bit = sn_irq_info->irq_int_bit; |
@@ -994,7 +994,7 @@ tioce_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont | |||
994 | cnodeid_t my_cnode, mem_cnode; | 994 | cnodeid_t my_cnode, mem_cnode; |
995 | struct tioce_common *tioce_common; | 995 | struct tioce_common *tioce_common; |
996 | struct tioce_kernel *tioce_kern; | 996 | struct tioce_kernel *tioce_kern; |
997 | struct tioce *tioce_mmr; | 997 | struct tioce __iomem *tioce_mmr; |
998 | 998 | ||
999 | /* | 999 | /* |
1000 | * Allocate kernel bus soft and copy from prom. | 1000 | * Allocate kernel bus soft and copy from prom. |
@@ -1018,7 +1018,7 @@ tioce_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont | |||
1018 | * interrupt handler. | 1018 | * interrupt handler. |
1019 | */ | 1019 | */ |
1020 | 1020 | ||
1021 | tioce_mmr = (struct tioce *)tioce_common->ce_pcibus.bs_base; | 1021 | tioce_mmr = (struct tioce __iomem *)tioce_common->ce_pcibus.bs_base; |
1022 | tioce_mmr_seti(tioce_kern, &tioce_mmr->ce_adm_int_status_alias, ~0ULL); | 1022 | tioce_mmr_seti(tioce_kern, &tioce_mmr->ce_adm_int_status_alias, ~0ULL); |
1023 | tioce_mmr_seti(tioce_kern, &tioce_mmr->ce_adm_error_summary_alias, | 1023 | tioce_mmr_seti(tioce_kern, &tioce_mmr->ce_adm_error_summary_alias, |
1024 | ~0ULL); | 1024 | ~0ULL); |
diff --git a/arch/m32r/kernel/irq.c b/arch/m32r/kernel/irq.c index 3841861df6a2..f8d8650383e0 100644 --- a/arch/m32r/kernel/irq.c +++ b/arch/m32r/kernel/irq.c | |||
@@ -77,13 +77,16 @@ skip: | |||
77 | */ | 77 | */ |
78 | asmlinkage unsigned int do_IRQ(int irq, struct pt_regs *regs) | 78 | asmlinkage unsigned int do_IRQ(int irq, struct pt_regs *regs) |
79 | { | 79 | { |
80 | struct pt_regs *old_regs; | ||
81 | old_regs = set_irq_regs(regs); | ||
80 | irq_enter(); | 82 | irq_enter(); |
81 | 83 | ||
82 | #ifdef CONFIG_DEBUG_STACKOVERFLOW | 84 | #ifdef CONFIG_DEBUG_STACKOVERFLOW |
83 | /* FIXME M32R */ | 85 | /* FIXME M32R */ |
84 | #endif | 86 | #endif |
85 | __do_IRQ(irq, regs); | 87 | __do_IRQ(irq); |
86 | irq_exit(); | 88 | irq_exit(); |
89 | set_irq_regs(old_regs); | ||
87 | 90 | ||
88 | return 1; | 91 | return 1; |
89 | } | 92 | } |
diff --git a/arch/m32r/kernel/smp.c b/arch/m32r/kernel/smp.c index 8b1f6eb76870..722e21f556dc 100644 --- a/arch/m32r/kernel/smp.c +++ b/arch/m32r/kernel/smp.c | |||
@@ -101,7 +101,7 @@ void smp_call_function_interrupt(void); | |||
101 | 101 | ||
102 | void smp_send_timer(void); | 102 | void smp_send_timer(void); |
103 | void smp_ipi_timer_interrupt(struct pt_regs *); | 103 | void smp_ipi_timer_interrupt(struct pt_regs *); |
104 | void smp_local_timer_interrupt(struct pt_regs *); | 104 | void smp_local_timer_interrupt(void); |
105 | 105 | ||
106 | void send_IPI_allbutself(int, int); | 106 | void send_IPI_allbutself(int, int); |
107 | static void send_IPI_mask(cpumask_t, int, int); | 107 | static void send_IPI_mask(cpumask_t, int, int); |
@@ -734,9 +734,12 @@ void smp_send_timer(void) | |||
734 | *==========================================================================*/ | 734 | *==========================================================================*/ |
735 | void smp_ipi_timer_interrupt(struct pt_regs *regs) | 735 | void smp_ipi_timer_interrupt(struct pt_regs *regs) |
736 | { | 736 | { |
737 | struct pt_regs *old_regs; | ||
738 | old_regs = set_irq_regs(regs); | ||
737 | irq_enter(); | 739 | irq_enter(); |
738 | smp_local_timer_interrupt(regs); | 740 | smp_local_timer_interrupt(); |
739 | irq_exit(); | 741 | irq_exit(); |
742 | set_irq_regs(old_regs); | ||
740 | } | 743 | } |
741 | 744 | ||
742 | /*==========================================================================* | 745 | /*==========================================================================* |
@@ -762,9 +765,9 @@ void smp_ipi_timer_interrupt(struct pt_regs *regs) | |||
762 | * ---------- --- -------------------------------------------------------- | 765 | * ---------- --- -------------------------------------------------------- |
763 | * 2003-06-24 hy use per_cpu structure. | 766 | * 2003-06-24 hy use per_cpu structure. |
764 | *==========================================================================*/ | 767 | *==========================================================================*/ |
765 | void smp_local_timer_interrupt(struct pt_regs *regs) | 768 | void smp_local_timer_interrupt(void) |
766 | { | 769 | { |
767 | int user = user_mode(regs); | 770 | int user = user_mode(get_irq_regs()); |
768 | int cpu_id = smp_processor_id(); | 771 | int cpu_id = smp_processor_id(); |
769 | 772 | ||
770 | /* | 773 | /* |
@@ -774,7 +777,7 @@ void smp_local_timer_interrupt(struct pt_regs *regs) | |||
774 | * useful with a profiling multiplier != 1 | 777 | * useful with a profiling multiplier != 1 |
775 | */ | 778 | */ |
776 | 779 | ||
777 | profile_tick(CPU_PROFILING, regs); | 780 | profile_tick(CPU_PROFILING); |
778 | 781 | ||
779 | if (--per_cpu(prof_counter, cpu_id) <= 0) { | 782 | if (--per_cpu(prof_counter, cpu_id) <= 0) { |
780 | /* | 783 | /* |
diff --git a/arch/m32r/kernel/time.c b/arch/m32r/kernel/time.c index d8af155db984..a09038282c78 100644 --- a/arch/m32r/kernel/time.c +++ b/arch/m32r/kernel/time.c | |||
@@ -35,7 +35,7 @@ | |||
35 | 35 | ||
36 | #ifdef CONFIG_SMP | 36 | #ifdef CONFIG_SMP |
37 | extern void send_IPI_allbutself(int, int); | 37 | extern void send_IPI_allbutself(int, int); |
38 | extern void smp_local_timer_interrupt(struct pt_regs *); | 38 | extern void smp_local_timer_interrupt(void); |
39 | #endif | 39 | #endif |
40 | 40 | ||
41 | #define TICK_SIZE (tick_nsec / 1000) | 41 | #define TICK_SIZE (tick_nsec / 1000) |
@@ -188,15 +188,15 @@ static long last_rtc_update = 0; | |||
188 | * timer_interrupt() needs to keep up the real-time clock, | 188 | * timer_interrupt() needs to keep up the real-time clock, |
189 | * as well as call the "do_timer()" routine every clocktick | 189 | * as well as call the "do_timer()" routine every clocktick |
190 | */ | 190 | */ |
191 | irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 191 | irqreturn_t timer_interrupt(int irq, void *dev_id) |
192 | { | 192 | { |
193 | #ifndef CONFIG_SMP | 193 | #ifndef CONFIG_SMP |
194 | profile_tick(CPU_PROFILING, regs); | 194 | profile_tick(CPU_PROFILING); |
195 | #endif | 195 | #endif |
196 | do_timer(1); | 196 | do_timer(1); |
197 | 197 | ||
198 | #ifndef CONFIG_SMP | 198 | #ifndef CONFIG_SMP |
199 | update_process_times(user_mode(regs)); | 199 | update_process_times(user_mode(get_irq_regs())); |
200 | #endif | 200 | #endif |
201 | /* | 201 | /* |
202 | * If we have an externally synchronized Linux clock, then update | 202 | * If we have an externally synchronized Linux clock, then update |
@@ -221,7 +221,7 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
221 | a hack, so don't look closely for now.. */ | 221 | a hack, so don't look closely for now.. */ |
222 | 222 | ||
223 | #ifdef CONFIG_SMP | 223 | #ifdef CONFIG_SMP |
224 | smp_local_timer_interrupt(regs); | 224 | smp_local_timer_interrupt(); |
225 | smp_send_timer(); | 225 | smp_send_timer(); |
226 | #endif | 226 | #endif |
227 | 227 | ||
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig index 805b81fedf80..7bc14461a6ac 100644 --- a/arch/m68k/Kconfig +++ b/arch/m68k/Kconfig | |||
@@ -600,7 +600,7 @@ config MVME147_SCC | |||
600 | 600 | ||
601 | config SERIAL167 | 601 | config SERIAL167 |
602 | bool "CD2401 support for MVME166/7 serial ports" | 602 | bool "CD2401 support for MVME166/7 serial ports" |
603 | depends on MVME16x && BROKEN | 603 | depends on MVME16x |
604 | help | 604 | help |
605 | This is the driver for the serial ports on the Motorola MVME166, | 605 | This is the driver for the serial ports on the Motorola MVME166, |
606 | 167, and 172 boards. Everyone using one of these boards should say | 606 | 167, and 172 boards. Everyone using one of these boards should say |
diff --git a/arch/m68k/amiga/amiints.c b/arch/m68k/amiga/amiints.c index 96c79d840cff..28d95cfe8ac0 100644 --- a/arch/m68k/amiga/amiints.c +++ b/arch/m68k/amiga/amiints.c | |||
@@ -47,10 +47,10 @@ | |||
47 | 47 | ||
48 | static void amiga_enable_irq(unsigned int irq); | 48 | static void amiga_enable_irq(unsigned int irq); |
49 | static void amiga_disable_irq(unsigned int irq); | 49 | static void amiga_disable_irq(unsigned int irq); |
50 | static irqreturn_t ami_int1(int irq, void *dev_id, struct pt_regs *fp); | 50 | static irqreturn_t ami_int1(int irq, void *dev_id); |
51 | static irqreturn_t ami_int3(int irq, void *dev_id, struct pt_regs *fp); | 51 | static irqreturn_t ami_int3(int irq, void *dev_id); |
52 | static irqreturn_t ami_int4(int irq, void *dev_id, struct pt_regs *fp); | 52 | static irqreturn_t ami_int4(int irq, void *dev_id); |
53 | static irqreturn_t ami_int5(int irq, void *dev_id, struct pt_regs *fp); | 53 | static irqreturn_t ami_int5(int irq, void *dev_id); |
54 | 54 | ||
55 | static struct irq_controller amiga_irq_controller = { | 55 | static struct irq_controller amiga_irq_controller = { |
56 | .name = "amiga", | 56 | .name = "amiga", |
@@ -113,98 +113,98 @@ static void amiga_disable_irq(unsigned int irq) | |||
113 | * The builtin Amiga hardware interrupt handlers. | 113 | * The builtin Amiga hardware interrupt handlers. |
114 | */ | 114 | */ |
115 | 115 | ||
116 | static irqreturn_t ami_int1(int irq, void *dev_id, struct pt_regs *fp) | 116 | static irqreturn_t ami_int1(int irq, void *dev_id) |
117 | { | 117 | { |
118 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; | 118 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; |
119 | 119 | ||
120 | /* if serial transmit buffer empty, interrupt */ | 120 | /* if serial transmit buffer empty, interrupt */ |
121 | if (ints & IF_TBE) { | 121 | if (ints & IF_TBE) { |
122 | amiga_custom.intreq = IF_TBE; | 122 | amiga_custom.intreq = IF_TBE; |
123 | m68k_handle_int(IRQ_AMIGA_TBE, fp); | 123 | m68k_handle_int(IRQ_AMIGA_TBE); |
124 | } | 124 | } |
125 | 125 | ||
126 | /* if floppy disk transfer complete, interrupt */ | 126 | /* if floppy disk transfer complete, interrupt */ |
127 | if (ints & IF_DSKBLK) { | 127 | if (ints & IF_DSKBLK) { |
128 | amiga_custom.intreq = IF_DSKBLK; | 128 | amiga_custom.intreq = IF_DSKBLK; |
129 | m68k_handle_int(IRQ_AMIGA_DSKBLK, fp); | 129 | m68k_handle_int(IRQ_AMIGA_DSKBLK); |
130 | } | 130 | } |
131 | 131 | ||
132 | /* if software interrupt set, interrupt */ | 132 | /* if software interrupt set, interrupt */ |
133 | if (ints & IF_SOFT) { | 133 | if (ints & IF_SOFT) { |
134 | amiga_custom.intreq = IF_SOFT; | 134 | amiga_custom.intreq = IF_SOFT; |
135 | m68k_handle_int(IRQ_AMIGA_SOFT, fp); | 135 | m68k_handle_int(IRQ_AMIGA_SOFT); |
136 | } | 136 | } |
137 | return IRQ_HANDLED; | 137 | return IRQ_HANDLED; |
138 | } | 138 | } |
139 | 139 | ||
140 | static irqreturn_t ami_int3(int irq, void *dev_id, struct pt_regs *fp) | 140 | static irqreturn_t ami_int3(int irq, void *dev_id) |
141 | { | 141 | { |
142 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; | 142 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; |
143 | 143 | ||
144 | /* if a blitter interrupt */ | 144 | /* if a blitter interrupt */ |
145 | if (ints & IF_BLIT) { | 145 | if (ints & IF_BLIT) { |
146 | amiga_custom.intreq = IF_BLIT; | 146 | amiga_custom.intreq = IF_BLIT; |
147 | m68k_handle_int(IRQ_AMIGA_BLIT, fp); | 147 | m68k_handle_int(IRQ_AMIGA_BLIT); |
148 | } | 148 | } |
149 | 149 | ||
150 | /* if a copper interrupt */ | 150 | /* if a copper interrupt */ |
151 | if (ints & IF_COPER) { | 151 | if (ints & IF_COPER) { |
152 | amiga_custom.intreq = IF_COPER; | 152 | amiga_custom.intreq = IF_COPER; |
153 | m68k_handle_int(IRQ_AMIGA_COPPER, fp); | 153 | m68k_handle_int(IRQ_AMIGA_COPPER); |
154 | } | 154 | } |
155 | 155 | ||
156 | /* if a vertical blank interrupt */ | 156 | /* if a vertical blank interrupt */ |
157 | if (ints & IF_VERTB) { | 157 | if (ints & IF_VERTB) { |
158 | amiga_custom.intreq = IF_VERTB; | 158 | amiga_custom.intreq = IF_VERTB; |
159 | m68k_handle_int(IRQ_AMIGA_VERTB, fp); | 159 | m68k_handle_int(IRQ_AMIGA_VERTB); |
160 | } | 160 | } |
161 | return IRQ_HANDLED; | 161 | return IRQ_HANDLED; |
162 | } | 162 | } |
163 | 163 | ||
164 | static irqreturn_t ami_int4(int irq, void *dev_id, struct pt_regs *fp) | 164 | static irqreturn_t ami_int4(int irq, void *dev_id) |
165 | { | 165 | { |
166 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; | 166 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; |
167 | 167 | ||
168 | /* if audio 0 interrupt */ | 168 | /* if audio 0 interrupt */ |
169 | if (ints & IF_AUD0) { | 169 | if (ints & IF_AUD0) { |
170 | amiga_custom.intreq = IF_AUD0; | 170 | amiga_custom.intreq = IF_AUD0; |
171 | m68k_handle_int(IRQ_AMIGA_AUD0, fp); | 171 | m68k_handle_int(IRQ_AMIGA_AUD0); |
172 | } | 172 | } |
173 | 173 | ||
174 | /* if audio 1 interrupt */ | 174 | /* if audio 1 interrupt */ |
175 | if (ints & IF_AUD1) { | 175 | if (ints & IF_AUD1) { |
176 | amiga_custom.intreq = IF_AUD1; | 176 | amiga_custom.intreq = IF_AUD1; |
177 | m68k_handle_int(IRQ_AMIGA_AUD1, fp); | 177 | m68k_handle_int(IRQ_AMIGA_AUD1); |
178 | } | 178 | } |
179 | 179 | ||
180 | /* if audio 2 interrupt */ | 180 | /* if audio 2 interrupt */ |
181 | if (ints & IF_AUD2) { | 181 | if (ints & IF_AUD2) { |
182 | amiga_custom.intreq = IF_AUD2; | 182 | amiga_custom.intreq = IF_AUD2; |
183 | m68k_handle_int(IRQ_AMIGA_AUD2, fp); | 183 | m68k_handle_int(IRQ_AMIGA_AUD2); |
184 | } | 184 | } |
185 | 185 | ||
186 | /* if audio 3 interrupt */ | 186 | /* if audio 3 interrupt */ |
187 | if (ints & IF_AUD3) { | 187 | if (ints & IF_AUD3) { |
188 | amiga_custom.intreq = IF_AUD3; | 188 | amiga_custom.intreq = IF_AUD3; |
189 | m68k_handle_int(IRQ_AMIGA_AUD3, fp); | 189 | m68k_handle_int(IRQ_AMIGA_AUD3); |
190 | } | 190 | } |
191 | return IRQ_HANDLED; | 191 | return IRQ_HANDLED; |
192 | } | 192 | } |
193 | 193 | ||
194 | static irqreturn_t ami_int5(int irq, void *dev_id, struct pt_regs *fp) | 194 | static irqreturn_t ami_int5(int irq, void *dev_id) |
195 | { | 195 | { |
196 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; | 196 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; |
197 | 197 | ||
198 | /* if serial receive buffer full interrupt */ | 198 | /* if serial receive buffer full interrupt */ |
199 | if (ints & IF_RBF) { | 199 | if (ints & IF_RBF) { |
200 | /* acknowledge of IF_RBF must be done by the serial interrupt */ | 200 | /* acknowledge of IF_RBF must be done by the serial interrupt */ |
201 | m68k_handle_int(IRQ_AMIGA_RBF, fp); | 201 | m68k_handle_int(IRQ_AMIGA_RBF); |
202 | } | 202 | } |
203 | 203 | ||
204 | /* if a disk sync interrupt */ | 204 | /* if a disk sync interrupt */ |
205 | if (ints & IF_DSKSYN) { | 205 | if (ints & IF_DSKSYN) { |
206 | amiga_custom.intreq = IF_DSKSYN; | 206 | amiga_custom.intreq = IF_DSKSYN; |
207 | m68k_handle_int(IRQ_AMIGA_DSKSYN, fp); | 207 | m68k_handle_int(IRQ_AMIGA_DSKSYN); |
208 | } | 208 | } |
209 | return IRQ_HANDLED; | 209 | return IRQ_HANDLED; |
210 | } | 210 | } |
diff --git a/arch/m68k/amiga/cia.c b/arch/m68k/amiga/cia.c index dbad30054721..7a20058eb380 100644 --- a/arch/m68k/amiga/cia.c +++ b/arch/m68k/amiga/cia.c | |||
@@ -82,7 +82,7 @@ unsigned char cia_able_irq(struct ciabase *base, unsigned char mask) | |||
82 | return old; | 82 | return old; |
83 | } | 83 | } |
84 | 84 | ||
85 | static irqreturn_t cia_handler(int irq, void *dev_id, struct pt_regs *fp) | 85 | static irqreturn_t cia_handler(int irq, void *dev_id) |
86 | { | 86 | { |
87 | struct ciabase *base = (struct ciabase *)dev_id; | 87 | struct ciabase *base = (struct ciabase *)dev_id; |
88 | int mach_irq; | 88 | int mach_irq; |
@@ -93,7 +93,7 @@ static irqreturn_t cia_handler(int irq, void *dev_id, struct pt_regs *fp) | |||
93 | amiga_custom.intreq = base->int_mask; | 93 | amiga_custom.intreq = base->int_mask; |
94 | for (; ints; mach_irq++, ints >>= 1) { | 94 | for (; ints; mach_irq++, ints >>= 1) { |
95 | if (ints & 1) | 95 | if (ints & 1) |
96 | m68k_handle_int(mach_irq, fp); | 96 | m68k_handle_int(mach_irq); |
97 | } | 97 | } |
98 | return IRQ_HANDLED; | 98 | return IRQ_HANDLED; |
99 | } | 99 | } |
diff --git a/arch/m68k/amiga/config.c b/arch/m68k/amiga/config.c index 092e50d2cb13..3204f412cad8 100644 --- a/arch/m68k/amiga/config.c +++ b/arch/m68k/amiga/config.c | |||
@@ -83,7 +83,7 @@ static char amiga_model_name[13] = "Amiga "; | |||
83 | 83 | ||
84 | extern char m68k_debug_device[]; | 84 | extern char m68k_debug_device[]; |
85 | 85 | ||
86 | static void amiga_sched_init(irqreturn_t (*handler)(int, void *, struct pt_regs *)); | 86 | static void amiga_sched_init(irq_handler_t handler); |
87 | /* amiga specific irq functions */ | 87 | /* amiga specific irq functions */ |
88 | extern void amiga_init_IRQ (void); | 88 | extern void amiga_init_IRQ (void); |
89 | static void amiga_get_model(char *model); | 89 | static void amiga_get_model(char *model); |
@@ -487,8 +487,7 @@ void __init config_amiga(void) | |||
487 | 487 | ||
488 | static unsigned short jiffy_ticks; | 488 | static unsigned short jiffy_ticks; |
489 | 489 | ||
490 | static void __init amiga_sched_init(irqreturn_t (*timer_routine)(int, void *, | 490 | static void __init amiga_sched_init(irq_handler_t timer_routine) |
491 | struct pt_regs *)) | ||
492 | { | 491 | { |
493 | static struct resource sched_res = { | 492 | static struct resource sched_res = { |
494 | .name = "timer", .start = 0x00bfd400, .end = 0x00bfd5ff, | 493 | .name = "timer", .start = 0x00bfd400, .end = 0x00bfd5ff, |
diff --git a/arch/m68k/apollo/config.c b/arch/m68k/apollo/config.c index 6f4581575fb4..cb8e7609df4c 100644 --- a/arch/m68k/apollo/config.c +++ b/arch/m68k/apollo/config.c | |||
@@ -25,7 +25,7 @@ u_long cpuctrl_physaddr; | |||
25 | u_long timer_physaddr; | 25 | u_long timer_physaddr; |
26 | u_long apollo_model; | 26 | u_long apollo_model; |
27 | 27 | ||
28 | extern void dn_sched_init(irqreturn_t (*handler)(int,void *,struct pt_regs *)); | 28 | extern void dn_sched_init(irq_handler_t handler); |
29 | extern void dn_init_IRQ(void); | 29 | extern void dn_init_IRQ(void); |
30 | extern unsigned long dn_gettimeoffset(void); | 30 | extern unsigned long dn_gettimeoffset(void); |
31 | extern int dn_dummy_hwclk(int, struct rtc_time *); | 31 | extern int dn_dummy_hwclk(int, struct rtc_time *); |
@@ -38,7 +38,7 @@ extern irqreturn_t dn_process_int(int irq, struct pt_regs *fp); | |||
38 | #ifdef CONFIG_HEARTBEAT | 38 | #ifdef CONFIG_HEARTBEAT |
39 | static void dn_heartbeat(int on); | 39 | static void dn_heartbeat(int on); |
40 | #endif | 40 | #endif |
41 | static irqreturn_t dn_timer_int(int irq,void *, struct pt_regs *); | 41 | static irqreturn_t dn_timer_int(int irq,void *); |
42 | static void dn_get_model(char *model); | 42 | static void dn_get_model(char *model); |
43 | static const char *apollo_models[] = { | 43 | static const char *apollo_models[] = { |
44 | [APOLLO_DN3000-APOLLO_DN3000] = "DN3000 (Otter)", | 44 | [APOLLO_DN3000-APOLLO_DN3000] = "DN3000 (Otter)", |
@@ -174,13 +174,13 @@ void config_apollo(void) { | |||
174 | 174 | ||
175 | } | 175 | } |
176 | 176 | ||
177 | irqreturn_t dn_timer_int(int irq, void *dev_id, struct pt_regs *fp) | 177 | irqreturn_t dn_timer_int(int irq, void *dev_id) |
178 | { | 178 | { |
179 | irqreturn_t (*timer_handler)(int, void *, struct pt_regs *) = dev_id; | 179 | irq_handler_t timer_handler = dev_id; |
180 | 180 | ||
181 | volatile unsigned char x; | 181 | volatile unsigned char x; |
182 | 182 | ||
183 | timer_handler(irq, dev_id, fp); | 183 | timer_handler(irq, dev_id); |
184 | 184 | ||
185 | x=*(volatile unsigned char *)(timer+3); | 185 | x=*(volatile unsigned char *)(timer+3); |
186 | x=*(volatile unsigned char *)(timer+5); | 186 | x=*(volatile unsigned char *)(timer+5); |
@@ -188,8 +188,8 @@ irqreturn_t dn_timer_int(int irq, void *dev_id, struct pt_regs *fp) | |||
188 | return IRQ_HANDLED; | 188 | return IRQ_HANDLED; |
189 | } | 189 | } |
190 | 190 | ||
191 | void dn_sched_init(irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) { | 191 | void dn_sched_init(irq_handler_t timer_routine) |
192 | 192 | { | |
193 | /* program timer 1 */ | 193 | /* program timer 1 */ |
194 | *(volatile unsigned char *)(timer+3)=0x01; | 194 | *(volatile unsigned char *)(timer+3)=0x01; |
195 | *(volatile unsigned char *)(timer+1)=0x40; | 195 | *(volatile unsigned char *)(timer+1)=0x40; |
diff --git a/arch/m68k/apollo/dma.c b/arch/m68k/apollo/dma.c deleted file mode 100644 index aed8be177ef1..000000000000 --- a/arch/m68k/apollo/dma.c +++ /dev/null | |||
@@ -1,50 +0,0 @@ | |||
1 | #include <linux/types.h> | ||
2 | #include <linux/kernel.h> | ||
3 | #include <linux/mm.h> | ||
4 | #include <linux/kd.h> | ||
5 | #include <linux/tty.h> | ||
6 | #include <linux/console.h> | ||
7 | |||
8 | #include <asm/setup.h> | ||
9 | #include <asm/bootinfo.h> | ||
10 | #include <asm/system.h> | ||
11 | #include <asm/pgtable.h> | ||
12 | #include <asm/apollodma.h> | ||
13 | #include <asm/io.h> | ||
14 | |||
15 | /* note only works for 16 Bit 1 page DMA's */ | ||
16 | |||
17 | static unsigned short next_free_xlat_entry=0; | ||
18 | |||
19 | unsigned short dma_map_page(unsigned long phys_addr,int count,int type) { | ||
20 | |||
21 | unsigned long page_aligned_addr=phys_addr & (~((1<<12)-1)); | ||
22 | unsigned short start_map_addr=page_aligned_addr >> 10; | ||
23 | unsigned short free_xlat_entry, *xlat_map_entry; | ||
24 | int i; | ||
25 | |||
26 | free_xlat_entry=next_free_xlat_entry; | ||
27 | for(i=0,xlat_map_entry=addr_xlat_map+(free_xlat_entry<<2);i<8;i++,xlat_map_entry++) { | ||
28 | #if 0 | ||
29 | printk("phys_addr: %x, page_aligned_addr: %x, start_map_addr: %x\n",phys_addr,page_aligned_addr,start_map_addr+i); | ||
30 | #endif | ||
31 | out_be16(xlat_map_entry, start_map_addr+i); | ||
32 | } | ||
33 | |||
34 | next_free_xlat_entry+=2; | ||
35 | if(next_free_xlat_entry>125) | ||
36 | next_free_xlat_entry=0; | ||
37 | |||
38 | #if 0 | ||
39 | printk("next_free_xlat_entry: %d\n",next_free_xlat_entry); | ||
40 | #endif | ||
41 | |||
42 | return free_xlat_entry<<10; | ||
43 | } | ||
44 | |||
45 | void dma_unmap_page(unsigned short dma_addr) { | ||
46 | |||
47 | return ; | ||
48 | |||
49 | } | ||
50 | |||
diff --git a/arch/m68k/apollo/dn_ints.c b/arch/m68k/apollo/dn_ints.c index 9fe07803797b..4274af125998 100644 --- a/arch/m68k/apollo/dn_ints.c +++ b/arch/m68k/apollo/dn_ints.c | |||
@@ -6,7 +6,7 @@ | |||
6 | 6 | ||
7 | void dn_process_int(unsigned int irq, struct pt_regs *fp) | 7 | void dn_process_int(unsigned int irq, struct pt_regs *fp) |
8 | { | 8 | { |
9 | m68k_handle_int(irq, fp); | 9 | __m68k_handle_int(irq, fp); |
10 | 10 | ||
11 | *(volatile unsigned char *)(pica)=0x20; | 11 | *(volatile unsigned char *)(pica)=0x20; |
12 | *(volatile unsigned char *)(picb)=0x20; | 12 | *(volatile unsigned char *)(picb)=0x20; |
diff --git a/arch/m68k/atari/ataints.c b/arch/m68k/atari/ataints.c index ece13cbf9950..7f812641790c 100644 --- a/arch/m68k/atari/ataints.c +++ b/arch/m68k/atari/ataints.c | |||
@@ -332,6 +332,9 @@ static void atari_shutdown_irq(unsigned int irq) | |||
332 | atari_disable_irq(irq); | 332 | atari_disable_irq(irq); |
333 | atari_turnoff_irq(irq); | 333 | atari_turnoff_irq(irq); |
334 | m68k_irq_shutdown(irq); | 334 | m68k_irq_shutdown(irq); |
335 | |||
336 | if (irq == IRQ_AUTO_4) | ||
337 | vectors[VEC_INT4] = falcon_hblhandler; | ||
335 | } | 338 | } |
336 | 339 | ||
337 | static struct irq_controller atari_irq_controller = { | 340 | static struct irq_controller atari_irq_controller = { |
@@ -356,7 +359,7 @@ static struct irq_controller atari_irq_controller = { | |||
356 | 359 | ||
357 | void __init atari_init_IRQ(void) | 360 | void __init atari_init_IRQ(void) |
358 | { | 361 | { |
359 | m68k_setup_user_interrupt(VEC_USER, 192, NULL); | 362 | m68k_setup_user_interrupt(VEC_USER, NUM_ATARI_SOURCES - IRQ_USER, NULL); |
360 | m68k_setup_irq_controller(&atari_irq_controller, 1, NUM_ATARI_SOURCES - 1); | 363 | m68k_setup_irq_controller(&atari_irq_controller, 1, NUM_ATARI_SOURCES - 1); |
361 | 364 | ||
362 | /* Initialize the MFP(s) */ | 365 | /* Initialize the MFP(s) */ |
@@ -403,8 +406,10 @@ void __init atari_init_IRQ(void) | |||
403 | * gets overruns) | 406 | * gets overruns) |
404 | */ | 407 | */ |
405 | 408 | ||
406 | if (!MACH_IS_HADES) | 409 | if (!MACH_IS_HADES) { |
407 | vectors[VEC_INT2] = falcon_hblhandler; | 410 | vectors[VEC_INT2] = falcon_hblhandler; |
411 | vectors[VEC_INT4] = falcon_hblhandler; | ||
412 | } | ||
408 | } | 413 | } |
409 | 414 | ||
410 | if (ATARIHW_PRESENT(PCM_8BIT) && ATARIHW_PRESENT(MICROWIRE)) { | 415 | if (ATARIHW_PRESENT(PCM_8BIT) && ATARIHW_PRESENT(MICROWIRE)) { |
diff --git a/arch/m68k/atari/config.c b/arch/m68k/atari/config.c index b2079252a954..ca5cd4344e3d 100644 --- a/arch/m68k/atari/config.c +++ b/arch/m68k/atari/config.c | |||
@@ -62,7 +62,7 @@ static void atari_heartbeat( int on ); | |||
62 | #endif | 62 | #endif |
63 | 63 | ||
64 | /* atari specific timer functions (in time.c) */ | 64 | /* atari specific timer functions (in time.c) */ |
65 | extern void atari_sched_init(irqreturn_t (*)(int, void *, struct pt_regs *)); | 65 | extern void atari_sched_init(irq_handler_t ); |
66 | extern unsigned long atari_gettimeoffset (void); | 66 | extern unsigned long atari_gettimeoffset (void); |
67 | extern int atari_mste_hwclk (int, struct rtc_time *); | 67 | extern int atari_mste_hwclk (int, struct rtc_time *); |
68 | extern int atari_tt_hwclk (int, struct rtc_time *); | 68 | extern int atari_tt_hwclk (int, struct rtc_time *); |
diff --git a/arch/m68k/atari/stdma.c b/arch/m68k/atari/stdma.c index 288f5e6a124e..d64b5804e980 100644 --- a/arch/m68k/atari/stdma.c +++ b/arch/m68k/atari/stdma.c | |||
@@ -44,7 +44,7 @@ | |||
44 | 44 | ||
45 | static int stdma_locked; /* the semaphore */ | 45 | static int stdma_locked; /* the semaphore */ |
46 | /* int func to be called */ | 46 | /* int func to be called */ |
47 | static irqreturn_t (*stdma_isr)(int, void *, struct pt_regs *); | 47 | static irq_handler_t stdma_isr; |
48 | static void *stdma_isr_data; /* data passed to isr */ | 48 | static void *stdma_isr_data; /* data passed to isr */ |
49 | static DECLARE_WAIT_QUEUE_HEAD(stdma_wait); /* wait queue for ST-DMA */ | 49 | static DECLARE_WAIT_QUEUE_HEAD(stdma_wait); /* wait queue for ST-DMA */ |
50 | 50 | ||
@@ -53,7 +53,7 @@ static DECLARE_WAIT_QUEUE_HEAD(stdma_wait); /* wait queue for ST-DMA */ | |||
53 | 53 | ||
54 | /***************************** Prototypes *****************************/ | 54 | /***************************** Prototypes *****************************/ |
55 | 55 | ||
56 | static irqreturn_t stdma_int (int irq, void *dummy, struct pt_regs *fp); | 56 | static irqreturn_t stdma_int (int irq, void *dummy); |
57 | 57 | ||
58 | /************************* End of Prototypes **************************/ | 58 | /************************* End of Prototypes **************************/ |
59 | 59 | ||
@@ -75,8 +75,7 @@ static irqreturn_t stdma_int (int irq, void *dummy, struct pt_regs *fp); | |||
75 | * | 75 | * |
76 | */ | 76 | */ |
77 | 77 | ||
78 | void stdma_lock(irqreturn_t (*handler)(int, void *, struct pt_regs *), | 78 | void stdma_lock(irq_handler_t handler, void *data) |
79 | void *data) | ||
80 | { | 79 | { |
81 | unsigned long flags; | 80 | unsigned long flags; |
82 | 81 | ||
@@ -188,9 +187,9 @@ void __init stdma_init(void) | |||
188 | * | 187 | * |
189 | */ | 188 | */ |
190 | 189 | ||
191 | static irqreturn_t stdma_int(int irq, void *dummy, struct pt_regs *fp) | 190 | static irqreturn_t stdma_int(int irq, void *dummy) |
192 | { | 191 | { |
193 | if (stdma_isr) | 192 | if (stdma_isr) |
194 | (*stdma_isr)(irq, stdma_isr_data, fp); | 193 | (*stdma_isr)(irq, stdma_isr_data); |
195 | return IRQ_HANDLED; | 194 | return IRQ_HANDLED; |
196 | } | 195 | } |
diff --git a/arch/m68k/atari/time.c b/arch/m68k/atari/time.c index e79bbc94216d..e0d3c8bfb408 100644 --- a/arch/m68k/atari/time.c +++ b/arch/m68k/atari/time.c | |||
@@ -16,11 +16,12 @@ | |||
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | #include <linux/rtc.h> | 17 | #include <linux/rtc.h> |
18 | #include <linux/bcd.h> | 18 | #include <linux/bcd.h> |
19 | #include <linux/delay.h> | ||
19 | 20 | ||
20 | #include <asm/atariints.h> | 21 | #include <asm/atariints.h> |
21 | 22 | ||
22 | void __init | 23 | void __init |
23 | atari_sched_init(irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) | 24 | atari_sched_init(irq_handler_t timer_routine) |
24 | { | 25 | { |
25 | /* set Timer C data Register */ | 26 | /* set Timer C data Register */ |
26 | mfp.tim_dt_c = INT_TICKS; | 27 | mfp.tim_dt_c = INT_TICKS; |
@@ -212,8 +213,12 @@ int atari_tt_hwclk( int op, struct rtc_time *t ) | |||
212 | * additionally the RTC_SET bit is set to prevent an update cycle. | 213 | * additionally the RTC_SET bit is set to prevent an update cycle. |
213 | */ | 214 | */ |
214 | 215 | ||
215 | while( RTC_READ(RTC_FREQ_SELECT) & RTC_UIP ) | 216 | while( RTC_READ(RTC_FREQ_SELECT) & RTC_UIP ) { |
216 | schedule_timeout_interruptible(HWCLK_POLL_INTERVAL); | 217 | if (in_atomic() || irqs_disabled()) |
218 | mdelay(1); | ||
219 | else | ||
220 | schedule_timeout_interruptible(HWCLK_POLL_INTERVAL); | ||
221 | } | ||
217 | 222 | ||
218 | local_irq_save(flags); | 223 | local_irq_save(flags); |
219 | RTC_WRITE( RTC_CONTROL, ctrl | RTC_SET ); | 224 | RTC_WRITE( RTC_CONTROL, ctrl | RTC_SET ); |
diff --git a/arch/m68k/bvme6000/config.c b/arch/m68k/bvme6000/config.c index d1e916ae55a8..896ae3d3d919 100644 --- a/arch/m68k/bvme6000/config.c +++ b/arch/m68k/bvme6000/config.c | |||
@@ -38,7 +38,7 @@ | |||
38 | 38 | ||
39 | static void bvme6000_get_model(char *model); | 39 | static void bvme6000_get_model(char *model); |
40 | static int bvme6000_get_hardware_list(char *buffer); | 40 | static int bvme6000_get_hardware_list(char *buffer); |
41 | extern void bvme6000_sched_init(irqreturn_t (*handler)(int, void *, struct pt_regs *)); | 41 | extern void bvme6000_sched_init(irq_handler_t handler); |
42 | extern unsigned long bvme6000_gettimeoffset (void); | 42 | extern unsigned long bvme6000_gettimeoffset (void); |
43 | extern int bvme6000_hwclk (int, struct rtc_time *); | 43 | extern int bvme6000_hwclk (int, struct rtc_time *); |
44 | extern int bvme6000_set_clock_mmss (unsigned long); | 44 | extern int bvme6000_set_clock_mmss (unsigned long); |
@@ -52,7 +52,7 @@ static unsigned char bin2bcd (unsigned char b); | |||
52 | /* Save tick handler routine pointer, will point to do_timer() in | 52 | /* Save tick handler routine pointer, will point to do_timer() in |
53 | * kernel/sched.c, called via bvme6000_process_int() */ | 53 | * kernel/sched.c, called via bvme6000_process_int() */ |
54 | 54 | ||
55 | static irqreturn_t (*tick_handler)(int, void *, struct pt_regs *); | 55 | static irq_handler_t tick_handler; |
56 | 56 | ||
57 | 57 | ||
58 | int bvme6000_parse_bootinfo(const struct bi_record *bi) | 58 | int bvme6000_parse_bootinfo(const struct bi_record *bi) |
@@ -154,7 +154,7 @@ void __init config_bvme6000(void) | |||
154 | } | 154 | } |
155 | 155 | ||
156 | 156 | ||
157 | irqreturn_t bvme6000_abort_int (int irq, void *dev_id, struct pt_regs *fp) | 157 | irqreturn_t bvme6000_abort_int (int irq, void *dev_id) |
158 | { | 158 | { |
159 | unsigned long *new = (unsigned long *)vectors; | 159 | unsigned long *new = (unsigned long *)vectors; |
160 | unsigned long *old = (unsigned long *)0xf8000000; | 160 | unsigned long *old = (unsigned long *)0xf8000000; |
@@ -171,14 +171,14 @@ irqreturn_t bvme6000_abort_int (int irq, void *dev_id, struct pt_regs *fp) | |||
171 | } | 171 | } |
172 | 172 | ||
173 | 173 | ||
174 | static irqreturn_t bvme6000_timer_int (int irq, void *dev_id, struct pt_regs *fp) | 174 | static irqreturn_t bvme6000_timer_int (int irq, void *dev_id) |
175 | { | 175 | { |
176 | volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE; | 176 | volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE; |
177 | unsigned char msr = rtc->msr & 0xc0; | 177 | unsigned char msr = rtc->msr & 0xc0; |
178 | 178 | ||
179 | rtc->msr = msr | 0x20; /* Ack the interrupt */ | 179 | rtc->msr = msr | 0x20; /* Ack the interrupt */ |
180 | 180 | ||
181 | return tick_handler(irq, dev_id, fp); | 181 | return tick_handler(irq, dev_id); |
182 | } | 182 | } |
183 | 183 | ||
184 | /* | 184 | /* |
@@ -190,7 +190,7 @@ static irqreturn_t bvme6000_timer_int (int irq, void *dev_id, struct pt_regs *fp | |||
190 | * so divide by 8 to get the microsecond result. | 190 | * so divide by 8 to get the microsecond result. |
191 | */ | 191 | */ |
192 | 192 | ||
193 | void bvme6000_sched_init (irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) | 193 | void bvme6000_sched_init (irq_handler_t timer_routine) |
194 | { | 194 | { |
195 | volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE; | 195 | volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE; |
196 | unsigned char msr = rtc->msr & 0xc0; | 196 | unsigned char msr = rtc->msr & 0xc0; |
diff --git a/arch/m68k/hp300/time.c b/arch/m68k/hp300/time.c index 7df05662b277..dd7c8a2583d3 100644 --- a/arch/m68k/hp300/time.c +++ b/arch/m68k/hp300/time.c | |||
@@ -36,15 +36,15 @@ | |||
36 | 36 | ||
37 | #define INTVAL ((10000 / 4) - 1) | 37 | #define INTVAL ((10000 / 4) - 1) |
38 | 38 | ||
39 | static irqreturn_t hp300_tick(int irq, void *dev_id, struct pt_regs *regs) | 39 | static irqreturn_t hp300_tick(int irq, void *dev_id) |
40 | { | 40 | { |
41 | unsigned long tmp; | 41 | unsigned long tmp; |
42 | irqreturn_t (*vector)(int, void *, struct pt_regs *) = dev_id; | 42 | irq_handler_t vector = dev_id; |
43 | in_8(CLOCKBASE + CLKSR); | 43 | in_8(CLOCKBASE + CLKSR); |
44 | asm volatile ("movpw %1@(5),%0" : "=d" (tmp) : "a" (CLOCKBASE)); | 44 | asm volatile ("movpw %1@(5),%0" : "=d" (tmp) : "a" (CLOCKBASE)); |
45 | /* Turn off the network and SCSI leds */ | 45 | /* Turn off the network and SCSI leds */ |
46 | blinken_leds(0, 0xe0); | 46 | blinken_leds(0, 0xe0); |
47 | return vector(irq, NULL, regs); | 47 | return vector(irq, NULL); |
48 | } | 48 | } |
49 | 49 | ||
50 | unsigned long hp300_gettimeoffset(void) | 50 | unsigned long hp300_gettimeoffset(void) |
@@ -63,7 +63,7 @@ unsigned long hp300_gettimeoffset(void) | |||
63 | return (USECS_PER_JIFFY * ticks) / INTVAL; | 63 | return (USECS_PER_JIFFY * ticks) / INTVAL; |
64 | } | 64 | } |
65 | 65 | ||
66 | void __init hp300_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *)) | 66 | void __init hp300_sched_init(irq_handler_t vector) |
67 | { | 67 | { |
68 | out_8(CLOCKBASE + CLKCR2, 0x1); /* select CR1 */ | 68 | out_8(CLOCKBASE + CLKCR2, 0x1); /* select CR1 */ |
69 | out_8(CLOCKBASE + CLKCR1, 0x1); /* reset */ | 69 | out_8(CLOCKBASE + CLKCR1, 0x1); /* reset */ |
diff --git a/arch/m68k/hp300/time.h b/arch/m68k/hp300/time.h index 8ef9987b49ab..f5b3d098b0f5 100644 --- a/arch/m68k/hp300/time.h +++ b/arch/m68k/hp300/time.h | |||
@@ -1,4 +1,4 @@ | |||
1 | extern void hp300_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *)); | 1 | extern void hp300_sched_init(irq_handler_t vector); |
2 | extern unsigned long hp300_gettimeoffset (void); | 2 | extern unsigned long hp300_gettimeoffset (void); |
3 | 3 | ||
4 | 4 | ||
diff --git a/arch/m68k/kernel/Makefile b/arch/m68k/kernel/Makefile index dae609797dc0..1c9ecaa473d5 100644 --- a/arch/m68k/kernel/Makefile +++ b/arch/m68k/kernel/Makefile | |||
@@ -9,10 +9,11 @@ else | |||
9 | endif | 9 | endif |
10 | extra-y += vmlinux.lds | 10 | extra-y += vmlinux.lds |
11 | 11 | ||
12 | obj-y := entry.o process.o traps.o ints.o dma.o signal.o ptrace.o \ | 12 | obj-y := entry.o process.o traps.o ints.o signal.o ptrace.o \ |
13 | sys_m68k.o time.o semaphore.o setup.o m68k_ksyms.o | 13 | sys_m68k.o time.o semaphore.o setup.o m68k_ksyms.o |
14 | 14 | ||
15 | obj-$(CONFIG_PCI) += bios32.o | 15 | obj-$(CONFIG_PCI) += bios32.o |
16 | obj-$(CONFIG_MODULES) += module.o | 16 | obj-$(CONFIG_MODULES) += module.o |
17 | obj-y$(CONFIG_MMU_SUN3) += dma.o # no, it's not a typo | ||
17 | 18 | ||
18 | EXTRA_AFLAGS := -traditional | 19 | EXTRA_AFLAGS := -traditional |
diff --git a/arch/m68k/kernel/dma.c b/arch/m68k/kernel/dma.c index fc449f8b2045..9d4e4b5b6bd8 100644 --- a/arch/m68k/kernel/dma.c +++ b/arch/m68k/kernel/dma.c | |||
@@ -15,7 +15,7 @@ | |||
15 | #include <asm/scatterlist.h> | 15 | #include <asm/scatterlist.h> |
16 | 16 | ||
17 | void *dma_alloc_coherent(struct device *dev, size_t size, | 17 | void *dma_alloc_coherent(struct device *dev, size_t size, |
18 | dma_addr_t *handle, int flag) | 18 | dma_addr_t *handle, gfp_t flag) |
19 | { | 19 | { |
20 | struct page *page, **map; | 20 | struct page *page, **map; |
21 | pgprot_t pgprot; | 21 | pgprot_t pgprot; |
@@ -51,7 +51,7 @@ void *dma_alloc_coherent(struct device *dev, size_t size, | |||
51 | pgprot_val(pgprot) |= _PAGE_GLOBAL040 | _PAGE_NOCACHE_S; | 51 | pgprot_val(pgprot) |= _PAGE_GLOBAL040 | _PAGE_NOCACHE_S; |
52 | else | 52 | else |
53 | pgprot_val(pgprot) |= _PAGE_NOCACHE030; | 53 | pgprot_val(pgprot) |= _PAGE_NOCACHE030; |
54 | addr = vmap(map, size, flag, pgprot); | 54 | addr = vmap(map, size, VM_MAP, pgprot); |
55 | kfree(map); | 55 | kfree(map); |
56 | 56 | ||
57 | return addr; | 57 | return addr; |
diff --git a/arch/m68k/kernel/entry.S b/arch/m68k/kernel/entry.S index 9083c8b7659f..222ce4244564 100644 --- a/arch/m68k/kernel/entry.S +++ b/arch/m68k/kernel/entry.S | |||
@@ -205,7 +205,7 @@ ENTRY(auto_inthandler) | |||
205 | movel %sp,%sp@- | 205 | movel %sp,%sp@- |
206 | movel %d0,%sp@- | put vector # on stack | 206 | movel %d0,%sp@- | put vector # on stack |
207 | auto_irqhandler_fixup = . + 2 | 207 | auto_irqhandler_fixup = . + 2 |
208 | jsr m68k_handle_int | process the IRQ | 208 | jsr __m68k_handle_int | process the IRQ |
209 | addql #8,%sp | pop parameters off stack | 209 | addql #8,%sp | pop parameters off stack |
210 | 210 | ||
211 | ret_from_interrupt: | 211 | ret_from_interrupt: |
@@ -239,7 +239,7 @@ user_irqvec_fixup = . + 2 | |||
239 | movel %sp,%sp@- | 239 | movel %sp,%sp@- |
240 | movel %d0,%sp@- | put vector # on stack | 240 | movel %d0,%sp@- | put vector # on stack |
241 | user_irqhandler_fixup = . + 2 | 241 | user_irqhandler_fixup = . + 2 |
242 | jsr m68k_handle_int | process the IRQ | 242 | jsr __m68k_handle_int | process the IRQ |
243 | addql #8,%sp | pop parameters off stack | 243 | addql #8,%sp | pop parameters off stack |
244 | 244 | ||
245 | subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) | 245 | subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) |
@@ -706,4 +706,33 @@ sys_call_table: | |||
706 | .long sys_add_key | 706 | .long sys_add_key |
707 | .long sys_request_key /* 280 */ | 707 | .long sys_request_key /* 280 */ |
708 | .long sys_keyctl | 708 | .long sys_keyctl |
709 | .long sys_ioprio_set | ||
710 | .long sys_ioprio_get | ||
711 | .long sys_inotify_init | ||
712 | .long sys_inotify_add_watch /* 285 */ | ||
713 | .long sys_inotify_rm_watch | ||
714 | .long sys_migrate_pages | ||
715 | .long sys_openat | ||
716 | .long sys_mkdirat | ||
717 | .long sys_mknodat /* 290 */ | ||
718 | .long sys_fchownat | ||
719 | .long sys_futimesat | ||
720 | .long sys_fstatat64 | ||
721 | .long sys_unlinkat | ||
722 | .long sys_renameat /* 295 */ | ||
723 | .long sys_linkat | ||
724 | .long sys_symlinkat | ||
725 | .long sys_readlinkat | ||
726 | .long sys_fchmodat | ||
727 | .long sys_faccessat /* 300 */ | ||
728 | .long sys_ni_syscall /* Reserved for pselect6 */ | ||
729 | .long sys_ni_syscall /* Reserved for ppoll */ | ||
730 | .long sys_unshare | ||
731 | .long sys_set_robust_list | ||
732 | .long sys_get_robust_list /* 305 */ | ||
733 | .long sys_splice | ||
734 | .long sys_sync_file_range | ||
735 | .long sys_tee | ||
736 | .long sys_vmsplice | ||
737 | .long sys_move_pages /* 310 */ | ||
709 | 738 | ||
diff --git a/arch/m68k/kernel/ints.c b/arch/m68k/kernel/ints.c index b33e37fb7b0e..84aceca6c05c 100644 --- a/arch/m68k/kernel/ints.c +++ b/arch/m68k/kernel/ints.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include <asm/page.h> | 39 | #include <asm/page.h> |
40 | #include <asm/machdep.h> | 40 | #include <asm/machdep.h> |
41 | #include <asm/cacheflush.h> | 41 | #include <asm/cacheflush.h> |
42 | #include <asm/irq_regs.h> | ||
42 | 43 | ||
43 | #ifdef CONFIG_Q40 | 44 | #ifdef CONFIG_Q40 |
44 | #include <asm/q40ints.h> | 45 | #include <asm/q40ints.h> |
@@ -104,7 +105,7 @@ void __init init_IRQ(void) | |||
104 | * @handler: called from auto vector interrupts | 105 | * @handler: called from auto vector interrupts |
105 | * | 106 | * |
106 | * setup the handler to be called from auto vector interrupts instead of the | 107 | * setup the handler to be called from auto vector interrupts instead of the |
107 | * standard m68k_handle_int(), it will be called with irq numbers in the range | 108 | * standard __m68k_handle_int(), it will be called with irq numbers in the range |
108 | * from IRQ_AUTO_1 - IRQ_AUTO_7. | 109 | * from IRQ_AUTO_1 - IRQ_AUTO_7. |
109 | */ | 110 | */ |
110 | void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *)) | 111 | void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *)) |
@@ -123,7 +124,7 @@ void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_re | |||
123 | * setup user vector interrupts, this includes activating the specified range | 124 | * setup user vector interrupts, this includes activating the specified range |
124 | * of interrupts, only then these interrupts can be requested (note: this is | 125 | * of interrupts, only then these interrupts can be requested (note: this is |
125 | * different from auto vector interrupts). An optional handler can be installed | 126 | * different from auto vector interrupts). An optional handler can be installed |
126 | * to be called instead of the default m68k_handle_int(), it will be called | 127 | * to be called instead of the default __m68k_handle_int(), it will be called |
127 | * with irq numbers starting from IRQ_USER. | 128 | * with irq numbers starting from IRQ_USER. |
128 | */ | 129 | */ |
129 | void __init m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, | 130 | void __init m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, |
@@ -131,6 +132,7 @@ void __init m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, | |||
131 | { | 132 | { |
132 | int i; | 133 | int i; |
133 | 134 | ||
135 | BUG_ON(IRQ_USER + cnt >= NR_IRQS); | ||
134 | m68k_first_user_vec = vec; | 136 | m68k_first_user_vec = vec; |
135 | for (i = 0; i < cnt; i++) | 137 | for (i = 0; i < cnt; i++) |
136 | irq_controller[IRQ_USER + i] = &user_irq_controller; | 138 | irq_controller[IRQ_USER + i] = &user_irq_controller; |
@@ -215,7 +217,7 @@ int setup_irq(unsigned int irq, struct irq_node *node) | |||
215 | } | 217 | } |
216 | 218 | ||
217 | int request_irq(unsigned int irq, | 219 | int request_irq(unsigned int irq, |
218 | irqreturn_t (*handler) (int, void *, struct pt_regs *), | 220 | irq_handler_t handler, |
219 | unsigned long flags, const char *devname, void *dev_id) | 221 | unsigned long flags, const char *devname, void *dev_id) |
220 | { | 222 | { |
221 | struct irq_node *node; | 223 | struct irq_node *node; |
@@ -379,18 +381,25 @@ unsigned int irq_canonicalize(unsigned int irq) | |||
379 | 381 | ||
380 | EXPORT_SYMBOL(irq_canonicalize); | 382 | EXPORT_SYMBOL(irq_canonicalize); |
381 | 383 | ||
382 | asmlinkage void m68k_handle_int(unsigned int irq, struct pt_regs *regs) | 384 | asmlinkage void m68k_handle_int(unsigned int irq) |
383 | { | 385 | { |
384 | struct irq_node *node; | 386 | struct irq_node *node; |
385 | |||
386 | kstat_cpu(0).irqs[irq]++; | 387 | kstat_cpu(0).irqs[irq]++; |
387 | node = irq_list[irq]; | 388 | node = irq_list[irq]; |
388 | do { | 389 | do { |
389 | node->handler(irq, node->dev_id, regs); | 390 | node->handler(irq, node->dev_id); |
390 | node = node->next; | 391 | node = node->next; |
391 | } while (node); | 392 | } while (node); |
392 | } | 393 | } |
393 | 394 | ||
395 | asmlinkage void __m68k_handle_int(unsigned int irq, struct pt_regs *regs) | ||
396 | { | ||
397 | struct pt_regs *old_regs; | ||
398 | old_regs = set_irq_regs(regs); | ||
399 | m68k_handle_int(irq); | ||
400 | set_irq_regs(old_regs); | ||
401 | } | ||
402 | |||
394 | asmlinkage void handle_badint(struct pt_regs *regs) | 403 | asmlinkage void handle_badint(struct pt_regs *regs) |
395 | { | 404 | { |
396 | kstat_cpu(0).irqs[0]++; | 405 | kstat_cpu(0).irqs[0]++; |
diff --git a/arch/m68k/kernel/m68k_ksyms.c b/arch/m68k/kernel/m68k_ksyms.c index aff26a52167c..f9636e84e6a4 100644 --- a/arch/m68k/kernel/m68k_ksyms.c +++ b/arch/m68k/kernel/m68k_ksyms.c | |||
@@ -1,7 +1,6 @@ | |||
1 | #include <linux/module.h> | 1 | #include <linux/module.h> |
2 | #include <linux/linkage.h> | 2 | #include <linux/linkage.h> |
3 | #include <linux/sched.h> | 3 | #include <linux/sched.h> |
4 | #include <linux/string.h> | ||
5 | #include <linux/mm.h> | 4 | #include <linux/mm.h> |
6 | #include <linux/user.h> | 5 | #include <linux/user.h> |
7 | #include <linux/elfcore.h> | 6 | #include <linux/elfcore.h> |
@@ -53,9 +52,6 @@ EXPORT_SYMBOL(mach_beep); | |||
53 | #endif | 52 | #endif |
54 | EXPORT_SYMBOL(dump_fpu); | 53 | EXPORT_SYMBOL(dump_fpu); |
55 | EXPORT_SYMBOL(dump_thread); | 54 | EXPORT_SYMBOL(dump_thread); |
56 | EXPORT_SYMBOL(strnlen); | ||
57 | EXPORT_SYMBOL(strrchr); | ||
58 | EXPORT_SYMBOL(strstr); | ||
59 | EXPORT_SYMBOL(kernel_thread); | 55 | EXPORT_SYMBOL(kernel_thread); |
60 | #ifdef CONFIG_VME | 56 | #ifdef CONFIG_VME |
61 | EXPORT_SYMBOL(vme_brdtype); | 57 | EXPORT_SYMBOL(vme_brdtype); |
diff --git a/arch/m68k/kernel/setup.c b/arch/m68k/kernel/setup.c index f2d7ee0ee18c..42d5b85f3350 100644 --- a/arch/m68k/kernel/setup.c +++ b/arch/m68k/kernel/setup.c | |||
@@ -64,7 +64,7 @@ static char m68k_command_line[CL_SIZE]; | |||
64 | 64 | ||
65 | char m68k_debug_device[6] = ""; | 65 | char m68k_debug_device[6] = ""; |
66 | 66 | ||
67 | void (*mach_sched_init) (irqreturn_t (*handler)(int, void *, struct pt_regs *)) __initdata = NULL; | 67 | void (*mach_sched_init) (irq_handler_t handler) __initdata = NULL; |
68 | /* machine dependent irq functions */ | 68 | /* machine dependent irq functions */ |
69 | void (*mach_init_IRQ) (void) __initdata = NULL; | 69 | void (*mach_init_IRQ) (void) __initdata = NULL; |
70 | void (*mach_get_model) (char *model); | 70 | void (*mach_get_model) (char *model); |
diff --git a/arch/m68k/kernel/time.c b/arch/m68k/kernel/time.c index 28b2fefa4513..2a599c3ed787 100644 --- a/arch/m68k/kernel/time.c +++ b/arch/m68k/kernel/time.c | |||
@@ -21,6 +21,7 @@ | |||
21 | 21 | ||
22 | #include <asm/machdep.h> | 22 | #include <asm/machdep.h> |
23 | #include <asm/io.h> | 23 | #include <asm/io.h> |
24 | #include <asm/irq_regs.h> | ||
24 | 25 | ||
25 | #include <linux/time.h> | 26 | #include <linux/time.h> |
26 | #include <linux/timex.h> | 27 | #include <linux/timex.h> |
@@ -37,13 +38,13 @@ static inline int set_rtc_mmss(unsigned long nowtime) | |||
37 | * timer_interrupt() needs to keep up the real-time clock, | 38 | * timer_interrupt() needs to keep up the real-time clock, |
38 | * as well as call the "do_timer()" routine every clocktick | 39 | * as well as call the "do_timer()" routine every clocktick |
39 | */ | 40 | */ |
40 | static irqreturn_t timer_interrupt(int irq, void *dummy, struct pt_regs * regs) | 41 | static irqreturn_t timer_interrupt(int irq, void *dummy) |
41 | { | 42 | { |
42 | do_timer(1); | 43 | do_timer(1); |
43 | #ifndef CONFIG_SMP | 44 | #ifndef CONFIG_SMP |
44 | update_process_times(user_mode(regs)); | 45 | update_process_times(user_mode(get_irq_regs())); |
45 | #endif | 46 | #endif |
46 | profile_tick(CPU_PROFILING, regs); | 47 | profile_tick(CPU_PROFILING); |
47 | 48 | ||
48 | #ifdef CONFIG_HEARTBEAT | 49 | #ifdef CONFIG_HEARTBEAT |
49 | /* use power LED as a heartbeat instead -- much more useful | 50 | /* use power LED as a heartbeat instead -- much more useful |
diff --git a/arch/m68k/lib/string.c b/arch/m68k/lib/string.c index b92b89e1ea0c..891e1347bc4e 100644 --- a/arch/m68k/lib/string.c +++ b/arch/m68k/lib/string.c | |||
@@ -1,6 +1,19 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file COPYING in the main directory of this archive | ||
4 | * for more details. | ||
5 | */ | ||
6 | |||
7 | #define __IN_STRING_C | ||
1 | 8 | ||
2 | #include <linux/types.h> | ||
3 | #include <linux/module.h> | 9 | #include <linux/module.h> |
10 | #include <linux/string.h> | ||
11 | |||
12 | char *strcpy(char *dest, const char *src) | ||
13 | { | ||
14 | return __kernel_strcpy(dest, src); | ||
15 | } | ||
16 | EXPORT_SYMBOL(strcpy); | ||
4 | 17 | ||
5 | void *memset(void *s, int c, size_t count) | 18 | void *memset(void *s, int c, size_t count) |
6 | { | 19 | { |
diff --git a/arch/m68k/lib/uaccess.c b/arch/m68k/lib/uaccess.c index 1bc188c0d983..865f9fb9e686 100644 --- a/arch/m68k/lib/uaccess.c +++ b/arch/m68k/lib/uaccess.c | |||
@@ -84,7 +84,7 @@ unsigned long __generic_copy_to_user(void __user *to, const void *from, | |||
84 | " .even\n" | 84 | " .even\n" |
85 | "20: lsl.l #2,%0\n" | 85 | "20: lsl.l #2,%0\n" |
86 | "50: add.l %5,%0\n" | 86 | "50: add.l %5,%0\n" |
87 | " jra 7b\n" | 87 | " jra 8b\n" |
88 | " .previous\n" | 88 | " .previous\n" |
89 | "\n" | 89 | "\n" |
90 | " .section __ex_table,\"a\"\n" | 90 | " .section __ex_table,\"a\"\n" |
diff --git a/arch/m68k/mac/baboon.c b/arch/m68k/mac/baboon.c index 6eaa881793d1..a1c7ec706741 100644 --- a/arch/m68k/mac/baboon.c +++ b/arch/m68k/mac/baboon.c | |||
@@ -25,7 +25,7 @@ | |||
25 | int baboon_present,baboon_active; | 25 | int baboon_present,baboon_active; |
26 | volatile struct baboon *baboon; | 26 | volatile struct baboon *baboon; |
27 | 27 | ||
28 | irqreturn_t baboon_irq(int, void *, struct pt_regs *); | 28 | irqreturn_t baboon_irq(int, void *); |
29 | 29 | ||
30 | #if 0 | 30 | #if 0 |
31 | extern int macide_ack_intr(struct ata_channel *); | 31 | extern int macide_ack_intr(struct ata_channel *); |
@@ -64,7 +64,7 @@ void __init baboon_register_interrupts(void) | |||
64 | * Baboon interrupt handler. This works a lot like a VIA. | 64 | * Baboon interrupt handler. This works a lot like a VIA. |
65 | */ | 65 | */ |
66 | 66 | ||
67 | irqreturn_t baboon_irq(int irq, void *dev_id, struct pt_regs *regs) | 67 | irqreturn_t baboon_irq(int irq, void *dev_id) |
68 | { | 68 | { |
69 | int irq_bit,i; | 69 | int irq_bit,i; |
70 | unsigned char events; | 70 | unsigned char events; |
@@ -81,7 +81,7 @@ irqreturn_t baboon_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
81 | for (i = 0, irq_bit = 1 ; i < 3 ; i++, irq_bit <<= 1) { | 81 | for (i = 0, irq_bit = 1 ; i < 3 ; i++, irq_bit <<= 1) { |
82 | if (events & irq_bit/* & baboon_active*/) { | 82 | if (events & irq_bit/* & baboon_active*/) { |
83 | baboon_active &= ~irq_bit; | 83 | baboon_active &= ~irq_bit; |
84 | m68k_handle_int(IRQ_BABOON_0 + i, regs); | 84 | m68k_handle_int(IRQ_BABOON_0 + i); |
85 | baboon_active |= irq_bit; | 85 | baboon_active |= irq_bit; |
86 | baboon->mb_ifr &= ~irq_bit; | 86 | baboon->mb_ifr &= ~irq_bit; |
87 | } | 87 | } |
diff --git a/arch/m68k/mac/config.c b/arch/m68k/mac/config.c index 85dda1095b1f..562b38d00180 100644 --- a/arch/m68k/mac/config.c +++ b/arch/m68k/mac/config.c | |||
@@ -72,7 +72,7 @@ extern int show_mac_interrupts(struct seq_file *, void *); | |||
72 | extern void iop_preinit(void); | 72 | extern void iop_preinit(void); |
73 | extern void iop_init(void); | 73 | extern void iop_init(void); |
74 | extern void via_init(void); | 74 | extern void via_init(void); |
75 | extern void via_init_clock(irqreturn_t (*func)(int, void *, struct pt_regs *)); | 75 | extern void via_init_clock(irq_handler_t func); |
76 | extern void via_flush_cache(void); | 76 | extern void via_flush_cache(void); |
77 | extern void oss_init(void); | 77 | extern void oss_init(void); |
78 | extern void psc_init(void); | 78 | extern void psc_init(void); |
@@ -88,7 +88,7 @@ extern void mac_debugging_long(int, long); | |||
88 | 88 | ||
89 | static void mac_get_model(char *str); | 89 | static void mac_get_model(char *str); |
90 | 90 | ||
91 | static void mac_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *)) | 91 | static void mac_sched_init(irq_handler_t vector) |
92 | { | 92 | { |
93 | via_init_clock(vector); | 93 | via_init_clock(vector); |
94 | } | 94 | } |
diff --git a/arch/m68k/mac/iop.c b/arch/m68k/mac/iop.c index bc657b1057a7..0cea21f58192 100644 --- a/arch/m68k/mac/iop.c +++ b/arch/m68k/mac/iop.c | |||
@@ -132,7 +132,7 @@ static int iop_get_proc_info(char *, char **, off_t, int); | |||
132 | 132 | ||
133 | struct listener { | 133 | struct listener { |
134 | const char *devname; | 134 | const char *devname; |
135 | void (*handler)(struct iop_msg *, struct pt_regs *); | 135 | void (*handler)(struct iop_msg *); |
136 | }; | 136 | }; |
137 | 137 | ||
138 | /* | 138 | /* |
@@ -152,7 +152,7 @@ static struct iop_msg iop_msg_pool[NUM_IOP_MSGS]; | |||
152 | static struct iop_msg *iop_send_queue[NUM_IOPS][NUM_IOP_CHAN]; | 152 | static struct iop_msg *iop_send_queue[NUM_IOPS][NUM_IOP_CHAN]; |
153 | static struct listener iop_listeners[NUM_IOPS][NUM_IOP_CHAN]; | 153 | static struct listener iop_listeners[NUM_IOPS][NUM_IOP_CHAN]; |
154 | 154 | ||
155 | irqreturn_t iop_ism_irq(int, void *, struct pt_regs *); | 155 | irqreturn_t iop_ism_irq(int, void *); |
156 | 156 | ||
157 | extern void oss_irq_enable(int); | 157 | extern void oss_irq_enable(int); |
158 | 158 | ||
@@ -342,7 +342,7 @@ void __init iop_register_interrupts(void) | |||
342 | */ | 342 | */ |
343 | 343 | ||
344 | int iop_listen(uint iop_num, uint chan, | 344 | int iop_listen(uint iop_num, uint chan, |
345 | void (*handler)(struct iop_msg *, struct pt_regs *), | 345 | void (*handler)(struct iop_msg *), |
346 | const char *devname) | 346 | const char *devname) |
347 | { | 347 | { |
348 | if ((iop_num >= NUM_IOPS) || !iop_base[iop_num]) return -EINVAL; | 348 | if ((iop_num >= NUM_IOPS) || !iop_base[iop_num]) return -EINVAL; |
@@ -407,7 +407,7 @@ static void iop_do_send(struct iop_msg *msg) | |||
407 | * has gone into the IOP_MSG_COMPLETE state. | 407 | * has gone into the IOP_MSG_COMPLETE state. |
408 | */ | 408 | */ |
409 | 409 | ||
410 | static void iop_handle_send(uint iop_num, uint chan, struct pt_regs *regs) | 410 | static void iop_handle_send(uint iop_num, uint chan) |
411 | { | 411 | { |
412 | volatile struct mac_iop *iop = iop_base[iop_num]; | 412 | volatile struct mac_iop *iop = iop_base[iop_num]; |
413 | struct iop_msg *msg,*msg2; | 413 | struct iop_msg *msg,*msg2; |
@@ -426,7 +426,7 @@ static void iop_handle_send(uint iop_num, uint chan, struct pt_regs *regs) | |||
426 | for (i = 0 ; i < IOP_MSG_LEN ; i++, offset++) { | 426 | for (i = 0 ; i < IOP_MSG_LEN ; i++, offset++) { |
427 | msg->reply[i] = iop_readb(iop, offset); | 427 | msg->reply[i] = iop_readb(iop, offset); |
428 | } | 428 | } |
429 | if (msg->handler) (*msg->handler)(msg, regs); | 429 | if (msg->handler) (*msg->handler)(msg); |
430 | msg2 = msg; | 430 | msg2 = msg; |
431 | msg = msg->next; | 431 | msg = msg->next; |
432 | iop_free_msg(msg2); | 432 | iop_free_msg(msg2); |
@@ -440,7 +440,7 @@ static void iop_handle_send(uint iop_num, uint chan, struct pt_regs *regs) | |||
440 | * gone into the IOP_MSG_NEW state. | 440 | * gone into the IOP_MSG_NEW state. |
441 | */ | 441 | */ |
442 | 442 | ||
443 | static void iop_handle_recv(uint iop_num, uint chan, struct pt_regs *regs) | 443 | static void iop_handle_recv(uint iop_num, uint chan) |
444 | { | 444 | { |
445 | volatile struct mac_iop *iop = iop_base[iop_num]; | 445 | volatile struct mac_iop *iop = iop_base[iop_num]; |
446 | int i,offset; | 446 | int i,offset; |
@@ -468,7 +468,7 @@ static void iop_handle_recv(uint iop_num, uint chan, struct pt_regs *regs) | |||
468 | /* the message ourselves to avoid possible stalls. */ | 468 | /* the message ourselves to avoid possible stalls. */ |
469 | 469 | ||
470 | if (msg->handler) { | 470 | if (msg->handler) { |
471 | (*msg->handler)(msg, regs); | 471 | (*msg->handler)(msg); |
472 | } else { | 472 | } else { |
473 | #ifdef DEBUG_IOP | 473 | #ifdef DEBUG_IOP |
474 | printk("iop_handle_recv: unclaimed message on iop %d channel %d\n", iop_num, chan); | 474 | printk("iop_handle_recv: unclaimed message on iop %d channel %d\n", iop_num, chan); |
@@ -492,7 +492,7 @@ static void iop_handle_recv(uint iop_num, uint chan, struct pt_regs *regs) | |||
492 | 492 | ||
493 | int iop_send_message(uint iop_num, uint chan, void *privdata, | 493 | int iop_send_message(uint iop_num, uint chan, void *privdata, |
494 | uint msg_len, __u8 *msg_data, | 494 | uint msg_len, __u8 *msg_data, |
495 | void (*handler)(struct iop_msg *, struct pt_regs *)) | 495 | void (*handler)(struct iop_msg *)) |
496 | { | 496 | { |
497 | struct iop_msg *msg, *q; | 497 | struct iop_msg *msg, *q; |
498 | 498 | ||
@@ -584,7 +584,7 @@ __u8 *iop_compare_code(uint iop_num, __u8 *code_start, | |||
584 | * Handle an ISM IOP interrupt | 584 | * Handle an ISM IOP interrupt |
585 | */ | 585 | */ |
586 | 586 | ||
587 | irqreturn_t iop_ism_irq(int irq, void *dev_id, struct pt_regs *regs) | 587 | irqreturn_t iop_ism_irq(int irq, void *dev_id) |
588 | { | 588 | { |
589 | uint iop_num = (uint) dev_id; | 589 | uint iop_num = (uint) dev_id; |
590 | volatile struct mac_iop *iop = iop_base[iop_num]; | 590 | volatile struct mac_iop *iop = iop_base[iop_num]; |
@@ -608,7 +608,7 @@ irqreturn_t iop_ism_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
608 | printk(" %02X", state); | 608 | printk(" %02X", state); |
609 | #endif | 609 | #endif |
610 | if (state == IOP_MSG_COMPLETE) { | 610 | if (state == IOP_MSG_COMPLETE) { |
611 | iop_handle_send(iop_num, i, regs); | 611 | iop_handle_send(iop_num, i); |
612 | } | 612 | } |
613 | } | 613 | } |
614 | #ifdef DEBUG_IOP | 614 | #ifdef DEBUG_IOP |
@@ -628,7 +628,7 @@ irqreturn_t iop_ism_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
628 | printk(" %02X", state); | 628 | printk(" %02X", state); |
629 | #endif | 629 | #endif |
630 | if (state == IOP_MSG_NEW) { | 630 | if (state == IOP_MSG_NEW) { |
631 | iop_handle_recv(iop_num, i, regs); | 631 | iop_handle_recv(iop_num, i); |
632 | } | 632 | } |
633 | } | 633 | } |
634 | #ifdef DEBUG_IOP | 634 | #ifdef DEBUG_IOP |
diff --git a/arch/m68k/mac/macints.c b/arch/m68k/mac/macints.c index 694b14bb0de1..f6fcd754d8f6 100644 --- a/arch/m68k/mac/macints.c +++ b/arch/m68k/mac/macints.c | |||
@@ -133,6 +133,7 @@ | |||
133 | #include <asm/hwtest.h> | 133 | #include <asm/hwtest.h> |
134 | #include <asm/errno.h> | 134 | #include <asm/errno.h> |
135 | #include <asm/macints.h> | 135 | #include <asm/macints.h> |
136 | #include <asm/irq_regs.h> | ||
136 | 137 | ||
137 | #define DEBUG_SPURIOUS | 138 | #define DEBUG_SPURIOUS |
138 | #define SHUTUP_SONIC | 139 | #define SHUTUP_SONIC |
@@ -208,8 +209,8 @@ static void scc_irq_disable(unsigned int); | |||
208 | * console_loglevel determines NMI handler function | 209 | * console_loglevel determines NMI handler function |
209 | */ | 210 | */ |
210 | 211 | ||
211 | irqreturn_t mac_nmi_handler(int, void *, struct pt_regs *); | 212 | irqreturn_t mac_nmi_handler(int, void *); |
212 | irqreturn_t mac_debug_handler(int, void *, struct pt_regs *); | 213 | irqreturn_t mac_debug_handler(int, void *); |
213 | 214 | ||
214 | /* #define DEBUG_MACINTS */ | 215 | /* #define DEBUG_MACINTS */ |
215 | 216 | ||
@@ -393,7 +394,7 @@ int mac_irq_pending(unsigned int irq) | |||
393 | 394 | ||
394 | static int num_debug[8]; | 395 | static int num_debug[8]; |
395 | 396 | ||
396 | irqreturn_t mac_debug_handler(int irq, void *dev_id, struct pt_regs *regs) | 397 | irqreturn_t mac_debug_handler(int irq, void *dev_id) |
397 | { | 398 | { |
398 | if (num_debug[irq] < 10) { | 399 | if (num_debug[irq] < 10) { |
399 | printk("DEBUG: Unexpected IRQ %d\n", irq); | 400 | printk("DEBUG: Unexpected IRQ %d\n", irq); |
@@ -405,7 +406,7 @@ irqreturn_t mac_debug_handler(int irq, void *dev_id, struct pt_regs *regs) | |||
405 | static int in_nmi; | 406 | static int in_nmi; |
406 | static volatile int nmi_hold; | 407 | static volatile int nmi_hold; |
407 | 408 | ||
408 | irqreturn_t mac_nmi_handler(int irq, void *dev_id, struct pt_regs *fp) | 409 | irqreturn_t mac_nmi_handler(int irq, void *dev_id) |
409 | { | 410 | { |
410 | int i; | 411 | int i; |
411 | /* | 412 | /* |
@@ -432,6 +433,7 @@ irqreturn_t mac_nmi_handler(int irq, void *dev_id, struct pt_regs *fp) | |||
432 | 433 | ||
433 | if (console_loglevel >= 8) { | 434 | if (console_loglevel >= 8) { |
434 | #if 0 | 435 | #if 0 |
436 | struct pt_regs *fp = get_irq_regs(); | ||
435 | show_state(); | 437 | show_state(); |
436 | printk("PC: %08lx\nSR: %04x SP: %p\n", fp->pc, fp->sr, fp); | 438 | printk("PC: %08lx\nSR: %04x SP: %p\n", fp->pc, fp->sr, fp); |
437 | printk("d0: %08lx d1: %08lx d2: %08lx d3: %08lx\n", | 439 | printk("d0: %08lx d1: %08lx d2: %08lx d3: %08lx\n", |
@@ -479,7 +481,7 @@ static void scc_irq_disable(unsigned int irq) | |||
479 | * here is cleaner than hacking it into drivers/char/macserial.c. | 481 | * here is cleaner than hacking it into drivers/char/macserial.c. |
480 | */ | 482 | */ |
481 | 483 | ||
482 | void mac_scc_dispatch(int irq, void *dev_id, struct pt_regs *regs) | 484 | void mac_scc_dispatch(int irq, void *dev_id) |
483 | { | 485 | { |
484 | volatile unsigned char *scc = (unsigned char *) mac_bi_data.sccbase + 2; | 486 | volatile unsigned char *scc = (unsigned char *) mac_bi_data.sccbase + 2; |
485 | unsigned char reg; | 487 | unsigned char reg; |
@@ -504,7 +506,7 @@ void mac_scc_dispatch(int irq, void *dev_id, struct pt_regs *regs) | |||
504 | /* pretty much kill the system. */ | 506 | /* pretty much kill the system. */ |
505 | 507 | ||
506 | if (reg & 0x38) | 508 | if (reg & 0x38) |
507 | m68k_handle_int(IRQ_SCCA, regs); | 509 | m68k_handle_int(IRQ_SCCA); |
508 | if (reg & 0x07) | 510 | if (reg & 0x07) |
509 | m68k_handle_int(IRQ_SCCB, regs); | 511 | m68k_handle_int(IRQ_SCCB); |
510 | } | 512 | } |
diff --git a/arch/m68k/mac/oss.c b/arch/m68k/mac/oss.c index 63e04365191f..63690819565a 100644 --- a/arch/m68k/mac/oss.c +++ b/arch/m68k/mac/oss.c | |||
@@ -30,11 +30,11 @@ | |||
30 | int oss_present; | 30 | int oss_present; |
31 | volatile struct mac_oss *oss; | 31 | volatile struct mac_oss *oss; |
32 | 32 | ||
33 | irqreturn_t oss_irq(int, void *, struct pt_regs *); | 33 | irqreturn_t oss_irq(int, void *); |
34 | irqreturn_t oss_nubus_irq(int, void *, struct pt_regs *); | 34 | irqreturn_t oss_nubus_irq(int, void *); |
35 | 35 | ||
36 | extern irqreturn_t via1_irq(int, void *, struct pt_regs *); | 36 | extern irqreturn_t via1_irq(int, void *); |
37 | extern irqreturn_t mac_scc_dispatch(int, void *, struct pt_regs *); | 37 | extern irqreturn_t mac_scc_dispatch(int, void *); |
38 | 38 | ||
39 | /* | 39 | /* |
40 | * Initialize the OSS | 40 | * Initialize the OSS |
@@ -92,7 +92,7 @@ void __init oss_nubus_init(void) | |||
92 | * and SCSI; everything else is routed to its own autovector IRQ. | 92 | * and SCSI; everything else is routed to its own autovector IRQ. |
93 | */ | 93 | */ |
94 | 94 | ||
95 | irqreturn_t oss_irq(int irq, void *dev_id, struct pt_regs *regs) | 95 | irqreturn_t oss_irq(int irq, void *dev_id) |
96 | { | 96 | { |
97 | int events; | 97 | int events; |
98 | 98 | ||
@@ -113,7 +113,7 @@ irqreturn_t oss_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
113 | oss->irq_pending &= ~OSS_IP_SOUND; | 113 | oss->irq_pending &= ~OSS_IP_SOUND; |
114 | } else if (events & OSS_IP_SCSI) { | 114 | } else if (events & OSS_IP_SCSI) { |
115 | oss->irq_level[OSS_SCSI] = OSS_IRQLEV_DISABLED; | 115 | oss->irq_level[OSS_SCSI] = OSS_IRQLEV_DISABLED; |
116 | m68k_handle_int(IRQ_MAC_SCSI, regs); | 116 | m68k_handle_int(IRQ_MAC_SCSI); |
117 | oss->irq_pending &= ~OSS_IP_SCSI; | 117 | oss->irq_pending &= ~OSS_IP_SCSI; |
118 | oss->irq_level[OSS_SCSI] = OSS_IRQLEV_SCSI; | 118 | oss->irq_level[OSS_SCSI] = OSS_IRQLEV_SCSI; |
119 | } else { | 119 | } else { |
@@ -128,7 +128,7 @@ irqreturn_t oss_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
128 | * Unlike the VIA/RBV this is on its own autovector interrupt level. | 128 | * Unlike the VIA/RBV this is on its own autovector interrupt level. |
129 | */ | 129 | */ |
130 | 130 | ||
131 | irqreturn_t oss_nubus_irq(int irq, void *dev_id, struct pt_regs *regs) | 131 | irqreturn_t oss_nubus_irq(int irq, void *dev_id) |
132 | { | 132 | { |
133 | int events, irq_bit, i; | 133 | int events, irq_bit, i; |
134 | 134 | ||
@@ -146,7 +146,7 @@ irqreturn_t oss_nubus_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
146 | for (i = 0, irq_bit = 1 ; i < 6 ; i++, irq_bit <<= 1) { | 146 | for (i = 0, irq_bit = 1 ; i < 6 ; i++, irq_bit <<= 1) { |
147 | if (events & irq_bit) { | 147 | if (events & irq_bit) { |
148 | oss->irq_level[i] = OSS_IRQLEV_DISABLED; | 148 | oss->irq_level[i] = OSS_IRQLEV_DISABLED; |
149 | m68k_handle_int(NUBUS_SOURCE_BASE + i, regs); | 149 | m68k_handle_int(NUBUS_SOURCE_BASE + i); |
150 | oss->irq_pending &= ~irq_bit; | 150 | oss->irq_pending &= ~irq_bit; |
151 | oss->irq_level[i] = OSS_IRQLEV_NUBUS; | 151 | oss->irq_level[i] = OSS_IRQLEV_NUBUS; |
152 | } | 152 | } |
diff --git a/arch/m68k/mac/psc.c b/arch/m68k/mac/psc.c index e26218091755..15378a5878c9 100644 --- a/arch/m68k/mac/psc.c +++ b/arch/m68k/mac/psc.c | |||
@@ -30,7 +30,7 @@ | |||
30 | int psc_present; | 30 | int psc_present; |
31 | volatile __u8 *psc; | 31 | volatile __u8 *psc; |
32 | 32 | ||
33 | irqreturn_t psc_irq(int, void *, struct pt_regs *); | 33 | irqreturn_t psc_irq(int, void *); |
34 | 34 | ||
35 | /* | 35 | /* |
36 | * Debugging dump, used in various places to see what's going on. | 36 | * Debugging dump, used in various places to see what's going on. |
@@ -127,7 +127,7 @@ void __init psc_register_interrupts(void) | |||
127 | * PSC interrupt handler. It's a lot like the VIA interrupt handler. | 127 | * PSC interrupt handler. It's a lot like the VIA interrupt handler. |
128 | */ | 128 | */ |
129 | 129 | ||
130 | irqreturn_t psc_irq(int irq, void *dev_id, struct pt_regs *regs) | 130 | irqreturn_t psc_irq(int irq, void *dev_id) |
131 | { | 131 | { |
132 | int pIFR = pIFRbase + ((int) dev_id); | 132 | int pIFR = pIFRbase + ((int) dev_id); |
133 | int pIER = pIERbase + ((int) dev_id); | 133 | int pIER = pIERbase + ((int) dev_id); |
@@ -149,7 +149,7 @@ irqreturn_t psc_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
149 | for (i = 0, irq_bit = 1 ; i < 4 ; i++, irq_bit <<= 1) { | 149 | for (i = 0, irq_bit = 1 ; i < 4 ; i++, irq_bit <<= 1) { |
150 | if (events & irq_bit) { | 150 | if (events & irq_bit) { |
151 | psc_write_byte(pIER, irq_bit); | 151 | psc_write_byte(pIER, irq_bit); |
152 | m68k_handle_int(base_irq + i, regs); | 152 | m68k_handle_int(base_irq + i); |
153 | psc_write_byte(pIFR, irq_bit); | 153 | psc_write_byte(pIFR, irq_bit); |
154 | psc_write_byte(pIER, irq_bit | 0x80); | 154 | psc_write_byte(pIER, irq_bit | 0x80); |
155 | } | 155 | } |
diff --git a/arch/m68k/mac/via.c b/arch/m68k/mac/via.c index c4aa345d544e..e27735be2924 100644 --- a/arch/m68k/mac/via.c +++ b/arch/m68k/mac/via.c | |||
@@ -63,14 +63,14 @@ static int gIER,gIFR,gBufA,gBufB; | |||
63 | static int nubus_active; | 63 | static int nubus_active; |
64 | 64 | ||
65 | void via_debug_dump(void); | 65 | void via_debug_dump(void); |
66 | irqreturn_t via1_irq(int, void *, struct pt_regs *); | 66 | irqreturn_t via1_irq(int, void *); |
67 | irqreturn_t via2_irq(int, void *, struct pt_regs *); | 67 | irqreturn_t via2_irq(int, void *); |
68 | irqreturn_t via_nubus_irq(int, void *, struct pt_regs *); | 68 | irqreturn_t via_nubus_irq(int, void *); |
69 | void via_irq_enable(int irq); | 69 | void via_irq_enable(int irq); |
70 | void via_irq_disable(int irq); | 70 | void via_irq_disable(int irq); |
71 | void via_irq_clear(int irq); | 71 | void via_irq_clear(int irq); |
72 | 72 | ||
73 | extern irqreturn_t mac_scc_dispatch(int, void *, struct pt_regs *); | 73 | extern irqreturn_t mac_scc_dispatch(int, void *); |
74 | extern int oss_present; | 74 | extern int oss_present; |
75 | 75 | ||
76 | /* | 76 | /* |
@@ -235,7 +235,7 @@ void __init via_init(void) | |||
235 | * Start the 100 Hz clock | 235 | * Start the 100 Hz clock |
236 | */ | 236 | */ |
237 | 237 | ||
238 | void __init via_init_clock(irqreturn_t (*func)(int, void *, struct pt_regs *)) | 238 | void __init via_init_clock(irq_handler_t func) |
239 | { | 239 | { |
240 | via1[vACR] |= 0x40; | 240 | via1[vACR] |= 0x40; |
241 | via1[vT1LL] = MAC_CLOCK_LOW; | 241 | via1[vT1LL] = MAC_CLOCK_LOW; |
@@ -412,7 +412,7 @@ void __init via_nubus_init(void) | |||
412 | * the machspec interrupt number after clearing the interrupt. | 412 | * the machspec interrupt number after clearing the interrupt. |
413 | */ | 413 | */ |
414 | 414 | ||
415 | irqreturn_t via1_irq(int irq, void *dev_id, struct pt_regs *regs) | 415 | irqreturn_t via1_irq(int irq, void *dev_id) |
416 | { | 416 | { |
417 | int irq_bit, i; | 417 | int irq_bit, i; |
418 | unsigned char events, mask; | 418 | unsigned char events, mask; |
@@ -424,7 +424,7 @@ irqreturn_t via1_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
424 | for (i = 0, irq_bit = 1 ; i < 7 ; i++, irq_bit <<= 1) | 424 | for (i = 0, irq_bit = 1 ; i < 7 ; i++, irq_bit <<= 1) |
425 | if (events & irq_bit) { | 425 | if (events & irq_bit) { |
426 | via1[vIER] = irq_bit; | 426 | via1[vIER] = irq_bit; |
427 | m68k_handle_int(VIA1_SOURCE_BASE + i, regs); | 427 | m68k_handle_int(VIA1_SOURCE_BASE + i); |
428 | via1[vIFR] = irq_bit; | 428 | via1[vIFR] = irq_bit; |
429 | via1[vIER] = irq_bit | 0x80; | 429 | via1[vIER] = irq_bit | 0x80; |
430 | } | 430 | } |
@@ -439,14 +439,14 @@ irqreturn_t via1_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
439 | /* No, it won't be set. that's why we're doing this. */ | 439 | /* No, it won't be set. that's why we're doing this. */ |
440 | via_irq_disable(IRQ_MAC_NUBUS); | 440 | via_irq_disable(IRQ_MAC_NUBUS); |
441 | via_irq_clear(IRQ_MAC_NUBUS); | 441 | via_irq_clear(IRQ_MAC_NUBUS); |
442 | m68k_handle_int(IRQ_MAC_NUBUS, regs); | 442 | m68k_handle_int(IRQ_MAC_NUBUS); |
443 | via_irq_enable(IRQ_MAC_NUBUS); | 443 | via_irq_enable(IRQ_MAC_NUBUS); |
444 | } | 444 | } |
445 | #endif | 445 | #endif |
446 | return IRQ_HANDLED; | 446 | return IRQ_HANDLED; |
447 | } | 447 | } |
448 | 448 | ||
449 | irqreturn_t via2_irq(int irq, void *dev_id, struct pt_regs *regs) | 449 | irqreturn_t via2_irq(int irq, void *dev_id) |
450 | { | 450 | { |
451 | int irq_bit, i; | 451 | int irq_bit, i; |
452 | unsigned char events, mask; | 452 | unsigned char events, mask; |
@@ -459,7 +459,7 @@ irqreturn_t via2_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
459 | if (events & irq_bit) { | 459 | if (events & irq_bit) { |
460 | via2[gIER] = irq_bit; | 460 | via2[gIER] = irq_bit; |
461 | via2[gIFR] = irq_bit | rbv_clear; | 461 | via2[gIFR] = irq_bit | rbv_clear; |
462 | m68k_handle_int(VIA2_SOURCE_BASE + i, regs); | 462 | m68k_handle_int(VIA2_SOURCE_BASE + i); |
463 | via2[gIER] = irq_bit | 0x80; | 463 | via2[gIER] = irq_bit | 0x80; |
464 | } | 464 | } |
465 | return IRQ_HANDLED; | 465 | return IRQ_HANDLED; |
@@ -470,7 +470,7 @@ irqreturn_t via2_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
470 | * VIA2 dispatcher as a fast interrupt handler. | 470 | * VIA2 dispatcher as a fast interrupt handler. |
471 | */ | 471 | */ |
472 | 472 | ||
473 | irqreturn_t via_nubus_irq(int irq, void *dev_id, struct pt_regs *regs) | 473 | irqreturn_t via_nubus_irq(int irq, void *dev_id) |
474 | { | 474 | { |
475 | int irq_bit, i; | 475 | int irq_bit, i; |
476 | unsigned char events; | 476 | unsigned char events; |
@@ -481,7 +481,7 @@ irqreturn_t via_nubus_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
481 | for (i = 0, irq_bit = 1 ; i < 7 ; i++, irq_bit <<= 1) { | 481 | for (i = 0, irq_bit = 1 ; i < 7 ; i++, irq_bit <<= 1) { |
482 | if (events & irq_bit) { | 482 | if (events & irq_bit) { |
483 | via_irq_disable(NUBUS_SOURCE_BASE + i); | 483 | via_irq_disable(NUBUS_SOURCE_BASE + i); |
484 | m68k_handle_int(NUBUS_SOURCE_BASE + i, regs); | 484 | m68k_handle_int(NUBUS_SOURCE_BASE + i); |
485 | via_irq_enable(NUBUS_SOURCE_BASE + i); | 485 | via_irq_enable(NUBUS_SOURCE_BASE + i); |
486 | } | 486 | } |
487 | } | 487 | } |
diff --git a/arch/m68k/mvme147/config.c b/arch/m68k/mvme147/config.c index 0cd0e5bddcee..4a7df9c3f85a 100644 --- a/arch/m68k/mvme147/config.c +++ b/arch/m68k/mvme147/config.c | |||
@@ -38,7 +38,7 @@ | |||
38 | 38 | ||
39 | static void mvme147_get_model(char *model); | 39 | static void mvme147_get_model(char *model); |
40 | static int mvme147_get_hardware_list(char *buffer); | 40 | static int mvme147_get_hardware_list(char *buffer); |
41 | extern void mvme147_sched_init(irqreturn_t (*handler)(int, void *, struct pt_regs *)); | 41 | extern void mvme147_sched_init(irq_handler_t handler); |
42 | extern unsigned long mvme147_gettimeoffset (void); | 42 | extern unsigned long mvme147_gettimeoffset (void); |
43 | extern int mvme147_hwclk (int, struct rtc_time *); | 43 | extern int mvme147_hwclk (int, struct rtc_time *); |
44 | extern int mvme147_set_clock_mmss (unsigned long); | 44 | extern int mvme147_set_clock_mmss (unsigned long); |
@@ -51,7 +51,7 @@ static int bcd2int (unsigned char b); | |||
51 | /* Save tick handler routine pointer, will point to do_timer() in | 51 | /* Save tick handler routine pointer, will point to do_timer() in |
52 | * kernel/sched.c, called via mvme147_process_int() */ | 52 | * kernel/sched.c, called via mvme147_process_int() */ |
53 | 53 | ||
54 | irqreturn_t (*tick_handler)(int, void *, struct pt_regs *); | 54 | irq_handler_t tick_handler; |
55 | 55 | ||
56 | 56 | ||
57 | int mvme147_parse_bootinfo(const struct bi_record *bi) | 57 | int mvme147_parse_bootinfo(const struct bi_record *bi) |
@@ -114,15 +114,15 @@ void __init config_mvme147(void) | |||
114 | 114 | ||
115 | /* Using pcc tick timer 1 */ | 115 | /* Using pcc tick timer 1 */ |
116 | 116 | ||
117 | static irqreturn_t mvme147_timer_int (int irq, void *dev_id, struct pt_regs *fp) | 117 | static irqreturn_t mvme147_timer_int (int irq, void *dev_id) |
118 | { | 118 | { |
119 | m147_pcc->t1_int_cntrl = PCC_TIMER_INT_CLR; | 119 | m147_pcc->t1_int_cntrl = PCC_TIMER_INT_CLR; |
120 | m147_pcc->t1_int_cntrl = PCC_INT_ENAB|PCC_LEVEL_TIMER1; | 120 | m147_pcc->t1_int_cntrl = PCC_INT_ENAB|PCC_LEVEL_TIMER1; |
121 | return tick_handler(irq, dev_id, fp); | 121 | return tick_handler(irq, dev_id); |
122 | } | 122 | } |
123 | 123 | ||
124 | 124 | ||
125 | void mvme147_sched_init (irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) | 125 | void mvme147_sched_init (irq_handler_t timer_routine) |
126 | { | 126 | { |
127 | tick_handler = timer_routine; | 127 | tick_handler = timer_routine; |
128 | request_irq (PCC_IRQ_TIMER1, mvme147_timer_int, | 128 | request_irq (PCC_IRQ_TIMER1, mvme147_timer_int, |
diff --git a/arch/m68k/mvme16x/config.c b/arch/m68k/mvme16x/config.c index ce2727ed1bc0..c829ebb6b1af 100644 --- a/arch/m68k/mvme16x/config.c +++ b/arch/m68k/mvme16x/config.c | |||
@@ -42,7 +42,7 @@ static MK48T08ptr_t volatile rtc = (MK48T08ptr_t)MVME_RTC_BASE; | |||
42 | 42 | ||
43 | static void mvme16x_get_model(char *model); | 43 | static void mvme16x_get_model(char *model); |
44 | static int mvme16x_get_hardware_list(char *buffer); | 44 | static int mvme16x_get_hardware_list(char *buffer); |
45 | extern void mvme16x_sched_init(irqreturn_t (*handler)(int, void *, struct pt_regs *)); | 45 | extern void mvme16x_sched_init(irq_handler_t handler); |
46 | extern unsigned long mvme16x_gettimeoffset (void); | 46 | extern unsigned long mvme16x_gettimeoffset (void); |
47 | extern int mvme16x_hwclk (int, struct rtc_time *); | 47 | extern int mvme16x_hwclk (int, struct rtc_time *); |
48 | extern int mvme16x_set_clock_mmss (unsigned long); | 48 | extern int mvme16x_set_clock_mmss (unsigned long); |
@@ -54,7 +54,7 @@ int bcd2int (unsigned char b); | |||
54 | /* Save tick handler routine pointer, will point to do_timer() in | 54 | /* Save tick handler routine pointer, will point to do_timer() in |
55 | * kernel/sched.c, called via mvme16x_process_int() */ | 55 | * kernel/sched.c, called via mvme16x_process_int() */ |
56 | 56 | ||
57 | static irqreturn_t (*tick_handler)(int, void *, struct pt_regs *); | 57 | static irq_handler_t tick_handler; |
58 | 58 | ||
59 | 59 | ||
60 | unsigned short mvme16x_config; | 60 | unsigned short mvme16x_config; |
@@ -190,7 +190,7 @@ void __init config_mvme16x(void) | |||
190 | } | 190 | } |
191 | } | 191 | } |
192 | 192 | ||
193 | static irqreturn_t mvme16x_abort_int (int irq, void *dev_id, struct pt_regs *fp) | 193 | static irqreturn_t mvme16x_abort_int (int irq, void *dev_id) |
194 | { | 194 | { |
195 | p_bdid p = &mvme_bdid; | 195 | p_bdid p = &mvme_bdid; |
196 | unsigned long *new = (unsigned long *)vectors; | 196 | unsigned long *new = (unsigned long *)vectors; |
@@ -218,13 +218,13 @@ static irqreturn_t mvme16x_abort_int (int irq, void *dev_id, struct pt_regs *fp) | |||
218 | return IRQ_HANDLED; | 218 | return IRQ_HANDLED; |
219 | } | 219 | } |
220 | 220 | ||
221 | static irqreturn_t mvme16x_timer_int (int irq, void *dev_id, struct pt_regs *fp) | 221 | static irqreturn_t mvme16x_timer_int (int irq, void *dev_id) |
222 | { | 222 | { |
223 | *(volatile unsigned char *)0xfff4201b |= 8; | 223 | *(volatile unsigned char *)0xfff4201b |= 8; |
224 | return tick_handler(irq, dev_id, fp); | 224 | return tick_handler(irq, dev_id); |
225 | } | 225 | } |
226 | 226 | ||
227 | void mvme16x_sched_init (irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) | 227 | void mvme16x_sched_init (irq_handler_t timer_routine) |
228 | { | 228 | { |
229 | p_bdid p = &mvme_bdid; | 229 | p_bdid p = &mvme_bdid; |
230 | int irq; | 230 | int irq; |
diff --git a/arch/m68k/q40/config.c b/arch/m68k/q40/config.c index 9a1827876408..92f873cc7060 100644 --- a/arch/m68k/q40/config.c +++ b/arch/m68k/q40/config.c | |||
@@ -39,7 +39,7 @@ extern irqreturn_t q40_process_int (int level, struct pt_regs *regs); | |||
39 | extern void q40_init_IRQ (void); | 39 | extern void q40_init_IRQ (void); |
40 | static void q40_get_model(char *model); | 40 | static void q40_get_model(char *model); |
41 | static int q40_get_hardware_list(char *buffer); | 41 | static int q40_get_hardware_list(char *buffer); |
42 | extern void q40_sched_init(irqreturn_t (*handler)(int, void *, struct pt_regs *)); | 42 | extern void q40_sched_init(irq_handler_t handler); |
43 | 43 | ||
44 | extern unsigned long q40_gettimeoffset (void); | 44 | extern unsigned long q40_gettimeoffset (void); |
45 | extern int q40_hwclk (int, struct rtc_time *); | 45 | extern int q40_hwclk (int, struct rtc_time *); |
diff --git a/arch/m68k/q40/q40ints.c b/arch/m68k/q40/q40ints.c index 472f41c4158b..31cc07d8cec4 100644 --- a/arch/m68k/q40/q40ints.c +++ b/arch/m68k/q40/q40ints.c | |||
@@ -125,9 +125,9 @@ void q40_mksound(unsigned int hz, unsigned int ticks) | |||
125 | sound_ticks = ticks << 1; | 125 | sound_ticks = ticks << 1; |
126 | } | 126 | } |
127 | 127 | ||
128 | static irqreturn_t (*q40_timer_routine)(int, void *, struct pt_regs *); | 128 | static irq_handler_t q40_timer_routine; |
129 | 129 | ||
130 | static irqreturn_t q40_timer_int (int irq, void * dev, struct pt_regs * regs) | 130 | static irqreturn_t q40_timer_int (int irq, void * dev) |
131 | { | 131 | { |
132 | ql_ticks = ql_ticks ? 0 : 1; | 132 | ql_ticks = ql_ticks ? 0 : 1; |
133 | if (sound_ticks) { | 133 | if (sound_ticks) { |
@@ -138,11 +138,11 @@ static irqreturn_t q40_timer_int (int irq, void * dev, struct pt_regs * regs) | |||
138 | } | 138 | } |
139 | 139 | ||
140 | if (!ql_ticks) | 140 | if (!ql_ticks) |
141 | q40_timer_routine(irq, dev, regs); | 141 | q40_timer_routine(irq, dev); |
142 | return IRQ_HANDLED; | 142 | return IRQ_HANDLED; |
143 | } | 143 | } |
144 | 144 | ||
145 | void q40_sched_init (irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) | 145 | void q40_sched_init (irq_handler_t timer_routine) |
146 | { | 146 | { |
147 | int timer_irq; | 147 | int timer_irq; |
148 | 148 | ||
@@ -218,11 +218,11 @@ static void q40_irq_handler(unsigned int irq, struct pt_regs *fp) | |||
218 | switch (irq) { | 218 | switch (irq) { |
219 | case 4: | 219 | case 4: |
220 | case 6: | 220 | case 6: |
221 | m68k_handle_int(Q40_IRQ_SAMPLE, fp); | 221 | __m68k_handle_int(Q40_IRQ_SAMPLE, fp); |
222 | return; | 222 | return; |
223 | } | 223 | } |
224 | if (mir & Q40_IRQ_FRAME_MASK) { | 224 | if (mir & Q40_IRQ_FRAME_MASK) { |
225 | m68k_handle_int(Q40_IRQ_FRAME, fp); | 225 | __m68k_handle_int(Q40_IRQ_FRAME, fp); |
226 | master_outb(-1, FRAME_CLEAR_REG); | 226 | master_outb(-1, FRAME_CLEAR_REG); |
227 | } | 227 | } |
228 | if ((mir & Q40_IRQ_SER_MASK) || (mir & Q40_IRQ_EXT_MASK)) { | 228 | if ((mir & Q40_IRQ_SER_MASK) || (mir & Q40_IRQ_EXT_MASK)) { |
@@ -257,7 +257,7 @@ static void q40_irq_handler(unsigned int irq, struct pt_regs *fp) | |||
257 | goto iirq; | 257 | goto iirq; |
258 | } | 258 | } |
259 | q40_state[irq] |= IRQ_INPROGRESS; | 259 | q40_state[irq] |= IRQ_INPROGRESS; |
260 | m68k_handle_int(irq, fp); | 260 | __m68k_handle_int(irq, fp); |
261 | q40_state[irq] &= ~IRQ_INPROGRESS; | 261 | q40_state[irq] &= ~IRQ_INPROGRESS; |
262 | 262 | ||
263 | /* naively enable everything, if that fails than */ | 263 | /* naively enable everything, if that fails than */ |
@@ -288,7 +288,7 @@ static void q40_irq_handler(unsigned int irq, struct pt_regs *fp) | |||
288 | mir = master_inb(IIRQ_REG); | 288 | mir = master_inb(IIRQ_REG); |
289 | /* should test whether keyboard irq is really enabled, doing it in defhand */ | 289 | /* should test whether keyboard irq is really enabled, doing it in defhand */ |
290 | if (mir & Q40_IRQ_KEYB_MASK) | 290 | if (mir & Q40_IRQ_KEYB_MASK) |
291 | m68k_handle_int(Q40_IRQ_KEYBOARD, fp); | 291 | __m68k_handle_int(Q40_IRQ_KEYBOARD, fp); |
292 | 292 | ||
293 | return; | 293 | return; |
294 | } | 294 | } |
diff --git a/arch/m68k/sun3/config.c b/arch/m68k/sun3/config.c index d09d03b3d956..4851b8437a87 100644 --- a/arch/m68k/sun3/config.c +++ b/arch/m68k/sun3/config.c | |||
@@ -35,7 +35,7 @@ extern char _text, _end; | |||
35 | char sun3_reserved_pmeg[SUN3_PMEGS_NUM]; | 35 | char sun3_reserved_pmeg[SUN3_PMEGS_NUM]; |
36 | 36 | ||
37 | extern unsigned long sun3_gettimeoffset(void); | 37 | extern unsigned long sun3_gettimeoffset(void); |
38 | extern void sun3_sched_init(irqreturn_t (*handler)(int, void *, struct pt_regs *)); | 38 | extern void sun3_sched_init(irq_handler_t handler); |
39 | extern void sun3_get_model (char* model); | 39 | extern void sun3_get_model (char* model); |
40 | extern void idprom_init (void); | 40 | extern void idprom_init (void); |
41 | extern int sun3_hwclk(int set, struct rtc_time *t); | 41 | extern int sun3_hwclk(int set, struct rtc_time *t); |
@@ -162,7 +162,7 @@ void __init config_sun3(void) | |||
162 | sun3_bootmem_alloc(memory_start, memory_end); | 162 | sun3_bootmem_alloc(memory_start, memory_end); |
163 | } | 163 | } |
164 | 164 | ||
165 | void __init sun3_sched_init(irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) | 165 | void __init sun3_sched_init(irq_handler_t timer_routine) |
166 | { | 166 | { |
167 | sun3_disable_interrupts(); | 167 | sun3_disable_interrupts(); |
168 | intersil_clock->cmd_reg=(INTERSIL_RUN|INTERSIL_INT_DISABLE|INTERSIL_24H_MODE); | 168 | intersil_clock->cmd_reg=(INTERSIL_RUN|INTERSIL_INT_DISABLE|INTERSIL_24H_MODE); |
diff --git a/arch/m68k/sun3/sun3ints.c b/arch/m68k/sun3/sun3ints.c index dc4ea7e074a6..baf74e8de8b5 100644 --- a/arch/m68k/sun3/sun3ints.c +++ b/arch/m68k/sun3/sun3ints.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <asm/intersil.h> | 15 | #include <asm/intersil.h> |
16 | #include <asm/oplib.h> | 16 | #include <asm/oplib.h> |
17 | #include <asm/sun3ints.h> | 17 | #include <asm/sun3ints.h> |
18 | #include <asm/irq_regs.h> | ||
18 | #include <linux/seq_file.h> | 19 | #include <linux/seq_file.h> |
19 | 20 | ||
20 | extern void sun3_leds (unsigned char); | 21 | extern void sun3_leds (unsigned char); |
@@ -48,7 +49,7 @@ void sun3_disable_irq(unsigned int irq) | |||
48 | *sun3_intreg &= ~(1 << irq); | 49 | *sun3_intreg &= ~(1 << irq); |
49 | } | 50 | } |
50 | 51 | ||
51 | static irqreturn_t sun3_int7(int irq, void *dev_id, struct pt_regs *fp) | 52 | static irqreturn_t sun3_int7(int irq, void *dev_id) |
52 | { | 53 | { |
53 | *sun3_intreg |= (1 << irq); | 54 | *sun3_intreg |= (1 << irq); |
54 | if (!(kstat_cpu(0).irqs[irq] % 2000)) | 55 | if (!(kstat_cpu(0).irqs[irq] % 2000)) |
@@ -56,7 +57,7 @@ static irqreturn_t sun3_int7(int irq, void *dev_id, struct pt_regs *fp) | |||
56 | return IRQ_HANDLED; | 57 | return IRQ_HANDLED; |
57 | } | 58 | } |
58 | 59 | ||
59 | static irqreturn_t sun3_int5(int irq, void *dev_id, struct pt_regs *fp) | 60 | static irqreturn_t sun3_int5(int irq, void *dev_id) |
60 | { | 61 | { |
61 | #ifdef CONFIG_SUN3 | 62 | #ifdef CONFIG_SUN3 |
62 | intersil_clear(); | 63 | intersil_clear(); |
@@ -67,14 +68,14 @@ static irqreturn_t sun3_int5(int irq, void *dev_id, struct pt_regs *fp) | |||
67 | #endif | 68 | #endif |
68 | do_timer(1); | 69 | do_timer(1); |
69 | #ifndef CONFIG_SMP | 70 | #ifndef CONFIG_SMP |
70 | update_process_times(user_mode(fp)); | 71 | update_process_times(user_mode(get_irq_regs())); |
71 | #endif | 72 | #endif |
72 | if (!(kstat_cpu(0).irqs[irq] % 20)) | 73 | if (!(kstat_cpu(0).irqs[irq] % 20)) |
73 | sun3_leds(led_pattern[(kstat_cpu(0).irqs[irq] % 160) / 20]); | 74 | sun3_leds(led_pattern[(kstat_cpu(0).irqs[irq] % 160) / 20]); |
74 | return IRQ_HANDLED; | 75 | return IRQ_HANDLED; |
75 | } | 76 | } |
76 | 77 | ||
77 | static irqreturn_t sun3_vec255(int irq, void *dev_id, struct pt_regs *fp) | 78 | static irqreturn_t sun3_vec255(int irq, void *dev_id) |
78 | { | 79 | { |
79 | // intersil_clear(); | 80 | // intersil_clear(); |
80 | return IRQ_HANDLED; | 81 | return IRQ_HANDLED; |
@@ -84,7 +85,7 @@ static void sun3_inthandle(unsigned int irq, struct pt_regs *fp) | |||
84 | { | 85 | { |
85 | *sun3_intreg &= ~(1 << irq); | 86 | *sun3_intreg &= ~(1 << irq); |
86 | 87 | ||
87 | m68k_handle_int(irq, fp); | 88 | __m68k_handle_int(irq, fp); |
88 | } | 89 | } |
89 | 90 | ||
90 | static struct irq_controller sun3_irq_controller = { | 91 | static struct irq_controller sun3_irq_controller = { |
diff --git a/arch/m68k/sun3x/time.c b/arch/m68k/sun3x/time.c index 6f4204fbecd7..f5eaafb00d21 100644 --- a/arch/m68k/sun3x/time.c +++ b/arch/m68k/sun3x/time.c | |||
@@ -90,7 +90,7 @@ static void sun3x_timer_tick(int irq, void *dev_id, struct pt_regs *regs) | |||
90 | } | 90 | } |
91 | #endif | 91 | #endif |
92 | 92 | ||
93 | void __init sun3x_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *)) | 93 | void __init sun3x_sched_init(irq_handler_t vector) |
94 | { | 94 | { |
95 | 95 | ||
96 | sun3_disable_interrupts(); | 96 | sun3_disable_interrupts(); |
diff --git a/arch/m68k/sun3x/time.h b/arch/m68k/sun3x/time.h index e7e43b4ec4a1..6909e1297534 100644 --- a/arch/m68k/sun3x/time.h +++ b/arch/m68k/sun3x/time.h | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | extern int sun3x_hwclk(int set, struct rtc_time *t); | 4 | extern int sun3x_hwclk(int set, struct rtc_time *t); |
5 | unsigned long sun3x_gettimeoffset (void); | 5 | unsigned long sun3x_gettimeoffset (void); |
6 | void sun3x_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *)); | 6 | void sun3x_sched_init(irq_handler_t vector); |
7 | 7 | ||
8 | struct mostek_dt { | 8 | struct mostek_dt { |
9 | volatile unsigned char csr; | 9 | volatile unsigned char csr; |
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 8a49884bd5ec..14af6cce2fa2 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -1010,11 +1010,6 @@ endchoice | |||
1010 | config ARC32 | 1010 | config ARC32 |
1011 | bool | 1011 | bool |
1012 | 1012 | ||
1013 | config AU1X00_USB_DEVICE | ||
1014 | bool | ||
1015 | depends on MIPS_PB1500 || MIPS_PB1100 || MIPS_PB1000 | ||
1016 | default n | ||
1017 | |||
1018 | config BOOT_ELF32 | 1013 | config BOOT_ELF32 |
1019 | bool | 1014 | bool |
1020 | 1015 | ||
@@ -1465,10 +1460,8 @@ config MIPS_MT_DISABLED | |||
1465 | the option of an MT-enabled processor this option will be the only | 1460 | the option of an MT-enabled processor this option will be the only |
1466 | option in this menu. | 1461 | option in this menu. |
1467 | 1462 | ||
1468 | config MIPS_MT_SMTC | 1463 | config MIPS_MT_SMP |
1469 | bool "SMTC: Use all TCs on all VPEs for SMP" | 1464 | bool "Use 1 TC on each available VPE for SMP" |
1470 | depends on CPU_MIPS32_R2 | ||
1471 | #depends on CPU_MIPS64_R2 # once there is hardware ... | ||
1472 | depends on SYS_SUPPORTS_MULTITHREADING | 1465 | depends on SYS_SUPPORTS_MULTITHREADING |
1473 | select CPU_MIPSR2_IRQ_VI | 1466 | select CPU_MIPSR2_IRQ_VI |
1474 | select CPU_MIPSR2_SRS | 1467 | select CPU_MIPSR2_SRS |
@@ -1476,11 +1469,13 @@ config MIPS_MT_SMTC | |||
1476 | select SMP | 1469 | select SMP |
1477 | select SYS_SUPPORTS_SMP | 1470 | select SYS_SUPPORTS_SMP |
1478 | help | 1471 | help |
1479 | This is a kernel model which is known a SMTC or lately has been | 1472 | This is a kernel model which is also known a VSMP or lately |
1480 | marketesed into SMVP. | 1473 | has been marketesed into SMVP. |
1481 | 1474 | ||
1482 | config MIPS_MT_SMP | 1475 | config MIPS_MT_SMTC |
1483 | bool "Use 1 TC on each available VPE for SMP" | 1476 | bool "SMTC: Use all TCs on all VPEs for SMP" |
1477 | depends on CPU_MIPS32_R2 | ||
1478 | #depends on CPU_MIPS64_R2 # once there is hardware ... | ||
1484 | depends on SYS_SUPPORTS_MULTITHREADING | 1479 | depends on SYS_SUPPORTS_MULTITHREADING |
1485 | select CPU_MIPSR2_IRQ_VI | 1480 | select CPU_MIPSR2_IRQ_VI |
1486 | select CPU_MIPSR2_SRS | 1481 | select CPU_MIPSR2_SRS |
@@ -1488,8 +1483,8 @@ config MIPS_MT_SMP | |||
1488 | select SMP | 1483 | select SMP |
1489 | select SYS_SUPPORTS_SMP | 1484 | select SYS_SUPPORTS_SMP |
1490 | help | 1485 | help |
1491 | This is a kernel model which is also known a VSMP or lately | 1486 | This is a kernel model which is known a SMTC or lately has been |
1492 | has been marketesed into SMVP. | 1487 | marketesed into SMVP. |
1493 | 1488 | ||
1494 | config MIPS_VPE_LOADER | 1489 | config MIPS_VPE_LOADER |
1495 | bool "VPE loader support." | 1490 | bool "VPE loader support." |
diff --git a/arch/mips/au1000/common/Makefile b/arch/mips/au1000/common/Makefile index bf682f50b859..4c35525edb4f 100644 --- a/arch/mips/au1000/common/Makefile +++ b/arch/mips/au1000/common/Makefile | |||
@@ -10,6 +10,5 @@ obj-y += prom.o irq.o puts.o time.o reset.o \ | |||
10 | au1xxx_irqmap.o clocks.o platform.o power.o setup.o \ | 10 | au1xxx_irqmap.o clocks.o platform.o power.o setup.o \ |
11 | sleeper.o cputable.o dma.o dbdma.o gpio.o | 11 | sleeper.o cputable.o dma.o dbdma.o gpio.o |
12 | 12 | ||
13 | obj-$(CONFIG_AU1X00_USB_DEVICE) += usbdev.o | ||
14 | obj-$(CONFIG_KGDB) += dbg_io.o | 13 | obj-$(CONFIG_KGDB) += dbg_io.o |
15 | obj-$(CONFIG_PCI) += pci.o | 14 | obj-$(CONFIG_PCI) += pci.o |
diff --git a/arch/mips/au1000/common/dma.c b/arch/mips/au1000/common/dma.c index fb7c47c1585d..c78260d4e837 100644 --- a/arch/mips/au1000/common/dma.c +++ b/arch/mips/au1000/common/dma.c | |||
@@ -160,7 +160,7 @@ void dump_au1000_dma_channel(unsigned int dmanr) | |||
160 | * Requests the DMA done IRQ if irqhandler != NULL. | 160 | * Requests the DMA done IRQ if irqhandler != NULL. |
161 | */ | 161 | */ |
162 | int request_au1000_dma(int dev_id, const char *dev_str, | 162 | int request_au1000_dma(int dev_id, const char *dev_str, |
163 | irqreturn_t (*irqhandler)(int, void *, struct pt_regs *), | 163 | irq_handler_t irqhandler, |
164 | unsigned long irqflags, | 164 | unsigned long irqflags, |
165 | void *irq_dev_id) | 165 | void *irq_dev_id) |
166 | { | 166 | { |
diff --git a/arch/mips/au1000/common/irq.c b/arch/mips/au1000/common/irq.c index 316722ee8cf5..2abe132bb07d 100644 --- a/arch/mips/au1000/common/irq.c +++ b/arch/mips/au1000/common/irq.c | |||
@@ -67,7 +67,7 @@ | |||
67 | 67 | ||
68 | extern void set_debug_traps(void); | 68 | extern void set_debug_traps(void); |
69 | extern irq_cpustat_t irq_stat [NR_CPUS]; | 69 | extern irq_cpustat_t irq_stat [NR_CPUS]; |
70 | extern void mips_timer_interrupt(struct pt_regs *regs); | 70 | extern void mips_timer_interrupt(void); |
71 | 71 | ||
72 | static void setup_local_irq(unsigned int irq, int type, int int_req); | 72 | static void setup_local_irq(unsigned int irq, int type, int int_req); |
73 | static unsigned int startup_irq(unsigned int irq); | 73 | static unsigned int startup_irq(unsigned int irq); |
@@ -81,10 +81,6 @@ inline void local_disable_irq(unsigned int irq_nr); | |||
81 | 81 | ||
82 | void (*board_init_irq)(void); | 82 | void (*board_init_irq)(void); |
83 | 83 | ||
84 | #ifdef CONFIG_PM | ||
85 | extern irqreturn_t counter0_irq(int irq, void *dev_id, struct pt_regs *regs); | ||
86 | #endif | ||
87 | |||
88 | static DEFINE_SPINLOCK(irq_lock); | 84 | static DEFINE_SPINLOCK(irq_lock); |
89 | 85 | ||
90 | 86 | ||
@@ -292,7 +288,7 @@ static struct irq_chip level_irq_type = { | |||
292 | }; | 288 | }; |
293 | 289 | ||
294 | #ifdef CONFIG_PM | 290 | #ifdef CONFIG_PM |
295 | void startup_match20_interrupt(irqreturn_t (*handler)(int, void *, struct pt_regs *)) | 291 | void startup_match20_interrupt(irq_handler_t handler) |
296 | { | 292 | { |
297 | struct irq_desc *desc = &irq_desc[AU1000_TOY_MATCH2_INT]; | 293 | struct irq_desc *desc = &irq_desc[AU1000_TOY_MATCH2_INT]; |
298 | 294 | ||
@@ -501,14 +497,15 @@ void __init arch_init_irq(void) | |||
501 | * intcX_reqX_irqdispatch(). | 497 | * intcX_reqX_irqdispatch(). |
502 | */ | 498 | */ |
503 | 499 | ||
504 | void intc0_req0_irqdispatch(struct pt_regs *regs) | 500 | static void intc0_req0_irqdispatch(void) |
505 | { | 501 | { |
506 | int irq = 0; | 502 | int irq = 0; |
507 | static unsigned long intc0_req0 = 0; | 503 | static unsigned long intc0_req0 = 0; |
508 | 504 | ||
509 | intc0_req0 |= au_readl(IC0_REQ0INT); | 505 | intc0_req0 |= au_readl(IC0_REQ0INT); |
510 | 506 | ||
511 | if (!intc0_req0) return; | 507 | if (!intc0_req0) |
508 | return; | ||
512 | #ifdef AU1000_USB_DEV_REQ_INT | 509 | #ifdef AU1000_USB_DEV_REQ_INT |
513 | /* | 510 | /* |
514 | * Because of the tight timing of SETUP token to reply | 511 | * Because of the tight timing of SETUP token to reply |
@@ -517,28 +514,29 @@ void intc0_req0_irqdispatch(struct pt_regs *regs) | |||
517 | */ | 514 | */ |
518 | if ((intc0_req0 & (1<<AU1000_USB_DEV_REQ_INT))) { | 515 | if ((intc0_req0 & (1<<AU1000_USB_DEV_REQ_INT))) { |
519 | intc0_req0 &= ~(1<<AU1000_USB_DEV_REQ_INT); | 516 | intc0_req0 &= ~(1<<AU1000_USB_DEV_REQ_INT); |
520 | do_IRQ(AU1000_USB_DEV_REQ_INT, regs); | 517 | do_IRQ(AU1000_USB_DEV_REQ_INT); |
521 | return; | 518 | return; |
522 | } | 519 | } |
523 | #endif | 520 | #endif |
524 | irq = au_ffs(intc0_req0) - 1; | 521 | irq = au_ffs(intc0_req0) - 1; |
525 | intc0_req0 &= ~(1<<irq); | 522 | intc0_req0 &= ~(1<<irq); |
526 | do_IRQ(irq, regs); | 523 | do_IRQ(irq); |
527 | } | 524 | } |
528 | 525 | ||
529 | 526 | ||
530 | void intc0_req1_irqdispatch(struct pt_regs *regs) | 527 | static void intc0_req1_irqdispatch(void) |
531 | { | 528 | { |
532 | int irq = 0; | 529 | int irq = 0; |
533 | static unsigned long intc0_req1 = 0; | 530 | static unsigned long intc0_req1 = 0; |
534 | 531 | ||
535 | intc0_req1 |= au_readl(IC0_REQ1INT); | 532 | intc0_req1 |= au_readl(IC0_REQ1INT); |
536 | 533 | ||
537 | if (!intc0_req1) return; | 534 | if (!intc0_req1) |
535 | return; | ||
538 | 536 | ||
539 | irq = au_ffs(intc0_req1) - 1; | 537 | irq = au_ffs(intc0_req1) - 1; |
540 | intc0_req1 &= ~(1<<irq); | 538 | intc0_req1 &= ~(1<<irq); |
541 | do_IRQ(irq, regs); | 539 | do_IRQ(irq); |
542 | } | 540 | } |
543 | 541 | ||
544 | 542 | ||
@@ -546,35 +544,37 @@ void intc0_req1_irqdispatch(struct pt_regs *regs) | |||
546 | * Interrupt Controller 1: | 544 | * Interrupt Controller 1: |
547 | * interrupts 32 - 63 | 545 | * interrupts 32 - 63 |
548 | */ | 546 | */ |
549 | void intc1_req0_irqdispatch(struct pt_regs *regs) | 547 | static void intc1_req0_irqdispatch(void) |
550 | { | 548 | { |
551 | int irq = 0; | 549 | int irq = 0; |
552 | static unsigned long intc1_req0 = 0; | 550 | static unsigned long intc1_req0 = 0; |
553 | 551 | ||
554 | intc1_req0 |= au_readl(IC1_REQ0INT); | 552 | intc1_req0 |= au_readl(IC1_REQ0INT); |
555 | 553 | ||
556 | if (!intc1_req0) return; | 554 | if (!intc1_req0) |
555 | return; | ||
557 | 556 | ||
558 | irq = au_ffs(intc1_req0) - 1; | 557 | irq = au_ffs(intc1_req0) - 1; |
559 | intc1_req0 &= ~(1<<irq); | 558 | intc1_req0 &= ~(1<<irq); |
560 | irq += 32; | 559 | irq += 32; |
561 | do_IRQ(irq, regs); | 560 | do_IRQ(irq); |
562 | } | 561 | } |
563 | 562 | ||
564 | 563 | ||
565 | void intc1_req1_irqdispatch(struct pt_regs *regs) | 564 | static void intc1_req1_irqdispatch(void) |
566 | { | 565 | { |
567 | int irq = 0; | 566 | int irq = 0; |
568 | static unsigned long intc1_req1 = 0; | 567 | static unsigned long intc1_req1 = 0; |
569 | 568 | ||
570 | intc1_req1 |= au_readl(IC1_REQ1INT); | 569 | intc1_req1 |= au_readl(IC1_REQ1INT); |
571 | 570 | ||
572 | if (!intc1_req1) return; | 571 | if (!intc1_req1) |
572 | return; | ||
573 | 573 | ||
574 | irq = au_ffs(intc1_req1) - 1; | 574 | irq = au_ffs(intc1_req1) - 1; |
575 | intc1_req1 &= ~(1<<irq); | 575 | intc1_req1 &= ~(1<<irq); |
576 | irq += 32; | 576 | irq += 32; |
577 | do_IRQ(irq, regs); | 577 | do_IRQ(irq); |
578 | } | 578 | } |
579 | 579 | ||
580 | #ifdef CONFIG_PM | 580 | #ifdef CONFIG_PM |
@@ -660,20 +660,20 @@ restore_au1xxx_intctl(void) | |||
660 | } | 660 | } |
661 | #endif /* CONFIG_PM */ | 661 | #endif /* CONFIG_PM */ |
662 | 662 | ||
663 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 663 | asmlinkage void plat_irq_dispatch(void) |
664 | { | 664 | { |
665 | unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; | 665 | unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; |
666 | 666 | ||
667 | if (pending & CAUSEF_IP7) | 667 | if (pending & CAUSEF_IP7) |
668 | mips_timer_interrupt(regs); | 668 | mips_timer_interrupt(); |
669 | else if (pending & CAUSEF_IP2) | 669 | else if (pending & CAUSEF_IP2) |
670 | intc0_req0_irqdispatch(regs); | 670 | intc0_req0_irqdispatch(); |
671 | else if (pending & CAUSEF_IP3) | 671 | else if (pending & CAUSEF_IP3) |
672 | intc0_req1_irqdispatch(regs); | 672 | intc0_req1_irqdispatch(); |
673 | else if (pending & CAUSEF_IP4) | 673 | else if (pending & CAUSEF_IP4) |
674 | intc1_req0_irqdispatch(regs); | 674 | intc1_req0_irqdispatch(); |
675 | else if (pending & CAUSEF_IP5) | 675 | else if (pending & CAUSEF_IP5) |
676 | intc1_req1_irqdispatch(regs); | 676 | intc1_req1_irqdispatch(); |
677 | else | 677 | else |
678 | spurious_interrupt(regs); | 678 | spurious_interrupt(); |
679 | } | 679 | } |
diff --git a/arch/mips/au1000/common/time.c b/arch/mips/au1000/common/time.c index 0a067f3113a5..94f09194d63d 100644 --- a/arch/mips/au1000/common/time.c +++ b/arch/mips/au1000/common/time.c | |||
@@ -41,7 +41,6 @@ | |||
41 | 41 | ||
42 | #include <asm/compiler.h> | 42 | #include <asm/compiler.h> |
43 | #include <asm/mipsregs.h> | 43 | #include <asm/mipsregs.h> |
44 | #include <asm/ptrace.h> | ||
45 | #include <asm/time.h> | 44 | #include <asm/time.h> |
46 | #include <asm/div64.h> | 45 | #include <asm/div64.h> |
47 | #include <asm/mach-au1x00/au1000.h> | 46 | #include <asm/mach-au1x00/au1000.h> |
@@ -62,7 +61,7 @@ static unsigned int timerhi = 0, timerlo = 0; | |||
62 | #error "unsupported HZ value! Must be in [100,1000]" | 61 | #error "unsupported HZ value! Must be in [100,1000]" |
63 | #endif | 62 | #endif |
64 | #define MATCH20_INC (328*100/HZ) /* magic number 328 is for HZ=100... */ | 63 | #define MATCH20_INC (328*100/HZ) /* magic number 328 is for HZ=100... */ |
65 | extern void startup_match20_interrupt(irqreturn_t (*handler)(int, void *, struct pt_regs *)); | 64 | extern void startup_match20_interrupt(irq_handler_t handler); |
66 | static unsigned long last_pc0, last_match20; | 65 | static unsigned long last_pc0, last_match20; |
67 | #endif | 66 | #endif |
68 | 67 | ||
@@ -79,7 +78,8 @@ static inline void ack_r4ktimer(unsigned long newval) | |||
79 | * is provably more robust. | 78 | * is provably more robust. |
80 | */ | 79 | */ |
81 | unsigned long wtimer; | 80 | unsigned long wtimer; |
82 | void mips_timer_interrupt(struct pt_regs *regs) | 81 | |
82 | void mips_timer_interrupt(void) | ||
83 | { | 83 | { |
84 | int irq = 63; | 84 | int irq = 63; |
85 | unsigned long count; | 85 | unsigned long count; |
@@ -98,7 +98,7 @@ void mips_timer_interrupt(struct pt_regs *regs) | |||
98 | kstat_this_cpu.irqs[irq]++; | 98 | kstat_this_cpu.irqs[irq]++; |
99 | do_timer(1); | 99 | do_timer(1); |
100 | #ifndef CONFIG_SMP | 100 | #ifndef CONFIG_SMP |
101 | update_process_times(user_mode(regs)); | 101 | update_process_times(user_mode(get_irq_regs())); |
102 | #endif | 102 | #endif |
103 | r4k_cur += r4k_offset; | 103 | r4k_cur += r4k_offset; |
104 | ack_r4ktimer(r4k_cur); | 104 | ack_r4ktimer(r4k_cur); |
@@ -115,7 +115,7 @@ null: | |||
115 | } | 115 | } |
116 | 116 | ||
117 | #ifdef CONFIG_PM | 117 | #ifdef CONFIG_PM |
118 | irqreturn_t counter0_irq(int irq, void *dev_id, struct pt_regs *regs) | 118 | irqreturn_t counter0_irq(int irq, void *dev_id) |
119 | { | 119 | { |
120 | unsigned long pc0; | 120 | unsigned long pc0; |
121 | int time_elapsed; | 121 | int time_elapsed; |
@@ -139,7 +139,7 @@ irqreturn_t counter0_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
139 | while (time_elapsed > 0) { | 139 | while (time_elapsed > 0) { |
140 | do_timer(1); | 140 | do_timer(1); |
141 | #ifndef CONFIG_SMP | 141 | #ifndef CONFIG_SMP |
142 | update_process_times(user_mode(regs)); | 142 | update_process_times(user_mode(get_irq_regs())); |
143 | #endif | 143 | #endif |
144 | time_elapsed -= MATCH20_INC; | 144 | time_elapsed -= MATCH20_INC; |
145 | last_match20 += MATCH20_INC; | 145 | last_match20 += MATCH20_INC; |
@@ -158,7 +158,7 @@ irqreturn_t counter0_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
158 | jiffie_drift -= 999; | 158 | jiffie_drift -= 999; |
159 | do_timer(1); /* increment jiffies by one */ | 159 | do_timer(1); /* increment jiffies by one */ |
160 | #ifndef CONFIG_SMP | 160 | #ifndef CONFIG_SMP |
161 | update_process_times(user_mode(regs)); | 161 | update_process_times(user_mode(get_irq_regs())); |
162 | #endif | 162 | #endif |
163 | } | 163 | } |
164 | 164 | ||
diff --git a/arch/mips/au1000/common/usbdev.c b/arch/mips/au1000/common/usbdev.c deleted file mode 100644 index 63bcb3a95dc7..000000000000 --- a/arch/mips/au1000/common/usbdev.c +++ /dev/null | |||
@@ -1,1555 +0,0 @@ | |||
1 | /* | ||
2 | * BRIEF MODULE DESCRIPTION | ||
3 | * Au1000 USB Device-Side (device layer) | ||
4 | * | ||
5 | * Copyright 2001-2002 MontaVista Software Inc. | ||
6 | * Author: MontaVista Software, Inc. | ||
7 | * stevel@mvista.com or source@mvista.com | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms of the GNU General Public License as published by the | ||
11 | * Free Software Foundation; either version 2 of the License, or (at your | ||
12 | * option) any later version. | ||
13 | * | ||
14 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
15 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
16 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
17 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
18 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
19 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
20 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
21 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
22 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
23 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
24 | * | ||
25 | * You should have received a copy of the GNU General Public License along | ||
26 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
27 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
28 | */ | ||
29 | #include <linux/kernel.h> | ||
30 | #include <linux/ioport.h> | ||
31 | #include <linux/sched.h> | ||
32 | #include <linux/signal.h> | ||
33 | #include <linux/errno.h> | ||
34 | #include <linux/poll.h> | ||
35 | #include <linux/init.h> | ||
36 | #include <linux/slab.h> | ||
37 | #include <linux/fcntl.h> | ||
38 | #include <linux/module.h> | ||
39 | #include <linux/spinlock.h> | ||
40 | #include <linux/list.h> | ||
41 | #include <linux/smp_lock.h> | ||
42 | #define DEBUG | ||
43 | #include <linux/usb.h> | ||
44 | |||
45 | #include <asm/io.h> | ||
46 | #include <asm/uaccess.h> | ||
47 | #include <asm/irq.h> | ||
48 | #include <asm/mipsregs.h> | ||
49 | #include <asm/au1000.h> | ||
50 | #include <asm/au1000_dma.h> | ||
51 | #include <asm/au1000_usbdev.h> | ||
52 | |||
53 | #ifdef DEBUG | ||
54 | #undef VDEBUG | ||
55 | #ifdef VDEBUG | ||
56 | #define vdbg(fmt, arg...) printk(KERN_DEBUG __FILE__ ": " fmt "\n" , ## arg) | ||
57 | #else | ||
58 | #define vdbg(fmt, arg...) do {} while (0) | ||
59 | #endif | ||
60 | #else | ||
61 | #define vdbg(fmt, arg...) do {} while (0) | ||
62 | #endif | ||
63 | |||
64 | #define ALLOC_FLAGS (in_interrupt () ? GFP_ATOMIC : GFP_KERNEL) | ||
65 | |||
66 | #define EP_FIFO_DEPTH 8 | ||
67 | |||
68 | typedef enum { | ||
69 | SETUP_STAGE = 0, | ||
70 | DATA_STAGE, | ||
71 | STATUS_STAGE | ||
72 | } ep0_stage_t; | ||
73 | |||
74 | typedef struct { | ||
75 | int read_fifo; | ||
76 | int write_fifo; | ||
77 | int ctrl_stat; | ||
78 | int read_fifo_status; | ||
79 | int write_fifo_status; | ||
80 | } endpoint_reg_t; | ||
81 | |||
82 | typedef struct { | ||
83 | usbdev_pkt_t *head; | ||
84 | usbdev_pkt_t *tail; | ||
85 | int count; | ||
86 | } pkt_list_t; | ||
87 | |||
88 | typedef struct { | ||
89 | int active; | ||
90 | struct usb_endpoint_descriptor *desc; | ||
91 | endpoint_reg_t *reg; | ||
92 | /* Only one of these are used, unless this is the control ep */ | ||
93 | pkt_list_t inlist; | ||
94 | pkt_list_t outlist; | ||
95 | unsigned int indma, outdma; /* DMA channel numbers for IN, OUT */ | ||
96 | /* following are extracted from endpoint descriptor for easy access */ | ||
97 | int max_pkt_size; | ||
98 | int type; | ||
99 | int direction; | ||
100 | /* WE assign endpoint addresses! */ | ||
101 | int address; | ||
102 | spinlock_t lock; | ||
103 | } endpoint_t; | ||
104 | |||
105 | |||
106 | static struct usb_dev { | ||
107 | endpoint_t ep[6]; | ||
108 | ep0_stage_t ep0_stage; | ||
109 | |||
110 | struct usb_device_descriptor * dev_desc; | ||
111 | struct usb_interface_descriptor* if_desc; | ||
112 | struct usb_config_descriptor * conf_desc; | ||
113 | u8 * full_conf_desc; | ||
114 | struct usb_string_descriptor * str_desc[6]; | ||
115 | |||
116 | /* callback to function layer */ | ||
117 | void (*func_cb)(usbdev_cb_type_t type, unsigned long arg, | ||
118 | void *cb_data); | ||
119 | void* cb_data; | ||
120 | |||
121 | usbdev_state_t state; // device state | ||
122 | int suspended; // suspended flag | ||
123 | int address; // device address | ||
124 | int interface; | ||
125 | int num_ep; | ||
126 | u8 alternate_setting; | ||
127 | u8 configuration; // configuration value | ||
128 | int remote_wakeup_en; | ||
129 | } usbdev; | ||
130 | |||
131 | |||
132 | static endpoint_reg_t ep_reg[] = { | ||
133 | // FIFO's 0 and 1 are EP0 default control | ||
134 | {USBD_EP0RD, USBD_EP0WR, USBD_EP0CS, USBD_EP0RDSTAT, USBD_EP0WRSTAT }, | ||
135 | {0}, | ||
136 | // FIFO 2 is EP2, IN | ||
137 | { -1, USBD_EP2WR, USBD_EP2CS, -1, USBD_EP2WRSTAT }, | ||
138 | // FIFO 3 is EP3, IN | ||
139 | { -1, USBD_EP3WR, USBD_EP3CS, -1, USBD_EP3WRSTAT }, | ||
140 | // FIFO 4 is EP4, OUT | ||
141 | {USBD_EP4RD, -1, USBD_EP4CS, USBD_EP4RDSTAT, -1 }, | ||
142 | // FIFO 5 is EP5, OUT | ||
143 | {USBD_EP5RD, -1, USBD_EP5CS, USBD_EP5RDSTAT, -1 } | ||
144 | }; | ||
145 | |||
146 | static struct { | ||
147 | unsigned int id; | ||
148 | const char *str; | ||
149 | } ep_dma_id[] = { | ||
150 | { DMA_ID_USBDEV_EP0_TX, "USBDev EP0 IN" }, | ||
151 | { DMA_ID_USBDEV_EP0_RX, "USBDev EP0 OUT" }, | ||
152 | { DMA_ID_USBDEV_EP2_TX, "USBDev EP2 IN" }, | ||
153 | { DMA_ID_USBDEV_EP3_TX, "USBDev EP3 IN" }, | ||
154 | { DMA_ID_USBDEV_EP4_RX, "USBDev EP4 OUT" }, | ||
155 | { DMA_ID_USBDEV_EP5_RX, "USBDev EP5 OUT" } | ||
156 | }; | ||
157 | |||
158 | #define DIR_OUT 0 | ||
159 | #define DIR_IN (1<<3) | ||
160 | |||
161 | #define CONTROL_EP USB_ENDPOINT_XFER_CONTROL | ||
162 | #define BULK_EP USB_ENDPOINT_XFER_BULK | ||
163 | |||
164 | static inline endpoint_t * | ||
165 | epaddr_to_ep(struct usb_dev* dev, int ep_addr) | ||
166 | { | ||
167 | if (ep_addr >= 0 && ep_addr < 2) | ||
168 | return &dev->ep[0]; | ||
169 | if (ep_addr < 6) | ||
170 | return &dev->ep[ep_addr]; | ||
171 | return NULL; | ||
172 | } | ||
173 | |||
174 | static const char* std_req_name[] = { | ||
175 | "GET_STATUS", | ||
176 | "CLEAR_FEATURE", | ||
177 | "RESERVED", | ||
178 | "SET_FEATURE", | ||
179 | "RESERVED", | ||
180 | "SET_ADDRESS", | ||
181 | "GET_DESCRIPTOR", | ||
182 | "SET_DESCRIPTOR", | ||
183 | "GET_CONFIGURATION", | ||
184 | "SET_CONFIGURATION", | ||
185 | "GET_INTERFACE", | ||
186 | "SET_INTERFACE", | ||
187 | "SYNCH_FRAME" | ||
188 | }; | ||
189 | |||
190 | static inline const char* | ||
191 | get_std_req_name(int req) | ||
192 | { | ||
193 | return (req >= 0 && req <= 12) ? std_req_name[req] : "UNKNOWN"; | ||
194 | } | ||
195 | |||
196 | #if 0 | ||
197 | static void | ||
198 | dump_setup(struct usb_ctrlrequest* s) | ||
199 | { | ||
200 | dbg("%s: requesttype=%d", __FUNCTION__, s->requesttype); | ||
201 | dbg("%s: request=%d %s", __FUNCTION__, s->request, | ||
202 | get_std_req_name(s->request)); | ||
203 | dbg("%s: value=0x%04x", __FUNCTION__, s->wValue); | ||
204 | dbg("%s: index=%d", __FUNCTION__, s->index); | ||
205 | dbg("%s: length=%d", __FUNCTION__, s->length); | ||
206 | } | ||
207 | #endif | ||
208 | |||
209 | static inline usbdev_pkt_t * | ||
210 | alloc_packet(endpoint_t * ep, int data_size, void* data) | ||
211 | { | ||
212 | usbdev_pkt_t* pkt = kmalloc(sizeof(usbdev_pkt_t) + data_size, | ||
213 | ALLOC_FLAGS); | ||
214 | if (!pkt) | ||
215 | return NULL; | ||
216 | pkt->ep_addr = ep->address; | ||
217 | pkt->size = data_size; | ||
218 | pkt->status = 0; | ||
219 | pkt->next = NULL; | ||
220 | if (data) | ||
221 | memcpy(pkt->payload, data, data_size); | ||
222 | |||
223 | return pkt; | ||
224 | } | ||
225 | |||
226 | |||
227 | /* | ||
228 | * Link a packet to the tail of the enpoint's packet list. | ||
229 | * EP spinlock must be held when calling. | ||
230 | */ | ||
231 | static void | ||
232 | link_tail(endpoint_t * ep, pkt_list_t * list, usbdev_pkt_t * pkt) | ||
233 | { | ||
234 | if (!list->tail) { | ||
235 | list->head = list->tail = pkt; | ||
236 | list->count = 1; | ||
237 | } else { | ||
238 | list->tail->next = pkt; | ||
239 | list->tail = pkt; | ||
240 | list->count++; | ||
241 | } | ||
242 | } | ||
243 | |||
244 | /* | ||
245 | * Unlink and return a packet from the head of the given packet | ||
246 | * list. It is the responsibility of the caller to free the packet. | ||
247 | * EP spinlock must be held when calling. | ||
248 | */ | ||
249 | static usbdev_pkt_t * | ||
250 | unlink_head(pkt_list_t * list) | ||
251 | { | ||
252 | usbdev_pkt_t *pkt; | ||
253 | |||
254 | pkt = list->head; | ||
255 | if (!pkt || !list->count) { | ||
256 | return NULL; | ||
257 | } | ||
258 | |||
259 | list->head = pkt->next; | ||
260 | if (!list->head) { | ||
261 | list->head = list->tail = NULL; | ||
262 | list->count = 0; | ||
263 | } else | ||
264 | list->count--; | ||
265 | |||
266 | return pkt; | ||
267 | } | ||
268 | |||
269 | /* | ||
270 | * Create and attach a new packet to the tail of the enpoint's | ||
271 | * packet list. EP spinlock must be held when calling. | ||
272 | */ | ||
273 | static usbdev_pkt_t * | ||
274 | add_packet(endpoint_t * ep, pkt_list_t * list, int size) | ||
275 | { | ||
276 | usbdev_pkt_t *pkt = alloc_packet(ep, size, NULL); | ||
277 | if (!pkt) | ||
278 | return NULL; | ||
279 | |||
280 | link_tail(ep, list, pkt); | ||
281 | return pkt; | ||
282 | } | ||
283 | |||
284 | |||
285 | /* | ||
286 | * Unlink and free a packet from the head of the enpoint's | ||
287 | * packet list. EP spinlock must be held when calling. | ||
288 | */ | ||
289 | static inline void | ||
290 | free_packet(pkt_list_t * list) | ||
291 | { | ||
292 | kfree(unlink_head(list)); | ||
293 | } | ||
294 | |||
295 | /* EP spinlock must be held when calling. */ | ||
296 | static inline void | ||
297 | flush_pkt_list(pkt_list_t * list) | ||
298 | { | ||
299 | while (list->count) | ||
300 | free_packet(list); | ||
301 | } | ||
302 | |||
303 | /* EP spinlock must be held when calling */ | ||
304 | static inline void | ||
305 | flush_write_fifo(endpoint_t * ep) | ||
306 | { | ||
307 | if (ep->reg->write_fifo_status >= 0) { | ||
308 | au_writel(USBDEV_FSTAT_FLUSH | USBDEV_FSTAT_UF | | ||
309 | USBDEV_FSTAT_OF, | ||
310 | ep->reg->write_fifo_status); | ||
311 | //udelay(100); | ||
312 | //au_writel(USBDEV_FSTAT_UF | USBDEV_FSTAT_OF, | ||
313 | // ep->reg->write_fifo_status); | ||
314 | } | ||
315 | } | ||
316 | |||
317 | /* EP spinlock must be held when calling */ | ||
318 | static inline void | ||
319 | flush_read_fifo(endpoint_t * ep) | ||
320 | { | ||
321 | if (ep->reg->read_fifo_status >= 0) { | ||
322 | au_writel(USBDEV_FSTAT_FLUSH | USBDEV_FSTAT_UF | | ||
323 | USBDEV_FSTAT_OF, | ||
324 | ep->reg->read_fifo_status); | ||
325 | //udelay(100); | ||
326 | //au_writel(USBDEV_FSTAT_UF | USBDEV_FSTAT_OF, | ||
327 | // ep->reg->read_fifo_status); | ||
328 | } | ||
329 | } | ||
330 | |||
331 | |||
332 | /* EP spinlock must be held when calling. */ | ||
333 | static void | ||
334 | endpoint_flush(endpoint_t * ep) | ||
335 | { | ||
336 | // First, flush all packets | ||
337 | flush_pkt_list(&ep->inlist); | ||
338 | flush_pkt_list(&ep->outlist); | ||
339 | |||
340 | // Now flush the endpoint's h/w FIFO(s) | ||
341 | flush_write_fifo(ep); | ||
342 | flush_read_fifo(ep); | ||
343 | } | ||
344 | |||
345 | /* EP spinlock must be held when calling. */ | ||
346 | static void | ||
347 | endpoint_stall(endpoint_t * ep) | ||
348 | { | ||
349 | u32 cs; | ||
350 | |||
351 | warn("%s", __FUNCTION__); | ||
352 | |||
353 | cs = au_readl(ep->reg->ctrl_stat) | USBDEV_CS_STALL; | ||
354 | au_writel(cs, ep->reg->ctrl_stat); | ||
355 | } | ||
356 | |||
357 | /* EP spinlock must be held when calling. */ | ||
358 | static void | ||
359 | endpoint_unstall(endpoint_t * ep) | ||
360 | { | ||
361 | u32 cs; | ||
362 | |||
363 | warn("%s", __FUNCTION__); | ||
364 | |||
365 | cs = au_readl(ep->reg->ctrl_stat) & ~USBDEV_CS_STALL; | ||
366 | au_writel(cs, ep->reg->ctrl_stat); | ||
367 | } | ||
368 | |||
369 | static void | ||
370 | endpoint_reset_datatoggle(endpoint_t * ep) | ||
371 | { | ||
372 | // FIXME: is this possible? | ||
373 | } | ||
374 | |||
375 | |||
376 | /* EP spinlock must be held when calling. */ | ||
377 | static int | ||
378 | endpoint_fifo_read(endpoint_t * ep) | ||
379 | { | ||
380 | int read_count = 0; | ||
381 | u8 *bufptr; | ||
382 | usbdev_pkt_t *pkt = ep->outlist.tail; | ||
383 | |||
384 | if (!pkt) | ||
385 | return -EINVAL; | ||
386 | |||
387 | bufptr = &pkt->payload[pkt->size]; | ||
388 | while (au_readl(ep->reg->read_fifo_status) & USBDEV_FSTAT_FCNT_MASK) { | ||
389 | *bufptr++ = au_readl(ep->reg->read_fifo) & 0xff; | ||
390 | read_count++; | ||
391 | pkt->size++; | ||
392 | } | ||
393 | |||
394 | return read_count; | ||
395 | } | ||
396 | |||
397 | #if 0 | ||
398 | /* EP spinlock must be held when calling. */ | ||
399 | static int | ||
400 | endpoint_fifo_write(endpoint_t * ep, int index) | ||
401 | { | ||
402 | int write_count = 0; | ||
403 | u8 *bufptr; | ||
404 | usbdev_pkt_t *pkt = ep->inlist.head; | ||
405 | |||
406 | if (!pkt) | ||
407 | return -EINVAL; | ||
408 | |||
409 | bufptr = &pkt->payload[index]; | ||
410 | while ((au_readl(ep->reg->write_fifo_status) & | ||
411 | USBDEV_FSTAT_FCNT_MASK) < EP_FIFO_DEPTH) { | ||
412 | if (bufptr < pkt->payload + pkt->size) { | ||
413 | au_writel(*bufptr++, ep->reg->write_fifo); | ||
414 | write_count++; | ||
415 | } else { | ||
416 | break; | ||
417 | } | ||
418 | } | ||
419 | |||
420 | return write_count; | ||
421 | } | ||
422 | #endif | ||
423 | |||
424 | /* | ||
425 | * This routine is called to restart transmission of a packet. | ||
426 | * The endpoint's TSIZE must be set to the new packet's size, | ||
427 | * and DMA to the write FIFO needs to be restarted. | ||
428 | * EP spinlock must be held when calling. | ||
429 | */ | ||
430 | static void | ||
431 | kickstart_send_packet(endpoint_t * ep) | ||
432 | { | ||
433 | u32 cs; | ||
434 | usbdev_pkt_t *pkt = ep->inlist.head; | ||
435 | |||
436 | vdbg("%s: ep%d, pkt=%p", __FUNCTION__, ep->address, pkt); | ||
437 | |||
438 | if (!pkt) { | ||
439 | err("%s: head=NULL! list->count=%d", __FUNCTION__, | ||
440 | ep->inlist.count); | ||
441 | return; | ||
442 | } | ||
443 | |||
444 | dma_cache_wback_inv((unsigned long)pkt->payload, pkt->size); | ||
445 | |||
446 | /* | ||
447 | * make sure FIFO is empty | ||
448 | */ | ||
449 | flush_write_fifo(ep); | ||
450 | |||
451 | cs = au_readl(ep->reg->ctrl_stat) & USBDEV_CS_STALL; | ||
452 | cs |= (pkt->size << USBDEV_CS_TSIZE_BIT); | ||
453 | au_writel(cs, ep->reg->ctrl_stat); | ||
454 | |||
455 | if (get_dma_active_buffer(ep->indma) == 1) { | ||
456 | set_dma_count1(ep->indma, pkt->size); | ||
457 | set_dma_addr1(ep->indma, virt_to_phys(pkt->payload)); | ||
458 | enable_dma_buffer1(ep->indma); // reenable | ||
459 | } else { | ||
460 | set_dma_count0(ep->indma, pkt->size); | ||
461 | set_dma_addr0(ep->indma, virt_to_phys(pkt->payload)); | ||
462 | enable_dma_buffer0(ep->indma); // reenable | ||
463 | } | ||
464 | if (dma_halted(ep->indma)) | ||
465 | start_dma(ep->indma); | ||
466 | } | ||
467 | |||
468 | |||
469 | /* | ||
470 | * This routine is called when a packet in the inlist has been | ||
471 | * completed. Frees the completed packet and starts sending the | ||
472 | * next. EP spinlock must be held when calling. | ||
473 | */ | ||
474 | static usbdev_pkt_t * | ||
475 | send_packet_complete(endpoint_t * ep) | ||
476 | { | ||
477 | usbdev_pkt_t *pkt = unlink_head(&ep->inlist); | ||
478 | |||
479 | if (pkt) { | ||
480 | pkt->status = | ||
481 | (au_readl(ep->reg->ctrl_stat) & USBDEV_CS_NAK) ? | ||
482 | PKT_STATUS_NAK : PKT_STATUS_ACK; | ||
483 | |||
484 | vdbg("%s: ep%d, %s pkt=%p, list count=%d", __FUNCTION__, | ||
485 | ep->address, (pkt->status & PKT_STATUS_NAK) ? | ||
486 | "NAK" : "ACK", pkt, ep->inlist.count); | ||
487 | } | ||
488 | |||
489 | /* | ||
490 | * The write fifo should already be drained if things are | ||
491 | * working right, but flush it anyway just in case. | ||
492 | */ | ||
493 | flush_write_fifo(ep); | ||
494 | |||
495 | // begin transmitting next packet in the inlist | ||
496 | if (ep->inlist.count) { | ||
497 | kickstart_send_packet(ep); | ||
498 | } | ||
499 | |||
500 | return pkt; | ||
501 | } | ||
502 | |||
503 | /* | ||
504 | * Add a new packet to the tail of the given ep's packet | ||
505 | * inlist. The transmit complete interrupt frees packets from | ||
506 | * the head of this list. EP spinlock must be held when calling. | ||
507 | */ | ||
508 | static int | ||
509 | send_packet(struct usb_dev* dev, usbdev_pkt_t *pkt, int async) | ||
510 | { | ||
511 | pkt_list_t *list; | ||
512 | endpoint_t* ep; | ||
513 | |||
514 | if (!pkt || !(ep = epaddr_to_ep(dev, pkt->ep_addr))) | ||
515 | return -EINVAL; | ||
516 | |||
517 | if (!pkt->size) | ||
518 | return 0; | ||
519 | |||
520 | list = &ep->inlist; | ||
521 | |||
522 | if (!async && list->count) { | ||
523 | halt_dma(ep->indma); | ||
524 | flush_pkt_list(list); | ||
525 | } | ||
526 | |||
527 | link_tail(ep, list, pkt); | ||
528 | |||
529 | vdbg("%s: ep%d, pkt=%p, size=%d, list count=%d", __FUNCTION__, | ||
530 | ep->address, pkt, pkt->size, list->count); | ||
531 | |||
532 | if (list->count == 1) { | ||
533 | /* | ||
534 | * if the packet count is one, it means the list was empty, | ||
535 | * and no more data will go out this ep until we kick-start | ||
536 | * it again. | ||
537 | */ | ||
538 | kickstart_send_packet(ep); | ||
539 | } | ||
540 | |||
541 | return pkt->size; | ||
542 | } | ||
543 | |||
544 | /* | ||
545 | * This routine is called to restart reception of a packet. | ||
546 | * EP spinlock must be held when calling. | ||
547 | */ | ||
548 | static void | ||
549 | kickstart_receive_packet(endpoint_t * ep) | ||
550 | { | ||
551 | usbdev_pkt_t *pkt; | ||
552 | |||
553 | // get and link a new packet for next reception | ||
554 | if (!(pkt = add_packet(ep, &ep->outlist, ep->max_pkt_size))) { | ||
555 | err("%s: could not alloc new packet", __FUNCTION__); | ||
556 | return; | ||
557 | } | ||
558 | |||
559 | if (get_dma_active_buffer(ep->outdma) == 1) { | ||
560 | clear_dma_done1(ep->outdma); | ||
561 | set_dma_count1(ep->outdma, ep->max_pkt_size); | ||
562 | set_dma_count0(ep->outdma, 0); | ||
563 | set_dma_addr1(ep->outdma, virt_to_phys(pkt->payload)); | ||
564 | enable_dma_buffer1(ep->outdma); // reenable | ||
565 | } else { | ||
566 | clear_dma_done0(ep->outdma); | ||
567 | set_dma_count0(ep->outdma, ep->max_pkt_size); | ||
568 | set_dma_count1(ep->outdma, 0); | ||
569 | set_dma_addr0(ep->outdma, virt_to_phys(pkt->payload)); | ||
570 | enable_dma_buffer0(ep->outdma); // reenable | ||
571 | } | ||
572 | if (dma_halted(ep->outdma)) | ||
573 | start_dma(ep->outdma); | ||
574 | } | ||
575 | |||
576 | |||
577 | /* | ||
578 | * This routine is called when a packet in the outlist has been | ||
579 | * completed (received) and we need to prepare for a new packet | ||
580 | * to be received. Halts DMA and computes the packet size from the | ||
581 | * remaining DMA counter. Then prepares a new packet for reception | ||
582 | * and restarts DMA. FIXME: what if another packet comes in | ||
583 | * on top of the completed packet? Counter would be wrong. | ||
584 | * EP spinlock must be held when calling. | ||
585 | */ | ||
586 | static usbdev_pkt_t * | ||
587 | receive_packet_complete(endpoint_t * ep) | ||
588 | { | ||
589 | usbdev_pkt_t *pkt = ep->outlist.tail; | ||
590 | u32 cs; | ||
591 | |||
592 | halt_dma(ep->outdma); | ||
593 | |||
594 | cs = au_readl(ep->reg->ctrl_stat); | ||
595 | |||
596 | if (!pkt) | ||
597 | return NULL; | ||
598 | |||
599 | pkt->size = ep->max_pkt_size - get_dma_residue(ep->outdma); | ||
600 | if (pkt->size) | ||
601 | dma_cache_inv((unsigned long)pkt->payload, pkt->size); | ||
602 | /* | ||
603 | * need to pull out any remaining bytes in the FIFO. | ||
604 | */ | ||
605 | endpoint_fifo_read(ep); | ||
606 | /* | ||
607 | * should be drained now, but flush anyway just in case. | ||
608 | */ | ||
609 | flush_read_fifo(ep); | ||
610 | |||
611 | pkt->status = (cs & USBDEV_CS_NAK) ? PKT_STATUS_NAK : PKT_STATUS_ACK; | ||
612 | if (ep->address == 0 && (cs & USBDEV_CS_SU)) | ||
613 | pkt->status |= PKT_STATUS_SU; | ||
614 | |||
615 | vdbg("%s: ep%d, %s pkt=%p, size=%d", __FUNCTION__, | ||
616 | ep->address, (pkt->status & PKT_STATUS_NAK) ? | ||
617 | "NAK" : "ACK", pkt, pkt->size); | ||
618 | |||
619 | kickstart_receive_packet(ep); | ||
620 | |||
621 | return pkt; | ||
622 | } | ||
623 | |||
624 | |||
625 | /* | ||
626 | **************************************************************************** | ||
627 | * Here starts the standard device request handlers. They are | ||
628 | * all called by do_setup() via a table of function pointers. | ||
629 | **************************************************************************** | ||
630 | */ | ||
631 | |||
632 | static ep0_stage_t | ||
633 | do_get_status(struct usb_dev* dev, struct usb_ctrlrequest* setup) | ||
634 | { | ||
635 | switch (setup->bRequestType) { | ||
636 | case 0x80: // Device | ||
637 | // FIXME: send device status | ||
638 | break; | ||
639 | case 0x81: // Interface | ||
640 | // FIXME: send interface status | ||
641 | break; | ||
642 | case 0x82: // End Point | ||
643 | // FIXME: send endpoint status | ||
644 | break; | ||
645 | default: | ||
646 | // Invalid Command | ||
647 | endpoint_stall(&dev->ep[0]); // Stall End Point 0 | ||
648 | break; | ||
649 | } | ||
650 | |||
651 | return STATUS_STAGE; | ||
652 | } | ||
653 | |||
654 | static ep0_stage_t | ||
655 | do_clear_feature(struct usb_dev* dev, struct usb_ctrlrequest* setup) | ||
656 | { | ||
657 | switch (setup->bRequestType) { | ||
658 | case 0x00: // Device | ||
659 | if ((le16_to_cpu(setup->wValue) & 0xff) == 1) | ||
660 | dev->remote_wakeup_en = 0; | ||
661 | else | ||
662 | endpoint_stall(&dev->ep[0]); | ||
663 | break; | ||
664 | case 0x02: // End Point | ||
665 | if ((le16_to_cpu(setup->wValue) & 0xff) == 0) { | ||
666 | endpoint_t *ep = | ||
667 | epaddr_to_ep(dev, | ||
668 | le16_to_cpu(setup->wIndex) & 0xff); | ||
669 | |||
670 | endpoint_unstall(ep); | ||
671 | endpoint_reset_datatoggle(ep); | ||
672 | } else | ||
673 | endpoint_stall(&dev->ep[0]); | ||
674 | break; | ||
675 | } | ||
676 | |||
677 | return SETUP_STAGE; | ||
678 | } | ||
679 | |||
680 | static ep0_stage_t | ||
681 | do_reserved(struct usb_dev* dev, struct usb_ctrlrequest* setup) | ||
682 | { | ||
683 | // Invalid request, stall End Point 0 | ||
684 | endpoint_stall(&dev->ep[0]); | ||
685 | return SETUP_STAGE; | ||
686 | } | ||
687 | |||
688 | static ep0_stage_t | ||
689 | do_set_feature(struct usb_dev* dev, struct usb_ctrlrequest* setup) | ||
690 | { | ||
691 | switch (setup->bRequestType) { | ||
692 | case 0x00: // Device | ||
693 | if ((le16_to_cpu(setup->wValue) & 0xff) == 1) | ||
694 | dev->remote_wakeup_en = 1; | ||
695 | else | ||
696 | endpoint_stall(&dev->ep[0]); | ||
697 | break; | ||
698 | case 0x02: // End Point | ||
699 | if ((le16_to_cpu(setup->wValue) & 0xff) == 0) { | ||
700 | endpoint_t *ep = | ||
701 | epaddr_to_ep(dev, | ||
702 | le16_to_cpu(setup->wIndex) & 0xff); | ||
703 | |||
704 | endpoint_stall(ep); | ||
705 | } else | ||
706 | endpoint_stall(&dev->ep[0]); | ||
707 | break; | ||
708 | } | ||
709 | |||
710 | return SETUP_STAGE; | ||
711 | } | ||
712 | |||
713 | static ep0_stage_t | ||
714 | do_set_address(struct usb_dev* dev, struct usb_ctrlrequest* setup) | ||
715 | { | ||
716 | int new_state = dev->state; | ||
717 | int new_addr = le16_to_cpu(setup->wValue); | ||
718 | |||
719 | dbg("%s: our address=%d", __FUNCTION__, new_addr); | ||
720 | |||
721 | if (new_addr > 127) { | ||
722 | // usb spec doesn't tell us what to do, so just go to | ||
723 | // default state | ||
724 | new_state = DEFAULT; | ||
725 | dev->address = 0; | ||
726 | } else if (dev->address != new_addr) { | ||
727 | dev->address = new_addr; | ||
728 | new_state = ADDRESS; | ||
729 | } | ||
730 | |||
731 | if (dev->state != new_state) { | ||
732 | dev->state = new_state; | ||
733 | /* inform function layer of usbdev state change */ | ||
734 | dev->func_cb(CB_NEW_STATE, dev->state, dev->cb_data); | ||
735 | } | ||
736 | |||
737 | return SETUP_STAGE; | ||
738 | } | ||
739 | |||
740 | static ep0_stage_t | ||
741 | do_get_descriptor(struct usb_dev* dev, struct usb_ctrlrequest* setup) | ||
742 | { | ||
743 | int strnum, desc_len = le16_to_cpu(setup->wLength); | ||
744 | |||
745 | switch (le16_to_cpu(setup->wValue) >> 8) { | ||
746 | case USB_DT_DEVICE: | ||
747 | // send device descriptor! | ||
748 | desc_len = desc_len > dev->dev_desc->bLength ? | ||
749 | dev->dev_desc->bLength : desc_len; | ||
750 | dbg("sending device desc, size=%d", desc_len); | ||
751 | send_packet(dev, alloc_packet(&dev->ep[0], desc_len, | ||
752 | dev->dev_desc), 0); | ||
753 | break; | ||
754 | case USB_DT_CONFIG: | ||
755 | // If the config descr index in low-byte of | ||
756 | // setup->wValue is valid, send config descr, | ||
757 | // otherwise stall ep0. | ||
758 | if ((le16_to_cpu(setup->wValue) & 0xff) == 0) { | ||
759 | // send config descriptor! | ||
760 | if (desc_len <= USB_DT_CONFIG_SIZE) { | ||
761 | dbg("sending partial config desc, size=%d", | ||
762 | desc_len); | ||
763 | send_packet(dev, | ||
764 | alloc_packet(&dev->ep[0], | ||
765 | desc_len, | ||
766 | dev->conf_desc), | ||
767 | 0); | ||
768 | } else { | ||
769 | int len = le16_to_cpu(dev->conf_desc->wTotalLength); | ||
770 | dbg("sending whole config desc," | ||
771 | " size=%d, our size=%d", desc_len, len); | ||
772 | desc_len = desc_len > len ? len : desc_len; | ||
773 | send_packet(dev, | ||
774 | alloc_packet(&dev->ep[0], | ||
775 | desc_len, | ||
776 | dev->full_conf_desc), | ||
777 | 0); | ||
778 | } | ||
779 | } else | ||
780 | endpoint_stall(&dev->ep[0]); | ||
781 | break; | ||
782 | case USB_DT_STRING: | ||
783 | // If the string descr index in low-byte of setup->wValue | ||
784 | // is valid, send string descr, otherwise stall ep0. | ||
785 | strnum = le16_to_cpu(setup->wValue) & 0xff; | ||
786 | if (strnum >= 0 && strnum < 6) { | ||
787 | struct usb_string_descriptor *desc = | ||
788 | dev->str_desc[strnum]; | ||
789 | desc_len = desc_len > desc->bLength ? | ||
790 | desc->bLength : desc_len; | ||
791 | dbg("sending string desc %d", strnum); | ||
792 | send_packet(dev, | ||
793 | alloc_packet(&dev->ep[0], desc_len, | ||
794 | desc), 0); | ||
795 | } else | ||
796 | endpoint_stall(&dev->ep[0]); | ||
797 | break; | ||
798 | default: | ||
799 | // Invalid request | ||
800 | err("invalid get desc=%d, stalled", | ||
801 | le16_to_cpu(setup->wValue) >> 8); | ||
802 | endpoint_stall(&dev->ep[0]); // Stall endpoint 0 | ||
803 | break; | ||
804 | } | ||
805 | |||
806 | return STATUS_STAGE; | ||
807 | } | ||
808 | |||
809 | static ep0_stage_t | ||
810 | do_set_descriptor(struct usb_dev* dev, struct usb_ctrlrequest* setup) | ||
811 | { | ||
812 | // TODO: implement | ||
813 | // there will be an OUT data stage (the descriptor to set) | ||
814 | return DATA_STAGE; | ||
815 | } | ||
816 | |||
817 | static ep0_stage_t | ||
818 | do_get_configuration(struct usb_dev* dev, struct usb_ctrlrequest* setup) | ||
819 | { | ||
820 | // send dev->configuration | ||
821 | dbg("sending config"); | ||
822 | send_packet(dev, alloc_packet(&dev->ep[0], 1, &dev->configuration), | ||
823 | 0); | ||
824 | return STATUS_STAGE; | ||
825 | } | ||
826 | |||
827 | static ep0_stage_t | ||
828 | do_set_configuration(struct usb_dev* dev, struct usb_ctrlrequest* setup) | ||
829 | { | ||
830 | // set active config to low-byte of setup->wValue | ||
831 | dev->configuration = le16_to_cpu(setup->wValue) & 0xff; | ||
832 | dbg("set config, config=%d", dev->configuration); | ||
833 | if (!dev->configuration && dev->state > DEFAULT) { | ||
834 | dev->state = ADDRESS; | ||
835 | /* inform function layer of usbdev state change */ | ||
836 | dev->func_cb(CB_NEW_STATE, dev->state, dev->cb_data); | ||
837 | } else if (dev->configuration == 1) { | ||
838 | dev->state = CONFIGURED; | ||
839 | /* inform function layer of usbdev state change */ | ||
840 | dev->func_cb(CB_NEW_STATE, dev->state, dev->cb_data); | ||
841 | } else { | ||
842 | // FIXME: "respond with request error" - how? | ||
843 | } | ||
844 | |||
845 | return SETUP_STAGE; | ||
846 | } | ||
847 | |||
848 | static ep0_stage_t | ||
849 | do_get_interface(struct usb_dev* dev, struct usb_ctrlrequest* setup) | ||
850 | { | ||
851 | // interface must be zero. | ||
852 | if ((le16_to_cpu(setup->wIndex) & 0xff) || dev->state == ADDRESS) { | ||
853 | // FIXME: respond with "request error". how? | ||
854 | } else if (dev->state == CONFIGURED) { | ||
855 | // send dev->alternate_setting | ||
856 | dbg("sending alt setting"); | ||
857 | send_packet(dev, alloc_packet(&dev->ep[0], 1, | ||
858 | &dev->alternate_setting), 0); | ||
859 | } | ||
860 | |||
861 | return STATUS_STAGE; | ||
862 | |||
863 | } | ||
864 | |||
865 | static ep0_stage_t | ||
866 | do_set_interface(struct usb_dev* dev, struct usb_ctrlrequest* setup) | ||
867 | { | ||
868 | if (dev->state == ADDRESS) { | ||
869 | // FIXME: respond with "request error". how? | ||
870 | } else if (dev->state == CONFIGURED) { | ||
871 | dev->interface = le16_to_cpu(setup->wIndex) & 0xff; | ||
872 | dev->alternate_setting = | ||
873 | le16_to_cpu(setup->wValue) & 0xff; | ||
874 | // interface and alternate_setting must be zero | ||
875 | if (dev->interface || dev->alternate_setting) { | ||
876 | // FIXME: respond with "request error". how? | ||
877 | } | ||
878 | } | ||
879 | |||
880 | return SETUP_STAGE; | ||
881 | } | ||
882 | |||
883 | static ep0_stage_t | ||
884 | do_synch_frame(struct usb_dev* dev, struct usb_ctrlrequest* setup) | ||
885 | { | ||
886 | // TODO | ||
887 | return SETUP_STAGE; | ||
888 | } | ||
889 | |||
890 | typedef ep0_stage_t (*req_method_t)(struct usb_dev* dev, | ||
891 | struct usb_ctrlrequest* setup); | ||
892 | |||
893 | |||
894 | /* Table of the standard device request handlers */ | ||
895 | static const req_method_t req_method[] = { | ||
896 | do_get_status, | ||
897 | do_clear_feature, | ||
898 | do_reserved, | ||
899 | do_set_feature, | ||
900 | do_reserved, | ||
901 | do_set_address, | ||
902 | do_get_descriptor, | ||
903 | do_set_descriptor, | ||
904 | do_get_configuration, | ||
905 | do_set_configuration, | ||
906 | do_get_interface, | ||
907 | do_set_interface, | ||
908 | do_synch_frame | ||
909 | }; | ||
910 | |||
911 | |||
912 | // SETUP packet request dispatcher | ||
913 | static void | ||
914 | do_setup (struct usb_dev* dev, struct usb_ctrlrequest* setup) | ||
915 | { | ||
916 | req_method_t m; | ||
917 | |||
918 | dbg("%s: req %d %s", __FUNCTION__, setup->bRequestType, | ||
919 | get_std_req_name(setup->bRequestType)); | ||
920 | |||
921 | if ((setup->bRequestType & USB_TYPE_MASK) != USB_TYPE_STANDARD || | ||
922 | (setup->bRequestType & USB_RECIP_MASK) != USB_RECIP_DEVICE) { | ||
923 | err("%s: invalid requesttype 0x%02x", __FUNCTION__, | ||
924 | setup->bRequestType); | ||
925 | return; | ||
926 | } | ||
927 | |||
928 | if ((setup->bRequestType & 0x80) == USB_DIR_OUT && setup->wLength) | ||
929 | dbg("%s: OUT phase! length=%d", __FUNCTION__, setup->wLength); | ||
930 | |||
931 | if (setup->bRequestType < sizeof(req_method)/sizeof(req_method_t)) | ||
932 | m = req_method[setup->bRequestType]; | ||
933 | else | ||
934 | m = do_reserved; | ||
935 | |||
936 | dev->ep0_stage = (*m)(dev, setup); | ||
937 | } | ||
938 | |||
939 | /* | ||
940 | * A SETUP, DATA0, or DATA1 packet has been received | ||
941 | * on the default control endpoint's fifo. | ||
942 | */ | ||
943 | static void | ||
944 | process_ep0_receive (struct usb_dev* dev) | ||
945 | { | ||
946 | endpoint_t *ep0 = &dev->ep[0]; | ||
947 | usbdev_pkt_t *pkt; | ||
948 | |||
949 | spin_lock(&ep0->lock); | ||
950 | |||
951 | // complete packet and prepare a new packet | ||
952 | pkt = receive_packet_complete(ep0); | ||
953 | if (!pkt) { | ||
954 | // FIXME: should put a warn/err here. | ||
955 | spin_unlock(&ep0->lock); | ||
956 | return; | ||
957 | } | ||
958 | |||
959 | // unlink immediately from endpoint. | ||
960 | unlink_head(&ep0->outlist); | ||
961 | |||
962 | // override current stage if h/w says it's a setup packet | ||
963 | if (pkt->status & PKT_STATUS_SU) | ||
964 | dev->ep0_stage = SETUP_STAGE; | ||
965 | |||
966 | switch (dev->ep0_stage) { | ||
967 | case SETUP_STAGE: | ||
968 | vdbg("SU bit is %s in setup stage", | ||
969 | (pkt->status & PKT_STATUS_SU) ? "set" : "not set"); | ||
970 | |||
971 | if (pkt->size == sizeof(struct usb_ctrlrequest)) { | ||
972 | #ifdef VDEBUG | ||
973 | if (pkt->status & PKT_STATUS_ACK) | ||
974 | vdbg("received SETUP"); | ||
975 | else | ||
976 | vdbg("received NAK SETUP"); | ||
977 | #endif | ||
978 | do_setup(dev, (struct usb_ctrlrequest*)pkt->payload); | ||
979 | } else | ||
980 | err("%s: wrong size SETUP received", __FUNCTION__); | ||
981 | break; | ||
982 | case DATA_STAGE: | ||
983 | /* | ||
984 | * this setup has an OUT data stage. Of the standard | ||
985 | * device requests, only set_descriptor has this stage, | ||
986 | * so this packet is that descriptor. TODO: drop it for | ||
987 | * now, set_descriptor not implemented. | ||
988 | * | ||
989 | * Need to place a byte in the write FIFO here, to prepare | ||
990 | * to send a zero-length DATA ack packet to the host in the | ||
991 | * STATUS stage. | ||
992 | */ | ||
993 | au_writel(0, ep0->reg->write_fifo); | ||
994 | dbg("received OUT stage DATAx on EP0, size=%d", pkt->size); | ||
995 | dev->ep0_stage = SETUP_STAGE; | ||
996 | break; | ||
997 | case STATUS_STAGE: | ||
998 | // this setup had an IN data stage, and host is ACK'ing | ||
999 | // the packet we sent during that stage. | ||
1000 | if (pkt->size != 0) | ||
1001 | warn("received non-zero ACK on EP0??"); | ||
1002 | #ifdef VDEBUG | ||
1003 | else | ||
1004 | vdbg("received ACK on EP0"); | ||
1005 | #endif | ||
1006 | dev->ep0_stage = SETUP_STAGE; | ||
1007 | break; | ||
1008 | } | ||
1009 | |||
1010 | spin_unlock(&ep0->lock); | ||
1011 | // we're done processing the packet, free it | ||
1012 | kfree(pkt); | ||
1013 | } | ||
1014 | |||
1015 | |||
1016 | /* | ||
1017 | * A DATA0/1 packet has been received on one of the OUT endpoints (4 or 5) | ||
1018 | */ | ||
1019 | static void | ||
1020 | process_ep_receive (struct usb_dev* dev, endpoint_t *ep) | ||
1021 | { | ||
1022 | usbdev_pkt_t *pkt; | ||
1023 | |||
1024 | spin_lock(&ep->lock); | ||
1025 | pkt = receive_packet_complete(ep); | ||
1026 | spin_unlock(&ep->lock); | ||
1027 | |||
1028 | dev->func_cb(CB_PKT_COMPLETE, (unsigned long)pkt, dev->cb_data); | ||
1029 | } | ||
1030 | |||
1031 | |||
1032 | |||
1033 | /* This ISR handles the receive complete and suspend events */ | ||
1034 | static void | ||
1035 | req_sus_intr (int irq, void *dev_id, struct pt_regs *regs) | ||
1036 | { | ||
1037 | struct usb_dev *dev = (struct usb_dev *) dev_id; | ||
1038 | u32 status; | ||
1039 | |||
1040 | status = au_readl(USBD_INTSTAT); | ||
1041 | au_writel(status, USBD_INTSTAT); // ack'em | ||
1042 | |||
1043 | if (status & (1<<0)) | ||
1044 | process_ep0_receive(dev); | ||
1045 | if (status & (1<<4)) | ||
1046 | process_ep_receive(dev, &dev->ep[4]); | ||
1047 | if (status & (1<<5)) | ||
1048 | process_ep_receive(dev, &dev->ep[5]); | ||
1049 | } | ||
1050 | |||
1051 | |||
1052 | /* This ISR handles the DMA done events on EP0 */ | ||
1053 | static void | ||
1054 | dma_done_ep0_intr(int irq, void *dev_id, struct pt_regs *regs) | ||
1055 | { | ||
1056 | struct usb_dev *dev = (struct usb_dev *) dev_id; | ||
1057 | usbdev_pkt_t* pkt; | ||
1058 | endpoint_t *ep0 = &dev->ep[0]; | ||
1059 | u32 cs0, buff_done; | ||
1060 | |||
1061 | spin_lock(&ep0->lock); | ||
1062 | cs0 = au_readl(ep0->reg->ctrl_stat); | ||
1063 | |||
1064 | // first check packet transmit done | ||
1065 | if ((buff_done = get_dma_buffer_done(ep0->indma)) != 0) { | ||
1066 | // transmitted a DATAx packet during DATA stage | ||
1067 | // on control endpoint 0 | ||
1068 | // clear DMA done bit | ||
1069 | if (buff_done & DMA_D0) | ||
1070 | clear_dma_done0(ep0->indma); | ||
1071 | if (buff_done & DMA_D1) | ||
1072 | clear_dma_done1(ep0->indma); | ||
1073 | |||
1074 | pkt = send_packet_complete(ep0); | ||
1075 | kfree(pkt); | ||
1076 | } | ||
1077 | |||
1078 | /* | ||
1079 | * Now check packet receive done. Shouldn't get these, | ||
1080 | * the receive packet complete intr should happen | ||
1081 | * before the DMA done intr occurs. | ||
1082 | */ | ||
1083 | if ((buff_done = get_dma_buffer_done(ep0->outdma)) != 0) { | ||
1084 | // clear DMA done bit | ||
1085 | if (buff_done & DMA_D0) | ||
1086 | clear_dma_done0(ep0->outdma); | ||
1087 | if (buff_done & DMA_D1) | ||
1088 | clear_dma_done1(ep0->outdma); | ||
1089 | |||
1090 | //process_ep0_receive(dev); | ||
1091 | } | ||
1092 | |||
1093 | spin_unlock(&ep0->lock); | ||
1094 | } | ||
1095 | |||
1096 | /* This ISR handles the DMA done events on endpoints 2,3,4,5 */ | ||
1097 | static void | ||
1098 | dma_done_ep_intr(int irq, void *dev_id, struct pt_regs *regs) | ||
1099 | { | ||
1100 | struct usb_dev *dev = (struct usb_dev *) dev_id; | ||
1101 | int i; | ||
1102 | |||
1103 | for (i = 2; i < 6; i++) { | ||
1104 | u32 buff_done; | ||
1105 | usbdev_pkt_t* pkt; | ||
1106 | endpoint_t *ep = &dev->ep[i]; | ||
1107 | |||
1108 | if (!ep->active) continue; | ||
1109 | |||
1110 | spin_lock(&ep->lock); | ||
1111 | |||
1112 | if (ep->direction == USB_DIR_IN) { | ||
1113 | buff_done = get_dma_buffer_done(ep->indma); | ||
1114 | if (buff_done != 0) { | ||
1115 | // transmitted a DATAx pkt on the IN ep | ||
1116 | // clear DMA done bit | ||
1117 | if (buff_done & DMA_D0) | ||
1118 | clear_dma_done0(ep->indma); | ||
1119 | if (buff_done & DMA_D1) | ||
1120 | clear_dma_done1(ep->indma); | ||
1121 | |||
1122 | pkt = send_packet_complete(ep); | ||
1123 | |||
1124 | spin_unlock(&ep->lock); | ||
1125 | dev->func_cb(CB_PKT_COMPLETE, | ||
1126 | (unsigned long)pkt, | ||
1127 | dev->cb_data); | ||
1128 | spin_lock(&ep->lock); | ||
1129 | } | ||
1130 | } else { | ||
1131 | /* | ||
1132 | * Check packet receive done (OUT ep). Shouldn't get | ||
1133 | * these, the rx packet complete intr should happen | ||
1134 | * before the DMA done intr occurs. | ||
1135 | */ | ||
1136 | buff_done = get_dma_buffer_done(ep->outdma); | ||
1137 | if (buff_done != 0) { | ||
1138 | // received a DATAx pkt on the OUT ep | ||
1139 | // clear DMA done bit | ||
1140 | if (buff_done & DMA_D0) | ||
1141 | clear_dma_done0(ep->outdma); | ||
1142 | if (buff_done & DMA_D1) | ||
1143 | clear_dma_done1(ep->outdma); | ||
1144 | |||
1145 | //process_ep_receive(dev, ep); | ||
1146 | } | ||
1147 | } | ||
1148 | |||
1149 | spin_unlock(&ep->lock); | ||
1150 | } | ||
1151 | } | ||
1152 | |||
1153 | |||
1154 | /*************************************************************************** | ||
1155 | * Here begins the external interface functions | ||
1156 | *************************************************************************** | ||
1157 | */ | ||
1158 | |||
1159 | /* | ||
1160 | * allocate a new packet | ||
1161 | */ | ||
1162 | int | ||
1163 | usbdev_alloc_packet(int ep_addr, int data_size, usbdev_pkt_t** pkt) | ||
1164 | { | ||
1165 | endpoint_t * ep = epaddr_to_ep(&usbdev, ep_addr); | ||
1166 | usbdev_pkt_t* lpkt = NULL; | ||
1167 | |||
1168 | if (!ep || !ep->active || ep->address < 2) | ||
1169 | return -ENODEV; | ||
1170 | if (data_size > ep->max_pkt_size) | ||
1171 | return -EINVAL; | ||
1172 | |||
1173 | lpkt = *pkt = alloc_packet(ep, data_size, NULL); | ||
1174 | if (!lpkt) | ||
1175 | return -ENOMEM; | ||
1176 | return 0; | ||
1177 | } | ||
1178 | |||
1179 | |||
1180 | /* | ||
1181 | * packet send | ||
1182 | */ | ||
1183 | int | ||
1184 | usbdev_send_packet(int ep_addr, usbdev_pkt_t * pkt) | ||
1185 | { | ||
1186 | unsigned long flags; | ||
1187 | int count; | ||
1188 | endpoint_t * ep; | ||
1189 | |||
1190 | if (!pkt || !(ep = epaddr_to_ep(&usbdev, pkt->ep_addr)) || | ||
1191 | !ep->active || ep->address < 2) | ||
1192 | return -ENODEV; | ||
1193 | if (ep->direction != USB_DIR_IN) | ||
1194 | return -EINVAL; | ||
1195 | |||
1196 | spin_lock_irqsave(&ep->lock, flags); | ||
1197 | count = send_packet(&usbdev, pkt, 1); | ||
1198 | spin_unlock_irqrestore(&ep->lock, flags); | ||
1199 | |||
1200 | return count; | ||
1201 | } | ||
1202 | |||
1203 | /* | ||
1204 | * packet receive | ||
1205 | */ | ||
1206 | int | ||
1207 | usbdev_receive_packet(int ep_addr, usbdev_pkt_t** pkt) | ||
1208 | { | ||
1209 | unsigned long flags; | ||
1210 | usbdev_pkt_t* lpkt = NULL; | ||
1211 | endpoint_t *ep = epaddr_to_ep(&usbdev, ep_addr); | ||
1212 | |||
1213 | if (!ep || !ep->active || ep->address < 2) | ||
1214 | return -ENODEV; | ||
1215 | if (ep->direction != USB_DIR_OUT) | ||
1216 | return -EINVAL; | ||
1217 | |||
1218 | spin_lock_irqsave(&ep->lock, flags); | ||
1219 | if (ep->outlist.count > 1) | ||
1220 | lpkt = unlink_head(&ep->outlist); | ||
1221 | spin_unlock_irqrestore(&ep->lock, flags); | ||
1222 | |||
1223 | if (!lpkt) { | ||
1224 | /* no packet available */ | ||
1225 | *pkt = NULL; | ||
1226 | return -ENODATA; | ||
1227 | } | ||
1228 | |||
1229 | *pkt = lpkt; | ||
1230 | |||
1231 | return lpkt->size; | ||
1232 | } | ||
1233 | |||
1234 | |||
1235 | /* | ||
1236 | * return total queued byte count on the endpoint. | ||
1237 | */ | ||
1238 | int | ||
1239 | usbdev_get_byte_count(int ep_addr) | ||
1240 | { | ||
1241 | unsigned long flags; | ||
1242 | pkt_list_t *list; | ||
1243 | usbdev_pkt_t *scan; | ||
1244 | int count = 0; | ||
1245 | endpoint_t * ep = epaddr_to_ep(&usbdev, ep_addr); | ||
1246 | |||
1247 | if (!ep || !ep->active || ep->address < 2) | ||
1248 | return -ENODEV; | ||
1249 | |||
1250 | if (ep->direction == USB_DIR_IN) { | ||
1251 | list = &ep->inlist; | ||
1252 | |||
1253 | spin_lock_irqsave(&ep->lock, flags); | ||
1254 | for (scan = list->head; scan; scan = scan->next) | ||
1255 | count += scan->size; | ||
1256 | spin_unlock_irqrestore(&ep->lock, flags); | ||
1257 | } else { | ||
1258 | list = &ep->outlist; | ||
1259 | |||
1260 | spin_lock_irqsave(&ep->lock, flags); | ||
1261 | if (list->count > 1) { | ||
1262 | for (scan = list->head; scan != list->tail; | ||
1263 | scan = scan->next) | ||
1264 | count += scan->size; | ||
1265 | } | ||
1266 | spin_unlock_irqrestore(&ep->lock, flags); | ||
1267 | } | ||
1268 | |||
1269 | return count; | ||
1270 | } | ||
1271 | |||
1272 | |||
1273 | void | ||
1274 | usbdev_exit(void) | ||
1275 | { | ||
1276 | endpoint_t *ep; | ||
1277 | int i; | ||
1278 | |||
1279 | au_writel(0, USBD_INTEN); // disable usb dev ints | ||
1280 | au_writel(0, USBD_ENABLE); // disable usb dev | ||
1281 | |||
1282 | free_irq(AU1000_USB_DEV_REQ_INT, &usbdev); | ||
1283 | free_irq(AU1000_USB_DEV_SUS_INT, &usbdev); | ||
1284 | |||
1285 | // free all control endpoint resources | ||
1286 | ep = &usbdev.ep[0]; | ||
1287 | free_au1000_dma(ep->indma); | ||
1288 | free_au1000_dma(ep->outdma); | ||
1289 | endpoint_flush(ep); | ||
1290 | |||
1291 | // free ep resources | ||
1292 | for (i = 2; i < 6; i++) { | ||
1293 | ep = &usbdev.ep[i]; | ||
1294 | if (!ep->active) continue; | ||
1295 | |||
1296 | if (ep->direction == USB_DIR_IN) { | ||
1297 | free_au1000_dma(ep->indma); | ||
1298 | } else { | ||
1299 | free_au1000_dma(ep->outdma); | ||
1300 | } | ||
1301 | endpoint_flush(ep); | ||
1302 | } | ||
1303 | |||
1304 | kfree(usbdev.full_conf_desc); | ||
1305 | } | ||
1306 | |||
1307 | int | ||
1308 | usbdev_init(struct usb_device_descriptor* dev_desc, | ||
1309 | struct usb_config_descriptor* config_desc, | ||
1310 | struct usb_interface_descriptor* if_desc, | ||
1311 | struct usb_endpoint_descriptor* ep_desc, | ||
1312 | struct usb_string_descriptor* str_desc[], | ||
1313 | void (*cb)(usbdev_cb_type_t, unsigned long, void *), | ||
1314 | void* cb_data) | ||
1315 | { | ||
1316 | endpoint_t *ep0; | ||
1317 | int i, ret=0; | ||
1318 | u8* fcd; | ||
1319 | |||
1320 | if (dev_desc->bNumConfigurations > 1 || | ||
1321 | config_desc->bNumInterfaces > 1 || | ||
1322 | if_desc->bNumEndpoints > 4) { | ||
1323 | err("Only one config, one i/f, and no more " | ||
1324 | "than 4 ep's allowed"); | ||
1325 | ret = -EINVAL; | ||
1326 | goto out; | ||
1327 | } | ||
1328 | |||
1329 | if (!cb) { | ||
1330 | err("Function-layer callback required"); | ||
1331 | ret = -EINVAL; | ||
1332 | goto out; | ||
1333 | } | ||
1334 | |||
1335 | if (dev_desc->bMaxPacketSize0 != USBDEV_EP0_MAX_PACKET_SIZE) { | ||
1336 | warn("EP0 Max Packet size must be %d", | ||
1337 | USBDEV_EP0_MAX_PACKET_SIZE); | ||
1338 | dev_desc->bMaxPacketSize0 = USBDEV_EP0_MAX_PACKET_SIZE; | ||
1339 | } | ||
1340 | |||
1341 | memset(&usbdev, 0, sizeof(struct usb_dev)); | ||
1342 | |||
1343 | usbdev.state = DEFAULT; | ||
1344 | usbdev.dev_desc = dev_desc; | ||
1345 | usbdev.if_desc = if_desc; | ||
1346 | usbdev.conf_desc = config_desc; | ||
1347 | for (i=0; i<6; i++) | ||
1348 | usbdev.str_desc[i] = str_desc[i]; | ||
1349 | usbdev.func_cb = cb; | ||
1350 | usbdev.cb_data = cb_data; | ||
1351 | |||
1352 | /* Initialize default control endpoint */ | ||
1353 | ep0 = &usbdev.ep[0]; | ||
1354 | ep0->active = 1; | ||
1355 | ep0->type = CONTROL_EP; | ||
1356 | ep0->max_pkt_size = USBDEV_EP0_MAX_PACKET_SIZE; | ||
1357 | spin_lock_init(&ep0->lock); | ||
1358 | ep0->desc = NULL; // ep0 has no descriptor | ||
1359 | ep0->address = 0; | ||
1360 | ep0->direction = 0; | ||
1361 | ep0->reg = &ep_reg[0]; | ||
1362 | |||
1363 | /* Initialize the other requested endpoints */ | ||
1364 | for (i = 0; i < if_desc->bNumEndpoints; i++) { | ||
1365 | struct usb_endpoint_descriptor* epd = &ep_desc[i]; | ||
1366 | endpoint_t *ep; | ||
1367 | |||
1368 | if ((epd->bEndpointAddress & 0x80) == USB_DIR_IN) { | ||
1369 | ep = &usbdev.ep[2]; | ||
1370 | ep->address = 2; | ||
1371 | if (ep->active) { | ||
1372 | ep = &usbdev.ep[3]; | ||
1373 | ep->address = 3; | ||
1374 | if (ep->active) { | ||
1375 | err("too many IN ep's requested"); | ||
1376 | ret = -ENODEV; | ||
1377 | goto out; | ||
1378 | } | ||
1379 | } | ||
1380 | } else { | ||
1381 | ep = &usbdev.ep[4]; | ||
1382 | ep->address = 4; | ||
1383 | if (ep->active) { | ||
1384 | ep = &usbdev.ep[5]; | ||
1385 | ep->address = 5; | ||
1386 | if (ep->active) { | ||
1387 | err("too many OUT ep's requested"); | ||
1388 | ret = -ENODEV; | ||
1389 | goto out; | ||
1390 | } | ||
1391 | } | ||
1392 | } | ||
1393 | |||
1394 | ep->active = 1; | ||
1395 | epd->bEndpointAddress &= ~0x0f; | ||
1396 | epd->bEndpointAddress |= (u8)ep->address; | ||
1397 | ep->direction = epd->bEndpointAddress & 0x80; | ||
1398 | ep->type = epd->bmAttributes & 0x03; | ||
1399 | ep->max_pkt_size = le16_to_cpu(epd->wMaxPacketSize); | ||
1400 | spin_lock_init(&ep->lock); | ||
1401 | ep->desc = epd; | ||
1402 | ep->reg = &ep_reg[ep->address]; | ||
1403 | } | ||
1404 | |||
1405 | /* | ||
1406 | * initialize the full config descriptor | ||
1407 | */ | ||
1408 | usbdev.full_conf_desc = fcd = kmalloc(le16_to_cpu(config_desc->wTotalLength), | ||
1409 | ALLOC_FLAGS); | ||
1410 | if (!fcd) { | ||
1411 | err("failed to alloc full config descriptor"); | ||
1412 | ret = -ENOMEM; | ||
1413 | goto out; | ||
1414 | } | ||
1415 | |||
1416 | memcpy(fcd, config_desc, USB_DT_CONFIG_SIZE); | ||
1417 | fcd += USB_DT_CONFIG_SIZE; | ||
1418 | memcpy(fcd, if_desc, USB_DT_INTERFACE_SIZE); | ||
1419 | fcd += USB_DT_INTERFACE_SIZE; | ||
1420 | for (i = 0; i < if_desc->bNumEndpoints; i++) { | ||
1421 | memcpy(fcd, &ep_desc[i], USB_DT_ENDPOINT_SIZE); | ||
1422 | fcd += USB_DT_ENDPOINT_SIZE; | ||
1423 | } | ||
1424 | |||
1425 | /* Now we're ready to enable the controller */ | ||
1426 | au_writel(0x0002, USBD_ENABLE); | ||
1427 | udelay(100); | ||
1428 | au_writel(0x0003, USBD_ENABLE); | ||
1429 | udelay(100); | ||
1430 | |||
1431 | /* build and send config table based on ep descriptors */ | ||
1432 | for (i = 0; i < 6; i++) { | ||
1433 | endpoint_t *ep; | ||
1434 | if (i == 1) | ||
1435 | continue; // skip dummy ep | ||
1436 | ep = &usbdev.ep[i]; | ||
1437 | if (ep->active) { | ||
1438 | au_writel((ep->address << 4) | 0x04, USBD_CONFIG); | ||
1439 | au_writel(((ep->max_pkt_size & 0x380) >> 7) | | ||
1440 | (ep->direction >> 4) | (ep->type << 4), | ||
1441 | USBD_CONFIG); | ||
1442 | au_writel((ep->max_pkt_size & 0x7f) << 1, USBD_CONFIG); | ||
1443 | au_writel(0x00, USBD_CONFIG); | ||
1444 | au_writel(ep->address, USBD_CONFIG); | ||
1445 | } else { | ||
1446 | u8 dir = (i==2 || i==3) ? DIR_IN : DIR_OUT; | ||
1447 | au_writel((i << 4) | 0x04, USBD_CONFIG); | ||
1448 | au_writel(((16 & 0x380) >> 7) | dir | | ||
1449 | (BULK_EP << 4), USBD_CONFIG); | ||
1450 | au_writel((16 & 0x7f) << 1, USBD_CONFIG); | ||
1451 | au_writel(0x00, USBD_CONFIG); | ||
1452 | au_writel(i, USBD_CONFIG); | ||
1453 | } | ||
1454 | } | ||
1455 | |||
1456 | /* | ||
1457 | * Enable Receive FIFO Complete interrupts only. Transmit | ||
1458 | * complete is being handled by the DMA done interrupts. | ||
1459 | */ | ||
1460 | au_writel(0x31, USBD_INTEN); | ||
1461 | |||
1462 | /* | ||
1463 | * Controller is now enabled, request DMA and IRQ | ||
1464 | * resources. | ||
1465 | */ | ||
1466 | |||
1467 | /* request the USB device transfer complete interrupt */ | ||
1468 | if (request_irq(AU1000_USB_DEV_REQ_INT, req_sus_intr, IRQF_DISABLED, | ||
1469 | "USBdev req", &usbdev)) { | ||
1470 | err("Can't get device request intr"); | ||
1471 | ret = -ENXIO; | ||
1472 | goto out; | ||
1473 | } | ||
1474 | /* request the USB device suspend interrupt */ | ||
1475 | if (request_irq(AU1000_USB_DEV_SUS_INT, req_sus_intr, IRQF_DISABLED, | ||
1476 | "USBdev sus", &usbdev)) { | ||
1477 | err("Can't get device suspend intr"); | ||
1478 | ret = -ENXIO; | ||
1479 | goto out; | ||
1480 | } | ||
1481 | |||
1482 | /* Request EP0 DMA and IRQ */ | ||
1483 | if ((ep0->indma = request_au1000_dma(ep_dma_id[0].id, | ||
1484 | ep_dma_id[0].str, | ||
1485 | dma_done_ep0_intr, | ||
1486 | IRQF_DISABLED, | ||
1487 | &usbdev)) < 0) { | ||
1488 | err("Can't get %s DMA", ep_dma_id[0].str); | ||
1489 | ret = -ENXIO; | ||
1490 | goto out; | ||
1491 | } | ||
1492 | if ((ep0->outdma = request_au1000_dma(ep_dma_id[1].id, | ||
1493 | ep_dma_id[1].str, | ||
1494 | NULL, 0, NULL)) < 0) { | ||
1495 | err("Can't get %s DMA", ep_dma_id[1].str); | ||
1496 | ret = -ENXIO; | ||
1497 | goto out; | ||
1498 | } | ||
1499 | |||
1500 | // Flush the ep0 buffers and FIFOs | ||
1501 | endpoint_flush(ep0); | ||
1502 | // start packet reception on ep0 | ||
1503 | kickstart_receive_packet(ep0); | ||
1504 | |||
1505 | /* Request DMA and IRQ for the other endpoints */ | ||
1506 | for (i = 2; i < 6; i++) { | ||
1507 | endpoint_t *ep = &usbdev.ep[i]; | ||
1508 | if (!ep->active) | ||
1509 | continue; | ||
1510 | |||
1511 | // Flush the endpoint buffers and FIFOs | ||
1512 | endpoint_flush(ep); | ||
1513 | |||
1514 | if (ep->direction == USB_DIR_IN) { | ||
1515 | ep->indma = | ||
1516 | request_au1000_dma(ep_dma_id[ep->address].id, | ||
1517 | ep_dma_id[ep->address].str, | ||
1518 | dma_done_ep_intr, | ||
1519 | IRQF_DISABLED, | ||
1520 | &usbdev); | ||
1521 | if (ep->indma < 0) { | ||
1522 | err("Can't get %s DMA", | ||
1523 | ep_dma_id[ep->address].str); | ||
1524 | ret = -ENXIO; | ||
1525 | goto out; | ||
1526 | } | ||
1527 | } else { | ||
1528 | ep->outdma = | ||
1529 | request_au1000_dma(ep_dma_id[ep->address].id, | ||
1530 | ep_dma_id[ep->address].str, | ||
1531 | NULL, 0, NULL); | ||
1532 | if (ep->outdma < 0) { | ||
1533 | err("Can't get %s DMA", | ||
1534 | ep_dma_id[ep->address].str); | ||
1535 | ret = -ENXIO; | ||
1536 | goto out; | ||
1537 | } | ||
1538 | |||
1539 | // start packet reception on OUT endpoint | ||
1540 | kickstart_receive_packet(ep); | ||
1541 | } | ||
1542 | } | ||
1543 | |||
1544 | out: | ||
1545 | if (ret) | ||
1546 | usbdev_exit(); | ||
1547 | return ret; | ||
1548 | } | ||
1549 | |||
1550 | EXPORT_SYMBOL(usbdev_init); | ||
1551 | EXPORT_SYMBOL(usbdev_exit); | ||
1552 | EXPORT_SYMBOL(usbdev_alloc_packet); | ||
1553 | EXPORT_SYMBOL(usbdev_receive_packet); | ||
1554 | EXPORT_SYMBOL(usbdev_send_packet); | ||
1555 | EXPORT_SYMBOL(usbdev_get_byte_count); | ||
diff --git a/arch/mips/au1000/db1x00/board_setup.c b/arch/mips/au1000/db1x00/board_setup.c index 7a79293f8527..8b08edb977be 100644 --- a/arch/mips/au1000/db1x00/board_setup.c +++ b/arch/mips/au1000/db1x00/board_setup.c | |||
@@ -58,11 +58,6 @@ void __init board_setup(void) | |||
58 | 58 | ||
59 | pin_func = 0; | 59 | pin_func = 0; |
60 | /* not valid for 1550 */ | 60 | /* not valid for 1550 */ |
61 | #ifdef CONFIG_AU1X00_USB_DEVICE | ||
62 | // 2nd USB port is USB device | ||
63 | pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x8000); | ||
64 | au_writel(pin_func, SYS_PINFUNC); | ||
65 | #endif | ||
66 | 61 | ||
67 | #if defined(CONFIG_IRDA) && (defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100)) | 62 | #if defined(CONFIG_IRDA) && (defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100)) |
68 | /* set IRFIRSEL instead of GPIO15 */ | 63 | /* set IRFIRSEL instead of GPIO15 */ |
diff --git a/arch/mips/au1000/mtx-1/board_setup.c b/arch/mips/au1000/mtx-1/board_setup.c index e917e54fc683..13f9bf5f91a6 100644 --- a/arch/mips/au1000/mtx-1/board_setup.c +++ b/arch/mips/au1000/mtx-1/board_setup.c | |||
@@ -51,15 +51,11 @@ void board_reset (void) | |||
51 | 51 | ||
52 | void __init board_setup(void) | 52 | void __init board_setup(void) |
53 | { | 53 | { |
54 | #if defined (CONFIG_USB_OHCI) || defined (CONFIG_AU1X00_USB_DEVICE) | 54 | #ifdef CONFIG_USB_OHCI |
55 | #ifdef CONFIG_AU1X00_USB_DEVICE | ||
56 | // 2nd USB port is USB device | ||
57 | au_writel(au_readl(SYS_PINFUNC) & (u32)(~0x8000), SYS_PINFUNC); | ||
58 | #endif | ||
59 | // enable USB power switch | 55 | // enable USB power switch |
60 | au_writel( au_readl(GPIO2_DIR) | 0x10, GPIO2_DIR ); | 56 | au_writel( au_readl(GPIO2_DIR) | 0x10, GPIO2_DIR ); |
61 | au_writel( 0x100000, GPIO2_OUTPUT ); | 57 | au_writel( 0x100000, GPIO2_OUTPUT ); |
62 | #endif // defined (CONFIG_USB_OHCI) || defined (CONFIG_AU1X00_USB_DEVICE) | 58 | #endif // defined (CONFIG_USB_OHCI) |
63 | 59 | ||
64 | #ifdef CONFIG_PCI | 60 | #ifdef CONFIG_PCI |
65 | #if defined(__MIPSEB__) | 61 | #if defined(__MIPSEB__) |
diff --git a/arch/mips/au1000/pb1000/board_setup.c b/arch/mips/au1000/pb1000/board_setup.c index 1cf18e16ab54..824cfafaff92 100644 --- a/arch/mips/au1000/pb1000/board_setup.c +++ b/arch/mips/au1000/pb1000/board_setup.c | |||
@@ -54,7 +54,7 @@ void __init board_setup(void) | |||
54 | au_writel(0, SYS_PINSTATERD); | 54 | au_writel(0, SYS_PINSTATERD); |
55 | udelay(100); | 55 | udelay(100); |
56 | 56 | ||
57 | #if defined (CONFIG_USB_OHCI) || defined (CONFIG_AU1X00_USB_DEVICE) | 57 | #ifdef CONFIG_USB_OHCI |
58 | /* zero and disable FREQ2 */ | 58 | /* zero and disable FREQ2 */ |
59 | sys_freqctrl = au_readl(SYS_FREQCTRL0); | 59 | sys_freqctrl = au_readl(SYS_FREQCTRL0); |
60 | sys_freqctrl &= ~0xFFF00000; | 60 | sys_freqctrl &= ~0xFFF00000; |
@@ -105,22 +105,18 @@ void __init board_setup(void) | |||
105 | #ifdef CONFIG_USB_OHCI | 105 | #ifdef CONFIG_USB_OHCI |
106 | sys_clksrc |= ((4<<12) | (0<<11) | (0<<10)); | 106 | sys_clksrc |= ((4<<12) | (0<<11) | (0<<10)); |
107 | #endif | 107 | #endif |
108 | #ifdef CONFIG_AU1X00_USB_DEVICE | ||
109 | sys_clksrc |= ((4<<7) | (0<<6) | (0<<5)); | ||
110 | #endif | ||
111 | au_writel(sys_clksrc, SYS_CLKSRC); | 108 | au_writel(sys_clksrc, SYS_CLKSRC); |
112 | 109 | ||
113 | // configure pins GPIO[14:9] as GPIO | 110 | // configure pins GPIO[14:9] as GPIO |
114 | pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x8080); | 111 | pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x8080); |
115 | 112 | ||
116 | #ifndef CONFIG_AU1X00_USB_DEVICE | ||
117 | // 2nd USB port is USB host | 113 | // 2nd USB port is USB host |
118 | pin_func |= 0x8000; | 114 | pin_func |= 0x8000; |
119 | #endif | 115 | |
120 | au_writel(pin_func, SYS_PINFUNC); | 116 | au_writel(pin_func, SYS_PINFUNC); |
121 | au_writel(0x2800, SYS_TRIOUTCLR); | 117 | au_writel(0x2800, SYS_TRIOUTCLR); |
122 | au_writel(0x0030, SYS_OUTPUTCLR); | 118 | au_writel(0x0030, SYS_OUTPUTCLR); |
123 | #endif // defined (CONFIG_USB_OHCI) || defined (CONFIG_AU1X00_USB_DEVICE) | 119 | #endif // defined (CONFIG_USB_OHCI) |
124 | 120 | ||
125 | // make gpio 15 an input (for interrupt line) | 121 | // make gpio 15 an input (for interrupt line) |
126 | pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x100); | 122 | pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x100); |
diff --git a/arch/mips/au1000/pb1100/board_setup.c b/arch/mips/au1000/pb1100/board_setup.c index db27b9331ff3..2d1533f116c0 100644 --- a/arch/mips/au1000/pb1100/board_setup.c +++ b/arch/mips/au1000/pb1100/board_setup.c | |||
@@ -55,7 +55,7 @@ void __init board_setup(void) | |||
55 | au_writel(0, SYS_PININPUTEN); | 55 | au_writel(0, SYS_PININPUTEN); |
56 | udelay(100); | 56 | udelay(100); |
57 | 57 | ||
58 | #if defined (CONFIG_USB_OHCI) || defined (CONFIG_AU1X00_USB_DEVICE) | 58 | #ifdef CONFIG_USB_OHCI |
59 | // configure pins GPIO[14:9] as GPIO | 59 | // configure pins GPIO[14:9] as GPIO |
60 | pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x80); | 60 | pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x80); |
61 | 61 | ||
@@ -92,12 +92,10 @@ void __init board_setup(void) | |||
92 | 92 | ||
93 | // get USB Functionality pin state (device vs host drive pins) | 93 | // get USB Functionality pin state (device vs host drive pins) |
94 | pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x8000); | 94 | pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x8000); |
95 | #ifndef CONFIG_AU1X00_USB_DEVICE | ||
96 | // 2nd USB port is USB host | 95 | // 2nd USB port is USB host |
97 | pin_func |= 0x8000; | 96 | pin_func |= 0x8000; |
98 | #endif | ||
99 | au_writel(pin_func, SYS_PINFUNC); | 97 | au_writel(pin_func, SYS_PINFUNC); |
100 | #endif // defined (CONFIG_USB_OHCI) || defined (CONFIG_AU1X00_USB_DEVICE) | 98 | #endif // defined (CONFIG_USB_OHCI) |
101 | 99 | ||
102 | /* Enable sys bus clock divider when IDLE state or no bus activity. */ | 100 | /* Enable sys bus clock divider when IDLE state or no bus activity. */ |
103 | au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); | 101 | au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); |
diff --git a/arch/mips/au1000/pb1200/irqmap.c b/arch/mips/au1000/pb1200/irqmap.c index f66779f0d4cd..91983ba407c4 100644 --- a/arch/mips/au1000/pb1200/irqmap.c +++ b/arch/mips/au1000/pb1200/irqmap.c | |||
@@ -65,7 +65,7 @@ int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); | |||
65 | */ | 65 | */ |
66 | static volatile int pb1200_cascade_en=0; | 66 | static volatile int pb1200_cascade_en=0; |
67 | 67 | ||
68 | irqreturn_t pb1200_cascade_handler( int irq, void *dev_id, struct pt_regs *regs) | 68 | irqreturn_t pb1200_cascade_handler( int irq, void *dev_id) |
69 | { | 69 | { |
70 | unsigned short bisr = bcsr->int_status; | 70 | unsigned short bisr = bcsr->int_status; |
71 | int extirq_nr = 0; | 71 | int extirq_nr = 0; |
@@ -76,8 +76,9 @@ irqreturn_t pb1200_cascade_handler( int irq, void *dev_id, struct pt_regs *regs) | |||
76 | { | 76 | { |
77 | extirq_nr = (PB1200_INT_BEGIN-1) + au_ffs(bisr); | 77 | extirq_nr = (PB1200_INT_BEGIN-1) + au_ffs(bisr); |
78 | /* Ack and dispatch IRQ */ | 78 | /* Ack and dispatch IRQ */ |
79 | do_IRQ(extirq_nr,regs); | 79 | do_IRQ(extirq_nr); |
80 | } | 80 | } |
81 | |||
81 | return IRQ_RETVAL(1); | 82 | return IRQ_RETVAL(1); |
82 | } | 83 | } |
83 | 84 | ||
diff --git a/arch/mips/au1000/pb1500/board_setup.c b/arch/mips/au1000/pb1500/board_setup.c index 1a9a293de6ab..0ffdb4fd575b 100644 --- a/arch/mips/au1000/pb1500/board_setup.c +++ b/arch/mips/au1000/pb1500/board_setup.c | |||
@@ -56,7 +56,7 @@ void __init board_setup(void) | |||
56 | au_writel(0, SYS_PINSTATERD); | 56 | au_writel(0, SYS_PINSTATERD); |
57 | udelay(100); | 57 | udelay(100); |
58 | 58 | ||
59 | #if defined (CONFIG_USB_OHCI) || defined (CONFIG_AU1X00_USB_DEVICE) | 59 | #ifdef CONFIG_USB_OHCI |
60 | 60 | ||
61 | /* GPIO201 is input for PCMCIA card detect */ | 61 | /* GPIO201 is input for PCMCIA card detect */ |
62 | /* GPIO203 is input for PCMCIA interrupt request */ | 62 | /* GPIO203 is input for PCMCIA interrupt request */ |
@@ -88,19 +88,14 @@ void __init board_setup(void) | |||
88 | #ifdef CONFIG_USB_OHCI | 88 | #ifdef CONFIG_USB_OHCI |
89 | sys_clksrc |= ((4<<12) | (0<<11) | (0<<10)); | 89 | sys_clksrc |= ((4<<12) | (0<<11) | (0<<10)); |
90 | #endif | 90 | #endif |
91 | #ifdef CONFIG_AU1X00_USB_DEVICE | ||
92 | sys_clksrc |= ((4<<7) | (0<<6) | (0<<5)); | ||
93 | #endif | ||
94 | au_writel(sys_clksrc, SYS_CLKSRC); | 91 | au_writel(sys_clksrc, SYS_CLKSRC); |
95 | 92 | ||
96 | 93 | ||
97 | pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x8000); | 94 | pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x8000); |
98 | #ifndef CONFIG_AU1X00_USB_DEVICE | ||
99 | // 2nd USB port is USB host | 95 | // 2nd USB port is USB host |
100 | pin_func |= 0x8000; | 96 | pin_func |= 0x8000; |
101 | #endif | ||
102 | au_writel(pin_func, SYS_PINFUNC); | 97 | au_writel(pin_func, SYS_PINFUNC); |
103 | #endif // defined (CONFIG_USB_OHCI) || defined (CONFIG_AU1X00_USB_DEVICE) | 98 | #endif // defined (CONFIG_USB_OHCI) |
104 | 99 | ||
105 | 100 | ||
106 | 101 | ||
diff --git a/arch/mips/basler/excite/excite_dbg_io.c b/arch/mips/basler/excite/excite_dbg_io.c index c04505afa47f..d289e3a868cf 100644 --- a/arch/mips/basler/excite/excite_dbg_io.c +++ b/arch/mips/basler/excite/excite_dbg_io.c | |||
@@ -112,7 +112,7 @@ int putDebugChar(int data) | |||
112 | } | 112 | } |
113 | 113 | ||
114 | /* KGDB interrupt handler */ | 114 | /* KGDB interrupt handler */ |
115 | asmlinkage void excite_kgdb_inthdl(struct pt_regs *regs) | 115 | asmlinkage void excite_kgdb_inthdl(void) |
116 | { | 116 | { |
117 | if (unlikely( | 117 | if (unlikely( |
118 | ((titan_readl(UAIIR) & 0x7) == 4) | 118 | ((titan_readl(UAIIR) & 0x7) == 4) |
diff --git a/arch/mips/basler/excite/excite_iodev.c b/arch/mips/basler/excite/excite_iodev.c index 10bbb8cfb964..6af0b21ebc32 100644 --- a/arch/mips/basler/excite/excite_iodev.c +++ b/arch/mips/basler/excite/excite_iodev.c | |||
@@ -38,7 +38,7 @@ static int iodev_open(struct inode *, struct file *); | |||
38 | static int iodev_release(struct inode *, struct file *); | 38 | static int iodev_release(struct inode *, struct file *); |
39 | static ssize_t iodev_read(struct file *, char __user *, size_t s, loff_t *); | 39 | static ssize_t iodev_read(struct file *, char __user *, size_t s, loff_t *); |
40 | static unsigned int iodev_poll(struct file *, struct poll_table_struct *); | 40 | static unsigned int iodev_poll(struct file *, struct poll_table_struct *); |
41 | static irqreturn_t iodev_irqhdl(int, void *, struct pt_regs *); | 41 | static irqreturn_t iodev_irqhdl(int, void *); |
42 | 42 | ||
43 | 43 | ||
44 | 44 | ||
@@ -108,16 +108,12 @@ static int __exit iodev_remove(struct device *dev) | |||
108 | return misc_deregister(&miscdev); | 108 | return misc_deregister(&miscdev); |
109 | } | 109 | } |
110 | 110 | ||
111 | |||
112 | |||
113 | static int iodev_open(struct inode *i, struct file *f) | 111 | static int iodev_open(struct inode *i, struct file *f) |
114 | { | 112 | { |
115 | return request_irq(iodev_irq, iodev_irqhdl, IRQF_DISABLED, | 113 | return request_irq(iodev_irq, iodev_irqhdl, IRQF_DISABLED, |
116 | iodev_name, &miscdev); | 114 | iodev_name, &miscdev); |
117 | } | 115 | } |
118 | 116 | ||
119 | |||
120 | |||
121 | static int iodev_release(struct inode *i, struct file *f) | 117 | static int iodev_release(struct inode *i, struct file *f) |
122 | { | 118 | { |
123 | free_irq(iodev_irq, &miscdev); | 119 | free_irq(iodev_irq, &miscdev); |
@@ -148,17 +144,13 @@ static unsigned int iodev_poll(struct file *f, struct poll_table_struct *p) | |||
148 | return POLLOUT | POLLWRNORM; | 144 | return POLLOUT | POLLWRNORM; |
149 | } | 145 | } |
150 | 146 | ||
151 | 147 | static irqreturn_t iodev_irqhdl(int irq, void *ctxt) | |
152 | |||
153 | |||
154 | static irqreturn_t iodev_irqhdl(int irq, void *ctxt, struct pt_regs *regs) | ||
155 | { | 148 | { |
156 | wake_up(&wq); | 149 | wake_up(&wq); |
150 | |||
157 | return IRQ_HANDLED; | 151 | return IRQ_HANDLED; |
158 | } | 152 | } |
159 | 153 | ||
160 | |||
161 | |||
162 | static int __init iodev_init_module(void) | 154 | static int __init iodev_init_module(void) |
163 | { | 155 | { |
164 | return driver_register(&iodev_driver); | 156 | return driver_register(&iodev_driver); |
diff --git a/arch/mips/basler/excite/excite_irq.c b/arch/mips/basler/excite/excite_irq.c index 511ad8730f54..2e2061a286c5 100644 --- a/arch/mips/basler/excite/excite_irq.c +++ b/arch/mips/basler/excite/excite_irq.c | |||
@@ -56,7 +56,7 @@ void __init arch_init_irq(void) | |||
56 | #endif | 56 | #endif |
57 | } | 57 | } |
58 | 58 | ||
59 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 59 | asmlinkage void plat_irq_dispatch(void) |
60 | { | 60 | { |
61 | const u32 | 61 | const u32 |
62 | interrupts = read_c0_cause() >> 8, | 62 | interrupts = read_c0_cause() >> 8, |
@@ -67,7 +67,7 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
67 | 67 | ||
68 | /* process timer interrupt */ | 68 | /* process timer interrupt */ |
69 | if (pending & (1 << TIMER_IRQ)) { | 69 | if (pending & (1 << TIMER_IRQ)) { |
70 | do_IRQ(TIMER_IRQ, regs); | 70 | do_IRQ(TIMER_IRQ); |
71 | return; | 71 | return; |
72 | } | 72 | } |
73 | 73 | ||
@@ -80,7 +80,7 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
80 | #else | 80 | #else |
81 | if (pending & (1 << USB_IRQ)) { | 81 | if (pending & (1 << USB_IRQ)) { |
82 | #endif | 82 | #endif |
83 | do_IRQ(USB_IRQ, regs); | 83 | do_IRQ(USB_IRQ); |
84 | return; | 84 | return; |
85 | } | 85 | } |
86 | 86 | ||
@@ -91,9 +91,9 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
91 | if ((pending & (1 << TITAN_IRQ)) && msgint) { | 91 | if ((pending & (1 << TITAN_IRQ)) && msgint) { |
92 | ocd_writel(msgint, INTP0Clear0 + (TITAN_MSGINT / 0x20 * 0x10)); | 92 | ocd_writel(msgint, INTP0Clear0 + (TITAN_MSGINT / 0x20 * 0x10)); |
93 | #if defined(CONFIG_KGDB) | 93 | #if defined(CONFIG_KGDB) |
94 | excite_kgdb_inthdl(regs); | 94 | excite_kgdb_inthdl(); |
95 | #endif | 95 | #endif |
96 | do_IRQ(TITAN_IRQ, regs); | 96 | do_IRQ(TITAN_IRQ); |
97 | return; | 97 | return; |
98 | } | 98 | } |
99 | 99 | ||
@@ -102,7 +102,7 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
102 | msgintmask = ocd_readl(INTP0Mask0 + (FPGA0_MSGINT / 0x20 * 0x10)); | 102 | msgintmask = ocd_readl(INTP0Mask0 + (FPGA0_MSGINT / 0x20 * 0x10)); |
103 | msgint = msgintflags & msgintmask & (0x1 << (FPGA0_MSGINT % 0x20)); | 103 | msgint = msgintflags & msgintmask & (0x1 << (FPGA0_MSGINT % 0x20)); |
104 | if ((pending & (1 << FPGA0_IRQ)) && msgint) { | 104 | if ((pending & (1 << FPGA0_IRQ)) && msgint) { |
105 | do_IRQ(FPGA0_IRQ, regs); | 105 | do_IRQ(FPGA0_IRQ); |
106 | return; | 106 | return; |
107 | } | 107 | } |
108 | 108 | ||
@@ -111,7 +111,7 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
111 | msgintmask = ocd_readl(INTP0Mask0 + (FPGA1_MSGINT / 0x20 * 0x10)); | 111 | msgintmask = ocd_readl(INTP0Mask0 + (FPGA1_MSGINT / 0x20 * 0x10)); |
112 | msgint = msgintflags & msgintmask & (0x1 << (FPGA1_MSGINT % 0x20)); | 112 | msgint = msgintflags & msgintmask & (0x1 << (FPGA1_MSGINT % 0x20)); |
113 | if ((pending & (1 << FPGA1_IRQ)) && msgint) { | 113 | if ((pending & (1 << FPGA1_IRQ)) && msgint) { |
114 | do_IRQ(FPGA1_IRQ, regs); | 114 | do_IRQ(FPGA1_IRQ); |
115 | return; | 115 | return; |
116 | } | 116 | } |
117 | 117 | ||
@@ -120,10 +120,10 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
120 | msgintmask = ocd_readl(INTP0Mask0 + (PHY_MSGINT / 0x20 * 0x10)); | 120 | msgintmask = ocd_readl(INTP0Mask0 + (PHY_MSGINT / 0x20 * 0x10)); |
121 | msgint = msgintflags & msgintmask & (0x1 << (PHY_MSGINT % 0x20)); | 121 | msgint = msgintflags & msgintmask & (0x1 << (PHY_MSGINT % 0x20)); |
122 | if ((pending & (1 << PHY_IRQ)) && msgint) { | 122 | if ((pending & (1 << PHY_IRQ)) && msgint) { |
123 | do_IRQ(PHY_IRQ, regs); | 123 | do_IRQ(PHY_IRQ); |
124 | return; | 124 | return; |
125 | } | 125 | } |
126 | 126 | ||
127 | /* Process spurious interrupts */ | 127 | /* Process spurious interrupts */ |
128 | spurious_interrupt(regs); | 128 | spurious_interrupt(); |
129 | } | 129 | } |
diff --git a/arch/mips/cobalt/irq.c b/arch/mips/cobalt/irq.c index 0b75f4fb7195..82e569d5b02c 100644 --- a/arch/mips/cobalt/irq.c +++ b/arch/mips/cobalt/irq.c | |||
@@ -16,7 +16,6 @@ | |||
16 | #include <asm/i8259.h> | 16 | #include <asm/i8259.h> |
17 | #include <asm/irq_cpu.h> | 17 | #include <asm/irq_cpu.h> |
18 | #include <asm/gt64120.h> | 18 | #include <asm/gt64120.h> |
19 | #include <asm/ptrace.h> | ||
20 | 19 | ||
21 | #include <asm/mach-cobalt/cobalt.h> | 20 | #include <asm/mach-cobalt/cobalt.h> |
22 | 21 | ||
@@ -42,7 +41,7 @@ | |||
42 | * 15 - IDE1 | 41 | * 15 - IDE1 |
43 | */ | 42 | */ |
44 | 43 | ||
45 | static inline void galileo_irq(struct pt_regs *regs) | 44 | static inline void galileo_irq(void) |
46 | { | 45 | { |
47 | unsigned int mask, pending, devfn; | 46 | unsigned int mask, pending, devfn; |
48 | 47 | ||
@@ -52,7 +51,7 @@ static inline void galileo_irq(struct pt_regs *regs) | |||
52 | if (pending & GALILEO_INTR_T0EXP) { | 51 | if (pending & GALILEO_INTR_T0EXP) { |
53 | 52 | ||
54 | GALILEO_OUTL(~GALILEO_INTR_T0EXP, GT_INTRCAUSE_OFS); | 53 | GALILEO_OUTL(~GALILEO_INTR_T0EXP, GT_INTRCAUSE_OFS); |
55 | do_IRQ(COBALT_GALILEO_IRQ, regs); | 54 | do_IRQ(COBALT_GALILEO_IRQ); |
56 | 55 | ||
57 | } else if (pending & GALILEO_INTR_RETRY_CTR) { | 56 | } else if (pending & GALILEO_INTR_RETRY_CTR) { |
58 | 57 | ||
@@ -68,44 +67,31 @@ static inline void galileo_irq(struct pt_regs *regs) | |||
68 | } | 67 | } |
69 | } | 68 | } |
70 | 69 | ||
71 | static inline void via_pic_irq(struct pt_regs *regs) | 70 | static inline void via_pic_irq(void) |
72 | { | 71 | { |
73 | int irq; | 72 | int irq; |
74 | 73 | ||
75 | irq = i8259_irq(); | 74 | irq = i8259_irq(); |
76 | if (irq >= 0) | 75 | if (irq >= 0) |
77 | do_IRQ(irq, regs); | 76 | do_IRQ(irq); |
78 | } | 77 | } |
79 | 78 | ||
80 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 79 | asmlinkage void plat_irq_dispatch(void) |
81 | { | 80 | { |
82 | unsigned pending; | 81 | unsigned pending = read_c0_status() & read_c0_cause(); |
83 | 82 | ||
84 | pending = read_c0_status() & read_c0_cause(); | 83 | if (pending & CAUSEF_IP2) /* COBALT_GALILEO_IRQ (18) */ |
85 | 84 | galileo_irq(); | |
86 | if (pending & CAUSEF_IP2) /* COBALT_GALILEO_IRQ (18) */ | 85 | else if (pending & CAUSEF_IP6) /* COBALT_VIA_IRQ (22) */ |
87 | 86 | via_pic_irq(); | |
88 | galileo_irq(regs); | 87 | else if (pending & CAUSEF_IP3) /* COBALT_ETH0_IRQ (19) */ |
89 | 88 | do_IRQ(COBALT_CPU_IRQ + 3); | |
90 | else if (pending & CAUSEF_IP6) /* COBALT_VIA_IRQ (22) */ | 89 | else if (pending & CAUSEF_IP4) /* COBALT_ETH1_IRQ (20) */ |
91 | 90 | do_IRQ(COBALT_CPU_IRQ + 4); | |
92 | via_pic_irq(regs); | 91 | else if (pending & CAUSEF_IP5) /* COBALT_SERIAL_IRQ (21) */ |
93 | 92 | do_IRQ(COBALT_CPU_IRQ + 5); | |
94 | else if (pending & CAUSEF_IP3) /* COBALT_ETH0_IRQ (19) */ | 93 | else if (pending & CAUSEF_IP7) /* IRQ 23 */ |
95 | 94 | do_IRQ(COBALT_CPU_IRQ + 7); | |
96 | do_IRQ(COBALT_CPU_IRQ + 3, regs); | ||
97 | |||
98 | else if (pending & CAUSEF_IP4) /* COBALT_ETH1_IRQ (20) */ | ||
99 | |||
100 | do_IRQ(COBALT_CPU_IRQ + 4, regs); | ||
101 | |||
102 | else if (pending & CAUSEF_IP5) /* COBALT_SERIAL_IRQ (21) */ | ||
103 | |||
104 | do_IRQ(COBALT_CPU_IRQ + 5, regs); | ||
105 | |||
106 | else if (pending & CAUSEF_IP7) /* IRQ 23 */ | ||
107 | |||
108 | do_IRQ(COBALT_CPU_IRQ + 7, regs); | ||
109 | } | 95 | } |
110 | 96 | ||
111 | static struct irqaction irq_via = { | 97 | static struct irqaction irq_via = { |
diff --git a/arch/mips/cobalt/setup.c b/arch/mips/cobalt/setup.c index 0b347cffc768..bf9dc72b9720 100644 --- a/arch/mips/cobalt/setup.c +++ b/arch/mips/cobalt/setup.c | |||
@@ -50,8 +50,8 @@ const char *get_system_type(void) | |||
50 | 50 | ||
51 | void __init plat_timer_setup(struct irqaction *irq) | 51 | void __init plat_timer_setup(struct irqaction *irq) |
52 | { | 52 | { |
53 | /* Load timer value for 1KHz (TCLK is 50MHz) */ | 53 | /* Load timer value for HZ (TCLK is 50MHz) */ |
54 | GALILEO_OUTL(50*1000*1000 / 1000, GT_TC0_OFS); | 54 | GALILEO_OUTL(50*1000*1000 / HZ, GT_TC0_OFS); |
55 | 55 | ||
56 | /* Enable timer */ | 56 | /* Enable timer */ |
57 | GALILEO_OUTL(GALILEO_ENTC0 | GALILEO_SELTC0, GT_TC_CONTROL_OFS); | 57 | GALILEO_OUTL(GALILEO_ENTC0 | GALILEO_SELTC0, GT_TC_CONTROL_OFS); |
diff --git a/arch/mips/configs/jazz_defconfig b/arch/mips/configs/jazz_defconfig new file mode 100644 index 000000000000..382083ebea0a --- /dev/null +++ b/arch/mips/configs/jazz_defconfig | |||
@@ -0,0 +1,1404 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.19-rc1 | ||
4 | # Sun Oct 8 19:03:07 2006 | ||
5 | # | ||
6 | CONFIG_MIPS=y | ||
7 | |||
8 | # | ||
9 | # Machine selection | ||
10 | # | ||
11 | # CONFIG_MIPS_MTX1 is not set | ||
12 | # CONFIG_MIPS_BOSPORUS is not set | ||
13 | # CONFIG_MIPS_PB1000 is not set | ||
14 | # CONFIG_MIPS_PB1100 is not set | ||
15 | # CONFIG_MIPS_PB1500 is not set | ||
16 | # CONFIG_MIPS_PB1550 is not set | ||
17 | # CONFIG_MIPS_PB1200 is not set | ||
18 | # CONFIG_MIPS_DB1000 is not set | ||
19 | # CONFIG_MIPS_DB1100 is not set | ||
20 | # CONFIG_MIPS_DB1500 is not set | ||
21 | # CONFIG_MIPS_DB1550 is not set | ||
22 | # CONFIG_MIPS_DB1200 is not set | ||
23 | # CONFIG_MIPS_MIRAGE is not set | ||
24 | # CONFIG_BASLER_EXCITE is not set | ||
25 | # CONFIG_MIPS_COBALT is not set | ||
26 | # CONFIG_MACH_DECSTATION is not set | ||
27 | # CONFIG_MIPS_EV64120 is not set | ||
28 | CONFIG_MACH_JAZZ=y | ||
29 | # CONFIG_LASAT is not set | ||
30 | # CONFIG_MIPS_ATLAS is not set | ||
31 | # CONFIG_MIPS_MALTA is not set | ||
32 | # CONFIG_MIPS_SEAD is not set | ||
33 | # CONFIG_WR_PPMC is not set | ||
34 | # CONFIG_MIPS_SIM is not set | ||
35 | # CONFIG_MOMENCO_JAGUAR_ATX is not set | ||
36 | # CONFIG_MOMENCO_OCELOT is not set | ||
37 | # CONFIG_MOMENCO_OCELOT_3 is not set | ||
38 | # CONFIG_MOMENCO_OCELOT_C is not set | ||
39 | # CONFIG_MOMENCO_OCELOT_G is not set | ||
40 | # CONFIG_MIPS_XXS1500 is not set | ||
41 | # CONFIG_PNX8550_V2PCI is not set | ||
42 | # CONFIG_PNX8550_JBS is not set | ||
43 | # CONFIG_DDB5477 is not set | ||
44 | # CONFIG_MACH_VR41XX is not set | ||
45 | # CONFIG_PMC_YOSEMITE is not set | ||
46 | # CONFIG_QEMU is not set | ||
47 | # CONFIG_MARKEINS is not set | ||
48 | # CONFIG_SGI_IP22 is not set | ||
49 | # CONFIG_SGI_IP27 is not set | ||
50 | # CONFIG_SGI_IP32 is not set | ||
51 | # CONFIG_SIBYTE_BIGSUR is not set | ||
52 | # CONFIG_SIBYTE_SWARM is not set | ||
53 | # CONFIG_SIBYTE_SENTOSA is not set | ||
54 | # CONFIG_SIBYTE_RHONE is not set | ||
55 | # CONFIG_SIBYTE_CARMEL is not set | ||
56 | # CONFIG_SIBYTE_PTSWARM is not set | ||
57 | # CONFIG_SIBYTE_LITTLESUR is not set | ||
58 | # CONFIG_SIBYTE_CRHINE is not set | ||
59 | # CONFIG_SIBYTE_CRHONE is not set | ||
60 | # CONFIG_SNI_RM200_PCI is not set | ||
61 | # CONFIG_TOSHIBA_JMR3927 is not set | ||
62 | # CONFIG_TOSHIBA_RBTX4927 is not set | ||
63 | # CONFIG_TOSHIBA_RBTX4938 is not set | ||
64 | # CONFIG_ACER_PICA_61 is not set | ||
65 | # CONFIG_MIPS_MAGNUM_4000 is not set | ||
66 | CONFIG_OLIVETTI_M700=y | ||
67 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
68 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
69 | CONFIG_GENERIC_HWEIGHT=y | ||
70 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
71 | CONFIG_GENERIC_TIME=y | ||
72 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
73 | CONFIG_ARC=y | ||
74 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
75 | CONFIG_DMA_NONCOHERENT=y | ||
76 | CONFIG_DMA_NEED_PCI_MAP_STATE=y | ||
77 | CONFIG_GENERIC_ISA_DMA=y | ||
78 | CONFIG_I8259=y | ||
79 | # CONFIG_CPU_BIG_ENDIAN is not set | ||
80 | CONFIG_CPU_LITTLE_ENDIAN=y | ||
81 | CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y | ||
82 | CONFIG_ARC32=y | ||
83 | CONFIG_MIPS_L1_CACHE_SHIFT=5 | ||
84 | CONFIG_ARC_MEMORY=y | ||
85 | CONFIG_ARC_PROMLIB=y | ||
86 | |||
87 | # | ||
88 | # CPU selection | ||
89 | # | ||
90 | # CONFIG_CPU_MIPS32_R1 is not set | ||
91 | # CONFIG_CPU_MIPS32_R2 is not set | ||
92 | # CONFIG_CPU_MIPS64_R1 is not set | ||
93 | # CONFIG_CPU_MIPS64_R2 is not set | ||
94 | # CONFIG_CPU_R3000 is not set | ||
95 | # CONFIG_CPU_TX39XX is not set | ||
96 | # CONFIG_CPU_VR41XX is not set | ||
97 | # CONFIG_CPU_R4300 is not set | ||
98 | CONFIG_CPU_R4X00=y | ||
99 | # CONFIG_CPU_TX49XX is not set | ||
100 | # CONFIG_CPU_R5000 is not set | ||
101 | # CONFIG_CPU_R5432 is not set | ||
102 | # CONFIG_CPU_R6000 is not set | ||
103 | # CONFIG_CPU_NEVADA is not set | ||
104 | # CONFIG_CPU_R8000 is not set | ||
105 | # CONFIG_CPU_R10000 is not set | ||
106 | # CONFIG_CPU_RM7000 is not set | ||
107 | # CONFIG_CPU_RM9000 is not set | ||
108 | # CONFIG_CPU_SB1 is not set | ||
109 | CONFIG_SYS_HAS_CPU_R4X00=y | ||
110 | CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y | ||
111 | CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y | ||
112 | CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y | ||
113 | CONFIG_CPU_SUPPORTS_64BIT_KERNEL=y | ||
114 | |||
115 | # | ||
116 | # Kernel type | ||
117 | # | ||
118 | CONFIG_32BIT=y | ||
119 | # CONFIG_64BIT is not set | ||
120 | CONFIG_PAGE_SIZE_4KB=y | ||
121 | # CONFIG_PAGE_SIZE_8KB is not set | ||
122 | # CONFIG_PAGE_SIZE_16KB is not set | ||
123 | # CONFIG_PAGE_SIZE_64KB is not set | ||
124 | CONFIG_MIPS_MT_DISABLED=y | ||
125 | # CONFIG_MIPS_MT_SMP is not set | ||
126 | # CONFIG_MIPS_MT_SMTC is not set | ||
127 | # CONFIG_MIPS_VPE_LOADER is not set | ||
128 | # CONFIG_64BIT_PHYS_ADDR is not set | ||
129 | CONFIG_CPU_HAS_LLSC=y | ||
130 | CONFIG_CPU_HAS_SYNC=y | ||
131 | CONFIG_GENERIC_HARDIRQS=y | ||
132 | CONFIG_GENERIC_IRQ_PROBE=y | ||
133 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
134 | CONFIG_SELECT_MEMORY_MODEL=y | ||
135 | CONFIG_FLATMEM_MANUAL=y | ||
136 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
137 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
138 | CONFIG_FLATMEM=y | ||
139 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
140 | # CONFIG_SPARSEMEM_STATIC is not set | ||
141 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
142 | # CONFIG_RESOURCES_64BIT is not set | ||
143 | # CONFIG_HZ_48 is not set | ||
144 | CONFIG_HZ_100=y | ||
145 | # CONFIG_HZ_128 is not set | ||
146 | # CONFIG_HZ_250 is not set | ||
147 | # CONFIG_HZ_256 is not set | ||
148 | # CONFIG_HZ_1000 is not set | ||
149 | # CONFIG_HZ_1024 is not set | ||
150 | CONFIG_SYS_SUPPORTS_100HZ=y | ||
151 | CONFIG_HZ=100 | ||
152 | # CONFIG_PREEMPT_NONE is not set | ||
153 | CONFIG_PREEMPT_VOLUNTARY=y | ||
154 | # CONFIG_PREEMPT is not set | ||
155 | CONFIG_LOCKDEP_SUPPORT=y | ||
156 | CONFIG_STACKTRACE_SUPPORT=y | ||
157 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
158 | |||
159 | # | ||
160 | # Code maturity level options | ||
161 | # | ||
162 | CONFIG_EXPERIMENTAL=y | ||
163 | CONFIG_BROKEN_ON_SMP=y | ||
164 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
165 | |||
166 | # | ||
167 | # General setup | ||
168 | # | ||
169 | CONFIG_LOCALVERSION="" | ||
170 | CONFIG_LOCALVERSION_AUTO=y | ||
171 | CONFIG_SWAP=y | ||
172 | CONFIG_SYSVIPC=y | ||
173 | # CONFIG_IPC_NS is not set | ||
174 | CONFIG_POSIX_MQUEUE=y | ||
175 | CONFIG_BSD_PROCESS_ACCT=y | ||
176 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||
177 | # CONFIG_TASKSTATS is not set | ||
178 | # CONFIG_UTS_NS is not set | ||
179 | # CONFIG_AUDIT is not set | ||
180 | CONFIG_IKCONFIG=y | ||
181 | CONFIG_IKCONFIG_PROC=y | ||
182 | CONFIG_RELAY=y | ||
183 | CONFIG_INITRAMFS_SOURCE="" | ||
184 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
185 | CONFIG_SYSCTL=y | ||
186 | CONFIG_EMBEDDED=y | ||
187 | # CONFIG_SYSCTL_SYSCALL is not set | ||
188 | CONFIG_KALLSYMS=y | ||
189 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
190 | CONFIG_HOTPLUG=y | ||
191 | CONFIG_PRINTK=y | ||
192 | CONFIG_BUG=y | ||
193 | CONFIG_ELF_CORE=y | ||
194 | CONFIG_BASE_FULL=y | ||
195 | CONFIG_FUTEX=y | ||
196 | CONFIG_EPOLL=y | ||
197 | CONFIG_SHMEM=y | ||
198 | CONFIG_SLAB=y | ||
199 | CONFIG_VM_EVENT_COUNTERS=y | ||
200 | CONFIG_RT_MUTEXES=y | ||
201 | # CONFIG_TINY_SHMEM is not set | ||
202 | CONFIG_BASE_SMALL=0 | ||
203 | # CONFIG_SLOB is not set | ||
204 | |||
205 | # | ||
206 | # Loadable module support | ||
207 | # | ||
208 | CONFIG_MODULES=y | ||
209 | CONFIG_MODULE_UNLOAD=y | ||
210 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
211 | CONFIG_MODVERSIONS=y | ||
212 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
213 | CONFIG_KMOD=y | ||
214 | |||
215 | # | ||
216 | # Block layer | ||
217 | # | ||
218 | CONFIG_BLOCK=y | ||
219 | # CONFIG_LBD is not set | ||
220 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
221 | # CONFIG_LSF is not set | ||
222 | |||
223 | # | ||
224 | # IO Schedulers | ||
225 | # | ||
226 | CONFIG_IOSCHED_NOOP=y | ||
227 | CONFIG_IOSCHED_AS=y | ||
228 | CONFIG_IOSCHED_DEADLINE=y | ||
229 | CONFIG_IOSCHED_CFQ=y | ||
230 | CONFIG_DEFAULT_AS=y | ||
231 | # CONFIG_DEFAULT_DEADLINE is not set | ||
232 | # CONFIG_DEFAULT_CFQ is not set | ||
233 | # CONFIG_DEFAULT_NOOP is not set | ||
234 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
235 | |||
236 | # | ||
237 | # Bus options (PCI, PCMCIA, EISA, ISA, TC) | ||
238 | # | ||
239 | CONFIG_ISA=y | ||
240 | CONFIG_MMU=y | ||
241 | CONFIG_I8253=y | ||
242 | |||
243 | # | ||
244 | # PCCARD (PCMCIA/CardBus) support | ||
245 | # | ||
246 | # CONFIG_PCCARD is not set | ||
247 | |||
248 | # | ||
249 | # PCI Hotplug Support | ||
250 | # | ||
251 | |||
252 | # | ||
253 | # Executable file formats | ||
254 | # | ||
255 | CONFIG_BINFMT_ELF=y | ||
256 | CONFIG_BINFMT_MISC=m | ||
257 | CONFIG_TRAD_SIGNALS=y | ||
258 | |||
259 | # | ||
260 | # Networking | ||
261 | # | ||
262 | CONFIG_NET=y | ||
263 | |||
264 | # | ||
265 | # Networking options | ||
266 | # | ||
267 | # CONFIG_NETDEBUG is not set | ||
268 | CONFIG_PACKET=m | ||
269 | CONFIG_PACKET_MMAP=y | ||
270 | CONFIG_UNIX=y | ||
271 | CONFIG_XFRM=y | ||
272 | # CONFIG_XFRM_USER is not set | ||
273 | # CONFIG_XFRM_SUB_POLICY is not set | ||
274 | CONFIG_NET_KEY=m | ||
275 | CONFIG_INET=y | ||
276 | CONFIG_IP_MULTICAST=y | ||
277 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
278 | CONFIG_IP_FIB_HASH=y | ||
279 | # CONFIG_IP_PNP is not set | ||
280 | CONFIG_NET_IPIP=m | ||
281 | CONFIG_NET_IPGRE=m | ||
282 | CONFIG_NET_IPGRE_BROADCAST=y | ||
283 | CONFIG_IP_MROUTE=y | ||
284 | CONFIG_IP_PIMSM_V1=y | ||
285 | CONFIG_IP_PIMSM_V2=y | ||
286 | # CONFIG_ARPD is not set | ||
287 | # CONFIG_SYN_COOKIES is not set | ||
288 | # CONFIG_INET_AH is not set | ||
289 | # CONFIG_INET_ESP is not set | ||
290 | # CONFIG_INET_IPCOMP is not set | ||
291 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
292 | CONFIG_INET_TUNNEL=m | ||
293 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | ||
294 | CONFIG_INET_XFRM_MODE_TUNNEL=m | ||
295 | CONFIG_INET_XFRM_MODE_BEET=y | ||
296 | CONFIG_INET_DIAG=y | ||
297 | CONFIG_INET_TCP_DIAG=y | ||
298 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
299 | CONFIG_TCP_CONG_CUBIC=y | ||
300 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
301 | |||
302 | # | ||
303 | # IP: Virtual Server Configuration | ||
304 | # | ||
305 | # CONFIG_IP_VS is not set | ||
306 | CONFIG_IPV6=m | ||
307 | CONFIG_IPV6_PRIVACY=y | ||
308 | CONFIG_IPV6_ROUTER_PREF=y | ||
309 | CONFIG_IPV6_ROUTE_INFO=y | ||
310 | CONFIG_INET6_AH=m | ||
311 | CONFIG_INET6_ESP=m | ||
312 | CONFIG_INET6_IPCOMP=m | ||
313 | # CONFIG_IPV6_MIP6 is not set | ||
314 | CONFIG_INET6_XFRM_TUNNEL=m | ||
315 | CONFIG_INET6_TUNNEL=m | ||
316 | CONFIG_INET6_XFRM_MODE_TRANSPORT=m | ||
317 | CONFIG_INET6_XFRM_MODE_TUNNEL=m | ||
318 | CONFIG_INET6_XFRM_MODE_BEET=m | ||
319 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | ||
320 | CONFIG_IPV6_TUNNEL=m | ||
321 | # CONFIG_IPV6_SUBTREES is not set | ||
322 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | ||
323 | CONFIG_NETWORK_SECMARK=y | ||
324 | CONFIG_NETFILTER=y | ||
325 | # CONFIG_NETFILTER_DEBUG is not set | ||
326 | CONFIG_BRIDGE_NETFILTER=y | ||
327 | |||
328 | # | ||
329 | # Core Netfilter Configuration | ||
330 | # | ||
331 | CONFIG_NETFILTER_NETLINK=m | ||
332 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
333 | CONFIG_NETFILTER_NETLINK_LOG=m | ||
334 | CONFIG_NETFILTER_XTABLES=m | ||
335 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | ||
336 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | ||
337 | # CONFIG_NETFILTER_XT_TARGET_DSCP is not set | ||
338 | CONFIG_NETFILTER_XT_TARGET_MARK=m | ||
339 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
340 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
341 | CONFIG_NETFILTER_XT_TARGET_SECMARK=m | ||
342 | # CONFIG_NETFILTER_XT_TARGET_CONNSECMARK is not set | ||
343 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | ||
344 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | ||
345 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | ||
346 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | ||
347 | # CONFIG_NETFILTER_XT_MATCH_DSCP is not set | ||
348 | CONFIG_NETFILTER_XT_MATCH_ESP=m | ||
349 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | ||
350 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | ||
351 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | ||
352 | CONFIG_NETFILTER_XT_MATCH_MAC=m | ||
353 | CONFIG_NETFILTER_XT_MATCH_MARK=m | ||
354 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | ||
355 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
356 | CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m | ||
357 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | ||
358 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | ||
359 | CONFIG_NETFILTER_XT_MATCH_REALM=m | ||
360 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | ||
361 | CONFIG_NETFILTER_XT_MATCH_STATE=m | ||
362 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | ||
363 | CONFIG_NETFILTER_XT_MATCH_STRING=m | ||
364 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | ||
365 | |||
366 | # | ||
367 | # IP: Netfilter Configuration | ||
368 | # | ||
369 | CONFIG_IP_NF_CONNTRACK=m | ||
370 | # CONFIG_IP_NF_CT_ACCT is not set | ||
371 | CONFIG_IP_NF_CONNTRACK_MARK=y | ||
372 | CONFIG_IP_NF_CONNTRACK_SECMARK=y | ||
373 | CONFIG_IP_NF_CONNTRACK_EVENTS=y | ||
374 | CONFIG_IP_NF_CONNTRACK_NETLINK=m | ||
375 | CONFIG_IP_NF_CT_PROTO_SCTP=m | ||
376 | CONFIG_IP_NF_FTP=m | ||
377 | CONFIG_IP_NF_IRC=m | ||
378 | # CONFIG_IP_NF_NETBIOS_NS is not set | ||
379 | CONFIG_IP_NF_TFTP=m | ||
380 | CONFIG_IP_NF_AMANDA=m | ||
381 | CONFIG_IP_NF_PPTP=m | ||
382 | CONFIG_IP_NF_H323=m | ||
383 | CONFIG_IP_NF_SIP=m | ||
384 | CONFIG_IP_NF_QUEUE=m | ||
385 | CONFIG_IP_NF_IPTABLES=m | ||
386 | CONFIG_IP_NF_MATCH_IPRANGE=m | ||
387 | CONFIG_IP_NF_MATCH_TOS=m | ||
388 | CONFIG_IP_NF_MATCH_RECENT=m | ||
389 | CONFIG_IP_NF_MATCH_ECN=m | ||
390 | CONFIG_IP_NF_MATCH_AH=m | ||
391 | CONFIG_IP_NF_MATCH_TTL=m | ||
392 | CONFIG_IP_NF_MATCH_OWNER=m | ||
393 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
394 | CONFIG_IP_NF_MATCH_HASHLIMIT=m | ||
395 | CONFIG_IP_NF_FILTER=m | ||
396 | CONFIG_IP_NF_TARGET_REJECT=m | ||
397 | CONFIG_IP_NF_TARGET_LOG=m | ||
398 | CONFIG_IP_NF_TARGET_ULOG=m | ||
399 | CONFIG_IP_NF_TARGET_TCPMSS=m | ||
400 | CONFIG_IP_NF_NAT=m | ||
401 | CONFIG_IP_NF_NAT_NEEDED=y | ||
402 | CONFIG_IP_NF_TARGET_MASQUERADE=m | ||
403 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
404 | CONFIG_IP_NF_TARGET_NETMAP=m | ||
405 | CONFIG_IP_NF_TARGET_SAME=m | ||
406 | CONFIG_IP_NF_NAT_SNMP_BASIC=m | ||
407 | CONFIG_IP_NF_NAT_IRC=m | ||
408 | CONFIG_IP_NF_NAT_FTP=m | ||
409 | CONFIG_IP_NF_NAT_TFTP=m | ||
410 | CONFIG_IP_NF_NAT_AMANDA=m | ||
411 | CONFIG_IP_NF_NAT_PPTP=m | ||
412 | CONFIG_IP_NF_NAT_H323=m | ||
413 | CONFIG_IP_NF_NAT_SIP=m | ||
414 | CONFIG_IP_NF_MANGLE=m | ||
415 | CONFIG_IP_NF_TARGET_TOS=m | ||
416 | CONFIG_IP_NF_TARGET_ECN=m | ||
417 | CONFIG_IP_NF_TARGET_TTL=m | ||
418 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
419 | CONFIG_IP_NF_RAW=m | ||
420 | CONFIG_IP_NF_ARPTABLES=m | ||
421 | CONFIG_IP_NF_ARPFILTER=m | ||
422 | CONFIG_IP_NF_ARP_MANGLE=m | ||
423 | |||
424 | # | ||
425 | # IPv6: Netfilter Configuration (EXPERIMENTAL) | ||
426 | # | ||
427 | CONFIG_IP6_NF_QUEUE=m | ||
428 | CONFIG_IP6_NF_IPTABLES=m | ||
429 | CONFIG_IP6_NF_MATCH_RT=m | ||
430 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
431 | CONFIG_IP6_NF_MATCH_FRAG=m | ||
432 | CONFIG_IP6_NF_MATCH_HL=m | ||
433 | CONFIG_IP6_NF_MATCH_OWNER=m | ||
434 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | ||
435 | CONFIG_IP6_NF_MATCH_AH=m | ||
436 | CONFIG_IP6_NF_MATCH_EUI64=m | ||
437 | CONFIG_IP6_NF_FILTER=m | ||
438 | CONFIG_IP6_NF_TARGET_LOG=m | ||
439 | CONFIG_IP6_NF_TARGET_REJECT=m | ||
440 | CONFIG_IP6_NF_MANGLE=m | ||
441 | CONFIG_IP6_NF_TARGET_HL=m | ||
442 | CONFIG_IP6_NF_RAW=m | ||
443 | |||
444 | # | ||
445 | # DECnet: Netfilter Configuration | ||
446 | # | ||
447 | CONFIG_DECNET_NF_GRABULATOR=m | ||
448 | |||
449 | # | ||
450 | # Bridge: Netfilter Configuration | ||
451 | # | ||
452 | CONFIG_BRIDGE_NF_EBTABLES=m | ||
453 | CONFIG_BRIDGE_EBT_BROUTE=m | ||
454 | CONFIG_BRIDGE_EBT_T_FILTER=m | ||
455 | CONFIG_BRIDGE_EBT_T_NAT=m | ||
456 | CONFIG_BRIDGE_EBT_802_3=m | ||
457 | CONFIG_BRIDGE_EBT_AMONG=m | ||
458 | CONFIG_BRIDGE_EBT_ARP=m | ||
459 | CONFIG_BRIDGE_EBT_IP=m | ||
460 | CONFIG_BRIDGE_EBT_LIMIT=m | ||
461 | CONFIG_BRIDGE_EBT_MARK=m | ||
462 | CONFIG_BRIDGE_EBT_PKTTYPE=m | ||
463 | CONFIG_BRIDGE_EBT_STP=m | ||
464 | CONFIG_BRIDGE_EBT_VLAN=m | ||
465 | CONFIG_BRIDGE_EBT_ARPREPLY=m | ||
466 | CONFIG_BRIDGE_EBT_DNAT=m | ||
467 | CONFIG_BRIDGE_EBT_MARK_T=m | ||
468 | CONFIG_BRIDGE_EBT_REDIRECT=m | ||
469 | CONFIG_BRIDGE_EBT_SNAT=m | ||
470 | CONFIG_BRIDGE_EBT_LOG=m | ||
471 | CONFIG_BRIDGE_EBT_ULOG=m | ||
472 | |||
473 | # | ||
474 | # DCCP Configuration (EXPERIMENTAL) | ||
475 | # | ||
476 | # CONFIG_IP_DCCP is not set | ||
477 | |||
478 | # | ||
479 | # SCTP Configuration (EXPERIMENTAL) | ||
480 | # | ||
481 | # CONFIG_IP_SCTP is not set | ||
482 | |||
483 | # | ||
484 | # TIPC Configuration (EXPERIMENTAL) | ||
485 | # | ||
486 | # CONFIG_TIPC is not set | ||
487 | # CONFIG_ATM is not set | ||
488 | CONFIG_BRIDGE=m | ||
489 | # CONFIG_VLAN_8021Q is not set | ||
490 | CONFIG_DECNET=m | ||
491 | # CONFIG_DECNET_ROUTER is not set | ||
492 | CONFIG_LLC=m | ||
493 | # CONFIG_LLC2 is not set | ||
494 | # CONFIG_IPX is not set | ||
495 | # CONFIG_ATALK is not set | ||
496 | # CONFIG_X25 is not set | ||
497 | # CONFIG_LAPB is not set | ||
498 | # CONFIG_ECONET is not set | ||
499 | # CONFIG_WAN_ROUTER is not set | ||
500 | |||
501 | # | ||
502 | # QoS and/or fair queueing | ||
503 | # | ||
504 | CONFIG_NET_SCHED=y | ||
505 | CONFIG_NET_SCH_CLK_JIFFIES=y | ||
506 | # CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set | ||
507 | # CONFIG_NET_SCH_CLK_CPU is not set | ||
508 | |||
509 | # | ||
510 | # Queueing/Scheduling | ||
511 | # | ||
512 | CONFIG_NET_SCH_CBQ=m | ||
513 | CONFIG_NET_SCH_HTB=m | ||
514 | CONFIG_NET_SCH_HFSC=m | ||
515 | CONFIG_NET_SCH_PRIO=m | ||
516 | CONFIG_NET_SCH_RED=m | ||
517 | CONFIG_NET_SCH_SFQ=m | ||
518 | CONFIG_NET_SCH_TEQL=m | ||
519 | CONFIG_NET_SCH_TBF=m | ||
520 | CONFIG_NET_SCH_GRED=m | ||
521 | CONFIG_NET_SCH_DSMARK=m | ||
522 | CONFIG_NET_SCH_NETEM=m | ||
523 | CONFIG_NET_SCH_INGRESS=m | ||
524 | |||
525 | # | ||
526 | # Classification | ||
527 | # | ||
528 | CONFIG_NET_CLS=y | ||
529 | CONFIG_NET_CLS_BASIC=m | ||
530 | CONFIG_NET_CLS_TCINDEX=m | ||
531 | CONFIG_NET_CLS_ROUTE4=m | ||
532 | CONFIG_NET_CLS_ROUTE=y | ||
533 | CONFIG_NET_CLS_FW=m | ||
534 | CONFIG_NET_CLS_U32=m | ||
535 | # CONFIG_CLS_U32_PERF is not set | ||
536 | # CONFIG_CLS_U32_MARK is not set | ||
537 | CONFIG_NET_CLS_RSVP=m | ||
538 | CONFIG_NET_CLS_RSVP6=m | ||
539 | # CONFIG_NET_EMATCH is not set | ||
540 | # CONFIG_NET_CLS_ACT is not set | ||
541 | CONFIG_NET_CLS_POLICE=y | ||
542 | # CONFIG_NET_CLS_IND is not set | ||
543 | CONFIG_NET_ESTIMATOR=y | ||
544 | |||
545 | # | ||
546 | # Network testing | ||
547 | # | ||
548 | # CONFIG_NET_PKTGEN is not set | ||
549 | CONFIG_HAMRADIO=y | ||
550 | |||
551 | # | ||
552 | # Packet Radio protocols | ||
553 | # | ||
554 | CONFIG_AX25=m | ||
555 | CONFIG_AX25_DAMA_SLAVE=y | ||
556 | CONFIG_NETROM=m | ||
557 | CONFIG_ROSE=m | ||
558 | |||
559 | # | ||
560 | # AX.25 network device drivers | ||
561 | # | ||
562 | CONFIG_MKISS=m | ||
563 | CONFIG_6PACK=m | ||
564 | CONFIG_BPQETHER=m | ||
565 | # CONFIG_BAYCOM_SER_FDX is not set | ||
566 | # CONFIG_BAYCOM_SER_HDX is not set | ||
567 | # CONFIG_BAYCOM_PAR is not set | ||
568 | # CONFIG_BAYCOM_EPP is not set | ||
569 | # CONFIG_YAM is not set | ||
570 | # CONFIG_IRDA is not set | ||
571 | # CONFIG_BT is not set | ||
572 | CONFIG_IEEE80211=m | ||
573 | # CONFIG_IEEE80211_DEBUG is not set | ||
574 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
575 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
576 | CONFIG_IEEE80211_SOFTMAC=m | ||
577 | # CONFIG_IEEE80211_SOFTMAC_DEBUG is not set | ||
578 | CONFIG_WIRELESS_EXT=y | ||
579 | |||
580 | # | ||
581 | # Device Drivers | ||
582 | # | ||
583 | |||
584 | # | ||
585 | # Generic Driver Options | ||
586 | # | ||
587 | CONFIG_STANDALONE=y | ||
588 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
589 | CONFIG_FW_LOADER=y | ||
590 | # CONFIG_SYS_HYPERVISOR is not set | ||
591 | |||
592 | # | ||
593 | # Connector - unified userspace <-> kernelspace linker | ||
594 | # | ||
595 | CONFIG_CONNECTOR=m | ||
596 | |||
597 | # | ||
598 | # Memory Technology Devices (MTD) | ||
599 | # | ||
600 | # CONFIG_MTD is not set | ||
601 | |||
602 | # | ||
603 | # Parallel port support | ||
604 | # | ||
605 | CONFIG_PARPORT=m | ||
606 | CONFIG_PARPORT_PC=m | ||
607 | # CONFIG_PARPORT_PC_FIFO is not set | ||
608 | # CONFIG_PARPORT_PC_SUPERIO is not set | ||
609 | # CONFIG_PARPORT_GSC is not set | ||
610 | # CONFIG_PARPORT_AX88796 is not set | ||
611 | CONFIG_PARPORT_1284=y | ||
612 | |||
613 | # | ||
614 | # Plug and Play support | ||
615 | # | ||
616 | # CONFIG_PNP is not set | ||
617 | |||
618 | # | ||
619 | # Block devices | ||
620 | # | ||
621 | CONFIG_BLK_DEV_FD=m | ||
622 | CONFIG_PARIDE=m | ||
623 | CONFIG_PARIDE_PARPORT=m | ||
624 | |||
625 | # | ||
626 | # Parallel IDE high-level drivers | ||
627 | # | ||
628 | CONFIG_PARIDE_PD=m | ||
629 | CONFIG_PARIDE_PCD=m | ||
630 | CONFIG_PARIDE_PF=m | ||
631 | CONFIG_PARIDE_PT=m | ||
632 | CONFIG_PARIDE_PG=m | ||
633 | |||
634 | # | ||
635 | # Parallel IDE protocol modules | ||
636 | # | ||
637 | CONFIG_PARIDE_ATEN=m | ||
638 | CONFIG_PARIDE_BPCK=m | ||
639 | CONFIG_PARIDE_BPCK6=m | ||
640 | CONFIG_PARIDE_COMM=m | ||
641 | CONFIG_PARIDE_DSTR=m | ||
642 | CONFIG_PARIDE_FIT2=m | ||
643 | CONFIG_PARIDE_FIT3=m | ||
644 | CONFIG_PARIDE_EPAT=m | ||
645 | # CONFIG_PARIDE_EPATC8 is not set | ||
646 | CONFIG_PARIDE_EPIA=m | ||
647 | CONFIG_PARIDE_FRIQ=m | ||
648 | CONFIG_PARIDE_FRPW=m | ||
649 | CONFIG_PARIDE_KBIC=m | ||
650 | CONFIG_PARIDE_KTTI=m | ||
651 | CONFIG_PARIDE_ON20=m | ||
652 | CONFIG_PARIDE_ON26=m | ||
653 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
654 | CONFIG_BLK_DEV_LOOP=m | ||
655 | CONFIG_BLK_DEV_CRYPTOLOOP=m | ||
656 | CONFIG_BLK_DEV_NBD=m | ||
657 | CONFIG_BLK_DEV_RAM=m | ||
658 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
659 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
660 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
661 | # CONFIG_BLK_DEV_INITRD is not set | ||
662 | CONFIG_CDROM_PKTCDVD=m | ||
663 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | ||
664 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | ||
665 | CONFIG_ATA_OVER_ETH=m | ||
666 | |||
667 | # | ||
668 | # ATA/ATAPI/MFM/RLL support | ||
669 | # | ||
670 | # CONFIG_IDE is not set | ||
671 | |||
672 | # | ||
673 | # SCSI device support | ||
674 | # | ||
675 | CONFIG_RAID_ATTRS=m | ||
676 | CONFIG_SCSI=y | ||
677 | CONFIG_SCSI_NETLINK=y | ||
678 | CONFIG_SCSI_PROC_FS=y | ||
679 | |||
680 | # | ||
681 | # SCSI support type (disk, tape, CD-ROM) | ||
682 | # | ||
683 | CONFIG_BLK_DEV_SD=y | ||
684 | CONFIG_CHR_DEV_ST=m | ||
685 | # CONFIG_CHR_DEV_OSST is not set | ||
686 | CONFIG_BLK_DEV_SR=m | ||
687 | CONFIG_BLK_DEV_SR_VENDOR=y | ||
688 | # CONFIG_CHR_DEV_SG is not set | ||
689 | # CONFIG_CHR_DEV_SCH is not set | ||
690 | |||
691 | # | ||
692 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
693 | # | ||
694 | # CONFIG_SCSI_MULTI_LUN is not set | ||
695 | CONFIG_SCSI_CONSTANTS=y | ||
696 | # CONFIG_SCSI_LOGGING is not set | ||
697 | |||
698 | # | ||
699 | # SCSI Transports | ||
700 | # | ||
701 | CONFIG_SCSI_SPI_ATTRS=y | ||
702 | CONFIG_SCSI_FC_ATTRS=y | ||
703 | CONFIG_SCSI_ISCSI_ATTRS=m | ||
704 | CONFIG_SCSI_SAS_ATTRS=m | ||
705 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
706 | |||
707 | # | ||
708 | # SCSI low-level drivers | ||
709 | # | ||
710 | CONFIG_ISCSI_TCP=m | ||
711 | # CONFIG_SCSI_AHA152X is not set | ||
712 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
713 | # CONFIG_SCSI_IN2000 is not set | ||
714 | # CONFIG_SCSI_DTC3280 is not set | ||
715 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
716 | # CONFIG_SCSI_GENERIC_NCR5380 is not set | ||
717 | # CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set | ||
718 | CONFIG_SCSI_PPA=m | ||
719 | CONFIG_SCSI_IMM=m | ||
720 | # CONFIG_SCSI_IZIP_EPP16 is not set | ||
721 | # CONFIG_SCSI_IZIP_SLOW_CTR is not set | ||
722 | # CONFIG_SCSI_NCR53C406A is not set | ||
723 | # CONFIG_SCSI_PAS16 is not set | ||
724 | # CONFIG_SCSI_PSI240I is not set | ||
725 | # CONFIG_SCSI_QLOGIC_FAS is not set | ||
726 | # CONFIG_SCSI_SYM53C416 is not set | ||
727 | # CONFIG_SCSI_T128 is not set | ||
728 | # CONFIG_SCSI_DEBUG is not set | ||
729 | CONFIG_JAZZ_ESP=y | ||
730 | |||
731 | # | ||
732 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
733 | # | ||
734 | # CONFIG_ATA is not set | ||
735 | |||
736 | # | ||
737 | # Old CD-ROM drivers (not SCSI, not IDE) | ||
738 | # | ||
739 | # CONFIG_CD_NO_IDESCSI is not set | ||
740 | |||
741 | # | ||
742 | # Multi-device support (RAID and LVM) | ||
743 | # | ||
744 | CONFIG_MD=y | ||
745 | CONFIG_BLK_DEV_MD=m | ||
746 | CONFIG_MD_LINEAR=m | ||
747 | CONFIG_MD_RAID0=m | ||
748 | CONFIG_MD_RAID1=m | ||
749 | CONFIG_MD_RAID10=m | ||
750 | CONFIG_MD_RAID456=m | ||
751 | CONFIG_MD_RAID5_RESHAPE=y | ||
752 | CONFIG_MD_MULTIPATH=m | ||
753 | CONFIG_MD_FAULTY=m | ||
754 | CONFIG_BLK_DEV_DM=m | ||
755 | # CONFIG_DM_DEBUG is not set | ||
756 | # CONFIG_DM_CRYPT is not set | ||
757 | CONFIG_DM_SNAPSHOT=m | ||
758 | CONFIG_DM_MIRROR=m | ||
759 | CONFIG_DM_ZERO=m | ||
760 | CONFIG_DM_MULTIPATH=m | ||
761 | CONFIG_DM_MULTIPATH_EMC=m | ||
762 | |||
763 | # | ||
764 | # Fusion MPT device support | ||
765 | # | ||
766 | # CONFIG_FUSION is not set | ||
767 | |||
768 | # | ||
769 | # IEEE 1394 (FireWire) support | ||
770 | # | ||
771 | |||
772 | # | ||
773 | # I2O device support | ||
774 | # | ||
775 | |||
776 | # | ||
777 | # Network device support | ||
778 | # | ||
779 | CONFIG_NETDEVICES=y | ||
780 | CONFIG_DUMMY=m | ||
781 | CONFIG_BONDING=m | ||
782 | CONFIG_EQUALIZER=m | ||
783 | CONFIG_TUN=m | ||
784 | |||
785 | # | ||
786 | # ARCnet devices | ||
787 | # | ||
788 | # CONFIG_ARCNET is not set | ||
789 | |||
790 | # | ||
791 | # PHY device support | ||
792 | # | ||
793 | CONFIG_PHYLIB=m | ||
794 | |||
795 | # | ||
796 | # MII PHY device drivers | ||
797 | # | ||
798 | CONFIG_MARVELL_PHY=m | ||
799 | CONFIG_DAVICOM_PHY=m | ||
800 | CONFIG_QSEMI_PHY=m | ||
801 | CONFIG_LXT_PHY=m | ||
802 | CONFIG_CICADA_PHY=m | ||
803 | CONFIG_VITESSE_PHY=m | ||
804 | CONFIG_SMSC_PHY=m | ||
805 | # CONFIG_FIXED_PHY is not set | ||
806 | |||
807 | # | ||
808 | # Ethernet (10 or 100Mbit) | ||
809 | # | ||
810 | CONFIG_NET_ETHERNET=y | ||
811 | CONFIG_MII=y | ||
812 | CONFIG_MIPS_JAZZ_SONIC=y | ||
813 | # CONFIG_NET_VENDOR_3COM is not set | ||
814 | # CONFIG_NET_VENDOR_SMC is not set | ||
815 | # CONFIG_DM9000 is not set | ||
816 | # CONFIG_NET_VENDOR_RACAL is not set | ||
817 | # CONFIG_AT1700 is not set | ||
818 | # CONFIG_DEPCA is not set | ||
819 | # CONFIG_HP100 is not set | ||
820 | CONFIG_NET_ISA=y | ||
821 | # CONFIG_E2100 is not set | ||
822 | # CONFIG_EWRK3 is not set | ||
823 | # CONFIG_EEXPRESS is not set | ||
824 | # CONFIG_EEXPRESS_PRO is not set | ||
825 | # CONFIG_HPLAN_PLUS is not set | ||
826 | # CONFIG_HPLAN is not set | ||
827 | # CONFIG_LP486E is not set | ||
828 | # CONFIG_ETH16I is not set | ||
829 | CONFIG_NE2000=m | ||
830 | # CONFIG_SEEQ8005 is not set | ||
831 | CONFIG_NET_PCI=y | ||
832 | # CONFIG_AC3200 is not set | ||
833 | # CONFIG_APRICOT is not set | ||
834 | # CONFIG_CS89x0 is not set | ||
835 | # CONFIG_LAN_SAA9730 is not set | ||
836 | # CONFIG_NET_POCKET is not set | ||
837 | |||
838 | # | ||
839 | # Ethernet (1000 Mbit) | ||
840 | # | ||
841 | |||
842 | # | ||
843 | # Ethernet (10000 Mbit) | ||
844 | # | ||
845 | |||
846 | # | ||
847 | # Token Ring devices | ||
848 | # | ||
849 | # CONFIG_TR is not set | ||
850 | |||
851 | # | ||
852 | # Wireless LAN (non-hamradio) | ||
853 | # | ||
854 | # CONFIG_NET_RADIO is not set | ||
855 | |||
856 | # | ||
857 | # Wan interfaces | ||
858 | # | ||
859 | # CONFIG_WAN is not set | ||
860 | CONFIG_PLIP=m | ||
861 | # CONFIG_PPP is not set | ||
862 | # CONFIG_SLIP is not set | ||
863 | # CONFIG_SHAPER is not set | ||
864 | # CONFIG_NETCONSOLE is not set | ||
865 | # CONFIG_NETPOLL is not set | ||
866 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
867 | |||
868 | # | ||
869 | # ISDN subsystem | ||
870 | # | ||
871 | # CONFIG_ISDN is not set | ||
872 | |||
873 | # | ||
874 | # Telephony Support | ||
875 | # | ||
876 | # CONFIG_PHONE is not set | ||
877 | |||
878 | # | ||
879 | # Input device support | ||
880 | # | ||
881 | CONFIG_INPUT=y | ||
882 | CONFIG_INPUT_FF_MEMLESS=m | ||
883 | |||
884 | # | ||
885 | # Userland interfaces | ||
886 | # | ||
887 | CONFIG_INPUT_MOUSEDEV=y | ||
888 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
889 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
890 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
891 | # CONFIG_INPUT_JOYDEV is not set | ||
892 | # CONFIG_INPUT_TSDEV is not set | ||
893 | # CONFIG_INPUT_EVDEV is not set | ||
894 | # CONFIG_INPUT_EVBUG is not set | ||
895 | |||
896 | # | ||
897 | # Input Device Drivers | ||
898 | # | ||
899 | CONFIG_INPUT_KEYBOARD=y | ||
900 | CONFIG_KEYBOARD_ATKBD=y | ||
901 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
902 | # CONFIG_KEYBOARD_LKKBD is not set | ||
903 | # CONFIG_KEYBOARD_XTKBD is not set | ||
904 | # CONFIG_KEYBOARD_NEWTON is not set | ||
905 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
906 | CONFIG_INPUT_MOUSE=y | ||
907 | CONFIG_MOUSE_PS2=y | ||
908 | # CONFIG_MOUSE_SERIAL is not set | ||
909 | # CONFIG_MOUSE_INPORT is not set | ||
910 | # CONFIG_MOUSE_LOGIBM is not set | ||
911 | # CONFIG_MOUSE_PC110PAD is not set | ||
912 | # CONFIG_MOUSE_VSXXXAA is not set | ||
913 | # CONFIG_INPUT_JOYSTICK is not set | ||
914 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
915 | # CONFIG_INPUT_MISC is not set | ||
916 | |||
917 | # | ||
918 | # Hardware I/O ports | ||
919 | # | ||
920 | CONFIG_SERIO=y | ||
921 | CONFIG_SERIO_I8042=y | ||
922 | CONFIG_SERIO_SERPORT=y | ||
923 | CONFIG_SERIO_PARKBD=m | ||
924 | CONFIG_SERIO_LIBPS2=y | ||
925 | CONFIG_SERIO_RAW=m | ||
926 | # CONFIG_GAMEPORT is not set | ||
927 | |||
928 | # | ||
929 | # Character devices | ||
930 | # | ||
931 | CONFIG_VT=y | ||
932 | CONFIG_VT_CONSOLE=y | ||
933 | CONFIG_HW_CONSOLE=y | ||
934 | CONFIG_VT_HW_CONSOLE_BINDING=y | ||
935 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
936 | |||
937 | # | ||
938 | # Serial drivers | ||
939 | # | ||
940 | CONFIG_SERIAL_8250=m | ||
941 | CONFIG_SERIAL_8250_NR_UARTS=4 | ||
942 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
943 | CONFIG_SERIAL_8250_EXTENDED=y | ||
944 | # CONFIG_SERIAL_8250_MANY_PORTS is not set | ||
945 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
946 | CONFIG_SERIAL_8250_DETECT_IRQ=y | ||
947 | CONFIG_SERIAL_8250_RSA=y | ||
948 | |||
949 | # | ||
950 | # Non-8250 serial port support | ||
951 | # | ||
952 | CONFIG_SERIAL_CORE=m | ||
953 | CONFIG_UNIX98_PTYS=y | ||
954 | CONFIG_LEGACY_PTYS=y | ||
955 | CONFIG_LEGACY_PTY_COUNT=256 | ||
956 | CONFIG_PRINTER=m | ||
957 | # CONFIG_LP_CONSOLE is not set | ||
958 | CONFIG_PPDEV=m | ||
959 | CONFIG_TIPAR=m | ||
960 | |||
961 | # | ||
962 | # IPMI | ||
963 | # | ||
964 | # CONFIG_IPMI_HANDLER is not set | ||
965 | |||
966 | # | ||
967 | # Watchdog Cards | ||
968 | # | ||
969 | # CONFIG_WATCHDOG is not set | ||
970 | # CONFIG_HW_RANDOM is not set | ||
971 | CONFIG_RTC=m | ||
972 | # CONFIG_GEN_RTC is not set | ||
973 | # CONFIG_DTLK is not set | ||
974 | # CONFIG_R3964 is not set | ||
975 | |||
976 | # | ||
977 | # Ftape, the floppy tape device driver | ||
978 | # | ||
979 | # CONFIG_RAW_DRIVER is not set | ||
980 | |||
981 | # | ||
982 | # TPM devices | ||
983 | # | ||
984 | # CONFIG_TCG_TPM is not set | ||
985 | # CONFIG_TELCLOCK is not set | ||
986 | |||
987 | # | ||
988 | # I2C support | ||
989 | # | ||
990 | # CONFIG_I2C is not set | ||
991 | |||
992 | # | ||
993 | # SPI support | ||
994 | # | ||
995 | # CONFIG_SPI is not set | ||
996 | # CONFIG_SPI_MASTER is not set | ||
997 | |||
998 | # | ||
999 | # Dallas's 1-wire bus | ||
1000 | # | ||
1001 | CONFIG_W1=m | ||
1002 | CONFIG_W1_CON=y | ||
1003 | |||
1004 | # | ||
1005 | # 1-wire Bus Masters | ||
1006 | # | ||
1007 | |||
1008 | # | ||
1009 | # 1-wire Slaves | ||
1010 | # | ||
1011 | # CONFIG_W1_SLAVE_THERM is not set | ||
1012 | # CONFIG_W1_SLAVE_SMEM is not set | ||
1013 | # CONFIG_W1_SLAVE_DS2433 is not set | ||
1014 | |||
1015 | # | ||
1016 | # Hardware Monitoring support | ||
1017 | # | ||
1018 | # CONFIG_HWMON is not set | ||
1019 | # CONFIG_HWMON_VID is not set | ||
1020 | |||
1021 | # | ||
1022 | # Misc devices | ||
1023 | # | ||
1024 | # CONFIG_TIFM_CORE is not set | ||
1025 | |||
1026 | # | ||
1027 | # Multimedia devices | ||
1028 | # | ||
1029 | # CONFIG_VIDEO_DEV is not set | ||
1030 | |||
1031 | # | ||
1032 | # Digital Video Broadcasting Devices | ||
1033 | # | ||
1034 | # CONFIG_DVB is not set | ||
1035 | |||
1036 | # | ||
1037 | # Graphics support | ||
1038 | # | ||
1039 | # CONFIG_FIRMWARE_EDID is not set | ||
1040 | # CONFIG_FB is not set | ||
1041 | |||
1042 | # | ||
1043 | # Console display driver support | ||
1044 | # | ||
1045 | CONFIG_VGA_CONSOLE=y | ||
1046 | # CONFIG_VGACON_SOFT_SCROLLBACK is not set | ||
1047 | # CONFIG_MDA_CONSOLE is not set | ||
1048 | CONFIG_DUMMY_CONSOLE=y | ||
1049 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
1050 | |||
1051 | # | ||
1052 | # Sound | ||
1053 | # | ||
1054 | # CONFIG_SOUND is not set | ||
1055 | |||
1056 | # | ||
1057 | # USB support | ||
1058 | # | ||
1059 | # CONFIG_USB_ARCH_HAS_HCD is not set | ||
1060 | # CONFIG_USB_ARCH_HAS_OHCI is not set | ||
1061 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
1062 | |||
1063 | # | ||
1064 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
1065 | # | ||
1066 | |||
1067 | # | ||
1068 | # USB Gadget Support | ||
1069 | # | ||
1070 | # CONFIG_USB_GADGET is not set | ||
1071 | |||
1072 | # | ||
1073 | # MMC/SD Card support | ||
1074 | # | ||
1075 | # CONFIG_MMC is not set | ||
1076 | |||
1077 | # | ||
1078 | # LED devices | ||
1079 | # | ||
1080 | # CONFIG_NEW_LEDS is not set | ||
1081 | |||
1082 | # | ||
1083 | # LED drivers | ||
1084 | # | ||
1085 | |||
1086 | # | ||
1087 | # LED Triggers | ||
1088 | # | ||
1089 | |||
1090 | # | ||
1091 | # InfiniBand support | ||
1092 | # | ||
1093 | |||
1094 | # | ||
1095 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) | ||
1096 | # | ||
1097 | |||
1098 | # | ||
1099 | # Real Time Clock | ||
1100 | # | ||
1101 | # CONFIG_RTC_CLASS is not set | ||
1102 | |||
1103 | # | ||
1104 | # DMA Engine support | ||
1105 | # | ||
1106 | # CONFIG_DMA_ENGINE is not set | ||
1107 | |||
1108 | # | ||
1109 | # DMA Clients | ||
1110 | # | ||
1111 | |||
1112 | # | ||
1113 | # DMA Devices | ||
1114 | # | ||
1115 | |||
1116 | # | ||
1117 | # File systems | ||
1118 | # | ||
1119 | CONFIG_EXT2_FS=m | ||
1120 | # CONFIG_EXT2_FS_XATTR is not set | ||
1121 | # CONFIG_EXT2_FS_XIP is not set | ||
1122 | CONFIG_EXT3_FS=y | ||
1123 | CONFIG_EXT3_FS_XATTR=y | ||
1124 | # CONFIG_EXT3_FS_POSIX_ACL is not set | ||
1125 | # CONFIG_EXT3_FS_SECURITY is not set | ||
1126 | CONFIG_JBD=y | ||
1127 | # CONFIG_JBD_DEBUG is not set | ||
1128 | CONFIG_FS_MBCACHE=y | ||
1129 | CONFIG_REISERFS_FS=m | ||
1130 | # CONFIG_REISERFS_CHECK is not set | ||
1131 | # CONFIG_REISERFS_PROC_INFO is not set | ||
1132 | CONFIG_REISERFS_FS_XATTR=y | ||
1133 | CONFIG_REISERFS_FS_POSIX_ACL=y | ||
1134 | CONFIG_REISERFS_FS_SECURITY=y | ||
1135 | # CONFIG_JFS_FS is not set | ||
1136 | CONFIG_FS_POSIX_ACL=y | ||
1137 | CONFIG_XFS_FS=m | ||
1138 | CONFIG_XFS_QUOTA=y | ||
1139 | CONFIG_XFS_SECURITY=y | ||
1140 | # CONFIG_XFS_POSIX_ACL is not set | ||
1141 | # CONFIG_XFS_RT is not set | ||
1142 | # CONFIG_GFS2_FS is not set | ||
1143 | # CONFIG_OCFS2_FS is not set | ||
1144 | CONFIG_MINIX_FS=m | ||
1145 | CONFIG_ROMFS_FS=m | ||
1146 | CONFIG_INOTIFY=y | ||
1147 | CONFIG_INOTIFY_USER=y | ||
1148 | # CONFIG_QUOTA is not set | ||
1149 | CONFIG_QUOTACTL=y | ||
1150 | CONFIG_DNOTIFY=y | ||
1151 | CONFIG_AUTOFS_FS=m | ||
1152 | CONFIG_AUTOFS4_FS=m | ||
1153 | CONFIG_FUSE_FS=m | ||
1154 | |||
1155 | # | ||
1156 | # CD-ROM/DVD Filesystems | ||
1157 | # | ||
1158 | CONFIG_ISO9660_FS=m | ||
1159 | CONFIG_JOLIET=y | ||
1160 | CONFIG_ZISOFS=y | ||
1161 | CONFIG_ZISOFS_FS=m | ||
1162 | CONFIG_UDF_FS=m | ||
1163 | CONFIG_UDF_NLS=y | ||
1164 | |||
1165 | # | ||
1166 | # DOS/FAT/NT Filesystems | ||
1167 | # | ||
1168 | CONFIG_FAT_FS=m | ||
1169 | CONFIG_MSDOS_FS=m | ||
1170 | CONFIG_VFAT_FS=m | ||
1171 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
1172 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
1173 | CONFIG_NTFS_FS=m | ||
1174 | # CONFIG_NTFS_DEBUG is not set | ||
1175 | # CONFIG_NTFS_RW is not set | ||
1176 | |||
1177 | # | ||
1178 | # Pseudo filesystems | ||
1179 | # | ||
1180 | CONFIG_PROC_FS=y | ||
1181 | CONFIG_PROC_KCORE=y | ||
1182 | CONFIG_PROC_SYSCTL=y | ||
1183 | CONFIG_SYSFS=y | ||
1184 | CONFIG_TMPFS=y | ||
1185 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
1186 | # CONFIG_HUGETLB_PAGE is not set | ||
1187 | CONFIG_RAMFS=y | ||
1188 | # CONFIG_CONFIGFS_FS is not set | ||
1189 | |||
1190 | # | ||
1191 | # Miscellaneous filesystems | ||
1192 | # | ||
1193 | CONFIG_ADFS_FS=m | ||
1194 | # CONFIG_ADFS_FS_RW is not set | ||
1195 | CONFIG_AFFS_FS=m | ||
1196 | # CONFIG_ECRYPT_FS is not set | ||
1197 | CONFIG_HFS_FS=m | ||
1198 | # CONFIG_HFSPLUS_FS is not set | ||
1199 | CONFIG_BEFS_FS=m | ||
1200 | # CONFIG_BEFS_DEBUG is not set | ||
1201 | CONFIG_BFS_FS=m | ||
1202 | CONFIG_EFS_FS=m | ||
1203 | CONFIG_CRAMFS=m | ||
1204 | CONFIG_VXFS_FS=m | ||
1205 | CONFIG_HPFS_FS=m | ||
1206 | CONFIG_QNX4FS_FS=m | ||
1207 | CONFIG_SYSV_FS=m | ||
1208 | CONFIG_UFS_FS=m | ||
1209 | # CONFIG_UFS_FS_WRITE is not set | ||
1210 | # CONFIG_UFS_DEBUG is not set | ||
1211 | |||
1212 | # | ||
1213 | # Network File Systems | ||
1214 | # | ||
1215 | CONFIG_NFS_FS=m | ||
1216 | CONFIG_NFS_V3=y | ||
1217 | # CONFIG_NFS_V3_ACL is not set | ||
1218 | # CONFIG_NFS_V4 is not set | ||
1219 | # CONFIG_NFS_DIRECTIO is not set | ||
1220 | CONFIG_NFSD=m | ||
1221 | CONFIG_NFSD_V3=y | ||
1222 | # CONFIG_NFSD_V3_ACL is not set | ||
1223 | # CONFIG_NFSD_V4 is not set | ||
1224 | CONFIG_NFSD_TCP=y | ||
1225 | CONFIG_LOCKD=m | ||
1226 | CONFIG_LOCKD_V4=y | ||
1227 | CONFIG_EXPORTFS=m | ||
1228 | CONFIG_NFS_COMMON=y | ||
1229 | CONFIG_SUNRPC=m | ||
1230 | CONFIG_SUNRPC_GSS=m | ||
1231 | CONFIG_RPCSEC_GSS_KRB5=m | ||
1232 | CONFIG_RPCSEC_GSS_SPKM3=m | ||
1233 | CONFIG_SMB_FS=m | ||
1234 | # CONFIG_SMB_NLS_DEFAULT is not set | ||
1235 | CONFIG_CIFS=m | ||
1236 | # CONFIG_CIFS_STATS is not set | ||
1237 | # CONFIG_CIFS_WEAK_PW_HASH is not set | ||
1238 | # CONFIG_CIFS_XATTR is not set | ||
1239 | # CONFIG_CIFS_DEBUG2 is not set | ||
1240 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
1241 | CONFIG_NCP_FS=m | ||
1242 | CONFIG_NCPFS_PACKET_SIGNING=y | ||
1243 | CONFIG_NCPFS_IOCTL_LOCKING=y | ||
1244 | CONFIG_NCPFS_STRONG=y | ||
1245 | CONFIG_NCPFS_NFS_NS=y | ||
1246 | CONFIG_NCPFS_OS2_NS=y | ||
1247 | CONFIG_NCPFS_SMALLDOS=y | ||
1248 | CONFIG_NCPFS_NLS=y | ||
1249 | CONFIG_NCPFS_EXTRAS=y | ||
1250 | CONFIG_CODA_FS=m | ||
1251 | CONFIG_CODA_FS_OLD_API=y | ||
1252 | CONFIG_AFS_FS=m | ||
1253 | CONFIG_RXRPC=m | ||
1254 | # CONFIG_9P_FS is not set | ||
1255 | |||
1256 | # | ||
1257 | # Partition Types | ||
1258 | # | ||
1259 | CONFIG_PARTITION_ADVANCED=y | ||
1260 | # CONFIG_ACORN_PARTITION is not set | ||
1261 | # CONFIG_OSF_PARTITION is not set | ||
1262 | # CONFIG_AMIGA_PARTITION is not set | ||
1263 | # CONFIG_ATARI_PARTITION is not set | ||
1264 | # CONFIG_MAC_PARTITION is not set | ||
1265 | CONFIG_MSDOS_PARTITION=y | ||
1266 | # CONFIG_BSD_DISKLABEL is not set | ||
1267 | # CONFIG_MINIX_SUBPARTITION is not set | ||
1268 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
1269 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
1270 | # CONFIG_LDM_PARTITION is not set | ||
1271 | # CONFIG_SGI_PARTITION is not set | ||
1272 | # CONFIG_ULTRIX_PARTITION is not set | ||
1273 | # CONFIG_SUN_PARTITION is not set | ||
1274 | # CONFIG_KARMA_PARTITION is not set | ||
1275 | # CONFIG_EFI_PARTITION is not set | ||
1276 | |||
1277 | # | ||
1278 | # Native Language Support | ||
1279 | # | ||
1280 | CONFIG_NLS=m | ||
1281 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
1282 | CONFIG_NLS_CODEPAGE_437=m | ||
1283 | CONFIG_NLS_CODEPAGE_737=m | ||
1284 | CONFIG_NLS_CODEPAGE_775=m | ||
1285 | CONFIG_NLS_CODEPAGE_850=m | ||
1286 | CONFIG_NLS_CODEPAGE_852=m | ||
1287 | CONFIG_NLS_CODEPAGE_855=m | ||
1288 | CONFIG_NLS_CODEPAGE_857=m | ||
1289 | CONFIG_NLS_CODEPAGE_860=m | ||
1290 | CONFIG_NLS_CODEPAGE_861=m | ||
1291 | CONFIG_NLS_CODEPAGE_862=m | ||
1292 | CONFIG_NLS_CODEPAGE_863=m | ||
1293 | CONFIG_NLS_CODEPAGE_864=m | ||
1294 | CONFIG_NLS_CODEPAGE_865=m | ||
1295 | CONFIG_NLS_CODEPAGE_866=m | ||
1296 | CONFIG_NLS_CODEPAGE_869=m | ||
1297 | CONFIG_NLS_CODEPAGE_936=m | ||
1298 | CONFIG_NLS_CODEPAGE_950=m | ||
1299 | CONFIG_NLS_CODEPAGE_932=m | ||
1300 | CONFIG_NLS_CODEPAGE_949=m | ||
1301 | CONFIG_NLS_CODEPAGE_874=m | ||
1302 | CONFIG_NLS_ISO8859_8=m | ||
1303 | CONFIG_NLS_CODEPAGE_1250=m | ||
1304 | CONFIG_NLS_CODEPAGE_1251=m | ||
1305 | CONFIG_NLS_ASCII=m | ||
1306 | CONFIG_NLS_ISO8859_1=m | ||
1307 | CONFIG_NLS_ISO8859_2=m | ||
1308 | CONFIG_NLS_ISO8859_3=m | ||
1309 | CONFIG_NLS_ISO8859_4=m | ||
1310 | CONFIG_NLS_ISO8859_5=m | ||
1311 | CONFIG_NLS_ISO8859_6=m | ||
1312 | CONFIG_NLS_ISO8859_7=m | ||
1313 | CONFIG_NLS_ISO8859_9=m | ||
1314 | CONFIG_NLS_ISO8859_13=m | ||
1315 | CONFIG_NLS_ISO8859_14=m | ||
1316 | CONFIG_NLS_ISO8859_15=m | ||
1317 | CONFIG_NLS_KOI8_R=m | ||
1318 | CONFIG_NLS_KOI8_U=m | ||
1319 | CONFIG_NLS_UTF8=m | ||
1320 | |||
1321 | # | ||
1322 | # Distributed Lock Manager | ||
1323 | # | ||
1324 | |||
1325 | # | ||
1326 | # Profiling support | ||
1327 | # | ||
1328 | # CONFIG_PROFILING is not set | ||
1329 | |||
1330 | # | ||
1331 | # Kernel hacking | ||
1332 | # | ||
1333 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
1334 | # CONFIG_PRINTK_TIME is not set | ||
1335 | CONFIG_ENABLE_MUST_CHECK=y | ||
1336 | # CONFIG_MAGIC_SYSRQ is not set | ||
1337 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1338 | # CONFIG_DEBUG_KERNEL is not set | ||
1339 | CONFIG_LOG_BUF_SHIFT=14 | ||
1340 | # CONFIG_DEBUG_FS is not set | ||
1341 | CONFIG_CROSSCOMPILE=y | ||
1342 | CONFIG_CMDLINE="" | ||
1343 | |||
1344 | # | ||
1345 | # Security options | ||
1346 | # | ||
1347 | CONFIG_KEYS=y | ||
1348 | CONFIG_KEYS_DEBUG_PROC_KEYS=y | ||
1349 | # CONFIG_SECURITY is not set | ||
1350 | |||
1351 | # | ||
1352 | # Cryptographic options | ||
1353 | # | ||
1354 | CONFIG_CRYPTO=y | ||
1355 | CONFIG_CRYPTO_ALGAPI=y | ||
1356 | CONFIG_CRYPTO_BLKCIPHER=m | ||
1357 | CONFIG_CRYPTO_HASH=y | ||
1358 | CONFIG_CRYPTO_MANAGER=m | ||
1359 | CONFIG_CRYPTO_HMAC=y | ||
1360 | CONFIG_CRYPTO_NULL=m | ||
1361 | CONFIG_CRYPTO_MD4=m | ||
1362 | CONFIG_CRYPTO_MD5=m | ||
1363 | CONFIG_CRYPTO_SHA1=m | ||
1364 | CONFIG_CRYPTO_SHA256=m | ||
1365 | CONFIG_CRYPTO_SHA512=m | ||
1366 | CONFIG_CRYPTO_WP512=m | ||
1367 | CONFIG_CRYPTO_TGR192=m | ||
1368 | CONFIG_CRYPTO_ECB=m | ||
1369 | CONFIG_CRYPTO_CBC=m | ||
1370 | CONFIG_CRYPTO_DES=m | ||
1371 | CONFIG_CRYPTO_BLOWFISH=m | ||
1372 | CONFIG_CRYPTO_TWOFISH=m | ||
1373 | CONFIG_CRYPTO_TWOFISH_COMMON=m | ||
1374 | CONFIG_CRYPTO_SERPENT=m | ||
1375 | CONFIG_CRYPTO_AES=m | ||
1376 | CONFIG_CRYPTO_CAST5=m | ||
1377 | CONFIG_CRYPTO_CAST6=m | ||
1378 | CONFIG_CRYPTO_TEA=m | ||
1379 | CONFIG_CRYPTO_ARC4=m | ||
1380 | CONFIG_CRYPTO_KHAZAD=m | ||
1381 | CONFIG_CRYPTO_ANUBIS=m | ||
1382 | CONFIG_CRYPTO_DEFLATE=m | ||
1383 | CONFIG_CRYPTO_MICHAEL_MIC=m | ||
1384 | CONFIG_CRYPTO_CRC32C=m | ||
1385 | # CONFIG_CRYPTO_TEST is not set | ||
1386 | |||
1387 | # | ||
1388 | # Hardware crypto devices | ||
1389 | # | ||
1390 | |||
1391 | # | ||
1392 | # Library routines | ||
1393 | # | ||
1394 | CONFIG_CRC_CCITT=m | ||
1395 | CONFIG_CRC16=m | ||
1396 | CONFIG_CRC32=y | ||
1397 | CONFIG_LIBCRC32C=m | ||
1398 | CONFIG_ZLIB_INFLATE=m | ||
1399 | CONFIG_ZLIB_DEFLATE=m | ||
1400 | CONFIG_TEXTSEARCH=y | ||
1401 | CONFIG_TEXTSEARCH_KMP=m | ||
1402 | CONFIG_TEXTSEARCH_BM=m | ||
1403 | CONFIG_TEXTSEARCH_FSM=m | ||
1404 | CONFIG_PLIST=y | ||
diff --git a/arch/mips/configs/malta_defconfig b/arch/mips/configs/malta_defconfig index aeefe2873e38..101e80347dce 100644 --- a/arch/mips/configs/malta_defconfig +++ b/arch/mips/configs/malta_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.18-rc1 | 3 | # Linux kernel version: 2.6.19-rc1 |
4 | # Thu Jul 6 10:04:13 2006 | 4 | # Fri Oct 6 17:34:55 2006 |
5 | # | 5 | # |
6 | CONFIG_MIPS=y | 6 | CONFIG_MIPS=y |
7 | 7 | ||
@@ -25,8 +25,6 @@ CONFIG_MIPS=y | |||
25 | # CONFIG_MIPS_COBALT is not set | 25 | # CONFIG_MIPS_COBALT is not set |
26 | # CONFIG_MACH_DECSTATION is not set | 26 | # CONFIG_MACH_DECSTATION is not set |
27 | # CONFIG_MIPS_EV64120 is not set | 27 | # CONFIG_MIPS_EV64120 is not set |
28 | # CONFIG_MIPS_IVR is not set | ||
29 | # CONFIG_MIPS_ITE8172 is not set | ||
30 | # CONFIG_MACH_JAZZ is not set | 28 | # CONFIG_MACH_JAZZ is not set |
31 | # CONFIG_LASAT is not set | 29 | # CONFIG_LASAT is not set |
32 | # CONFIG_MIPS_ATLAS is not set | 30 | # CONFIG_MIPS_ATLAS is not set |
@@ -67,6 +65,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y | |||
67 | CONFIG_GENERIC_FIND_NEXT_BIT=y | 65 | CONFIG_GENERIC_FIND_NEXT_BIT=y |
68 | CONFIG_GENERIC_HWEIGHT=y | 66 | CONFIG_GENERIC_HWEIGHT=y |
69 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 67 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
68 | CONFIG_GENERIC_TIME=y | ||
70 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 69 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
71 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | 70 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y |
72 | CONFIG_DMA_NONCOHERENT=y | 71 | CONFIG_DMA_NONCOHERENT=y |
@@ -134,19 +133,19 @@ CONFIG_MIPS_CPU_SCACHE=y | |||
134 | CONFIG_CPU_HAS_PREFETCH=y | 133 | CONFIG_CPU_HAS_PREFETCH=y |
135 | # CONFIG_MIPS_MT_DISABLED is not set | 134 | # CONFIG_MIPS_MT_DISABLED is not set |
136 | # CONFIG_MIPS_MT_SMTC is not set | 135 | # CONFIG_MIPS_MT_SMTC is not set |
137 | # CONFIG_MIPS_MT_SMP is not set | 136 | CONFIG_MIPS_MT_SMP=y |
138 | CONFIG_MIPS_VPE_LOADER=y | 137 | # CONFIG_MIPS_VPE_LOADER is not set |
139 | CONFIG_MIPS_MT=y | 138 | CONFIG_MIPS_MT=y |
140 | CONFIG_SYS_SUPPORTS_MULTITHREADING=y | 139 | CONFIG_SYS_SUPPORTS_MULTITHREADING=y |
141 | CONFIG_MIPS_MT_FPAFF=y | 140 | CONFIG_MIPS_MT_FPAFF=y |
142 | CONFIG_MIPS_VPE_LOADER_TOM=y | ||
143 | CONFIG_MIPS_VPE_APSP_API=y | ||
144 | CONFIG_MIPS_APSP_KSPD=y | ||
145 | # CONFIG_64BIT_PHYS_ADDR is not set | 141 | # CONFIG_64BIT_PHYS_ADDR is not set |
146 | CONFIG_CPU_HAS_LLSC=y | 142 | CONFIG_CPU_HAS_LLSC=y |
143 | CONFIG_CPU_MIPSR2_IRQ_VI=y | ||
144 | CONFIG_CPU_MIPSR2_SRS=y | ||
147 | CONFIG_CPU_HAS_SYNC=y | 145 | CONFIG_CPU_HAS_SYNC=y |
148 | CONFIG_GENERIC_HARDIRQS=y | 146 | CONFIG_GENERIC_HARDIRQS=y |
149 | CONFIG_GENERIC_IRQ_PROBE=y | 147 | CONFIG_GENERIC_IRQ_PROBE=y |
148 | CONFIG_IRQ_PER_CPU=y | ||
150 | CONFIG_CPU_SUPPORTS_HIGHMEM=y | 149 | CONFIG_CPU_SUPPORTS_HIGHMEM=y |
151 | CONFIG_ARCH_FLATMEM_ENABLE=y | 150 | CONFIG_ARCH_FLATMEM_ENABLE=y |
152 | CONFIG_SELECT_MEMORY_MODEL=y | 151 | CONFIG_SELECT_MEMORY_MODEL=y |
@@ -158,6 +157,9 @@ CONFIG_FLAT_NODE_MEM_MAP=y | |||
158 | # CONFIG_SPARSEMEM_STATIC is not set | 157 | # CONFIG_SPARSEMEM_STATIC is not set |
159 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 158 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
160 | # CONFIG_RESOURCES_64BIT is not set | 159 | # CONFIG_RESOURCES_64BIT is not set |
160 | CONFIG_SMP=y | ||
161 | CONFIG_SYS_SUPPORTS_SMP=y | ||
162 | CONFIG_NR_CPUS=2 | ||
161 | # CONFIG_HZ_48 is not set | 163 | # CONFIG_HZ_48 is not set |
162 | CONFIG_HZ_100=y | 164 | CONFIG_HZ_100=y |
163 | # CONFIG_HZ_128 is not set | 165 | # CONFIG_HZ_128 is not set |
@@ -170,6 +172,7 @@ CONFIG_HZ=100 | |||
170 | CONFIG_PREEMPT_NONE=y | 172 | CONFIG_PREEMPT_NONE=y |
171 | # CONFIG_PREEMPT_VOLUNTARY is not set | 173 | # CONFIG_PREEMPT_VOLUNTARY is not set |
172 | # CONFIG_PREEMPT is not set | 174 | # CONFIG_PREEMPT is not set |
175 | CONFIG_PREEMPT_BKL=y | ||
173 | CONFIG_LOCKDEP_SUPPORT=y | 176 | CONFIG_LOCKDEP_SUPPORT=y |
174 | CONFIG_STACKTRACE_SUPPORT=y | 177 | CONFIG_STACKTRACE_SUPPORT=y |
175 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 178 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
@@ -178,7 +181,7 @@ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | |||
178 | # Code maturity level options | 181 | # Code maturity level options |
179 | # | 182 | # |
180 | CONFIG_EXPERIMENTAL=y | 183 | CONFIG_EXPERIMENTAL=y |
181 | CONFIG_BROKEN_ON_SMP=y | 184 | CONFIG_LOCK_KERNEL=y |
182 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 185 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
183 | 186 | ||
184 | # | 187 | # |
@@ -188,15 +191,20 @@ CONFIG_LOCALVERSION="" | |||
188 | CONFIG_LOCALVERSION_AUTO=y | 191 | CONFIG_LOCALVERSION_AUTO=y |
189 | CONFIG_SWAP=y | 192 | CONFIG_SWAP=y |
190 | CONFIG_SYSVIPC=y | 193 | CONFIG_SYSVIPC=y |
194 | # CONFIG_IPC_NS is not set | ||
191 | # CONFIG_POSIX_MQUEUE is not set | 195 | # CONFIG_POSIX_MQUEUE is not set |
192 | # CONFIG_BSD_PROCESS_ACCT is not set | 196 | # CONFIG_BSD_PROCESS_ACCT is not set |
193 | CONFIG_SYSCTL=y | 197 | # CONFIG_TASKSTATS is not set |
198 | # CONFIG_UTS_NS is not set | ||
194 | # CONFIG_AUDIT is not set | 199 | # CONFIG_AUDIT is not set |
195 | # CONFIG_IKCONFIG is not set | 200 | # CONFIG_IKCONFIG is not set |
201 | # CONFIG_CPUSETS is not set | ||
196 | CONFIG_RELAY=y | 202 | CONFIG_RELAY=y |
197 | CONFIG_INITRAMFS_SOURCE="" | 203 | CONFIG_INITRAMFS_SOURCE="" |
198 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 204 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
205 | CONFIG_SYSCTL=y | ||
199 | CONFIG_EMBEDDED=y | 206 | CONFIG_EMBEDDED=y |
207 | # CONFIG_SYSCTL_SYSCALL is not set | ||
200 | CONFIG_KALLSYMS=y | 208 | CONFIG_KALLSYMS=y |
201 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 209 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
202 | CONFIG_HOTPLUG=y | 210 | CONFIG_HOTPLUG=y |
@@ -204,12 +212,12 @@ CONFIG_PRINTK=y | |||
204 | CONFIG_BUG=y | 212 | CONFIG_BUG=y |
205 | CONFIG_ELF_CORE=y | 213 | CONFIG_ELF_CORE=y |
206 | CONFIG_BASE_FULL=y | 214 | CONFIG_BASE_FULL=y |
207 | CONFIG_RT_MUTEXES=y | ||
208 | CONFIG_FUTEX=y | 215 | CONFIG_FUTEX=y |
209 | CONFIG_EPOLL=y | 216 | CONFIG_EPOLL=y |
210 | CONFIG_SHMEM=y | 217 | CONFIG_SHMEM=y |
211 | CONFIG_SLAB=y | 218 | CONFIG_SLAB=y |
212 | CONFIG_VM_EVENT_COUNTERS=y | 219 | CONFIG_VM_EVENT_COUNTERS=y |
220 | CONFIG_RT_MUTEXES=y | ||
213 | # CONFIG_TINY_SHMEM is not set | 221 | # CONFIG_TINY_SHMEM is not set |
214 | CONFIG_BASE_SMALL=0 | 222 | CONFIG_BASE_SMALL=0 |
215 | # CONFIG_SLOB is not set | 223 | # CONFIG_SLOB is not set |
@@ -223,10 +231,12 @@ CONFIG_MODULE_UNLOAD=y | |||
223 | CONFIG_MODVERSIONS=y | 231 | CONFIG_MODVERSIONS=y |
224 | CONFIG_MODULE_SRCVERSION_ALL=y | 232 | CONFIG_MODULE_SRCVERSION_ALL=y |
225 | CONFIG_KMOD=y | 233 | CONFIG_KMOD=y |
234 | CONFIG_STOP_MACHINE=y | ||
226 | 235 | ||
227 | # | 236 | # |
228 | # Block layer | 237 | # Block layer |
229 | # | 238 | # |
239 | CONFIG_BLOCK=y | ||
230 | # CONFIG_LBD is not set | 240 | # CONFIG_LBD is not set |
231 | # CONFIG_BLK_DEV_IO_TRACE is not set | 241 | # CONFIG_BLK_DEV_IO_TRACE is not set |
232 | # CONFIG_LSF is not set | 242 | # CONFIG_LSF is not set |
@@ -249,6 +259,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
249 | # | 259 | # |
250 | CONFIG_HW_HAS_PCI=y | 260 | CONFIG_HW_HAS_PCI=y |
251 | CONFIG_PCI=y | 261 | CONFIG_PCI=y |
262 | # CONFIG_PCI_MULTITHREAD_PROBE is not set | ||
252 | CONFIG_MMU=y | 263 | CONFIG_MMU=y |
253 | 264 | ||
254 | # | 265 | # |
@@ -282,6 +293,7 @@ CONFIG_PACKET_MMAP=y | |||
282 | CONFIG_UNIX=y | 293 | CONFIG_UNIX=y |
283 | CONFIG_XFRM=y | 294 | CONFIG_XFRM=y |
284 | CONFIG_XFRM_USER=m | 295 | CONFIG_XFRM_USER=m |
296 | # CONFIG_XFRM_SUB_POLICY is not set | ||
285 | CONFIG_NET_KEY=y | 297 | CONFIG_NET_KEY=y |
286 | CONFIG_INET=y | 298 | CONFIG_INET=y |
287 | CONFIG_IP_MULTICAST=y | 299 | CONFIG_IP_MULTICAST=y |
@@ -313,10 +325,12 @@ CONFIG_INET_XFRM_TUNNEL=m | |||
313 | CONFIG_INET_TUNNEL=m | 325 | CONFIG_INET_TUNNEL=m |
314 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | 326 | CONFIG_INET_XFRM_MODE_TRANSPORT=m |
315 | CONFIG_INET_XFRM_MODE_TUNNEL=m | 327 | CONFIG_INET_XFRM_MODE_TUNNEL=m |
328 | CONFIG_INET_XFRM_MODE_BEET=y | ||
316 | CONFIG_INET_DIAG=y | 329 | CONFIG_INET_DIAG=y |
317 | CONFIG_INET_TCP_DIAG=y | 330 | CONFIG_INET_TCP_DIAG=y |
318 | # CONFIG_TCP_CONG_ADVANCED is not set | 331 | # CONFIG_TCP_CONG_ADVANCED is not set |
319 | CONFIG_TCP_CONG_BIC=y | 332 | CONFIG_TCP_CONG_CUBIC=y |
333 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
320 | 334 | ||
321 | # | 335 | # |
322 | # IP: Virtual Server Configuration | 336 | # IP: Virtual Server Configuration |
@@ -358,11 +372,16 @@ CONFIG_IPV6_ROUTE_INFO=y | |||
358 | CONFIG_INET6_AH=m | 372 | CONFIG_INET6_AH=m |
359 | CONFIG_INET6_ESP=m | 373 | CONFIG_INET6_ESP=m |
360 | CONFIG_INET6_IPCOMP=m | 374 | CONFIG_INET6_IPCOMP=m |
375 | # CONFIG_IPV6_MIP6 is not set | ||
361 | CONFIG_INET6_XFRM_TUNNEL=m | 376 | CONFIG_INET6_XFRM_TUNNEL=m |
362 | CONFIG_INET6_TUNNEL=m | 377 | CONFIG_INET6_TUNNEL=m |
363 | CONFIG_INET6_XFRM_MODE_TRANSPORT=m | 378 | CONFIG_INET6_XFRM_MODE_TRANSPORT=m |
364 | CONFIG_INET6_XFRM_MODE_TUNNEL=m | 379 | CONFIG_INET6_XFRM_MODE_TUNNEL=m |
380 | CONFIG_INET6_XFRM_MODE_BEET=m | ||
381 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | ||
365 | CONFIG_IPV6_TUNNEL=m | 382 | CONFIG_IPV6_TUNNEL=m |
383 | # CONFIG_IPV6_SUBTREES is not set | ||
384 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | ||
366 | CONFIG_NETWORK_SECMARK=y | 385 | CONFIG_NETWORK_SECMARK=y |
367 | CONFIG_NETFILTER=y | 386 | CONFIG_NETFILTER=y |
368 | # CONFIG_NETFILTER_DEBUG is not set | 387 | # CONFIG_NETFILTER_DEBUG is not set |
@@ -377,6 +396,7 @@ CONFIG_NETFILTER_NETLINK_LOG=m | |||
377 | CONFIG_NETFILTER_XTABLES=m | 396 | CONFIG_NETFILTER_XTABLES=m |
378 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 397 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
379 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 398 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
399 | # CONFIG_NETFILTER_XT_TARGET_DSCP is not set | ||
380 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 400 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
381 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 401 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
382 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | 402 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m |
@@ -387,6 +407,7 @@ CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | |||
387 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | 407 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m |
388 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 408 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
389 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 409 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
410 | # CONFIG_NETFILTER_XT_MATCH_DSCP is not set | ||
390 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 411 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
391 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 412 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
392 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 413 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
@@ -429,7 +450,6 @@ CONFIG_IP_NF_MATCH_IPRANGE=m | |||
429 | CONFIG_IP_NF_MATCH_TOS=m | 450 | CONFIG_IP_NF_MATCH_TOS=m |
430 | CONFIG_IP_NF_MATCH_RECENT=m | 451 | CONFIG_IP_NF_MATCH_RECENT=m |
431 | CONFIG_IP_NF_MATCH_ECN=m | 452 | CONFIG_IP_NF_MATCH_ECN=m |
432 | CONFIG_IP_NF_MATCH_DSCP=m | ||
433 | CONFIG_IP_NF_MATCH_AH=m | 453 | CONFIG_IP_NF_MATCH_AH=m |
434 | CONFIG_IP_NF_MATCH_TTL=m | 454 | CONFIG_IP_NF_MATCH_TTL=m |
435 | CONFIG_IP_NF_MATCH_OWNER=m | 455 | CONFIG_IP_NF_MATCH_OWNER=m |
@@ -457,7 +477,6 @@ CONFIG_IP_NF_NAT_SIP=m | |||
457 | CONFIG_IP_NF_MANGLE=m | 477 | CONFIG_IP_NF_MANGLE=m |
458 | CONFIG_IP_NF_TARGET_TOS=m | 478 | CONFIG_IP_NF_TARGET_TOS=m |
459 | CONFIG_IP_NF_TARGET_ECN=m | 479 | CONFIG_IP_NF_TARGET_ECN=m |
460 | CONFIG_IP_NF_TARGET_DSCP=m | ||
461 | CONFIG_IP_NF_TARGET_TTL=m | 480 | CONFIG_IP_NF_TARGET_TTL=m |
462 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 481 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
463 | CONFIG_IP_NF_RAW=m | 482 | CONFIG_IP_NF_RAW=m |
@@ -536,13 +555,12 @@ CONFIG_LLC=m | |||
536 | # CONFIG_LLC2 is not set | 555 | # CONFIG_LLC2 is not set |
537 | # CONFIG_IPX is not set | 556 | # CONFIG_IPX is not set |
538 | CONFIG_ATALK=m | 557 | CONFIG_ATALK=m |
539 | CONFIG_DEV_APPLETALK=y | 558 | CONFIG_DEV_APPLETALK=m |
540 | CONFIG_IPDDP=m | 559 | CONFIG_IPDDP=m |
541 | CONFIG_IPDDP_ENCAP=y | 560 | CONFIG_IPDDP_ENCAP=y |
542 | CONFIG_IPDDP_DECAP=y | 561 | CONFIG_IPDDP_DECAP=y |
543 | # CONFIG_X25 is not set | 562 | # CONFIG_X25 is not set |
544 | # CONFIG_LAPB is not set | 563 | # CONFIG_LAPB is not set |
545 | CONFIG_NET_DIVERT=y | ||
546 | # CONFIG_ECONET is not set | 564 | # CONFIG_ECONET is not set |
547 | # CONFIG_WAN_ROUTER is not set | 565 | # CONFIG_WAN_ROUTER is not set |
548 | 566 | ||
@@ -604,6 +622,7 @@ CONFIG_IEEE80211_CRYPT_CCMP=m | |||
604 | CONFIG_IEEE80211_SOFTMAC=m | 622 | CONFIG_IEEE80211_SOFTMAC=m |
605 | # CONFIG_IEEE80211_SOFTMAC_DEBUG is not set | 623 | # CONFIG_IEEE80211_SOFTMAC_DEBUG is not set |
606 | CONFIG_WIRELESS_EXT=y | 624 | CONFIG_WIRELESS_EXT=y |
625 | CONFIG_FIB_RULES=y | ||
607 | 626 | ||
608 | # | 627 | # |
609 | # Device Drivers | 628 | # Device Drivers |
@@ -652,6 +671,7 @@ CONFIG_BLK_DEV_NBD=m | |||
652 | CONFIG_BLK_DEV_RAM=y | 671 | CONFIG_BLK_DEV_RAM=y |
653 | CONFIG_BLK_DEV_RAM_COUNT=16 | 672 | CONFIG_BLK_DEV_RAM_COUNT=16 |
654 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 673 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
674 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
655 | # CONFIG_BLK_DEV_INITRD is not set | 675 | # CONFIG_BLK_DEV_INITRD is not set |
656 | CONFIG_CDROM_PKTCDVD=m | 676 | CONFIG_CDROM_PKTCDVD=m |
657 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 677 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
@@ -662,6 +682,7 @@ CONFIG_ATA_OVER_ETH=m | |||
662 | # ATA/ATAPI/MFM/RLL support | 682 | # ATA/ATAPI/MFM/RLL support |
663 | # | 683 | # |
664 | CONFIG_IDE=y | 684 | CONFIG_IDE=y |
685 | CONFIG_IDE_MAX_HWIFS=4 | ||
665 | CONFIG_BLK_DEV_IDE=y | 686 | CONFIG_BLK_DEV_IDE=y |
666 | 687 | ||
667 | # | 688 | # |
@@ -699,6 +720,7 @@ CONFIG_IDEDMA_PCI_AUTO=y | |||
699 | # CONFIG_BLK_DEV_CS5530 is not set | 720 | # CONFIG_BLK_DEV_CS5530 is not set |
700 | # CONFIG_BLK_DEV_HPT34X is not set | 721 | # CONFIG_BLK_DEV_HPT34X is not set |
701 | # CONFIG_BLK_DEV_HPT366 is not set | 722 | # CONFIG_BLK_DEV_HPT366 is not set |
723 | # CONFIG_BLK_DEV_JMICRON is not set | ||
702 | # CONFIG_BLK_DEV_SC1200 is not set | 724 | # CONFIG_BLK_DEV_SC1200 is not set |
703 | CONFIG_BLK_DEV_PIIX=y | 725 | CONFIG_BLK_DEV_PIIX=y |
704 | # CONFIG_BLK_DEV_IT821X is not set | 726 | # CONFIG_BLK_DEV_IT821X is not set |
@@ -721,6 +743,7 @@ CONFIG_IDEDMA_AUTO=y | |||
721 | # | 743 | # |
722 | CONFIG_RAID_ATTRS=m | 744 | CONFIG_RAID_ATTRS=m |
723 | CONFIG_SCSI=m | 745 | CONFIG_SCSI=m |
746 | CONFIG_SCSI_NETLINK=y | ||
724 | CONFIG_SCSI_PROC_FS=y | 747 | CONFIG_SCSI_PROC_FS=y |
725 | 748 | ||
726 | # | 749 | # |
@@ -742,12 +765,13 @@ CONFIG_SCSI_CONSTANTS=y | |||
742 | CONFIG_SCSI_LOGGING=y | 765 | CONFIG_SCSI_LOGGING=y |
743 | 766 | ||
744 | # | 767 | # |
745 | # SCSI Transport Attributes | 768 | # SCSI Transports |
746 | # | 769 | # |
747 | CONFIG_SCSI_SPI_ATTRS=m | 770 | CONFIG_SCSI_SPI_ATTRS=m |
748 | CONFIG_SCSI_FC_ATTRS=m | 771 | CONFIG_SCSI_FC_ATTRS=m |
749 | CONFIG_SCSI_ISCSI_ATTRS=m | 772 | CONFIG_SCSI_ISCSI_ATTRS=m |
750 | CONFIG_SCSI_SAS_ATTRS=m | 773 | CONFIG_SCSI_SAS_ATTRS=m |
774 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
751 | 775 | ||
752 | # | 776 | # |
753 | # SCSI low-level drivers | 777 | # SCSI low-level drivers |
@@ -765,21 +789,23 @@ CONFIG_AIC7XXX_DEBUG_MASK=0 | |||
765 | CONFIG_AIC7XXX_REG_PRETTY_PRINT=y | 789 | CONFIG_AIC7XXX_REG_PRETTY_PRINT=y |
766 | # CONFIG_SCSI_AIC7XXX_OLD is not set | 790 | # CONFIG_SCSI_AIC7XXX_OLD is not set |
767 | # CONFIG_SCSI_AIC79XX is not set | 791 | # CONFIG_SCSI_AIC79XX is not set |
792 | # CONFIG_SCSI_AIC94XX is not set | ||
768 | # CONFIG_SCSI_DPT_I2O is not set | 793 | # CONFIG_SCSI_DPT_I2O is not set |
794 | # CONFIG_SCSI_ARCMSR is not set | ||
769 | # CONFIG_MEGARAID_NEWGEN is not set | 795 | # CONFIG_MEGARAID_NEWGEN is not set |
770 | # CONFIG_MEGARAID_LEGACY is not set | 796 | # CONFIG_MEGARAID_LEGACY is not set |
771 | # CONFIG_MEGARAID_SAS is not set | 797 | # CONFIG_MEGARAID_SAS is not set |
772 | # CONFIG_SCSI_SATA is not set | ||
773 | # CONFIG_SCSI_HPTIOP is not set | 798 | # CONFIG_SCSI_HPTIOP is not set |
774 | # CONFIG_SCSI_DMX3191D is not set | 799 | # CONFIG_SCSI_DMX3191D is not set |
775 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | 800 | # CONFIG_SCSI_FUTURE_DOMAIN is not set |
776 | # CONFIG_SCSI_IPS is not set | 801 | # CONFIG_SCSI_IPS is not set |
777 | # CONFIG_SCSI_INITIO is not set | 802 | # CONFIG_SCSI_INITIO is not set |
778 | # CONFIG_SCSI_INIA100 is not set | 803 | # CONFIG_SCSI_INIA100 is not set |
804 | # CONFIG_SCSI_STEX is not set | ||
779 | # CONFIG_SCSI_SYM53C8XX_2 is not set | 805 | # CONFIG_SCSI_SYM53C8XX_2 is not set |
780 | # CONFIG_SCSI_IPR is not set | ||
781 | # CONFIG_SCSI_QLOGIC_1280 is not set | 806 | # CONFIG_SCSI_QLOGIC_1280 is not set |
782 | # CONFIG_SCSI_QLA_FC is not set | 807 | # CONFIG_SCSI_QLA_FC is not set |
808 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
783 | # CONFIG_SCSI_LPFC is not set | 809 | # CONFIG_SCSI_LPFC is not set |
784 | # CONFIG_SCSI_DC395x is not set | 810 | # CONFIG_SCSI_DC395x is not set |
785 | # CONFIG_SCSI_DC390T is not set | 811 | # CONFIG_SCSI_DC390T is not set |
@@ -787,6 +813,11 @@ CONFIG_AIC7XXX_REG_PRETTY_PRINT=y | |||
787 | # CONFIG_SCSI_DEBUG is not set | 813 | # CONFIG_SCSI_DEBUG is not set |
788 | 814 | ||
789 | # | 815 | # |
816 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
817 | # | ||
818 | # CONFIG_ATA is not set | ||
819 | |||
820 | # | ||
790 | # Multi-device support (RAID and LVM) | 821 | # Multi-device support (RAID and LVM) |
791 | # | 822 | # |
792 | CONFIG_MD=y | 823 | CONFIG_MD=y |
@@ -800,6 +831,7 @@ CONFIG_MD_RAID5_RESHAPE=y | |||
800 | CONFIG_MD_MULTIPATH=m | 831 | CONFIG_MD_MULTIPATH=m |
801 | CONFIG_MD_FAULTY=m | 832 | CONFIG_MD_FAULTY=m |
802 | CONFIG_BLK_DEV_DM=m | 833 | CONFIG_BLK_DEV_DM=m |
834 | # CONFIG_DM_DEBUG is not set | ||
803 | CONFIG_DM_CRYPT=m | 835 | CONFIG_DM_CRYPT=m |
804 | CONFIG_DM_SNAPSHOT=m | 836 | CONFIG_DM_SNAPSHOT=m |
805 | CONFIG_DM_MIRROR=m | 837 | CONFIG_DM_MIRROR=m |
@@ -854,6 +886,7 @@ CONFIG_LXT_PHY=m | |||
854 | CONFIG_CICADA_PHY=m | 886 | CONFIG_CICADA_PHY=m |
855 | CONFIG_VITESSE_PHY=m | 887 | CONFIG_VITESSE_PHY=m |
856 | CONFIG_SMSC_PHY=m | 888 | CONFIG_SMSC_PHY=m |
889 | # CONFIG_FIXED_PHY is not set | ||
857 | 890 | ||
858 | # | 891 | # |
859 | # Ethernet (10 or 100Mbit) | 892 | # Ethernet (10 or 100Mbit) |
@@ -873,6 +906,7 @@ CONFIG_MII=y | |||
873 | # CONFIG_HP100 is not set | 906 | # CONFIG_HP100 is not set |
874 | CONFIG_NET_PCI=y | 907 | CONFIG_NET_PCI=y |
875 | CONFIG_PCNET32=y | 908 | CONFIG_PCNET32=y |
909 | # CONFIG_PCNET32_NAPI is not set | ||
876 | # CONFIG_AMD8111_ETH is not set | 910 | # CONFIG_AMD8111_ETH is not set |
877 | # CONFIG_ADAPTEC_STARFIRE is not set | 911 | # CONFIG_ADAPTEC_STARFIRE is not set |
878 | # CONFIG_B44 is not set | 912 | # CONFIG_B44 is not set |
@@ -909,6 +943,7 @@ CONFIG_PCNET32=y | |||
909 | # CONFIG_VIA_VELOCITY is not set | 943 | # CONFIG_VIA_VELOCITY is not set |
910 | # CONFIG_TIGON3 is not set | 944 | # CONFIG_TIGON3 is not set |
911 | # CONFIG_BNX2 is not set | 945 | # CONFIG_BNX2 is not set |
946 | # CONFIG_QLA3XXX is not set | ||
912 | 947 | ||
913 | # | 948 | # |
914 | # Ethernet (10000 Mbit) | 949 | # Ethernet (10000 Mbit) |
@@ -956,6 +991,7 @@ CONFIG_PCNET32=y | |||
956 | # Input device support | 991 | # Input device support |
957 | # | 992 | # |
958 | CONFIG_INPUT=y | 993 | CONFIG_INPUT=y |
994 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
959 | 995 | ||
960 | # | 996 | # |
961 | # Userland interfaces | 997 | # Userland interfaces |
@@ -1070,12 +1106,12 @@ CONFIG_RTC=y | |||
1070 | # | 1106 | # |
1071 | # Misc devices | 1107 | # Misc devices |
1072 | # | 1108 | # |
1109 | # CONFIG_TIFM_CORE is not set | ||
1073 | 1110 | ||
1074 | # | 1111 | # |
1075 | # Multimedia devices | 1112 | # Multimedia devices |
1076 | # | 1113 | # |
1077 | # CONFIG_VIDEO_DEV is not set | 1114 | # CONFIG_VIDEO_DEV is not set |
1078 | CONFIG_VIDEO_V4L2=y | ||
1079 | 1115 | ||
1080 | # | 1116 | # |
1081 | # Digital Video Broadcasting Devices | 1117 | # Digital Video Broadcasting Devices |
@@ -1093,6 +1129,7 @@ CONFIG_VIDEO_V4L2=y | |||
1093 | # | 1129 | # |
1094 | # CONFIG_VGA_CONSOLE is not set | 1130 | # CONFIG_VGA_CONSOLE is not set |
1095 | CONFIG_DUMMY_CONSOLE=y | 1131 | CONFIG_DUMMY_CONSOLE=y |
1132 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
1096 | 1133 | ||
1097 | # | 1134 | # |
1098 | # Sound | 1135 | # Sound |
@@ -1191,6 +1228,7 @@ CONFIG_XFS_QUOTA=y | |||
1191 | CONFIG_XFS_SECURITY=y | 1228 | CONFIG_XFS_SECURITY=y |
1192 | CONFIG_XFS_POSIX_ACL=y | 1229 | CONFIG_XFS_POSIX_ACL=y |
1193 | # CONFIG_XFS_RT is not set | 1230 | # CONFIG_XFS_RT is not set |
1231 | # CONFIG_GFS2_FS is not set | ||
1194 | # CONFIG_OCFS2_FS is not set | 1232 | # CONFIG_OCFS2_FS is not set |
1195 | CONFIG_MINIX_FS=m | 1233 | CONFIG_MINIX_FS=m |
1196 | CONFIG_ROMFS_FS=m | 1234 | CONFIG_ROMFS_FS=m |
@@ -1230,8 +1268,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
1230 | # | 1268 | # |
1231 | CONFIG_PROC_FS=y | 1269 | CONFIG_PROC_FS=y |
1232 | CONFIG_PROC_KCORE=y | 1270 | CONFIG_PROC_KCORE=y |
1271 | CONFIG_PROC_SYSCTL=y | ||
1233 | CONFIG_SYSFS=y | 1272 | CONFIG_SYSFS=y |
1234 | CONFIG_TMPFS=y | 1273 | CONFIG_TMPFS=y |
1274 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
1235 | # CONFIG_HUGETLB_PAGE is not set | 1275 | # CONFIG_HUGETLB_PAGE is not set |
1236 | CONFIG_RAMFS=y | 1276 | CONFIG_RAMFS=y |
1237 | # CONFIG_CONFIGFS_FS is not set | 1277 | # CONFIG_CONFIGFS_FS is not set |
@@ -1279,7 +1319,6 @@ CONFIG_SUNRPC=y | |||
1279 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 1319 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
1280 | # CONFIG_SMB_FS is not set | 1320 | # CONFIG_SMB_FS is not set |
1281 | # CONFIG_CIFS is not set | 1321 | # CONFIG_CIFS is not set |
1282 | # CONFIG_CIFS_DEBUG2 is not set | ||
1283 | # CONFIG_NCP_FS is not set | 1322 | # CONFIG_NCP_FS is not set |
1284 | # CONFIG_CODA_FS is not set | 1323 | # CONFIG_CODA_FS is not set |
1285 | # CONFIG_AFS_FS is not set | 1324 | # CONFIG_AFS_FS is not set |
@@ -1336,6 +1375,11 @@ CONFIG_NLS_KOI8_U=m | |||
1336 | CONFIG_NLS_UTF8=m | 1375 | CONFIG_NLS_UTF8=m |
1337 | 1376 | ||
1338 | # | 1377 | # |
1378 | # Distributed Lock Manager | ||
1379 | # | ||
1380 | # CONFIG_DLM is not set | ||
1381 | |||
1382 | # | ||
1339 | # Profiling support | 1383 | # Profiling support |
1340 | # | 1384 | # |
1341 | # CONFIG_PROFILING is not set | 1385 | # CONFIG_PROFILING is not set |
@@ -1345,10 +1389,11 @@ CONFIG_NLS_UTF8=m | |||
1345 | # | 1389 | # |
1346 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | 1390 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y |
1347 | # CONFIG_PRINTK_TIME is not set | 1391 | # CONFIG_PRINTK_TIME is not set |
1392 | CONFIG_ENABLE_MUST_CHECK=y | ||
1348 | # CONFIG_MAGIC_SYSRQ is not set | 1393 | # CONFIG_MAGIC_SYSRQ is not set |
1349 | # CONFIG_UNUSED_SYMBOLS is not set | 1394 | # CONFIG_UNUSED_SYMBOLS is not set |
1350 | # CONFIG_DEBUG_KERNEL is not set | 1395 | # CONFIG_DEBUG_KERNEL is not set |
1351 | CONFIG_LOG_BUF_SHIFT=14 | 1396 | CONFIG_LOG_BUF_SHIFT=15 |
1352 | # CONFIG_DEBUG_FS is not set | 1397 | # CONFIG_DEBUG_FS is not set |
1353 | CONFIG_CROSSCOMPILE=y | 1398 | CONFIG_CROSSCOMPILE=y |
1354 | CONFIG_CMDLINE="" | 1399 | CONFIG_CMDLINE="" |
@@ -1363,6 +1408,10 @@ CONFIG_CMDLINE="" | |||
1363 | # Cryptographic options | 1408 | # Cryptographic options |
1364 | # | 1409 | # |
1365 | CONFIG_CRYPTO=y | 1410 | CONFIG_CRYPTO=y |
1411 | CONFIG_CRYPTO_ALGAPI=y | ||
1412 | CONFIG_CRYPTO_BLKCIPHER=m | ||
1413 | CONFIG_CRYPTO_HASH=y | ||
1414 | CONFIG_CRYPTO_MANAGER=m | ||
1366 | CONFIG_CRYPTO_HMAC=y | 1415 | CONFIG_CRYPTO_HMAC=y |
1367 | CONFIG_CRYPTO_NULL=m | 1416 | CONFIG_CRYPTO_NULL=m |
1368 | CONFIG_CRYPTO_MD4=m | 1417 | CONFIG_CRYPTO_MD4=m |
@@ -1372,9 +1421,12 @@ CONFIG_CRYPTO_SHA256=m | |||
1372 | CONFIG_CRYPTO_SHA512=m | 1421 | CONFIG_CRYPTO_SHA512=m |
1373 | CONFIG_CRYPTO_WP512=m | 1422 | CONFIG_CRYPTO_WP512=m |
1374 | CONFIG_CRYPTO_TGR192=m | 1423 | CONFIG_CRYPTO_TGR192=m |
1424 | CONFIG_CRYPTO_ECB=m | ||
1425 | CONFIG_CRYPTO_CBC=m | ||
1375 | CONFIG_CRYPTO_DES=m | 1426 | CONFIG_CRYPTO_DES=m |
1376 | CONFIG_CRYPTO_BLOWFISH=m | 1427 | CONFIG_CRYPTO_BLOWFISH=m |
1377 | CONFIG_CRYPTO_TWOFISH=m | 1428 | CONFIG_CRYPTO_TWOFISH=m |
1429 | CONFIG_CRYPTO_TWOFISH_COMMON=m | ||
1378 | CONFIG_CRYPTO_SERPENT=m | 1430 | CONFIG_CRYPTO_SERPENT=m |
1379 | CONFIG_CRYPTO_AES=m | 1431 | CONFIG_CRYPTO_AES=m |
1380 | CONFIG_CRYPTO_CAST5=m | 1432 | CONFIG_CRYPTO_CAST5=m |
diff --git a/arch/mips/configs/pb1100_defconfig b/arch/mips/configs/pb1100_defconfig index 741f8258075c..9e672f63a0aa 100644 --- a/arch/mips/configs/pb1100_defconfig +++ b/arch/mips/configs/pb1100_defconfig | |||
@@ -76,7 +76,6 @@ CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y | |||
76 | CONFIG_SOC_AU1100=y | 76 | CONFIG_SOC_AU1100=y |
77 | CONFIG_SOC_AU1X00=y | 77 | CONFIG_SOC_AU1X00=y |
78 | CONFIG_SWAP_IO_SPACE=y | 78 | CONFIG_SWAP_IO_SPACE=y |
79 | # CONFIG_AU1X00_USB_DEVICE is not set | ||
80 | CONFIG_MIPS_L1_CACHE_SHIFT=5 | 79 | CONFIG_MIPS_L1_CACHE_SHIFT=5 |
81 | 80 | ||
82 | # | 81 | # |
diff --git a/arch/mips/configs/pb1500_defconfig b/arch/mips/configs/pb1500_defconfig index 8576340714da..d0c0f4af1bff 100644 --- a/arch/mips/configs/pb1500_defconfig +++ b/arch/mips/configs/pb1500_defconfig | |||
@@ -75,7 +75,6 @@ CONFIG_CPU_LITTLE_ENDIAN=y | |||
75 | CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y | 75 | CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y |
76 | CONFIG_SOC_AU1500=y | 76 | CONFIG_SOC_AU1500=y |
77 | CONFIG_SOC_AU1X00=y | 77 | CONFIG_SOC_AU1X00=y |
78 | # CONFIG_AU1X00_USB_DEVICE is not set | ||
79 | CONFIG_MIPS_L1_CACHE_SHIFT=5 | 78 | CONFIG_MIPS_L1_CACHE_SHIFT=5 |
80 | 79 | ||
81 | # | 80 | # |
diff --git a/arch/mips/ddb5xxx/ddb5477/irq.c b/arch/mips/ddb5xxx/ddb5477/irq.c index 513fc6722d84..a8bd2e66705c 100644 --- a/arch/mips/ddb5xxx/ddb5477/irq.c +++ b/arch/mips/ddb5xxx/ddb5477/irq.c | |||
@@ -153,8 +153,7 @@ u8 i8259_interrupt_ack(void) | |||
153 | * the first level int-handler will jump here if it is a vrc5477 irq | 153 | * the first level int-handler will jump here if it is a vrc5477 irq |
154 | */ | 154 | */ |
155 | #define NUM_5477_IRQS 32 | 155 | #define NUM_5477_IRQS 32 |
156 | static void | 156 | static void vrc5477_irq_dispatch(void) |
157 | vrc5477_irq_dispatch(struct pt_regs *regs) | ||
158 | { | 157 | { |
159 | u32 intStatus; | 158 | u32 intStatus; |
160 | u32 bitmask; | 159 | u32 bitmask; |
@@ -178,7 +177,7 @@ vrc5477_irq_dispatch(struct pt_regs *regs) | |||
178 | /* check for i8259 interrupts */ | 177 | /* check for i8259 interrupts */ |
179 | if (intStatus & (1 << VRC5477_I8259_CASCADE)) { | 178 | if (intStatus & (1 << VRC5477_I8259_CASCADE)) { |
180 | int i8259_irq = i8259_interrupt_ack(); | 179 | int i8259_irq = i8259_interrupt_ack(); |
181 | do_IRQ(I8259_IRQ_BASE + i8259_irq, regs); | 180 | do_IRQ(I8259_IRQ_BASE + i8259_irq); |
182 | return; | 181 | return; |
183 | } | 182 | } |
184 | } | 183 | } |
@@ -186,7 +185,7 @@ vrc5477_irq_dispatch(struct pt_regs *regs) | |||
186 | for (i=0, bitmask=1; i<= NUM_5477_IRQS; bitmask <<=1, i++) { | 185 | for (i=0, bitmask=1; i<= NUM_5477_IRQS; bitmask <<=1, i++) { |
187 | /* do we need to "and" with the int mask? */ | 186 | /* do we need to "and" with the int mask? */ |
188 | if (intStatus & bitmask) { | 187 | if (intStatus & bitmask) { |
189 | do_IRQ(VRC5477_IRQ_BASE + i, regs); | 188 | do_IRQ(VRC5477_IRQ_BASE + i); |
190 | return; | 189 | return; |
191 | } | 190 | } |
192 | } | 191 | } |
@@ -194,18 +193,18 @@ vrc5477_irq_dispatch(struct pt_regs *regs) | |||
194 | 193 | ||
195 | #define VR5477INTS (STATUSF_IP2|STATUSF_IP3|STATUSF_IP4|STATUSF_IP5|STATUSF_IP6) | 194 | #define VR5477INTS (STATUSF_IP2|STATUSF_IP3|STATUSF_IP4|STATUSF_IP5|STATUSF_IP6) |
196 | 195 | ||
197 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 196 | asmlinkage void plat_irq_dispatch(void) |
198 | { | 197 | { |
199 | unsigned int pending = read_c0_cause() & read_c0_status(); | 198 | unsigned int pending = read_c0_cause() & read_c0_status(); |
200 | 199 | ||
201 | if (pending & STATUSF_IP7) | 200 | if (pending & STATUSF_IP7) |
202 | do_IRQ(CPU_IRQ_BASE + 7, regs); | 201 | do_IRQ(CPU_IRQ_BASE + 7); |
203 | else if (pending & VR5477INTS) | 202 | else if (pending & VR5477INTS) |
204 | vrc5477_irq_dispatch(regs); | 203 | vrc5477_irq_dispatch(); |
205 | else if (pending & STATUSF_IP0) | 204 | else if (pending & STATUSF_IP0) |
206 | do_IRQ(CPU_IRQ_BASE, regs); | 205 | do_IRQ(CPU_IRQ_BASE); |
207 | else if (pending & STATUSF_IP1) | 206 | else if (pending & STATUSF_IP1) |
208 | do_IRQ(CPU_IRQ_BASE + 1, regs); | 207 | do_IRQ(CPU_IRQ_BASE + 1); |
209 | else | 208 | else |
210 | spurious_interrupt(regs); | 209 | spurious_interrupt(); |
211 | } | 210 | } |
diff --git a/arch/mips/dec/ecc-berr.c b/arch/mips/dec/ecc-berr.c index cc24c5ed0c05..3e374d05978f 100644 --- a/arch/mips/dec/ecc-berr.c +++ b/arch/mips/dec/ecc-berr.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <asm/addrspace.h> | 24 | #include <asm/addrspace.h> |
25 | #include <asm/bootinfo.h> | 25 | #include <asm/bootinfo.h> |
26 | #include <asm/cpu.h> | 26 | #include <asm/cpu.h> |
27 | #include <asm/irq_regs.h> | ||
27 | #include <asm/processor.h> | 28 | #include <asm/processor.h> |
28 | #include <asm/system.h> | 29 | #include <asm/system.h> |
29 | #include <asm/traps.h> | 30 | #include <asm/traps.h> |
@@ -200,8 +201,10 @@ int dec_ecc_be_handler(struct pt_regs *regs, int is_fixup) | |||
200 | return dec_ecc_be_backend(regs, is_fixup, 0); | 201 | return dec_ecc_be_backend(regs, is_fixup, 0); |
201 | } | 202 | } |
202 | 203 | ||
203 | irqreturn_t dec_ecc_be_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 204 | irqreturn_t dec_ecc_be_interrupt(int irq, void *dev_id) |
204 | { | 205 | { |
206 | struct pt_regs *regs = get_irq_regs(); | ||
207 | |||
205 | int action = dec_ecc_be_backend(regs, 0, 1); | 208 | int action = dec_ecc_be_backend(regs, 0, 1); |
206 | 209 | ||
207 | if (action == MIPS_BE_DISCARD) | 210 | if (action == MIPS_BE_DISCARD) |
diff --git a/arch/mips/dec/int-handler.S b/arch/mips/dec/int-handler.S index 455a65b91cb0..31dd47d1002d 100644 --- a/arch/mips/dec/int-handler.S +++ b/arch/mips/dec/int-handler.S | |||
@@ -264,10 +264,10 @@ | |||
264 | srlv t3,t1,t2 | 264 | srlv t3,t1,t2 |
265 | 265 | ||
266 | handle_it: | 266 | handle_it: |
267 | jal do_IRQ | 267 | LONG_L s0, TI_REGS($28) |
268 | move a1,sp | 268 | LONG_S sp, TI_REGS($28) |
269 | 269 | PTR_LA ra, ret_from_irq | |
270 | j ret_from_irq | 270 | j do_IRQ |
271 | nop | 271 | nop |
272 | 272 | ||
273 | #ifdef CONFIG_32BIT | 273 | #ifdef CONFIG_32BIT |
@@ -277,9 +277,8 @@ fpu: | |||
277 | #endif | 277 | #endif |
278 | 278 | ||
279 | spurious: | 279 | spurious: |
280 | jal spurious_interrupt | 280 | PTR_LA ra, _ret_from_irq |
281 | nop | 281 | j spurious_interrupt |
282 | j ret_from_irq | ||
283 | nop | 282 | nop |
284 | END(plat_irq_dispatch) | 283 | END(plat_irq_dispatch) |
285 | 284 | ||
diff --git a/arch/mips/dec/kn01-berr.c b/arch/mips/dec/kn01-berr.c index b9271db9bc76..f19b4617a0a6 100644 --- a/arch/mips/dec/kn01-berr.c +++ b/arch/mips/dec/kn01-berr.c | |||
@@ -150,10 +150,10 @@ int dec_kn01_be_handler(struct pt_regs *regs, int is_fixup) | |||
150 | return dec_kn01_be_backend(regs, is_fixup, 0); | 150 | return dec_kn01_be_backend(regs, is_fixup, 0); |
151 | } | 151 | } |
152 | 152 | ||
153 | irqreturn_t dec_kn01_be_interrupt(int irq, void *dev_id, | 153 | irqreturn_t dec_kn01_be_interrupt(int irq, void *dev_id) |
154 | struct pt_regs *regs) | ||
155 | { | 154 | { |
156 | volatile u16 *csr = (void *)CKSEG1ADDR(KN01_SLOT_BASE + KN01_CSR); | 155 | volatile u16 *csr = (void *)CKSEG1ADDR(KN01_SLOT_BASE + KN01_CSR); |
156 | struct pt_regs *regs = get_irq_regs(); | ||
157 | int action; | 157 | int action; |
158 | 158 | ||
159 | if (!(*csr & KN01_CSR_MEMERR)) | 159 | if (!(*csr & KN01_CSR_MEMERR)) |
diff --git a/arch/mips/dec/kn02xa-berr.c b/arch/mips/dec/kn02xa-berr.c index 6cd3f94f79fe..7a053aadcd3a 100644 --- a/arch/mips/dec/kn02xa-berr.c +++ b/arch/mips/dec/kn02xa-berr.c | |||
@@ -21,6 +21,8 @@ | |||
21 | #include <linux/types.h> | 21 | #include <linux/types.h> |
22 | 22 | ||
23 | #include <asm/addrspace.h> | 23 | #include <asm/addrspace.h> |
24 | #include <asm/irq_regs.h> | ||
25 | #include <asm/ptrace.h> | ||
24 | #include <asm/system.h> | 26 | #include <asm/system.h> |
25 | #include <asm/traps.h> | 27 | #include <asm/traps.h> |
26 | 28 | ||
@@ -104,9 +106,9 @@ int dec_kn02xa_be_handler(struct pt_regs *regs, int is_fixup) | |||
104 | return dec_kn02xa_be_backend(regs, is_fixup, 0); | 106 | return dec_kn02xa_be_backend(regs, is_fixup, 0); |
105 | } | 107 | } |
106 | 108 | ||
107 | irqreturn_t dec_kn02xa_be_interrupt(int irq, void *dev_id, | 109 | irqreturn_t dec_kn02xa_be_interrupt(int irq, void *dev_id) |
108 | struct pt_regs *regs) | ||
109 | { | 110 | { |
111 | struct pt_regs *regs = get_irq_regs(); | ||
110 | int action = dec_kn02xa_be_backend(regs, 0, 1); | 112 | int action = dec_kn02xa_be_backend(regs, 0, 1); |
111 | 113 | ||
112 | if (action == MIPS_BE_DISCARD) | 114 | if (action == MIPS_BE_DISCARD) |
diff --git a/arch/mips/dec/reset.c b/arch/mips/dec/reset.c index f78c6da47921..56397227adb0 100644 --- a/arch/mips/dec/reset.c +++ b/arch/mips/dec/reset.c | |||
@@ -8,7 +8,6 @@ | |||
8 | #include <linux/linkage.h> | 8 | #include <linux/linkage.h> |
9 | 9 | ||
10 | #include <asm/addrspace.h> | 10 | #include <asm/addrspace.h> |
11 | #include <asm/ptrace.h> | ||
12 | 11 | ||
13 | typedef void ATTRIB_NORET (* noret_func_t)(void); | 12 | typedef void ATTRIB_NORET (* noret_func_t)(void); |
14 | 13 | ||
@@ -35,7 +34,7 @@ void ATTRIB_NORET dec_machine_power_off(void) | |||
35 | back_to_prom(); | 34 | back_to_prom(); |
36 | } | 35 | } |
37 | 36 | ||
38 | irqreturn_t dec_intr_halt(int irq, void *dev_id, struct pt_regs *regs) | 37 | irqreturn_t dec_intr_halt(int irq, void *dev_id) |
39 | { | 38 | { |
40 | dec_machine_halt(); | 39 | dec_machine_halt(); |
41 | } | 40 | } |
diff --git a/arch/mips/dec/setup.c b/arch/mips/dec/setup.c index d43241c2f541..6b7481e97bec 100644 --- a/arch/mips/dec/setup.c +++ b/arch/mips/dec/setup.c | |||
@@ -46,7 +46,7 @@ | |||
46 | extern void dec_machine_restart(char *command); | 46 | extern void dec_machine_restart(char *command); |
47 | extern void dec_machine_halt(void); | 47 | extern void dec_machine_halt(void); |
48 | extern void dec_machine_power_off(void); | 48 | extern void dec_machine_power_off(void); |
49 | extern irqreturn_t dec_intr_halt(int irq, void *dev_id, struct pt_regs *regs); | 49 | extern irqreturn_t dec_intr_halt(int irq, void *dev_id); |
50 | 50 | ||
51 | unsigned long dec_kn_slot_base, dec_kn_slot_size; | 51 | unsigned long dec_kn_slot_base, dec_kn_slot_size; |
52 | 52 | ||
diff --git a/arch/mips/emma2rh/common/irq.c b/arch/mips/emma2rh/common/irq.c index 3af57693c84c..c191b3e9d9d9 100644 --- a/arch/mips/emma2rh/common/irq.c +++ b/arch/mips/emma2rh/common/irq.c | |||
@@ -39,7 +39,7 @@ | |||
39 | /* | 39 | /* |
40 | * the first level int-handler will jump here if it is a emma2rh irq | 40 | * the first level int-handler will jump here if it is a emma2rh irq |
41 | */ | 41 | */ |
42 | asmlinkage void emma2rh_irq_dispatch(struct pt_regs *regs) | 42 | void emma2rh_irq_dispatch(void) |
43 | { | 43 | { |
44 | u32 intStatus; | 44 | u32 intStatus; |
45 | u32 bitmask; | 45 | u32 bitmask; |
@@ -56,7 +56,7 @@ asmlinkage void emma2rh_irq_dispatch(struct pt_regs *regs) | |||
56 | & emma2rh_in32(EMMA2RH_BHIF_SW_INT_EN); | 56 | & emma2rh_in32(EMMA2RH_BHIF_SW_INT_EN); |
57 | for (i = 0, bitmask = 1; i < 32; i++, bitmask <<= 1) { | 57 | for (i = 0, bitmask = 1; i < 32; i++, bitmask <<= 1) { |
58 | if (swIntStatus & bitmask) { | 58 | if (swIntStatus & bitmask) { |
59 | do_IRQ(EMMA2RH_SW_IRQ_BASE + i, regs); | 59 | do_IRQ(EMMA2RH_SW_IRQ_BASE + i); |
60 | return; | 60 | return; |
61 | } | 61 | } |
62 | } | 62 | } |
@@ -65,7 +65,7 @@ asmlinkage void emma2rh_irq_dispatch(struct pt_regs *regs) | |||
65 | 65 | ||
66 | for (i = 0, bitmask = 1; i < 32; i++, bitmask <<= 1) { | 66 | for (i = 0, bitmask = 1; i < 32; i++, bitmask <<= 1) { |
67 | if (intStatus & bitmask) { | 67 | if (intStatus & bitmask) { |
68 | do_IRQ(EMMA2RH_IRQ_BASE + i, regs); | 68 | do_IRQ(EMMA2RH_IRQ_BASE + i); |
69 | return; | 69 | return; |
70 | } | 70 | } |
71 | } | 71 | } |
@@ -81,7 +81,7 @@ asmlinkage void emma2rh_irq_dispatch(struct pt_regs *regs) | |||
81 | & emma2rh_in32(EMMA2RH_GPIO_INT_MASK); | 81 | & emma2rh_in32(EMMA2RH_GPIO_INT_MASK); |
82 | for (i = 0, bitmask = 1; i < 32; i++, bitmask <<= 1) { | 82 | for (i = 0, bitmask = 1; i < 32; i++, bitmask <<= 1) { |
83 | if (gpioIntStatus & bitmask) { | 83 | if (gpioIntStatus & bitmask) { |
84 | do_IRQ(EMMA2RH_GPIO_IRQ_BASE + i, regs); | 84 | do_IRQ(EMMA2RH_GPIO_IRQ_BASE + i); |
85 | return; | 85 | return; |
86 | } | 86 | } |
87 | } | 87 | } |
@@ -90,7 +90,7 @@ asmlinkage void emma2rh_irq_dispatch(struct pt_regs *regs) | |||
90 | 90 | ||
91 | for (i = 32, bitmask = 1; i < 64; i++, bitmask <<= 1) { | 91 | for (i = 32, bitmask = 1; i < 64; i++, bitmask <<= 1) { |
92 | if (intStatus & bitmask) { | 92 | if (intStatus & bitmask) { |
93 | do_IRQ(EMMA2RH_IRQ_BASE + i, regs); | 93 | do_IRQ(EMMA2RH_IRQ_BASE + i); |
94 | return; | 94 | return; |
95 | } | 95 | } |
96 | } | 96 | } |
@@ -100,7 +100,7 @@ asmlinkage void emma2rh_irq_dispatch(struct pt_regs *regs) | |||
100 | 100 | ||
101 | for (i = 64, bitmask = 1; i < 96; i++, bitmask <<= 1) { | 101 | for (i = 64, bitmask = 1; i < 96; i++, bitmask <<= 1) { |
102 | if (intStatus & bitmask) { | 102 | if (intStatus & bitmask) { |
103 | do_IRQ(EMMA2RH_IRQ_BASE + i, regs); | 103 | do_IRQ(EMMA2RH_IRQ_BASE + i); |
104 | return; | 104 | return; |
105 | } | 105 | } |
106 | } | 106 | } |
diff --git a/arch/mips/emma2rh/markeins/irq.c b/arch/mips/emma2rh/markeins/irq.c index 2a736be42c8c..c93369cb4115 100644 --- a/arch/mips/emma2rh/markeins/irq.c +++ b/arch/mips/emma2rh/markeins/irq.c | |||
@@ -57,7 +57,7 @@ | |||
57 | extern void emma2rh_sw_irq_init(u32 base); | 57 | extern void emma2rh_sw_irq_init(u32 base); |
58 | extern void emma2rh_gpio_irq_init(u32 base); | 58 | extern void emma2rh_gpio_irq_init(u32 base); |
59 | extern void emma2rh_irq_init(u32 base); | 59 | extern void emma2rh_irq_init(u32 base); |
60 | extern asmlinkage void emma2rh_irq_dispatch(struct pt_regs *regs); | 60 | extern void emma2rh_irq_dispatch(void); |
61 | 61 | ||
62 | static struct irqaction irq_cascade = { | 62 | static struct irqaction irq_cascade = { |
63 | .handler = no_action, | 63 | .handler = no_action, |
@@ -114,20 +114,20 @@ void __init arch_init_irq(void) | |||
114 | setup_irq(CPU_IRQ_BASE + CPU_EMMA2RH_CASCADE, &irq_cascade); | 114 | setup_irq(CPU_IRQ_BASE + CPU_EMMA2RH_CASCADE, &irq_cascade); |
115 | } | 115 | } |
116 | 116 | ||
117 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 117 | asmlinkage void plat_irq_dispatch(void) |
118 | { | 118 | { |
119 | unsigned int pending = read_c0_status() & read_c0_cause(); | 119 | unsigned int pending = read_c0_status() & read_c0_cause(); |
120 | 120 | ||
121 | if (pending & STATUSF_IP7) | 121 | if (pending & STATUSF_IP7) |
122 | do_IRQ(CPU_IRQ_BASE + 7, regs); | 122 | do_IRQ(CPU_IRQ_BASE + 7); |
123 | else if (pending & STATUSF_IP2) | 123 | else if (pending & STATUSF_IP2) |
124 | emma2rh_irq_dispatch(regs); | 124 | emma2rh_irq_dispatch(); |
125 | else if (pending & STATUSF_IP1) | 125 | else if (pending & STATUSF_IP1) |
126 | do_IRQ(CPU_IRQ_BASE + 1, regs); | 126 | do_IRQ(CPU_IRQ_BASE + 1); |
127 | else if (pending & STATUSF_IP0) | 127 | else if (pending & STATUSF_IP0) |
128 | do_IRQ(CPU_IRQ_BASE + 0, regs); | 128 | do_IRQ(CPU_IRQ_BASE + 0); |
129 | else | 129 | else |
130 | spurious_interrupt(regs); | 130 | spurious_interrupt(); |
131 | } | 131 | } |
132 | 132 | ||
133 | 133 | ||
diff --git a/arch/mips/gt64120/common/time.c b/arch/mips/gt64120/common/time.c index 7feca49350d1..c83ae6acd601 100644 --- a/arch/mips/gt64120/common/time.c +++ b/arch/mips/gt64120/common/time.c | |||
@@ -10,7 +10,7 @@ | |||
10 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
11 | #include <linux/sched.h> | 11 | #include <linux/sched.h> |
12 | #include <linux/kernel_stat.h> | 12 | #include <linux/kernel_stat.h> |
13 | #include <asm/ptrace.h> | 13 | #include <asm/irq_regs.h> |
14 | #include <asm/gt64120.h> | 14 | #include <asm/gt64120.h> |
15 | 15 | ||
16 | /* | 16 | /* |
@@ -19,7 +19,7 @@ | |||
19 | * differently than other MIPS interrupts. | 19 | * differently than other MIPS interrupts. |
20 | */ | 20 | */ |
21 | 21 | ||
22 | static void gt64120_irq(int irq, void *dev_id, struct pt_regs *regs) | 22 | static irqreturn_t gt64120_irq(int irq, void *dev_id) |
23 | { | 23 | { |
24 | unsigned int irq_src, int_high_src, irq_src_mask, int_high_src_mask; | 24 | unsigned int irq_src, int_high_src, irq_src_mask, int_high_src_mask; |
25 | int handled = 0; | 25 | int handled = 0; |
@@ -36,12 +36,14 @@ static void gt64120_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
36 | irq_src &= ~0x00000800; | 36 | irq_src &= ~0x00000800; |
37 | do_timer(1); | 37 | do_timer(1); |
38 | #ifndef CONFIG_SMP | 38 | #ifndef CONFIG_SMP |
39 | update_process_times(user_mode(regs)); | 39 | update_process_times(user_mode(get_irq_regs())); |
40 | #endif | 40 | #endif |
41 | } | 41 | } |
42 | 42 | ||
43 | GT_WRITE(GT_INTRCAUSE_OFS, 0); | 43 | GT_WRITE(GT_INTRCAUSE_OFS, 0); |
44 | GT_WRITE(GT_HINTRCAUSE_OFS, 0); | 44 | GT_WRITE(GT_HINTRCAUSE_OFS, 0); |
45 | |||
46 | return IRQ_HANDLED; | ||
45 | } | 47 | } |
46 | 48 | ||
47 | /* | 49 | /* |
diff --git a/arch/mips/gt64120/ev64120/irq.c b/arch/mips/gt64120/ev64120/irq.c index 5d939ac58f3f..ed4d82b9a24a 100644 --- a/arch/mips/gt64120/ev64120/irq.c +++ b/arch/mips/gt64120/ev64120/irq.c | |||
@@ -46,22 +46,22 @@ | |||
46 | #include <asm/system.h> | 46 | #include <asm/system.h> |
47 | #include <asm/gt64120.h> | 47 | #include <asm/gt64120.h> |
48 | 48 | ||
49 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 49 | asmlinkage void plat_irq_dispatch(void) |
50 | { | 50 | { |
51 | unsigned int pending = read_c0_status() & read_c0_cause(); | 51 | unsigned int pending = read_c0_status() & read_c0_cause(); |
52 | 52 | ||
53 | if (pending & STATUSF_IP4) /* int2 hardware line (timer) */ | 53 | if (pending & STATUSF_IP4) /* int2 hardware line (timer) */ |
54 | do_IRQ(4, regs); | 54 | do_IRQ(4); |
55 | else if (pending & STATUSF_IP2) /* int0 hardware line */ | 55 | else if (pending & STATUSF_IP2) /* int0 hardware line */ |
56 | do_IRQ(GT_INTA, regs); | 56 | do_IRQ(GT_INTA); |
57 | else if (pending & STATUSF_IP5) /* int3 hardware line */ | 57 | else if (pending & STATUSF_IP5) /* int3 hardware line */ |
58 | do_IRQ(GT_INTD, regs); | 58 | do_IRQ(GT_INTD); |
59 | else if (pending & STATUSF_IP6) /* int4 hardware line */ | 59 | else if (pending & STATUSF_IP6) /* int4 hardware line */ |
60 | do_IRQ(6, regs); | 60 | do_IRQ(6); |
61 | else if (pending & STATUSF_IP7) /* compare int */ | 61 | else if (pending & STATUSF_IP7) /* compare int */ |
62 | do_IRQ(7, regs); | 62 | do_IRQ(7); |
63 | else | 63 | else |
64 | spurious_interrupt(regs); | 64 | spurious_interrupt(); |
65 | } | 65 | } |
66 | 66 | ||
67 | static void disable_ev64120_irq(unsigned int irq_nr) | 67 | static void disable_ev64120_irq(unsigned int irq_nr) |
diff --git a/arch/mips/gt64120/ev64120/setup.c b/arch/mips/gt64120/ev64120/setup.c index 4236da31ecc6..91c2d3f41617 100644 --- a/arch/mips/gt64120/ev64120/setup.c +++ b/arch/mips/gt64120/ev64120/setup.c | |||
@@ -42,7 +42,6 @@ | |||
42 | #include <asm/irq.h> | 42 | #include <asm/irq.h> |
43 | #include <asm/pci.h> | 43 | #include <asm/pci.h> |
44 | #include <asm/processor.h> | 44 | #include <asm/processor.h> |
45 | #include <asm/ptrace.h> | ||
46 | #include <asm/time.h> | 45 | #include <asm/time.h> |
47 | #include <asm/reboot.h> | 46 | #include <asm/reboot.h> |
48 | #include <asm/traps.h> | 47 | #include <asm/traps.h> |
diff --git a/arch/mips/gt64120/momenco_ocelot/irq.c b/arch/mips/gt64120/momenco_ocelot/irq.c index 885f67f32ea3..d9294401ccb0 100644 --- a/arch/mips/gt64120/momenco_ocelot/irq.c +++ b/arch/mips/gt64120/momenco_ocelot/irq.c | |||
@@ -48,22 +48,22 @@ | |||
48 | #include <asm/mipsregs.h> | 48 | #include <asm/mipsregs.h> |
49 | #include <asm/system.h> | 49 | #include <asm/system.h> |
50 | 50 | ||
51 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 51 | asmlinkage void plat_irq_dispatch(void) |
52 | { | 52 | { |
53 | unsigned int pending = read_c0_status() & read_c0_cause(); | 53 | unsigned int pending = read_c0_status() & read_c0_cause(); |
54 | 54 | ||
55 | if (pending & STATUSF_IP2) /* int0 hardware line */ | 55 | if (pending & STATUSF_IP2) /* int0 hardware line */ |
56 | do_IRQ(2, regs); | 56 | do_IRQ(2); |
57 | else if (pending & STATUSF_IP3) /* int1 hardware line */ | 57 | else if (pending & STATUSF_IP3) /* int1 hardware line */ |
58 | do_IRQ(3, regs); | 58 | do_IRQ(3); |
59 | else if (pending & STATUSF_IP4) /* int2 hardware line */ | 59 | else if (pending & STATUSF_IP4) /* int2 hardware line */ |
60 | do_IRQ(4, regs); | 60 | do_IRQ(4); |
61 | else if (pending & STATUSF_IP5) /* int3 hardware line */ | 61 | else if (pending & STATUSF_IP5) /* int3 hardware line */ |
62 | do_IRQ(5, regs); | 62 | do_IRQ(5); |
63 | else if (pending & STATUSF_IP6) /* int4 hardware line */ | 63 | else if (pending & STATUSF_IP6) /* int4 hardware line */ |
64 | do_IRQ(6, regs); | 64 | do_IRQ(6); |
65 | else if (pending & STATUSF_IP7) /* cpu timer */ | 65 | else if (pending & STATUSF_IP7) /* cpu timer */ |
66 | do_IRQ(7, regs); | 66 | do_IRQ(7); |
67 | else { | 67 | else { |
68 | /* | 68 | /* |
69 | * Now look at the extended interrupts | 69 | * Now look at the extended interrupts |
@@ -71,13 +71,13 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
71 | pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16; | 71 | pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16; |
72 | 72 | ||
73 | if (pending & STATUSF_IP8) /* int6 hardware line */ | 73 | if (pending & STATUSF_IP8) /* int6 hardware line */ |
74 | do_IRQ(8, regs); | 74 | do_IRQ(8); |
75 | else if (pending & STATUSF_IP9) /* int7 hardware line */ | 75 | else if (pending & STATUSF_IP9) /* int7 hardware line */ |
76 | do_IRQ(9, regs); | 76 | do_IRQ(9); |
77 | else if (pending & STATUSF_IP10) /* int8 hardware line */ | 77 | else if (pending & STATUSF_IP10) /* int8 hardware line */ |
78 | do_IRQ(10, regs); | 78 | do_IRQ(10); |
79 | else if (pending & STATUSF_IP11) /* int9 hardware line */ | 79 | else if (pending & STATUSF_IP11) /* int9 hardware line */ |
80 | do_IRQ(11, regs); | 80 | do_IRQ(11); |
81 | } | 81 | } |
82 | } | 82 | } |
83 | 83 | ||
diff --git a/arch/mips/gt64120/momenco_ocelot/setup.c b/arch/mips/gt64120/momenco_ocelot/setup.c index 9804642ecf89..0e5bbee2d5b7 100644 --- a/arch/mips/gt64120/momenco_ocelot/setup.c +++ b/arch/mips/gt64120/momenco_ocelot/setup.c | |||
@@ -56,7 +56,6 @@ | |||
56 | #include <asm/irq.h> | 56 | #include <asm/irq.h> |
57 | #include <asm/pci.h> | 57 | #include <asm/pci.h> |
58 | #include <asm/processor.h> | 58 | #include <asm/processor.h> |
59 | #include <asm/ptrace.h> | ||
60 | #include <asm/reboot.h> | 59 | #include <asm/reboot.h> |
61 | #include <asm/traps.h> | 60 | #include <asm/traps.h> |
62 | #include <linux/bootmem.h> | 61 | #include <linux/bootmem.h> |
diff --git a/arch/mips/gt64120/wrppmc/irq.c b/arch/mips/gt64120/wrppmc/irq.c index 8d75a43ce877..eedfc24e1eae 100644 --- a/arch/mips/gt64120/wrppmc/irq.c +++ b/arch/mips/gt64120/wrppmc/irq.c | |||
@@ -30,18 +30,18 @@ | |||
30 | #include <asm/irq_cpu.h> | 30 | #include <asm/irq_cpu.h> |
31 | #include <asm/gt64120.h> | 31 | #include <asm/gt64120.h> |
32 | 32 | ||
33 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 33 | asmlinkage void plat_irq_dispatch(void) |
34 | { | 34 | { |
35 | unsigned int pending = read_c0_status() & read_c0_cause(); | 35 | unsigned int pending = read_c0_status() & read_c0_cause(); |
36 | 36 | ||
37 | if (pending & STATUSF_IP7) | 37 | if (pending & STATUSF_IP7) |
38 | do_IRQ(WRPPMC_MIPS_TIMER_IRQ, regs); /* CPU Compare/Count internal timer */ | 38 | do_IRQ(WRPPMC_MIPS_TIMER_IRQ); /* CPU Compare/Count internal timer */ |
39 | else if (pending & STATUSF_IP6) | 39 | else if (pending & STATUSF_IP6) |
40 | do_IRQ(WRPPMC_UART16550_IRQ, regs); /* UART 16550 port */ | 40 | do_IRQ(WRPPMC_UART16550_IRQ); /* UART 16550 port */ |
41 | else if (pending & STATUSF_IP3) | 41 | else if (pending & STATUSF_IP3) |
42 | do_IRQ(WRPPMC_PCI_INTA_IRQ, regs); /* PCI INT_A */ | 42 | do_IRQ(WRPPMC_PCI_INTA_IRQ); /* PCI INT_A */ |
43 | else | 43 | else |
44 | spurious_interrupt(regs); | 44 | spurious_interrupt(); |
45 | } | 45 | } |
46 | 46 | ||
47 | /** | 47 | /** |
diff --git a/arch/mips/jazz/irq.c b/arch/mips/jazz/irq.c index eef05093deb4..d5bd6b3a0933 100644 --- a/arch/mips/jazz/irq.c +++ b/arch/mips/jazz/irq.c | |||
@@ -94,26 +94,26 @@ void __init arch_init_irq(void) | |||
94 | change_c0_status(ST0_IM, IE_IRQ4 | IE_IRQ3 | IE_IRQ2 | IE_IRQ1); | 94 | change_c0_status(ST0_IM, IE_IRQ4 | IE_IRQ3 | IE_IRQ2 | IE_IRQ1); |
95 | } | 95 | } |
96 | 96 | ||
97 | static void loc_call(unsigned int irq, struct pt_regs *regs, unsigned int mask) | 97 | static void loc_call(unsigned int irq, unsigned int mask) |
98 | { | 98 | { |
99 | r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, | 99 | r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, |
100 | r4030_read_reg16(JAZZ_IO_IRQ_ENABLE) & mask); | 100 | r4030_read_reg16(JAZZ_IO_IRQ_ENABLE) & mask); |
101 | do_IRQ(irq, regs); | 101 | do_IRQ(irq); |
102 | r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, | 102 | r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, |
103 | r4030_read_reg16(JAZZ_IO_IRQ_ENABLE) | mask); | 103 | r4030_read_reg16(JAZZ_IO_IRQ_ENABLE) | mask); |
104 | } | 104 | } |
105 | 105 | ||
106 | static void ll_local_dev(struct pt_regs *regs) | 106 | static void ll_local_dev(void) |
107 | { | 107 | { |
108 | switch (r4030_read_reg32(JAZZ_IO_IRQ_SOURCE)) { | 108 | switch (r4030_read_reg32(JAZZ_IO_IRQ_SOURCE)) { |
109 | case 0: | 109 | case 0: |
110 | panic("Unimplemented loc_no_irq handler"); | 110 | panic("Unimplemented loc_no_irq handler"); |
111 | break; | 111 | break; |
112 | case 4: | 112 | case 4: |
113 | loc_call(JAZZ_PARALLEL_IRQ, regs, JAZZ_IE_PARALLEL); | 113 | loc_call(JAZZ_PARALLEL_IRQ, JAZZ_IE_PARALLEL); |
114 | break; | 114 | break; |
115 | case 8: | 115 | case 8: |
116 | loc_call(JAZZ_PARALLEL_IRQ, regs, JAZZ_IE_FLOPPY); | 116 | loc_call(JAZZ_PARALLEL_IRQ, JAZZ_IE_FLOPPY); |
117 | break; | 117 | break; |
118 | case 12: | 118 | case 12: |
119 | panic("Unimplemented loc_sound handler"); | 119 | panic("Unimplemented loc_sound handler"); |
@@ -122,27 +122,27 @@ static void ll_local_dev(struct pt_regs *regs) | |||
122 | panic("Unimplemented loc_video handler"); | 122 | panic("Unimplemented loc_video handler"); |
123 | break; | 123 | break; |
124 | case 20: | 124 | case 20: |
125 | loc_call(JAZZ_ETHERNET_IRQ, regs, JAZZ_IE_ETHERNET); | 125 | loc_call(JAZZ_ETHERNET_IRQ, JAZZ_IE_ETHERNET); |
126 | break; | 126 | break; |
127 | case 24: | 127 | case 24: |
128 | loc_call(JAZZ_SCSI_IRQ, regs, JAZZ_IE_SCSI); | 128 | loc_call(JAZZ_SCSI_IRQ, JAZZ_IE_SCSI); |
129 | break; | 129 | break; |
130 | case 28: | 130 | case 28: |
131 | loc_call(JAZZ_KEYBOARD_IRQ, regs, JAZZ_IE_KEYBOARD); | 131 | loc_call(JAZZ_KEYBOARD_IRQ, JAZZ_IE_KEYBOARD); |
132 | break; | 132 | break; |
133 | case 32: | 133 | case 32: |
134 | loc_call(JAZZ_MOUSE_IRQ, regs, JAZZ_IE_MOUSE); | 134 | loc_call(JAZZ_MOUSE_IRQ, JAZZ_IE_MOUSE); |
135 | break; | 135 | break; |
136 | case 36: | 136 | case 36: |
137 | loc_call(JAZZ_SERIAL1_IRQ, regs, JAZZ_IE_SERIAL1); | 137 | loc_call(JAZZ_SERIAL1_IRQ, JAZZ_IE_SERIAL1); |
138 | break; | 138 | break; |
139 | case 40: | 139 | case 40: |
140 | loc_call(JAZZ_SERIAL2_IRQ, regs, JAZZ_IE_SERIAL2); | 140 | loc_call(JAZZ_SERIAL2_IRQ, JAZZ_IE_SERIAL2); |
141 | break; | 141 | break; |
142 | } | 142 | } |
143 | } | 143 | } |
144 | 144 | ||
145 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 145 | asmlinkage void plat_irq_dispatch(void) |
146 | { | 146 | { |
147 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; | 147 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; |
148 | 148 | ||
@@ -150,13 +150,13 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
150 | write_c0_compare(0); | 150 | write_c0_compare(0); |
151 | else if (pending & IE_IRQ4) { | 151 | else if (pending & IE_IRQ4) { |
152 | r4030_read_reg32(JAZZ_TIMER_REGISTER); | 152 | r4030_read_reg32(JAZZ_TIMER_REGISTER); |
153 | do_IRQ(JAZZ_TIMER_IRQ, regs); | 153 | do_IRQ(JAZZ_TIMER_IRQ); |
154 | } else if (pending & IE_IRQ3) | 154 | } else if (pending & IE_IRQ3) |
155 | panic("Unimplemented ISA NMI handler"); | 155 | panic("Unimplemented ISA NMI handler"); |
156 | else if (pending & IE_IRQ2) | 156 | else if (pending & IE_IRQ2) |
157 | do_IRQ(r4030_read_reg32(JAZZ_EISA_IRQ_ACK), regs); | 157 | do_IRQ(r4030_read_reg32(JAZZ_EISA_IRQ_ACK)); |
158 | else if (pending & IE_IRQ1) { | 158 | else if (pending & IE_IRQ1) { |
159 | ll_local_dev(regs); | 159 | ll_local_dev(); |
160 | } else if (unlikely(pending & IE_IRQ0)) | 160 | } else if (unlikely(pending & IE_IRQ0)) |
161 | panic("Unimplemented local_dma handler"); | 161 | panic("Unimplemented local_dma handler"); |
162 | else if (pending & IE_SW1) { | 162 | else if (pending & IE_SW1) { |
diff --git a/arch/mips/jazz/setup.c b/arch/mips/jazz/setup.c index 487a9ea1ef00..6dc4135d6e11 100644 --- a/arch/mips/jazz/setup.c +++ b/arch/mips/jazz/setup.c | |||
@@ -19,12 +19,12 @@ | |||
19 | #include <linux/fb.h> | 19 | #include <linux/fb.h> |
20 | #include <linux/ide.h> | 20 | #include <linux/ide.h> |
21 | #include <linux/pm.h> | 21 | #include <linux/pm.h> |
22 | #include <linux/screen_info.h> | ||
22 | 23 | ||
23 | #include <asm/bootinfo.h> | 24 | #include <asm/bootinfo.h> |
24 | #include <asm/irq.h> | 25 | #include <asm/irq.h> |
25 | #include <asm/jazz.h> | 26 | #include <asm/jazz.h> |
26 | #include <asm/jazzdma.h> | 27 | #include <asm/jazzdma.h> |
27 | #include <asm/ptrace.h> | ||
28 | #include <asm/reboot.h> | 28 | #include <asm/reboot.h> |
29 | #include <asm/io.h> | 29 | #include <asm/io.h> |
30 | #include <asm/pgtable.h> | 30 | #include <asm/pgtable.h> |
@@ -45,10 +45,27 @@ void __init plat_time_init(struct irqaction *irq) | |||
45 | } | 45 | } |
46 | 46 | ||
47 | static struct resource jazz_io_resources[] = { | 47 | static struct resource jazz_io_resources[] = { |
48 | { "dma1", 0x00, 0x1f, IORESOURCE_BUSY }, | 48 | { |
49 | { "timer", 0x40, 0x5f, IORESOURCE_BUSY }, | 49 | .start = 0x00, |
50 | { "dma page reg", 0x80, 0x8f, IORESOURCE_BUSY }, | 50 | .end = 0x1f, |
51 | { "dma2", 0xc0, 0xdf, IORESOURCE_BUSY }, | 51 | .name = "dma1", |
52 | .flags = IORESOURCE_BUSY | ||
53 | }, { | ||
54 | .start = 0x40, | ||
55 | .end = 0x5f, | ||
56 | .name = "timer", | ||
57 | .end = IORESOURCE_BUSY | ||
58 | }, { | ||
59 | .start = 0x80, | ||
60 | .end = 0x8f, | ||
61 | .name = "dma page reg", | ||
62 | .flags = IORESOURCE_BUSY | ||
63 | }, { | ||
64 | .start = 0xc0, | ||
65 | .end = 0xdf, | ||
66 | .name = "dma2", | ||
67 | .flags = IORESOURCE_BUSY | ||
68 | } | ||
52 | }; | 69 | }; |
53 | 70 | ||
54 | void __init plat_mem_setup(void) | 71 | void __init plat_mem_setup(void) |
@@ -81,8 +98,6 @@ void __init plat_mem_setup(void) | |||
81 | _machine_halt = jazz_machine_halt; | 98 | _machine_halt = jazz_machine_halt; |
82 | pm_power_off = jazz_machine_power_off; | 99 | pm_power_off = jazz_machine_power_off; |
83 | 100 | ||
84 | #warning "Somebody should check if screen_info is ok for Jazz." | ||
85 | |||
86 | screen_info = (struct screen_info) { | 101 | screen_info = (struct screen_info) { |
87 | 0, 0, /* orig-x, orig-y */ | 102 | 0, 0, /* orig-x, orig-y */ |
88 | 0, /* unused */ | 103 | 0, /* unused */ |
diff --git a/arch/mips/jmr3927/rbhma3100/irq.c b/arch/mips/jmr3927/rbhma3100/irq.c index 722174481467..39a0243bed9a 100644 --- a/arch/mips/jmr3927/rbhma3100/irq.c +++ b/arch/mips/jmr3927/rbhma3100/irq.c | |||
@@ -46,6 +46,7 @@ | |||
46 | #include <linux/smp_lock.h> | 46 | #include <linux/smp_lock.h> |
47 | #include <linux/bitops.h> | 47 | #include <linux/bitops.h> |
48 | 48 | ||
49 | #include <asm/irq_regs.h> | ||
49 | #include <asm/io.h> | 50 | #include <asm/io.h> |
50 | #include <asm/mipsregs.h> | 51 | #include <asm/mipsregs.h> |
51 | #include <asm/system.h> | 52 | #include <asm/system.h> |
@@ -239,45 +240,80 @@ struct tb_irq_space jmr3927_ioc_irqspace = { | |||
239 | .space_id = 0, | 240 | .space_id = 0, |
240 | can_share : 1 | 241 | can_share : 1 |
241 | }; | 242 | }; |
243 | |||
242 | struct tb_irq_space jmr3927_irc_irqspace = { | 244 | struct tb_irq_space jmr3927_irc_irqspace = { |
243 | .next = NULL, | 245 | .next = NULL, |
244 | .start_irqno = JMR3927_IRQ_IRC, | 246 | .start_irqno = JMR3927_IRQ_IRC, |
245 | nr_irqs : JMR3927_NR_IRQ_IRC, | 247 | .nr_irqs = JMR3927_NR_IRQ_IRC, |
246 | .mask_func = mask_irq_irc, | 248 | .mask_func = mask_irq_irc, |
247 | .unmask_func = unmask_irq_irc, | 249 | .unmask_func = unmask_irq_irc, |
248 | .name = "on-chip", | 250 | .name = "on-chip", |
249 | .space_id = 0, | 251 | .space_id = 0, |
250 | can_share : 0 | 252 | .can_share = 0 |
251 | }; | 253 | }; |
252 | 254 | ||
253 | void jmr3927_spurious(struct pt_regs *regs) | 255 | |
256 | #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND | ||
257 | static int tx_branch_likely_bug_count = 0; | ||
258 | static int have_tx_branch_likely_bug = 0; | ||
259 | |||
260 | static void tx_branch_likely_bug_fixup(void) | ||
261 | { | ||
262 | struct pt_regs *regs = get_irq_regs(); | ||
263 | |||
264 | /* TX39/49-BUG: Under this condition, the insn in delay slot | ||
265 | of the branch likely insn is executed (not nullified) even | ||
266 | the branch condition is false. */ | ||
267 | if (!have_tx_branch_likely_bug) | ||
268 | return; | ||
269 | if ((regs->cp0_epc & 0xfff) == 0xffc && | ||
270 | KSEGX(regs->cp0_epc) != KSEG0 && | ||
271 | KSEGX(regs->cp0_epc) != KSEG1) { | ||
272 | unsigned int insn = *(unsigned int*)(regs->cp0_epc - 4); | ||
273 | /* beql,bnel,blezl,bgtzl */ | ||
274 | /* bltzl,bgezl,blezall,bgezall */ | ||
275 | /* bczfl, bcztl */ | ||
276 | if ((insn & 0xf0000000) == 0x50000000 || | ||
277 | (insn & 0xfc0e0000) == 0x04020000 || | ||
278 | (insn & 0xf3fe0000) == 0x41020000) { | ||
279 | regs->cp0_epc -= 4; | ||
280 | tx_branch_likely_bug_count++; | ||
281 | printk(KERN_INFO | ||
282 | "fix branch-likery bug in %s (insn %08x)\n", | ||
283 | current->comm, insn); | ||
284 | } | ||
285 | } | ||
286 | } | ||
287 | #endif | ||
288 | |||
289 | static void jmr3927_spurious(void) | ||
254 | { | 290 | { |
255 | #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND | 291 | #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND |
256 | tx_branch_likely_bug_fixup(regs); | 292 | tx_branch_likely_bug_fixup(); |
257 | #endif | 293 | #endif |
258 | printk(KERN_WARNING "spurious interrupt (cause 0x%lx, pc 0x%lx, ra 0x%lx).\n", | 294 | printk(KERN_WARNING "spurious interrupt (cause 0x%lx, pc 0x%lx, ra 0x%lx).\n", |
259 | regs->cp0_cause, regs->cp0_epc, regs->regs[31]); | 295 | regs->cp0_cause, regs->cp0_epc, regs->regs[31]); |
260 | } | 296 | } |
261 | 297 | ||
262 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 298 | asmlinkage void plat_irq_dispatch(void) |
263 | { | 299 | { |
264 | int irq; | 300 | int irq; |
265 | 301 | ||
266 | #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND | 302 | #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND |
267 | tx_branch_likely_bug_fixup(regs); | 303 | tx_branch_likely_bug_fixup(); |
268 | #endif | 304 | #endif |
269 | if ((regs->cp0_cause & CAUSEF_IP7) == 0) { | 305 | if ((regs->cp0_cause & CAUSEF_IP7) == 0) { |
270 | #if 0 | 306 | #if 0 |
271 | jmr3927_spurious(regs); | 307 | jmr3927_spurious(); |
272 | #endif | 308 | #endif |
273 | return; | 309 | return; |
274 | } | 310 | } |
275 | irq = (regs->cp0_cause >> CAUSEB_IP2) & 0x0f; | 311 | irq = (regs->cp0_cause >> CAUSEB_IP2) & 0x0f; |
276 | 312 | ||
277 | do_IRQ(irq + JMR3927_IRQ_IRC, regs); | 313 | do_IRQ(irq + JMR3927_IRQ_IRC); |
278 | } | 314 | } |
279 | 315 | ||
280 | static irqreturn_t jmr3927_ioc_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 316 | static irqreturn_t jmr3927_ioc_interrupt(int irq, void *dev_id) |
281 | { | 317 | { |
282 | unsigned char istat = jmr3927_ioc_reg_in(JMR3927_IOC_INTS2_ADDR); | 318 | unsigned char istat = jmr3927_ioc_reg_in(JMR3927_IOC_INTS2_ADDR); |
283 | int i; | 319 | int i; |
@@ -285,7 +321,7 @@ static irqreturn_t jmr3927_ioc_interrupt(int irq, void *dev_id, struct pt_regs * | |||
285 | for (i = 0; i < JMR3927_NR_IRQ_IOC; i++) { | 321 | for (i = 0; i < JMR3927_NR_IRQ_IOC; i++) { |
286 | if (istat & (1 << i)) { | 322 | if (istat & (1 << i)) { |
287 | irq = JMR3927_IRQ_IOC + i; | 323 | irq = JMR3927_IRQ_IOC + i; |
288 | do_IRQ(irq, regs); | 324 | do_IRQ(irq); |
289 | } | 325 | } |
290 | } | 326 | } |
291 | return IRQ_HANDLED; | 327 | return IRQ_HANDLED; |
@@ -295,7 +331,7 @@ static struct irqaction ioc_action = { | |||
295 | jmr3927_ioc_interrupt, 0, CPU_MASK_NONE, "IOC", NULL, NULL, | 331 | jmr3927_ioc_interrupt, 0, CPU_MASK_NONE, "IOC", NULL, NULL, |
296 | }; | 332 | }; |
297 | 333 | ||
298 | static irqreturn_t jmr3927_isac_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 334 | static irqreturn_t jmr3927_isac_interrupt(int irq, void *dev_id) |
299 | { | 335 | { |
300 | unsigned char istat = jmr3927_isac_reg_in(JMR3927_ISAC_INTS2_ADDR); | 336 | unsigned char istat = jmr3927_isac_reg_in(JMR3927_ISAC_INTS2_ADDR); |
301 | int i; | 337 | int i; |
@@ -303,7 +339,7 @@ static irqreturn_t jmr3927_isac_interrupt(int irq, void *dev_id, struct pt_regs | |||
303 | for (i = 0; i < JMR3927_NR_IRQ_ISAC; i++) { | 339 | for (i = 0; i < JMR3927_NR_IRQ_ISAC; i++) { |
304 | if (istat & (1 << i)) { | 340 | if (istat & (1 << i)) { |
305 | irq = JMR3927_IRQ_ISAC + i; | 341 | irq = JMR3927_IRQ_ISAC + i; |
306 | do_IRQ(irq, regs); | 342 | do_IRQ(irq); |
307 | } | 343 | } |
308 | } | 344 | } |
309 | return IRQ_HANDLED; | 345 | return IRQ_HANDLED; |
@@ -314,7 +350,7 @@ static struct irqaction isac_action = { | |||
314 | }; | 350 | }; |
315 | 351 | ||
316 | 352 | ||
317 | static irqreturn_t jmr3927_isaerr_interrupt(int irq, void * dev_id, struct pt_regs * regs) | 353 | static irqreturn_t jmr3927_isaerr_interrupt(int irq, void *dev_id) |
318 | { | 354 | { |
319 | printk(KERN_WARNING "ISA error interrupt (irq 0x%x).\n", irq); | 355 | printk(KERN_WARNING "ISA error interrupt (irq 0x%x).\n", irq); |
320 | 356 | ||
@@ -324,7 +360,7 @@ static struct irqaction isaerr_action = { | |||
324 | jmr3927_isaerr_interrupt, 0, CPU_MASK_NONE, "ISA error", NULL, NULL, | 360 | jmr3927_isaerr_interrupt, 0, CPU_MASK_NONE, "ISA error", NULL, NULL, |
325 | }; | 361 | }; |
326 | 362 | ||
327 | static irqreturn_t jmr3927_pcierr_interrupt(int irq, void * dev_id, struct pt_regs * regs) | 363 | static irqreturn_t jmr3927_pcierr_interrupt(int irq, void *dev_id) |
328 | { | 364 | { |
329 | printk(KERN_WARNING "PCI error interrupt (irq 0x%x).\n", irq); | 365 | printk(KERN_WARNING "PCI error interrupt (irq 0x%x).\n", irq); |
330 | printk(KERN_WARNING "pcistat:%02x, lbstat:%04lx\n", | 366 | printk(KERN_WARNING "pcistat:%02x, lbstat:%04lx\n", |
@@ -439,33 +475,3 @@ void jmr3927_irq_init(u32 irq_base) | |||
439 | 475 | ||
440 | jmr3927_irq_base = irq_base; | 476 | jmr3927_irq_base = irq_base; |
441 | } | 477 | } |
442 | |||
443 | #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND | ||
444 | static int tx_branch_likely_bug_count = 0; | ||
445 | static int have_tx_branch_likely_bug = 0; | ||
446 | void tx_branch_likely_bug_fixup(struct pt_regs *regs) | ||
447 | { | ||
448 | /* TX39/49-BUG: Under this condition, the insn in delay slot | ||
449 | of the branch likely insn is executed (not nullified) even | ||
450 | the branch condition is false. */ | ||
451 | if (!have_tx_branch_likely_bug) | ||
452 | return; | ||
453 | if ((regs->cp0_epc & 0xfff) == 0xffc && | ||
454 | KSEGX(regs->cp0_epc) != KSEG0 && | ||
455 | KSEGX(regs->cp0_epc) != KSEG1) { | ||
456 | unsigned int insn = *(unsigned int*)(regs->cp0_epc - 4); | ||
457 | /* beql,bnel,blezl,bgtzl */ | ||
458 | /* bltzl,bgezl,blezall,bgezall */ | ||
459 | /* bczfl, bcztl */ | ||
460 | if ((insn & 0xf0000000) == 0x50000000 || | ||
461 | (insn & 0xfc0e0000) == 0x04020000 || | ||
462 | (insn & 0xf3fe0000) == 0x41020000) { | ||
463 | regs->cp0_epc -= 4; | ||
464 | tx_branch_likely_bug_count++; | ||
465 | printk(KERN_INFO | ||
466 | "fix branch-likery bug in %s (insn %08x)\n", | ||
467 | current->comm, insn); | ||
468 | } | ||
469 | } | ||
470 | } | ||
471 | #endif | ||
diff --git a/arch/mips/kernel/asm-offsets.c b/arch/mips/kernel/asm-offsets.c index ec28077d5ee2..e9ce5b3721af 100644 --- a/arch/mips/kernel/asm-offsets.c +++ b/arch/mips/kernel/asm-offsets.c | |||
@@ -93,11 +93,12 @@ void output_thread_info_defines(void) | |||
93 | offset("#define TI_TASK ", struct thread_info, task); | 93 | offset("#define TI_TASK ", struct thread_info, task); |
94 | offset("#define TI_EXEC_DOMAIN ", struct thread_info, exec_domain); | 94 | offset("#define TI_EXEC_DOMAIN ", struct thread_info, exec_domain); |
95 | offset("#define TI_FLAGS ", struct thread_info, flags); | 95 | offset("#define TI_FLAGS ", struct thread_info, flags); |
96 | offset("#define TI_TP_VALUE ", struct thread_info, tp_value); | ||
96 | offset("#define TI_CPU ", struct thread_info, cpu); | 97 | offset("#define TI_CPU ", struct thread_info, cpu); |
97 | offset("#define TI_PRE_COUNT ", struct thread_info, preempt_count); | 98 | offset("#define TI_PRE_COUNT ", struct thread_info, preempt_count); |
98 | offset("#define TI_ADDR_LIMIT ", struct thread_info, addr_limit); | 99 | offset("#define TI_ADDR_LIMIT ", struct thread_info, addr_limit); |
99 | offset("#define TI_RESTART_BLOCK ", struct thread_info, restart_block); | 100 | offset("#define TI_RESTART_BLOCK ", struct thread_info, restart_block); |
100 | offset("#define TI_TP_VALUE ", struct thread_info, tp_value); | 101 | offset("#define TI_REGS ", struct thread_info, regs); |
101 | constant("#define _THREAD_SIZE_ORDER ", THREAD_SIZE_ORDER); | 102 | constant("#define _THREAD_SIZE_ORDER ", THREAD_SIZE_ORDER); |
102 | constant("#define _THREAD_SIZE ", THREAD_SIZE); | 103 | constant("#define _THREAD_SIZE ", THREAD_SIZE); |
103 | constant("#define _THREAD_MASK ", THREAD_MASK); | 104 | constant("#define _THREAD_MASK ", THREAD_MASK); |
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index 9fbf8430c849..8485af340ee1 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
@@ -135,7 +135,6 @@ static inline void check_wait(void) | |||
135 | case CPU_R5000: | 135 | case CPU_R5000: |
136 | case CPU_NEVADA: | 136 | case CPU_NEVADA: |
137 | case CPU_RM7000: | 137 | case CPU_RM7000: |
138 | case CPU_RM9000: | ||
139 | case CPU_4KC: | 138 | case CPU_4KC: |
140 | case CPU_4KEC: | 139 | case CPU_4KEC: |
141 | case CPU_4KSC: | 140 | case CPU_4KSC: |
@@ -164,6 +163,14 @@ static inline void check_wait(void) | |||
164 | } else | 163 | } else |
165 | printk(" unavailable.\n"); | 164 | printk(" unavailable.\n"); |
166 | break; | 165 | break; |
166 | case CPU_RM9000: | ||
167 | if ((c->processor_id & 0x00ff) >= 0x40) { | ||
168 | cpu_wait = r4k_wait; | ||
169 | printk(" available.\n"); | ||
170 | } else { | ||
171 | printk(" unavailable.\n"); | ||
172 | } | ||
173 | break; | ||
167 | default: | 174 | default: |
168 | printk(" unavailable.\n"); | 175 | printk(" unavailable.\n"); |
169 | break; | 176 | break; |
diff --git a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S index 766655f35250..417c08ac76eb 100644 --- a/arch/mips/kernel/entry.S +++ b/arch/mips/kernel/entry.S | |||
@@ -20,10 +20,7 @@ | |||
20 | #include <asm/mipsmtregs.h> | 20 | #include <asm/mipsmtregs.h> |
21 | #endif | 21 | #endif |
22 | 22 | ||
23 | #ifdef CONFIG_PREEMPT | 23 | #ifndef CONFIG_PREEMPT |
24 | .macro preempt_stop | ||
25 | .endm | ||
26 | #else | ||
27 | .macro preempt_stop | 24 | .macro preempt_stop |
28 | local_irq_disable | 25 | local_irq_disable |
29 | .endm | 26 | .endm |
@@ -32,9 +29,16 @@ | |||
32 | 29 | ||
33 | .text | 30 | .text |
34 | .align 5 | 31 | .align 5 |
32 | FEXPORT(ret_from_irq) | ||
33 | LONG_S s0, TI_REGS($28) | ||
34 | #ifdef CONFIG_PREEMPT | ||
35 | FEXPORT(ret_from_exception) | ||
36 | #else | ||
37 | b _ret_from_irq | ||
35 | FEXPORT(ret_from_exception) | 38 | FEXPORT(ret_from_exception) |
36 | preempt_stop | 39 | preempt_stop |
37 | FEXPORT(ret_from_irq) | 40 | #endif |
41 | FEXPORT(_ret_from_irq) | ||
38 | LONG_L t0, PT_STATUS(sp) # returning to kernel mode? | 42 | LONG_L t0, PT_STATUS(sp) # returning to kernel mode? |
39 | andi t0, t0, KU_USER | 43 | andi t0, t0, KU_USER |
40 | beqz t0, resume_kernel | 44 | beqz t0, resume_kernel |
@@ -79,7 +83,6 @@ FEXPORT(syscall_exit) | |||
79 | FEXPORT(restore_all) # restore full frame | 83 | FEXPORT(restore_all) # restore full frame |
80 | #ifdef CONFIG_MIPS_MT_SMTC | 84 | #ifdef CONFIG_MIPS_MT_SMTC |
81 | /* Detect and execute deferred IPI "interrupts" */ | 85 | /* Detect and execute deferred IPI "interrupts" */ |
82 | move a0,sp | ||
83 | jal deferred_smtc_ipi | 86 | jal deferred_smtc_ipi |
84 | /* Re-arm any temporarily masked interrupts not explicitly "acked" */ | 87 | /* Re-arm any temporarily masked interrupts not explicitly "acked" */ |
85 | mfc0 v0, CP0_TCSTATUS | 88 | mfc0 v0, CP0_TCSTATUS |
diff --git a/arch/mips/kernel/genex.S b/arch/mips/kernel/genex.S index af6ef2fd8300..5baca16993d0 100644 --- a/arch/mips/kernel/genex.S +++ b/arch/mips/kernel/genex.S | |||
@@ -131,8 +131,9 @@ NESTED(handle_int, PT_SIZE, sp) | |||
131 | CLI | 131 | CLI |
132 | TRACE_IRQS_OFF | 132 | TRACE_IRQS_OFF |
133 | 133 | ||
134 | LONG_L s0, TI_REGS($28) | ||
135 | LONG_S sp, TI_REGS($28) | ||
134 | PTR_LA ra, ret_from_irq | 136 | PTR_LA ra, ret_from_irq |
135 | move a0, sp | ||
136 | j plat_irq_dispatch | 137 | j plat_irq_dispatch |
137 | END(handle_int) | 138 | END(handle_int) |
138 | 139 | ||
@@ -219,7 +220,9 @@ NESTED(except_vec_vi_handler, 0, sp) | |||
219 | #endif /* CONFIG_MIPS_MT_SMTC */ | 220 | #endif /* CONFIG_MIPS_MT_SMTC */ |
220 | CLI | 221 | CLI |
221 | TRACE_IRQS_OFF | 222 | TRACE_IRQS_OFF |
222 | move a0, sp | 223 | |
224 | LONG_L s0, TI_REGS($28) | ||
225 | LONG_S sp, TI_REGS($28) | ||
223 | PTR_LA ra, ret_from_irq | 226 | PTR_LA ra, ret_from_irq |
224 | jr v0 | 227 | jr v0 |
225 | END(except_vec_vi_handler) | 228 | END(except_vec_vi_handler) |
diff --git a/arch/mips/kernel/irq-msc01.c b/arch/mips/kernel/irq-msc01.c index 63dfeb41796b..650a80ca3741 100644 --- a/arch/mips/kernel/irq-msc01.c +++ b/arch/mips/kernel/irq-msc01.c | |||
@@ -1,16 +1,17 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2004 MIPS Inc | ||
3 | * Author: chris@mips.com | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | 2 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms of the GNU General Public License as published by the | 3 | * under the terms of the GNU General Public License as published by the |
7 | * Free Software Foundation; either version 2 of the License, or (at your | 4 | * Free Software Foundation; either version 2 of the License, or (at your |
8 | * option) any later version. | 5 | * option) any later version. |
6 | * | ||
7 | * Copyright (c) 2004 MIPS Inc | ||
8 | * Author: chris@mips.com | ||
9 | * | ||
10 | * Copyright (C) 2004, 06 Ralf Baechle <ralf@linux-mips.org> | ||
9 | */ | 11 | */ |
10 | #include <linux/module.h> | 12 | #include <linux/module.h> |
11 | #include <linux/interrupt.h> | 13 | #include <linux/interrupt.h> |
12 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
13 | #include <asm/ptrace.h> | ||
14 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
15 | #include <linux/kernel_stat.h> | 16 | #include <linux/kernel_stat.h> |
16 | #include <asm/io.h> | 17 | #include <asm/io.h> |
@@ -115,14 +116,14 @@ static void end_msc_irq(unsigned int irq) | |||
115 | /* | 116 | /* |
116 | * Interrupt handler for interrupts coming from SOC-it. | 117 | * Interrupt handler for interrupts coming from SOC-it. |
117 | */ | 118 | */ |
118 | void ll_msc_irq(struct pt_regs *regs) | 119 | void ll_msc_irq(void) |
119 | { | 120 | { |
120 | unsigned int irq; | 121 | unsigned int irq; |
121 | 122 | ||
122 | /* read the interrupt vector register */ | 123 | /* read the interrupt vector register */ |
123 | MSCIC_READ(MSC01_IC_VEC, irq); | 124 | MSCIC_READ(MSC01_IC_VEC, irq); |
124 | if (irq < 64) | 125 | if (irq < 64) |
125 | do_IRQ(irq + irq_base, regs); | 126 | do_IRQ(irq + irq_base); |
126 | else { | 127 | else { |
127 | /* Ignore spurious interrupt */ | 128 | /* Ignore spurious interrupt */ |
128 | } | 129 | } |
diff --git a/arch/mips/kernel/irq-mv6434x.c b/arch/mips/kernel/irq-mv6434x.c index b117e64da64d..37d106202b83 100644 --- a/arch/mips/kernel/irq-mv6434x.c +++ b/arch/mips/kernel/irq-mv6434x.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright 2002 Momentum Computer | 2 | * Copyright 2002 Momentum Computer |
3 | * Author: mdharm@momenco.com | 3 | * Author: mdharm@momenco.com |
4 | * Copyright (C) 2004 Ralf Baechle <ralf@linux-mips.org> | 4 | * Copyright (C) 2004, 06 Ralf Baechle <ralf@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify it | 6 | * This program is free software; you can redistribute it and/or modify it |
7 | * under the terms of the GNU General Public License as published by the | 7 | * under the terms of the GNU General Public License as published by the |
@@ -15,7 +15,6 @@ | |||
15 | #include <linux/mv643xx.h> | 15 | #include <linux/mv643xx.h> |
16 | #include <linux/sched.h> | 16 | #include <linux/sched.h> |
17 | 17 | ||
18 | #include <asm/ptrace.h> | ||
19 | #include <asm/io.h> | 18 | #include <asm/io.h> |
20 | #include <asm/irq.h> | 19 | #include <asm/irq.h> |
21 | #include <asm/marvell.h> | 20 | #include <asm/marvell.h> |
@@ -113,7 +112,7 @@ static void end_mv64340_irq(unsigned int irq) | |||
113 | * Interrupt handler for interrupts coming from the Marvell chip. | 112 | * Interrupt handler for interrupts coming from the Marvell chip. |
114 | * It could be built in ethernet ports etc... | 113 | * It could be built in ethernet ports etc... |
115 | */ | 114 | */ |
116 | void ll_mv64340_irq(struct pt_regs *regs) | 115 | void ll_mv64340_irq(void) |
117 | { | 116 | { |
118 | unsigned int irq_src_low, irq_src_high; | 117 | unsigned int irq_src_low, irq_src_high; |
119 | unsigned int irq_mask_low, irq_mask_high; | 118 | unsigned int irq_mask_low, irq_mask_high; |
@@ -129,9 +128,9 @@ void ll_mv64340_irq(struct pt_regs *regs) | |||
129 | irq_src_high &= irq_mask_high; | 128 | irq_src_high &= irq_mask_high; |
130 | 129 | ||
131 | if (irq_src_low) | 130 | if (irq_src_low) |
132 | do_IRQ(ls1bit32(irq_src_low) + irq_base, regs); | 131 | do_IRQ(ls1bit32(irq_src_low) + irq_base); |
133 | else | 132 | else |
134 | do_IRQ(ls1bit32(irq_src_high) + irq_base + 32, regs); | 133 | do_IRQ(ls1bit32(irq_src_high) + irq_base + 32); |
135 | } | 134 | } |
136 | 135 | ||
137 | #define shutdown_mv64340_irq disable_mv64340_irq | 136 | #define shutdown_mv64340_irq disable_mv64340_irq |
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c index a00b0e7ab9b1..dd24434392b6 100644 --- a/arch/mips/kernel/irq.c +++ b/arch/mips/kernel/irq.c | |||
@@ -53,9 +53,8 @@ unsigned long irq_hwmask[NR_IRQS]; | |||
53 | * SMP cross-CPU interrupts have their own specific | 53 | * SMP cross-CPU interrupts have their own specific |
54 | * handlers). | 54 | * handlers). |
55 | */ | 55 | */ |
56 | asmlinkage unsigned int do_IRQ(unsigned int irq, struct pt_regs *regs) | 56 | asmlinkage unsigned int do_IRQ(unsigned int irq) |
57 | { | 57 | { |
58 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
59 | irq_enter(); | 58 | irq_enter(); |
60 | 59 | ||
61 | __DO_IRQ_SMTC_HOOK(); | 60 | __DO_IRQ_SMTC_HOOK(); |
@@ -63,7 +62,6 @@ asmlinkage unsigned int do_IRQ(unsigned int irq, struct pt_regs *regs) | |||
63 | 62 | ||
64 | irq_exit(); | 63 | irq_exit(); |
65 | 64 | ||
66 | set_irq_regs(old_regs); | ||
67 | return 1; | 65 | return 1; |
68 | } | 66 | } |
69 | 67 | ||
@@ -112,7 +110,7 @@ skip: | |||
112 | return 0; | 110 | return 0; |
113 | } | 111 | } |
114 | 112 | ||
115 | asmlinkage void spurious_interrupt(struct pt_regs *regs) | 113 | asmlinkage void spurious_interrupt(void) |
116 | { | 114 | { |
117 | atomic_inc(&irq_err_count); | 115 | atomic_inc(&irq_err_count); |
118 | } | 116 | } |
diff --git a/arch/mips/kernel/proc.c b/arch/mips/kernel/proc.c index d8beef107902..4ed37ba19731 100644 --- a/arch/mips/kernel/proc.c +++ b/arch/mips/kernel/proc.c | |||
@@ -89,9 +89,9 @@ static const char *cpu_name[] = { | |||
89 | 89 | ||
90 | static int show_cpuinfo(struct seq_file *m, void *v) | 90 | static int show_cpuinfo(struct seq_file *m, void *v) |
91 | { | 91 | { |
92 | unsigned int version = current_cpu_data.processor_id; | ||
93 | unsigned int fp_vers = current_cpu_data.fpu_id; | ||
94 | unsigned long n = (unsigned long) v - 1; | 92 | unsigned long n = (unsigned long) v - 1; |
93 | unsigned int version = cpu_data[n].processor_id; | ||
94 | unsigned int fp_vers = cpu_data[n].fpu_id; | ||
95 | char fmt [64]; | 95 | char fmt [64]; |
96 | 96 | ||
97 | #ifdef CONFIG_SMP | 97 | #ifdef CONFIG_SMP |
@@ -107,9 +107,9 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
107 | 107 | ||
108 | seq_printf(m, "processor\t\t: %ld\n", n); | 108 | seq_printf(m, "processor\t\t: %ld\n", n); |
109 | sprintf(fmt, "cpu model\t\t: %%s V%%d.%%d%s\n", | 109 | sprintf(fmt, "cpu model\t\t: %%s V%%d.%%d%s\n", |
110 | cpu_has_fpu ? " FPU V%d.%d" : ""); | 110 | cpu_data[n].options & MIPS_CPU_FPU ? " FPU V%d.%d" : ""); |
111 | seq_printf(m, fmt, cpu_name[current_cpu_data.cputype <= CPU_LAST ? | 111 | seq_printf(m, fmt, cpu_name[cpu_data[n].cputype <= CPU_LAST ? |
112 | current_cpu_data.cputype : CPU_UNKNOWN], | 112 | cpu_data[n].cputype : CPU_UNKNOWN], |
113 | (version >> 4) & 0x0f, version & 0x0f, | 113 | (version >> 4) & 0x0f, version & 0x0f, |
114 | (fp_vers >> 4) & 0x0f, fp_vers & 0x0f); | 114 | (fp_vers >> 4) & 0x0f, fp_vers & 0x0f); |
115 | seq_printf(m, "BogoMIPS\t\t: %lu.%02lu\n", | 115 | seq_printf(m, "BogoMIPS\t\t: %lu.%02lu\n", |
@@ -118,7 +118,7 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
118 | seq_printf(m, "wait instruction\t: %s\n", cpu_wait ? "yes" : "no"); | 118 | seq_printf(m, "wait instruction\t: %s\n", cpu_wait ? "yes" : "no"); |
119 | seq_printf(m, "microsecond timers\t: %s\n", | 119 | seq_printf(m, "microsecond timers\t: %s\n", |
120 | cpu_has_counter ? "yes" : "no"); | 120 | cpu_has_counter ? "yes" : "no"); |
121 | seq_printf(m, "tlb_entries\t\t: %d\n", current_cpu_data.tlbsize); | 121 | seq_printf(m, "tlb_entries\t\t: %d\n", cpu_data[n].tlbsize); |
122 | seq_printf(m, "extra interrupt vector\t: %s\n", | 122 | seq_printf(m, "extra interrupt vector\t: %s\n", |
123 | cpu_has_divec ? "yes" : "no"); | 123 | cpu_has_divec ? "yes" : "no"); |
124 | seq_printf(m, "hardware watchpoint\t: %s\n", | 124 | seq_printf(m, "hardware watchpoint\t: %s\n", |
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index 045d987bc683..9f307eb1a31e 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c | |||
@@ -115,7 +115,7 @@ void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp) | |||
115 | status |= KU_USER; | 115 | status |= KU_USER; |
116 | regs->cp0_status = status; | 116 | regs->cp0_status = status; |
117 | clear_used_math(); | 117 | clear_used_math(); |
118 | lose_fpu(); | 118 | clear_fpu_owner(); |
119 | if (cpu_has_dsp) | 119 | if (cpu_has_dsp) |
120 | __init_dsp(); | 120 | __init_dsp(); |
121 | regs->cp0_epc = pc; | 121 | regs->cp0_epc = pc; |
diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c index 362d1728e531..258d74fd0b63 100644 --- a/arch/mips/kernel/ptrace.c +++ b/arch/mips/kernel/ptrace.c | |||
@@ -106,6 +106,7 @@ int ptrace_setregs (struct task_struct *child, __s64 __user *data) | |||
106 | int ptrace_getfpregs (struct task_struct *child, __u32 __user *data) | 106 | int ptrace_getfpregs (struct task_struct *child, __u32 __user *data) |
107 | { | 107 | { |
108 | int i; | 108 | int i; |
109 | unsigned int tmp; | ||
109 | 110 | ||
110 | if (!access_ok(VERIFY_WRITE, data, 33 * 8)) | 111 | if (!access_ok(VERIFY_WRITE, data, 33 * 8)) |
111 | return -EIO; | 112 | return -EIO; |
@@ -121,10 +122,10 @@ int ptrace_getfpregs (struct task_struct *child, __u32 __user *data) | |||
121 | 122 | ||
122 | __put_user (child->thread.fpu.fcr31, data + 64); | 123 | __put_user (child->thread.fpu.fcr31, data + 64); |
123 | 124 | ||
125 | preempt_disable(); | ||
124 | if (cpu_has_fpu) { | 126 | if (cpu_has_fpu) { |
125 | unsigned int flags, tmp; | 127 | unsigned int flags; |
126 | 128 | ||
127 | preempt_disable(); | ||
128 | if (cpu_has_mipsmt) { | 129 | if (cpu_has_mipsmt) { |
129 | unsigned int vpflags = dvpe(); | 130 | unsigned int vpflags = dvpe(); |
130 | flags = read_c0_status(); | 131 | flags = read_c0_status(); |
@@ -138,11 +139,11 @@ int ptrace_getfpregs (struct task_struct *child, __u32 __user *data) | |||
138 | __asm__ __volatile__("cfc1\t%0,$0" : "=r" (tmp)); | 139 | __asm__ __volatile__("cfc1\t%0,$0" : "=r" (tmp)); |
139 | write_c0_status(flags); | 140 | write_c0_status(flags); |
140 | } | 141 | } |
141 | preempt_enable(); | ||
142 | __put_user (tmp, data + 65); | ||
143 | } else { | 142 | } else { |
144 | __put_user ((__u32) 0, data + 65); | 143 | tmp = 0; |
145 | } | 144 | } |
145 | preempt_enable(); | ||
146 | __put_user (tmp, data + 65); | ||
146 | 147 | ||
147 | return 0; | 148 | return 0; |
148 | } | 149 | } |
@@ -245,16 +246,17 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
245 | unsigned int mtflags; | 246 | unsigned int mtflags; |
246 | #endif /* CONFIG_MIPS_MT_SMTC */ | 247 | #endif /* CONFIG_MIPS_MT_SMTC */ |
247 | 248 | ||
248 | if (!cpu_has_fpu) | 249 | preempt_disable(); |
250 | if (!cpu_has_fpu) { | ||
251 | preempt_enable(); | ||
249 | break; | 252 | break; |
253 | } | ||
250 | 254 | ||
251 | #ifdef CONFIG_MIPS_MT_SMTC | 255 | #ifdef CONFIG_MIPS_MT_SMTC |
252 | /* Read-modify-write of Status must be atomic */ | 256 | /* Read-modify-write of Status must be atomic */ |
253 | local_irq_save(irqflags); | 257 | local_irq_save(irqflags); |
254 | mtflags = dmt(); | 258 | mtflags = dmt(); |
255 | #endif /* CONFIG_MIPS_MT_SMTC */ | 259 | #endif /* CONFIG_MIPS_MT_SMTC */ |
256 | |||
257 | preempt_disable(); | ||
258 | if (cpu_has_mipsmt) { | 260 | if (cpu_has_mipsmt) { |
259 | unsigned int vpflags = dvpe(); | 261 | unsigned int vpflags = dvpe(); |
260 | flags = read_c0_status(); | 262 | flags = read_c0_status(); |
diff --git a/arch/mips/kernel/ptrace32.c b/arch/mips/kernel/ptrace32.c index f40ecd8be05f..d9a39c169450 100644 --- a/arch/mips/kernel/ptrace32.c +++ b/arch/mips/kernel/ptrace32.c | |||
@@ -175,7 +175,9 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data) | |||
175 | unsigned int mtflags; | 175 | unsigned int mtflags; |
176 | #endif /* CONFIG_MIPS_MT_SMTC */ | 176 | #endif /* CONFIG_MIPS_MT_SMTC */ |
177 | 177 | ||
178 | preempt_disable(); | ||
178 | if (!cpu_has_fpu) { | 179 | if (!cpu_has_fpu) { |
180 | preempt_enable(); | ||
179 | tmp = 0; | 181 | tmp = 0; |
180 | break; | 182 | break; |
181 | } | 183 | } |
@@ -186,7 +188,6 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data) | |||
186 | mtflags = dmt(); | 188 | mtflags = dmt(); |
187 | #endif /* CONFIG_MIPS_MT_SMTC */ | 189 | #endif /* CONFIG_MIPS_MT_SMTC */ |
188 | 190 | ||
189 | preempt_disable(); | ||
190 | if (cpu_has_mipsmt) { | 191 | if (cpu_has_mipsmt) { |
191 | unsigned int vpflags = dvpe(); | 192 | unsigned int vpflags = dvpe(); |
192 | flags = read_c0_status(); | 193 | flags = read_c0_status(); |
diff --git a/arch/mips/kernel/rtlx.c b/arch/mips/kernel/rtlx.c index cdab1b2cd134..8c8c8324f775 100644 --- a/arch/mips/kernel/rtlx.c +++ b/arch/mips/kernel/rtlx.c | |||
@@ -61,16 +61,16 @@ static int sp_stopping = 0; | |||
61 | 61 | ||
62 | extern void *vpe_get_shared(int index); | 62 | extern void *vpe_get_shared(int index); |
63 | 63 | ||
64 | static void rtlx_dispatch(struct pt_regs *regs) | 64 | static void rtlx_dispatch(void) |
65 | { | 65 | { |
66 | do_IRQ(MIPSCPU_INT_BASE + MIPS_CPU_RTLX_IRQ, regs); | 66 | do_IRQ(MIPSCPU_INT_BASE + MIPS_CPU_RTLX_IRQ); |
67 | } | 67 | } |
68 | 68 | ||
69 | 69 | ||
70 | /* Interrupt handler may be called before rtlx_init has otherwise had | 70 | /* Interrupt handler may be called before rtlx_init has otherwise had |
71 | a chance to run. | 71 | a chance to run. |
72 | */ | 72 | */ |
73 | static irqreturn_t rtlx_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 73 | static irqreturn_t rtlx_interrupt(int irq, void *dev_id) |
74 | { | 74 | { |
75 | int i; | 75 | int i; |
76 | 76 | ||
diff --git a/arch/mips/kernel/smp-mt.c b/arch/mips/kernel/smp-mt.c index 766253c44f3f..3b5f3b632622 100644 --- a/arch/mips/kernel/smp-mt.c +++ b/arch/mips/kernel/smp-mt.c | |||
@@ -106,22 +106,22 @@ void __init sanitize_tlb_entries(void) | |||
106 | clear_c0_mvpcontrol(MVPCONTROL_VPC); | 106 | clear_c0_mvpcontrol(MVPCONTROL_VPC); |
107 | } | 107 | } |
108 | 108 | ||
109 | static void ipi_resched_dispatch (struct pt_regs *regs) | 109 | static void ipi_resched_dispatch(void) |
110 | { | 110 | { |
111 | do_IRQ(MIPSCPU_INT_BASE + MIPS_CPU_IPI_RESCHED_IRQ, regs); | 111 | do_IRQ(MIPSCPU_INT_BASE + MIPS_CPU_IPI_RESCHED_IRQ); |
112 | } | 112 | } |
113 | 113 | ||
114 | static void ipi_call_dispatch (struct pt_regs *regs) | 114 | static void ipi_call_dispatch(void) |
115 | { | 115 | { |
116 | do_IRQ(MIPSCPU_INT_BASE + MIPS_CPU_IPI_CALL_IRQ, regs); | 116 | do_IRQ(MIPSCPU_INT_BASE + MIPS_CPU_IPI_CALL_IRQ); |
117 | } | 117 | } |
118 | 118 | ||
119 | irqreturn_t ipi_resched_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 119 | static irqreturn_t ipi_resched_interrupt(int irq, void *dev_id) |
120 | { | 120 | { |
121 | return IRQ_HANDLED; | 121 | return IRQ_HANDLED; |
122 | } | 122 | } |
123 | 123 | ||
124 | irqreturn_t ipi_call_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 124 | static irqreturn_t ipi_call_interrupt(int irq, void *dev_id) |
125 | { | 125 | { |
126 | smp_call_function_interrupt(); | 126 | smp_call_function_interrupt(); |
127 | 127 | ||
@@ -250,8 +250,8 @@ void __init plat_prepare_cpus(unsigned int max_cpus) | |||
250 | { | 250 | { |
251 | /* set up ipi interrupts */ | 251 | /* set up ipi interrupts */ |
252 | if (cpu_has_vint) { | 252 | if (cpu_has_vint) { |
253 | set_vi_handler (MIPS_CPU_IPI_RESCHED_IRQ, ipi_resched_dispatch); | 253 | set_vi_handler(MIPS_CPU_IPI_RESCHED_IRQ, ipi_resched_dispatch); |
254 | set_vi_handler (MIPS_CPU_IPI_CALL_IRQ, ipi_call_dispatch); | 254 | set_vi_handler(MIPS_CPU_IPI_CALL_IRQ, ipi_call_dispatch); |
255 | } | 255 | } |
256 | 256 | ||
257 | cpu_ipi_resched_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_RESCHED_IRQ; | 257 | cpu_ipi_resched_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_RESCHED_IRQ; |
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index 221895802dca..1af3612a1ce8 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c | |||
@@ -467,14 +467,18 @@ static DEFINE_PER_CPU(struct cpu, cpu_devices); | |||
467 | 467 | ||
468 | static int __init topology_init(void) | 468 | static int __init topology_init(void) |
469 | { | 469 | { |
470 | int cpu; | 470 | int i, ret; |
471 | int ret; | ||
472 | 471 | ||
473 | for_each_present_cpu(cpu) { | 472 | #ifdef CONFIG_NUMA |
474 | ret = register_cpu(&per_cpu(cpu_devices, cpu), cpu); | 473 | for_each_online_node(i) |
474 | register_one_node(i); | ||
475 | #endif /* CONFIG_NUMA */ | ||
476 | |||
477 | for_each_present_cpu(i) { | ||
478 | ret = register_cpu(&per_cpu(cpu_devices, i), i); | ||
475 | if (ret) | 479 | if (ret) |
476 | printk(KERN_WARNING "topology_init: register_cpu %d " | 480 | printk(KERN_WARNING "topology_init: register_cpu %d " |
477 | "failed (%d)\n", cpu, ret); | 481 | "failed (%d)\n", i, ret); |
478 | } | 482 | } |
479 | 483 | ||
480 | return 0; | 484 | return 0; |
diff --git a/arch/mips/kernel/smtc-asm.S b/arch/mips/kernel/smtc-asm.S index 76cb31d57482..1cb9441f1474 100644 --- a/arch/mips/kernel/smtc-asm.S +++ b/arch/mips/kernel/smtc-asm.S | |||
@@ -97,15 +97,12 @@ FEXPORT(__smtc_ipi_vector) | |||
97 | SAVE_ALL | 97 | SAVE_ALL |
98 | CLI | 98 | CLI |
99 | TRACE_IRQS_OFF | 99 | TRACE_IRQS_OFF |
100 | move a0,sp | ||
101 | /* Function to be invoked passed stack pad slot 5 */ | 100 | /* Function to be invoked passed stack pad slot 5 */ |
102 | lw t0,PT_PADSLOT5(sp) | 101 | lw t0,PT_PADSLOT5(sp) |
103 | /* Argument from sender passed in stack pad slot 4 */ | 102 | /* Argument from sender passed in stack pad slot 4 */ |
104 | lw a1,PT_PADSLOT4(sp) | 103 | lw a0,PT_PADSLOT4(sp) |
105 | jalr t0 | 104 | PTR_LA ra, _ret_from_irq |
106 | nop | 105 | jr t0 |
107 | j ret_from_irq | ||
108 | nop | ||
109 | 106 | ||
110 | /* | 107 | /* |
111 | * Called from idle loop to provoke processing of queued IPIs | 108 | * Called from idle loop to provoke processing of queued IPIs |
diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c index 604bcc5cb7c8..cc1f7474f7d7 100644 --- a/arch/mips/kernel/smtc.c +++ b/arch/mips/kernel/smtc.c | |||
@@ -82,7 +82,7 @@ struct smtc_ipi_q freeIPIq; | |||
82 | 82 | ||
83 | /* Forward declarations */ | 83 | /* Forward declarations */ |
84 | 84 | ||
85 | void ipi_decode(struct pt_regs *, struct smtc_ipi *); | 85 | void ipi_decode(struct smtc_ipi *); |
86 | void post_direct_ipi(int cpu, struct smtc_ipi *pipi); | 86 | void post_direct_ipi(int cpu, struct smtc_ipi *pipi); |
87 | void setup_cross_vpe_interrupts(void); | 87 | void setup_cross_vpe_interrupts(void); |
88 | void init_smtc_stats(void); | 88 | void init_smtc_stats(void); |
@@ -820,19 +820,19 @@ void post_direct_ipi(int cpu, struct smtc_ipi *pipi) | |||
820 | write_tc_c0_tcrestart(__smtc_ipi_vector); | 820 | write_tc_c0_tcrestart(__smtc_ipi_vector); |
821 | } | 821 | } |
822 | 822 | ||
823 | void ipi_resched_interrupt(struct pt_regs *regs) | 823 | static void ipi_resched_interrupt(void) |
824 | { | 824 | { |
825 | /* Return from interrupt should be enough to cause scheduler check */ | 825 | /* Return from interrupt should be enough to cause scheduler check */ |
826 | } | 826 | } |
827 | 827 | ||
828 | 828 | ||
829 | void ipi_call_interrupt(struct pt_regs *regs) | 829 | static void ipi_call_interrupt(void) |
830 | { | 830 | { |
831 | /* Invoke generic function invocation code in smp.c */ | 831 | /* Invoke generic function invocation code in smp.c */ |
832 | smp_call_function_interrupt(); | 832 | smp_call_function_interrupt(); |
833 | } | 833 | } |
834 | 834 | ||
835 | void ipi_decode(struct pt_regs *regs, struct smtc_ipi *pipi) | 835 | void ipi_decode(struct smtc_ipi *pipi) |
836 | { | 836 | { |
837 | void *arg_copy = pipi->arg; | 837 | void *arg_copy = pipi->arg; |
838 | int type_copy = pipi->type; | 838 | int type_copy = pipi->type; |
@@ -846,15 +846,15 @@ void ipi_decode(struct pt_regs *regs, struct smtc_ipi *pipi) | |||
846 | #ifdef SMTC_IDLE_HOOK_DEBUG | 846 | #ifdef SMTC_IDLE_HOOK_DEBUG |
847 | clock_hang_reported[dest_copy] = 0; | 847 | clock_hang_reported[dest_copy] = 0; |
848 | #endif /* SMTC_IDLE_HOOK_DEBUG */ | 848 | #endif /* SMTC_IDLE_HOOK_DEBUG */ |
849 | local_timer_interrupt(0, NULL, regs); | 849 | local_timer_interrupt(0, NULL); |
850 | break; | 850 | break; |
851 | case LINUX_SMP_IPI: | 851 | case LINUX_SMP_IPI: |
852 | switch ((int)arg_copy) { | 852 | switch ((int)arg_copy) { |
853 | case SMP_RESCHEDULE_YOURSELF: | 853 | case SMP_RESCHEDULE_YOURSELF: |
854 | ipi_resched_interrupt(regs); | 854 | ipi_resched_interrupt(); |
855 | break; | 855 | break; |
856 | case SMP_CALL_FUNCTION: | 856 | case SMP_CALL_FUNCTION: |
857 | ipi_call_interrupt(regs); | 857 | ipi_call_interrupt(); |
858 | break; | 858 | break; |
859 | default: | 859 | default: |
860 | printk("Impossible SMTC IPI Argument 0x%x\n", | 860 | printk("Impossible SMTC IPI Argument 0x%x\n", |
@@ -868,7 +868,7 @@ void ipi_decode(struct pt_regs *regs, struct smtc_ipi *pipi) | |||
868 | } | 868 | } |
869 | } | 869 | } |
870 | 870 | ||
871 | void deferred_smtc_ipi(struct pt_regs *regs) | 871 | void deferred_smtc_ipi(void) |
872 | { | 872 | { |
873 | struct smtc_ipi *pipi; | 873 | struct smtc_ipi *pipi; |
874 | unsigned long flags; | 874 | unsigned long flags; |
@@ -883,7 +883,7 @@ void deferred_smtc_ipi(struct pt_regs *regs) | |||
883 | while((pipi = smtc_ipi_dq(&IPIQ[q])) != NULL) { | 883 | while((pipi = smtc_ipi_dq(&IPIQ[q])) != NULL) { |
884 | /* ipi_decode() should be called with interrupts off */ | 884 | /* ipi_decode() should be called with interrupts off */ |
885 | local_irq_save(flags); | 885 | local_irq_save(flags); |
886 | ipi_decode(regs, pipi); | 886 | ipi_decode(pipi); |
887 | local_irq_restore(flags); | 887 | local_irq_restore(flags); |
888 | } | 888 | } |
889 | } | 889 | } |
@@ -917,7 +917,7 @@ void smtc_timer_broadcast(int vpe) | |||
917 | 917 | ||
918 | static int cpu_ipi_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_IRQ; | 918 | static int cpu_ipi_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_IRQ; |
919 | 919 | ||
920 | static irqreturn_t ipi_interrupt(int irq, void *dev_idm, struct pt_regs *regs) | 920 | static irqreturn_t ipi_interrupt(int irq, void *dev_idm) |
921 | { | 921 | { |
922 | int my_vpe = cpu_data[smp_processor_id()].vpe_id; | 922 | int my_vpe = cpu_data[smp_processor_id()].vpe_id; |
923 | int my_tc = cpu_data[smp_processor_id()].tc_id; | 923 | int my_tc = cpu_data[smp_processor_id()].tc_id; |
@@ -978,7 +978,7 @@ static irqreturn_t ipi_interrupt(int irq, void *dev_idm, struct pt_regs *regs) | |||
978 | * with interrupts off | 978 | * with interrupts off |
979 | */ | 979 | */ |
980 | local_irq_save(flags); | 980 | local_irq_save(flags); |
981 | ipi_decode(regs, pipi); | 981 | ipi_decode(pipi); |
982 | local_irq_restore(flags); | 982 | local_irq_restore(flags); |
983 | } | 983 | } |
984 | } | 984 | } |
@@ -987,9 +987,9 @@ static irqreturn_t ipi_interrupt(int irq, void *dev_idm, struct pt_regs *regs) | |||
987 | return IRQ_HANDLED; | 987 | return IRQ_HANDLED; |
988 | } | 988 | } |
989 | 989 | ||
990 | static void ipi_irq_dispatch(struct pt_regs *regs) | 990 | static void ipi_irq_dispatch(void) |
991 | { | 991 | { |
992 | do_IRQ(cpu_ipi_irq, regs); | 992 | do_IRQ(cpu_ipi_irq); |
993 | } | 993 | } |
994 | 994 | ||
995 | static struct irqaction irq_ipi; | 995 | static struct irqaction irq_ipi; |
diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c index d349eb9e4ffb..debe86c2f691 100644 --- a/arch/mips/kernel/time.c +++ b/arch/mips/kernel/time.c | |||
@@ -324,8 +324,7 @@ static long last_rtc_update; | |||
324 | */ | 324 | */ |
325 | void local_timer_interrupt(int irq, void *dev_id) | 325 | void local_timer_interrupt(int irq, void *dev_id) |
326 | { | 326 | { |
327 | if (current->pid) | 327 | profile_tick(CPU_PROFILING); |
328 | profile_tick(CPU_PROFILING); | ||
329 | update_process_times(user_mode(get_irq_regs())); | 328 | update_process_times(user_mode(get_irq_regs())); |
330 | } | 329 | } |
331 | 330 | ||
@@ -434,9 +433,8 @@ int (*perf_irq)(void) = null_perf_irq; | |||
434 | EXPORT_SYMBOL(null_perf_irq); | 433 | EXPORT_SYMBOL(null_perf_irq); |
435 | EXPORT_SYMBOL(perf_irq); | 434 | EXPORT_SYMBOL(perf_irq); |
436 | 435 | ||
437 | asmlinkage void ll_timer_interrupt(int irq, struct pt_regs *regs) | 436 | asmlinkage void ll_timer_interrupt(int irq) |
438 | { | 437 | { |
439 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
440 | int r2 = cpu_has_mips_r2; | 438 | int r2 = cpu_has_mips_r2; |
441 | 439 | ||
442 | irq_enter(); | 440 | irq_enter(); |
@@ -458,12 +456,10 @@ asmlinkage void ll_timer_interrupt(int irq, struct pt_regs *regs) | |||
458 | 456 | ||
459 | out: | 457 | out: |
460 | irq_exit(); | 458 | irq_exit(); |
461 | set_irq_regs(old_regs); | ||
462 | } | 459 | } |
463 | 460 | ||
464 | asmlinkage void ll_local_timer_interrupt(int irq, struct pt_regs *regs) | 461 | asmlinkage void ll_local_timer_interrupt(int irq) |
465 | { | 462 | { |
466 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
467 | irq_enter(); | 463 | irq_enter(); |
468 | if (smp_processor_id() != 0) | 464 | if (smp_processor_id() != 0) |
469 | kstat_this_cpu.irqs[irq]++; | 465 | kstat_this_cpu.irqs[irq]++; |
@@ -472,7 +468,6 @@ asmlinkage void ll_local_timer_interrupt(int irq, struct pt_regs *regs) | |||
472 | local_timer_interrupt(irq, NULL); | 468 | local_timer_interrupt(irq, NULL); |
473 | 469 | ||
474 | irq_exit(); | 470 | irq_exit(); |
475 | set_irq_regs(old_regs); | ||
476 | } | 471 | } |
477 | 472 | ||
478 | /* | 473 | /* |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index b7292a56d4cd..cce8313ec27d 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -66,7 +66,7 @@ extern asmlinkage void handle_mcheck(void); | |||
66 | extern asmlinkage void handle_reserved(void); | 66 | extern asmlinkage void handle_reserved(void); |
67 | 67 | ||
68 | extern int fpu_emulator_cop1Handler(struct pt_regs *xcp, | 68 | extern int fpu_emulator_cop1Handler(struct pt_regs *xcp, |
69 | struct mips_fpu_struct *ctx); | 69 | struct mips_fpu_struct *ctx, int has_fpu); |
70 | 70 | ||
71 | void (*board_be_init)(void); | 71 | void (*board_be_init)(void); |
72 | int (*board_be_handler)(struct pt_regs *regs, int is_fixup); | 72 | int (*board_be_handler)(struct pt_regs *regs, int is_fixup); |
@@ -641,7 +641,7 @@ asmlinkage void do_fpe(struct pt_regs *regs, unsigned long fcr31) | |||
641 | preempt_enable(); | 641 | preempt_enable(); |
642 | 642 | ||
643 | /* Run the emulator */ | 643 | /* Run the emulator */ |
644 | sig = fpu_emulator_cop1Handler (regs, ¤t->thread.fpu); | 644 | sig = fpu_emulator_cop1Handler (regs, ¤t->thread.fpu, 1); |
645 | 645 | ||
646 | preempt_disable(); | 646 | preempt_disable(); |
647 | 647 | ||
@@ -791,11 +791,13 @@ asmlinkage void do_cpu(struct pt_regs *regs) | |||
791 | set_used_math(); | 791 | set_used_math(); |
792 | } | 792 | } |
793 | 793 | ||
794 | preempt_enable(); | 794 | if (cpu_has_fpu) { |
795 | 795 | preempt_enable(); | |
796 | if (!cpu_has_fpu) { | 796 | } else { |
797 | int sig = fpu_emulator_cop1Handler(regs, | 797 | int sig; |
798 | ¤t->thread.fpu); | 798 | preempt_enable(); |
799 | sig = fpu_emulator_cop1Handler(regs, | ||
800 | ¤t->thread.fpu, 0); | ||
799 | if (sig) | 801 | if (sig) |
800 | force_sig(sig, current); | 802 | force_sig(sig, current); |
801 | #ifdef CONFIG_MIPS_MT_FPAFF | 803 | #ifdef CONFIG_MIPS_MT_FPAFF |
diff --git a/arch/mips/lasat/interrupt.c b/arch/mips/lasat/interrupt.c index 456be8fc961a..a144a002dcc4 100644 --- a/arch/mips/lasat/interrupt.c +++ b/arch/mips/lasat/interrupt.c | |||
@@ -108,14 +108,14 @@ static unsigned long get_int_status_200(void) | |||
108 | return int_status; | 108 | return int_status; |
109 | } | 109 | } |
110 | 110 | ||
111 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 111 | asmlinkage void plat_irq_dispatch(void) |
112 | { | 112 | { |
113 | unsigned long int_status; | 113 | unsigned long int_status; |
114 | unsigned int cause = read_c0_cause(); | 114 | unsigned int cause = read_c0_cause(); |
115 | int irq; | 115 | int irq; |
116 | 116 | ||
117 | if (cause & CAUSEF_IP7) { /* R4000 count / compare IRQ */ | 117 | if (cause & CAUSEF_IP7) { /* R4000 count / compare IRQ */ |
118 | ll_timer_interrupt(7, regs); | 118 | ll_timer_interrupt(7); |
119 | return; | 119 | return; |
120 | } | 120 | } |
121 | 121 | ||
@@ -125,7 +125,7 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
125 | if (int_status) { | 125 | if (int_status) { |
126 | irq = ls1bit32(int_status); | 126 | irq = ls1bit32(int_status); |
127 | 127 | ||
128 | do_IRQ(irq, regs); | 128 | do_IRQ(irq); |
129 | } | 129 | } |
130 | } | 130 | } |
131 | 131 | ||
diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c index 3f0d5d26d506..80531b35cd61 100644 --- a/arch/mips/math-emu/cp1emu.c +++ b/arch/mips/math-emu/cp1emu.c | |||
@@ -38,8 +38,6 @@ | |||
38 | 38 | ||
39 | #include <asm/inst.h> | 39 | #include <asm/inst.h> |
40 | #include <asm/bootinfo.h> | 40 | #include <asm/bootinfo.h> |
41 | #include <asm/cpu.h> | ||
42 | #include <asm/cpu-features.h> | ||
43 | #include <asm/processor.h> | 41 | #include <asm/processor.h> |
44 | #include <asm/ptrace.h> | 42 | #include <asm/ptrace.h> |
45 | #include <asm/signal.h> | 43 | #include <asm/signal.h> |
@@ -1233,7 +1231,8 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, | |||
1233 | return 0; | 1231 | return 0; |
1234 | } | 1232 | } |
1235 | 1233 | ||
1236 | int fpu_emulator_cop1Handler(struct pt_regs *xcp, struct mips_fpu_struct *ctx) | 1234 | int fpu_emulator_cop1Handler(struct pt_regs *xcp, struct mips_fpu_struct *ctx, |
1235 | int has_fpu) | ||
1237 | { | 1236 | { |
1238 | unsigned long oldepc, prevepc; | 1237 | unsigned long oldepc, prevepc; |
1239 | mips_instruction insn; | 1238 | mips_instruction insn; |
@@ -1263,7 +1262,7 @@ int fpu_emulator_cop1Handler(struct pt_regs *xcp, struct mips_fpu_struct *ctx) | |||
1263 | ieee754_csr.rm = mips_rm[ieee754_csr.rm]; | 1262 | ieee754_csr.rm = mips_rm[ieee754_csr.rm]; |
1264 | } | 1263 | } |
1265 | 1264 | ||
1266 | if (cpu_has_fpu) | 1265 | if (has_fpu) |
1267 | break; | 1266 | break; |
1268 | if (sig) | 1267 | if (sig) |
1269 | break; | 1268 | break; |
diff --git a/arch/mips/mips-boards/atlas/atlas_int.c b/arch/mips/mips-boards/atlas/atlas_int.c index a020a3cb4f4b..be624b8c3b0e 100644 --- a/arch/mips/mips-boards/atlas/atlas_int.c +++ b/arch/mips/mips-boards/atlas/atlas_int.c | |||
@@ -101,7 +101,7 @@ static inline int ls1bit32(unsigned int x) | |||
101 | return b; | 101 | return b; |
102 | } | 102 | } |
103 | 103 | ||
104 | static inline void atlas_hw0_irqdispatch(struct pt_regs *regs) | 104 | static inline void atlas_hw0_irqdispatch(void) |
105 | { | 105 | { |
106 | unsigned long int_status; | 106 | unsigned long int_status; |
107 | int irq; | 107 | int irq; |
@@ -116,7 +116,7 @@ static inline void atlas_hw0_irqdispatch(struct pt_regs *regs) | |||
116 | 116 | ||
117 | DEBUG_INT("atlas_hw0_irqdispatch: irq=%d\n", irq); | 117 | DEBUG_INT("atlas_hw0_irqdispatch: irq=%d\n", irq); |
118 | 118 | ||
119 | do_IRQ(irq, regs); | 119 | do_IRQ(irq); |
120 | } | 120 | } |
121 | 121 | ||
122 | static inline int clz(unsigned long x) | 122 | static inline int clz(unsigned long x) |
@@ -188,7 +188,7 @@ static inline unsigned int irq_ffs(unsigned int pending) | |||
188 | * then we just return, if multiple IRQs are pending then we will just take | 188 | * then we just return, if multiple IRQs are pending then we will just take |
189 | * another exception, big deal. | 189 | * another exception, big deal. |
190 | */ | 190 | */ |
191 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 191 | asmlinkage void plat_irq_dispatch(void) |
192 | { | 192 | { |
193 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; | 193 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; |
194 | int irq; | 194 | int irq; |
@@ -196,11 +196,11 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
196 | irq = irq_ffs(pending); | 196 | irq = irq_ffs(pending); |
197 | 197 | ||
198 | if (irq == MIPSCPU_INT_ATLAS) | 198 | if (irq == MIPSCPU_INT_ATLAS) |
199 | atlas_hw0_irqdispatch(regs); | 199 | atlas_hw0_irqdispatch(); |
200 | else if (irq >= 0) | 200 | else if (irq >= 0) |
201 | do_IRQ(MIPSCPU_INT_BASE + irq, regs); | 201 | do_IRQ(MIPSCPU_INT_BASE + irq); |
202 | else | 202 | else |
203 | spurious_interrupt(regs); | 203 | spurious_interrupt(); |
204 | } | 204 | } |
205 | 205 | ||
206 | static inline void init_atlas_irqs (int base) | 206 | static inline void init_atlas_irqs (int base) |
diff --git a/arch/mips/mips-boards/generic/time.c b/arch/mips/mips-boards/generic/time.c index 8d15861fce61..6f8a9fe7c1e3 100644 --- a/arch/mips/mips-boards/generic/time.c +++ b/arch/mips/mips-boards/generic/time.c | |||
@@ -30,7 +30,6 @@ | |||
30 | 30 | ||
31 | #include <asm/mipsregs.h> | 31 | #include <asm/mipsregs.h> |
32 | #include <asm/mipsmtregs.h> | 32 | #include <asm/mipsmtregs.h> |
33 | #include <asm/ptrace.h> | ||
34 | #include <asm/hardirq.h> | 33 | #include <asm/hardirq.h> |
35 | #include <asm/irq.h> | 34 | #include <asm/irq.h> |
36 | #include <asm/div64.h> | 35 | #include <asm/div64.h> |
@@ -82,19 +81,19 @@ static inline void scroll_display_message(void) | |||
82 | } | 81 | } |
83 | } | 82 | } |
84 | 83 | ||
85 | static void mips_timer_dispatch (struct pt_regs *regs) | 84 | static void mips_timer_dispatch(void) |
86 | { | 85 | { |
87 | do_IRQ (mips_cpu_timer_irq, regs); | 86 | do_IRQ(mips_cpu_timer_irq); |
88 | } | 87 | } |
89 | 88 | ||
90 | /* | 89 | /* |
91 | * Redeclare until I get around mopping the timer code insanity on MIPS. | 90 | * Redeclare until I get around mopping the timer code insanity on MIPS. |
92 | */ | 91 | */ |
93 | extern int null_perf_irq(struct pt_regs *regs); | 92 | extern int null_perf_irq(void); |
94 | 93 | ||
95 | extern int (*perf_irq)(struct pt_regs *regs); | 94 | extern int (*perf_irq)(void); |
96 | 95 | ||
97 | irqreturn_t mips_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 96 | irqreturn_t mips_timer_interrupt(int irq, void *dev_id) |
98 | { | 97 | { |
99 | int cpu = smp_processor_id(); | 98 | int cpu = smp_processor_id(); |
100 | 99 | ||
@@ -119,7 +118,7 @@ irqreturn_t mips_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
119 | * perf counter overflow, or both. | 118 | * perf counter overflow, or both. |
120 | */ | 119 | */ |
121 | if (read_c0_cause() & (1 << 26)) | 120 | if (read_c0_cause() & (1 << 26)) |
122 | perf_irq(regs); | 121 | perf_irq(); |
123 | 122 | ||
124 | if (read_c0_cause() & (1 << 30)) { | 123 | if (read_c0_cause() & (1 << 30)) { |
125 | /* If timer interrupt, make it de-assert */ | 124 | /* If timer interrupt, make it de-assert */ |
@@ -139,13 +138,13 @@ irqreturn_t mips_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
139 | * the tick on VPE 0 to run the full timer_interrupt(). | 138 | * the tick on VPE 0 to run the full timer_interrupt(). |
140 | */ | 139 | */ |
141 | if (cpu_data[cpu].vpe_id == 0) { | 140 | if (cpu_data[cpu].vpe_id == 0) { |
142 | timer_interrupt(irq, NULL, regs); | 141 | timer_interrupt(irq, NULL); |
143 | smtc_timer_broadcast(cpu_data[cpu].vpe_id); | 142 | smtc_timer_broadcast(cpu_data[cpu].vpe_id); |
144 | scroll_display_message(); | 143 | scroll_display_message(); |
145 | } else { | 144 | } else { |
146 | write_c0_compare(read_c0_count() + | 145 | write_c0_compare(read_c0_count() + |
147 | (mips_hpt_frequency/HZ)); | 146 | (mips_hpt_frequency/HZ)); |
148 | local_timer_interrupt(irq, dev_id, regs); | 147 | local_timer_interrupt(irq, dev_id); |
149 | smtc_timer_broadcast(cpu_data[cpu].vpe_id); | 148 | smtc_timer_broadcast(cpu_data[cpu].vpe_id); |
150 | } | 149 | } |
151 | } | 150 | } |
@@ -159,12 +158,12 @@ irqreturn_t mips_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
159 | * timer int. | 158 | * timer int. |
160 | */ | 159 | */ |
161 | if (!r2 || (read_c0_cause() & (1 << 26))) | 160 | if (!r2 || (read_c0_cause() & (1 << 26))) |
162 | if (perf_irq(regs)) | 161 | if (perf_irq()) |
163 | goto out; | 162 | goto out; |
164 | 163 | ||
165 | /* we keep interrupt disabled all the time */ | 164 | /* we keep interrupt disabled all the time */ |
166 | if (!r2 || (read_c0_cause() & (1 << 30))) | 165 | if (!r2 || (read_c0_cause() & (1 << 30))) |
167 | timer_interrupt(irq, NULL, regs); | 166 | timer_interrupt(irq, NULL); |
168 | 167 | ||
169 | scroll_display_message(); | 168 | scroll_display_message(); |
170 | } else { | 169 | } else { |
@@ -180,7 +179,7 @@ irqreturn_t mips_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
180 | /* | 179 | /* |
181 | * Other CPUs should do profiling and process accounting | 180 | * Other CPUs should do profiling and process accounting |
182 | */ | 181 | */ |
183 | local_timer_interrupt(irq, dev_id, regs); | 182 | local_timer_interrupt(irq, dev_id); |
184 | } | 183 | } |
185 | out: | 184 | out: |
186 | #endif /* CONFIG_MIPS_MT_SMTC */ | 185 | #endif /* CONFIG_MIPS_MT_SMTC */ |
diff --git a/arch/mips/mips-boards/malta/malta_int.c b/arch/mips/mips-boards/malta/malta_int.c index 7cc0ba4f553a..6244d0e2c7de 100644 --- a/arch/mips/mips-boards/malta/malta_int.c +++ b/arch/mips/mips-boards/malta/malta_int.c | |||
@@ -114,7 +114,7 @@ static inline int get_int(void) | |||
114 | return irq; | 114 | return irq; |
115 | } | 115 | } |
116 | 116 | ||
117 | static void malta_hw0_irqdispatch(struct pt_regs *regs) | 117 | static void malta_hw0_irqdispatch(void) |
118 | { | 118 | { |
119 | int irq; | 119 | int irq; |
120 | 120 | ||
@@ -123,17 +123,21 @@ static void malta_hw0_irqdispatch(struct pt_regs *regs) | |||
123 | return; /* interrupt has already been cleared */ | 123 | return; /* interrupt has already been cleared */ |
124 | } | 124 | } |
125 | 125 | ||
126 | do_IRQ(MALTA_INT_BASE+irq, regs); | 126 | do_IRQ(MALTA_INT_BASE + irq); |
127 | } | 127 | } |
128 | 128 | ||
129 | void corehi_irqdispatch(struct pt_regs *regs) | 129 | static void corehi_irqdispatch(void) |
130 | { | 130 | { |
131 | unsigned int intedge, intsteer, pcicmd, pcibadaddr; | ||
132 | unsigned int pcimstat, intisr, inten, intpol; | ||
131 | unsigned int intrcause,datalo,datahi; | 133 | unsigned int intrcause,datalo,datahi; |
132 | unsigned int pcimstat, intisr, inten, intpol, intedge, intsteer, pcicmd, pcibadaddr; | 134 | struct pt_regs *regs; |
133 | 135 | ||
134 | printk("CoreHI interrupt, shouldn't happen, so we die here!!!\n"); | 136 | printk("CoreHI interrupt, shouldn't happen, so we die here!!!\n"); |
135 | printk("epc : %08lx\nStatus: %08lx\nCause : %08lx\nbadVaddr : %08lx\n" | 137 | printk("epc : %08lx\nStatus: %08lx\n" |
136 | , regs->cp0_epc, regs->cp0_status, regs->cp0_cause, regs->cp0_badvaddr); | 138 | "Cause : %08lx\nbadVaddr : %08lx\n", |
139 | regs->cp0_epc, regs->cp0_status, | ||
140 | regs->cp0_cause, regs->cp0_badvaddr); | ||
137 | 141 | ||
138 | /* Read all the registers and then print them as there is a | 142 | /* Read all the registers and then print them as there is a |
139 | problem with interspersed printk's upsetting the Bonito controller. | 143 | problem with interspersed printk's upsetting the Bonito controller. |
@@ -146,7 +150,7 @@ void corehi_irqdispatch(struct pt_regs *regs) | |||
146 | case MIPS_REVISION_CORID_CORE_FPGA3: | 150 | case MIPS_REVISION_CORID_CORE_FPGA3: |
147 | case MIPS_REVISION_CORID_CORE_24K: | 151 | case MIPS_REVISION_CORID_CORE_24K: |
148 | case MIPS_REVISION_CORID_CORE_EMUL_MSC: | 152 | case MIPS_REVISION_CORID_CORE_EMUL_MSC: |
149 | ll_msc_irq(regs); | 153 | ll_msc_irq(); |
150 | break; | 154 | break; |
151 | case MIPS_REVISION_CORID_QED_RM5261: | 155 | case MIPS_REVISION_CORID_QED_RM5261: |
152 | case MIPS_REVISION_CORID_CORE_LV: | 156 | case MIPS_REVISION_CORID_CORE_LV: |
@@ -208,23 +212,23 @@ static inline unsigned int irq_ffs(unsigned int pending) | |||
208 | unsigned int a0 = 7; | 212 | unsigned int a0 = 7; |
209 | unsigned int t0; | 213 | unsigned int t0; |
210 | 214 | ||
211 | t0 = s0 & 0xf000; | 215 | t0 = pending & 0xf000; |
212 | t0 = t0 < 1; | 216 | t0 = t0 < 1; |
213 | t0 = t0 << 2; | 217 | t0 = t0 << 2; |
214 | a0 = a0 - t0; | 218 | a0 = a0 - t0; |
215 | s0 = s0 << t0; | 219 | pending = pending << t0; |
216 | 220 | ||
217 | t0 = s0 & 0xc000; | 221 | t0 = pending & 0xc000; |
218 | t0 = t0 < 1; | 222 | t0 = t0 < 1; |
219 | t0 = t0 << 1; | 223 | t0 = t0 << 1; |
220 | a0 = a0 - t0; | 224 | a0 = a0 - t0; |
221 | s0 = s0 << t0; | 225 | pending = pending << t0; |
222 | 226 | ||
223 | t0 = s0 & 0x8000; | 227 | t0 = pending & 0x8000; |
224 | t0 = t0 < 1; | 228 | t0 = t0 < 1; |
225 | //t0 = t0 << 2; | 229 | //t0 = t0 << 2; |
226 | a0 = a0 - t0; | 230 | a0 = a0 - t0; |
227 | //s0 = s0 << t0; | 231 | //pending = pending << t0; |
228 | 232 | ||
229 | return a0; | 233 | return a0; |
230 | #endif | 234 | #endif |
@@ -255,7 +259,7 @@ static inline unsigned int irq_ffs(unsigned int pending) | |||
255 | * another exception, big deal. | 259 | * another exception, big deal. |
256 | */ | 260 | */ |
257 | 261 | ||
258 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 262 | asmlinkage void plat_irq_dispatch(void) |
259 | { | 263 | { |
260 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; | 264 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; |
261 | int irq; | 265 | int irq; |
@@ -263,11 +267,11 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
263 | irq = irq_ffs(pending); | 267 | irq = irq_ffs(pending); |
264 | 268 | ||
265 | if (irq == MIPSCPU_INT_I8259A) | 269 | if (irq == MIPSCPU_INT_I8259A) |
266 | malta_hw0_irqdispatch(regs); | 270 | malta_hw0_irqdispatch(); |
267 | else if (irq > 0) | 271 | else if (irq > 0) |
268 | do_IRQ(MIPSCPU_INT_BASE + irq, regs); | 272 | do_IRQ(MIPSCPU_INT_BASE + irq); |
269 | else | 273 | else |
270 | spurious_interrupt(regs); | 274 | spurious_interrupt(); |
271 | } | 275 | } |
272 | 276 | ||
273 | static struct irqaction i8259irq = { | 277 | static struct irqaction i8259irq = { |
diff --git a/arch/mips/mips-boards/sead/sead_int.c b/arch/mips/mips-boards/sead/sead_int.c index 9168d934c661..f445fcddfdfd 100644 --- a/arch/mips/mips-boards/sead/sead_int.c +++ b/arch/mips/mips-boards/sead/sead_int.c | |||
@@ -98,7 +98,7 @@ static inline unsigned int irq_ffs(unsigned int pending) | |||
98 | * then we just return, if multiple IRQs are pending then we will just take | 98 | * then we just return, if multiple IRQs are pending then we will just take |
99 | * another exception, big deal. | 99 | * another exception, big deal. |
100 | */ | 100 | */ |
101 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 101 | asmlinkage void plat_irq_dispatch(void) |
102 | { | 102 | { |
103 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; | 103 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; |
104 | int irq; | 104 | int irq; |
@@ -106,7 +106,7 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
106 | irq = irq_ffs(pending); | 106 | irq = irq_ffs(pending); |
107 | 107 | ||
108 | if (irq >= 0) | 108 | if (irq >= 0) |
109 | do_IRQ(MIPSCPU_INT_BASE + irq, regs); | 109 | do_IRQ(MIPSCPU_INT_BASE + irq); |
110 | else | 110 | else |
111 | spurious_interrupt(regs); | 111 | spurious_interrupt(regs); |
112 | } | 112 | } |
diff --git a/arch/mips/mips-boards/sim/sim_int.c b/arch/mips/mips-boards/sim/sim_int.c index 2c15c8efec4e..2ce449dce6f2 100644 --- a/arch/mips/mips-boards/sim/sim_int.c +++ b/arch/mips/mips-boards/sim/sim_int.c | |||
@@ -71,12 +71,7 @@ static inline unsigned int irq_ffs(unsigned int pending) | |||
71 | #endif | 71 | #endif |
72 | } | 72 | } |
73 | 73 | ||
74 | static inline void sim_hw0_irqdispatch(struct pt_regs *regs) | 74 | asmlinkage void plat_irq_dispatch(void) |
75 | { | ||
76 | do_IRQ(2, regs); | ||
77 | } | ||
78 | |||
79 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | ||
80 | { | 75 | { |
81 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; | 76 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; |
82 | int irq; | 77 | int irq; |
@@ -84,9 +79,9 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
84 | irq = irq_ffs(pending); | 79 | irq = irq_ffs(pending); |
85 | 80 | ||
86 | if (irq > 0) | 81 | if (irq > 0) |
87 | do_IRQ(MIPSCPU_INT_BASE + irq, regs); | 82 | do_IRQ(MIPSCPU_INT_BASE + irq); |
88 | else | 83 | else |
89 | spurious_interrupt(regs); | 84 | spurious_interrupt(); |
90 | } | 85 | } |
91 | 86 | ||
92 | void __init arch_init_irq(void) | 87 | void __init arch_init_irq(void) |
diff --git a/arch/mips/mips-boards/sim/sim_time.c b/arch/mips/mips-boards/sim/sim_time.c index 230929ecd57f..c566b9bd0427 100644 --- a/arch/mips/mips-boards/sim/sim_time.c +++ b/arch/mips/mips-boards/sim/sim_time.c | |||
@@ -15,7 +15,6 @@ | |||
15 | #include <linux/mc146818rtc.h> | 15 | #include <linux/mc146818rtc.h> |
16 | #include <linux/timex.h> | 16 | #include <linux/timex.h> |
17 | #include <asm/mipsregs.h> | 17 | #include <asm/mipsregs.h> |
18 | #include <asm/ptrace.h> | ||
19 | #include <asm/hardirq.h> | 18 | #include <asm/hardirq.h> |
20 | #include <asm/irq.h> | 19 | #include <asm/irq.h> |
21 | #include <asm/div64.h> | 20 | #include <asm/div64.h> |
@@ -33,7 +32,7 @@ | |||
33 | 32 | ||
34 | unsigned long cpu_khz; | 33 | unsigned long cpu_khz; |
35 | 34 | ||
36 | irqreturn_t sim_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 35 | irqreturn_t sim_timer_interrupt(int irq, void *dev_id) |
37 | { | 36 | { |
38 | #ifdef CONFIG_SMP | 37 | #ifdef CONFIG_SMP |
39 | int cpu = smp_processor_id(); | 38 | int cpu = smp_processor_id(); |
@@ -44,7 +43,7 @@ irqreturn_t sim_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
44 | */ | 43 | */ |
45 | #ifndef CONFIG_MIPS_MT_SMTC | 44 | #ifndef CONFIG_MIPS_MT_SMTC |
46 | if (cpu == 0) { | 45 | if (cpu == 0) { |
47 | timer_interrupt(irq, dev_id, regs); | 46 | timer_interrupt(irq, dev_id); |
48 | } | 47 | } |
49 | else { | 48 | else { |
50 | /* Everyone else needs to reset the timer int here as | 49 | /* Everyone else needs to reset the timer int here as |
@@ -84,7 +83,7 @@ irqreturn_t sim_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
84 | irq_enable_hazard(); | 83 | irq_enable_hazard(); |
85 | evpe(vpflags); | 84 | evpe(vpflags); |
86 | 85 | ||
87 | if(cpu_data[cpu].vpe_id == 0) timer_interrupt(irq, dev_id, regs); | 86 | if(cpu_data[cpu].vpe_id == 0) timer_interrupt(irq, dev_id); |
88 | else write_c0_compare (read_c0_count() + ( mips_hpt_frequency/HZ)); | 87 | else write_c0_compare (read_c0_count() + ( mips_hpt_frequency/HZ)); |
89 | smtc_timer_broadcast(cpu_data[cpu].vpe_id); | 88 | smtc_timer_broadcast(cpu_data[cpu].vpe_id); |
90 | 89 | ||
@@ -93,10 +92,10 @@ irqreturn_t sim_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
93 | /* | 92 | /* |
94 | * every CPU should do profiling and process accounting | 93 | * every CPU should do profiling and process accounting |
95 | */ | 94 | */ |
96 | local_timer_interrupt (irq, dev_id, regs); | 95 | local_timer_interrupt (irq, dev_id); |
97 | return IRQ_HANDLED; | 96 | return IRQ_HANDLED; |
98 | #else | 97 | #else |
99 | return timer_interrupt (irq, dev_id, regs); | 98 | return timer_interrupt (irq, dev_id); |
100 | #endif | 99 | #endif |
101 | } | 100 | } |
102 | 101 | ||
@@ -177,9 +176,9 @@ void __init sim_time_init(void) | |||
177 | 176 | ||
178 | static int mips_cpu_timer_irq; | 177 | static int mips_cpu_timer_irq; |
179 | 178 | ||
180 | static void mips_timer_dispatch (struct pt_regs *regs) | 179 | static void mips_timer_dispatch(void) |
181 | { | 180 | { |
182 | do_IRQ (mips_cpu_timer_irq, regs); | 181 | do_IRQ(mips_cpu_timer_irq); |
183 | } | 182 | } |
184 | 183 | ||
185 | 184 | ||
diff --git a/arch/mips/momentum/jaguar_atx/irq.c b/arch/mips/momentum/jaguar_atx/irq.c index f9067469a656..2efb25aa1aed 100644 --- a/arch/mips/momentum/jaguar_atx/irq.c +++ b/arch/mips/momentum/jaguar_atx/irq.c | |||
@@ -40,33 +40,33 @@ | |||
40 | #include <asm/mipsregs.h> | 40 | #include <asm/mipsregs.h> |
41 | #include <asm/time.h> | 41 | #include <asm/time.h> |
42 | 42 | ||
43 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 43 | asmlinkage void plat_irq_dispatch(void) |
44 | { | 44 | { |
45 | unsigned int pending = read_c0_cause() & read_c0_status(); | 45 | unsigned int pending = read_c0_cause() & read_c0_status(); |
46 | 46 | ||
47 | if (pending & STATUSF_IP0) | 47 | if (pending & STATUSF_IP0) |
48 | do_IRQ(0, regs); | 48 | do_IRQ(0); |
49 | else if (pending & STATUSF_IP1) | 49 | else if (pending & STATUSF_IP1) |
50 | do_IRQ(1, regs); | 50 | do_IRQ(1); |
51 | else if (pending & STATUSF_IP2) | 51 | else if (pending & STATUSF_IP2) |
52 | do_IRQ(2, regs); | 52 | do_IRQ(2); |
53 | else if (pending & STATUSF_IP3) | 53 | else if (pending & STATUSF_IP3) |
54 | do_IRQ(3, regs); | 54 | do_IRQ(3); |
55 | else if (pending & STATUSF_IP4) | 55 | else if (pending & STATUSF_IP4) |
56 | do_IRQ(4, regs); | 56 | do_IRQ(4); |
57 | else if (pending & STATUSF_IP5) | 57 | else if (pending & STATUSF_IP5) |
58 | do_IRQ(5, regs); | 58 | do_IRQ(5); |
59 | else if (pending & STATUSF_IP6) | 59 | else if (pending & STATUSF_IP6) |
60 | do_IRQ(6, regs); | 60 | do_IRQ(6); |
61 | else if (pending & STATUSF_IP7) | 61 | else if (pending & STATUSF_IP7) |
62 | ll_timer_interrupt(7, regs); | 62 | ll_timer_interrupt(7); |
63 | else { | 63 | else { |
64 | /* | 64 | /* |
65 | * Now look at the extended interrupts | 65 | * Now look at the extended interrupts |
66 | */ | 66 | */ |
67 | pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16; | 67 | pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16; |
68 | if (pending & STATUSF_IP8) | 68 | if (pending & STATUSF_IP8) |
69 | ll_mv64340_irq(regs); | 69 | ll_mv64340_irq(); |
70 | } | 70 | } |
71 | } | 71 | } |
72 | 72 | ||
diff --git a/arch/mips/momentum/jaguar_atx/setup.c b/arch/mips/momentum/jaguar_atx/setup.c index e6fe2992227d..5a510142b978 100644 --- a/arch/mips/momentum/jaguar_atx/setup.c +++ b/arch/mips/momentum/jaguar_atx/setup.c | |||
@@ -62,7 +62,6 @@ | |||
62 | #include <asm/io.h> | 62 | #include <asm/io.h> |
63 | #include <asm/irq.h> | 63 | #include <asm/irq.h> |
64 | #include <asm/processor.h> | 64 | #include <asm/processor.h> |
65 | #include <asm/ptrace.h> | ||
66 | #include <asm/reboot.h> | 65 | #include <asm/reboot.h> |
67 | #include <asm/tlbflush.h> | 66 | #include <asm/tlbflush.h> |
68 | 67 | ||
diff --git a/arch/mips/momentum/ocelot_3/irq.c b/arch/mips/momentum/ocelot_3/irq.c index 793782a9c195..cea0e5deb80e 100644 --- a/arch/mips/momentum/ocelot_3/irq.c +++ b/arch/mips/momentum/ocelot_3/irq.c | |||
@@ -75,26 +75,26 @@ void __init arch_init_irq(void) | |||
75 | 75 | ||
76 | } | 76 | } |
77 | 77 | ||
78 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 78 | asmlinkage void plat_irq_dispatch(void) |
79 | { | 79 | { |
80 | unsigned int pending = read_c0_cause() & read_c0_status(); | 80 | unsigned int pending = read_c0_cause() & read_c0_status(); |
81 | 81 | ||
82 | if (pending & STATUSF_IP0) | 82 | if (pending & STATUSF_IP0) |
83 | do_IRQ(0, regs); | 83 | do_IRQ(0); |
84 | else if (pending & STATUSF_IP1) | 84 | else if (pending & STATUSF_IP1) |
85 | do_IRQ(1, regs); | 85 | do_IRQ(1); |
86 | else if (pending & STATUSF_IP2) | 86 | else if (pending & STATUSF_IP2) |
87 | do_IRQ(2, regs); | 87 | do_IRQ(2); |
88 | else if (pending & STATUSF_IP3) | 88 | else if (pending & STATUSF_IP3) |
89 | do_IRQ(3, regs); | 89 | do_IRQ(3); |
90 | else if (pending & STATUSF_IP4) | 90 | else if (pending & STATUSF_IP4) |
91 | do_IRQ(4, regs); | 91 | do_IRQ(4); |
92 | else if (pending & STATUSF_IP5) | 92 | else if (pending & STATUSF_IP5) |
93 | do_IRQ(5, regs); | 93 | do_IRQ(5); |
94 | else if (pending & STATUSF_IP6) | 94 | else if (pending & STATUSF_IP6) |
95 | do_IRQ(6, regs); | 95 | do_IRQ(6); |
96 | else if (pending & STATUSF_IP7) | 96 | else if (pending & STATUSF_IP7) |
97 | do_IRQ(7, regs); | 97 | do_IRQ(7); |
98 | else { | 98 | else { |
99 | /* | 99 | /* |
100 | * Now look at the extended interrupts | 100 | * Now look at the extended interrupts |
@@ -102,8 +102,8 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
102 | pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16; | 102 | pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16; |
103 | 103 | ||
104 | if (pending & STATUSF_IP8) | 104 | if (pending & STATUSF_IP8) |
105 | ll_mv64340_irq(regs); | 105 | ll_mv64340_irq(); |
106 | else | 106 | else |
107 | spurious_interrupt(regs); | 107 | spurious_interrupt(); |
108 | } | 108 | } |
109 | } | 109 | } |
diff --git a/arch/mips/momentum/ocelot_3/setup.c b/arch/mips/momentum/ocelot_3/setup.c index 435d0787329e..7d74f8c54129 100644 --- a/arch/mips/momentum/ocelot_3/setup.c +++ b/arch/mips/momentum/ocelot_3/setup.c | |||
@@ -67,7 +67,6 @@ | |||
67 | #include <asm/irq.h> | 67 | #include <asm/irq.h> |
68 | #include <asm/pci.h> | 68 | #include <asm/pci.h> |
69 | #include <asm/processor.h> | 69 | #include <asm/processor.h> |
70 | #include <asm/ptrace.h> | ||
71 | #include <asm/reboot.h> | 70 | #include <asm/reboot.h> |
72 | #include <asm/mc146818rtc.h> | 71 | #include <asm/mc146818rtc.h> |
73 | #include <asm/tlbflush.h> | 72 | #include <asm/tlbflush.h> |
diff --git a/arch/mips/momentum/ocelot_c/cpci-irq.c b/arch/mips/momentum/ocelot_c/cpci-irq.c index a5dc230520df..47e3fa32b075 100644 --- a/arch/mips/momentum/ocelot_c/cpci-irq.c +++ b/arch/mips/momentum/ocelot_c/cpci-irq.c | |||
@@ -21,7 +21,6 @@ | |||
21 | #include <linux/interrupt.h> | 21 | #include <linux/interrupt.h> |
22 | #include <linux/irq.h> | 22 | #include <linux/irq.h> |
23 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
24 | #include <asm/ptrace.h> | ||
25 | #include <linux/sched.h> | 24 | #include <linux/sched.h> |
26 | #include <linux/kernel_stat.h> | 25 | #include <linux/kernel_stat.h> |
27 | #include <asm/io.h> | 26 | #include <asm/io.h> |
@@ -112,7 +111,7 @@ static void end_cpci_irq(unsigned int irq) | |||
112 | * Interrupt handler for interrupts coming from the FPGA chip. | 111 | * Interrupt handler for interrupts coming from the FPGA chip. |
113 | * It could be built in ethernet ports etc... | 112 | * It could be built in ethernet ports etc... |
114 | */ | 113 | */ |
115 | void ll_cpci_irq(struct pt_regs *regs) | 114 | void ll_cpci_irq(void) |
116 | { | 115 | { |
117 | unsigned int irq_src, irq_mask; | 116 | unsigned int irq_src, irq_mask; |
118 | 117 | ||
@@ -123,7 +122,7 @@ void ll_cpci_irq(struct pt_regs *regs) | |||
123 | /* mask for just the interrupts we want */ | 122 | /* mask for just the interrupts we want */ |
124 | irq_src &= ~irq_mask; | 123 | irq_src &= ~irq_mask; |
125 | 124 | ||
126 | do_IRQ(ls1bit8(irq_src) + CPCI_IRQ_BASE, regs); | 125 | do_IRQ(ls1bit8(irq_src) + CPCI_IRQ_BASE); |
127 | } | 126 | } |
128 | 127 | ||
129 | #define shutdown_cpci_irq disable_cpci_irq | 128 | #define shutdown_cpci_irq disable_cpci_irq |
diff --git a/arch/mips/momentum/ocelot_c/irq.c b/arch/mips/momentum/ocelot_c/irq.c index 9d44ae1e156b..ea65223a6d2c 100644 --- a/arch/mips/momentum/ocelot_c/irq.c +++ b/arch/mips/momentum/ocelot_c/irq.c | |||
@@ -59,31 +59,31 @@ static struct irqaction cascade_mv64340 = { | |||
59 | no_action, IRQF_DISABLED, CPU_MASK_NONE, "cascade via MV64340", NULL, NULL | 59 | no_action, IRQF_DISABLED, CPU_MASK_NONE, "cascade via MV64340", NULL, NULL |
60 | }; | 60 | }; |
61 | 61 | ||
62 | extern void ll_uart_irq(struct pt_regs *regs); | 62 | extern void ll_uart_irq(void); |
63 | extern void ll_cpci_irq(struct pt_regs *regs); | 63 | extern void ll_cpci_irq(void); |
64 | 64 | ||
65 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 65 | asmlinkage void plat_irq_dispatch(void) |
66 | { | 66 | { |
67 | unsigned int pending = read_c0_cause() & read_c0_status(); | 67 | unsigned int pending = read_c0_cause() & read_c0_status(); |
68 | 68 | ||
69 | if (pending & STATUSF_IP0) | 69 | if (pending & STATUSF_IP0) |
70 | do_IRQ(0, regs); | 70 | do_IRQ(0); |
71 | else if (pending & STATUSF_IP1) | 71 | else if (pending & STATUSF_IP1) |
72 | do_IRQ(1, regs); | 72 | do_IRQ(1); |
73 | else if (pending & STATUSF_IP2) | 73 | else if (pending & STATUSF_IP2) |
74 | do_IRQ(2, regs); | 74 | do_IRQ(2); |
75 | else if (pending & STATUSF_IP3) | 75 | else if (pending & STATUSF_IP3) |
76 | ll_uart_irq(regs); | 76 | ll_uart_irq(); |
77 | else if (pending & STATUSF_IP4) | 77 | else if (pending & STATUSF_IP4) |
78 | do_IRQ(4, regs); | 78 | do_IRQ(4); |
79 | else if (pending & STATUSF_IP5) | 79 | else if (pending & STATUSF_IP5) |
80 | ll_cpci_irq(regs); | 80 | ll_cpci_irq(); |
81 | else if (pending & STATUSF_IP6) | 81 | else if (pending & STATUSF_IP6) |
82 | ll_mv64340_irq(regs); | 82 | ll_mv64340_irq(); |
83 | else if (pending & STATUSF_IP7) | 83 | else if (pending & STATUSF_IP7) |
84 | do_IRQ(7, regs); | 84 | do_IRQ(7); |
85 | else | 85 | else |
86 | spurious_interrupt(regs); | 86 | spurious_interrupt(); |
87 | } | 87 | } |
88 | 88 | ||
89 | void __init arch_init_irq(void) | 89 | void __init arch_init_irq(void) |
diff --git a/arch/mips/momentum/ocelot_c/setup.c b/arch/mips/momentum/ocelot_c/setup.c index 36f570ecc6fb..9c0c462af650 100644 --- a/arch/mips/momentum/ocelot_c/setup.c +++ b/arch/mips/momentum/ocelot_c/setup.c | |||
@@ -62,7 +62,6 @@ | |||
62 | #include <asm/irq.h> | 62 | #include <asm/irq.h> |
63 | #include <asm/pci.h> | 63 | #include <asm/pci.h> |
64 | #include <asm/processor.h> | 64 | #include <asm/processor.h> |
65 | #include <asm/ptrace.h> | ||
66 | #include <asm/reboot.h> | 65 | #include <asm/reboot.h> |
67 | #include <asm/marvell.h> | 66 | #include <asm/marvell.h> |
68 | #include <linux/bootmem.h> | 67 | #include <linux/bootmem.h> |
diff --git a/arch/mips/momentum/ocelot_c/uart-irq.c b/arch/mips/momentum/ocelot_c/uart-irq.c index 9f33d8f1d826..510257dc205a 100644 --- a/arch/mips/momentum/ocelot_c/uart-irq.c +++ b/arch/mips/momentum/ocelot_c/uart-irq.c | |||
@@ -16,7 +16,6 @@ | |||
16 | #include <linux/interrupt.h> | 16 | #include <linux/interrupt.h> |
17 | #include <linux/irq.h> | 17 | #include <linux/irq.h> |
18 | #include <linux/kernel.h> | 18 | #include <linux/kernel.h> |
19 | #include <asm/ptrace.h> | ||
20 | #include <linux/sched.h> | 19 | #include <linux/sched.h> |
21 | #include <linux/kernel_stat.h> | 20 | #include <linux/kernel_stat.h> |
22 | #include <asm/io.h> | 21 | #include <asm/io.h> |
@@ -105,7 +104,7 @@ static void end_uart_irq(unsigned int irq) | |||
105 | /* | 104 | /* |
106 | * Interrupt handler for interrupts coming from the FPGA chip. | 105 | * Interrupt handler for interrupts coming from the FPGA chip. |
107 | */ | 106 | */ |
108 | void ll_uart_irq(struct pt_regs *regs) | 107 | void ll_uart_irq(void) |
109 | { | 108 | { |
110 | unsigned int irq_src, irq_mask; | 109 | unsigned int irq_src, irq_mask; |
111 | 110 | ||
@@ -116,7 +115,7 @@ void ll_uart_irq(struct pt_regs *regs) | |||
116 | /* mask for just the interrupts we want */ | 115 | /* mask for just the interrupts we want */ |
117 | irq_src &= ~irq_mask; | 116 | irq_src &= ~irq_mask; |
118 | 117 | ||
119 | do_IRQ(ls1bit8(irq_src) + 74, regs); | 118 | do_IRQ(ls1bit8(irq_src) + 74); |
120 | } | 119 | } |
121 | 120 | ||
122 | #define shutdown_uart_irq disable_uart_irq | 121 | #define shutdown_uart_irq disable_uart_irq |
diff --git a/arch/mips/momentum/ocelot_g/gt-irq.c b/arch/mips/momentum/ocelot_g/gt-irq.c index 6cd87cf0195a..7b5cc6648f7e 100644 --- a/arch/mips/momentum/ocelot_g/gt-irq.c +++ b/arch/mips/momentum/ocelot_g/gt-irq.c | |||
@@ -14,7 +14,6 @@ | |||
14 | #include <linux/module.h> | 14 | #include <linux/module.h> |
15 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
16 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
17 | #include <asm/ptrace.h> | ||
18 | #include <linux/sched.h> | 17 | #include <linux/sched.h> |
19 | #include <linux/kernel_stat.h> | 18 | #include <linux/kernel_stat.h> |
20 | #include <asm/gt64240.h> | 19 | #include <asm/gt64240.h> |
@@ -108,7 +107,7 @@ int disable_galileo_irq(int int_cause, int bit_num) | |||
108 | * we keep this particular structure in the function. | 107 | * we keep this particular structure in the function. |
109 | */ | 108 | */ |
110 | 109 | ||
111 | static irqreturn_t gt64240_p0int_irq(int irq, void *dev, struct pt_regs *regs) | 110 | static irqreturn_t gt64240_p0int_irq(int irq, void *dev) |
112 | { | 111 | { |
113 | uint32_t irq_src, irq_src_mask; | 112 | uint32_t irq_src, irq_src_mask; |
114 | int handled; | 113 | int handled; |
@@ -135,7 +134,7 @@ static irqreturn_t gt64240_p0int_irq(int irq, void *dev, struct pt_regs *regs) | |||
135 | /* handle the timer call */ | 134 | /* handle the timer call */ |
136 | do_timer(1); | 135 | do_timer(1); |
137 | #ifndef CONFIG_SMP | 136 | #ifndef CONFIG_SMP |
138 | update_process_times(user_mode(regs)); | 137 | update_process_times(user_mode(get_irq_regs())); |
139 | #endif | 138 | #endif |
140 | } | 139 | } |
141 | 140 | ||
diff --git a/arch/mips/momentum/ocelot_g/irq.c b/arch/mips/momentum/ocelot_g/irq.c index 7a4a419804f1..da46524e87cb 100644 --- a/arch/mips/momentum/ocelot_g/irq.c +++ b/arch/mips/momentum/ocelot_g/irq.c | |||
@@ -48,22 +48,22 @@ | |||
48 | #include <asm/mipsregs.h> | 48 | #include <asm/mipsregs.h> |
49 | #include <asm/system.h> | 49 | #include <asm/system.h> |
50 | 50 | ||
51 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 51 | asmlinkage void plat_irq_dispatch(void) |
52 | { | 52 | { |
53 | unsigned int pending = read_c0_cause() & read_c0_status(); | 53 | unsigned int pending = read_c0_cause() & read_c0_status(); |
54 | 54 | ||
55 | if (pending & STATUSF_IP2) | 55 | if (pending & STATUSF_IP2) |
56 | do_IRQ(2, regs); | 56 | do_IRQ(2); |
57 | else if (pending & STATUSF_IP3) | 57 | else if (pending & STATUSF_IP3) |
58 | do_IRQ(3, regs); | 58 | do_IRQ(3); |
59 | else if (pending & STATUSF_IP4) | 59 | else if (pending & STATUSF_IP4) |
60 | do_IRQ(4, regs); | 60 | do_IRQ(4); |
61 | else if (pending & STATUSF_IP5) | 61 | else if (pending & STATUSF_IP5) |
62 | do_IRQ(5, regs); | 62 | do_IRQ(5); |
63 | else if (pending & STATUSF_IP6) | 63 | else if (pending & STATUSF_IP6) |
64 | do_IRQ(6, regs); | 64 | do_IRQ(6); |
65 | else if (pending & STATUSF_IP7) | 65 | else if (pending & STATUSF_IP7) |
66 | do_IRQ(7, regs); | 66 | do_IRQ(7); |
67 | else { | 67 | else { |
68 | /* | 68 | /* |
69 | * Now look at the extended interrupts | 69 | * Now look at the extended interrupts |
@@ -71,15 +71,15 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
71 | pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16; | 71 | pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16; |
72 | 72 | ||
73 | if (pending & STATUSF_IP8) | 73 | if (pending & STATUSF_IP8) |
74 | do_IRQ(8, regs); | 74 | do_IRQ(8); |
75 | else if (pending & STATUSF_IP9) | 75 | else if (pending & STATUSF_IP9) |
76 | do_IRQ(9, regs); | 76 | do_IRQ(9); |
77 | else if (pending & STATUSF_IP10) | 77 | else if (pending & STATUSF_IP10) |
78 | do_IRQ(10, regs); | 78 | do_IRQ(10); |
79 | else if (pending & STATUSF_IP11) | 79 | else if (pending & STATUSF_IP11) |
80 | do_IRQ(11, regs); | 80 | do_IRQ(11); |
81 | else | 81 | else |
82 | spurious_interrupt(regs); | 82 | spurious_interrupt(); |
83 | } | 83 | } |
84 | } | 84 | } |
85 | 85 | ||
diff --git a/arch/mips/momentum/ocelot_g/setup.c b/arch/mips/momentum/ocelot_g/setup.c index c580b1de33bc..56ec47039c16 100644 --- a/arch/mips/momentum/ocelot_g/setup.c +++ b/arch/mips/momentum/ocelot_g/setup.c | |||
@@ -58,7 +58,6 @@ | |||
58 | #include <asm/irq.h> | 58 | #include <asm/irq.h> |
59 | #include <asm/pci.h> | 59 | #include <asm/pci.h> |
60 | #include <asm/processor.h> | 60 | #include <asm/processor.h> |
61 | #include <asm/ptrace.h> | ||
62 | #include <asm/reboot.h> | 61 | #include <asm/reboot.h> |
63 | #include <linux/bootmem.h> | 62 | #include <linux/bootmem.h> |
64 | 63 | ||
diff --git a/arch/mips/oprofile/op_impl.h b/arch/mips/oprofile/op_impl.h index 5cfce7d87a4d..354e54496406 100644 --- a/arch/mips/oprofile/op_impl.h +++ b/arch/mips/oprofile/op_impl.h | |||
@@ -12,8 +12,8 @@ | |||
12 | 12 | ||
13 | struct pt_regs; | 13 | struct pt_regs; |
14 | 14 | ||
15 | extern int null_perf_irq(struct pt_regs *regs); | 15 | extern int null_perf_irq(void); |
16 | extern int (*perf_irq)(struct pt_regs *regs); | 16 | extern int (*perf_irq)(void); |
17 | 17 | ||
18 | /* Per-counter configuration as set via oprofilefs. */ | 18 | /* Per-counter configuration as set via oprofilefs. */ |
19 | struct op_counter_config { | 19 | struct op_counter_config { |
diff --git a/arch/mips/oprofile/op_model_mipsxx.c b/arch/mips/oprofile/op_model_mipsxx.c index a175d673540f..dd0aec9c3ce1 100644 --- a/arch/mips/oprofile/op_model_mipsxx.c +++ b/arch/mips/oprofile/op_model_mipsxx.c | |||
@@ -3,12 +3,13 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 2004, 2005 by Ralf Baechle | 6 | * Copyright (C) 2004, 05, 06 by Ralf Baechle |
7 | * Copyright (C) 2005 by MIPS Technologies, Inc. | 7 | * Copyright (C) 2005 by MIPS Technologies, Inc. |
8 | */ | 8 | */ |
9 | #include <linux/oprofile.h> | 9 | #include <linux/oprofile.h> |
10 | #include <linux/interrupt.h> | 10 | #include <linux/interrupt.h> |
11 | #include <linux/smp.h> | 11 | #include <linux/smp.h> |
12 | #include <asm/irq_regs.h> | ||
12 | 13 | ||
13 | #include "op_impl.h" | 14 | #include "op_impl.h" |
14 | 15 | ||
@@ -170,7 +171,7 @@ static void mipsxx_cpu_stop(void *args) | |||
170 | } | 171 | } |
171 | } | 172 | } |
172 | 173 | ||
173 | static int mipsxx_perfcount_handler(struct pt_regs *regs) | 174 | static int mipsxx_perfcount_handler(void) |
174 | { | 175 | { |
175 | unsigned int counters = op_model_mipsxx_ops.num_counters; | 176 | unsigned int counters = op_model_mipsxx_ops.num_counters; |
176 | unsigned int control; | 177 | unsigned int control; |
@@ -184,7 +185,7 @@ static int mipsxx_perfcount_handler(struct pt_regs *regs) | |||
184 | counter = r_c0_perfcntr ## n(); \ | 185 | counter = r_c0_perfcntr ## n(); \ |
185 | if ((control & M_PERFCTL_INTERRUPT_ENABLE) && \ | 186 | if ((control & M_PERFCTL_INTERRUPT_ENABLE) && \ |
186 | (counter & M_COUNTER_OVERFLOW)) { \ | 187 | (counter & M_COUNTER_OVERFLOW)) { \ |
187 | oprofile_add_sample(regs, n); \ | 188 | oprofile_add_sample(get_irq_regs(), n); \ |
188 | w_c0_perfcntr ## n(reg.counter[n]); \ | 189 | w_c0_perfcntr ## n(reg.counter[n]); \ |
189 | handled = 1; \ | 190 | handled = 1; \ |
190 | } | 191 | } |
diff --git a/arch/mips/pci/pci-ip32.c b/arch/mips/pci/pci-ip32.c index 17c7932cf0ae..618ea7dbc474 100644 --- a/arch/mips/pci/pci-ip32.c +++ b/arch/mips/pci/pci-ip32.c | |||
@@ -22,7 +22,7 @@ | |||
22 | * registered on the bridge error irq. It's conceivable that some of these | 22 | * registered on the bridge error irq. It's conceivable that some of these |
23 | * conditions warrant a panic. Anybody care to say which ones? | 23 | * conditions warrant a panic. Anybody care to say which ones? |
24 | */ | 24 | */ |
25 | static irqreturn_t macepci_error(int irq, void *dev, struct pt_regs *regs) | 25 | static irqreturn_t macepci_error(int irq, void *dev) |
26 | { | 26 | { |
27 | char s; | 27 | char s; |
28 | unsigned int flags = mace->pci.error; | 28 | unsigned int flags = mace->pci.error; |
diff --git a/arch/mips/philips/pnx8550/common/int.c b/arch/mips/philips/pnx8550/common/int.c index 3c93512be1ec..710611615ca2 100644 --- a/arch/mips/philips/pnx8550/common/int.c +++ b/arch/mips/philips/pnx8550/common/int.c | |||
@@ -23,6 +23,7 @@ | |||
23 | * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. | 23 | * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. |
24 | * | 24 | * |
25 | */ | 25 | */ |
26 | #include <linux/compiler.h> | ||
26 | #include <linux/init.h> | 27 | #include <linux/init.h> |
27 | #include <linux/irq.h> | 28 | #include <linux/irq.h> |
28 | #include <linux/sched.h> | 29 | #include <linux/sched.h> |
@@ -52,7 +53,7 @@ static char gic_prio[PNX8550_INT_GIC_TOTINT] = { | |||
52 | 1 // 70 | 53 | 1 // 70 |
53 | }; | 54 | }; |
54 | 55 | ||
55 | static void hw0_irqdispatch(int irq, struct pt_regs *regs) | 56 | static void hw0_irqdispatch(int irq) |
56 | { | 57 | { |
57 | /* find out which interrupt */ | 58 | /* find out which interrupt */ |
58 | irq = PNX8550_GIC_VECTOR_0 >> 3; | 59 | irq = PNX8550_GIC_VECTOR_0 >> 3; |
@@ -61,42 +62,39 @@ static void hw0_irqdispatch(int irq, struct pt_regs *regs) | |||
61 | printk("hw0_irqdispatch: irq 0, spurious interrupt?\n"); | 62 | printk("hw0_irqdispatch: irq 0, spurious interrupt?\n"); |
62 | return; | 63 | return; |
63 | } | 64 | } |
64 | do_IRQ(PNX8550_INT_GIC_MIN + irq, regs); | 65 | do_IRQ(PNX8550_INT_GIC_MIN + irq); |
65 | } | 66 | } |
66 | 67 | ||
67 | 68 | ||
68 | static void timer_irqdispatch(int irq, struct pt_regs *regs) | 69 | static void timer_irqdispatch(int irq) |
69 | { | 70 | { |
70 | irq = (0x01c0 & read_c0_config7()) >> 6; | 71 | irq = (0x01c0 & read_c0_config7()) >> 6; |
71 | 72 | ||
72 | if (irq == 0) { | 73 | if (unlikely(irq == 0)) { |
73 | printk("timer_irqdispatch: irq 0, spurious interrupt?\n"); | 74 | printk("timer_irqdispatch: irq 0, spurious interrupt?\n"); |
74 | return; | 75 | return; |
75 | } | 76 | } |
76 | 77 | ||
77 | if (irq & 0x1) { | 78 | if (irq & 0x1) |
78 | do_IRQ(PNX8550_INT_TIMER1, regs); | 79 | do_IRQ(PNX8550_INT_TIMER1); |
79 | } | 80 | if (irq & 0x2) |
80 | if (irq & 0x2) { | 81 | do_IRQ(PNX8550_INT_TIMER2); |
81 | do_IRQ(PNX8550_INT_TIMER2, regs); | 82 | if (irq & 0x4) |
82 | } | 83 | do_IRQ(PNX8550_INT_TIMER3); |
83 | if (irq & 0x4) { | ||
84 | do_IRQ(PNX8550_INT_TIMER3, regs); | ||
85 | } | ||
86 | } | 84 | } |
87 | 85 | ||
88 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 86 | asmlinkage void plat_irq_dispatch(void) |
89 | { | 87 | { |
90 | unsigned int pending = read_c0_status() & read_c0_cause(); | 88 | unsigned int pending = read_c0_status() & read_c0_cause(); |
91 | 89 | ||
92 | if (pending & STATUSF_IP2) | 90 | if (pending & STATUSF_IP2) |
93 | hw0_irqdispatch(2, regs); | 91 | hw0_irqdispatch(2); |
94 | else if (pending & STATUSF_IP7) { | 92 | else if (pending & STATUSF_IP7) { |
95 | if (read_c0_config7() & 0x01c0) | 93 | if (read_c0_config7() & 0x01c0) |
96 | timer_irqdispatch(7, regs); | 94 | timer_irqdispatch(7); |
97 | } | 95 | } |
98 | 96 | ||
99 | spurious_interrupt(regs); | 97 | spurious_interrupt(); |
100 | } | 98 | } |
101 | 99 | ||
102 | static inline void modify_cp0_intmask(unsigned clr_mask, unsigned set_mask) | 100 | static inline void modify_cp0_intmask(unsigned clr_mask, unsigned set_mask) |
diff --git a/arch/mips/pmc-sierra/yosemite/irq.c b/arch/mips/pmc-sierra/yosemite/irq.c index b91d0aa3b7ed..adb048527e76 100644 --- a/arch/mips/pmc-sierra/yosemite/irq.c +++ b/arch/mips/pmc-sierra/yosemite/irq.c | |||
@@ -56,15 +56,13 @@ | |||
56 | #define HYPERTRANSPORT_INTC 0x7a /* INTC# */ | 56 | #define HYPERTRANSPORT_INTC 0x7a /* INTC# */ |
57 | #define HYPERTRANSPORT_INTD 0x7b /* INTD# */ | 57 | #define HYPERTRANSPORT_INTD 0x7b /* INTD# */ |
58 | 58 | ||
59 | extern void jaguar_mailbox_irq(struct pt_regs *); | ||
60 | |||
61 | /* | 59 | /* |
62 | * Handle hypertransport & SMP interrupts. The interrupt lines are scarce. | 60 | * Handle hypertransport & SMP interrupts. The interrupt lines are scarce. |
63 | * For interprocessor interrupts, the best thing to do is to use the INTMSG | 61 | * For interprocessor interrupts, the best thing to do is to use the INTMSG |
64 | * register. We use the same external interrupt line, i.e. INTB3 and monitor | 62 | * register. We use the same external interrupt line, i.e. INTB3 and monitor |
65 | * another status bit | 63 | * another status bit |
66 | */ | 64 | */ |
67 | asmlinkage void ll_ht_smp_irq_handler(int irq, struct pt_regs *regs) | 65 | static void ll_ht_smp_irq_handler(int irq) |
68 | { | 66 | { |
69 | u32 status = OCD_READ(RM9000x2_OCD_INTP0STATUS4); | 67 | u32 status = OCD_READ(RM9000x2_OCD_INTP0STATUS4); |
70 | 68 | ||
@@ -107,50 +105,35 @@ asmlinkage void ll_ht_smp_irq_handler(int irq, struct pt_regs *regs) | |||
107 | } | 105 | } |
108 | #endif /* CONFIG_HT_LEVEL_TRIGGER */ | 106 | #endif /* CONFIG_HT_LEVEL_TRIGGER */ |
109 | 107 | ||
110 | do_IRQ(irq, regs); | 108 | do_IRQ(irq); |
111 | } | ||
112 | |||
113 | asmlinkage void do_extended_irq(struct pt_regs *regs) | ||
114 | { | ||
115 | unsigned int intcontrol = read_c0_intcontrol(); | ||
116 | unsigned int cause = read_c0_cause(); | ||
117 | unsigned int status = read_c0_status(); | ||
118 | unsigned int pending_sr, pending_ic; | ||
119 | |||
120 | pending_sr = status & cause & 0xff00; | ||
121 | pending_ic = (cause >> 8) & intcontrol & 0xff00; | ||
122 | |||
123 | if (pending_ic & (1 << 13)) | ||
124 | do_IRQ(13, regs); | ||
125 | |||
126 | } | 109 | } |
127 | 110 | ||
128 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 111 | asmlinkage void plat_irq_dispatch(void) |
129 | { | 112 | { |
130 | unsigned int cause = read_c0_cause(); | 113 | unsigned int cause = read_c0_cause(); |
131 | unsigned int status = read_c0_status(); | 114 | unsigned int status = read_c0_status(); |
132 | unsigned int pending = cause & status; | 115 | unsigned int pending = cause & status; |
133 | 116 | ||
134 | if (pending & STATUSF_IP7) { | 117 | if (pending & STATUSF_IP7) { |
135 | do_IRQ(7, regs); | 118 | do_IRQ(7); |
136 | } else if (pending & STATUSF_IP2) { | 119 | } else if (pending & STATUSF_IP2) { |
137 | #ifdef CONFIG_HYPERTRANSPORT | 120 | #ifdef CONFIG_HYPERTRANSPORT |
138 | ll_ht_smp_irq_handler(2, regs); | 121 | ll_ht_smp_irq_handler(2); |
139 | #else | 122 | #else |
140 | do_IRQ(2, regs); | 123 | do_IRQ(2); |
141 | #endif | 124 | #endif |
142 | } else if (pending & STATUSF_IP3) { | 125 | } else if (pending & STATUSF_IP3) { |
143 | do_IRQ(3, regs); | 126 | do_IRQ(3); |
144 | } else if (pending & STATUSF_IP4) { | 127 | } else if (pending & STATUSF_IP4) { |
145 | do_IRQ(4, regs); | 128 | do_IRQ(4); |
146 | } else if (pending & STATUSF_IP5) { | 129 | } else if (pending & STATUSF_IP5) { |
147 | #ifdef CONFIG_SMP | 130 | #ifdef CONFIG_SMP |
148 | titan_mailbox_irq(regs); | 131 | titan_mailbox_irq(); |
149 | #else | 132 | #else |
150 | do_IRQ(5, regs); | 133 | do_IRQ(5); |
151 | #endif | 134 | #endif |
152 | } else if (pending & STATUSF_IP6) { | 135 | } else if (pending & STATUSF_IP6) { |
153 | do_IRQ(4, regs); | 136 | do_IRQ(4); |
154 | } | 137 | } |
155 | } | 138 | } |
156 | 139 | ||
@@ -178,18 +161,3 @@ void __init arch_init_irq(void) | |||
178 | register_gdb_console(); | 161 | register_gdb_console(); |
179 | #endif | 162 | #endif |
180 | } | 163 | } |
181 | |||
182 | #ifdef CONFIG_KGDB | ||
183 | /* | ||
184 | * The 16550 DUART has two ports, but is allocated one IRQ | ||
185 | * for the serial console. Hence, a generic framework for | ||
186 | * serial IRQ routing in place. Currently, just calls the | ||
187 | * do_IRQ fuction. But, going in the future, need to check | ||
188 | * DUART registers for channel A and B, then decide the | ||
189 | * appropriate action | ||
190 | */ | ||
191 | asmlinkage void yosemite_kgdb_irq(int irq, struct pt_regs *regs) | ||
192 | { | ||
193 | do_IRQ(irq, regs); | ||
194 | } | ||
195 | #endif | ||
diff --git a/arch/mips/pmc-sierra/yosemite/setup.c b/arch/mips/pmc-sierra/yosemite/setup.c index 0a6ee8e5eec2..1b9b0d396d3e 100644 --- a/arch/mips/pmc-sierra/yosemite/setup.c +++ b/arch/mips/pmc-sierra/yosemite/setup.c | |||
@@ -46,7 +46,6 @@ | |||
46 | #include <asm/io.h> | 46 | #include <asm/io.h> |
47 | #include <asm/irq.h> | 47 | #include <asm/irq.h> |
48 | #include <asm/processor.h> | 48 | #include <asm/processor.h> |
49 | #include <asm/ptrace.h> | ||
50 | #include <asm/reboot.h> | 49 | #include <asm/reboot.h> |
51 | #include <asm/serial.h> | 50 | #include <asm/serial.h> |
52 | #include <asm/titan_dep.h> | 51 | #include <asm/titan_dep.h> |
diff --git a/arch/mips/pmc-sierra/yosemite/smp.c b/arch/mips/pmc-sierra/yosemite/smp.c index c197311e15d3..65fa3a23ea5e 100644 --- a/arch/mips/pmc-sierra/yosemite/smp.c +++ b/arch/mips/pmc-sierra/yosemite/smp.c | |||
@@ -110,7 +110,7 @@ void prom_smp_finish(void) | |||
110 | { | 110 | { |
111 | } | 111 | } |
112 | 112 | ||
113 | asmlinkage void titan_mailbox_irq(struct pt_regs *regs) | 113 | asmlinkage void titan_mailbox_irq(void) |
114 | { | 114 | { |
115 | int cpu = smp_processor_id(); | 115 | int cpu = smp_processor_id(); |
116 | unsigned long status; | 116 | unsigned long status; |
diff --git a/arch/mips/qemu/q-irq.c b/arch/mips/qemu/q-irq.c index 3352374c4c7d..f5ea2fe10f14 100644 --- a/arch/mips/qemu/q-irq.c +++ b/arch/mips/qemu/q-irq.c | |||
@@ -9,19 +9,19 @@ | |||
9 | 9 | ||
10 | extern asmlinkage void qemu_handle_int(void); | 10 | extern asmlinkage void qemu_handle_int(void); |
11 | 11 | ||
12 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 12 | asmlinkage void plat_irq_dispatch(void) |
13 | { | 13 | { |
14 | unsigned int pending = read_c0_status() & read_c0_cause(); | 14 | unsigned int pending = read_c0_status() & read_c0_cause(); |
15 | 15 | ||
16 | if (pending & 0x8000) { | 16 | if (pending & 0x8000) { |
17 | ll_timer_interrupt(Q_COUNT_COMPARE_IRQ, regs); | 17 | ll_timer_interrupt(Q_COUNT_COMPARE_IRQ); |
18 | return; | 18 | return; |
19 | } | 19 | } |
20 | if (pending & 0x0400) { | 20 | if (pending & 0x0400) { |
21 | int irq = i8259_irq(); | 21 | int irq = i8259_irq(); |
22 | 22 | ||
23 | if (likely(irq >= 0)) | 23 | if (likely(irq >= 0)) |
24 | do_IRQ(irq, regs); | 24 | do_IRQ(irq); |
25 | 25 | ||
26 | return; | 26 | return; |
27 | } | 27 | } |
diff --git a/arch/mips/sgi-ip22/ip22-berr.c b/arch/mips/sgi-ip22/ip22-berr.c index a28dc7800072..de6a0cc32fea 100644 --- a/arch/mips/sgi-ip22/ip22-berr.c +++ b/arch/mips/sgi-ip22/ip22-berr.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <asm/system.h> | 12 | #include <asm/system.h> |
13 | #include <asm/traps.h> | 13 | #include <asm/traps.h> |
14 | #include <asm/branch.h> | 14 | #include <asm/branch.h> |
15 | #include <asm/irq_regs.h> | ||
15 | #include <asm/sgi/mc.h> | 16 | #include <asm/sgi/mc.h> |
16 | #include <asm/sgi/hpc3.h> | 17 | #include <asm/sgi/hpc3.h> |
17 | #include <asm/sgi/ioc.h> | 18 | #include <asm/sgi/ioc.h> |
@@ -85,9 +86,10 @@ static void print_buserr(void) | |||
85 | * and then clear the interrupt when this happens. | 86 | * and then clear the interrupt when this happens. |
86 | */ | 87 | */ |
87 | 88 | ||
88 | void ip22_be_interrupt(int irq, struct pt_regs *regs) | 89 | void ip22_be_interrupt(int irq) |
89 | { | 90 | { |
90 | const int field = 2 * sizeof(unsigned long); | 91 | const int field = 2 * sizeof(unsigned long); |
92 | const struct pt_regs *regs = get_irq_regs(); | ||
91 | 93 | ||
92 | save_and_clear_buserr(); | 94 | save_and_clear_buserr(); |
93 | print_buserr(); | 95 | print_buserr(); |
diff --git a/arch/mips/sgi-ip22/ip22-eisa.c b/arch/mips/sgi-ip22/ip22-eisa.c index ee0514a29922..0d18ed47c47a 100644 --- a/arch/mips/sgi-ip22/ip22-eisa.c +++ b/arch/mips/sgi-ip22/ip22-eisa.c | |||
@@ -70,7 +70,7 @@ static char __init *decode_eisa_sig(unsigned long addr) | |||
70 | return sig_str; | 70 | return sig_str; |
71 | } | 71 | } |
72 | 72 | ||
73 | static irqreturn_t ip22_eisa_intr(int irq, void *dev_id, struct pt_regs *regs) | 73 | static irqreturn_t ip22_eisa_intr(int irq, void *dev_id) |
74 | { | 74 | { |
75 | u8 eisa_irq; | 75 | u8 eisa_irq; |
76 | u8 dma1, dma2; | 76 | u8 dma1, dma2; |
@@ -80,7 +80,7 @@ static irqreturn_t ip22_eisa_intr(int irq, void *dev_id, struct pt_regs *regs) | |||
80 | dma2 = inb(EISA_DMA2_STATUS); | 80 | dma2 = inb(EISA_DMA2_STATUS); |
81 | 81 | ||
82 | if (eisa_irq < EISA_MAX_IRQ) { | 82 | if (eisa_irq < EISA_MAX_IRQ) { |
83 | do_IRQ(eisa_irq, regs); | 83 | do_IRQ(eisa_irq); |
84 | return IRQ_HANDLED; | 84 | return IRQ_HANDLED; |
85 | } | 85 | } |
86 | 86 | ||
@@ -89,6 +89,7 @@ static irqreturn_t ip22_eisa_intr(int irq, void *dev_id, struct pt_regs *regs) | |||
89 | 89 | ||
90 | outb(0x20, EISA_INT2_CTRL); | 90 | outb(0x20, EISA_INT2_CTRL); |
91 | outb(0x20, EISA_INT1_CTRL); | 91 | outb(0x20, EISA_INT1_CTRL); |
92 | |||
92 | return IRQ_NONE; | 93 | return IRQ_NONE; |
93 | } | 94 | } |
94 | 95 | ||
diff --git a/arch/mips/sgi-ip22/ip22-int.c b/arch/mips/sgi-ip22/ip22-int.c index f66026e5d64b..af518898eaa1 100644 --- a/arch/mips/sgi-ip22/ip22-int.c +++ b/arch/mips/sgi-ip22/ip22-int.c | |||
@@ -222,7 +222,7 @@ static struct irq_chip ip22_local3_irq_type = { | |||
222 | .end = end_local3_irq, | 222 | .end = end_local3_irq, |
223 | }; | 223 | }; |
224 | 224 | ||
225 | static void indy_local0_irqdispatch(struct pt_regs *regs) | 225 | static void indy_local0_irqdispatch(void) |
226 | { | 226 | { |
227 | u8 mask = sgint->istat0 & sgint->imask0; | 227 | u8 mask = sgint->istat0 & sgint->imask0; |
228 | u8 mask2; | 228 | u8 mask2; |
@@ -236,11 +236,10 @@ static void indy_local0_irqdispatch(struct pt_regs *regs) | |||
236 | 236 | ||
237 | /* if irq == 0, then the interrupt has already been cleared */ | 237 | /* if irq == 0, then the interrupt has already been cleared */ |
238 | if (irq) | 238 | if (irq) |
239 | do_IRQ(irq, regs); | 239 | do_IRQ(irq); |
240 | return; | ||
241 | } | 240 | } |
242 | 241 | ||
243 | static void indy_local1_irqdispatch(struct pt_regs *regs) | 242 | static void indy_local1_irqdispatch(void) |
244 | { | 243 | { |
245 | u8 mask = sgint->istat1 & sgint->imask1; | 244 | u8 mask = sgint->istat1 & sgint->imask1; |
246 | u8 mask2; | 245 | u8 mask2; |
@@ -254,19 +253,18 @@ static void indy_local1_irqdispatch(struct pt_regs *regs) | |||
254 | 253 | ||
255 | /* if irq == 0, then the interrupt has already been cleared */ | 254 | /* if irq == 0, then the interrupt has already been cleared */ |
256 | if (irq) | 255 | if (irq) |
257 | do_IRQ(irq, regs); | 256 | do_IRQ(irq); |
258 | return; | ||
259 | } | 257 | } |
260 | 258 | ||
261 | extern void ip22_be_interrupt(int irq, struct pt_regs *regs); | 259 | extern void ip22_be_interrupt(int irq); |
262 | 260 | ||
263 | static void indy_buserror_irq(struct pt_regs *regs) | 261 | static void indy_buserror_irq(void) |
264 | { | 262 | { |
265 | int irq = SGI_BUSERR_IRQ; | 263 | int irq = SGI_BUSERR_IRQ; |
266 | 264 | ||
267 | irq_enter(); | 265 | irq_enter(); |
268 | kstat_this_cpu.irqs[irq]++; | 266 | kstat_this_cpu.irqs[irq]++; |
269 | ip22_be_interrupt(irq, regs); | 267 | ip22_be_interrupt(irq); |
270 | irq_exit(); | 268 | irq_exit(); |
271 | } | 269 | } |
272 | 270 | ||
@@ -305,8 +303,8 @@ static struct irqaction map1_cascade = { | |||
305 | #define SGI_INTERRUPTS SGINT_LOCAL3 | 303 | #define SGI_INTERRUPTS SGINT_LOCAL3 |
306 | #endif | 304 | #endif |
307 | 305 | ||
308 | extern void indy_r4k_timer_interrupt(struct pt_regs *regs); | 306 | extern void indy_r4k_timer_interrupt(void); |
309 | extern void indy_8254timer_irq(struct pt_regs *regs); | 307 | extern void indy_8254timer_irq(void); |
310 | 308 | ||
311 | /* | 309 | /* |
312 | * IRQs on the INDY look basically (barring software IRQs which we don't use | 310 | * IRQs on the INDY look basically (barring software IRQs which we don't use |
@@ -336,7 +334,7 @@ extern void indy_8254timer_irq(struct pt_regs *regs); | |||
336 | * another exception, big deal. | 334 | * another exception, big deal. |
337 | */ | 335 | */ |
338 | 336 | ||
339 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 337 | asmlinkage void plat_irq_dispatch(void) |
340 | { | 338 | { |
341 | unsigned int pending = read_c0_cause(); | 339 | unsigned int pending = read_c0_cause(); |
342 | 340 | ||
@@ -344,15 +342,15 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
344 | * First we check for r4k counter/timer IRQ. | 342 | * First we check for r4k counter/timer IRQ. |
345 | */ | 343 | */ |
346 | if (pending & CAUSEF_IP7) | 344 | if (pending & CAUSEF_IP7) |
347 | indy_r4k_timer_interrupt(regs); | 345 | indy_r4k_timer_interrupt(); |
348 | else if (pending & CAUSEF_IP2) | 346 | else if (pending & CAUSEF_IP2) |
349 | indy_local0_irqdispatch(regs); | 347 | indy_local0_irqdispatch(); |
350 | else if (pending & CAUSEF_IP3) | 348 | else if (pending & CAUSEF_IP3) |
351 | indy_local1_irqdispatch(regs); | 349 | indy_local1_irqdispatch(); |
352 | else if (pending & CAUSEF_IP6) | 350 | else if (pending & CAUSEF_IP6) |
353 | indy_buserror_irq(regs); | 351 | indy_buserror_irq(); |
354 | else if (pending & (CAUSEF_IP4 | CAUSEF_IP5)) | 352 | else if (pending & (CAUSEF_IP4 | CAUSEF_IP5)) |
355 | indy_8254timer_irq(regs); | 353 | indy_8254timer_irq(); |
356 | } | 354 | } |
357 | 355 | ||
358 | extern void mips_cpu_irq_init(unsigned int irq_base); | 356 | extern void mips_cpu_irq_init(unsigned int irq_base); |
diff --git a/arch/mips/sgi-ip22/ip22-time.c b/arch/mips/sgi-ip22/ip22-time.c index 3462b0d98def..205554734099 100644 --- a/arch/mips/sgi-ip22/ip22-time.c +++ b/arch/mips/sgi-ip22/ip22-time.c | |||
@@ -175,7 +175,7 @@ static __init void indy_time_init(void) | |||
175 | } | 175 | } |
176 | 176 | ||
177 | /* Generic SGI handler for (spurious) 8254 interrupts */ | 177 | /* Generic SGI handler for (spurious) 8254 interrupts */ |
178 | void indy_8254timer_irq(struct pt_regs *regs) | 178 | void indy_8254timer_irq(void) |
179 | { | 179 | { |
180 | int irq = SGI_8254_0_IRQ; | 180 | int irq = SGI_8254_0_IRQ; |
181 | ULONG cnt; | 181 | ULONG cnt; |
@@ -189,16 +189,14 @@ void indy_8254timer_irq(struct pt_regs *regs) | |||
189 | irq_exit(); | 189 | irq_exit(); |
190 | } | 190 | } |
191 | 191 | ||
192 | void indy_r4k_timer_interrupt(struct pt_regs *regs) | 192 | void indy_r4k_timer_interrupt(void) |
193 | { | 193 | { |
194 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
195 | int irq = SGI_TIMER_IRQ; | 194 | int irq = SGI_TIMER_IRQ; |
196 | 195 | ||
197 | irq_enter(); | 196 | irq_enter(); |
198 | kstat_this_cpu.irqs[irq]++; | 197 | kstat_this_cpu.irqs[irq]++; |
199 | timer_interrupt(irq, NULL); | 198 | timer_interrupt(irq, NULL); |
200 | irq_exit(); | 199 | irq_exit(); |
201 | set_irq_regs(old_regs); | ||
202 | } | 200 | } |
203 | 201 | ||
204 | void __init plat_timer_setup(struct irqaction *irq) | 202 | void __init plat_timer_setup(struct irqaction *irq) |
diff --git a/arch/mips/sgi-ip27/ip27-irq.c b/arch/mips/sgi-ip27/ip27-irq.c index 24a85372284f..f01ba1f90770 100644 --- a/arch/mips/sgi-ip27/ip27-irq.c +++ b/arch/mips/sgi-ip27/ip27-irq.c | |||
@@ -30,7 +30,6 @@ | |||
30 | #include <asm/mipsregs.h> | 30 | #include <asm/mipsregs.h> |
31 | #include <asm/system.h> | 31 | #include <asm/system.h> |
32 | 32 | ||
33 | #include <asm/ptrace.h> | ||
34 | #include <asm/processor.h> | 33 | #include <asm/processor.h> |
35 | #include <asm/pci/bridge.h> | 34 | #include <asm/pci/bridge.h> |
36 | #include <asm/sn/addrs.h> | 35 | #include <asm/sn/addrs.h> |
@@ -129,7 +128,7 @@ static int ms1bit(unsigned long x) | |||
129 | * Kanoj 05.13.00 | 128 | * Kanoj 05.13.00 |
130 | */ | 129 | */ |
131 | 130 | ||
132 | static void ip27_do_irq_mask0(struct pt_regs *regs) | 131 | static void ip27_do_irq_mask0(void) |
133 | { | 132 | { |
134 | int irq, swlevel; | 133 | int irq, swlevel; |
135 | hubreg_t pend0, mask0; | 134 | hubreg_t pend0, mask0; |
@@ -164,13 +163,13 @@ static void ip27_do_irq_mask0(struct pt_regs *regs) | |||
164 | struct slice_data *si = cpu_data[cpu].data; | 163 | struct slice_data *si = cpu_data[cpu].data; |
165 | 164 | ||
166 | irq = si->level_to_irq[swlevel]; | 165 | irq = si->level_to_irq[swlevel]; |
167 | do_IRQ(irq, regs); | 166 | do_IRQ(irq); |
168 | } | 167 | } |
169 | 168 | ||
170 | LOCAL_HUB_L(PI_INT_PEND0); | 169 | LOCAL_HUB_L(PI_INT_PEND0); |
171 | } | 170 | } |
172 | 171 | ||
173 | static void ip27_do_irq_mask1(struct pt_regs *regs) | 172 | static void ip27_do_irq_mask1(void) |
174 | { | 173 | { |
175 | int irq, swlevel; | 174 | int irq, swlevel; |
176 | hubreg_t pend1, mask1; | 175 | hubreg_t pend1, mask1; |
@@ -190,17 +189,17 @@ static void ip27_do_irq_mask1(struct pt_regs *regs) | |||
190 | /* "map" swlevel to irq */ | 189 | /* "map" swlevel to irq */ |
191 | irq = si->level_to_irq[swlevel]; | 190 | irq = si->level_to_irq[swlevel]; |
192 | LOCAL_HUB_CLR_INTR(swlevel); | 191 | LOCAL_HUB_CLR_INTR(swlevel); |
193 | do_IRQ(irq, regs); | 192 | do_IRQ(irq); |
194 | 193 | ||
195 | LOCAL_HUB_L(PI_INT_PEND1); | 194 | LOCAL_HUB_L(PI_INT_PEND1); |
196 | } | 195 | } |
197 | 196 | ||
198 | static void ip27_prof_timer(struct pt_regs *regs) | 197 | static void ip27_prof_timer(void) |
199 | { | 198 | { |
200 | panic("CPU %d got a profiling interrupt", smp_processor_id()); | 199 | panic("CPU %d got a profiling interrupt", smp_processor_id()); |
201 | } | 200 | } |
202 | 201 | ||
203 | static void ip27_hub_error(struct pt_regs *regs) | 202 | static void ip27_hub_error(void) |
204 | { | 203 | { |
205 | panic("CPU %d got a hub error interrupt", smp_processor_id()); | 204 | panic("CPU %d got a hub error interrupt", smp_processor_id()); |
206 | } | 205 | } |
@@ -418,22 +417,22 @@ int __devinit request_bridge_irq(struct bridge_controller *bc) | |||
418 | return irq; | 417 | return irq; |
419 | } | 418 | } |
420 | 419 | ||
421 | extern void ip27_rt_timer_interrupt(struct pt_regs *regs); | 420 | extern void ip27_rt_timer_interrupt(void); |
422 | 421 | ||
423 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 422 | asmlinkage void plat_irq_dispatch(void) |
424 | { | 423 | { |
425 | unsigned long pending = read_c0_cause() & read_c0_status(); | 424 | unsigned long pending = read_c0_cause() & read_c0_status(); |
426 | 425 | ||
427 | if (pending & CAUSEF_IP4) | 426 | if (pending & CAUSEF_IP4) |
428 | ip27_rt_timer_interrupt(regs); | 427 | ip27_rt_timer_interrupt(); |
429 | else if (pending & CAUSEF_IP2) /* PI_INT_PEND_0 or CC_PEND_{A|B} */ | 428 | else if (pending & CAUSEF_IP2) /* PI_INT_PEND_0 or CC_PEND_{A|B} */ |
430 | ip27_do_irq_mask0(regs); | 429 | ip27_do_irq_mask0(); |
431 | else if (pending & CAUSEF_IP3) /* PI_INT_PEND_1 */ | 430 | else if (pending & CAUSEF_IP3) /* PI_INT_PEND_1 */ |
432 | ip27_do_irq_mask1(regs); | 431 | ip27_do_irq_mask1(); |
433 | else if (pending & CAUSEF_IP5) | 432 | else if (pending & CAUSEF_IP5) |
434 | ip27_prof_timer(regs); | 433 | ip27_prof_timer(); |
435 | else if (pending & CAUSEF_IP6) | 434 | else if (pending & CAUSEF_IP6) |
436 | ip27_hub_error(regs); | 435 | ip27_hub_error(); |
437 | } | 436 | } |
438 | 437 | ||
439 | void __init arch_init_irq(void) | 438 | void __init arch_init_irq(void) |
diff --git a/arch/mips/sgi-ip27/ip27-timer.c b/arch/mips/sgi-ip27/ip27-timer.c index 257ce118e380..4e870fc4469b 100644 --- a/arch/mips/sgi-ip27/ip27-timer.c +++ b/arch/mips/sgi-ip27/ip27-timer.c | |||
@@ -89,7 +89,7 @@ static int set_rtc_mmss(unsigned long nowtime) | |||
89 | 89 | ||
90 | static unsigned int rt_timer_irq; | 90 | static unsigned int rt_timer_irq; |
91 | 91 | ||
92 | void ip27_rt_timer_interrupt(struct pt_regs *regs) | 92 | void ip27_rt_timer_interrupt(void) |
93 | { | 93 | { |
94 | int cpu = smp_processor_id(); | 94 | int cpu = smp_processor_id(); |
95 | int cpuA = cputoslice(cpu) == 0; | 95 | int cpuA = cputoslice(cpu) == 0; |
@@ -111,7 +111,7 @@ again: | |||
111 | if (cpu == 0) | 111 | if (cpu == 0) |
112 | do_timer(1); | 112 | do_timer(1); |
113 | 113 | ||
114 | update_process_times(user_mode(regs)); | 114 | update_process_times(user_mode(get_irq_regs())); |
115 | 115 | ||
116 | /* | 116 | /* |
117 | * If we have an externally synchronized Linux clock, then update | 117 | * If we have an externally synchronized Linux clock, then update |
diff --git a/arch/mips/sgi-ip32/crime.c b/arch/mips/sgi-ip32/crime.c index 41b5eca1148c..bff508704d03 100644 --- a/arch/mips/sgi-ip32/crime.c +++ b/arch/mips/sgi-ip32/crime.c | |||
@@ -14,7 +14,6 @@ | |||
14 | #include <asm/bootinfo.h> | 14 | #include <asm/bootinfo.h> |
15 | #include <asm/io.h> | 15 | #include <asm/io.h> |
16 | #include <asm/mipsregs.h> | 16 | #include <asm/mipsregs.h> |
17 | #include <asm/ptrace.h> | ||
18 | #include <asm/page.h> | 17 | #include <asm/page.h> |
19 | #include <asm/ip32/crime.h> | 18 | #include <asm/ip32/crime.h> |
20 | #include <asm/ip32/mace.h> | 19 | #include <asm/ip32/mace.h> |
@@ -40,8 +39,7 @@ void __init crime_init(void) | |||
40 | id, rev, field, (unsigned long) CRIME_BASE); | 39 | id, rev, field, (unsigned long) CRIME_BASE); |
41 | } | 40 | } |
42 | 41 | ||
43 | irqreturn_t | 42 | irqreturn_t crime_memerr_intr(unsigned int irq, void *dev_id) |
44 | crime_memerr_intr (unsigned int irq, void *dev_id, struct pt_regs *regs) | ||
45 | { | 43 | { |
46 | unsigned long stat, addr; | 44 | unsigned long stat, addr; |
47 | int fatal = 0; | 45 | int fatal = 0; |
@@ -92,8 +90,7 @@ crime_memerr_intr (unsigned int irq, void *dev_id, struct pt_regs *regs) | |||
92 | return IRQ_HANDLED; | 90 | return IRQ_HANDLED; |
93 | } | 91 | } |
94 | 92 | ||
95 | irqreturn_t | 93 | irqreturn_t crime_cpuerr_intr(unsigned int irq, void *dev_id) |
96 | crime_cpuerr_intr (unsigned int irq, void *dev_id, struct pt_regs *regs) | ||
97 | { | 94 | { |
98 | unsigned long stat = crime->cpu_error_stat & CRIME_CPU_ERROR_MASK; | 95 | unsigned long stat = crime->cpu_error_stat & CRIME_CPU_ERROR_MASK; |
99 | unsigned long addr = crime->cpu_error_addr & CRIME_CPU_ERROR_ADDR_MASK; | 96 | unsigned long addr = crime->cpu_error_addr & CRIME_CPU_ERROR_ADDR_MASK; |
diff --git a/arch/mips/sgi-ip32/ip32-irq.c b/arch/mips/sgi-ip32/ip32-irq.c index c64a820373de..c9acadd0846b 100644 --- a/arch/mips/sgi-ip32/ip32-irq.c +++ b/arch/mips/sgi-ip32/ip32-irq.c | |||
@@ -120,10 +120,8 @@ static void inline flush_mace_bus(void) | |||
120 | static DEFINE_SPINLOCK(ip32_irq_lock); | 120 | static DEFINE_SPINLOCK(ip32_irq_lock); |
121 | 121 | ||
122 | /* Some initial interrupts to set up */ | 122 | /* Some initial interrupts to set up */ |
123 | extern irqreturn_t crime_memerr_intr (int irq, void *dev_id, | 123 | extern irqreturn_t crime_memerr_intr(int irq, void *dev_id); |
124 | struct pt_regs *regs); | 124 | extern irqreturn_t crime_cpuerr_intr(int irq, void *dev_id); |
125 | extern irqreturn_t crime_cpuerr_intr (int irq, void *dev_id, | ||
126 | struct pt_regs *regs); | ||
127 | 125 | ||
128 | struct irqaction memerr_irq = { crime_memerr_intr, IRQF_DISABLED, | 126 | struct irqaction memerr_irq = { crime_memerr_intr, IRQF_DISABLED, |
129 | CPU_MASK_NONE, "CRIME memory error", NULL, NULL }; | 127 | CPU_MASK_NONE, "CRIME memory error", NULL, NULL }; |
@@ -479,7 +477,7 @@ static struct irq_chip ip32_mace_interrupt = { | |||
479 | .end = end_mace_irq, | 477 | .end = end_mace_irq, |
480 | }; | 478 | }; |
481 | 479 | ||
482 | static void ip32_unknown_interrupt(struct pt_regs *regs) | 480 | static void ip32_unknown_interrupt(void) |
483 | { | 481 | { |
484 | printk ("Unknown interrupt occurred!\n"); | 482 | printk ("Unknown interrupt occurred!\n"); |
485 | printk ("cp0_status: %08x\n", read_c0_status()); | 483 | printk ("cp0_status: %08x\n", read_c0_status()); |
@@ -492,7 +490,7 @@ static void ip32_unknown_interrupt(struct pt_regs *regs) | |||
492 | printk ("MACE PCI control register: %08x\n", mace->pci.control); | 490 | printk ("MACE PCI control register: %08x\n", mace->pci.control); |
493 | 491 | ||
494 | printk("Register dump:\n"); | 492 | printk("Register dump:\n"); |
495 | show_regs(regs); | 493 | show_regs(get_irq_regs()); |
496 | 494 | ||
497 | printk("Please mail this report to linux-mips@linux-mips.org\n"); | 495 | printk("Please mail this report to linux-mips@linux-mips.org\n"); |
498 | printk("Spinning..."); | 496 | printk("Spinning..."); |
@@ -501,7 +499,7 @@ static void ip32_unknown_interrupt(struct pt_regs *regs) | |||
501 | 499 | ||
502 | /* CRIME 1.1 appears to deliver all interrupts to this one pin. */ | 500 | /* CRIME 1.1 appears to deliver all interrupts to this one pin. */ |
503 | /* change this to loop over all edge-triggered irqs, exception masked out ones */ | 501 | /* change this to loop over all edge-triggered irqs, exception masked out ones */ |
504 | static void ip32_irq0(struct pt_regs *regs) | 502 | static void ip32_irq0(void) |
505 | { | 503 | { |
506 | uint64_t crime_int; | 504 | uint64_t crime_int; |
507 | int irq = 0; | 505 | int irq = 0; |
@@ -516,50 +514,50 @@ static void ip32_irq0(struct pt_regs *regs) | |||
516 | } | 514 | } |
517 | irq++; | 515 | irq++; |
518 | DBG("*irq %u*\n", irq); | 516 | DBG("*irq %u*\n", irq); |
519 | do_IRQ(irq, regs); | 517 | do_IRQ(irq); |
520 | } | 518 | } |
521 | 519 | ||
522 | static void ip32_irq1(struct pt_regs *regs) | 520 | static void ip32_irq1(void) |
523 | { | 521 | { |
524 | ip32_unknown_interrupt(regs); | 522 | ip32_unknown_interrupt(); |
525 | } | 523 | } |
526 | 524 | ||
527 | static void ip32_irq2(struct pt_regs *regs) | 525 | static void ip32_irq2(void) |
528 | { | 526 | { |
529 | ip32_unknown_interrupt(regs); | 527 | ip32_unknown_interrupt(); |
530 | } | 528 | } |
531 | 529 | ||
532 | static void ip32_irq3(struct pt_regs *regs) | 530 | static void ip32_irq3(void) |
533 | { | 531 | { |
534 | ip32_unknown_interrupt(regs); | 532 | ip32_unknown_interrupt(); |
535 | } | 533 | } |
536 | 534 | ||
537 | static void ip32_irq4(struct pt_regs *regs) | 535 | static void ip32_irq4(void) |
538 | { | 536 | { |
539 | ip32_unknown_interrupt(regs); | 537 | ip32_unknown_interrupt(); |
540 | } | 538 | } |
541 | 539 | ||
542 | static void ip32_irq5(struct pt_regs *regs) | 540 | static void ip32_irq5(void) |
543 | { | 541 | { |
544 | ll_timer_interrupt(IP32_R4K_TIMER_IRQ, regs); | 542 | ll_timer_interrupt(IP32_R4K_TIMER_IRQ); |
545 | } | 543 | } |
546 | 544 | ||
547 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 545 | asmlinkage void plat_irq_dispatch(void) |
548 | { | 546 | { |
549 | unsigned int pending = read_c0_cause(); | 547 | unsigned int pending = read_c0_cause(); |
550 | 548 | ||
551 | if (likely(pending & IE_IRQ0)) | 549 | if (likely(pending & IE_IRQ0)) |
552 | ip32_irq0(regs); | 550 | ip32_irq0(); |
553 | else if (unlikely(pending & IE_IRQ1)) | 551 | else if (unlikely(pending & IE_IRQ1)) |
554 | ip32_irq1(regs); | 552 | ip32_irq1(); |
555 | else if (unlikely(pending & IE_IRQ2)) | 553 | else if (unlikely(pending & IE_IRQ2)) |
556 | ip32_irq2(regs); | 554 | ip32_irq2(); |
557 | else if (unlikely(pending & IE_IRQ3)) | 555 | else if (unlikely(pending & IE_IRQ3)) |
558 | ip32_irq3(regs); | 556 | ip32_irq3(); |
559 | else if (unlikely(pending & IE_IRQ4)) | 557 | else if (unlikely(pending & IE_IRQ4)) |
560 | ip32_irq4(regs); | 558 | ip32_irq4(); |
561 | else if (likely(pending & IE_IRQ5)) | 559 | else if (likely(pending & IE_IRQ5)) |
562 | ip32_irq5(regs); | 560 | ip32_irq5(); |
563 | } | 561 | } |
564 | 562 | ||
565 | void __init arch_init_irq(void) | 563 | void __init arch_init_irq(void) |
diff --git a/arch/mips/sibyte/bcm1480/irq.c b/arch/mips/sibyte/bcm1480/irq.c index a46b75b23ecb..8b1f41484923 100644 --- a/arch/mips/sibyte/bcm1480/irq.c +++ b/arch/mips/sibyte/bcm1480/irq.c | |||
@@ -25,9 +25,9 @@ | |||
25 | #include <linux/kernel_stat.h> | 25 | #include <linux/kernel_stat.h> |
26 | 26 | ||
27 | #include <asm/errno.h> | 27 | #include <asm/errno.h> |
28 | #include <asm/irq_regs.h> | ||
28 | #include <asm/signal.h> | 29 | #include <asm/signal.h> |
29 | #include <asm/system.h> | 30 | #include <asm/system.h> |
30 | #include <asm/ptrace.h> | ||
31 | #include <asm/io.h> | 31 | #include <asm/io.h> |
32 | 32 | ||
33 | #include <asm/sibyte/bcm1480_regs.h> | 33 | #include <asm/sibyte/bcm1480_regs.h> |
@@ -284,8 +284,7 @@ void __init init_bcm1480_irqs(void) | |||
284 | } | 284 | } |
285 | 285 | ||
286 | 286 | ||
287 | static irqreturn_t bcm1480_dummy_handler(int irq, void *dev_id, | 287 | static irqreturn_t bcm1480_dummy_handler(int irq, void *dev_id) |
288 | struct pt_regs *regs) | ||
289 | { | 288 | { |
290 | return IRQ_NONE; | 289 | return IRQ_NONE; |
291 | } | 290 | } |
@@ -453,7 +452,7 @@ void __init arch_init_irq(void) | |||
453 | #define duart_out(reg, val) csr_out32(val, IOADDR(A_DUART_CHANREG(kgdb_port,reg))) | 452 | #define duart_out(reg, val) csr_out32(val, IOADDR(A_DUART_CHANREG(kgdb_port,reg))) |
454 | #define duart_in(reg) csr_in32(IOADDR(A_DUART_CHANREG(kgdb_port,reg))) | 453 | #define duart_in(reg) csr_in32(IOADDR(A_DUART_CHANREG(kgdb_port,reg))) |
455 | 454 | ||
456 | void bcm1480_kgdb_interrupt(struct pt_regs *regs) | 455 | static void bcm1480_kgdb_interrupt(void) |
457 | { | 456 | { |
458 | /* | 457 | /* |
459 | * Clear break-change status (allow some time for the remote | 458 | * Clear break-change status (allow some time for the remote |
@@ -464,16 +463,15 @@ void bcm1480_kgdb_interrupt(struct pt_regs *regs) | |||
464 | mdelay(500); | 463 | mdelay(500); |
465 | duart_out(R_DUART_CMD, V_DUART_MISC_CMD_RESET_BREAK_INT | | 464 | duart_out(R_DUART_CMD, V_DUART_MISC_CMD_RESET_BREAK_INT | |
466 | M_DUART_RX_EN | M_DUART_TX_EN); | 465 | M_DUART_RX_EN | M_DUART_TX_EN); |
467 | set_async_breakpoint(®s->cp0_epc); | 466 | set_async_breakpoint(&get_irq_regs()->cp0_epc); |
468 | } | 467 | } |
469 | 468 | ||
470 | #endif /* CONFIG_KGDB */ | 469 | #endif /* CONFIG_KGDB */ |
471 | 470 | ||
472 | extern void bcm1480_timer_interrupt(struct pt_regs *regs); | 471 | extern void bcm1480_timer_interrupt(void); |
473 | extern void bcm1480_mailbox_interrupt(struct pt_regs *regs); | 472 | extern void bcm1480_mailbox_interrupt(void); |
474 | extern void bcm1480_kgdb_interrupt(struct pt_regs *regs); | ||
475 | 473 | ||
476 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 474 | asmlinkage void plat_irq_dispatch(void) |
477 | { | 475 | { |
478 | unsigned int pending; | 476 | unsigned int pending; |
479 | 477 | ||
@@ -486,21 +484,21 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
486 | 484 | ||
487 | #ifdef CONFIG_SIBYTE_BCM1480_PROF | 485 | #ifdef CONFIG_SIBYTE_BCM1480_PROF |
488 | if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */ | 486 | if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */ |
489 | sbprof_cpu_intr(exception_epc(regs)); | 487 | sbprof_cpu_intr(); |
490 | else | 488 | else |
491 | #endif | 489 | #endif |
492 | 490 | ||
493 | if (pending & CAUSEF_IP4) | 491 | if (pending & CAUSEF_IP4) |
494 | bcm1480_timer_interrupt(regs); | 492 | bcm1480_timer_interrupt(); |
495 | 493 | ||
496 | #ifdef CONFIG_SMP | 494 | #ifdef CONFIG_SMP |
497 | else if (pending & CAUSEF_IP3) | 495 | else if (pending & CAUSEF_IP3) |
498 | bcm1480_mailbox_interrupt(regs); | 496 | bcm1480_mailbox_interrupt(); |
499 | #endif | 497 | #endif |
500 | 498 | ||
501 | #ifdef CONFIG_KGDB | 499 | #ifdef CONFIG_KGDB |
502 | else if (pending & CAUSEF_IP6) | 500 | else if (pending & CAUSEF_IP6) |
503 | bcm1480_kgdb_interrupt(regs); /* KGDB (uart 1) */ | 501 | bcm1480_kgdb_interrupt(); /* KGDB (uart 1) */ |
504 | #endif | 502 | #endif |
505 | 503 | ||
506 | else if (pending & CAUSEF_IP2) { | 504 | else if (pending & CAUSEF_IP2) { |
@@ -521,9 +519,9 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
521 | 519 | ||
522 | if (mask_h) { | 520 | if (mask_h) { |
523 | if (mask_h ^ 1) | 521 | if (mask_h ^ 1) |
524 | do_IRQ(fls64(mask_h) - 1, regs); | 522 | do_IRQ(fls64(mask_h) - 1); |
525 | else | 523 | else |
526 | do_IRQ(63 + fls64(mask_l), regs); | 524 | do_IRQ(63 + fls64(mask_l)); |
527 | } | 525 | } |
528 | } | 526 | } |
529 | } | 527 | } |
diff --git a/arch/mips/sibyte/bcm1480/smp.c b/arch/mips/sibyte/bcm1480/smp.c index 584a4b33faac..6eac36d1b8c8 100644 --- a/arch/mips/sibyte/bcm1480/smp.c +++ b/arch/mips/sibyte/bcm1480/smp.c | |||
@@ -88,7 +88,7 @@ void core_send_ipi(int cpu, unsigned int action) | |||
88 | __raw_writeq((((u64)action)<< 48), mailbox_0_set_regs[cpu]); | 88 | __raw_writeq((((u64)action)<< 48), mailbox_0_set_regs[cpu]); |
89 | } | 89 | } |
90 | 90 | ||
91 | void bcm1480_mailbox_interrupt(struct pt_regs *regs) | 91 | void bcm1480_mailbox_interrupt(void) |
92 | { | 92 | { |
93 | int cpu = smp_processor_id(); | 93 | int cpu = smp_processor_id(); |
94 | unsigned int action; | 94 | unsigned int action; |
diff --git a/arch/mips/sibyte/bcm1480/time.c b/arch/mips/sibyte/bcm1480/time.c index 7e088f6c4a86..bf12af46132e 100644 --- a/arch/mips/sibyte/bcm1480/time.c +++ b/arch/mips/sibyte/bcm1480/time.c | |||
@@ -31,7 +31,6 @@ | |||
31 | #include <linux/kernel_stat.h> | 31 | #include <linux/kernel_stat.h> |
32 | 32 | ||
33 | #include <asm/irq.h> | 33 | #include <asm/irq.h> |
34 | #include <asm/ptrace.h> | ||
35 | #include <asm/addrspace.h> | 34 | #include <asm/addrspace.h> |
36 | #include <asm/time.h> | 35 | #include <asm/time.h> |
37 | #include <asm/io.h> | 36 | #include <asm/io.h> |
@@ -100,10 +99,10 @@ void bcm1480_time_init(void) | |||
100 | 99 | ||
101 | #include <asm/sibyte/sb1250.h> | 100 | #include <asm/sibyte/sb1250.h> |
102 | 101 | ||
103 | void bcm1480_timer_interrupt(struct pt_regs *regs) | 102 | void bcm1480_timer_interrupt(void) |
104 | { | 103 | { |
105 | int cpu = smp_processor_id(); | 104 | int cpu = smp_processor_id(); |
106 | int irq = K_BCM1480_INT_TIMER_0+cpu; | 105 | int irq = K_BCM1480_INT_TIMER_0 + cpu; |
107 | 106 | ||
108 | /* Reset the timer */ | 107 | /* Reset the timer */ |
109 | __raw_writeq(M_SCD_TIMER_ENABLE|M_SCD_TIMER_MODE_CONTINUOUS, | 108 | __raw_writeq(M_SCD_TIMER_ENABLE|M_SCD_TIMER_MODE_CONTINUOUS, |
@@ -113,13 +112,13 @@ void bcm1480_timer_interrupt(struct pt_regs *regs) | |||
113 | /* | 112 | /* |
114 | * CPU 0 handles the global timer interrupt job | 113 | * CPU 0 handles the global timer interrupt job |
115 | */ | 114 | */ |
116 | ll_timer_interrupt(irq, regs); | 115 | ll_timer_interrupt(irq); |
117 | } | 116 | } |
118 | else { | 117 | else { |
119 | /* | 118 | /* |
120 | * other CPUs should just do profiling and process accounting | 119 | * other CPUs should just do profiling and process accounting |
121 | */ | 120 | */ |
122 | ll_local_timer_interrupt(irq, regs); | 121 | ll_local_timer_interrupt(irq); |
123 | } | 122 | } |
124 | } | 123 | } |
125 | 124 | ||
diff --git a/arch/mips/sibyte/sb1250/irq.c b/arch/mips/sibyte/sb1250/irq.c index f9bd9f074517..d5d26770daf6 100644 --- a/arch/mips/sibyte/sb1250/irq.c +++ b/arch/mips/sibyte/sb1250/irq.c | |||
@@ -28,7 +28,6 @@ | |||
28 | #include <asm/errno.h> | 28 | #include <asm/errno.h> |
29 | #include <asm/signal.h> | 29 | #include <asm/signal.h> |
30 | #include <asm/system.h> | 30 | #include <asm/system.h> |
31 | #include <asm/ptrace.h> | ||
32 | #include <asm/io.h> | 31 | #include <asm/io.h> |
33 | 32 | ||
34 | #include <asm/sibyte/sb1250_regs.h> | 33 | #include <asm/sibyte/sb1250_regs.h> |
@@ -254,8 +253,7 @@ void __init init_sb1250_irqs(void) | |||
254 | } | 253 | } |
255 | 254 | ||
256 | 255 | ||
257 | static irqreturn_t sb1250_dummy_handler(int irq, void *dev_id, | 256 | static irqreturn_t sb1250_dummy_handler(int irq, void *dev_id) |
258 | struct pt_regs *regs) | ||
259 | { | 257 | { |
260 | return IRQ_NONE; | 258 | return IRQ_NONE; |
261 | } | 259 | } |
@@ -403,7 +401,7 @@ void __init arch_init_irq(void) | |||
403 | #define duart_out(reg, val) csr_out32(val, IOADDR(A_DUART_CHANREG(kgdb_port,reg))) | 401 | #define duart_out(reg, val) csr_out32(val, IOADDR(A_DUART_CHANREG(kgdb_port,reg))) |
404 | #define duart_in(reg) csr_in32(IOADDR(A_DUART_CHANREG(kgdb_port,reg))) | 402 | #define duart_in(reg) csr_in32(IOADDR(A_DUART_CHANREG(kgdb_port,reg))) |
405 | 403 | ||
406 | static void sb1250_kgdb_interrupt(struct pt_regs *regs) | 404 | static void sb1250_kgdb_interrupt(void) |
407 | { | 405 | { |
408 | /* | 406 | /* |
409 | * Clear break-change status (allow some time for the remote | 407 | * Clear break-change status (allow some time for the remote |
@@ -414,16 +412,15 @@ static void sb1250_kgdb_interrupt(struct pt_regs *regs) | |||
414 | mdelay(500); | 412 | mdelay(500); |
415 | duart_out(R_DUART_CMD, V_DUART_MISC_CMD_RESET_BREAK_INT | | 413 | duart_out(R_DUART_CMD, V_DUART_MISC_CMD_RESET_BREAK_INT | |
416 | M_DUART_RX_EN | M_DUART_TX_EN); | 414 | M_DUART_RX_EN | M_DUART_TX_EN); |
417 | set_async_breakpoint(®s->cp0_epc); | 415 | set_async_breakpoint(&get_irq_regs()->cp0_epc); |
418 | } | 416 | } |
419 | 417 | ||
420 | #endif /* CONFIG_KGDB */ | 418 | #endif /* CONFIG_KGDB */ |
421 | 419 | ||
422 | extern void sb1250_timer_interrupt(struct pt_regs *regs); | 420 | extern void sb1250_timer_interrupt(void); |
423 | extern void sb1250_mailbox_interrupt(struct pt_regs *regs); | 421 | extern void sb1250_mailbox_interrupt(void); |
424 | extern void sb1250_kgdb_interrupt(struct pt_regs *regs); | ||
425 | 422 | ||
426 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 423 | asmlinkage void plat_irq_dispatch(void) |
427 | { | 424 | { |
428 | unsigned int pending; | 425 | unsigned int pending; |
429 | 426 | ||
@@ -446,21 +443,21 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
446 | 443 | ||
447 | #ifdef CONFIG_SIBYTE_SB1250_PROF | 444 | #ifdef CONFIG_SIBYTE_SB1250_PROF |
448 | if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */ | 445 | if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */ |
449 | sbprof_cpu_intr(exception_epc(regs)); | 446 | sbprof_cpu_intr(); |
450 | else | 447 | else |
451 | #endif | 448 | #endif |
452 | 449 | ||
453 | if (pending & CAUSEF_IP4) | 450 | if (pending & CAUSEF_IP4) |
454 | sb1250_timer_interrupt(regs); | 451 | sb1250_timer_interrupt(); |
455 | 452 | ||
456 | #ifdef CONFIG_SMP | 453 | #ifdef CONFIG_SMP |
457 | else if (pending & CAUSEF_IP3) | 454 | else if (pending & CAUSEF_IP3) |
458 | sb1250_mailbox_interrupt(regs); | 455 | sb1250_mailbox_interrupt(); |
459 | #endif | 456 | #endif |
460 | 457 | ||
461 | #ifdef CONFIG_KGDB | 458 | #ifdef CONFIG_KGDB |
462 | else if (pending & CAUSEF_IP6) /* KGDB (uart 1) */ | 459 | else if (pending & CAUSEF_IP6) /* KGDB (uart 1) */ |
463 | sb1250_kgdb_interrupt(regs); | 460 | sb1250_kgdb_interrupt(); |
464 | #endif | 461 | #endif |
465 | 462 | ||
466 | else if (pending & CAUSEF_IP2) { | 463 | else if (pending & CAUSEF_IP2) { |
@@ -475,9 +472,9 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
475 | mask = __raw_readq(IOADDR(A_IMR_REGISTER(smp_processor_id(), | 472 | mask = __raw_readq(IOADDR(A_IMR_REGISTER(smp_processor_id(), |
476 | R_IMR_INTERRUPT_STATUS_BASE))); | 473 | R_IMR_INTERRUPT_STATUS_BASE))); |
477 | if (mask) | 474 | if (mask) |
478 | do_IRQ(fls64(mask) - 1, regs); | 475 | do_IRQ(fls64(mask) - 1); |
479 | else | 476 | else |
480 | spurious_interrupt(regs); | 477 | spurious_interrupt(); |
481 | } else | 478 | } else |
482 | spurious_interrupt(regs); | 479 | spurious_interrupt(); |
483 | } | 480 | } |
diff --git a/arch/mips/sibyte/sb1250/smp.c b/arch/mips/sibyte/sb1250/smp.c index f859db02d3c9..c38e1f34460d 100644 --- a/arch/mips/sibyte/sb1250/smp.c +++ b/arch/mips/sibyte/sb1250/smp.c | |||
@@ -76,7 +76,7 @@ void core_send_ipi(int cpu, unsigned int action) | |||
76 | __raw_writeq((((u64)action) << 48), mailbox_set_regs[cpu]); | 76 | __raw_writeq((((u64)action) << 48), mailbox_set_regs[cpu]); |
77 | } | 77 | } |
78 | 78 | ||
79 | void sb1250_mailbox_interrupt(struct pt_regs *regs) | 79 | void sb1250_mailbox_interrupt(void) |
80 | { | 80 | { |
81 | int cpu = smp_processor_id(); | 81 | int cpu = smp_processor_id(); |
82 | unsigned int action; | 82 | unsigned int action; |
diff --git a/arch/mips/sibyte/sb1250/time.c b/arch/mips/sibyte/sb1250/time.c index 4b669dc86ef4..0ccf1796dd78 100644 --- a/arch/mips/sibyte/sb1250/time.c +++ b/arch/mips/sibyte/sb1250/time.c | |||
@@ -31,7 +31,6 @@ | |||
31 | #include <linux/kernel_stat.h> | 31 | #include <linux/kernel_stat.h> |
32 | 32 | ||
33 | #include <asm/irq.h> | 33 | #include <asm/irq.h> |
34 | #include <asm/ptrace.h> | ||
35 | #include <asm/addrspace.h> | 34 | #include <asm/addrspace.h> |
36 | #include <asm/time.h> | 35 | #include <asm/time.h> |
37 | #include <asm/io.h> | 36 | #include <asm/io.h> |
@@ -125,7 +124,7 @@ void sb1250_time_init(void) | |||
125 | */ | 124 | */ |
126 | } | 125 | } |
127 | 126 | ||
128 | void sb1250_timer_interrupt(struct pt_regs *regs) | 127 | void sb1250_timer_interrupt(void) |
129 | { | 128 | { |
130 | int cpu = smp_processor_id(); | 129 | int cpu = smp_processor_id(); |
131 | int irq = K_INT_TIMER_0 + cpu; | 130 | int irq = K_INT_TIMER_0 + cpu; |
@@ -138,13 +137,13 @@ void sb1250_timer_interrupt(struct pt_regs *regs) | |||
138 | /* | 137 | /* |
139 | * CPU 0 handles the global timer interrupt job | 138 | * CPU 0 handles the global timer interrupt job |
140 | */ | 139 | */ |
141 | ll_timer_interrupt(irq, regs); | 140 | ll_timer_interrupt(irq); |
142 | } | 141 | } |
143 | else { | 142 | else { |
144 | /* | 143 | /* |
145 | * other CPUs should just do profiling and process accounting | 144 | * other CPUs should just do profiling and process accounting |
146 | */ | 145 | */ |
147 | ll_local_timer_interrupt(irq, regs); | 146 | ll_local_timer_interrupt(irq); |
148 | } | 147 | } |
149 | } | 148 | } |
150 | 149 | ||
diff --git a/arch/mips/sni/irq.c b/arch/mips/sni/irq.c index cda165f42b6a..48fb74a7aaec 100644 --- a/arch/mips/sni/irq.c +++ b/arch/mips/sni/irq.c | |||
@@ -69,20 +69,20 @@ static struct irq_chip pciasic_irq_type = { | |||
69 | * hwint0 should deal with MP agent, ASIC PCI, EISA NMI and debug | 69 | * hwint0 should deal with MP agent, ASIC PCI, EISA NMI and debug |
70 | * button interrupts. Later ... | 70 | * button interrupts. Later ... |
71 | */ | 71 | */ |
72 | static void pciasic_hwint0(struct pt_regs *regs) | 72 | static void pciasic_hwint0(void) |
73 | { | 73 | { |
74 | panic("Received int0 but no handler yet ..."); | 74 | panic("Received int0 but no handler yet ..."); |
75 | } | 75 | } |
76 | 76 | ||
77 | /* This interrupt was used for the com1 console on the first prototypes. */ | 77 | /* This interrupt was used for the com1 console on the first prototypes. */ |
78 | static void pciasic_hwint2(struct pt_regs *regs) | 78 | static void pciasic_hwint2(void) |
79 | { | 79 | { |
80 | /* I think this shouldn't happen on production machines. */ | 80 | /* I think this shouldn't happen on production machines. */ |
81 | panic("hwint2 and no handler yet"); | 81 | panic("hwint2 and no handler yet"); |
82 | } | 82 | } |
83 | 83 | ||
84 | /* hwint5 is the r4k count / compare interrupt */ | 84 | /* hwint5 is the r4k count / compare interrupt */ |
85 | static void pciasic_hwint5(struct pt_regs *regs) | 85 | static void pciasic_hwint5(void) |
86 | { | 86 | { |
87 | panic("hwint5 and no handler yet"); | 87 | panic("hwint5 and no handler yet"); |
88 | } | 88 | } |
@@ -103,7 +103,7 @@ static unsigned int ls1bit8(unsigned int x) | |||
103 | * | 103 | * |
104 | * The EISA_INT bit in CSITPEND is high active, all others are low active. | 104 | * The EISA_INT bit in CSITPEND is high active, all others are low active. |
105 | */ | 105 | */ |
106 | static void pciasic_hwint1(struct pt_regs *regs) | 106 | static void pciasic_hwint1(void) |
107 | { | 107 | { |
108 | u8 pend = *(volatile char *)PCIMT_CSITPEND; | 108 | u8 pend = *(volatile char *)PCIMT_CSITPEND; |
109 | unsigned long flags; | 109 | unsigned long flags; |
@@ -119,13 +119,13 @@ static void pciasic_hwint1(struct pt_regs *regs) | |||
119 | if (unlikely(irq < 0)) | 119 | if (unlikely(irq < 0)) |
120 | return; | 120 | return; |
121 | 121 | ||
122 | do_IRQ(irq, regs); | 122 | do_IRQ(irq); |
123 | } | 123 | } |
124 | 124 | ||
125 | if (!(pend & IT_SCSI)) { | 125 | if (!(pend & IT_SCSI)) { |
126 | flags = read_c0_status(); | 126 | flags = read_c0_status(); |
127 | clear_c0_status(ST0_IM); | 127 | clear_c0_status(ST0_IM); |
128 | do_IRQ(PCIMT_IRQ_SCSI, regs); | 128 | do_IRQ(PCIMT_IRQ_SCSI); |
129 | write_c0_status(flags); | 129 | write_c0_status(flags); |
130 | } | 130 | } |
131 | } | 131 | } |
@@ -133,7 +133,7 @@ static void pciasic_hwint1(struct pt_regs *regs) | |||
133 | /* | 133 | /* |
134 | * hwint 3 should deal with the PCI A - D interrupts, | 134 | * hwint 3 should deal with the PCI A - D interrupts, |
135 | */ | 135 | */ |
136 | static void pciasic_hwint3(struct pt_regs *regs) | 136 | static void pciasic_hwint3(void) |
137 | { | 137 | { |
138 | u8 pend = *(volatile char *)PCIMT_CSITPEND; | 138 | u8 pend = *(volatile char *)PCIMT_CSITPEND; |
139 | int irq; | 139 | int irq; |
@@ -141,21 +141,21 @@ static void pciasic_hwint3(struct pt_regs *regs) | |||
141 | pend &= (IT_INTA | IT_INTB | IT_INTC | IT_INTD); | 141 | pend &= (IT_INTA | IT_INTB | IT_INTC | IT_INTD); |
142 | clear_c0_status(IE_IRQ3); | 142 | clear_c0_status(IE_IRQ3); |
143 | irq = PCIMT_IRQ_INT2 + ls1bit8(pend); | 143 | irq = PCIMT_IRQ_INT2 + ls1bit8(pend); |
144 | do_IRQ(irq, regs); | 144 | do_IRQ(irq); |
145 | set_c0_status(IE_IRQ3); | 145 | set_c0_status(IE_IRQ3); |
146 | } | 146 | } |
147 | 147 | ||
148 | /* | 148 | /* |
149 | * hwint 4 is used for only the onboard PCnet 32. | 149 | * hwint 4 is used for only the onboard PCnet 32. |
150 | */ | 150 | */ |
151 | static void pciasic_hwint4(struct pt_regs *regs) | 151 | static void pciasic_hwint4(void) |
152 | { | 152 | { |
153 | clear_c0_status(IE_IRQ4); | 153 | clear_c0_status(IE_IRQ4); |
154 | do_IRQ(PCIMT_IRQ_ETHERNET, regs); | 154 | do_IRQ(PCIMT_IRQ_ETHERNET); |
155 | set_c0_status(IE_IRQ4); | 155 | set_c0_status(IE_IRQ4); |
156 | } | 156 | } |
157 | 157 | ||
158 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 158 | asmlinkage void plat_irq_dispatch(void) |
159 | { | 159 | { |
160 | unsigned int pending = read_c0_status() & read_c0_cause(); | 160 | unsigned int pending = read_c0_status() & read_c0_cause(); |
161 | static unsigned char led_cache; | 161 | static unsigned char led_cache; |
@@ -163,17 +163,17 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
163 | *(volatile unsigned char *) PCIMT_CSLED = ++led_cache; | 163 | *(volatile unsigned char *) PCIMT_CSLED = ++led_cache; |
164 | 164 | ||
165 | if (pending & 0x0800) | 165 | if (pending & 0x0800) |
166 | pciasic_hwint1(regs); | 166 | pciasic_hwint1(); |
167 | else if (pending & 0x4000) | 167 | else if (pending & 0x4000) |
168 | pciasic_hwint4(regs); | 168 | pciasic_hwint4(); |
169 | else if (pending & 0x2000) | 169 | else if (pending & 0x2000) |
170 | pciasic_hwint3(regs); | 170 | pciasic_hwint3(); |
171 | else if (pending & 0x1000) | 171 | else if (pending & 0x1000) |
172 | pciasic_hwint2(regs); | 172 | pciasic_hwint2(); |
173 | else if (pending & 0x8000) | 173 | else if (pending & 0x8000) |
174 | pciasic_hwint5(regs); | 174 | pciasic_hwint5(); |
175 | else if (pending & 0x0400) | 175 | else if (pending & 0x0400) |
176 | pciasic_hwint0(regs); | 176 | pciasic_hwint0(); |
177 | } | 177 | } |
178 | 178 | ||
179 | void __init init_pciasic(void) | 179 | void __init init_pciasic(void) |
diff --git a/arch/mips/sni/setup.c b/arch/mips/sni/setup.c index 4e98feb15410..afeb7f13e5b5 100644 --- a/arch/mips/sni/setup.c +++ b/arch/mips/sni/setup.c | |||
@@ -31,7 +31,6 @@ | |||
31 | #include <asm/irq.h> | 31 | #include <asm/irq.h> |
32 | #include <asm/mc146818-time.h> | 32 | #include <asm/mc146818-time.h> |
33 | #include <asm/processor.h> | 33 | #include <asm/processor.h> |
34 | #include <asm/ptrace.h> | ||
35 | #include <asm/reboot.h> | 34 | #include <asm/reboot.h> |
36 | #include <asm/sni.h> | 35 | #include <asm/sni.h> |
37 | #include <asm/time.h> | 36 | #include <asm/time.h> |
diff --git a/arch/mips/tx4927/common/tx4927_irq.c b/arch/mips/tx4927/common/tx4927_irq.c index cd176f6a06c8..8266a88a3f88 100644 --- a/arch/mips/tx4927/common/tx4927_irq.c +++ b/arch/mips/tx4927/common/tx4927_irq.c | |||
@@ -576,24 +576,24 @@ static int tx4927_irq_nested(void) | |||
576 | return (sw_irq); | 576 | return (sw_irq); |
577 | } | 577 | } |
578 | 578 | ||
579 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 579 | asmlinkage void plat_irq_dispatch(void) |
580 | { | 580 | { |
581 | unsigned int pending = read_c0_status() & read_c0_cause(); | 581 | unsigned int pending = read_c0_status() & read_c0_cause(); |
582 | 582 | ||
583 | if (pending & STATUSF_IP7) /* cpu timer */ | 583 | if (pending & STATUSF_IP7) /* cpu timer */ |
584 | do_IRQ(TX4927_IRQ_CPU_TIMER, regs); | 584 | do_IRQ(TX4927_IRQ_CPU_TIMER); |
585 | else if (pending & STATUSF_IP2) { /* tx4927 pic */ | 585 | else if (pending & STATUSF_IP2) { /* tx4927 pic */ |
586 | unsigned int irq = tx4927_irq_nested(); | 586 | unsigned int irq = tx4927_irq_nested(); |
587 | 587 | ||
588 | if (unlikely(irq == 0)) { | 588 | if (unlikely(irq == 0)) { |
589 | spurious_interrupt(regs); | 589 | spurious_interrupt(); |
590 | return; | 590 | return; |
591 | } | 591 | } |
592 | do_IRQ(irq, regs); | 592 | do_IRQ(irq); |
593 | } else if (pending & STATUSF_IP0) /* user line 0 */ | 593 | } else if (pending & STATUSF_IP0) /* user line 0 */ |
594 | do_IRQ(TX4927_IRQ_USER0, regs); | 594 | do_IRQ(TX4927_IRQ_USER0); |
595 | else if (pending & STATUSF_IP1) /* user line 1 */ | 595 | else if (pending & STATUSF_IP1) /* user line 1 */ |
596 | do_IRQ(TX4927_IRQ_USER1, regs); | 596 | do_IRQ(TX4927_IRQ_USER1); |
597 | else | 597 | else |
598 | spurious_interrupt(regs); | 598 | spurious_interrupt(); |
599 | } | 599 | } |
diff --git a/arch/mips/tx4927/common/tx4927_setup.c b/arch/mips/tx4927/common/tx4927_setup.c index 3ace4037343e..4658b2ae4833 100644 --- a/arch/mips/tx4927/common/tx4927_setup.c +++ b/arch/mips/tx4927/common/tx4927_setup.c | |||
@@ -53,19 +53,9 @@ void __init tx4927_time_init(void); | |||
53 | void dump_cp0(char *key); | 53 | void dump_cp0(char *key); |
54 | 54 | ||
55 | 55 | ||
56 | void (*__wbflush) (void); | ||
57 | |||
58 | static void tx4927_write_buffer_flush(void) | ||
59 | { | ||
60 | __asm__ __volatile__ | ||
61 | ("sync\n\t" "nop\n\t" "loop: bc0f loop\n\t" "nop\n\t"); | ||
62 | } | ||
63 | |||
64 | |||
65 | void __init plat_mem_setup(void) | 56 | void __init plat_mem_setup(void) |
66 | { | 57 | { |
67 | board_time_init = tx4927_time_init; | 58 | board_time_init = tx4927_time_init; |
68 | __wbflush = tx4927_write_buffer_flush; | ||
69 | 59 | ||
70 | #ifdef CONFIG_TOSHIBA_RBTX4927 | 60 | #ifdef CONFIG_TOSHIBA_RBTX4927 |
71 | { | 61 | { |
diff --git a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c index b0f021f2a6c4..0c3c3f668230 100644 --- a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c +++ b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c | |||
@@ -127,9 +127,9 @@ JP7 is not bus master -- do NOT use -- only 4 pci bus master's allowed -- SouthB | |||
127 | #include <asm/irq.h> | 127 | #include <asm/irq.h> |
128 | #include <asm/pci.h> | 128 | #include <asm/pci.h> |
129 | #include <asm/processor.h> | 129 | #include <asm/processor.h> |
130 | #include <asm/ptrace.h> | ||
131 | #include <asm/reboot.h> | 130 | #include <asm/reboot.h> |
132 | #include <asm/time.h> | 131 | #include <asm/time.h> |
132 | #include <asm/wbflush.h> | ||
133 | #include <linux/bootmem.h> | 133 | #include <linux/bootmem.h> |
134 | #include <linux/blkdev.h> | 134 | #include <linux/blkdev.h> |
135 | #ifdef CONFIG_RTC_DS1742 | 135 | #ifdef CONFIG_RTC_DS1742 |
diff --git a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c index f0d70c476005..735cb8778f4c 100644 --- a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c +++ b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c | |||
@@ -58,8 +58,8 @@ | |||
58 | #include <asm/page.h> | 58 | #include <asm/page.h> |
59 | #include <asm/io.h> | 59 | #include <asm/io.h> |
60 | #include <asm/irq.h> | 60 | #include <asm/irq.h> |
61 | #include <asm/irq_regs.h> | ||
61 | #include <asm/processor.h> | 62 | #include <asm/processor.h> |
62 | #include <asm/ptrace.h> | ||
63 | #include <asm/reboot.h> | 63 | #include <asm/reboot.h> |
64 | #include <asm/time.h> | 64 | #include <asm/time.h> |
65 | #include <linux/bootmem.h> | 65 | #include <linux/bootmem.h> |
@@ -160,8 +160,7 @@ int tx4927_pci66 = 0; /* 0:auto */ | |||
160 | char *toshiba_name = ""; | 160 | char *toshiba_name = ""; |
161 | 161 | ||
162 | #ifdef CONFIG_PCI | 162 | #ifdef CONFIG_PCI |
163 | static void tx4927_pcierr_interrupt(int irq, void *dev_id, | 163 | static void tx4927_pcierr_interrupt(int irq, void *dev_id) |
164 | struct pt_regs *regs) | ||
165 | { | 164 | { |
166 | #ifdef CONFIG_BLK_DEV_IDEPCI | 165 | #ifdef CONFIG_BLK_DEV_IDEPCI |
167 | /* ignore MasterAbort for ide probing... */ | 166 | /* ignore MasterAbort for ide probing... */ |
@@ -185,7 +184,7 @@ static void tx4927_pcierr_interrupt(int irq, void *dev_id, | |||
185 | (unsigned long) tx4927_ccfgptr->ccfg, | 184 | (unsigned long) tx4927_ccfgptr->ccfg, |
186 | (unsigned long) (tx4927_ccfgptr->tear >> 32), | 185 | (unsigned long) (tx4927_ccfgptr->tear >> 32), |
187 | (unsigned long) tx4927_ccfgptr->tear); | 186 | (unsigned long) tx4927_ccfgptr->tear); |
188 | show_regs(regs); | 187 | show_regs(get_irq_regs()); |
189 | } | 188 | } |
190 | 189 | ||
191 | void __init toshiba_rbtx4927_pci_irq_init(void) | 190 | void __init toshiba_rbtx4927_pci_irq_init(void) |
diff --git a/arch/mips/tx4938/common/irq.c b/arch/mips/tx4938/common/irq.c index cbfb34221b59..77fe2454f5b9 100644 --- a/arch/mips/tx4938/common/irq.c +++ b/arch/mips/tx4938/common/irq.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <asm/irq.h> | 30 | #include <asm/irq.h> |
31 | #include <asm/mipsregs.h> | 31 | #include <asm/mipsregs.h> |
32 | #include <asm/system.h> | 32 | #include <asm/system.h> |
33 | #include <asm/wbflush.h> | ||
33 | #include <asm/tx4938/rbtx4938.h> | 34 | #include <asm/tx4938/rbtx4938.h> |
34 | 35 | ||
35 | /**********************************************************************************/ | 36 | /**********************************************************************************/ |
@@ -104,8 +105,6 @@ tx4938_irq_cp0_init(void) | |||
104 | irq_desc[i].depth = 1; | 105 | irq_desc[i].depth = 1; |
105 | irq_desc[i].chip = &tx4938_irq_cp0_type; | 106 | irq_desc[i].chip = &tx4938_irq_cp0_type; |
106 | } | 107 | } |
107 | |||
108 | return; | ||
109 | } | 108 | } |
110 | 109 | ||
111 | static unsigned int | 110 | static unsigned int |
@@ -113,7 +112,7 @@ tx4938_irq_cp0_startup(unsigned int irq) | |||
113 | { | 112 | { |
114 | tx4938_irq_cp0_enable(irq); | 113 | tx4938_irq_cp0_enable(irq); |
115 | 114 | ||
116 | return (0); | 115 | return 0; |
117 | } | 116 | } |
118 | 117 | ||
119 | static void | 118 | static void |
@@ -144,16 +143,12 @@ tx4938_irq_cp0_disable(unsigned int irq) | |||
144 | clear_c0_status(tx4938_irq_cp0_mask(irq)); | 143 | clear_c0_status(tx4938_irq_cp0_mask(irq)); |
145 | 144 | ||
146 | spin_unlock_irqrestore(&tx4938_cp0_lock, flags); | 145 | spin_unlock_irqrestore(&tx4938_cp0_lock, flags); |
147 | |||
148 | return; | ||
149 | } | 146 | } |
150 | 147 | ||
151 | static void | 148 | static void |
152 | tx4938_irq_cp0_mask_and_ack(unsigned int irq) | 149 | tx4938_irq_cp0_mask_and_ack(unsigned int irq) |
153 | { | 150 | { |
154 | tx4938_irq_cp0_disable(irq); | 151 | tx4938_irq_cp0_disable(irq); |
155 | |||
156 | return; | ||
157 | } | 152 | } |
158 | 153 | ||
159 | static void | 154 | static void |
@@ -162,8 +157,6 @@ tx4938_irq_cp0_end(unsigned int irq) | |||
162 | if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) { | 157 | if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) { |
163 | tx4938_irq_cp0_enable(irq); | 158 | tx4938_irq_cp0_enable(irq); |
164 | } | 159 | } |
165 | |||
166 | return; | ||
167 | } | 160 | } |
168 | 161 | ||
169 | /**********************************************************************************/ | 162 | /**********************************************************************************/ |
@@ -227,7 +220,7 @@ tx4938_irq_pic_addr(int irq) | |||
227 | } | 220 | } |
228 | } | 221 | } |
229 | 222 | ||
230 | return (0); | 223 | return 0; |
231 | } | 224 | } |
232 | 225 | ||
233 | u32 | 226 | u32 |
@@ -278,7 +271,7 @@ tx4938_irq_pic_mask(int irq) | |||
278 | return (0x00000007); | 271 | return (0x00000007); |
279 | } | 272 | } |
280 | } | 273 | } |
281 | return (0x00000000); | 274 | return 0x00000000; |
282 | } | 275 | } |
283 | 276 | ||
284 | static void | 277 | static void |
@@ -292,8 +285,6 @@ tx4938_irq_pic_modify(unsigned pic_reg, unsigned clr_bits, unsigned set_bits) | |||
292 | TX4938_WR(pic_reg, val); | 285 | TX4938_WR(pic_reg, val); |
293 | mmiowb(); | 286 | mmiowb(); |
294 | TX4938_RD(pic_reg); | 287 | TX4938_RD(pic_reg); |
295 | |||
296 | return; | ||
297 | } | 288 | } |
298 | 289 | ||
299 | static void __init | 290 | static void __init |
@@ -317,8 +308,6 @@ tx4938_irq_pic_init(void) | |||
317 | TX4938_WR(0xff1ff600, TX4938_RD(0xff1ff600) | 0x1); /* irq enable */ | 308 | TX4938_WR(0xff1ff600, TX4938_RD(0xff1ff600) | 0x1); /* irq enable */ |
318 | 309 | ||
319 | spin_unlock_irqrestore(&tx4938_pic_lock, flags); | 310 | spin_unlock_irqrestore(&tx4938_pic_lock, flags); |
320 | |||
321 | return; | ||
322 | } | 311 | } |
323 | 312 | ||
324 | static unsigned int | 313 | static unsigned int |
@@ -326,15 +315,13 @@ tx4938_irq_pic_startup(unsigned int irq) | |||
326 | { | 315 | { |
327 | tx4938_irq_pic_enable(irq); | 316 | tx4938_irq_pic_enable(irq); |
328 | 317 | ||
329 | return (0); | 318 | return 0; |
330 | } | 319 | } |
331 | 320 | ||
332 | static void | 321 | static void |
333 | tx4938_irq_pic_shutdown(unsigned int irq) | 322 | tx4938_irq_pic_shutdown(unsigned int irq) |
334 | { | 323 | { |
335 | tx4938_irq_pic_disable(irq); | 324 | tx4938_irq_pic_disable(irq); |
336 | |||
337 | return; | ||
338 | } | 325 | } |
339 | 326 | ||
340 | static void | 327 | static void |
@@ -348,8 +335,6 @@ tx4938_irq_pic_enable(unsigned int irq) | |||
348 | tx4938_irq_pic_mask(irq)); | 335 | tx4938_irq_pic_mask(irq)); |
349 | 336 | ||
350 | spin_unlock_irqrestore(&tx4938_pic_lock, flags); | 337 | spin_unlock_irqrestore(&tx4938_pic_lock, flags); |
351 | |||
352 | return; | ||
353 | } | 338 | } |
354 | 339 | ||
355 | static void | 340 | static void |
@@ -363,16 +348,12 @@ tx4938_irq_pic_disable(unsigned int irq) | |||
363 | tx4938_irq_pic_mask(irq), 0); | 348 | tx4938_irq_pic_mask(irq), 0); |
364 | 349 | ||
365 | spin_unlock_irqrestore(&tx4938_pic_lock, flags); | 350 | spin_unlock_irqrestore(&tx4938_pic_lock, flags); |
366 | |||
367 | return; | ||
368 | } | 351 | } |
369 | 352 | ||
370 | static void | 353 | static void |
371 | tx4938_irq_pic_mask_and_ack(unsigned int irq) | 354 | tx4938_irq_pic_mask_and_ack(unsigned int irq) |
372 | { | 355 | { |
373 | tx4938_irq_pic_disable(irq); | 356 | tx4938_irq_pic_disable(irq); |
374 | |||
375 | return; | ||
376 | } | 357 | } |
377 | 358 | ||
378 | static void | 359 | static void |
@@ -381,8 +362,6 @@ tx4938_irq_pic_end(unsigned int irq) | |||
381 | if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) { | 362 | if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) { |
382 | tx4938_irq_pic_enable(irq); | 363 | tx4938_irq_pic_enable(irq); |
383 | } | 364 | } |
384 | |||
385 | return; | ||
386 | } | 365 | } |
387 | 366 | ||
388 | /**********************************************************************************/ | 367 | /**********************************************************************************/ |
@@ -394,8 +373,6 @@ tx4938_irq_init(void) | |||
394 | { | 373 | { |
395 | tx4938_irq_cp0_init(); | 374 | tx4938_irq_cp0_init(); |
396 | tx4938_irq_pic_init(); | 375 | tx4938_irq_pic_init(); |
397 | |||
398 | return; | ||
399 | } | 376 | } |
400 | 377 | ||
401 | int | 378 | int |
@@ -417,23 +394,23 @@ tx4938_irq_nested(void) | |||
417 | } | 394 | } |
418 | 395 | ||
419 | wbflush(); | 396 | wbflush(); |
420 | return (sw_irq); | 397 | return sw_irq; |
421 | } | 398 | } |
422 | 399 | ||
423 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 400 | asmlinkage void plat_irq_dispatch(void) |
424 | { | 401 | { |
425 | unsigned int pending = read_c0_cause() & read_c0_status(); | 402 | unsigned int pending = read_c0_cause() & read_c0_status(); |
426 | 403 | ||
427 | if (pending & STATUSF_IP7) | 404 | if (pending & STATUSF_IP7) |
428 | do_IRQ(TX4938_IRQ_CPU_TIMER, regs); | 405 | do_IRQ(TX4938_IRQ_CPU_TIMER); |
429 | else if (pending & STATUSF_IP2) { | 406 | else if (pending & STATUSF_IP2) { |
430 | int irq = tx4938_irq_nested(); | 407 | int irq = tx4938_irq_nested(); |
431 | if (irq) | 408 | if (irq) |
432 | do_IRQ(irq, regs); | 409 | do_IRQ(irq); |
433 | else | 410 | else |
434 | spurious_interrupt(regs); | 411 | spurious_interrupt(); |
435 | } else if (pending & STATUSF_IP1) | 412 | } else if (pending & STATUSF_IP1) |
436 | do_IRQ(TX4938_IRQ_USER1, regs); | 413 | do_IRQ(TX4938_IRQ_USER1); |
437 | else if (pending & STATUSF_IP0) | 414 | else if (pending & STATUSF_IP0) |
438 | do_IRQ(TX4938_IRQ_USER0, regs); | 415 | do_IRQ(TX4938_IRQ_USER0); |
439 | } | 416 | } |
diff --git a/arch/mips/tx4938/common/setup.c b/arch/mips/tx4938/common/setup.c index 71859c4fee84..f415a1f18fba 100644 --- a/arch/mips/tx4938/common/setup.c +++ b/arch/mips/tx4938/common/setup.c | |||
@@ -41,29 +41,10 @@ void __init tx4938_setup(void); | |||
41 | void __init tx4938_time_init(void); | 41 | void __init tx4938_time_init(void); |
42 | void dump_cp0(char *key); | 42 | void dump_cp0(char *key); |
43 | 43 | ||
44 | void (*__wbflush) (void); | ||
45 | |||
46 | static void | ||
47 | tx4938_write_buffer_flush(void) | ||
48 | { | ||
49 | mmiowb(); | ||
50 | |||
51 | __asm__ __volatile__( | ||
52 | ".set push\n\t" | ||
53 | ".set noreorder\n\t" | ||
54 | "lw $0,%0\n\t" | ||
55 | "nop\n\t" | ||
56 | ".set pop" | ||
57 | : /* no output */ | ||
58 | : "m" (*(int *)KSEG1) | ||
59 | : "memory"); | ||
60 | } | ||
61 | |||
62 | void __init | 44 | void __init |
63 | plat_mem_setup(void) | 45 | plat_mem_setup(void) |
64 | { | 46 | { |
65 | board_time_init = tx4938_time_init; | 47 | board_time_init = tx4938_time_init; |
66 | __wbflush = tx4938_write_buffer_flush; | ||
67 | toshiba_rbtx4938_setup(); | 48 | toshiba_rbtx4938_setup(); |
68 | } | 49 | } |
69 | 50 | ||
diff --git a/arch/mips/tx4938/toshiba_rbtx4938/irq.c b/arch/mips/tx4938/toshiba_rbtx4938/irq.c index 83f2750825a4..102e473c10a2 100644 --- a/arch/mips/tx4938/toshiba_rbtx4938/irq.c +++ b/arch/mips/tx4938/toshiba_rbtx4938/irq.c | |||
@@ -81,9 +81,9 @@ IRQ Device | |||
81 | #include <asm/io.h> | 81 | #include <asm/io.h> |
82 | #include <asm/irq.h> | 82 | #include <asm/irq.h> |
83 | #include <asm/processor.h> | 83 | #include <asm/processor.h> |
84 | #include <asm/ptrace.h> | ||
85 | #include <asm/reboot.h> | 84 | #include <asm/reboot.h> |
86 | #include <asm/time.h> | 85 | #include <asm/time.h> |
86 | #include <asm/wbflush.h> | ||
87 | #include <linux/bootmem.h> | 87 | #include <linux/bootmem.h> |
88 | #include <asm/tx4938/rbtx4938.h> | 88 | #include <asm/tx4938/rbtx4938.h> |
89 | 89 | ||
diff --git a/arch/mips/tx4938/toshiba_rbtx4938/spi_txx9.c b/arch/mips/tx4938/toshiba_rbtx4938/spi_txx9.c index fae3136f462d..b926e6a75c29 100644 --- a/arch/mips/tx4938/toshiba_rbtx4938/spi_txx9.c +++ b/arch/mips/tx4938/toshiba_rbtx4938/spi_txx9.c | |||
@@ -35,7 +35,8 @@ void __init txx9_spi_init(unsigned long base, int (*cs_func)(int chipid, int on) | |||
35 | } | 35 | } |
36 | 36 | ||
37 | static DECLARE_WAIT_QUEUE_HEAD(txx9_spi_wait); | 37 | static DECLARE_WAIT_QUEUE_HEAD(txx9_spi_wait); |
38 | static void txx9_spi_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 38 | |
39 | static void txx9_spi_interrupt(int irq, void *dev_id) | ||
39 | { | 40 | { |
40 | /* disable rx intr */ | 41 | /* disable rx intr */ |
41 | tx4938_spiptr->cr0 &= ~TXx9_SPCR0_RBSIE; | 42 | tx4938_spiptr->cr0 &= ~TXx9_SPCR0_RBSIE; |
diff --git a/arch/mips/vr41xx/common/icu.c b/arch/mips/vr41xx/common/icu.c index 7a5c31d58378..c215c0d39fae 100644 --- a/arch/mips/vr41xx/common/icu.c +++ b/arch/mips/vr41xx/common/icu.c | |||
@@ -635,7 +635,7 @@ int vr41xx_set_intassign(unsigned int irq, unsigned char intassign) | |||
635 | 635 | ||
636 | EXPORT_SYMBOL(vr41xx_set_intassign); | 636 | EXPORT_SYMBOL(vr41xx_set_intassign); |
637 | 637 | ||
638 | static int icu_get_irq(unsigned int irq, struct pt_regs *regs) | 638 | static int icu_get_irq(unsigned int irq) |
639 | { | 639 | { |
640 | uint16_t pend1, pend2; | 640 | uint16_t pend1, pend2; |
641 | uint16_t mask1, mask2; | 641 | uint16_t mask1, mask2; |
diff --git a/arch/mips/vr41xx/common/irq.c b/arch/mips/vr41xx/common/irq.c index 4733c5344467..397ba94cd7ec 100644 --- a/arch/mips/vr41xx/common/irq.c +++ b/arch/mips/vr41xx/common/irq.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include <asm/vr41xx/irq.h> | 25 | #include <asm/vr41xx/irq.h> |
26 | 26 | ||
27 | typedef struct irq_cascade { | 27 | typedef struct irq_cascade { |
28 | int (*get_irq)(unsigned int, struct pt_regs *); | 28 | int (*get_irq)(unsigned int); |
29 | } irq_cascade_t; | 29 | } irq_cascade_t; |
30 | 30 | ||
31 | static irq_cascade_t irq_cascade[NR_IRQS] __cacheline_aligned; | 31 | static irq_cascade_t irq_cascade[NR_IRQS] __cacheline_aligned; |
@@ -36,7 +36,7 @@ static struct irqaction cascade_irqaction = { | |||
36 | .name = "cascade", | 36 | .name = "cascade", |
37 | }; | 37 | }; |
38 | 38 | ||
39 | int cascade_irq(unsigned int irq, int (*get_irq)(unsigned int, struct pt_regs *)) | 39 | int cascade_irq(unsigned int irq, int (*get_irq)(unsigned int)) |
40 | { | 40 | { |
41 | int retval = 0; | 41 | int retval = 0; |
42 | 42 | ||
@@ -59,7 +59,7 @@ int cascade_irq(unsigned int irq, int (*get_irq)(unsigned int, struct pt_regs *) | |||
59 | 59 | ||
60 | EXPORT_SYMBOL_GPL(cascade_irq); | 60 | EXPORT_SYMBOL_GPL(cascade_irq); |
61 | 61 | ||
62 | static void irq_dispatch(unsigned int irq, struct pt_regs *regs) | 62 | static void irq_dispatch(unsigned int irq) |
63 | { | 63 | { |
64 | irq_cascade_t *cascade; | 64 | irq_cascade_t *cascade; |
65 | struct irq_desc *desc; | 65 | struct irq_desc *desc; |
@@ -74,39 +74,39 @@ static void irq_dispatch(unsigned int irq, struct pt_regs *regs) | |||
74 | unsigned int source_irq = irq; | 74 | unsigned int source_irq = irq; |
75 | desc = irq_desc + source_irq; | 75 | desc = irq_desc + source_irq; |
76 | desc->chip->ack(source_irq); | 76 | desc->chip->ack(source_irq); |
77 | irq = cascade->get_irq(irq, regs); | 77 | irq = cascade->get_irq(irq); |
78 | if (irq < 0) | 78 | if (irq < 0) |
79 | atomic_inc(&irq_err_count); | 79 | atomic_inc(&irq_err_count); |
80 | else | 80 | else |
81 | irq_dispatch(irq, regs); | 81 | irq_dispatch(irq); |
82 | desc->chip->end(source_irq); | 82 | desc->chip->end(source_irq); |
83 | } else | 83 | } else |
84 | do_IRQ(irq, regs); | 84 | do_IRQ(irq); |
85 | } | 85 | } |
86 | 86 | ||
87 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | 87 | asmlinkage void plat_irq_dispatch(void) |
88 | { | 88 | { |
89 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; | 89 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; |
90 | 90 | ||
91 | if (pending & CAUSEF_IP7) | 91 | if (pending & CAUSEF_IP7) |
92 | do_IRQ(7, regs); | 92 | do_IRQ(7); |
93 | else if (pending & 0x7800) { | 93 | else if (pending & 0x7800) { |
94 | if (pending & CAUSEF_IP3) | 94 | if (pending & CAUSEF_IP3) |
95 | irq_dispatch(3, regs); | 95 | irq_dispatch(3); |
96 | else if (pending & CAUSEF_IP4) | 96 | else if (pending & CAUSEF_IP4) |
97 | irq_dispatch(4, regs); | 97 | irq_dispatch(4); |
98 | else if (pending & CAUSEF_IP5) | 98 | else if (pending & CAUSEF_IP5) |
99 | irq_dispatch(5, regs); | 99 | irq_dispatch(5); |
100 | else if (pending & CAUSEF_IP6) | 100 | else if (pending & CAUSEF_IP6) |
101 | irq_dispatch(6, regs); | 101 | irq_dispatch(6); |
102 | } else if (pending & CAUSEF_IP2) | 102 | } else if (pending & CAUSEF_IP2) |
103 | irq_dispatch(2, regs); | 103 | irq_dispatch(2); |
104 | else if (pending & CAUSEF_IP0) | 104 | else if (pending & CAUSEF_IP0) |
105 | do_IRQ(0, regs); | 105 | do_IRQ(0); |
106 | else if (pending & CAUSEF_IP1) | 106 | else if (pending & CAUSEF_IP1) |
107 | do_IRQ(1, regs); | 107 | do_IRQ(1); |
108 | else | 108 | else |
109 | spurious_interrupt(regs); | 109 | spurious_interrupt(); |
110 | } | 110 | } |
111 | 111 | ||
112 | void __init arch_init_irq(void) | 112 | void __init arch_init_irq(void) |
diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c index 2b257e4f17df..d6c486e9501c 100644 --- a/arch/parisc/kernel/drivers.c +++ b/arch/parisc/kernel/drivers.c | |||
@@ -424,7 +424,7 @@ struct parisc_device * create_tree_node(char id, struct device *parent) | |||
424 | /* make the generic dma mask a pointer to the parisc one */ | 424 | /* make the generic dma mask a pointer to the parisc one */ |
425 | dev->dev.dma_mask = &dev->dma_mask; | 425 | dev->dev.dma_mask = &dev->dma_mask; |
426 | dev->dev.coherent_dma_mask = dev->dma_mask; | 426 | dev->dev.coherent_dma_mask = dev->dma_mask; |
427 | if (!device_register(&dev->dev)) { | 427 | if (device_register(&dev->dev)) { |
428 | kfree(dev); | 428 | kfree(dev); |
429 | return NULL; | 429 | return NULL; |
430 | } | 430 | } |
@@ -853,9 +853,9 @@ static void print_parisc_device(struct parisc_device *dev) | |||
853 | */ | 853 | */ |
854 | void init_parisc_bus(void) | 854 | void init_parisc_bus(void) |
855 | { | 855 | { |
856 | if (!bus_register(&parisc_bus_type)) | 856 | if (bus_register(&parisc_bus_type)) |
857 | panic("Could not register PA-RISC bus type\n"); | 857 | panic("Could not register PA-RISC bus type\n"); |
858 | if (!device_register(&root)) | 858 | if (device_register(&root)) |
859 | panic("Could not register PA-RISC root device\n"); | 859 | panic("Could not register PA-RISC root device\n"); |
860 | get_device(&root); | 860 | get_device(&root); |
861 | } | 861 | } |
diff --git a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c index c2531ae032cf..9158b707c0dd 100644 --- a/arch/parisc/kernel/firmware.c +++ b/arch/parisc/kernel/firmware.c | |||
@@ -160,13 +160,14 @@ void __init set_firmware_width(void) | |||
160 | { | 160 | { |
161 | #ifdef __LP64__ | 161 | #ifdef __LP64__ |
162 | int retval; | 162 | int retval; |
163 | unsigned long flags; | ||
163 | 164 | ||
164 | spin_lock_irq(&pdc_lock); | 165 | spin_lock_irqsave(&pdc_lock, flags); |
165 | retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, __pa(pdc_result), 0); | 166 | retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, __pa(pdc_result), 0); |
166 | convert_to_wide(pdc_result); | 167 | convert_to_wide(pdc_result); |
167 | if(pdc_result[0] != NARROW_FIRMWARE) | 168 | if(pdc_result[0] != NARROW_FIRMWARE) |
168 | parisc_narrow_firmware = 0; | 169 | parisc_narrow_firmware = 0; |
169 | spin_unlock_irq(&pdc_lock); | 170 | spin_unlock_irqrestore(&pdc_lock, flags); |
170 | #endif | 171 | #endif |
171 | } | 172 | } |
172 | 173 | ||
@@ -196,10 +197,11 @@ void pdc_emergency_unlock(void) | |||
196 | int pdc_add_valid(unsigned long address) | 197 | int pdc_add_valid(unsigned long address) |
197 | { | 198 | { |
198 | int retval; | 199 | int retval; |
200 | unsigned long flags; | ||
199 | 201 | ||
200 | spin_lock_irq(&pdc_lock); | 202 | spin_lock_irqsave(&pdc_lock, flags); |
201 | retval = mem_pdc_call(PDC_ADD_VALID, PDC_ADD_VALID_VERIFY, address); | 203 | retval = mem_pdc_call(PDC_ADD_VALID, PDC_ADD_VALID_VERIFY, address); |
202 | spin_unlock_irq(&pdc_lock); | 204 | spin_unlock_irqrestore(&pdc_lock, flags); |
203 | 205 | ||
204 | return retval; | 206 | return retval; |
205 | } | 207 | } |
@@ -216,15 +218,16 @@ EXPORT_SYMBOL(pdc_add_valid); | |||
216 | int __init pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsigned long len) | 218 | int __init pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsigned long len) |
217 | { | 219 | { |
218 | int retval; | 220 | int retval; |
221 | unsigned long flags; | ||
219 | 222 | ||
220 | spin_lock_irq(&pdc_lock); | 223 | spin_lock_irqsave(&pdc_lock, flags); |
221 | memcpy(&pdc_result, chassis_info, sizeof(*chassis_info)); | 224 | memcpy(&pdc_result, chassis_info, sizeof(*chassis_info)); |
222 | memcpy(&pdc_result2, led_info, len); | 225 | memcpy(&pdc_result2, led_info, len); |
223 | retval = mem_pdc_call(PDC_CHASSIS, PDC_RETURN_CHASSIS_INFO, | 226 | retval = mem_pdc_call(PDC_CHASSIS, PDC_RETURN_CHASSIS_INFO, |
224 | __pa(pdc_result), __pa(pdc_result2), len); | 227 | __pa(pdc_result), __pa(pdc_result2), len); |
225 | memcpy(chassis_info, pdc_result, sizeof(*chassis_info)); | 228 | memcpy(chassis_info, pdc_result, sizeof(*chassis_info)); |
226 | memcpy(led_info, pdc_result2, len); | 229 | memcpy(led_info, pdc_result2, len); |
227 | spin_unlock_irq(&pdc_lock); | 230 | spin_unlock_irqrestore(&pdc_lock, flags); |
228 | 231 | ||
229 | return retval; | 232 | return retval; |
230 | } | 233 | } |
@@ -239,13 +242,14 @@ int __init pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_inf | |||
239 | int pdc_pat_chassis_send_log(unsigned long state, unsigned long data) | 242 | int pdc_pat_chassis_send_log(unsigned long state, unsigned long data) |
240 | { | 243 | { |
241 | int retval = 0; | 244 | int retval = 0; |
245 | unsigned long flags; | ||
242 | 246 | ||
243 | if (!is_pdc_pat()) | 247 | if (!is_pdc_pat()) |
244 | return -1; | 248 | return -1; |
245 | 249 | ||
246 | spin_lock_irq(&pdc_lock); | 250 | spin_lock_irqsave(&pdc_lock, flags); |
247 | retval = mem_pdc_call(PDC_PAT_CHASSIS_LOG, PDC_PAT_CHASSIS_WRITE_LOG, __pa(&state), __pa(&data)); | 251 | retval = mem_pdc_call(PDC_PAT_CHASSIS_LOG, PDC_PAT_CHASSIS_WRITE_LOG, __pa(&state), __pa(&data)); |
248 | spin_unlock_irq(&pdc_lock); | 252 | spin_unlock_irqrestore(&pdc_lock, flags); |
249 | 253 | ||
250 | return retval; | 254 | return retval; |
251 | } | 255 | } |
@@ -258,10 +262,11 @@ int pdc_pat_chassis_send_log(unsigned long state, unsigned long data) | |||
258 | int pdc_chassis_disp(unsigned long disp) | 262 | int pdc_chassis_disp(unsigned long disp) |
259 | { | 263 | { |
260 | int retval = 0; | 264 | int retval = 0; |
265 | unsigned long flags; | ||
261 | 266 | ||
262 | spin_lock_irq(&pdc_lock); | 267 | spin_lock_irqsave(&pdc_lock, flags); |
263 | retval = mem_pdc_call(PDC_CHASSIS, PDC_CHASSIS_DISP, disp); | 268 | retval = mem_pdc_call(PDC_CHASSIS, PDC_CHASSIS_DISP, disp); |
264 | spin_unlock_irq(&pdc_lock); | 269 | spin_unlock_irqrestore(&pdc_lock, flags); |
265 | 270 | ||
266 | return retval; | 271 | return retval; |
267 | } | 272 | } |
@@ -273,11 +278,12 @@ int pdc_chassis_disp(unsigned long disp) | |||
273 | int pdc_chassis_warn(unsigned long *warn) | 278 | int pdc_chassis_warn(unsigned long *warn) |
274 | { | 279 | { |
275 | int retval = 0; | 280 | int retval = 0; |
281 | unsigned long flags; | ||
276 | 282 | ||
277 | spin_lock_irq(&pdc_lock); | 283 | spin_lock_irqsave(&pdc_lock, flags); |
278 | retval = mem_pdc_call(PDC_CHASSIS, PDC_CHASSIS_WARN, __pa(pdc_result)); | 284 | retval = mem_pdc_call(PDC_CHASSIS, PDC_CHASSIS_WARN, __pa(pdc_result)); |
279 | *warn = pdc_result[0]; | 285 | *warn = pdc_result[0]; |
280 | spin_unlock_irq(&pdc_lock); | 286 | spin_unlock_irqrestore(&pdc_lock, flags); |
281 | 287 | ||
282 | return retval; | 288 | return retval; |
283 | } | 289 | } |
@@ -292,15 +298,16 @@ int pdc_chassis_warn(unsigned long *warn) | |||
292 | int __init pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info) | 298 | int __init pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info) |
293 | { | 299 | { |
294 | int retval; | 300 | int retval; |
301 | unsigned long flags; | ||
295 | 302 | ||
296 | spin_lock_irq(&pdc_lock); | 303 | spin_lock_irqsave(&pdc_lock, flags); |
297 | retval = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result)); | 304 | retval = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result)); |
298 | convert_to_wide(pdc_result); | 305 | convert_to_wide(pdc_result); |
299 | pdc_coproc_info->ccr_functional = pdc_result[0]; | 306 | pdc_coproc_info->ccr_functional = pdc_result[0]; |
300 | pdc_coproc_info->ccr_present = pdc_result[1]; | 307 | pdc_coproc_info->ccr_present = pdc_result[1]; |
301 | pdc_coproc_info->revision = pdc_result[17]; | 308 | pdc_coproc_info->revision = pdc_result[17]; |
302 | pdc_coproc_info->model = pdc_result[18]; | 309 | pdc_coproc_info->model = pdc_result[18]; |
303 | spin_unlock_irq(&pdc_lock); | 310 | spin_unlock_irqrestore(&pdc_lock, flags); |
304 | 311 | ||
305 | return retval; | 312 | return retval; |
306 | } | 313 | } |
@@ -320,14 +327,15 @@ int pdc_iodc_read(unsigned long *actcnt, unsigned long hpa, unsigned int index, | |||
320 | void *iodc_data, unsigned int iodc_data_size) | 327 | void *iodc_data, unsigned int iodc_data_size) |
321 | { | 328 | { |
322 | int retval; | 329 | int retval; |
330 | unsigned long flags; | ||
323 | 331 | ||
324 | spin_lock_irq(&pdc_lock); | 332 | spin_lock_irqsave(&pdc_lock, flags); |
325 | retval = mem_pdc_call(PDC_IODC, PDC_IODC_READ, __pa(pdc_result), hpa, | 333 | retval = mem_pdc_call(PDC_IODC, PDC_IODC_READ, __pa(pdc_result), hpa, |
326 | index, __pa(pdc_result2), iodc_data_size); | 334 | index, __pa(pdc_result2), iodc_data_size); |
327 | convert_to_wide(pdc_result); | 335 | convert_to_wide(pdc_result); |
328 | *actcnt = pdc_result[0]; | 336 | *actcnt = pdc_result[0]; |
329 | memcpy(iodc_data, pdc_result2, iodc_data_size); | 337 | memcpy(iodc_data, pdc_result2, iodc_data_size); |
330 | spin_unlock_irq(&pdc_lock); | 338 | spin_unlock_irqrestore(&pdc_lock, flags); |
331 | 339 | ||
332 | return retval; | 340 | return retval; |
333 | } | 341 | } |
@@ -346,14 +354,15 @@ int pdc_system_map_find_mods(struct pdc_system_map_mod_info *pdc_mod_info, | |||
346 | struct pdc_module_path *mod_path, long mod_index) | 354 | struct pdc_module_path *mod_path, long mod_index) |
347 | { | 355 | { |
348 | int retval; | 356 | int retval; |
357 | unsigned long flags; | ||
349 | 358 | ||
350 | spin_lock_irq(&pdc_lock); | 359 | spin_lock_irqsave(&pdc_lock, flags); |
351 | retval = mem_pdc_call(PDC_SYSTEM_MAP, PDC_FIND_MODULE, __pa(pdc_result), | 360 | retval = mem_pdc_call(PDC_SYSTEM_MAP, PDC_FIND_MODULE, __pa(pdc_result), |
352 | __pa(pdc_result2), mod_index); | 361 | __pa(pdc_result2), mod_index); |
353 | convert_to_wide(pdc_result); | 362 | convert_to_wide(pdc_result); |
354 | memcpy(pdc_mod_info, pdc_result, sizeof(*pdc_mod_info)); | 363 | memcpy(pdc_mod_info, pdc_result, sizeof(*pdc_mod_info)); |
355 | memcpy(mod_path, pdc_result2, sizeof(*mod_path)); | 364 | memcpy(mod_path, pdc_result2, sizeof(*mod_path)); |
356 | spin_unlock_irq(&pdc_lock); | 365 | spin_unlock_irqrestore(&pdc_lock, flags); |
357 | 366 | ||
358 | pdc_mod_info->mod_addr = f_extend(pdc_mod_info->mod_addr); | 367 | pdc_mod_info->mod_addr = f_extend(pdc_mod_info->mod_addr); |
359 | return retval; | 368 | return retval; |
@@ -372,13 +381,14 @@ int pdc_system_map_find_addrs(struct pdc_system_map_addr_info *pdc_addr_info, | |||
372 | long mod_index, long addr_index) | 381 | long mod_index, long addr_index) |
373 | { | 382 | { |
374 | int retval; | 383 | int retval; |
384 | unsigned long flags; | ||
375 | 385 | ||
376 | spin_lock_irq(&pdc_lock); | 386 | spin_lock_irqsave(&pdc_lock, flags); |
377 | retval = mem_pdc_call(PDC_SYSTEM_MAP, PDC_FIND_ADDRESS, __pa(pdc_result), | 387 | retval = mem_pdc_call(PDC_SYSTEM_MAP, PDC_FIND_ADDRESS, __pa(pdc_result), |
378 | mod_index, addr_index); | 388 | mod_index, addr_index); |
379 | convert_to_wide(pdc_result); | 389 | convert_to_wide(pdc_result); |
380 | memcpy(pdc_addr_info, pdc_result, sizeof(*pdc_addr_info)); | 390 | memcpy(pdc_addr_info, pdc_result, sizeof(*pdc_addr_info)); |
381 | spin_unlock_irq(&pdc_lock); | 391 | spin_unlock_irqrestore(&pdc_lock, flags); |
382 | 392 | ||
383 | pdc_addr_info->mod_addr = f_extend(pdc_addr_info->mod_addr); | 393 | pdc_addr_info->mod_addr = f_extend(pdc_addr_info->mod_addr); |
384 | return retval; | 394 | return retval; |
@@ -393,12 +403,13 @@ int pdc_system_map_find_addrs(struct pdc_system_map_addr_info *pdc_addr_info, | |||
393 | int pdc_model_info(struct pdc_model *model) | 403 | int pdc_model_info(struct pdc_model *model) |
394 | { | 404 | { |
395 | int retval; | 405 | int retval; |
406 | unsigned long flags; | ||
396 | 407 | ||
397 | spin_lock_irq(&pdc_lock); | 408 | spin_lock_irqsave(&pdc_lock, flags); |
398 | retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_INFO, __pa(pdc_result), 0); | 409 | retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_INFO, __pa(pdc_result), 0); |
399 | convert_to_wide(pdc_result); | 410 | convert_to_wide(pdc_result); |
400 | memcpy(model, pdc_result, sizeof(*model)); | 411 | memcpy(model, pdc_result, sizeof(*model)); |
401 | spin_unlock_irq(&pdc_lock); | 412 | spin_unlock_irqrestore(&pdc_lock, flags); |
402 | 413 | ||
403 | return retval; | 414 | return retval; |
404 | } | 415 | } |
@@ -414,8 +425,9 @@ int pdc_model_info(struct pdc_model *model) | |||
414 | int pdc_model_sysmodel(char *name) | 425 | int pdc_model_sysmodel(char *name) |
415 | { | 426 | { |
416 | int retval; | 427 | int retval; |
428 | unsigned long flags; | ||
417 | 429 | ||
418 | spin_lock_irq(&pdc_lock); | 430 | spin_lock_irqsave(&pdc_lock, flags); |
419 | retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_SYSMODEL, __pa(pdc_result), | 431 | retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_SYSMODEL, __pa(pdc_result), |
420 | OS_ID_HPUX, __pa(name)); | 432 | OS_ID_HPUX, __pa(name)); |
421 | convert_to_wide(pdc_result); | 433 | convert_to_wide(pdc_result); |
@@ -425,7 +437,7 @@ int pdc_model_sysmodel(char *name) | |||
425 | } else { | 437 | } else { |
426 | name[0] = 0; | 438 | name[0] = 0; |
427 | } | 439 | } |
428 | spin_unlock_irq(&pdc_lock); | 440 | spin_unlock_irqrestore(&pdc_lock, flags); |
429 | 441 | ||
430 | return retval; | 442 | return retval; |
431 | } | 443 | } |
@@ -443,12 +455,13 @@ int pdc_model_sysmodel(char *name) | |||
443 | int pdc_model_versions(unsigned long *versions, int id) | 455 | int pdc_model_versions(unsigned long *versions, int id) |
444 | { | 456 | { |
445 | int retval; | 457 | int retval; |
458 | unsigned long flags; | ||
446 | 459 | ||
447 | spin_lock_irq(&pdc_lock); | 460 | spin_lock_irqsave(&pdc_lock, flags); |
448 | retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_VERSIONS, __pa(pdc_result), id); | 461 | retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_VERSIONS, __pa(pdc_result), id); |
449 | convert_to_wide(pdc_result); | 462 | convert_to_wide(pdc_result); |
450 | *versions = pdc_result[0]; | 463 | *versions = pdc_result[0]; |
451 | spin_unlock_irq(&pdc_lock); | 464 | spin_unlock_irqrestore(&pdc_lock, flags); |
452 | 465 | ||
453 | return retval; | 466 | return retval; |
454 | } | 467 | } |
@@ -463,13 +476,14 @@ int pdc_model_versions(unsigned long *versions, int id) | |||
463 | int pdc_model_cpuid(unsigned long *cpu_id) | 476 | int pdc_model_cpuid(unsigned long *cpu_id) |
464 | { | 477 | { |
465 | int retval; | 478 | int retval; |
479 | unsigned long flags; | ||
466 | 480 | ||
467 | spin_lock_irq(&pdc_lock); | 481 | spin_lock_irqsave(&pdc_lock, flags); |
468 | pdc_result[0] = 0; /* preset zero (call may not be implemented!) */ | 482 | pdc_result[0] = 0; /* preset zero (call may not be implemented!) */ |
469 | retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_CPU_ID, __pa(pdc_result), 0); | 483 | retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_CPU_ID, __pa(pdc_result), 0); |
470 | convert_to_wide(pdc_result); | 484 | convert_to_wide(pdc_result); |
471 | *cpu_id = pdc_result[0]; | 485 | *cpu_id = pdc_result[0]; |
472 | spin_unlock_irq(&pdc_lock); | 486 | spin_unlock_irqrestore(&pdc_lock, flags); |
473 | 487 | ||
474 | return retval; | 488 | return retval; |
475 | } | 489 | } |
@@ -484,13 +498,14 @@ int pdc_model_cpuid(unsigned long *cpu_id) | |||
484 | int pdc_model_capabilities(unsigned long *capabilities) | 498 | int pdc_model_capabilities(unsigned long *capabilities) |
485 | { | 499 | { |
486 | int retval; | 500 | int retval; |
501 | unsigned long flags; | ||
487 | 502 | ||
488 | spin_lock_irq(&pdc_lock); | 503 | spin_lock_irqsave(&pdc_lock, flags); |
489 | pdc_result[0] = 0; /* preset zero (call may not be implemented!) */ | 504 | pdc_result[0] = 0; /* preset zero (call may not be implemented!) */ |
490 | retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, __pa(pdc_result), 0); | 505 | retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, __pa(pdc_result), 0); |
491 | convert_to_wide(pdc_result); | 506 | convert_to_wide(pdc_result); |
492 | *capabilities = pdc_result[0]; | 507 | *capabilities = pdc_result[0]; |
493 | spin_unlock_irq(&pdc_lock); | 508 | spin_unlock_irqrestore(&pdc_lock, flags); |
494 | 509 | ||
495 | return retval; | 510 | return retval; |
496 | } | 511 | } |
@@ -504,12 +519,13 @@ int pdc_model_capabilities(unsigned long *capabilities) | |||
504 | int pdc_cache_info(struct pdc_cache_info *cache_info) | 519 | int pdc_cache_info(struct pdc_cache_info *cache_info) |
505 | { | 520 | { |
506 | int retval; | 521 | int retval; |
522 | unsigned long flags; | ||
507 | 523 | ||
508 | spin_lock_irq(&pdc_lock); | 524 | spin_lock_irqsave(&pdc_lock, flags); |
509 | retval = mem_pdc_call(PDC_CACHE, PDC_CACHE_INFO, __pa(pdc_result), 0); | 525 | retval = mem_pdc_call(PDC_CACHE, PDC_CACHE_INFO, __pa(pdc_result), 0); |
510 | convert_to_wide(pdc_result); | 526 | convert_to_wide(pdc_result); |
511 | memcpy(cache_info, pdc_result, sizeof(*cache_info)); | 527 | memcpy(cache_info, pdc_result, sizeof(*cache_info)); |
512 | spin_unlock_irq(&pdc_lock); | 528 | spin_unlock_irqrestore(&pdc_lock, flags); |
513 | 529 | ||
514 | return retval; | 530 | return retval; |
515 | } | 531 | } |
@@ -523,13 +539,14 @@ int pdc_cache_info(struct pdc_cache_info *cache_info) | |||
523 | int pdc_spaceid_bits(unsigned long *space_bits) | 539 | int pdc_spaceid_bits(unsigned long *space_bits) |
524 | { | 540 | { |
525 | int retval; | 541 | int retval; |
542 | unsigned long flags; | ||
526 | 543 | ||
527 | spin_lock_irq(&pdc_lock); | 544 | spin_lock_irqsave(&pdc_lock, flags); |
528 | pdc_result[0] = 0; | 545 | pdc_result[0] = 0; |
529 | retval = mem_pdc_call(PDC_CACHE, PDC_CACHE_RET_SPID, __pa(pdc_result), 0); | 546 | retval = mem_pdc_call(PDC_CACHE, PDC_CACHE_RET_SPID, __pa(pdc_result), 0); |
530 | convert_to_wide(pdc_result); | 547 | convert_to_wide(pdc_result); |
531 | *space_bits = pdc_result[0]; | 548 | *space_bits = pdc_result[0]; |
532 | spin_unlock_irq(&pdc_lock); | 549 | spin_unlock_irqrestore(&pdc_lock, flags); |
533 | 550 | ||
534 | return retval; | 551 | return retval; |
535 | } | 552 | } |
@@ -544,11 +561,12 @@ int pdc_spaceid_bits(unsigned long *space_bits) | |||
544 | int pdc_btlb_info(struct pdc_btlb_info *btlb) | 561 | int pdc_btlb_info(struct pdc_btlb_info *btlb) |
545 | { | 562 | { |
546 | int retval; | 563 | int retval; |
564 | unsigned long flags; | ||
547 | 565 | ||
548 | spin_lock_irq(&pdc_lock); | 566 | spin_lock_irqsave(&pdc_lock, flags); |
549 | retval = mem_pdc_call(PDC_BLOCK_TLB, PDC_BTLB_INFO, __pa(pdc_result), 0); | 567 | retval = mem_pdc_call(PDC_BLOCK_TLB, PDC_BTLB_INFO, __pa(pdc_result), 0); |
550 | memcpy(btlb, pdc_result, sizeof(*btlb)); | 568 | memcpy(btlb, pdc_result, sizeof(*btlb)); |
551 | spin_unlock_irq(&pdc_lock); | 569 | spin_unlock_irqrestore(&pdc_lock, flags); |
552 | 570 | ||
553 | if(retval < 0) { | 571 | if(retval < 0) { |
554 | btlb->max_size = 0; | 572 | btlb->max_size = 0; |
@@ -572,13 +590,14 @@ int pdc_mem_map_hpa(struct pdc_memory_map *address, | |||
572 | struct pdc_module_path *mod_path) | 590 | struct pdc_module_path *mod_path) |
573 | { | 591 | { |
574 | int retval; | 592 | int retval; |
593 | unsigned long flags; | ||
575 | 594 | ||
576 | spin_lock_irq(&pdc_lock); | 595 | spin_lock_irqsave(&pdc_lock, flags); |
577 | memcpy(pdc_result2, mod_path, sizeof(*mod_path)); | 596 | memcpy(pdc_result2, mod_path, sizeof(*mod_path)); |
578 | retval = mem_pdc_call(PDC_MEM_MAP, PDC_MEM_MAP_HPA, __pa(pdc_result), | 597 | retval = mem_pdc_call(PDC_MEM_MAP, PDC_MEM_MAP_HPA, __pa(pdc_result), |
579 | __pa(pdc_result2)); | 598 | __pa(pdc_result2)); |
580 | memcpy(address, pdc_result, sizeof(*address)); | 599 | memcpy(address, pdc_result, sizeof(*address)); |
581 | spin_unlock_irq(&pdc_lock); | 600 | spin_unlock_irqrestore(&pdc_lock, flags); |
582 | 601 | ||
583 | return retval; | 602 | return retval; |
584 | } | 603 | } |
@@ -594,8 +613,9 @@ int pdc_mem_map_hpa(struct pdc_memory_map *address, | |||
594 | int pdc_lan_station_id(char *lan_addr, unsigned long hpa) | 613 | int pdc_lan_station_id(char *lan_addr, unsigned long hpa) |
595 | { | 614 | { |
596 | int retval; | 615 | int retval; |
616 | unsigned long flags; | ||
597 | 617 | ||
598 | spin_lock_irq(&pdc_lock); | 618 | spin_lock_irqsave(&pdc_lock, flags); |
599 | retval = mem_pdc_call(PDC_LAN_STATION_ID, PDC_LAN_STATION_ID_READ, | 619 | retval = mem_pdc_call(PDC_LAN_STATION_ID, PDC_LAN_STATION_ID_READ, |
600 | __pa(pdc_result), hpa); | 620 | __pa(pdc_result), hpa); |
601 | if (retval < 0) { | 621 | if (retval < 0) { |
@@ -604,7 +624,7 @@ int pdc_lan_station_id(char *lan_addr, unsigned long hpa) | |||
604 | } else { | 624 | } else { |
605 | memcpy(lan_addr, pdc_result, PDC_LAN_STATION_ID_SIZE); | 625 | memcpy(lan_addr, pdc_result, PDC_LAN_STATION_ID_SIZE); |
606 | } | 626 | } |
607 | spin_unlock_irq(&pdc_lock); | 627 | spin_unlock_irqrestore(&pdc_lock, flags); |
608 | 628 | ||
609 | return retval; | 629 | return retval; |
610 | } | 630 | } |
@@ -623,13 +643,14 @@ EXPORT_SYMBOL(pdc_lan_station_id); | |||
623 | int pdc_stable_read(unsigned long staddr, void *memaddr, unsigned long count) | 643 | int pdc_stable_read(unsigned long staddr, void *memaddr, unsigned long count) |
624 | { | 644 | { |
625 | int retval; | 645 | int retval; |
646 | unsigned long flags; | ||
626 | 647 | ||
627 | spin_lock_irq(&pdc_lock); | 648 | spin_lock_irqsave(&pdc_lock, flags); |
628 | retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_READ, staddr, | 649 | retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_READ, staddr, |
629 | __pa(pdc_result), count); | 650 | __pa(pdc_result), count); |
630 | convert_to_wide(pdc_result); | 651 | convert_to_wide(pdc_result); |
631 | memcpy(memaddr, pdc_result, count); | 652 | memcpy(memaddr, pdc_result, count); |
632 | spin_unlock_irq(&pdc_lock); | 653 | spin_unlock_irqrestore(&pdc_lock, flags); |
633 | 654 | ||
634 | return retval; | 655 | return retval; |
635 | } | 656 | } |
@@ -648,13 +669,14 @@ EXPORT_SYMBOL(pdc_stable_read); | |||
648 | int pdc_stable_write(unsigned long staddr, void *memaddr, unsigned long count) | 669 | int pdc_stable_write(unsigned long staddr, void *memaddr, unsigned long count) |
649 | { | 670 | { |
650 | int retval; | 671 | int retval; |
672 | unsigned long flags; | ||
651 | 673 | ||
652 | spin_lock_irq(&pdc_lock); | 674 | spin_lock_irqsave(&pdc_lock, flags); |
653 | memcpy(pdc_result, memaddr, count); | 675 | memcpy(pdc_result, memaddr, count); |
654 | convert_to_wide(pdc_result); | 676 | convert_to_wide(pdc_result); |
655 | retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_WRITE, staddr, | 677 | retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_WRITE, staddr, |
656 | __pa(pdc_result), count); | 678 | __pa(pdc_result), count); |
657 | spin_unlock_irq(&pdc_lock); | 679 | spin_unlock_irqrestore(&pdc_lock, flags); |
658 | 680 | ||
659 | return retval; | 681 | return retval; |
660 | } | 682 | } |
@@ -672,11 +694,12 @@ EXPORT_SYMBOL(pdc_stable_write); | |||
672 | int pdc_stable_get_size(unsigned long *size) | 694 | int pdc_stable_get_size(unsigned long *size) |
673 | { | 695 | { |
674 | int retval; | 696 | int retval; |
697 | unsigned long flags; | ||
675 | 698 | ||
676 | spin_lock_irq(&pdc_lock); | 699 | spin_lock_irqsave(&pdc_lock, flags); |
677 | retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_RETURN_SIZE, __pa(pdc_result)); | 700 | retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_RETURN_SIZE, __pa(pdc_result)); |
678 | *size = pdc_result[0]; | 701 | *size = pdc_result[0]; |
679 | spin_unlock_irq(&pdc_lock); | 702 | spin_unlock_irqrestore(&pdc_lock, flags); |
680 | 703 | ||
681 | return retval; | 704 | return retval; |
682 | } | 705 | } |
@@ -691,10 +714,11 @@ EXPORT_SYMBOL(pdc_stable_get_size); | |||
691 | int pdc_stable_verify_contents(void) | 714 | int pdc_stable_verify_contents(void) |
692 | { | 715 | { |
693 | int retval; | 716 | int retval; |
717 | unsigned long flags; | ||
694 | 718 | ||
695 | spin_lock_irq(&pdc_lock); | 719 | spin_lock_irqsave(&pdc_lock, flags); |
696 | retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_VERIFY_CONTENTS); | 720 | retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_VERIFY_CONTENTS); |
697 | spin_unlock_irq(&pdc_lock); | 721 | spin_unlock_irqrestore(&pdc_lock, flags); |
698 | 722 | ||
699 | return retval; | 723 | return retval; |
700 | } | 724 | } |
@@ -709,10 +733,11 @@ EXPORT_SYMBOL(pdc_stable_verify_contents); | |||
709 | int pdc_stable_initialize(void) | 733 | int pdc_stable_initialize(void) |
710 | { | 734 | { |
711 | int retval; | 735 | int retval; |
736 | unsigned long flags; | ||
712 | 737 | ||
713 | spin_lock_irq(&pdc_lock); | 738 | spin_lock_irqsave(&pdc_lock, flags); |
714 | retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_INITIALIZE); | 739 | retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_INITIALIZE); |
715 | spin_unlock_irq(&pdc_lock); | 740 | spin_unlock_irqrestore(&pdc_lock, flags); |
716 | 741 | ||
717 | return retval; | 742 | return retval; |
718 | } | 743 | } |
@@ -735,8 +760,9 @@ EXPORT_SYMBOL(pdc_stable_initialize); | |||
735 | int pdc_get_initiator(struct hardware_path *hwpath, struct pdc_initiator *initiator) | 760 | int pdc_get_initiator(struct hardware_path *hwpath, struct pdc_initiator *initiator) |
736 | { | 761 | { |
737 | int retval; | 762 | int retval; |
763 | unsigned long flags; | ||
738 | 764 | ||
739 | spin_lock_irq(&pdc_lock); | 765 | spin_lock_irqsave(&pdc_lock, flags); |
740 | 766 | ||
741 | /* BCJ-XXXX series boxes. E.G. "9000/785/C3000" */ | 767 | /* BCJ-XXXX series boxes. E.G. "9000/785/C3000" */ |
742 | #define IS_SPROCKETS() (strlen(boot_cpu_data.pdc.sys_model_name) == 14 && \ | 768 | #define IS_SPROCKETS() (strlen(boot_cpu_data.pdc.sys_model_name) == 14 && \ |
@@ -776,7 +802,8 @@ int pdc_get_initiator(struct hardware_path *hwpath, struct pdc_initiator *initia | |||
776 | } | 802 | } |
777 | 803 | ||
778 | out: | 804 | out: |
779 | spin_unlock_irq(&pdc_lock); | 805 | spin_unlock_irqrestore(&pdc_lock, flags); |
806 | |||
780 | return (retval >= PDC_OK); | 807 | return (retval >= PDC_OK); |
781 | } | 808 | } |
782 | EXPORT_SYMBOL(pdc_get_initiator); | 809 | EXPORT_SYMBOL(pdc_get_initiator); |
@@ -794,13 +821,14 @@ EXPORT_SYMBOL(pdc_get_initiator); | |||
794 | int pdc_pci_irt_size(unsigned long *num_entries, unsigned long hpa) | 821 | int pdc_pci_irt_size(unsigned long *num_entries, unsigned long hpa) |
795 | { | 822 | { |
796 | int retval; | 823 | int retval; |
824 | unsigned long flags; | ||
797 | 825 | ||
798 | spin_lock_irq(&pdc_lock); | 826 | spin_lock_irqsave(&pdc_lock, flags); |
799 | retval = mem_pdc_call(PDC_PCI_INDEX, PDC_PCI_GET_INT_TBL_SIZE, | 827 | retval = mem_pdc_call(PDC_PCI_INDEX, PDC_PCI_GET_INT_TBL_SIZE, |
800 | __pa(pdc_result), hpa); | 828 | __pa(pdc_result), hpa); |
801 | convert_to_wide(pdc_result); | 829 | convert_to_wide(pdc_result); |
802 | *num_entries = pdc_result[0]; | 830 | *num_entries = pdc_result[0]; |
803 | spin_unlock_irq(&pdc_lock); | 831 | spin_unlock_irqrestore(&pdc_lock, flags); |
804 | 832 | ||
805 | return retval; | 833 | return retval; |
806 | } | 834 | } |
@@ -817,14 +845,15 @@ int pdc_pci_irt_size(unsigned long *num_entries, unsigned long hpa) | |||
817 | int pdc_pci_irt(unsigned long num_entries, unsigned long hpa, void *tbl) | 845 | int pdc_pci_irt(unsigned long num_entries, unsigned long hpa, void *tbl) |
818 | { | 846 | { |
819 | int retval; | 847 | int retval; |
848 | unsigned long flags; | ||
820 | 849 | ||
821 | BUG_ON((unsigned long)tbl & 0x7); | 850 | BUG_ON((unsigned long)tbl & 0x7); |
822 | 851 | ||
823 | spin_lock_irq(&pdc_lock); | 852 | spin_lock_irqsave(&pdc_lock, flags); |
824 | pdc_result[0] = num_entries; | 853 | pdc_result[0] = num_entries; |
825 | retval = mem_pdc_call(PDC_PCI_INDEX, PDC_PCI_GET_INT_TBL, | 854 | retval = mem_pdc_call(PDC_PCI_INDEX, PDC_PCI_GET_INT_TBL, |
826 | __pa(pdc_result), hpa, __pa(tbl)); | 855 | __pa(pdc_result), hpa, __pa(tbl)); |
827 | spin_unlock_irq(&pdc_lock); | 856 | spin_unlock_irqrestore(&pdc_lock, flags); |
828 | 857 | ||
829 | return retval; | 858 | return retval; |
830 | } | 859 | } |
@@ -842,12 +871,15 @@ int pdc_pci_irt(unsigned long num_entries, unsigned long hpa, void *tbl) | |||
842 | unsigned int pdc_pci_config_read(void *hpa, unsigned long cfg_addr) | 871 | unsigned int pdc_pci_config_read(void *hpa, unsigned long cfg_addr) |
843 | { | 872 | { |
844 | int retval; | 873 | int retval; |
845 | spin_lock_irq(&pdc_lock); | 874 | unsigned long flags; |
875 | |||
876 | spin_lock_irqsave(&pdc_lock, flags); | ||
846 | pdc_result[0] = 0; | 877 | pdc_result[0] = 0; |
847 | pdc_result[1] = 0; | 878 | pdc_result[1] = 0; |
848 | retval = mem_pdc_call(PDC_PCI_INDEX, PDC_PCI_READ_CONFIG, | 879 | retval = mem_pdc_call(PDC_PCI_INDEX, PDC_PCI_READ_CONFIG, |
849 | __pa(pdc_result), hpa, cfg_addr&~3UL, 4UL); | 880 | __pa(pdc_result), hpa, cfg_addr&~3UL, 4UL); |
850 | spin_unlock_irq(&pdc_lock); | 881 | spin_unlock_irqrestore(&pdc_lock, flags); |
882 | |||
851 | return retval ? ~0 : (unsigned int) pdc_result[0]; | 883 | return retval ? ~0 : (unsigned int) pdc_result[0]; |
852 | } | 884 | } |
853 | 885 | ||
@@ -863,12 +895,15 @@ unsigned int pdc_pci_config_read(void *hpa, unsigned long cfg_addr) | |||
863 | void pdc_pci_config_write(void *hpa, unsigned long cfg_addr, unsigned int val) | 895 | void pdc_pci_config_write(void *hpa, unsigned long cfg_addr, unsigned int val) |
864 | { | 896 | { |
865 | int retval; | 897 | int retval; |
866 | spin_lock_irq(&pdc_lock); | 898 | unsigned long flags; |
899 | |||
900 | spin_lock_irqsave(&pdc_lock, flags); | ||
867 | pdc_result[0] = 0; | 901 | pdc_result[0] = 0; |
868 | retval = mem_pdc_call(PDC_PCI_INDEX, PDC_PCI_WRITE_CONFIG, | 902 | retval = mem_pdc_call(PDC_PCI_INDEX, PDC_PCI_WRITE_CONFIG, |
869 | __pa(pdc_result), hpa, | 903 | __pa(pdc_result), hpa, |
870 | cfg_addr&~3UL, 4UL, (unsigned long) val); | 904 | cfg_addr&~3UL, 4UL, (unsigned long) val); |
871 | spin_unlock_irq(&pdc_lock); | 905 | spin_unlock_irqrestore(&pdc_lock, flags); |
906 | |||
872 | return retval; | 907 | return retval; |
873 | } | 908 | } |
874 | #endif /* UNTESTED CODE */ | 909 | #endif /* UNTESTED CODE */ |
@@ -882,12 +917,13 @@ void pdc_pci_config_write(void *hpa, unsigned long cfg_addr, unsigned int val) | |||
882 | int pdc_tod_read(struct pdc_tod *tod) | 917 | int pdc_tod_read(struct pdc_tod *tod) |
883 | { | 918 | { |
884 | int retval; | 919 | int retval; |
920 | unsigned long flags; | ||
885 | 921 | ||
886 | spin_lock_irq(&pdc_lock); | 922 | spin_lock_irqsave(&pdc_lock, flags); |
887 | retval = mem_pdc_call(PDC_TOD, PDC_TOD_READ, __pa(pdc_result), 0); | 923 | retval = mem_pdc_call(PDC_TOD, PDC_TOD_READ, __pa(pdc_result), 0); |
888 | convert_to_wide(pdc_result); | 924 | convert_to_wide(pdc_result); |
889 | memcpy(tod, pdc_result, sizeof(*tod)); | 925 | memcpy(tod, pdc_result, sizeof(*tod)); |
890 | spin_unlock_irq(&pdc_lock); | 926 | spin_unlock_irqrestore(&pdc_lock, flags); |
891 | 927 | ||
892 | return retval; | 928 | return retval; |
893 | } | 929 | } |
@@ -903,10 +939,11 @@ EXPORT_SYMBOL(pdc_tod_read); | |||
903 | int pdc_tod_set(unsigned long sec, unsigned long usec) | 939 | int pdc_tod_set(unsigned long sec, unsigned long usec) |
904 | { | 940 | { |
905 | int retval; | 941 | int retval; |
942 | unsigned long flags; | ||
906 | 943 | ||
907 | spin_lock_irq(&pdc_lock); | 944 | spin_lock_irqsave(&pdc_lock, flags); |
908 | retval = mem_pdc_call(PDC_TOD, PDC_TOD_WRITE, sec, usec); | 945 | retval = mem_pdc_call(PDC_TOD, PDC_TOD_WRITE, sec, usec); |
909 | spin_unlock_irq(&pdc_lock); | 946 | spin_unlock_irqrestore(&pdc_lock, flags); |
910 | 947 | ||
911 | return retval; | 948 | return retval; |
912 | } | 949 | } |
@@ -917,13 +954,14 @@ int pdc_mem_mem_table(struct pdc_memory_table_raddr *r_addr, | |||
917 | struct pdc_memory_table *tbl, unsigned long entries) | 954 | struct pdc_memory_table *tbl, unsigned long entries) |
918 | { | 955 | { |
919 | int retval; | 956 | int retval; |
957 | unsigned long flags; | ||
920 | 958 | ||
921 | spin_lock_irq(&pdc_lock); | 959 | spin_lock_irqsave(&pdc_lock, flags); |
922 | retval = mem_pdc_call(PDC_MEM, PDC_MEM_TABLE, __pa(pdc_result), __pa(pdc_result2), entries); | 960 | retval = mem_pdc_call(PDC_MEM, PDC_MEM_TABLE, __pa(pdc_result), __pa(pdc_result2), entries); |
923 | convert_to_wide(pdc_result); | 961 | convert_to_wide(pdc_result); |
924 | memcpy(r_addr, pdc_result, sizeof(*r_addr)); | 962 | memcpy(r_addr, pdc_result, sizeof(*r_addr)); |
925 | memcpy(tbl, pdc_result2, entries * sizeof(*tbl)); | 963 | memcpy(tbl, pdc_result2, entries * sizeof(*tbl)); |
926 | spin_unlock_irq(&pdc_lock); | 964 | spin_unlock_irqrestore(&pdc_lock, flags); |
927 | 965 | ||
928 | return retval; | 966 | return retval; |
929 | } | 967 | } |
@@ -936,11 +974,12 @@ int pdc_mem_mem_table(struct pdc_memory_table_raddr *r_addr, | |||
936 | int pdc_do_firm_test_reset(unsigned long ftc_bitmap) | 974 | int pdc_do_firm_test_reset(unsigned long ftc_bitmap) |
937 | { | 975 | { |
938 | int retval; | 976 | int retval; |
977 | unsigned long flags; | ||
939 | 978 | ||
940 | spin_lock_irq(&pdc_lock); | 979 | spin_lock_irqsave(&pdc_lock, flags); |
941 | retval = mem_pdc_call(PDC_BROADCAST_RESET, PDC_DO_FIRM_TEST_RESET, | 980 | retval = mem_pdc_call(PDC_BROADCAST_RESET, PDC_DO_FIRM_TEST_RESET, |
942 | PDC_FIRM_TEST_MAGIC, ftc_bitmap); | 981 | PDC_FIRM_TEST_MAGIC, ftc_bitmap); |
943 | spin_unlock_irq(&pdc_lock); | 982 | spin_unlock_irqrestore(&pdc_lock, flags); |
944 | 983 | ||
945 | return retval; | 984 | return retval; |
946 | } | 985 | } |
@@ -953,10 +992,11 @@ int pdc_do_firm_test_reset(unsigned long ftc_bitmap) | |||
953 | int pdc_do_reset(void) | 992 | int pdc_do_reset(void) |
954 | { | 993 | { |
955 | int retval; | 994 | int retval; |
995 | unsigned long flags; | ||
956 | 996 | ||
957 | spin_lock_irq(&pdc_lock); | 997 | spin_lock_irqsave(&pdc_lock, flags); |
958 | retval = mem_pdc_call(PDC_BROADCAST_RESET, PDC_DO_RESET); | 998 | retval = mem_pdc_call(PDC_BROADCAST_RESET, PDC_DO_RESET); |
959 | spin_unlock_irq(&pdc_lock); | 999 | spin_unlock_irqrestore(&pdc_lock, flags); |
960 | 1000 | ||
961 | return retval; | 1001 | return retval; |
962 | } | 1002 | } |
@@ -970,16 +1010,17 @@ int pdc_do_reset(void) | |||
970 | int __init pdc_soft_power_info(unsigned long *power_reg) | 1010 | int __init pdc_soft_power_info(unsigned long *power_reg) |
971 | { | 1011 | { |
972 | int retval; | 1012 | int retval; |
1013 | unsigned long flags; | ||
973 | 1014 | ||
974 | *power_reg = (unsigned long) (-1); | 1015 | *power_reg = (unsigned long) (-1); |
975 | 1016 | ||
976 | spin_lock_irq(&pdc_lock); | 1017 | spin_lock_irqsave(&pdc_lock, flags); |
977 | retval = mem_pdc_call(PDC_SOFT_POWER, PDC_SOFT_POWER_INFO, __pa(pdc_result), 0); | 1018 | retval = mem_pdc_call(PDC_SOFT_POWER, PDC_SOFT_POWER_INFO, __pa(pdc_result), 0); |
978 | if (retval == PDC_OK) { | 1019 | if (retval == PDC_OK) { |
979 | convert_to_wide(pdc_result); | 1020 | convert_to_wide(pdc_result); |
980 | *power_reg = f_extend(pdc_result[0]); | 1021 | *power_reg = f_extend(pdc_result[0]); |
981 | } | 1022 | } |
982 | spin_unlock_irq(&pdc_lock); | 1023 | spin_unlock_irqrestore(&pdc_lock, flags); |
983 | 1024 | ||
984 | return retval; | 1025 | return retval; |
985 | } | 1026 | } |
@@ -998,9 +1039,12 @@ int __init pdc_soft_power_info(unsigned long *power_reg) | |||
998 | int pdc_soft_power_button(int sw_control) | 1039 | int pdc_soft_power_button(int sw_control) |
999 | { | 1040 | { |
1000 | int retval; | 1041 | int retval; |
1001 | spin_lock_irq(&pdc_lock); | 1042 | unsigned long flags; |
1043 | |||
1044 | spin_lock_irqsave(&pdc_lock, flags); | ||
1002 | retval = mem_pdc_call(PDC_SOFT_POWER, PDC_SOFT_POWER_ENABLE, __pa(pdc_result), sw_control); | 1045 | retval = mem_pdc_call(PDC_SOFT_POWER, PDC_SOFT_POWER_ENABLE, __pa(pdc_result), sw_control); |
1003 | spin_unlock_irq(&pdc_lock); | 1046 | spin_unlock_irqrestore(&pdc_lock, flags); |
1047 | |||
1004 | return retval; | 1048 | return retval; |
1005 | } | 1049 | } |
1006 | 1050 | ||
@@ -1011,9 +1055,11 @@ int pdc_soft_power_button(int sw_control) | |||
1011 | */ | 1055 | */ |
1012 | void pdc_io_reset(void) | 1056 | void pdc_io_reset(void) |
1013 | { | 1057 | { |
1014 | spin_lock_irq(&pdc_lock); | 1058 | unsigned long flags; |
1059 | |||
1060 | spin_lock_irqsave(&pdc_lock, flags); | ||
1015 | mem_pdc_call(PDC_IO, PDC_IO_RESET, 0); | 1061 | mem_pdc_call(PDC_IO, PDC_IO_RESET, 0); |
1016 | spin_unlock_irq(&pdc_lock); | 1062 | spin_unlock_irqrestore(&pdc_lock, flags); |
1017 | } | 1063 | } |
1018 | 1064 | ||
1019 | /* | 1065 | /* |
@@ -1027,9 +1073,11 @@ void pdc_io_reset(void) | |||
1027 | */ | 1073 | */ |
1028 | void pdc_io_reset_devices(void) | 1074 | void pdc_io_reset_devices(void) |
1029 | { | 1075 | { |
1030 | spin_lock_irq(&pdc_lock); | 1076 | unsigned long flags; |
1077 | |||
1078 | spin_lock_irqsave(&pdc_lock, flags); | ||
1031 | mem_pdc_call(PDC_IO, PDC_IO_RESET_DEVICES, 0); | 1079 | mem_pdc_call(PDC_IO, PDC_IO_RESET_DEVICES, 0); |
1032 | spin_unlock_irq(&pdc_lock); | 1080 | spin_unlock_irqrestore(&pdc_lock, flags); |
1033 | } | 1081 | } |
1034 | 1082 | ||
1035 | 1083 | ||
@@ -1146,10 +1194,11 @@ int pdc_sti_call(unsigned long func, unsigned long flags, | |||
1146 | unsigned long glob_cfg) | 1194 | unsigned long glob_cfg) |
1147 | { | 1195 | { |
1148 | int retval; | 1196 | int retval; |
1197 | unsigned long irqflags; | ||
1149 | 1198 | ||
1150 | spin_lock_irq(&pdc_lock); | 1199 | spin_lock_irqsave(&pdc_lock, irqflags); |
1151 | retval = real32_call(func, flags, inptr, outputr, glob_cfg); | 1200 | retval = real32_call(func, flags, inptr, outputr, glob_cfg); |
1152 | spin_unlock_irq(&pdc_lock); | 1201 | spin_unlock_irqrestore(&pdc_lock, irqflags); |
1153 | 1202 | ||
1154 | return retval; | 1203 | return retval; |
1155 | } | 1204 | } |
@@ -1166,11 +1215,12 @@ EXPORT_SYMBOL(pdc_sti_call); | |||
1166 | int pdc_pat_cell_get_number(struct pdc_pat_cell_num *cell_info) | 1215 | int pdc_pat_cell_get_number(struct pdc_pat_cell_num *cell_info) |
1167 | { | 1216 | { |
1168 | int retval; | 1217 | int retval; |
1218 | unsigned long flags; | ||
1169 | 1219 | ||
1170 | spin_lock_irq(&pdc_lock); | 1220 | spin_lock_irqsave(&pdc_lock, flags); |
1171 | retval = mem_pdc_call(PDC_PAT_CELL, PDC_PAT_CELL_GET_NUMBER, __pa(pdc_result)); | 1221 | retval = mem_pdc_call(PDC_PAT_CELL, PDC_PAT_CELL_GET_NUMBER, __pa(pdc_result)); |
1172 | memcpy(cell_info, pdc_result, sizeof(*cell_info)); | 1222 | memcpy(cell_info, pdc_result, sizeof(*cell_info)); |
1173 | spin_unlock_irq(&pdc_lock); | 1223 | spin_unlock_irqrestore(&pdc_lock, flags); |
1174 | 1224 | ||
1175 | return retval; | 1225 | return retval; |
1176 | } | 1226 | } |
@@ -1190,16 +1240,17 @@ int pdc_pat_cell_module(unsigned long *actcnt, unsigned long ploc, unsigned long | |||
1190 | unsigned long view_type, void *mem_addr) | 1240 | unsigned long view_type, void *mem_addr) |
1191 | { | 1241 | { |
1192 | int retval; | 1242 | int retval; |
1243 | unsigned long flags; | ||
1193 | static struct pdc_pat_cell_mod_maddr_block result __attribute__ ((aligned (8))); | 1244 | static struct pdc_pat_cell_mod_maddr_block result __attribute__ ((aligned (8))); |
1194 | 1245 | ||
1195 | spin_lock_irq(&pdc_lock); | 1246 | spin_lock_irqsave(&pdc_lock, flags); |
1196 | retval = mem_pdc_call(PDC_PAT_CELL, PDC_PAT_CELL_MODULE, __pa(pdc_result), | 1247 | retval = mem_pdc_call(PDC_PAT_CELL, PDC_PAT_CELL_MODULE, __pa(pdc_result), |
1197 | ploc, mod, view_type, __pa(&result)); | 1248 | ploc, mod, view_type, __pa(&result)); |
1198 | if(!retval) { | 1249 | if(!retval) { |
1199 | *actcnt = pdc_result[0]; | 1250 | *actcnt = pdc_result[0]; |
1200 | memcpy(mem_addr, &result, *actcnt); | 1251 | memcpy(mem_addr, &result, *actcnt); |
1201 | } | 1252 | } |
1202 | spin_unlock_irq(&pdc_lock); | 1253 | spin_unlock_irqrestore(&pdc_lock, flags); |
1203 | 1254 | ||
1204 | return retval; | 1255 | return retval; |
1205 | } | 1256 | } |
@@ -1214,12 +1265,13 @@ int pdc_pat_cell_module(unsigned long *actcnt, unsigned long ploc, unsigned long | |||
1214 | int pdc_pat_cpu_get_number(struct pdc_pat_cpu_num *cpu_info, void *hpa) | 1265 | int pdc_pat_cpu_get_number(struct pdc_pat_cpu_num *cpu_info, void *hpa) |
1215 | { | 1266 | { |
1216 | int retval; | 1267 | int retval; |
1268 | unsigned long flags; | ||
1217 | 1269 | ||
1218 | spin_lock_irq(&pdc_lock); | 1270 | spin_lock_irqsave(&pdc_lock, flags); |
1219 | retval = mem_pdc_call(PDC_PAT_CPU, PDC_PAT_CPU_GET_NUMBER, | 1271 | retval = mem_pdc_call(PDC_PAT_CPU, PDC_PAT_CPU_GET_NUMBER, |
1220 | __pa(&pdc_result), hpa); | 1272 | __pa(&pdc_result), hpa); |
1221 | memcpy(cpu_info, pdc_result, sizeof(*cpu_info)); | 1273 | memcpy(cpu_info, pdc_result, sizeof(*cpu_info)); |
1222 | spin_unlock_irq(&pdc_lock); | 1274 | spin_unlock_irqrestore(&pdc_lock, flags); |
1223 | 1275 | ||
1224 | return retval; | 1276 | return retval; |
1225 | } | 1277 | } |
@@ -1235,12 +1287,13 @@ int pdc_pat_cpu_get_number(struct pdc_pat_cpu_num *cpu_info, void *hpa) | |||
1235 | int pdc_pat_get_irt_size(unsigned long *num_entries, unsigned long cell_num) | 1287 | int pdc_pat_get_irt_size(unsigned long *num_entries, unsigned long cell_num) |
1236 | { | 1288 | { |
1237 | int retval; | 1289 | int retval; |
1290 | unsigned long flags; | ||
1238 | 1291 | ||
1239 | spin_lock_irq(&pdc_lock); | 1292 | spin_lock_irqsave(&pdc_lock, flags); |
1240 | retval = mem_pdc_call(PDC_PAT_IO, PDC_PAT_IO_GET_PCI_ROUTING_TABLE_SIZE, | 1293 | retval = mem_pdc_call(PDC_PAT_IO, PDC_PAT_IO_GET_PCI_ROUTING_TABLE_SIZE, |
1241 | __pa(pdc_result), cell_num); | 1294 | __pa(pdc_result), cell_num); |
1242 | *num_entries = pdc_result[0]; | 1295 | *num_entries = pdc_result[0]; |
1243 | spin_unlock_irq(&pdc_lock); | 1296 | spin_unlock_irqrestore(&pdc_lock, flags); |
1244 | 1297 | ||
1245 | return retval; | 1298 | return retval; |
1246 | } | 1299 | } |
@@ -1255,11 +1308,12 @@ int pdc_pat_get_irt_size(unsigned long *num_entries, unsigned long cell_num) | |||
1255 | int pdc_pat_get_irt(void *r_addr, unsigned long cell_num) | 1308 | int pdc_pat_get_irt(void *r_addr, unsigned long cell_num) |
1256 | { | 1309 | { |
1257 | int retval; | 1310 | int retval; |
1311 | unsigned long flags; | ||
1258 | 1312 | ||
1259 | spin_lock_irq(&pdc_lock); | 1313 | spin_lock_irqsave(&pdc_lock, flags); |
1260 | retval = mem_pdc_call(PDC_PAT_IO, PDC_PAT_IO_GET_PCI_ROUTING_TABLE, | 1314 | retval = mem_pdc_call(PDC_PAT_IO, PDC_PAT_IO_GET_PCI_ROUTING_TABLE, |
1261 | __pa(r_addr), cell_num); | 1315 | __pa(r_addr), cell_num); |
1262 | spin_unlock_irq(&pdc_lock); | 1316 | spin_unlock_irqrestore(&pdc_lock, flags); |
1263 | 1317 | ||
1264 | return retval; | 1318 | return retval; |
1265 | } | 1319 | } |
@@ -1276,13 +1330,14 @@ int pdc_pat_pd_get_addr_map(unsigned long *actual_len, void *mem_addr, | |||
1276 | unsigned long count, unsigned long offset) | 1330 | unsigned long count, unsigned long offset) |
1277 | { | 1331 | { |
1278 | int retval; | 1332 | int retval; |
1333 | unsigned long flags; | ||
1279 | 1334 | ||
1280 | spin_lock_irq(&pdc_lock); | 1335 | spin_lock_irqsave(&pdc_lock, flags); |
1281 | retval = mem_pdc_call(PDC_PAT_PD, PDC_PAT_PD_GET_ADDR_MAP, __pa(pdc_result), | 1336 | retval = mem_pdc_call(PDC_PAT_PD, PDC_PAT_PD_GET_ADDR_MAP, __pa(pdc_result), |
1282 | __pa(pdc_result2), count, offset); | 1337 | __pa(pdc_result2), count, offset); |
1283 | *actual_len = pdc_result[0]; | 1338 | *actual_len = pdc_result[0]; |
1284 | memcpy(mem_addr, pdc_result2, *actual_len); | 1339 | memcpy(mem_addr, pdc_result2, *actual_len); |
1285 | spin_unlock_irq(&pdc_lock); | 1340 | spin_unlock_irqrestore(&pdc_lock, flags); |
1286 | 1341 | ||
1287 | return retval; | 1342 | return retval; |
1288 | } | 1343 | } |
@@ -1297,7 +1352,9 @@ int pdc_pat_pd_get_addr_map(unsigned long *actual_len, void *mem_addr, | |||
1297 | int pdc_pat_io_pci_cfg_read(unsigned long pci_addr, int pci_size, u32 *mem_addr) | 1352 | int pdc_pat_io_pci_cfg_read(unsigned long pci_addr, int pci_size, u32 *mem_addr) |
1298 | { | 1353 | { |
1299 | int retval; | 1354 | int retval; |
1300 | spin_lock_irq(&pdc_lock); | 1355 | unsigned long flags; |
1356 | |||
1357 | spin_lock_irqsave(&pdc_lock, flags); | ||
1301 | retval = mem_pdc_call(PDC_PAT_IO, PDC_PAT_IO_PCI_CONFIG_READ, | 1358 | retval = mem_pdc_call(PDC_PAT_IO, PDC_PAT_IO_PCI_CONFIG_READ, |
1302 | __pa(pdc_result), pci_addr, pci_size); | 1359 | __pa(pdc_result), pci_addr, pci_size); |
1303 | switch(pci_size) { | 1360 | switch(pci_size) { |
@@ -1305,7 +1362,7 @@ int pdc_pat_io_pci_cfg_read(unsigned long pci_addr, int pci_size, u32 *mem_addr) | |||
1305 | case 2: *(u16 *)mem_addr = (u16) pdc_result[0]; | 1362 | case 2: *(u16 *)mem_addr = (u16) pdc_result[0]; |
1306 | case 4: *(u32 *)mem_addr = (u32) pdc_result[0]; | 1363 | case 4: *(u32 *)mem_addr = (u32) pdc_result[0]; |
1307 | } | 1364 | } |
1308 | spin_unlock_irq(&pdc_lock); | 1365 | spin_unlock_irqrestore(&pdc_lock, flags); |
1309 | 1366 | ||
1310 | return retval; | 1367 | return retval; |
1311 | } | 1368 | } |
@@ -1321,11 +1378,12 @@ int pdc_pat_io_pci_cfg_read(unsigned long pci_addr, int pci_size, u32 *mem_addr) | |||
1321 | int pdc_pat_io_pci_cfg_write(unsigned long pci_addr, int pci_size, u32 val) | 1378 | int pdc_pat_io_pci_cfg_write(unsigned long pci_addr, int pci_size, u32 val) |
1322 | { | 1379 | { |
1323 | int retval; | 1380 | int retval; |
1381 | unsigned long flags; | ||
1324 | 1382 | ||
1325 | spin_lock_irq(&pdc_lock); | 1383 | spin_lock_irqsave(&pdc_lock, flags); |
1326 | retval = mem_pdc_call(PDC_PAT_IO, PDC_PAT_IO_PCI_CONFIG_WRITE, | 1384 | retval = mem_pdc_call(PDC_PAT_IO, PDC_PAT_IO_PCI_CONFIG_WRITE, |
1327 | pci_addr, pci_size, val); | 1385 | pci_addr, pci_size, val); |
1328 | spin_unlock_irq(&pdc_lock); | 1386 | spin_unlock_irqrestore(&pdc_lock, flags); |
1329 | 1387 | ||
1330 | return retval; | 1388 | return retval; |
1331 | } | 1389 | } |
diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c index 9bdd0197ceb7..b39c5b9aff46 100644 --- a/arch/parisc/kernel/irq.c +++ b/arch/parisc/kernel/irq.c | |||
@@ -35,8 +35,8 @@ | |||
35 | 35 | ||
36 | #undef PARISC_IRQ_CR16_COUNTS | 36 | #undef PARISC_IRQ_CR16_COUNTS |
37 | 37 | ||
38 | extern irqreturn_t timer_interrupt(int, void *, struct pt_regs *); | 38 | extern irqreturn_t timer_interrupt(int, void *); |
39 | extern irqreturn_t ipi_interrupt(int, void *, struct pt_regs *); | 39 | extern irqreturn_t ipi_interrupt(int, void *); |
40 | 40 | ||
41 | #define EIEM_MASK(irq) (1UL<<(CPU_IRQ_MAX - irq)) | 41 | #define EIEM_MASK(irq) (1UL<<(CPU_IRQ_MAX - irq)) |
42 | 42 | ||
@@ -347,12 +347,14 @@ static inline int eirr_to_irq(unsigned long eirr) | |||
347 | /* ONLY called from entry.S:intr_extint() */ | 347 | /* ONLY called from entry.S:intr_extint() */ |
348 | void do_cpu_irq_mask(struct pt_regs *regs) | 348 | void do_cpu_irq_mask(struct pt_regs *regs) |
349 | { | 349 | { |
350 | struct pt_regs *old_regs; | ||
350 | unsigned long eirr_val; | 351 | unsigned long eirr_val; |
351 | int irq, cpu = smp_processor_id(); | 352 | int irq, cpu = smp_processor_id(); |
352 | #ifdef CONFIG_SMP | 353 | #ifdef CONFIG_SMP |
353 | cpumask_t dest; | 354 | cpumask_t dest; |
354 | #endif | 355 | #endif |
355 | 356 | ||
357 | old_regs = set_irq_regs(regs); | ||
356 | local_irq_disable(); | 358 | local_irq_disable(); |
357 | irq_enter(); | 359 | irq_enter(); |
358 | 360 | ||
@@ -375,10 +377,11 @@ void do_cpu_irq_mask(struct pt_regs *regs) | |||
375 | goto set_out; | 377 | goto set_out; |
376 | } | 378 | } |
377 | #endif | 379 | #endif |
378 | __do_IRQ(irq, regs); | 380 | __do_IRQ(irq); |
379 | 381 | ||
380 | out: | 382 | out: |
381 | irq_exit(); | 383 | irq_exit(); |
384 | set_irq_regs(old_regs); | ||
382 | return; | 385 | return; |
383 | 386 | ||
384 | set_out: | 387 | set_out: |
diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c index faad338f310e..4a23a97b06cd 100644 --- a/arch/parisc/kernel/smp.c +++ b/arch/parisc/kernel/smp.c | |||
@@ -154,7 +154,7 @@ halt_processor(void) | |||
154 | 154 | ||
155 | 155 | ||
156 | irqreturn_t | 156 | irqreturn_t |
157 | ipi_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 157 | ipi_interrupt(int irq, void *dev_id) |
158 | { | 158 | { |
159 | int this_cpu = smp_processor_id(); | 159 | int this_cpu = smp_processor_id(); |
160 | struct cpuinfo_parisc *p = &cpu_data[this_cpu]; | 160 | struct cpuinfo_parisc *p = &cpu_data[this_cpu]; |
@@ -414,19 +414,6 @@ smp_flush_tlb_all(void) | |||
414 | on_each_cpu(flush_tlb_all_local, NULL, 1, 1); | 414 | on_each_cpu(flush_tlb_all_local, NULL, 1, 1); |
415 | } | 415 | } |
416 | 416 | ||
417 | |||
418 | void | ||
419 | smp_do_timer(struct pt_regs *regs) | ||
420 | { | ||
421 | int cpu = smp_processor_id(); | ||
422 | struct cpuinfo_parisc *data = &cpu_data[cpu]; | ||
423 | |||
424 | if (!--data->prof_counter) { | ||
425 | data->prof_counter = data->prof_multiplier; | ||
426 | update_process_times(user_mode(regs)); | ||
427 | } | ||
428 | } | ||
429 | |||
430 | /* | 417 | /* |
431 | * Called by secondaries to update state and initialize CPU registers. | 418 | * Called by secondaries to update state and initialize CPU registers. |
432 | */ | 419 | */ |
diff --git a/arch/parisc/kernel/time.c b/arch/parisc/kernel/time.c index 1d58ce0e37ad..bad7d1eb62b9 100644 --- a/arch/parisc/kernel/time.c +++ b/arch/parisc/kernel/time.c | |||
@@ -34,10 +34,6 @@ | |||
34 | 34 | ||
35 | static unsigned long clocktick __read_mostly; /* timer cycles per tick */ | 35 | static unsigned long clocktick __read_mostly; /* timer cycles per tick */ |
36 | 36 | ||
37 | #ifdef CONFIG_SMP | ||
38 | extern void smp_do_timer(struct pt_regs *regs); | ||
39 | #endif | ||
40 | |||
41 | /* | 37 | /* |
42 | * We keep time on PA-RISC Linux by using the Interval Timer which is | 38 | * We keep time on PA-RISC Linux by using the Interval Timer which is |
43 | * a pair of registers; one is read-only and one is write-only; both | 39 | * a pair of registers; one is read-only and one is write-only; both |
@@ -55,21 +51,22 @@ extern void smp_do_timer(struct pt_regs *regs); | |||
55 | * held off for an arbitrarily long period of time by interrupts being | 51 | * held off for an arbitrarily long period of time by interrupts being |
56 | * disabled, so we may miss one or more ticks. | 52 | * disabled, so we may miss one or more ticks. |
57 | */ | 53 | */ |
58 | irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 54 | irqreturn_t timer_interrupt(int irq, void *dev_id) |
59 | { | 55 | { |
60 | unsigned long now; | 56 | unsigned long now; |
61 | unsigned long next_tick; | 57 | unsigned long next_tick; |
62 | unsigned long cycles_elapsed, ticks_elapsed; | 58 | unsigned long cycles_elapsed, ticks_elapsed; |
63 | unsigned long cycles_remainder; | 59 | unsigned long cycles_remainder; |
64 | unsigned int cpu = smp_processor_id(); | 60 | unsigned int cpu = smp_processor_id(); |
61 | struct cpuinfo_parisc *cpuinfo = &cpu_data[cpu]; | ||
65 | 62 | ||
66 | /* gcc can optimize for "read-only" case with a local clocktick */ | 63 | /* gcc can optimize for "read-only" case with a local clocktick */ |
67 | unsigned long cpt = clocktick; | 64 | unsigned long cpt = clocktick; |
68 | 65 | ||
69 | profile_tick(CPU_PROFILING, regs); | 66 | profile_tick(CPU_PROFILING); |
70 | 67 | ||
71 | /* Initialize next_tick to the expected tick time. */ | 68 | /* Initialize next_tick to the expected tick time. */ |
72 | next_tick = cpu_data[cpu].it_value; | 69 | next_tick = cpuinfo->it_value; |
73 | 70 | ||
74 | /* Get current interval timer. | 71 | /* Get current interval timer. |
75 | * CR16 reads as 64 bits in CPU wide mode. | 72 | * CR16 reads as 64 bits in CPU wide mode. |
@@ -120,7 +117,7 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
120 | */ | 117 | */ |
121 | next_tick = now + cycles_remainder; | 118 | next_tick = now + cycles_remainder; |
122 | 119 | ||
123 | cpu_data[cpu].it_value = next_tick; | 120 | cpuinfo->it_value = next_tick; |
124 | 121 | ||
125 | /* Skip one clocktick on purpose if we are likely to miss next_tick. | 122 | /* Skip one clocktick on purpose if we are likely to miss next_tick. |
126 | * We want to avoid the new next_tick being less than CR16. | 123 | * We want to avoid the new next_tick being less than CR16. |
@@ -131,18 +128,19 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
131 | next_tick += cpt; | 128 | next_tick += cpt; |
132 | 129 | ||
133 | /* Program the IT when to deliver the next interrupt. */ | 130 | /* Program the IT when to deliver the next interrupt. */ |
134 | /* Only bottom 32-bits of next_tick are written to cr16. */ | 131 | /* Only bottom 32-bits of next_tick are written to cr16. */ |
135 | mtctl(next_tick, 16); | 132 | mtctl(next_tick, 16); |
136 | 133 | ||
137 | 134 | ||
138 | /* Done mucking with unreliable delivery of interrupts. | 135 | /* Done mucking with unreliable delivery of interrupts. |
139 | * Go do system house keeping. | 136 | * Go do system house keeping. |
140 | */ | 137 | */ |
141 | #ifdef CONFIG_SMP | 138 | |
142 | smp_do_timer(regs); | 139 | if (!--cpuinfo->prof_counter) { |
143 | #else | 140 | cpuinfo->prof_counter = cpuinfo->prof_multiplier; |
144 | update_process_times(user_mode(regs)); | 141 | update_process_times(user_mode(get_irq_regs())); |
145 | #endif | 142 | } |
143 | |||
146 | if (cpu == 0) { | 144 | if (cpu == 0) { |
147 | write_seqlock(&xtime_lock); | 145 | write_seqlock(&xtime_lock); |
148 | do_timer(ticks_elapsed); | 146 | do_timer(ticks_elapsed); |
@@ -319,13 +317,15 @@ void __init time_init(void) | |||
319 | 317 | ||
320 | start_cpu_itimer(); /* get CPU 0 started */ | 318 | start_cpu_itimer(); /* get CPU 0 started */ |
321 | 319 | ||
322 | if(pdc_tod_read(&tod_data) == 0) { | 320 | if (pdc_tod_read(&tod_data) == 0) { |
323 | write_seqlock_irq(&xtime_lock); | 321 | unsigned long flags; |
322 | |||
323 | write_seqlock_irqsave(&xtime_lock, flags); | ||
324 | xtime.tv_sec = tod_data.tod_sec; | 324 | xtime.tv_sec = tod_data.tod_sec; |
325 | xtime.tv_nsec = tod_data.tod_usec * 1000; | 325 | xtime.tv_nsec = tod_data.tod_usec * 1000; |
326 | set_normalized_timespec(&wall_to_monotonic, | 326 | set_normalized_timespec(&wall_to_monotonic, |
327 | -xtime.tv_sec, -xtime.tv_nsec); | 327 | -xtime.tv_sec, -xtime.tv_nsec); |
328 | write_sequnlock_irq(&xtime_lock); | 328 | write_sequnlock_irqrestore(&xtime_lock, flags); |
329 | } else { | 329 | } else { |
330 | printk(KERN_ERR "Error reading tod clock\n"); | 330 | printk(KERN_ERR "Error reading tod clock\n"); |
331 | xtime.tv_sec = 0; | 331 | xtime.tv_sec = 0; |
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index 003520b56303..37ddfcab0003 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile | |||
@@ -105,10 +105,10 @@ wrapperbits := $(extra-y) $(addprefix $(obj)/,addnote hack-coff) | |||
105 | # Bits for building various flavours of zImage | 105 | # Bits for building various flavours of zImage |
106 | 106 | ||
107 | ifneq ($(CROSS32_COMPILE),) | 107 | ifneq ($(CROSS32_COMPILE),) |
108 | CROSSWRAP := -C $(CROSS32_COMPILE) | 108 | CROSSWRAP := -C "$(CROSS32_COMPILE)" |
109 | else | 109 | else |
110 | ifneq ($(CROSS_COMPILE),) | 110 | ifneq ($(CROSS_COMPILE),) |
111 | CROSSWRAP := -C $(CROSS_COMPILE) | 111 | CROSSWRAP := -C "$(CROSS_COMPILE)" |
112 | endif | 112 | endif |
113 | endif | 113 | endif |
114 | 114 | ||
@@ -151,12 +151,12 @@ $(obj)/zImage.initrd.miboot: vmlinux $(wrapperbits) | |||
151 | $(obj)/uImage: vmlinux $(wrapperbits) | 151 | $(obj)/uImage: vmlinux $(wrapperbits) |
152 | $(call cmd,wrap,uboot) | 152 | $(call cmd,wrap,uboot) |
153 | 153 | ||
154 | image-$(CONFIG_PPC_PSERIES) += zImage.pseries | 154 | image-$(CONFIG_PPC_PSERIES) += zImage.pseries |
155 | image-$(CONFIG_PPC_MAPLE) += zImage.pseries | 155 | image-$(CONFIG_PPC_MAPLE) += zImage.pseries |
156 | image-$(CONFIG_PPC_CELL) += zImage.pseries | 156 | image-$(CONFIG_PPC_IBM_CELL_BLADE) += zImage.pseries |
157 | image-$(CONFIG_PPC_CHRP) += zImage.chrp | 157 | image-$(CONFIG_PPC_CHRP) += zImage.chrp |
158 | image-$(CONFIG_PPC_PMAC) += zImage.pmac | 158 | image-$(CONFIG_PPC_PMAC) += zImage.pmac |
159 | image-$(CONFIG_DEFAULT_UIMAGE) += uImage | 159 | image-$(CONFIG_DEFAULT_UIMAGE) += uImage |
160 | 160 | ||
161 | # For 32-bit powermacs, build the COFF and miboot images | 161 | # For 32-bit powermacs, build the COFF and miboot images |
162 | # as well as the ELF images. | 162 | # as well as the ELF images. |
diff --git a/arch/powerpc/boot/dts/mpc8349emitx.dts b/arch/powerpc/boot/dts/mpc8349emitx.dts new file mode 100644 index 000000000000..27807fc45888 --- /dev/null +++ b/arch/powerpc/boot/dts/mpc8349emitx.dts | |||
@@ -0,0 +1,246 @@ | |||
1 | /* | ||
2 | * MPC8349E-mITX Device Tree Source | ||
3 | * | ||
4 | * Copyright 2006 Freescale Semiconductor Inc. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the | ||
8 | * Free Software Foundation; either version 2 of the License, or (at your | ||
9 | * option) any later version. | ||
10 | */ | ||
11 | / { | ||
12 | model = "MPC8349EMITX"; | ||
13 | compatible = "MPC834xMITX"; | ||
14 | #address-cells = <1>; | ||
15 | #size-cells = <1>; | ||
16 | |||
17 | cpus { | ||
18 | #cpus = <1>; | ||
19 | #address-cells = <1>; | ||
20 | #size-cells = <0>; | ||
21 | |||
22 | PowerPC,8349@0 { | ||
23 | device_type = "cpu"; | ||
24 | reg = <0>; | ||
25 | d-cache-line-size = <20>; | ||
26 | i-cache-line-size = <20>; | ||
27 | d-cache-size = <8000>; | ||
28 | i-cache-size = <8000>; | ||
29 | timebase-frequency = <0>; // from bootloader | ||
30 | bus-frequency = <0>; // from bootloader | ||
31 | clock-frequency = <0>; // from bootloader | ||
32 | 32-bit; | ||
33 | }; | ||
34 | }; | ||
35 | |||
36 | memory { | ||
37 | device_type = "memory"; | ||
38 | reg = <00000000 10000000>; | ||
39 | }; | ||
40 | |||
41 | soc8349@e0000000 { | ||
42 | #address-cells = <1>; | ||
43 | #size-cells = <1>; | ||
44 | #interrupt-cells = <2>; | ||
45 | device_type = "soc"; | ||
46 | ranges = <0 e0000000 00100000>; | ||
47 | reg = <e0000000 00000200>; | ||
48 | bus-frequency = <0>; // from bootloader | ||
49 | |||
50 | wdt@200 { | ||
51 | device_type = "watchdog"; | ||
52 | compatible = "mpc83xx_wdt"; | ||
53 | reg = <200 100>; | ||
54 | }; | ||
55 | |||
56 | i2c@3000 { | ||
57 | device_type = "i2c"; | ||
58 | compatible = "fsl-i2c"; | ||
59 | reg = <3000 100>; | ||
60 | interrupts = <e 8>; | ||
61 | interrupt-parent = <700>; | ||
62 | dfsrr; | ||
63 | }; | ||
64 | |||
65 | i2c@3100 { | ||
66 | device_type = "i2c"; | ||
67 | compatible = "fsl-i2c"; | ||
68 | reg = <3100 100>; | ||
69 | interrupts = <f 8>; | ||
70 | interrupt-parent = <700>; | ||
71 | dfsrr; | ||
72 | }; | ||
73 | |||
74 | spi@7000 { | ||
75 | device_type = "spi"; | ||
76 | compatible = "mpc83xx_spi"; | ||
77 | reg = <7000 1000>; | ||
78 | interrupts = <10 8>; | ||
79 | interrupt-parent = <700>; | ||
80 | mode = <0>; | ||
81 | }; | ||
82 | |||
83 | usb@22000 { | ||
84 | device_type = "usb"; | ||
85 | compatible = "fsl-usb2-mph"; | ||
86 | reg = <22000 1000>; | ||
87 | #address-cells = <1>; | ||
88 | #size-cells = <0>; | ||
89 | interrupt-parent = <700>; | ||
90 | interrupts = <27 2>; | ||
91 | phy_type = "ulpi"; | ||
92 | port1; | ||
93 | }; | ||
94 | |||
95 | usb@23000 { | ||
96 | device_type = "usb"; | ||
97 | compatible = "fsl-usb2-dr"; | ||
98 | reg = <23000 1000>; | ||
99 | #address-cells = <1>; | ||
100 | #size-cells = <0>; | ||
101 | interrupt-parent = <700>; | ||
102 | interrupts = <26 2>; | ||
103 | phy_type = "ulpi"; | ||
104 | }; | ||
105 | |||
106 | mdio@24520 { | ||
107 | device_type = "mdio"; | ||
108 | compatible = "gianfar"; | ||
109 | reg = <24520 20>; | ||
110 | #address-cells = <1>; | ||
111 | #size-cells = <0>; | ||
112 | linux,phandle = <24520>; | ||
113 | |||
114 | /* Vitesse 8201 */ | ||
115 | ethernet-phy@1c { | ||
116 | linux,phandle = <245201c>; | ||
117 | interrupt-parent = <700>; | ||
118 | interrupts = <12 2>; | ||
119 | reg = <1c>; | ||
120 | device_type = "ethernet-phy"; | ||
121 | }; | ||
122 | |||
123 | /* Vitesse 7385 */ | ||
124 | ethernet-phy@1f { | ||
125 | linux,phandle = <245201f>; | ||
126 | interrupt-parent = <700>; | ||
127 | interrupts = <12 2>; | ||
128 | reg = <1f>; | ||
129 | device_type = "ethernet-phy"; | ||
130 | }; | ||
131 | }; | ||
132 | |||
133 | ethernet@24000 { | ||
134 | device_type = "network"; | ||
135 | model = "TSEC"; | ||
136 | compatible = "gianfar"; | ||
137 | reg = <24000 1000>; | ||
138 | address = [ 00 00 00 00 00 00 ]; | ||
139 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
140 | interrupts = <20 8 21 8 22 8>; | ||
141 | interrupt-parent = <700>; | ||
142 | phy-handle = <245201c>; | ||
143 | }; | ||
144 | |||
145 | ethernet@25000 { | ||
146 | #address-cells = <1>; | ||
147 | #size-cells = <0>; | ||
148 | device_type = "network"; | ||
149 | model = "TSEC"; | ||
150 | compatible = "gianfar"; | ||
151 | reg = <25000 1000>; | ||
152 | address = [ 00 00 00 00 00 00 ]; | ||
153 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
154 | interrupts = <23 8 24 8 25 8>; | ||
155 | interrupt-parent = <700>; | ||
156 | phy-handle = <245201f>; | ||
157 | }; | ||
158 | |||
159 | serial@4500 { | ||
160 | device_type = "serial"; | ||
161 | compatible = "ns16550"; | ||
162 | reg = <4500 100>; | ||
163 | clock-frequency = <0>; // from bootloader | ||
164 | interrupts = <9 8>; | ||
165 | interrupt-parent = <700>; | ||
166 | }; | ||
167 | |||
168 | serial@4600 { | ||
169 | device_type = "serial"; | ||
170 | compatible = "ns16550"; | ||
171 | reg = <4600 100>; | ||
172 | clock-frequency = <0>; // from bootloader | ||
173 | interrupts = <a 8>; | ||
174 | interrupt-parent = <700>; | ||
175 | }; | ||
176 | |||
177 | pci@8500 { | ||
178 | interrupt-map-mask = <f800 0 0 7>; | ||
179 | interrupt-map = < | ||
180 | /* IDSEL 0x10 - SATA */ | ||
181 | 8000 0 0 1 700 16 8 /* SATA_INTA */ | ||
182 | >; | ||
183 | interrupt-parent = <700>; | ||
184 | interrupts = <42 8>; | ||
185 | bus-range = <0 0>; | ||
186 | ranges = <42000000 0 80000000 80000000 0 10000000 | ||
187 | 02000000 0 90000000 90000000 0 10000000 | ||
188 | 01000000 0 00000000 e2000000 0 01000000>; | ||
189 | clock-frequency = <3f940aa>; | ||
190 | #interrupt-cells = <1>; | ||
191 | #size-cells = <2>; | ||
192 | #address-cells = <3>; | ||
193 | reg = <8500 100>; | ||
194 | compatible = "83xx"; | ||
195 | device_type = "pci"; | ||
196 | }; | ||
197 | |||
198 | pci@8600 { | ||
199 | interrupt-map-mask = <f800 0 0 7>; | ||
200 | interrupt-map = < | ||
201 | /* IDSEL 0x0E - MiniPCI Slot */ | ||
202 | 7000 0 0 1 700 15 8 /* PCI_INTA */ | ||
203 | |||
204 | /* IDSEL 0x0F - PCI Slot */ | ||
205 | 7800 0 0 1 700 14 8 /* PCI_INTA */ | ||
206 | 7800 0 0 2 700 15 8 /* PCI_INTB */ | ||
207 | >; | ||
208 | interrupt-parent = <700>; | ||
209 | interrupts = <43 8>; | ||
210 | bus-range = <1 1>; | ||
211 | ranges = <42000000 0 a0000000 a0000000 0 10000000 | ||
212 | 02000000 0 b0000000 b0000000 0 10000000 | ||
213 | 01000000 0 00000000 e3000000 0 01000000>; | ||
214 | clock-frequency = <3f940aa>; | ||
215 | #interrupt-cells = <1>; | ||
216 | #size-cells = <2>; | ||
217 | #address-cells = <3>; | ||
218 | reg = <8600 100>; | ||
219 | compatible = "83xx"; | ||
220 | device_type = "pci"; | ||
221 | }; | ||
222 | |||
223 | crypto@30000 { | ||
224 | device_type = "crypto"; | ||
225 | model = "SEC2"; | ||
226 | compatible = "talitos"; | ||
227 | reg = <30000 10000>; | ||
228 | interrupts = <b 8>; | ||
229 | interrupt-parent = <700>; | ||
230 | num-channels = <4>; | ||
231 | channel-fifo-len = <18>; | ||
232 | exec-units-mask = <0000007e>; | ||
233 | descriptor-types-mask = <01010ebf>; | ||
234 | }; | ||
235 | |||
236 | pic@700 { | ||
237 | linux,phandle = <700>; | ||
238 | interrupt-controller; | ||
239 | #address-cells = <0>; | ||
240 | #interrupt-cells = <2>; | ||
241 | reg = <700 100>; | ||
242 | built-in; | ||
243 | device_type = "ipic"; | ||
244 | }; | ||
245 | }; | ||
246 | }; | ||
diff --git a/arch/powerpc/boot/of.c b/arch/powerpc/boot/of.c index fd99f789a37b..3a71845afc6c 100644 --- a/arch/powerpc/boot/of.c +++ b/arch/powerpc/boot/of.c | |||
@@ -176,12 +176,9 @@ static void *claim(unsigned long virt, unsigned long size, unsigned long align) | |||
176 | static void *of_try_claim(u32 size) | 176 | static void *of_try_claim(u32 size) |
177 | { | 177 | { |
178 | unsigned long addr = 0; | 178 | unsigned long addr = 0; |
179 | static u8 first_time = 1; | ||
180 | 179 | ||
181 | if (first_time) { | 180 | if (claim_base == 0) |
182 | claim_base = _ALIGN_UP((unsigned long)_end, ONE_MB); | 181 | claim_base = _ALIGN_UP((unsigned long)_end, ONE_MB); |
183 | first_time = 0; | ||
184 | } | ||
185 | 182 | ||
186 | for(; claim_base < RAM_END; claim_base += ONE_MB) { | 183 | for(; claim_base < RAM_END; claim_base += ONE_MB) { |
187 | #ifdef DEBUG | 184 | #ifdef DEBUG |
diff --git a/arch/powerpc/configs/iseries_defconfig b/arch/powerpc/configs/iseries_defconfig index d58f82f836f8..b5005506c2f8 100644 --- a/arch/powerpc/configs/iseries_defconfig +++ b/arch/powerpc/configs/iseries_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.18-rc6 | 3 | # Linux kernel version: 2.6.19-rc1 |
4 | # Sun Sep 10 10:22:57 2006 | 4 | # Fri Oct 6 13:25:04 2006 |
5 | # | 5 | # |
6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
@@ -22,6 +22,7 @@ CONFIG_ARCH_MAY_HAVE_PC_FDC=y | |||
22 | CONFIG_PPC_OF=y | 22 | CONFIG_PPC_OF=y |
23 | # CONFIG_PPC_UDBG_16550 is not set | 23 | # CONFIG_PPC_UDBG_16550 is not set |
24 | # CONFIG_GENERIC_TBSYNC is not set | 24 | # CONFIG_GENERIC_TBSYNC is not set |
25 | CONFIG_AUDIT_ARCH=y | ||
25 | # CONFIG_DEFAULT_UIMAGE is not set | 26 | # CONFIG_DEFAULT_UIMAGE is not set |
26 | 27 | ||
27 | # | 28 | # |
@@ -52,10 +53,11 @@ CONFIG_LOCALVERSION="" | |||
52 | CONFIG_LOCALVERSION_AUTO=y | 53 | CONFIG_LOCALVERSION_AUTO=y |
53 | CONFIG_SWAP=y | 54 | CONFIG_SWAP=y |
54 | CONFIG_SYSVIPC=y | 55 | CONFIG_SYSVIPC=y |
56 | # CONFIG_IPC_NS is not set | ||
55 | CONFIG_POSIX_MQUEUE=y | 57 | CONFIG_POSIX_MQUEUE=y |
56 | # CONFIG_BSD_PROCESS_ACCT is not set | 58 | # CONFIG_BSD_PROCESS_ACCT is not set |
57 | # CONFIG_TASKSTATS is not set | 59 | # CONFIG_TASKSTATS is not set |
58 | CONFIG_SYSCTL=y | 60 | # CONFIG_UTS_NS is not set |
59 | CONFIG_AUDIT=y | 61 | CONFIG_AUDIT=y |
60 | CONFIG_AUDITSYSCALL=y | 62 | CONFIG_AUDITSYSCALL=y |
61 | CONFIG_IKCONFIG=y | 63 | CONFIG_IKCONFIG=y |
@@ -64,7 +66,9 @@ CONFIG_IKCONFIG_PROC=y | |||
64 | # CONFIG_RELAY is not set | 66 | # CONFIG_RELAY is not set |
65 | CONFIG_INITRAMFS_SOURCE="" | 67 | CONFIG_INITRAMFS_SOURCE="" |
66 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 68 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
69 | CONFIG_SYSCTL=y | ||
67 | # CONFIG_EMBEDDED is not set | 70 | # CONFIG_EMBEDDED is not set |
71 | # CONFIG_SYSCTL_SYSCALL is not set | ||
68 | CONFIG_KALLSYMS=y | 72 | CONFIG_KALLSYMS=y |
69 | # CONFIG_KALLSYMS_ALL is not set | 73 | # CONFIG_KALLSYMS_ALL is not set |
70 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 74 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
@@ -73,12 +77,12 @@ CONFIG_PRINTK=y | |||
73 | CONFIG_BUG=y | 77 | CONFIG_BUG=y |
74 | CONFIG_ELF_CORE=y | 78 | CONFIG_ELF_CORE=y |
75 | CONFIG_BASE_FULL=y | 79 | CONFIG_BASE_FULL=y |
76 | CONFIG_RT_MUTEXES=y | ||
77 | CONFIG_FUTEX=y | 80 | CONFIG_FUTEX=y |
78 | CONFIG_EPOLL=y | 81 | CONFIG_EPOLL=y |
79 | CONFIG_SHMEM=y | 82 | CONFIG_SHMEM=y |
80 | CONFIG_SLAB=y | 83 | CONFIG_SLAB=y |
81 | CONFIG_VM_EVENT_COUNTERS=y | 84 | CONFIG_VM_EVENT_COUNTERS=y |
85 | CONFIG_RT_MUTEXES=y | ||
82 | # CONFIG_TINY_SHMEM is not set | 86 | # CONFIG_TINY_SHMEM is not set |
83 | CONFIG_BASE_SMALL=0 | 87 | CONFIG_BASE_SMALL=0 |
84 | # CONFIG_SLOB is not set | 88 | # CONFIG_SLOB is not set |
@@ -97,6 +101,7 @@ CONFIG_STOP_MACHINE=y | |||
97 | # | 101 | # |
98 | # Block layer | 102 | # Block layer |
99 | # | 103 | # |
104 | CONFIG_BLOCK=y | ||
100 | # CONFIG_BLK_DEV_IO_TRACE is not set | 105 | # CONFIG_BLK_DEV_IO_TRACE is not set |
101 | 106 | ||
102 | # | 107 | # |
@@ -115,13 +120,18 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
115 | # | 120 | # |
116 | # Platform support | 121 | # Platform support |
117 | # | 122 | # |
118 | # CONFIG_PPC_MULTIPLATFORM is not set | 123 | CONFIG_PPC_MULTIPLATFORM=y |
119 | CONFIG_PPC_ISERIES=y | ||
120 | # CONFIG_EMBEDDED6xx is not set | 124 | # CONFIG_EMBEDDED6xx is not set |
121 | # CONFIG_APUS is not set | 125 | # CONFIG_APUS is not set |
126 | # CONFIG_PPC_PSERIES is not set | ||
127 | CONFIG_PPC_ISERIES=y | ||
128 | # CONFIG_PPC_PMAC is not set | ||
129 | # CONFIG_PPC_MAPLE is not set | ||
130 | # CONFIG_PPC_PASEMI is not set | ||
122 | # CONFIG_PPC_CELL is not set | 131 | # CONFIG_PPC_CELL is not set |
123 | # CONFIG_PPC_CELL_NATIVE is not set | 132 | # CONFIG_PPC_CELL_NATIVE is not set |
124 | # CONFIG_UDBG_RTAS_CONSOLE is not set | 133 | # CONFIG_PPC_IBM_CELL_BLADE is not set |
134 | # CONFIG_U3_DART is not set | ||
125 | # CONFIG_PPC_RTAS is not set | 135 | # CONFIG_PPC_RTAS is not set |
126 | # CONFIG_MMIO_NVRAM is not set | 136 | # CONFIG_MMIO_NVRAM is not set |
127 | CONFIG_IBMVIO=y | 137 | CONFIG_IBMVIO=y |
@@ -147,12 +157,15 @@ CONFIG_BINFMT_ELF=y | |||
147 | CONFIG_FORCE_MAX_ZONEORDER=13 | 157 | CONFIG_FORCE_MAX_ZONEORDER=13 |
148 | CONFIG_IOMMU_VMERGE=y | 158 | CONFIG_IOMMU_VMERGE=y |
149 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | 159 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y |
160 | # CONFIG_KEXEC is not set | ||
161 | # CONFIG_CRASH_DUMP is not set | ||
150 | CONFIG_IRQ_ALL_CPUS=y | 162 | CONFIG_IRQ_ALL_CPUS=y |
151 | CONFIG_LPARCFG=y | 163 | CONFIG_LPARCFG=y |
152 | # CONFIG_NUMA is not set | 164 | # CONFIG_NUMA is not set |
153 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 165 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
154 | CONFIG_ARCH_FLATMEM_ENABLE=y | 166 | CONFIG_ARCH_FLATMEM_ENABLE=y |
155 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | 167 | CONFIG_ARCH_SPARSEMEM_ENABLE=y |
168 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
156 | CONFIG_SELECT_MEMORY_MODEL=y | 169 | CONFIG_SELECT_MEMORY_MODEL=y |
157 | CONFIG_FLATMEM_MANUAL=y | 170 | CONFIG_FLATMEM_MANUAL=y |
158 | # CONFIG_DISCONTIGMEM_MANUAL is not set | 171 | # CONFIG_DISCONTIGMEM_MANUAL is not set |
@@ -179,6 +192,7 @@ CONFIG_GENERIC_ISA_DMA=y | |||
179 | CONFIG_PCI=y | 192 | CONFIG_PCI=y |
180 | CONFIG_PCI_DOMAINS=y | 193 | CONFIG_PCI_DOMAINS=y |
181 | # CONFIG_PCIEPORTBUS is not set | 194 | # CONFIG_PCIEPORTBUS is not set |
195 | # CONFIG_PCI_MULTITHREAD_PROBE is not set | ||
182 | # CONFIG_PCI_DEBUG is not set | 196 | # CONFIG_PCI_DEBUG is not set |
183 | 197 | ||
184 | # | 198 | # |
@@ -206,6 +220,7 @@ CONFIG_PACKET=y | |||
206 | CONFIG_UNIX=y | 220 | CONFIG_UNIX=y |
207 | CONFIG_XFRM=y | 221 | CONFIG_XFRM=y |
208 | CONFIG_XFRM_USER=m | 222 | CONFIG_XFRM_USER=m |
223 | CONFIG_XFRM_SUB_POLICY=y | ||
209 | CONFIG_NET_KEY=m | 224 | CONFIG_NET_KEY=m |
210 | CONFIG_INET=y | 225 | CONFIG_INET=y |
211 | CONFIG_IP_MULTICAST=y | 226 | CONFIG_IP_MULTICAST=y |
@@ -224,10 +239,12 @@ CONFIG_INET_XFRM_TUNNEL=m | |||
224 | CONFIG_INET_TUNNEL=y | 239 | CONFIG_INET_TUNNEL=y |
225 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 240 | CONFIG_INET_XFRM_MODE_TRANSPORT=y |
226 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 241 | CONFIG_INET_XFRM_MODE_TUNNEL=y |
242 | CONFIG_INET_XFRM_MODE_BEET=m | ||
227 | CONFIG_INET_DIAG=y | 243 | CONFIG_INET_DIAG=y |
228 | CONFIG_INET_TCP_DIAG=y | 244 | CONFIG_INET_TCP_DIAG=y |
229 | # CONFIG_TCP_CONG_ADVANCED is not set | 245 | # CONFIG_TCP_CONG_ADVANCED is not set |
230 | CONFIG_TCP_CONG_BIC=y | 246 | CONFIG_TCP_CONG_CUBIC=y |
247 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
231 | 248 | ||
232 | # | 249 | # |
233 | # IP: Virtual Server Configuration | 250 | # IP: Virtual Server Configuration |
@@ -247,6 +264,7 @@ CONFIG_NETFILTER=y | |||
247 | CONFIG_NETFILTER_XTABLES=m | 264 | CONFIG_NETFILTER_XTABLES=m |
248 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 265 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
249 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 266 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
267 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | ||
250 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 268 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
251 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 269 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
252 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | 270 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m |
@@ -255,6 +273,7 @@ CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | |||
255 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | 273 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m |
256 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 274 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
257 | # CONFIG_NETFILTER_XT_MATCH_DCCP is not set | 275 | # CONFIG_NETFILTER_XT_MATCH_DCCP is not set |
276 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | ||
258 | # CONFIG_NETFILTER_XT_MATCH_ESP is not set | 277 | # CONFIG_NETFILTER_XT_MATCH_ESP is not set |
259 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 278 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
260 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 279 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
@@ -294,7 +313,6 @@ CONFIG_IP_NF_MATCH_IPRANGE=m | |||
294 | CONFIG_IP_NF_MATCH_TOS=m | 313 | CONFIG_IP_NF_MATCH_TOS=m |
295 | CONFIG_IP_NF_MATCH_RECENT=m | 314 | CONFIG_IP_NF_MATCH_RECENT=m |
296 | CONFIG_IP_NF_MATCH_ECN=m | 315 | CONFIG_IP_NF_MATCH_ECN=m |
297 | CONFIG_IP_NF_MATCH_DSCP=m | ||
298 | # CONFIG_IP_NF_MATCH_AH is not set | 316 | # CONFIG_IP_NF_MATCH_AH is not set |
299 | CONFIG_IP_NF_MATCH_TTL=m | 317 | CONFIG_IP_NF_MATCH_TTL=m |
300 | CONFIG_IP_NF_MATCH_OWNER=m | 318 | CONFIG_IP_NF_MATCH_OWNER=m |
@@ -319,7 +337,6 @@ CONFIG_IP_NF_NAT_AMANDA=m | |||
319 | CONFIG_IP_NF_MANGLE=m | 337 | CONFIG_IP_NF_MANGLE=m |
320 | CONFIG_IP_NF_TARGET_TOS=m | 338 | CONFIG_IP_NF_TARGET_TOS=m |
321 | CONFIG_IP_NF_TARGET_ECN=m | 339 | CONFIG_IP_NF_TARGET_ECN=m |
322 | CONFIG_IP_NF_TARGET_DSCP=m | ||
323 | CONFIG_IP_NF_TARGET_TTL=m | 340 | CONFIG_IP_NF_TARGET_TTL=m |
324 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 341 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
325 | CONFIG_IP_NF_RAW=m | 342 | CONFIG_IP_NF_RAW=m |
@@ -351,7 +368,6 @@ CONFIG_LLC=y | |||
351 | # CONFIG_ATALK is not set | 368 | # CONFIG_ATALK is not set |
352 | # CONFIG_X25 is not set | 369 | # CONFIG_X25 is not set |
353 | # CONFIG_LAPB is not set | 370 | # CONFIG_LAPB is not set |
354 | # CONFIG_NET_DIVERT is not set | ||
355 | # CONFIG_ECONET is not set | 371 | # CONFIG_ECONET is not set |
356 | # CONFIG_WAN_ROUTER is not set | 372 | # CONFIG_WAN_ROUTER is not set |
357 | 373 | ||
@@ -433,6 +449,7 @@ CONFIG_BLK_DEV_INITRD=y | |||
433 | # | 449 | # |
434 | # CONFIG_RAID_ATTRS is not set | 450 | # CONFIG_RAID_ATTRS is not set |
435 | CONFIG_SCSI=y | 451 | CONFIG_SCSI=y |
452 | CONFIG_SCSI_NETLINK=y | ||
436 | CONFIG_SCSI_PROC_FS=y | 453 | CONFIG_SCSI_PROC_FS=y |
437 | 454 | ||
438 | # | 455 | # |
@@ -454,12 +471,14 @@ CONFIG_SCSI_CONSTANTS=y | |||
454 | # CONFIG_SCSI_LOGGING is not set | 471 | # CONFIG_SCSI_LOGGING is not set |
455 | 472 | ||
456 | # | 473 | # |
457 | # SCSI Transport Attributes | 474 | # SCSI Transports |
458 | # | 475 | # |
459 | CONFIG_SCSI_SPI_ATTRS=y | 476 | CONFIG_SCSI_SPI_ATTRS=y |
460 | CONFIG_SCSI_FC_ATTRS=y | 477 | CONFIG_SCSI_FC_ATTRS=y |
461 | # CONFIG_SCSI_ISCSI_ATTRS is not set | 478 | # CONFIG_SCSI_ISCSI_ATTRS is not set |
462 | # CONFIG_SCSI_SAS_ATTRS is not set | 479 | CONFIG_SCSI_SAS_ATTRS=m |
480 | CONFIG_SCSI_SAS_LIBSAS=m | ||
481 | CONFIG_SCSI_SAS_LIBSAS_DEBUG=y | ||
463 | 482 | ||
464 | # | 483 | # |
465 | # SCSI low-level drivers | 484 | # SCSI low-level drivers |
@@ -472,10 +491,11 @@ CONFIG_SCSI_FC_ATTRS=y | |||
472 | # CONFIG_SCSI_AIC7XXX is not set | 491 | # CONFIG_SCSI_AIC7XXX is not set |
473 | # CONFIG_SCSI_AIC7XXX_OLD is not set | 492 | # CONFIG_SCSI_AIC7XXX_OLD is not set |
474 | # CONFIG_SCSI_AIC79XX is not set | 493 | # CONFIG_SCSI_AIC79XX is not set |
494 | # CONFIG_SCSI_AIC94XX is not set | ||
495 | # CONFIG_SCSI_ARCMSR is not set | ||
475 | # CONFIG_MEGARAID_NEWGEN is not set | 496 | # CONFIG_MEGARAID_NEWGEN is not set |
476 | # CONFIG_MEGARAID_LEGACY is not set | 497 | # CONFIG_MEGARAID_LEGACY is not set |
477 | # CONFIG_MEGARAID_SAS is not set | 498 | # CONFIG_MEGARAID_SAS is not set |
478 | # CONFIG_ATA is not set | ||
479 | # CONFIG_SCSI_HPTIOP is not set | 499 | # CONFIG_SCSI_HPTIOP is not set |
480 | # CONFIG_SCSI_BUSLOGIC is not set | 500 | # CONFIG_SCSI_BUSLOGIC is not set |
481 | # CONFIG_SCSI_DMX3191D is not set | 501 | # CONFIG_SCSI_DMX3191D is not set |
@@ -486,16 +506,22 @@ CONFIG_SCSI_FC_ATTRS=y | |||
486 | CONFIG_SCSI_IBMVSCSI=m | 506 | CONFIG_SCSI_IBMVSCSI=m |
487 | # CONFIG_SCSI_INITIO is not set | 507 | # CONFIG_SCSI_INITIO is not set |
488 | # CONFIG_SCSI_INIA100 is not set | 508 | # CONFIG_SCSI_INIA100 is not set |
509 | # CONFIG_SCSI_STEX is not set | ||
489 | # CONFIG_SCSI_SYM53C8XX_2 is not set | 510 | # CONFIG_SCSI_SYM53C8XX_2 is not set |
490 | # CONFIG_SCSI_IPR is not set | ||
491 | # CONFIG_SCSI_QLOGIC_1280 is not set | 511 | # CONFIG_SCSI_QLOGIC_1280 is not set |
492 | # CONFIG_SCSI_QLA_FC is not set | 512 | # CONFIG_SCSI_QLA_FC is not set |
513 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
493 | # CONFIG_SCSI_LPFC is not set | 514 | # CONFIG_SCSI_LPFC is not set |
494 | # CONFIG_SCSI_DC395x is not set | 515 | # CONFIG_SCSI_DC395x is not set |
495 | # CONFIG_SCSI_DC390T is not set | 516 | # CONFIG_SCSI_DC390T is not set |
496 | # CONFIG_SCSI_DEBUG is not set | 517 | # CONFIG_SCSI_DEBUG is not set |
497 | 518 | ||
498 | # | 519 | # |
520 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
521 | # | ||
522 | # CONFIG_ATA is not set | ||
523 | |||
524 | # | ||
499 | # Multi-device support (RAID and LVM) | 525 | # Multi-device support (RAID and LVM) |
500 | # | 526 | # |
501 | CONFIG_MD=y | 527 | CONFIG_MD=y |
@@ -508,6 +534,7 @@ CONFIG_MD_RAID10=m | |||
508 | CONFIG_MD_MULTIPATH=m | 534 | CONFIG_MD_MULTIPATH=m |
509 | CONFIG_MD_FAULTY=m | 535 | CONFIG_MD_FAULTY=m |
510 | CONFIG_BLK_DEV_DM=y | 536 | CONFIG_BLK_DEV_DM=y |
537 | # CONFIG_DM_DEBUG is not set | ||
511 | CONFIG_DM_CRYPT=m | 538 | CONFIG_DM_CRYPT=m |
512 | CONFIG_DM_SNAPSHOT=m | 539 | CONFIG_DM_SNAPSHOT=m |
513 | CONFIG_DM_MIRROR=m | 540 | CONFIG_DM_MIRROR=m |
@@ -573,6 +600,7 @@ CONFIG_MII=y | |||
573 | # CONFIG_HP100 is not set | 600 | # CONFIG_HP100 is not set |
574 | CONFIG_NET_PCI=y | 601 | CONFIG_NET_PCI=y |
575 | CONFIG_PCNET32=y | 602 | CONFIG_PCNET32=y |
603 | CONFIG_PCNET32_NAPI=y | ||
576 | # CONFIG_AMD8111_ETH is not set | 604 | # CONFIG_AMD8111_ETH is not set |
577 | # CONFIG_ADAPTEC_STARFIRE is not set | 605 | # CONFIG_ADAPTEC_STARFIRE is not set |
578 | # CONFIG_B44 is not set | 606 | # CONFIG_B44 is not set |
@@ -610,6 +638,7 @@ CONFIG_E1000=m | |||
610 | # CONFIG_VIA_VELOCITY is not set | 638 | # CONFIG_VIA_VELOCITY is not set |
611 | # CONFIG_TIGON3 is not set | 639 | # CONFIG_TIGON3 is not set |
612 | # CONFIG_BNX2 is not set | 640 | # CONFIG_BNX2 is not set |
641 | # CONFIG_QLA3XXX is not set | ||
613 | 642 | ||
614 | # | 643 | # |
615 | # Ethernet (10000 Mbit) | 644 | # Ethernet (10000 Mbit) |
@@ -649,6 +678,7 @@ CONFIG_PPP_BSDCOMP=m | |||
649 | # CONFIG_PPP_MPPE is not set | 678 | # CONFIG_PPP_MPPE is not set |
650 | CONFIG_PPPOE=m | 679 | CONFIG_PPPOE=m |
651 | # CONFIG_SLIP is not set | 680 | # CONFIG_SLIP is not set |
681 | CONFIG_SLHC=m | ||
652 | # CONFIG_NET_FC is not set | 682 | # CONFIG_NET_FC is not set |
653 | # CONFIG_SHAPER is not set | 683 | # CONFIG_SHAPER is not set |
654 | CONFIG_NETCONSOLE=y | 684 | CONFIG_NETCONSOLE=y |
@@ -671,6 +701,7 @@ CONFIG_NET_POLL_CONTROLLER=y | |||
671 | # Input device support | 701 | # Input device support |
672 | # | 702 | # |
673 | CONFIG_INPUT=y | 703 | CONFIG_INPUT=y |
704 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
674 | 705 | ||
675 | # | 706 | # |
676 | # Userland interfaces | 707 | # Userland interfaces |
@@ -774,12 +805,12 @@ CONFIG_MAX_RAW_DEVS=256 | |||
774 | # | 805 | # |
775 | # Misc devices | 806 | # Misc devices |
776 | # | 807 | # |
808 | # CONFIG_TIFM_CORE is not set | ||
777 | 809 | ||
778 | # | 810 | # |
779 | # Multimedia devices | 811 | # Multimedia devices |
780 | # | 812 | # |
781 | # CONFIG_VIDEO_DEV is not set | 813 | # CONFIG_VIDEO_DEV is not set |
782 | CONFIG_VIDEO_V4L2=y | ||
783 | 814 | ||
784 | # | 815 | # |
785 | # Digital Video Broadcasting Devices | 816 | # Digital Video Broadcasting Devices |
@@ -893,6 +924,9 @@ CONFIG_XFS_FS=m | |||
893 | CONFIG_XFS_SECURITY=y | 924 | CONFIG_XFS_SECURITY=y |
894 | CONFIG_XFS_POSIX_ACL=y | 925 | CONFIG_XFS_POSIX_ACL=y |
895 | # CONFIG_XFS_RT is not set | 926 | # CONFIG_XFS_RT is not set |
927 | CONFIG_GFS2_FS=m | ||
928 | CONFIG_GFS2_FS_LOCKING_NOLOCK=m | ||
929 | CONFIG_GFS2_FS_LOCKING_DLM=m | ||
896 | # CONFIG_OCFS2_FS is not set | 930 | # CONFIG_OCFS2_FS is not set |
897 | # CONFIG_MINIX_FS is not set | 931 | # CONFIG_MINIX_FS is not set |
898 | # CONFIG_ROMFS_FS is not set | 932 | # CONFIG_ROMFS_FS is not set |
@@ -929,12 +963,14 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
929 | # | 963 | # |
930 | CONFIG_PROC_FS=y | 964 | CONFIG_PROC_FS=y |
931 | CONFIG_PROC_KCORE=y | 965 | CONFIG_PROC_KCORE=y |
966 | CONFIG_PROC_SYSCTL=y | ||
932 | CONFIG_SYSFS=y | 967 | CONFIG_SYSFS=y |
933 | CONFIG_TMPFS=y | 968 | CONFIG_TMPFS=y |
969 | CONFIG_TMPFS_POSIX_ACL=y | ||
934 | # CONFIG_HUGETLBFS is not set | 970 | # CONFIG_HUGETLBFS is not set |
935 | # CONFIG_HUGETLB_PAGE is not set | 971 | # CONFIG_HUGETLB_PAGE is not set |
936 | CONFIG_RAMFS=y | 972 | CONFIG_RAMFS=y |
937 | # CONFIG_CONFIGFS_FS is not set | 973 | CONFIG_CONFIGFS_FS=m |
938 | 974 | ||
939 | # | 975 | # |
940 | # Miscellaneous filesystems | 976 | # Miscellaneous filesystems |
@@ -988,6 +1024,7 @@ CONFIG_CIFS_POSIX=y | |||
988 | # CONFIG_CODA_FS is not set | 1024 | # CONFIG_CODA_FS is not set |
989 | # CONFIG_AFS_FS is not set | 1025 | # CONFIG_AFS_FS is not set |
990 | # CONFIG_9P_FS is not set | 1026 | # CONFIG_9P_FS is not set |
1027 | CONFIG_GENERIC_ACL=y | ||
991 | 1028 | ||
992 | # | 1029 | # |
993 | # Partition Types | 1030 | # Partition Types |
@@ -1040,6 +1077,12 @@ CONFIG_NLS_ISO8859_1=y | |||
1040 | # CONFIG_NLS_UTF8 is not set | 1077 | # CONFIG_NLS_UTF8 is not set |
1041 | 1078 | ||
1042 | # | 1079 | # |
1080 | # Distributed Lock Manager | ||
1081 | # | ||
1082 | CONFIG_DLM=m | ||
1083 | # CONFIG_DLM_DEBUG is not set | ||
1084 | |||
1085 | # | ||
1043 | # iSeries device drivers | 1086 | # iSeries device drivers |
1044 | # | 1087 | # |
1045 | CONFIG_VIOCONS=y | 1088 | CONFIG_VIOCONS=y |
@@ -1073,6 +1116,7 @@ CONFIG_PLIST=y | |||
1073 | # Kernel hacking | 1116 | # Kernel hacking |
1074 | # | 1117 | # |
1075 | # CONFIG_PRINTK_TIME is not set | 1118 | # CONFIG_PRINTK_TIME is not set |
1119 | CONFIG_ENABLE_MUST_CHECK=y | ||
1076 | CONFIG_MAGIC_SYSRQ=y | 1120 | CONFIG_MAGIC_SYSRQ=y |
1077 | # CONFIG_UNUSED_SYMBOLS is not set | 1121 | # CONFIG_UNUSED_SYMBOLS is not set |
1078 | CONFIG_DEBUG_KERNEL=y | 1122 | CONFIG_DEBUG_KERNEL=y |
@@ -1091,6 +1135,7 @@ CONFIG_DETECT_SOFTLOCKUP=y | |||
1091 | # CONFIG_DEBUG_INFO is not set | 1135 | # CONFIG_DEBUG_INFO is not set |
1092 | CONFIG_DEBUG_FS=y | 1136 | CONFIG_DEBUG_FS=y |
1093 | # CONFIG_DEBUG_VM is not set | 1137 | # CONFIG_DEBUG_VM is not set |
1138 | # CONFIG_DEBUG_LIST is not set | ||
1094 | # CONFIG_FORCED_INLINING is not set | 1139 | # CONFIG_FORCED_INLINING is not set |
1095 | # CONFIG_RCU_TORTURE_TEST is not set | 1140 | # CONFIG_RCU_TORTURE_TEST is not set |
1096 | CONFIG_DEBUG_STACKOVERFLOW=y | 1141 | CONFIG_DEBUG_STACKOVERFLOW=y |
@@ -1109,6 +1154,10 @@ CONFIG_IRQSTACKS=y | |||
1109 | # Cryptographic options | 1154 | # Cryptographic options |
1110 | # | 1155 | # |
1111 | CONFIG_CRYPTO=y | 1156 | CONFIG_CRYPTO=y |
1157 | CONFIG_CRYPTO_ALGAPI=y | ||
1158 | CONFIG_CRYPTO_BLKCIPHER=m | ||
1159 | CONFIG_CRYPTO_HASH=y | ||
1160 | CONFIG_CRYPTO_MANAGER=m | ||
1112 | CONFIG_CRYPTO_HMAC=y | 1161 | CONFIG_CRYPTO_HMAC=y |
1113 | CONFIG_CRYPTO_NULL=m | 1162 | CONFIG_CRYPTO_NULL=m |
1114 | CONFIG_CRYPTO_MD4=m | 1163 | CONFIG_CRYPTO_MD4=m |
@@ -1118,9 +1167,12 @@ CONFIG_CRYPTO_SHA256=m | |||
1118 | CONFIG_CRYPTO_SHA512=m | 1167 | CONFIG_CRYPTO_SHA512=m |
1119 | CONFIG_CRYPTO_WP512=m | 1168 | CONFIG_CRYPTO_WP512=m |
1120 | CONFIG_CRYPTO_TGR192=m | 1169 | CONFIG_CRYPTO_TGR192=m |
1170 | CONFIG_CRYPTO_ECB=m | ||
1171 | CONFIG_CRYPTO_CBC=m | ||
1121 | CONFIG_CRYPTO_DES=y | 1172 | CONFIG_CRYPTO_DES=y |
1122 | CONFIG_CRYPTO_BLOWFISH=m | 1173 | CONFIG_CRYPTO_BLOWFISH=m |
1123 | CONFIG_CRYPTO_TWOFISH=m | 1174 | CONFIG_CRYPTO_TWOFISH=m |
1175 | CONFIG_CRYPTO_TWOFISH_COMMON=m | ||
1124 | CONFIG_CRYPTO_SERPENT=m | 1176 | CONFIG_CRYPTO_SERPENT=m |
1125 | CONFIG_CRYPTO_AES=m | 1177 | CONFIG_CRYPTO_AES=m |
1126 | CONFIG_CRYPTO_CAST5=m | 1178 | CONFIG_CRYPTO_CAST5=m |
diff --git a/arch/powerpc/configs/maple_defconfig b/arch/powerpc/configs/maple_defconfig index 62ba66091a13..ae96a5b2f00d 100644 --- a/arch/powerpc/configs/maple_defconfig +++ b/arch/powerpc/configs/maple_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.18-rc6 | 3 | # Linux kernel version: 2.6.18 |
4 | # Sun Sep 10 10:24:55 2006 | 4 | # Mon Oct 9 11:59:34 2006 |
5 | # | 5 | # |
6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
@@ -22,6 +22,7 @@ CONFIG_ARCH_MAY_HAVE_PC_FDC=y | |||
22 | CONFIG_PPC_OF=y | 22 | CONFIG_PPC_OF=y |
23 | CONFIG_PPC_UDBG_16550=y | 23 | CONFIG_PPC_UDBG_16550=y |
24 | CONFIG_GENERIC_TBSYNC=y | 24 | CONFIG_GENERIC_TBSYNC=y |
25 | CONFIG_AUDIT_ARCH=y | ||
25 | # CONFIG_DEFAULT_UIMAGE is not set | 26 | # CONFIG_DEFAULT_UIMAGE is not set |
26 | 27 | ||
27 | # | 28 | # |
@@ -34,7 +35,7 @@ CONFIG_PPC_FPU=y | |||
34 | CONFIG_PPC_STD_MMU=y | 35 | CONFIG_PPC_STD_MMU=y |
35 | CONFIG_VIRT_CPU_ACCOUNTING=y | 36 | CONFIG_VIRT_CPU_ACCOUNTING=y |
36 | CONFIG_SMP=y | 37 | CONFIG_SMP=y |
37 | CONFIG_NR_CPUS=2 | 38 | CONFIG_NR_CPUS=4 |
38 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 39 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
39 | 40 | ||
40 | # | 41 | # |
@@ -51,10 +52,11 @@ CONFIG_LOCALVERSION="" | |||
51 | CONFIG_LOCALVERSION_AUTO=y | 52 | CONFIG_LOCALVERSION_AUTO=y |
52 | CONFIG_SWAP=y | 53 | CONFIG_SWAP=y |
53 | CONFIG_SYSVIPC=y | 54 | CONFIG_SYSVIPC=y |
55 | # CONFIG_IPC_NS is not set | ||
54 | CONFIG_POSIX_MQUEUE=y | 56 | CONFIG_POSIX_MQUEUE=y |
55 | # CONFIG_BSD_PROCESS_ACCT is not set | 57 | # CONFIG_BSD_PROCESS_ACCT is not set |
56 | # CONFIG_TASKSTATS is not set | 58 | # CONFIG_TASKSTATS is not set |
57 | CONFIG_SYSCTL=y | 59 | # CONFIG_UTS_NS is not set |
58 | # CONFIG_AUDIT is not set | 60 | # CONFIG_AUDIT is not set |
59 | CONFIG_IKCONFIG=y | 61 | CONFIG_IKCONFIG=y |
60 | CONFIG_IKCONFIG_PROC=y | 62 | CONFIG_IKCONFIG_PROC=y |
@@ -62,7 +64,9 @@ CONFIG_IKCONFIG_PROC=y | |||
62 | # CONFIG_RELAY is not set | 64 | # CONFIG_RELAY is not set |
63 | CONFIG_INITRAMFS_SOURCE="" | 65 | CONFIG_INITRAMFS_SOURCE="" |
64 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 66 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
67 | CONFIG_SYSCTL=y | ||
65 | # CONFIG_EMBEDDED is not set | 68 | # CONFIG_EMBEDDED is not set |
69 | # CONFIG_SYSCTL_SYSCALL is not set | ||
66 | CONFIG_KALLSYMS=y | 70 | CONFIG_KALLSYMS=y |
67 | CONFIG_KALLSYMS_ALL=y | 71 | CONFIG_KALLSYMS_ALL=y |
68 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 72 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
@@ -71,12 +75,12 @@ CONFIG_PRINTK=y | |||
71 | CONFIG_BUG=y | 75 | CONFIG_BUG=y |
72 | CONFIG_ELF_CORE=y | 76 | CONFIG_ELF_CORE=y |
73 | CONFIG_BASE_FULL=y | 77 | CONFIG_BASE_FULL=y |
74 | CONFIG_RT_MUTEXES=y | ||
75 | CONFIG_FUTEX=y | 78 | CONFIG_FUTEX=y |
76 | CONFIG_EPOLL=y | 79 | CONFIG_EPOLL=y |
77 | CONFIG_SHMEM=y | 80 | CONFIG_SHMEM=y |
78 | CONFIG_SLAB=y | 81 | CONFIG_SLAB=y |
79 | CONFIG_VM_EVENT_COUNTERS=y | 82 | CONFIG_VM_EVENT_COUNTERS=y |
83 | CONFIG_RT_MUTEXES=y | ||
80 | # CONFIG_TINY_SHMEM is not set | 84 | # CONFIG_TINY_SHMEM is not set |
81 | CONFIG_BASE_SMALL=0 | 85 | CONFIG_BASE_SMALL=0 |
82 | # CONFIG_SLOB is not set | 86 | # CONFIG_SLOB is not set |
@@ -95,6 +99,7 @@ CONFIG_STOP_MACHINE=y | |||
95 | # | 99 | # |
96 | # Block layer | 100 | # Block layer |
97 | # | 101 | # |
102 | CONFIG_BLOCK=y | ||
98 | # CONFIG_BLK_DEV_IO_TRACE is not set | 103 | # CONFIG_BLK_DEV_IO_TRACE is not set |
99 | 104 | ||
100 | # | 105 | # |
@@ -114,16 +119,16 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
114 | # Platform support | 119 | # Platform support |
115 | # | 120 | # |
116 | CONFIG_PPC_MULTIPLATFORM=y | 121 | CONFIG_PPC_MULTIPLATFORM=y |
117 | # CONFIG_PPC_ISERIES is not set | ||
118 | # CONFIG_EMBEDDED6xx is not set | 122 | # CONFIG_EMBEDDED6xx is not set |
119 | # CONFIG_APUS is not set | 123 | # CONFIG_APUS is not set |
120 | # CONFIG_PPC_PSERIES is not set | 124 | # CONFIG_PPC_PSERIES is not set |
125 | # CONFIG_PPC_ISERIES is not set | ||
121 | # CONFIG_PPC_PMAC is not set | 126 | # CONFIG_PPC_PMAC is not set |
122 | CONFIG_PPC_MAPLE=y | 127 | CONFIG_PPC_MAPLE=y |
128 | # CONFIG_PPC_PASEMI is not set | ||
123 | # CONFIG_PPC_CELL is not set | 129 | # CONFIG_PPC_CELL is not set |
124 | # CONFIG_PPC_CELL_NATIVE is not set | 130 | # CONFIG_PPC_CELL_NATIVE is not set |
125 | # CONFIG_PPC_IBM_CELL_BLADE is not set | 131 | # CONFIG_PPC_IBM_CELL_BLADE is not set |
126 | # CONFIG_UDBG_RTAS_CONSOLE is not set | ||
127 | CONFIG_U3_DART=y | 132 | CONFIG_U3_DART=y |
128 | # CONFIG_PPC_RTAS is not set | 133 | # CONFIG_PPC_RTAS is not set |
129 | # CONFIG_MMIO_NVRAM is not set | 134 | # CONFIG_MMIO_NVRAM is not set |
@@ -157,6 +162,7 @@ CONFIG_IRQ_ALL_CPUS=y | |||
157 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 162 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
158 | CONFIG_ARCH_FLATMEM_ENABLE=y | 163 | CONFIG_ARCH_FLATMEM_ENABLE=y |
159 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | 164 | CONFIG_ARCH_SPARSEMEM_ENABLE=y |
165 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
160 | CONFIG_SELECT_MEMORY_MODEL=y | 166 | CONFIG_SELECT_MEMORY_MODEL=y |
161 | CONFIG_FLATMEM_MANUAL=y | 167 | CONFIG_FLATMEM_MANUAL=y |
162 | # CONFIG_DISCONTIGMEM_MANUAL is not set | 168 | # CONFIG_DISCONTIGMEM_MANUAL is not set |
@@ -184,6 +190,7 @@ CONFIG_GENERIC_ISA_DMA=y | |||
184 | CONFIG_PCI=y | 190 | CONFIG_PCI=y |
185 | CONFIG_PCI_DOMAINS=y | 191 | CONFIG_PCI_DOMAINS=y |
186 | # CONFIG_PCIEPORTBUS is not set | 192 | # CONFIG_PCIEPORTBUS is not set |
193 | # CONFIG_PCI_MULTITHREAD_PROBE is not set | ||
187 | # CONFIG_PCI_DEBUG is not set | 194 | # CONFIG_PCI_DEBUG is not set |
188 | 195 | ||
189 | # | 196 | # |
@@ -211,6 +218,7 @@ CONFIG_PACKET_MMAP=y | |||
211 | CONFIG_UNIX=y | 218 | CONFIG_UNIX=y |
212 | CONFIG_XFRM=y | 219 | CONFIG_XFRM=y |
213 | CONFIG_XFRM_USER=m | 220 | CONFIG_XFRM_USER=m |
221 | # CONFIG_XFRM_SUB_POLICY is not set | ||
214 | # CONFIG_NET_KEY is not set | 222 | # CONFIG_NET_KEY is not set |
215 | CONFIG_INET=y | 223 | CONFIG_INET=y |
216 | CONFIG_IP_MULTICAST=y | 224 | CONFIG_IP_MULTICAST=y |
@@ -232,10 +240,12 @@ CONFIG_IP_PNP_DHCP=y | |||
232 | # CONFIG_INET_TUNNEL is not set | 240 | # CONFIG_INET_TUNNEL is not set |
233 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 241 | CONFIG_INET_XFRM_MODE_TRANSPORT=y |
234 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 242 | CONFIG_INET_XFRM_MODE_TUNNEL=y |
243 | CONFIG_INET_XFRM_MODE_BEET=y | ||
235 | CONFIG_INET_DIAG=y | 244 | CONFIG_INET_DIAG=y |
236 | CONFIG_INET_TCP_DIAG=y | 245 | CONFIG_INET_TCP_DIAG=y |
237 | # CONFIG_TCP_CONG_ADVANCED is not set | 246 | # CONFIG_TCP_CONG_ADVANCED is not set |
238 | CONFIG_TCP_CONG_BIC=y | 247 | CONFIG_TCP_CONG_CUBIC=y |
248 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
239 | # CONFIG_IPV6 is not set | 249 | # CONFIG_IPV6 is not set |
240 | # CONFIG_INET6_XFRM_TUNNEL is not set | 250 | # CONFIG_INET6_XFRM_TUNNEL is not set |
241 | # CONFIG_INET6_TUNNEL is not set | 251 | # CONFIG_INET6_TUNNEL is not set |
@@ -265,7 +275,6 @@ CONFIG_TCP_CONG_BIC=y | |||
265 | # CONFIG_ATALK is not set | 275 | # CONFIG_ATALK is not set |
266 | # CONFIG_X25 is not set | 276 | # CONFIG_X25 is not set |
267 | # CONFIG_LAPB is not set | 277 | # CONFIG_LAPB is not set |
268 | # CONFIG_NET_DIVERT is not set | ||
269 | # CONFIG_ECONET is not set | 278 | # CONFIG_ECONET is not set |
270 | # CONFIG_WAN_ROUTER is not set | 279 | # CONFIG_WAN_ROUTER is not set |
271 | 280 | ||
@@ -377,6 +386,7 @@ CONFIG_BLK_DEV_AMD74XX=y | |||
377 | # CONFIG_BLK_DEV_CS5530 is not set | 386 | # CONFIG_BLK_DEV_CS5530 is not set |
378 | # CONFIG_BLK_DEV_HPT34X is not set | 387 | # CONFIG_BLK_DEV_HPT34X is not set |
379 | # CONFIG_BLK_DEV_HPT366 is not set | 388 | # CONFIG_BLK_DEV_HPT366 is not set |
389 | # CONFIG_BLK_DEV_JMICRON is not set | ||
380 | # CONFIG_BLK_DEV_SC1200 is not set | 390 | # CONFIG_BLK_DEV_SC1200 is not set |
381 | # CONFIG_BLK_DEV_PIIX is not set | 391 | # CONFIG_BLK_DEV_PIIX is not set |
382 | # CONFIG_BLK_DEV_IT821X is not set | 392 | # CONFIG_BLK_DEV_IT821X is not set |
@@ -399,6 +409,12 @@ CONFIG_IDEDMA_AUTO=y | |||
399 | # | 409 | # |
400 | # CONFIG_RAID_ATTRS is not set | 410 | # CONFIG_RAID_ATTRS is not set |
401 | # CONFIG_SCSI is not set | 411 | # CONFIG_SCSI is not set |
412 | # CONFIG_SCSI_NETLINK is not set | ||
413 | |||
414 | # | ||
415 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
416 | # | ||
417 | # CONFIG_ATA is not set | ||
402 | 418 | ||
403 | # | 419 | # |
404 | # Multi-device support (RAID and LVM) | 420 | # Multi-device support (RAID and LVM) |
@@ -498,7 +514,7 @@ CONFIG_E1000=y | |||
498 | # CONFIG_VIA_VELOCITY is not set | 514 | # CONFIG_VIA_VELOCITY is not set |
499 | CONFIG_TIGON3=y | 515 | CONFIG_TIGON3=y |
500 | # CONFIG_BNX2 is not set | 516 | # CONFIG_BNX2 is not set |
501 | # CONFIG_MV643XX_ETH is not set | 517 | # CONFIG_QLA3XXX is not set |
502 | 518 | ||
503 | # | 519 | # |
504 | # Ethernet (10000 Mbit) | 520 | # Ethernet (10000 Mbit) |
@@ -545,6 +561,7 @@ CONFIG_TIGON3=y | |||
545 | # Input device support | 561 | # Input device support |
546 | # | 562 | # |
547 | CONFIG_INPUT=y | 563 | CONFIG_INPUT=y |
564 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
548 | 565 | ||
549 | # | 566 | # |
550 | # Userland interfaces | 567 | # Userland interfaces |
@@ -704,6 +721,7 @@ CONFIG_I2C_AMD8111=y | |||
704 | # | 721 | # |
705 | # Misc devices | 722 | # Misc devices |
706 | # | 723 | # |
724 | # CONFIG_TIFM_CORE is not set | ||
707 | 725 | ||
708 | # | 726 | # |
709 | # Multimedia devices | 727 | # Multimedia devices |
@@ -779,7 +797,6 @@ CONFIG_USB_UHCI_HCD=y | |||
779 | # | 797 | # |
780 | # may also be needed; see USB_STORAGE Help for more information | 798 | # may also be needed; see USB_STORAGE Help for more information |
781 | # | 799 | # |
782 | # CONFIG_USB_STORAGE is not set | ||
783 | # CONFIG_USB_LIBUSUAL is not set | 800 | # CONFIG_USB_LIBUSUAL is not set |
784 | 801 | ||
785 | # | 802 | # |
@@ -802,6 +819,7 @@ CONFIG_USB_HIDINPUT=y | |||
802 | # CONFIG_USB_ATI_REMOTE2 is not set | 819 | # CONFIG_USB_ATI_REMOTE2 is not set |
803 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 820 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
804 | # CONFIG_USB_APPLETOUCH is not set | 821 | # CONFIG_USB_APPLETOUCH is not set |
822 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
805 | 823 | ||
806 | # | 824 | # |
807 | # USB Imaging devices | 825 | # USB Imaging devices |
@@ -828,6 +846,7 @@ CONFIG_USB_MON=y | |||
828 | CONFIG_USB_SERIAL=y | 846 | CONFIG_USB_SERIAL=y |
829 | # CONFIG_USB_SERIAL_CONSOLE is not set | 847 | # CONFIG_USB_SERIAL_CONSOLE is not set |
830 | CONFIG_USB_SERIAL_GENERIC=y | 848 | CONFIG_USB_SERIAL_GENERIC=y |
849 | # CONFIG_USB_SERIAL_AIRCABLE is not set | ||
831 | # CONFIG_USB_SERIAL_AIRPRIME is not set | 850 | # CONFIG_USB_SERIAL_AIRPRIME is not set |
832 | # CONFIG_USB_SERIAL_ARK3116 is not set | 851 | # CONFIG_USB_SERIAL_ARK3116 is not set |
833 | # CONFIG_USB_SERIAL_BELKIN is not set | 852 | # CONFIG_USB_SERIAL_BELKIN is not set |
@@ -862,6 +881,7 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y | |||
862 | # CONFIG_USB_SERIAL_KLSI is not set | 881 | # CONFIG_USB_SERIAL_KLSI is not set |
863 | # CONFIG_USB_SERIAL_KOBIL_SCT is not set | 882 | # CONFIG_USB_SERIAL_KOBIL_SCT is not set |
864 | # CONFIG_USB_SERIAL_MCT_U232 is not set | 883 | # CONFIG_USB_SERIAL_MCT_U232 is not set |
884 | # CONFIG_USB_SERIAL_MOS7840 is not set | ||
865 | # CONFIG_USB_SERIAL_NAVMAN is not set | 885 | # CONFIG_USB_SERIAL_NAVMAN is not set |
866 | # CONFIG_USB_SERIAL_PL2303 is not set | 886 | # CONFIG_USB_SERIAL_PL2303 is not set |
867 | # CONFIG_USB_SERIAL_HP4X is not set | 887 | # CONFIG_USB_SERIAL_HP4X is not set |
@@ -879,6 +899,7 @@ CONFIG_USB_EZUSB=y | |||
879 | # | 899 | # |
880 | # CONFIG_USB_EMI62 is not set | 900 | # CONFIG_USB_EMI62 is not set |
881 | # CONFIG_USB_EMI26 is not set | 901 | # CONFIG_USB_EMI26 is not set |
902 | # CONFIG_USB_ADUTUX is not set | ||
882 | # CONFIG_USB_AUERSWALD is not set | 903 | # CONFIG_USB_AUERSWALD is not set |
883 | # CONFIG_USB_RIO500 is not set | 904 | # CONFIG_USB_RIO500 is not set |
884 | # CONFIG_USB_LEGOTOWER is not set | 905 | # CONFIG_USB_LEGOTOWER is not set |
@@ -886,9 +907,9 @@ CONFIG_USB_EZUSB=y | |||
886 | # CONFIG_USB_LED is not set | 907 | # CONFIG_USB_LED is not set |
887 | # CONFIG_USB_CYPRESS_CY7C63 is not set | 908 | # CONFIG_USB_CYPRESS_CY7C63 is not set |
888 | # CONFIG_USB_CYTHERM is not set | 909 | # CONFIG_USB_CYTHERM is not set |
889 | # CONFIG_USB_PHIDGETKIT is not set | 910 | # CONFIG_USB_PHIDGET is not set |
890 | # CONFIG_USB_PHIDGETSERVO is not set | ||
891 | # CONFIG_USB_IDMOUSE is not set | 911 | # CONFIG_USB_IDMOUSE is not set |
912 | # CONFIG_USB_FTDI_ELAN is not set | ||
892 | # CONFIG_USB_APPLEDISPLAY is not set | 913 | # CONFIG_USB_APPLEDISPLAY is not set |
893 | # CONFIG_USB_SISUSBVGA is not set | 914 | # CONFIG_USB_SISUSBVGA is not set |
894 | # CONFIG_USB_LD is not set | 915 | # CONFIG_USB_LD is not set |
@@ -995,8 +1016,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
995 | # | 1016 | # |
996 | CONFIG_PROC_FS=y | 1017 | CONFIG_PROC_FS=y |
997 | CONFIG_PROC_KCORE=y | 1018 | CONFIG_PROC_KCORE=y |
1019 | CONFIG_PROC_SYSCTL=y | ||
998 | CONFIG_SYSFS=y | 1020 | CONFIG_SYSFS=y |
999 | CONFIG_TMPFS=y | 1021 | CONFIG_TMPFS=y |
1022 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
1000 | CONFIG_HUGETLBFS=y | 1023 | CONFIG_HUGETLBFS=y |
1001 | CONFIG_HUGETLB_PAGE=y | 1024 | CONFIG_HUGETLB_PAGE=y |
1002 | CONFIG_RAMFS=y | 1025 | CONFIG_RAMFS=y |
@@ -1129,6 +1152,7 @@ CONFIG_PLIST=y | |||
1129 | # Kernel hacking | 1152 | # Kernel hacking |
1130 | # | 1153 | # |
1131 | # CONFIG_PRINTK_TIME is not set | 1154 | # CONFIG_PRINTK_TIME is not set |
1155 | CONFIG_ENABLE_MUST_CHECK=y | ||
1132 | CONFIG_MAGIC_SYSRQ=y | 1156 | CONFIG_MAGIC_SYSRQ=y |
1133 | # CONFIG_UNUSED_SYMBOLS is not set | 1157 | # CONFIG_UNUSED_SYMBOLS is not set |
1134 | CONFIG_DEBUG_KERNEL=y | 1158 | CONFIG_DEBUG_KERNEL=y |
@@ -1148,6 +1172,7 @@ CONFIG_DEBUG_SPINLOCK_SLEEP=y | |||
1148 | # CONFIG_DEBUG_INFO is not set | 1172 | # CONFIG_DEBUG_INFO is not set |
1149 | CONFIG_DEBUG_FS=y | 1173 | CONFIG_DEBUG_FS=y |
1150 | # CONFIG_DEBUG_VM is not set | 1174 | # CONFIG_DEBUG_VM is not set |
1175 | # CONFIG_DEBUG_LIST is not set | ||
1151 | # CONFIG_FORCED_INLINING is not set | 1176 | # CONFIG_FORCED_INLINING is not set |
1152 | # CONFIG_RCU_TORTURE_TEST is not set | 1177 | # CONFIG_RCU_TORTURE_TEST is not set |
1153 | CONFIG_DEBUG_STACKOVERFLOW=y | 1178 | CONFIG_DEBUG_STACKOVERFLOW=y |
@@ -1169,6 +1194,9 @@ CONFIG_BOOTX_TEXT=y | |||
1169 | # Cryptographic options | 1194 | # Cryptographic options |
1170 | # | 1195 | # |
1171 | CONFIG_CRYPTO=y | 1196 | CONFIG_CRYPTO=y |
1197 | CONFIG_CRYPTO_ALGAPI=y | ||
1198 | CONFIG_CRYPTO_BLKCIPHER=m | ||
1199 | CONFIG_CRYPTO_MANAGER=m | ||
1172 | # CONFIG_CRYPTO_HMAC is not set | 1200 | # CONFIG_CRYPTO_HMAC is not set |
1173 | # CONFIG_CRYPTO_NULL is not set | 1201 | # CONFIG_CRYPTO_NULL is not set |
1174 | # CONFIG_CRYPTO_MD4 is not set | 1202 | # CONFIG_CRYPTO_MD4 is not set |
@@ -1178,6 +1206,8 @@ CONFIG_CRYPTO_MD5=y | |||
1178 | # CONFIG_CRYPTO_SHA512 is not set | 1206 | # CONFIG_CRYPTO_SHA512 is not set |
1179 | # CONFIG_CRYPTO_WP512 is not set | 1207 | # CONFIG_CRYPTO_WP512 is not set |
1180 | # CONFIG_CRYPTO_TGR192 is not set | 1208 | # CONFIG_CRYPTO_TGR192 is not set |
1209 | CONFIG_CRYPTO_ECB=m | ||
1210 | CONFIG_CRYPTO_CBC=m | ||
1181 | CONFIG_CRYPTO_DES=y | 1211 | CONFIG_CRYPTO_DES=y |
1182 | # CONFIG_CRYPTO_BLOWFISH is not set | 1212 | # CONFIG_CRYPTO_BLOWFISH is not set |
1183 | # CONFIG_CRYPTO_TWOFISH is not set | 1213 | # CONFIG_CRYPTO_TWOFISH is not set |
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig index 44175fb7adec..9828663652e9 100644 --- a/arch/powerpc/configs/pseries_defconfig +++ b/arch/powerpc/configs/pseries_defconfig | |||
@@ -506,7 +506,7 @@ CONFIG_SCSI_SAS_ATTRS=m | |||
506 | # CONFIG_MEGARAID_NEWGEN is not set | 506 | # CONFIG_MEGARAID_NEWGEN is not set |
507 | # CONFIG_MEGARAID_LEGACY is not set | 507 | # CONFIG_MEGARAID_LEGACY is not set |
508 | # CONFIG_MEGARAID_SAS is not set | 508 | # CONFIG_MEGARAID_SAS is not set |
509 | # CONFIG_ATA is not set | 509 | CONFIG_ATA=y |
510 | # CONFIG_SCSI_HPTIOP is not set | 510 | # CONFIG_SCSI_HPTIOP is not set |
511 | # CONFIG_SCSI_BUSLOGIC is not set | 511 | # CONFIG_SCSI_BUSLOGIC is not set |
512 | # CONFIG_SCSI_DMX3191D is not set | 512 | # CONFIG_SCSI_DMX3191D is not set |
diff --git a/arch/powerpc/kernel/ibmebus.c b/arch/powerpc/kernel/ibmebus.c index 124dbcba94a8..39db7a3affe1 100644 --- a/arch/powerpc/kernel/ibmebus.c +++ b/arch/powerpc/kernel/ibmebus.c | |||
@@ -319,7 +319,7 @@ EXPORT_SYMBOL(ibmebus_unregister_driver); | |||
319 | 319 | ||
320 | int ibmebus_request_irq(struct ibmebus_dev *dev, | 320 | int ibmebus_request_irq(struct ibmebus_dev *dev, |
321 | u32 ist, | 321 | u32 ist, |
322 | irqreturn_t (*handler)(int, void*, struct pt_regs *), | 322 | irq_handler_t handler, |
323 | unsigned long irq_flags, const char * devname, | 323 | unsigned long irq_flags, const char * devname, |
324 | void *dev_id) | 324 | void *dev_id) |
325 | { | 325 | { |
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c index ba0694071728..f88a2a675d90 100644 --- a/arch/powerpc/kernel/iommu.c +++ b/arch/powerpc/kernel/iommu.c | |||
@@ -75,7 +75,7 @@ static unsigned long iommu_range_alloc(struct iommu_table *tbl, | |||
75 | /* This allocator was derived from x86_64's bit string search */ | 75 | /* This allocator was derived from x86_64's bit string search */ |
76 | 76 | ||
77 | /* Sanity check */ | 77 | /* Sanity check */ |
78 | if (unlikely(npages) == 0) { | 78 | if (unlikely(npages == 0)) { |
79 | if (printk_ratelimit()) | 79 | if (printk_ratelimit()) |
80 | WARN_ON(1); | 80 | WARN_ON(1); |
81 | return DMA_ERROR_CODE; | 81 | return DMA_ERROR_CODE; |
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 5deaab3090b4..5e37bf14ef2d 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c | |||
@@ -217,7 +217,7 @@ void do_IRQ(struct pt_regs *regs) | |||
217 | * The value -2 is for buggy hardware and means that this IRQ | 217 | * The value -2 is for buggy hardware and means that this IRQ |
218 | * has already been handled. -- Tom | 218 | * has already been handled. -- Tom |
219 | */ | 219 | */ |
220 | irq = ppc_md.get_irq(regs); | 220 | irq = ppc_md.get_irq(); |
221 | 221 | ||
222 | if (irq != NO_IRQ && irq != NO_IRQ_IGNORE) { | 222 | if (irq != NO_IRQ && irq != NO_IRQ_IGNORE) { |
223 | #ifdef CONFIG_IRQSTACKS | 223 | #ifdef CONFIG_IRQSTACKS |
@@ -572,8 +572,8 @@ unsigned int irq_create_mapping(struct irq_host *host, | |||
572 | } | 572 | } |
573 | EXPORT_SYMBOL_GPL(irq_create_mapping); | 573 | EXPORT_SYMBOL_GPL(irq_create_mapping); |
574 | 574 | ||
575 | extern unsigned int irq_create_of_mapping(struct device_node *controller, | 575 | unsigned int irq_create_of_mapping(struct device_node *controller, |
576 | u32 *intspec, unsigned int intsize) | 576 | u32 *intspec, unsigned int intsize) |
577 | { | 577 | { |
578 | struct irq_host *host; | 578 | struct irq_host *host; |
579 | irq_hw_number_t hwirq; | 579 | irq_hw_number_t hwirq; |
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index eb913f80bfb1..865b9648d0d5 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
@@ -724,7 +724,7 @@ static int __init early_init_dt_scan_chosen(unsigned long node, | |||
724 | strlcpy(cmd_line, p, min((int)l, COMMAND_LINE_SIZE)); | 724 | strlcpy(cmd_line, p, min((int)l, COMMAND_LINE_SIZE)); |
725 | 725 | ||
726 | #ifdef CONFIG_CMDLINE | 726 | #ifdef CONFIG_CMDLINE |
727 | if (l == 0 || (l == 1 && (*p) == 0)) | 727 | if (p == NULL || l == 0 || (l == 1 && (*p) == 0)) |
728 | strlcpy(cmd_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE); | 728 | strlcpy(cmd_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE); |
729 | #endif /* CONFIG_CMDLINE */ | 729 | #endif /* CONFIG_CMDLINE */ |
730 | 730 | ||
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index d210d0a5006b..5b59bc18dfe7 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
@@ -706,7 +706,7 @@ void timer_interrupt(struct pt_regs * regs) | |||
706 | 706 | ||
707 | #ifdef CONFIG_PPC_ISERIES | 707 | #ifdef CONFIG_PPC_ISERIES |
708 | if (hvlpevent_is_pending()) | 708 | if (hvlpevent_is_pending()) |
709 | process_hvlpevents(regs); | 709 | process_hvlpevents(); |
710 | #endif | 710 | #endif |
711 | 711 | ||
712 | #ifdef CONFIG_PPC64 | 712 | #ifdef CONFIG_PPC64 |
diff --git a/arch/powerpc/platforms/82xx/mpc82xx.c b/arch/powerpc/platforms/82xx/mpc82xx.c index 89d702de4863..0f5b30dc60da 100644 --- a/arch/powerpc/platforms/82xx/mpc82xx.c +++ b/arch/powerpc/platforms/82xx/mpc82xx.c | |||
@@ -11,7 +11,6 @@ | |||
11 | * option) any later version. | 11 | * option) any later version. |
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/config.h> | ||
15 | #include <linux/stddef.h> | 14 | #include <linux/stddef.h> |
16 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
17 | #include <linux/init.h> | 16 | #include <linux/init.h> |
diff --git a/arch/powerpc/platforms/82xx/mpc82xx_ads.c b/arch/powerpc/platforms/82xx/mpc82xx_ads.c index 4276f087f26e..bb9acbb98176 100644 --- a/arch/powerpc/platforms/82xx/mpc82xx_ads.c +++ b/arch/powerpc/platforms/82xx/mpc82xx_ads.c | |||
@@ -12,8 +12,6 @@ | |||
12 | * option) any later version. | 12 | * option) any later version. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | |||
16 | #include <linux/config.h> | ||
17 | #include <linux/stddef.h> | 15 | #include <linux/stddef.h> |
18 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
19 | #include <linux/init.h> | 17 | #include <linux/init.h> |
@@ -384,8 +382,7 @@ struct hw_interrupt_type m82xx_pci_ic = { | |||
384 | }; | 382 | }; |
385 | 383 | ||
386 | static void | 384 | static void |
387 | m82xx_pci_irq_demux(unsigned int irq, struct irq_desc *desc, | 385 | m82xx_pci_irq_demux(unsigned int irq, struct irq_desc *desc) |
388 | struct pt_regs *regs) | ||
389 | { | 386 | { |
390 | unsigned long stat, mask, pend; | 387 | unsigned long stat, mask, pend; |
391 | int bit; | 388 | int bit; |
@@ -398,7 +395,7 @@ m82xx_pci_irq_demux(unsigned int irq, struct irq_desc *desc, | |||
398 | break; | 395 | break; |
399 | for (bit = 0; pend != 0; ++bit, pend <<= 1) { | 396 | for (bit = 0; pend != 0; ++bit, pend <<= 1) { |
400 | if (pend & 0x80000000) | 397 | if (pend & 0x80000000) |
401 | __do_IRQ(pci_int_base + bit, regs); | 398 | __do_IRQ(pci_int_base + bit); |
402 | } | 399 | } |
403 | } | 400 | } |
404 | } | 401 | } |
diff --git a/arch/powerpc/platforms/82xx/pq2ads.h b/arch/powerpc/platforms/82xx/pq2ads.h index a7348213508f..fb2f92bcd770 100644 --- a/arch/powerpc/platforms/82xx/pq2ads.h +++ b/arch/powerpc/platforms/82xx/pq2ads.h | |||
@@ -22,8 +22,6 @@ | |||
22 | #ifndef __MACH_ADS8260_DEFS | 22 | #ifndef __MACH_ADS8260_DEFS |
23 | #define __MACH_ADS8260_DEFS | 23 | #define __MACH_ADS8260_DEFS |
24 | 24 | ||
25 | #include <linux/config.h> | ||
26 | |||
27 | #include <asm/ppcboot.h> | 25 | #include <asm/ppcboot.h> |
28 | 26 | ||
29 | /* For our show_cpuinfo hooks. */ | 27 | /* For our show_cpuinfo hooks. */ |
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ads.c b/arch/powerpc/platforms/85xx/mpc85xx_ads.c index 28070e7ae507..d3e669d69c73 100644 --- a/arch/powerpc/platforms/85xx/mpc85xx_ads.c +++ b/arch/powerpc/platforms/85xx/mpc85xx_ads.c | |||
@@ -66,13 +66,12 @@ mpc85xx_pcibios_fixup(void) | |||
66 | 66 | ||
67 | #ifdef CONFIG_CPM2 | 67 | #ifdef CONFIG_CPM2 |
68 | 68 | ||
69 | static void cpm2_cascade(unsigned int irq, struct irq_desc *desc, | 69 | static void cpm2_cascade(unsigned int irq, struct irq_desc *desc) |
70 | struct pt_regs *regs) | ||
71 | { | 70 | { |
72 | int cascade_irq; | 71 | int cascade_irq; |
73 | 72 | ||
74 | while ((cascade_irq = cpm2_get_irq(regs)) >= 0) { | 73 | while ((cascade_irq = cpm2_get_irq()) >= 0) { |
75 | generic_handle_irq(cascade_irq, regs); | 74 | generic_handle_irq(cascade_irq); |
76 | } | 75 | } |
77 | desc->chip->eoi(irq); | 76 | desc->chip->eoi(irq); |
78 | } | 77 | } |
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_cds.c b/arch/powerpc/platforms/85xx/mpc85xx_cds.c index 193a5d7921b5..953cd5dd3f54 100644 --- a/arch/powerpc/platforms/85xx/mpc85xx_cds.c +++ b/arch/powerpc/platforms/85xx/mpc85xx_cds.c | |||
@@ -132,13 +132,12 @@ mpc85xx_cds_pcibios_fixup(void) | |||
132 | 132 | ||
133 | #ifdef CONFIG_PPC_I8259 | 133 | #ifdef CONFIG_PPC_I8259 |
134 | #warning The i8259 PIC support is currently broken | 134 | #warning The i8259 PIC support is currently broken |
135 | static void mpc85xx_8259_cascade(unsigned int irq, struct | 135 | static void mpc85xx_8259_cascade(unsigned int irq, struct irq_desc *desc) |
136 | irq_desc *desc, struct pt_regs *regs) | ||
137 | { | 136 | { |
138 | unsigned int cascade_irq = i8259_irq(regs); | 137 | unsigned int cascade_irq = i8259_irq(); |
139 | 138 | ||
140 | if (cascade_irq != NO_IRQ) | 139 | if (cascade_irq != NO_IRQ) |
141 | generic_handle_irq(cascade_irq, regs); | 140 | generic_handle_irq(cascade_irq); |
142 | 141 | ||
143 | desc->chip->eoi(irq); | 142 | desc->chip->eoi(irq); |
144 | } | 143 | } |
@@ -150,8 +149,10 @@ void __init mpc85xx_cds_pic_init(void) | |||
150 | struct mpic *mpic; | 149 | struct mpic *mpic; |
151 | struct resource r; | 150 | struct resource r; |
152 | struct device_node *np = NULL; | 151 | struct device_node *np = NULL; |
152 | #ifdef CONFIG_PPC_I8259 | ||
153 | struct device_node *cascade_node = NULL; | 153 | struct device_node *cascade_node = NULL; |
154 | int cascade_irq; | 154 | int cascade_irq; |
155 | #endif | ||
155 | 156 | ||
156 | np = of_find_node_by_type(np, "open-pic"); | 157 | np = of_find_node_by_type(np, "open-pic"); |
157 | 158 | ||
diff --git a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c index b637e8157f7b..1a1c226ad4d9 100644 --- a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c +++ b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c | |||
@@ -53,12 +53,11 @@ unsigned long pci_dram_offset = 0; | |||
53 | 53 | ||
54 | 54 | ||
55 | #ifdef CONFIG_PCI | 55 | #ifdef CONFIG_PCI |
56 | static void mpc86xx_8259_cascade(unsigned int irq, struct irq_desc *desc, | 56 | static void mpc86xx_8259_cascade(unsigned int irq, struct irq_desc *desc) |
57 | struct pt_regs *regs) | ||
58 | { | 57 | { |
59 | unsigned int cascade_irq = i8259_irq(regs); | 58 | unsigned int cascade_irq = i8259_irq(); |
60 | if (cascade_irq != NO_IRQ) | 59 | if (cascade_irq != NO_IRQ) |
61 | generic_handle_irq(cascade_irq, regs); | 60 | generic_handle_irq(cascade_irq); |
62 | desc->chip->eoi(irq); | 61 | desc->chip->eoi(irq); |
63 | } | 62 | } |
64 | #endif /* CONFIG_PCI */ | 63 | #endif /* CONFIG_PCI */ |
diff --git a/arch/powerpc/platforms/cell/interrupt.c b/arch/powerpc/platforms/cell/interrupt.c index 434fb934dd20..a914c12b4060 100644 --- a/arch/powerpc/platforms/cell/interrupt.c +++ b/arch/powerpc/platforms/cell/interrupt.c | |||
@@ -98,8 +98,7 @@ static void iic_ioexc_eoi(unsigned int irq) | |||
98 | { | 98 | { |
99 | } | 99 | } |
100 | 100 | ||
101 | static void iic_ioexc_cascade(unsigned int irq, struct irq_desc *desc, | 101 | static void iic_ioexc_cascade(unsigned int irq, struct irq_desc *desc) |
102 | struct pt_regs *regs) | ||
103 | { | 102 | { |
104 | struct cbe_iic_regs __iomem *node_iic = (void __iomem *)desc->handler_data; | 103 | struct cbe_iic_regs __iomem *node_iic = (void __iomem *)desc->handler_data; |
105 | unsigned int base = (irq & 0xffffff00) | IIC_IRQ_TYPE_IOEXC; | 104 | unsigned int base = (irq & 0xffffff00) | IIC_IRQ_TYPE_IOEXC; |
@@ -121,7 +120,7 @@ static void iic_ioexc_cascade(unsigned int irq, struct irq_desc *desc, | |||
121 | irq_linear_revmap(iic_host, | 120 | irq_linear_revmap(iic_host, |
122 | base | cascade); | 121 | base | cascade); |
123 | if (cirq != NO_IRQ) | 122 | if (cirq != NO_IRQ) |
124 | generic_handle_irq(cirq, regs); | 123 | generic_handle_irq(cirq); |
125 | } | 124 | } |
126 | /* post-ack level interrupts */ | 125 | /* post-ack level interrupts */ |
127 | ack = bits & ~IIC_ISR_EDGE_MASK; | 126 | ack = bits & ~IIC_ISR_EDGE_MASK; |
@@ -140,7 +139,7 @@ static struct irq_chip iic_ioexc_chip = { | |||
140 | }; | 139 | }; |
141 | 140 | ||
142 | /* Get an IRQ number from the pending state register of the IIC */ | 141 | /* Get an IRQ number from the pending state register of the IIC */ |
143 | static unsigned int iic_get_irq(struct pt_regs *regs) | 142 | static unsigned int iic_get_irq(void) |
144 | { | 143 | { |
145 | struct cbe_iic_pending_bits pending; | 144 | struct cbe_iic_pending_bits pending; |
146 | struct iic *iic; | 145 | struct iic *iic; |
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c index ac5f12662dbb..ccfd0c4db874 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c | |||
@@ -147,7 +147,7 @@ static int __spu_trap_data_map(struct spu *spu, unsigned long ea, u64 dsisr) | |||
147 | } | 147 | } |
148 | 148 | ||
149 | static irqreturn_t | 149 | static irqreturn_t |
150 | spu_irq_class_0(int irq, void *data, struct pt_regs *regs) | 150 | spu_irq_class_0(int irq, void *data) |
151 | { | 151 | { |
152 | struct spu *spu; | 152 | struct spu *spu; |
153 | 153 | ||
@@ -186,7 +186,7 @@ spu_irq_class_0_bottom(struct spu *spu) | |||
186 | EXPORT_SYMBOL_GPL(spu_irq_class_0_bottom); | 186 | EXPORT_SYMBOL_GPL(spu_irq_class_0_bottom); |
187 | 187 | ||
188 | static irqreturn_t | 188 | static irqreturn_t |
189 | spu_irq_class_1(int irq, void *data, struct pt_regs *regs) | 189 | spu_irq_class_1(int irq, void *data) |
190 | { | 190 | { |
191 | struct spu *spu; | 191 | struct spu *spu; |
192 | unsigned long stat, mask, dar, dsisr; | 192 | unsigned long stat, mask, dar, dsisr; |
@@ -224,7 +224,7 @@ spu_irq_class_1(int irq, void *data, struct pt_regs *regs) | |||
224 | EXPORT_SYMBOL_GPL(spu_irq_class_1_bottom); | 224 | EXPORT_SYMBOL_GPL(spu_irq_class_1_bottom); |
225 | 225 | ||
226 | static irqreturn_t | 226 | static irqreturn_t |
227 | spu_irq_class_2(int irq, void *data, struct pt_regs *regs) | 227 | spu_irq_class_2(int irq, void *data) |
228 | { | 228 | { |
229 | struct spu *spu; | 229 | struct spu *spu; |
230 | unsigned long stat; | 230 | unsigned long stat; |
diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c index 488dbd9b51ae..cae3d13229b9 100644 --- a/arch/powerpc/platforms/chrp/setup.c +++ b/arch/powerpc/platforms/chrp/setup.c | |||
@@ -70,7 +70,7 @@ unsigned long event_scan_interval; | |||
70 | * has to include <linux/interrupt.h> (to get irqreturn_t), which | 70 | * has to include <linux/interrupt.h> (to get irqreturn_t), which |
71 | * causes all sorts of problems. -- paulus | 71 | * causes all sorts of problems. -- paulus |
72 | */ | 72 | */ |
73 | extern irqreturn_t xmon_irq(int, void *, struct pt_regs *); | 73 | extern irqreturn_t xmon_irq(int, void *); |
74 | 74 | ||
75 | extern unsigned long loops_per_jiffy; | 75 | extern unsigned long loops_per_jiffy; |
76 | 76 | ||
@@ -335,12 +335,11 @@ chrp_event_scan(unsigned long unused) | |||
335 | jiffies + event_scan_interval); | 335 | jiffies + event_scan_interval); |
336 | } | 336 | } |
337 | 337 | ||
338 | static void chrp_8259_cascade(unsigned int irq, struct irq_desc *desc, | 338 | static void chrp_8259_cascade(unsigned int irq, struct irq_desc *desc) |
339 | struct pt_regs *regs) | ||
340 | { | 339 | { |
341 | unsigned int cascade_irq = i8259_irq(regs); | 340 | unsigned int cascade_irq = i8259_irq(); |
342 | if (cascade_irq != NO_IRQ) | 341 | if (cascade_irq != NO_IRQ) |
343 | generic_handle_irq(cascade_irq, regs); | 342 | generic_handle_irq(cascade_irq); |
344 | desc->chip->eoi(irq); | 343 | desc->chip->eoi(irq); |
345 | } | 344 | } |
346 | 345 | ||
diff --git a/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c b/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c index cb6f084844f2..bdb475c65cba 100644 --- a/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c +++ b/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c | |||
@@ -61,8 +61,7 @@ pci_dram_offset = MPC7448_HPC2_PCI_MEM_OFFSET; | |||
61 | extern int tsi108_setup_pci(struct device_node *dev); | 61 | extern int tsi108_setup_pci(struct device_node *dev); |
62 | extern void _nmask_and_or_msr(unsigned long nmask, unsigned long or_val); | 62 | extern void _nmask_and_or_msr(unsigned long nmask, unsigned long or_val); |
63 | extern void tsi108_pci_int_init(void); | 63 | extern void tsi108_pci_int_init(void); |
64 | extern void tsi108_irq_cascade(unsigned int irq, struct irq_desc *desc, | 64 | extern void tsi108_irq_cascade(unsigned int irq, struct irq_desc *desc); |
65 | struct pt_regs *regs); | ||
66 | 65 | ||
67 | int mpc7448_hpc2_exclude_device(u_char bus, u_char devfn) | 66 | int mpc7448_hpc2_exclude_device(u_char bus, u_char devfn) |
68 | { | 67 | { |
@@ -200,7 +199,7 @@ static void __init mpc7448_hpc2_init_IRQ(void) | |||
200 | tsi_pic = of_find_node_by_type(NULL, "open-pic"); | 199 | tsi_pic = of_find_node_by_type(NULL, "open-pic"); |
201 | if (tsi_pic) { | 200 | if (tsi_pic) { |
202 | unsigned int size; | 201 | unsigned int size; |
203 | void *prop = get_property(tsi_pic, "reg", &size); | 202 | const void *prop = get_property(tsi_pic, "reg", &size); |
204 | mpic_paddr = of_translate_address(tsi_pic, prop); | 203 | mpic_paddr = of_translate_address(tsi_pic, prop); |
205 | } | 204 | } |
206 | 205 | ||
diff --git a/arch/powerpc/platforms/iseries/irq.c b/arch/powerpc/platforms/iseries/irq.c index e32446877e78..5225abfafd9b 100644 --- a/arch/powerpc/platforms/iseries/irq.c +++ b/arch/powerpc/platforms/iseries/irq.c | |||
@@ -43,10 +43,7 @@ | |||
43 | #include "irq.h" | 43 | #include "irq.h" |
44 | #include "pci.h" | 44 | #include "pci.h" |
45 | #include "call_pci.h" | 45 | #include "call_pci.h" |
46 | 46 | #include "smp.h" | |
47 | #if defined(CONFIG_SMP) | ||
48 | extern void iSeries_smp_message_recv(struct pt_regs *); | ||
49 | #endif | ||
50 | 47 | ||
51 | #ifdef CONFIG_PCI | 48 | #ifdef CONFIG_PCI |
52 | 49 | ||
@@ -88,7 +85,7 @@ static DEFINE_SPINLOCK(pending_irqs_lock); | |||
88 | static int num_pending_irqs; | 85 | static int num_pending_irqs; |
89 | static int pending_irqs[NR_IRQS]; | 86 | static int pending_irqs[NR_IRQS]; |
90 | 87 | ||
91 | static void int_received(struct pci_event *event, struct pt_regs *regs) | 88 | static void int_received(struct pci_event *event) |
92 | { | 89 | { |
93 | int irq; | 90 | int irq; |
94 | 91 | ||
@@ -146,11 +143,11 @@ static void int_received(struct pci_event *event, struct pt_regs *regs) | |||
146 | } | 143 | } |
147 | } | 144 | } |
148 | 145 | ||
149 | static void pci_event_handler(struct HvLpEvent *event, struct pt_regs *regs) | 146 | static void pci_event_handler(struct HvLpEvent *event) |
150 | { | 147 | { |
151 | if (event && (event->xType == HvLpEvent_Type_PciIo)) { | 148 | if (event && (event->xType == HvLpEvent_Type_PciIo)) { |
152 | if (hvlpevent_is_int(event)) | 149 | if (hvlpevent_is_int(event)) |
153 | int_received((struct pci_event *)event, regs); | 150 | int_received((struct pci_event *)event); |
154 | else | 151 | else |
155 | printk(KERN_ERR | 152 | printk(KERN_ERR |
156 | "pci_event_handler: unexpected ack received\n"); | 153 | "pci_event_handler: unexpected ack received\n"); |
@@ -308,18 +305,18 @@ int __init iSeries_allocate_IRQ(HvBusNumber bus, | |||
308 | /* | 305 | /* |
309 | * Get the next pending IRQ. | 306 | * Get the next pending IRQ. |
310 | */ | 307 | */ |
311 | unsigned int iSeries_get_irq(struct pt_regs *regs) | 308 | unsigned int iSeries_get_irq(void) |
312 | { | 309 | { |
313 | int irq = NO_IRQ_IGNORE; | 310 | int irq = NO_IRQ_IGNORE; |
314 | 311 | ||
315 | #ifdef CONFIG_SMP | 312 | #ifdef CONFIG_SMP |
316 | if (get_lppaca()->int_dword.fields.ipi_cnt) { | 313 | if (get_lppaca()->int_dword.fields.ipi_cnt) { |
317 | get_lppaca()->int_dword.fields.ipi_cnt = 0; | 314 | get_lppaca()->int_dword.fields.ipi_cnt = 0; |
318 | iSeries_smp_message_recv(regs); | 315 | iSeries_smp_message_recv(); |
319 | } | 316 | } |
320 | #endif /* CONFIG_SMP */ | 317 | #endif /* CONFIG_SMP */ |
321 | if (hvlpevent_is_pending()) | 318 | if (hvlpevent_is_pending()) |
322 | process_hvlpevents(regs); | 319 | process_hvlpevents(); |
323 | 320 | ||
324 | #ifdef CONFIG_PCI | 321 | #ifdef CONFIG_PCI |
325 | if (num_pending_irqs) { | 322 | if (num_pending_irqs) { |
diff --git a/arch/powerpc/platforms/iseries/irq.h b/arch/powerpc/platforms/iseries/irq.h index 1ee8985140e5..69f1b437fc7b 100644 --- a/arch/powerpc/platforms/iseries/irq.h +++ b/arch/powerpc/platforms/iseries/irq.h | |||
@@ -4,6 +4,6 @@ | |||
4 | extern void iSeries_init_IRQ(void); | 4 | extern void iSeries_init_IRQ(void); |
5 | extern int iSeries_allocate_IRQ(HvBusNumber, HvSubBusNumber, u32); | 5 | extern int iSeries_allocate_IRQ(HvBusNumber, HvSubBusNumber, u32); |
6 | extern void iSeries_activate_IRQs(void); | 6 | extern void iSeries_activate_IRQs(void); |
7 | extern unsigned int iSeries_get_irq(struct pt_regs *); | 7 | extern unsigned int iSeries_get_irq(void); |
8 | 8 | ||
9 | #endif /* _ISERIES_IRQ_H */ | 9 | #endif /* _ISERIES_IRQ_H */ |
diff --git a/arch/powerpc/platforms/iseries/lpevents.c b/arch/powerpc/platforms/iseries/lpevents.c index 98c1c2440aad..e3e929e1b460 100644 --- a/arch/powerpc/platforms/iseries/lpevents.c +++ b/arch/powerpc/platforms/iseries/lpevents.c | |||
@@ -116,7 +116,7 @@ static void hvlpevent_clear_valid(struct HvLpEvent * event) | |||
116 | hvlpevent_invalidate(event); | 116 | hvlpevent_invalidate(event); |
117 | } | 117 | } |
118 | 118 | ||
119 | void process_hvlpevents(struct pt_regs *regs) | 119 | void process_hvlpevents(void) |
120 | { | 120 | { |
121 | struct HvLpEvent * event; | 121 | struct HvLpEvent * event; |
122 | 122 | ||
@@ -144,7 +144,7 @@ void process_hvlpevents(struct pt_regs *regs) | |||
144 | __get_cpu_var(hvlpevent_counts)[event->xType]++; | 144 | __get_cpu_var(hvlpevent_counts)[event->xType]++; |
145 | if (event->xType < HvLpEvent_Type_NumTypes && | 145 | if (event->xType < HvLpEvent_Type_NumTypes && |
146 | lpEventHandler[event->xType]) | 146 | lpEventHandler[event->xType]) |
147 | lpEventHandler[event->xType](event, regs); | 147 | lpEventHandler[event->xType](event); |
148 | else | 148 | else |
149 | printk(KERN_INFO "Unexpected Lp Event type=%d\n", event->xType ); | 149 | printk(KERN_INFO "Unexpected Lp Event type=%d\n", event->xType ); |
150 | 150 | ||
diff --git a/arch/powerpc/platforms/iseries/mf.c b/arch/powerpc/platforms/iseries/mf.c index 1983b640bac1..b5737d68d6c4 100644 --- a/arch/powerpc/platforms/iseries/mf.c +++ b/arch/powerpc/platforms/iseries/mf.c | |||
@@ -513,7 +513,7 @@ static void handle_ack(struct io_mf_lp_event *event) | |||
513 | * parse it enough to know if it is an interrupt or an | 513 | * parse it enough to know if it is an interrupt or an |
514 | * acknowledge. | 514 | * acknowledge. |
515 | */ | 515 | */ |
516 | static void hv_handler(struct HvLpEvent *event, struct pt_regs *regs) | 516 | static void hv_handler(struct HvLpEvent *event) |
517 | { | 517 | { |
518 | if ((event != NULL) && (event->xType == HvLpEvent_Type_MachineFac)) { | 518 | if ((event != NULL) && (event->xType == HvLpEvent_Type_MachineFac)) { |
519 | if (hvlpevent_is_ack(event)) | 519 | if (hvlpevent_is_ack(event)) |
@@ -847,7 +847,7 @@ static int mf_get_boot_rtc(struct rtc_time *tm) | |||
847 | /* We need to poll here as we are not yet taking interrupts */ | 847 | /* We need to poll here as we are not yet taking interrupts */ |
848 | while (rtc_data.busy) { | 848 | while (rtc_data.busy) { |
849 | if (hvlpevent_is_pending()) | 849 | if (hvlpevent_is_pending()) |
850 | process_hvlpevents(NULL); | 850 | process_hvlpevents(); |
851 | } | 851 | } |
852 | return rtc_set_tm(rtc_data.rc, rtc_data.ce_msg.ce_msg, tm); | 852 | return rtc_set_tm(rtc_data.rc, rtc_data.ce_msg.ce_msg, tm); |
853 | } | 853 | } |
diff --git a/arch/powerpc/platforms/iseries/smp.c b/arch/powerpc/platforms/iseries/smp.c index 2eb095edb472..aee5908df700 100644 --- a/arch/powerpc/platforms/iseries/smp.c +++ b/arch/powerpc/platforms/iseries/smp.c | |||
@@ -43,9 +43,11 @@ | |||
43 | #include <asm/cputable.h> | 43 | #include <asm/cputable.h> |
44 | #include <asm/system.h> | 44 | #include <asm/system.h> |
45 | 45 | ||
46 | #include "smp.h" | ||
47 | |||
46 | static unsigned long iSeries_smp_message[NR_CPUS]; | 48 | static unsigned long iSeries_smp_message[NR_CPUS]; |
47 | 49 | ||
48 | void iSeries_smp_message_recv(struct pt_regs *regs) | 50 | void iSeries_smp_message_recv(void) |
49 | { | 51 | { |
50 | int cpu = smp_processor_id(); | 52 | int cpu = smp_processor_id(); |
51 | int msg; | 53 | int msg; |
@@ -55,7 +57,7 @@ void iSeries_smp_message_recv(struct pt_regs *regs) | |||
55 | 57 | ||
56 | for (msg = 0; msg < 4; msg++) | 58 | for (msg = 0; msg < 4; msg++) |
57 | if (test_and_clear_bit(msg, &iSeries_smp_message[cpu])) | 59 | if (test_and_clear_bit(msg, &iSeries_smp_message[cpu])) |
58 | smp_message_recv(msg, regs); | 60 | smp_message_recv(msg); |
59 | } | 61 | } |
60 | 62 | ||
61 | static inline void smp_iSeries_do_message(int cpu, int msg) | 63 | static inline void smp_iSeries_do_message(int cpu, int msg) |
diff --git a/arch/powerpc/platforms/iseries/smp.h b/arch/powerpc/platforms/iseries/smp.h new file mode 100644 index 000000000000..d501f7de01e7 --- /dev/null +++ b/arch/powerpc/platforms/iseries/smp.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _PLATFORMS_ISERIES_SMP_H | ||
2 | #define _PLATFORMS_ISERIES_SMP_H | ||
3 | |||
4 | extern void iSeries_smp_message_recv(void); | ||
5 | |||
6 | #endif /* _PLATFORMS_ISERIES_SMP_H */ | ||
diff --git a/arch/powerpc/platforms/iseries/viopath.c b/arch/powerpc/platforms/iseries/viopath.c index 9baa4ee82592..04e07e5da0c1 100644 --- a/arch/powerpc/platforms/iseries/viopath.c +++ b/arch/powerpc/platforms/iseries/viopath.c | |||
@@ -378,7 +378,7 @@ void vio_set_hostlp(void) | |||
378 | } | 378 | } |
379 | EXPORT_SYMBOL(vio_set_hostlp); | 379 | EXPORT_SYMBOL(vio_set_hostlp); |
380 | 380 | ||
381 | static void vio_handleEvent(struct HvLpEvent *event, struct pt_regs *regs) | 381 | static void vio_handleEvent(struct HvLpEvent *event) |
382 | { | 382 | { |
383 | HvLpIndex remoteLp; | 383 | HvLpIndex remoteLp; |
384 | int subtype = (event->xSubtype & VIOMAJOR_SUBTYPE_MASK) | 384 | int subtype = (event->xSubtype & VIOMAJOR_SUBTYPE_MASK) |
diff --git a/arch/powerpc/platforms/maple/pci.c b/arch/powerpc/platforms/maple/pci.c index 1b827618e05f..63b4d1bff359 100644 --- a/arch/powerpc/platforms/maple/pci.c +++ b/arch/powerpc/platforms/maple/pci.c | |||
@@ -8,7 +8,7 @@ | |||
8 | * 2 of the License, or (at your option) any later version. | 8 | * 2 of the License, or (at your option) any later version. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #define DEBUG | 11 | #undef DEBUG |
12 | 12 | ||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/pci.h> | 14 | #include <linux/pci.h> |
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/string.h> | 16 | #include <linux/string.h> |
17 | #include <linux/init.h> | 17 | #include <linux/init.h> |
18 | #include <linux/bootmem.h> | 18 | #include <linux/bootmem.h> |
19 | #include <linux/irq.h> | ||
19 | 20 | ||
20 | #include <asm/sections.h> | 21 | #include <asm/sections.h> |
21 | #include <asm/io.h> | 22 | #include <asm/io.h> |
@@ -33,7 +34,7 @@ | |||
33 | #define DBG(x...) | 34 | #define DBG(x...) |
34 | #endif | 35 | #endif |
35 | 36 | ||
36 | static struct pci_controller *u3_agp, *u3_ht; | 37 | static struct pci_controller *u3_agp, *u3_ht, *u4_pcie; |
37 | 38 | ||
38 | static int __init fixup_one_level_bus_range(struct device_node *node, int higher) | 39 | static int __init fixup_one_level_bus_range(struct device_node *node, int higher) |
39 | { | 40 | { |
@@ -287,6 +288,114 @@ static struct pci_ops u3_ht_pci_ops = | |||
287 | u3_ht_write_config | 288 | u3_ht_write_config |
288 | }; | 289 | }; |
289 | 290 | ||
291 | static unsigned int u4_pcie_cfa0(unsigned int devfn, unsigned int off) | ||
292 | { | ||
293 | return (1 << PCI_SLOT(devfn)) | | ||
294 | (PCI_FUNC(devfn) << 8) | | ||
295 | ((off >> 8) << 28) | | ||
296 | (off & 0xfcu); | ||
297 | } | ||
298 | |||
299 | static unsigned int u4_pcie_cfa1(unsigned int bus, unsigned int devfn, | ||
300 | unsigned int off) | ||
301 | { | ||
302 | return (bus << 16) | | ||
303 | (devfn << 8) | | ||
304 | ((off >> 8) << 28) | | ||
305 | (off & 0xfcu) | 1u; | ||
306 | } | ||
307 | |||
308 | static volatile void __iomem *u4_pcie_cfg_access(struct pci_controller* hose, | ||
309 | u8 bus, u8 dev_fn, int offset) | ||
310 | { | ||
311 | unsigned int caddr; | ||
312 | |||
313 | if (bus == hose->first_busno) | ||
314 | caddr = u4_pcie_cfa0(dev_fn, offset); | ||
315 | else | ||
316 | caddr = u4_pcie_cfa1(bus, dev_fn, offset); | ||
317 | |||
318 | /* Uninorth will return garbage if we don't read back the value ! */ | ||
319 | do { | ||
320 | out_le32(hose->cfg_addr, caddr); | ||
321 | } while (in_le32(hose->cfg_addr) != caddr); | ||
322 | |||
323 | offset &= 0x03; | ||
324 | return hose->cfg_data + offset; | ||
325 | } | ||
326 | |||
327 | static int u4_pcie_read_config(struct pci_bus *bus, unsigned int devfn, | ||
328 | int offset, int len, u32 *val) | ||
329 | { | ||
330 | struct pci_controller *hose; | ||
331 | volatile void __iomem *addr; | ||
332 | |||
333 | hose = pci_bus_to_host(bus); | ||
334 | if (hose == NULL) | ||
335 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
336 | if (offset >= 0x1000) | ||
337 | return PCIBIOS_BAD_REGISTER_NUMBER; | ||
338 | addr = u4_pcie_cfg_access(hose, bus->number, devfn, offset); | ||
339 | if (!addr) | ||
340 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
341 | /* | ||
342 | * Note: the caller has already checked that offset is | ||
343 | * suitably aligned and that len is 1, 2 or 4. | ||
344 | */ | ||
345 | switch (len) { | ||
346 | case 1: | ||
347 | *val = in_8(addr); | ||
348 | break; | ||
349 | case 2: | ||
350 | *val = in_le16(addr); | ||
351 | break; | ||
352 | default: | ||
353 | *val = in_le32(addr); | ||
354 | break; | ||
355 | } | ||
356 | return PCIBIOS_SUCCESSFUL; | ||
357 | } | ||
358 | static int u4_pcie_write_config(struct pci_bus *bus, unsigned int devfn, | ||
359 | int offset, int len, u32 val) | ||
360 | { | ||
361 | struct pci_controller *hose; | ||
362 | volatile void __iomem *addr; | ||
363 | |||
364 | hose = pci_bus_to_host(bus); | ||
365 | if (hose == NULL) | ||
366 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
367 | if (offset >= 0x1000) | ||
368 | return PCIBIOS_BAD_REGISTER_NUMBER; | ||
369 | addr = u4_pcie_cfg_access(hose, bus->number, devfn, offset); | ||
370 | if (!addr) | ||
371 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
372 | /* | ||
373 | * Note: the caller has already checked that offset is | ||
374 | * suitably aligned and that len is 1, 2 or 4. | ||
375 | */ | ||
376 | switch (len) { | ||
377 | case 1: | ||
378 | out_8(addr, val); | ||
379 | (void) in_8(addr); | ||
380 | break; | ||
381 | case 2: | ||
382 | out_le16(addr, val); | ||
383 | (void) in_le16(addr); | ||
384 | break; | ||
385 | default: | ||
386 | out_le32(addr, val); | ||
387 | (void) in_le32(addr); | ||
388 | break; | ||
389 | } | ||
390 | return PCIBIOS_SUCCESSFUL; | ||
391 | } | ||
392 | |||
393 | static struct pci_ops u4_pcie_pci_ops = | ||
394 | { | ||
395 | u4_pcie_read_config, | ||
396 | u4_pcie_write_config | ||
397 | }; | ||
398 | |||
290 | static void __init setup_u3_agp(struct pci_controller* hose) | 399 | static void __init setup_u3_agp(struct pci_controller* hose) |
291 | { | 400 | { |
292 | /* On G5, we move AGP up to high bus number so we don't need | 401 | /* On G5, we move AGP up to high bus number so we don't need |
@@ -307,6 +416,26 @@ static void __init setup_u3_agp(struct pci_controller* hose) | |||
307 | u3_agp = hose; | 416 | u3_agp = hose; |
308 | } | 417 | } |
309 | 418 | ||
419 | static void __init setup_u4_pcie(struct pci_controller* hose) | ||
420 | { | ||
421 | /* We currently only implement the "non-atomic" config space, to | ||
422 | * be optimised later. | ||
423 | */ | ||
424 | hose->ops = &u4_pcie_pci_ops; | ||
425 | hose->cfg_addr = ioremap(0xf0000000 + 0x800000, 0x1000); | ||
426 | hose->cfg_data = ioremap(0xf0000000 + 0xc00000, 0x1000); | ||
427 | |||
428 | /* The bus contains a bridge from root -> device, we need to | ||
429 | * make it visible on bus 0 so that we pick the right type | ||
430 | * of config cycles. If we didn't, we would have to force all | ||
431 | * config cycles to be type 1. So we override the "bus-range" | ||
432 | * property here | ||
433 | */ | ||
434 | hose->first_busno = 0x00; | ||
435 | hose->last_busno = 0xff; | ||
436 | u4_pcie = hose; | ||
437 | } | ||
438 | |||
310 | static void __init setup_u3_ht(struct pci_controller* hose) | 439 | static void __init setup_u3_ht(struct pci_controller* hose) |
311 | { | 440 | { |
312 | hose->ops = &u3_ht_pci_ops; | 441 | hose->ops = &u3_ht_pci_ops; |
@@ -354,6 +483,10 @@ static int __init add_bridge(struct device_node *dev) | |||
354 | setup_u3_ht(hose); | 483 | setup_u3_ht(hose); |
355 | disp_name = "U3-HT"; | 484 | disp_name = "U3-HT"; |
356 | primary = 1; | 485 | primary = 1; |
486 | } else if (device_is_compatible(dev, "u4-pcie")) { | ||
487 | setup_u4_pcie(hose); | ||
488 | disp_name = "U4-PCIE"; | ||
489 | primary = 0; | ||
357 | } | 490 | } |
358 | printk(KERN_INFO "Found %s PCI host bridge. Firmware bus number: %d->%d\n", | 491 | printk(KERN_INFO "Found %s PCI host bridge. Firmware bus number: %d->%d\n", |
359 | disp_name, hose->first_busno, hose->last_busno); | 492 | disp_name, hose->first_busno, hose->last_busno); |
@@ -361,7 +494,6 @@ static int __init add_bridge(struct device_node *dev) | |||
361 | /* Interpret the "ranges" property */ | 494 | /* Interpret the "ranges" property */ |
362 | /* This also maps the I/O region and sets isa_io/mem_base */ | 495 | /* This also maps the I/O region and sets isa_io/mem_base */ |
363 | pci_process_bridge_OF_ranges(hose, dev, primary); | 496 | pci_process_bridge_OF_ranges(hose, dev, primary); |
364 | pci_setup_phb_io(hose, primary); | ||
365 | 497 | ||
366 | /* Fixup "bus-range" OF property */ | 498 | /* Fixup "bus-range" OF property */ |
367 | fixup_bus_range(dev); | 499 | fixup_bus_range(dev); |
@@ -376,8 +508,30 @@ void __init maple_pcibios_fixup(void) | |||
376 | 508 | ||
377 | DBG(" -> maple_pcibios_fixup\n"); | 509 | DBG(" -> maple_pcibios_fixup\n"); |
378 | 510 | ||
379 | for_each_pci_dev(dev) | 511 | for_each_pci_dev(dev) { |
512 | /* Fixup IRQ for PCIe host */ | ||
513 | if (u4_pcie != NULL && dev->bus->number == 0 && | ||
514 | pci_bus_to_host(dev->bus) == u4_pcie) { | ||
515 | printk(KERN_DEBUG "Fixup U4 PCIe IRQ\n"); | ||
516 | dev->irq = irq_create_mapping(NULL, 1); | ||
517 | if (dev->irq != NO_IRQ) | ||
518 | set_irq_type(dev->irq, IRQ_TYPE_LEVEL_LOW); | ||
519 | continue; | ||
520 | } | ||
521 | |||
522 | /* Hide AMD8111 IDE interrupt when in legacy mode so | ||
523 | * the driver calls pci_get_legacy_ide_irq() | ||
524 | */ | ||
525 | if (dev->vendor == PCI_VENDOR_ID_AMD && | ||
526 | dev->device == PCI_DEVICE_ID_AMD_8111_IDE && | ||
527 | (dev->class & 5) != 5) { | ||
528 | dev->irq = NO_IRQ; | ||
529 | continue; | ||
530 | } | ||
531 | |||
532 | /* For all others, map the interrupt from the device-tree */ | ||
380 | pci_read_irq_line(dev); | 533 | pci_read_irq_line(dev); |
534 | } | ||
381 | 535 | ||
382 | DBG(" <- maple_pcibios_fixup\n"); | 536 | DBG(" <- maple_pcibios_fixup\n"); |
383 | } | 537 | } |
@@ -388,8 +542,10 @@ static void __init maple_fixup_phb_resources(void) | |||
388 | 542 | ||
389 | list_for_each_entry_safe(hose, tmp, &hose_list, list_node) { | 543 | list_for_each_entry_safe(hose, tmp, &hose_list, list_node) { |
390 | unsigned long offset = (unsigned long)hose->io_base_virt - pci_io_base; | 544 | unsigned long offset = (unsigned long)hose->io_base_virt - pci_io_base; |
545 | |||
391 | hose->io_resource.start += offset; | 546 | hose->io_resource.start += offset; |
392 | hose->io_resource.end += offset; | 547 | hose->io_resource.end += offset; |
548 | |||
393 | printk(KERN_INFO "PCI Host %d, io start: %llx; io end: %llx\n", | 549 | printk(KERN_INFO "PCI Host %d, io start: %llx; io end: %llx\n", |
394 | hose->global_number, | 550 | hose->global_number, |
395 | (unsigned long long)hose->io_resource.start, | 551 | (unsigned long long)hose->io_resource.start, |
@@ -431,6 +587,19 @@ void __init maple_pci_init(void) | |||
431 | if (ht && add_bridge(ht) != 0) | 587 | if (ht && add_bridge(ht) != 0) |
432 | of_node_put(ht); | 588 | of_node_put(ht); |
433 | 589 | ||
590 | /* | ||
591 | * We need to call pci_setup_phb_io for the HT bridge first | ||
592 | * so it gets the I/O port numbers starting at 0, and we | ||
593 | * need to call it for the AGP bridge after that so it gets | ||
594 | * small positive I/O port numbers. | ||
595 | */ | ||
596 | if (u3_ht) | ||
597 | pci_setup_phb_io(u3_ht, 1); | ||
598 | if (u3_agp) | ||
599 | pci_setup_phb_io(u3_agp, 0); | ||
600 | if (u4_pcie) | ||
601 | pci_setup_phb_io(u4_pcie, 0); | ||
602 | |||
434 | /* Fixup the IO resources on our host bridges as the common code | 603 | /* Fixup the IO resources on our host bridges as the common code |
435 | * does it only for childs of the host bridges | 604 | * does it only for childs of the host bridges |
436 | */ | 605 | */ |
@@ -465,8 +634,11 @@ int maple_pci_get_legacy_ide_irq(struct pci_dev *pdev, int channel) | |||
465 | return defirq; | 634 | return defirq; |
466 | 635 | ||
467 | np = pci_device_to_OF_node(pdev); | 636 | np = pci_device_to_OF_node(pdev); |
468 | if (np == NULL) | 637 | if (np == NULL) { |
638 | printk("Failed to locate OF node for IDE %s\n", | ||
639 | pci_name(pdev)); | ||
469 | return defirq; | 640 | return defirq; |
641 | } | ||
470 | irq = irq_of_parse_and_map(np, channel & 0x1); | 642 | irq = irq_of_parse_and_map(np, channel & 0x1); |
471 | if (irq == NO_IRQ) { | 643 | if (irq == NO_IRQ) { |
472 | printk("Failed to map onboard IDE interrupt for channel %d\n", | 644 | printk("Failed to map onboard IDE interrupt for channel %d\n", |
@@ -479,6 +651,9 @@ int maple_pci_get_legacy_ide_irq(struct pci_dev *pdev, int channel) | |||
479 | /* XXX: To remove once all firmwares are ok */ | 651 | /* XXX: To remove once all firmwares are ok */ |
480 | static void fixup_maple_ide(struct pci_dev* dev) | 652 | static void fixup_maple_ide(struct pci_dev* dev) |
481 | { | 653 | { |
654 | if (!machine_is(maple)) | ||
655 | return; | ||
656 | |||
482 | #if 0 /* Enable this to enable IDE port 0 */ | 657 | #if 0 /* Enable this to enable IDE port 0 */ |
483 | { | 658 | { |
484 | u8 v; | 659 | u8 v; |
@@ -495,7 +670,7 @@ static void fixup_maple_ide(struct pci_dev* dev) | |||
495 | dev->resource[4].start = 0xcc00; | 670 | dev->resource[4].start = 0xcc00; |
496 | dev->resource[4].end = 0xcc10; | 671 | dev->resource[4].end = 0xcc10; |
497 | #endif | 672 | #endif |
498 | #if 1 /* Enable this to fixup IDE sense/polarity of irqs in IO-APICs */ | 673 | #if 0 /* Enable this to fixup IDE sense/polarity of irqs in IO-APICs */ |
499 | { | 674 | { |
500 | struct pci_dev *apicdev; | 675 | struct pci_dev *apicdev; |
501 | u32 v; | 676 | u32 v; |
diff --git a/arch/powerpc/platforms/pasemi/pci.c b/arch/powerpc/platforms/pasemi/pci.c index 4679c5230413..39020c1fa13d 100644 --- a/arch/powerpc/platforms/pasemi/pci.c +++ b/arch/powerpc/platforms/pasemi/pci.c | |||
@@ -35,17 +35,17 @@ | |||
35 | 35 | ||
36 | #define CONFIG_OFFSET_VALID(off) ((off) < 4096) | 36 | #define CONFIG_OFFSET_VALID(off) ((off) < 4096) |
37 | 37 | ||
38 | static unsigned long pa_pxp_cfg_addr(struct pci_controller *hose, | 38 | static void volatile __iomem *pa_pxp_cfg_addr(struct pci_controller *hose, |
39 | u8 bus, u8 devfn, int offset) | 39 | u8 bus, u8 devfn, int offset) |
40 | { | 40 | { |
41 | return ((unsigned long)hose->cfg_data) + PA_PXP_CFA(bus, devfn, offset); | 41 | return hose->cfg_data + PA_PXP_CFA(bus, devfn, offset); |
42 | } | 42 | } |
43 | 43 | ||
44 | static int pa_pxp_read_config(struct pci_bus *bus, unsigned int devfn, | 44 | static int pa_pxp_read_config(struct pci_bus *bus, unsigned int devfn, |
45 | int offset, int len, u32 *val) | 45 | int offset, int len, u32 *val) |
46 | { | 46 | { |
47 | struct pci_controller *hose; | 47 | struct pci_controller *hose; |
48 | unsigned long addr; | 48 | void volatile __iomem *addr; |
49 | 49 | ||
50 | hose = pci_bus_to_host(bus); | 50 | hose = pci_bus_to_host(bus); |
51 | if (!hose) | 51 | if (!hose) |
@@ -62,13 +62,13 @@ static int pa_pxp_read_config(struct pci_bus *bus, unsigned int devfn, | |||
62 | */ | 62 | */ |
63 | switch (len) { | 63 | switch (len) { |
64 | case 1: | 64 | case 1: |
65 | *val = in_8((u8 *)addr); | 65 | *val = in_8(addr); |
66 | break; | 66 | break; |
67 | case 2: | 67 | case 2: |
68 | *val = in_le16((u16 *)addr); | 68 | *val = in_le16(addr); |
69 | break; | 69 | break; |
70 | default: | 70 | default: |
71 | *val = in_le32((u32 *)addr); | 71 | *val = in_le32(addr); |
72 | break; | 72 | break; |
73 | } | 73 | } |
74 | 74 | ||
@@ -79,7 +79,7 @@ static int pa_pxp_write_config(struct pci_bus *bus, unsigned int devfn, | |||
79 | int offset, int len, u32 val) | 79 | int offset, int len, u32 val) |
80 | { | 80 | { |
81 | struct pci_controller *hose; | 81 | struct pci_controller *hose; |
82 | unsigned long addr; | 82 | void volatile __iomem *addr; |
83 | 83 | ||
84 | hose = pci_bus_to_host(bus); | 84 | hose = pci_bus_to_host(bus); |
85 | if (!hose) | 85 | if (!hose) |
@@ -96,16 +96,16 @@ static int pa_pxp_write_config(struct pci_bus *bus, unsigned int devfn, | |||
96 | */ | 96 | */ |
97 | switch (len) { | 97 | switch (len) { |
98 | case 1: | 98 | case 1: |
99 | out_8((u8 *)addr, val); | 99 | out_8(addr, val); |
100 | (void) in_8((u8 *)addr); | 100 | (void) in_8(addr); |
101 | break; | 101 | break; |
102 | case 2: | 102 | case 2: |
103 | out_le16((u16 *)addr, val); | 103 | out_le16(addr, val); |
104 | (void) in_le16((u16 *)addr); | 104 | (void) in_le16(addr); |
105 | break; | 105 | break; |
106 | default: | 106 | default: |
107 | out_le32((u32 *)addr, val); | 107 | out_le32(addr, val); |
108 | (void) in_le32((u32 *)addr); | 108 | (void) in_le32(addr); |
109 | break; | 109 | break; |
110 | } | 110 | } |
111 | return PCIBIOS_SUCCESSFUL; | 111 | return PCIBIOS_SUCCESSFUL; |
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c index e93a115961aa..39db12890214 100644 --- a/arch/powerpc/platforms/powermac/pic.c +++ b/arch/powerpc/platforms/powermac/pic.c | |||
@@ -42,7 +42,7 @@ | |||
42 | * has to include <linux/interrupt.h> (to get irqreturn_t), which | 42 | * has to include <linux/interrupt.h> (to get irqreturn_t), which |
43 | * causes all sorts of problems. -- paulus | 43 | * causes all sorts of problems. -- paulus |
44 | */ | 44 | */ |
45 | extern irqreturn_t xmon_irq(int, void *, struct pt_regs *); | 45 | extern irqreturn_t xmon_irq(int, void *); |
46 | 46 | ||
47 | #ifdef CONFIG_PPC32 | 47 | #ifdef CONFIG_PPC32 |
48 | struct pmac_irq_hw { | 48 | struct pmac_irq_hw { |
@@ -210,7 +210,7 @@ static struct irq_chip pmac_pic = { | |||
210 | .retrigger = pmac_retrigger, | 210 | .retrigger = pmac_retrigger, |
211 | }; | 211 | }; |
212 | 212 | ||
213 | static irqreturn_t gatwick_action(int cpl, void *dev_id, struct pt_regs *regs) | 213 | static irqreturn_t gatwick_action(int cpl, void *dev_id) |
214 | { | 214 | { |
215 | unsigned long flags; | 215 | unsigned long flags; |
216 | int irq, bits; | 216 | int irq, bits; |
@@ -227,7 +227,7 @@ static irqreturn_t gatwick_action(int cpl, void *dev_id, struct pt_regs *regs) | |||
227 | continue; | 227 | continue; |
228 | irq += __ilog2(bits); | 228 | irq += __ilog2(bits); |
229 | spin_unlock_irqrestore(&pmac_pic_lock, flags); | 229 | spin_unlock_irqrestore(&pmac_pic_lock, flags); |
230 | __do_IRQ(irq, regs); | 230 | __do_IRQ(irq); |
231 | spin_lock_irqsave(&pmac_pic_lock, flags); | 231 | spin_lock_irqsave(&pmac_pic_lock, flags); |
232 | rc = IRQ_HANDLED; | 232 | rc = IRQ_HANDLED; |
233 | } | 233 | } |
@@ -235,18 +235,18 @@ static irqreturn_t gatwick_action(int cpl, void *dev_id, struct pt_regs *regs) | |||
235 | return rc; | 235 | return rc; |
236 | } | 236 | } |
237 | 237 | ||
238 | static unsigned int pmac_pic_get_irq(struct pt_regs *regs) | 238 | static unsigned int pmac_pic_get_irq(void) |
239 | { | 239 | { |
240 | int irq; | 240 | int irq; |
241 | unsigned long bits = 0; | 241 | unsigned long bits = 0; |
242 | unsigned long flags; | 242 | unsigned long flags; |
243 | 243 | ||
244 | #ifdef CONFIG_SMP | 244 | #ifdef CONFIG_SMP |
245 | void psurge_smp_message_recv(struct pt_regs *); | 245 | void psurge_smp_message_recv(void); |
246 | 246 | ||
247 | /* IPI's are a hack on the powersurge -- Cort */ | 247 | /* IPI's are a hack on the powersurge -- Cort */ |
248 | if ( smp_processor_id() != 0 ) { | 248 | if ( smp_processor_id() != 0 ) { |
249 | psurge_smp_message_recv(regs); | 249 | psurge_smp_message_recv(); |
250 | return NO_IRQ_IGNORE; /* ignore, already handled */ | 250 | return NO_IRQ_IGNORE; /* ignore, already handled */ |
251 | } | 251 | } |
252 | #endif /* CONFIG_SMP */ | 252 | #endif /* CONFIG_SMP */ |
@@ -444,7 +444,7 @@ static void pmac_u3_cascade(unsigned int irq, struct irq_desc *desc) | |||
444 | { | 444 | { |
445 | struct mpic *mpic = desc->handler_data; | 445 | struct mpic *mpic = desc->handler_data; |
446 | 446 | ||
447 | unsigned int cascade_irq = mpic_get_one_irq(mpic, get_irq_regs()); | 447 | unsigned int cascade_irq = mpic_get_one_irq(mpic); |
448 | if (cascade_irq != NO_IRQ) | 448 | if (cascade_irq != NO_IRQ) |
449 | generic_handle_irq(cascade_irq); | 449 | generic_handle_irq(cascade_irq); |
450 | desc->chip->eoi(irq); | 450 | desc->chip->eoi(irq); |
diff --git a/arch/powerpc/platforms/powermac/pic.h b/arch/powerpc/platforms/powermac/pic.h index 664103dfeef9..c44c89f5e532 100644 --- a/arch/powerpc/platforms/powermac/pic.h +++ b/arch/powerpc/platforms/powermac/pic.h | |||
@@ -5,7 +5,7 @@ | |||
5 | 5 | ||
6 | extern struct hw_interrupt_type pmac_pic; | 6 | extern struct hw_interrupt_type pmac_pic; |
7 | 7 | ||
8 | void pmac_pic_init(void); | 8 | extern void pmac_pic_init(void); |
9 | int pmac_get_irq(struct pt_regs *regs); | 9 | extern int pmac_get_irq(void); |
10 | 10 | ||
11 | #endif /* __PPC_PLATFORMS_PMAC_PIC_H */ | 11 | #endif /* __PPC_PLATFORMS_PMAC_PIC_H */ |
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c index 1949b657b092..eeb2ae5ffc58 100644 --- a/arch/powerpc/platforms/powermac/smp.c +++ b/arch/powerpc/platforms/powermac/smp.c | |||
@@ -160,7 +160,7 @@ static inline void psurge_clr_ipi(int cpu) | |||
160 | */ | 160 | */ |
161 | static unsigned long psurge_smp_message[NR_CPUS]; | 161 | static unsigned long psurge_smp_message[NR_CPUS]; |
162 | 162 | ||
163 | void psurge_smp_message_recv(struct pt_regs *regs) | 163 | void psurge_smp_message_recv(void) |
164 | { | 164 | { |
165 | int cpu = smp_processor_id(); | 165 | int cpu = smp_processor_id(); |
166 | int msg; | 166 | int msg; |
@@ -174,12 +174,12 @@ void psurge_smp_message_recv(struct pt_regs *regs) | |||
174 | /* make sure there is a message there */ | 174 | /* make sure there is a message there */ |
175 | for (msg = 0; msg < 4; msg++) | 175 | for (msg = 0; msg < 4; msg++) |
176 | if (test_and_clear_bit(msg, &psurge_smp_message[cpu])) | 176 | if (test_and_clear_bit(msg, &psurge_smp_message[cpu])) |
177 | smp_message_recv(msg, regs); | 177 | smp_message_recv(msg); |
178 | } | 178 | } |
179 | 179 | ||
180 | irqreturn_t psurge_primary_intr(int irq, void *d, struct pt_regs *regs) | 180 | irqreturn_t psurge_primary_intr(int irq, void *d) |
181 | { | 181 | { |
182 | psurge_smp_message_recv(regs); | 182 | psurge_smp_message_recv(); |
183 | return IRQ_HANDLED; | 183 | return IRQ_HANDLED; |
184 | } | 184 | } |
185 | 185 | ||
@@ -328,6 +328,7 @@ static void __init smp_psurge_kick_cpu(int nr) | |||
328 | { | 328 | { |
329 | unsigned long start = __pa(__secondary_start_pmac_0) + nr * 8; | 329 | unsigned long start = __pa(__secondary_start_pmac_0) + nr * 8; |
330 | unsigned long a; | 330 | unsigned long a; |
331 | int i; | ||
331 | 332 | ||
332 | /* may need to flush here if secondary bats aren't setup */ | 333 | /* may need to flush here if secondary bats aren't setup */ |
333 | for (a = KERNELBASE; a < KERNELBASE + 0x800000; a += 32) | 334 | for (a = KERNELBASE; a < KERNELBASE + 0x800000; a += 32) |
@@ -340,7 +341,11 @@ static void __init smp_psurge_kick_cpu(int nr) | |||
340 | mb(); | 341 | mb(); |
341 | 342 | ||
342 | psurge_set_ipi(nr); | 343 | psurge_set_ipi(nr); |
343 | udelay(10); | 344 | /* |
345 | * We can't use udelay here because the timebase is now frozen. | ||
346 | */ | ||
347 | for (i = 0; i < 2000; ++i) | ||
348 | barrier(); | ||
344 | psurge_clr_ipi(nr); | 349 | psurge_clr_ipi(nr); |
345 | 350 | ||
346 | if (ppc_md.progress) ppc_md.progress("smp_psurge_kick_cpu - done", 0x354); | 351 | if (ppc_md.progress) ppc_md.progress("smp_psurge_kick_cpu - done", 0x354); |
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c index bbf2e34dc358..d24ba547e53f 100644 --- a/arch/powerpc/platforms/pseries/iommu.c +++ b/arch/powerpc/platforms/pseries/iommu.c | |||
@@ -267,7 +267,8 @@ static void iommu_table_setparms(struct pci_controller *phb, | |||
267 | struct iommu_table *tbl) | 267 | struct iommu_table *tbl) |
268 | { | 268 | { |
269 | struct device_node *node; | 269 | struct device_node *node; |
270 | const unsigned long *basep, *sizep; | 270 | const unsigned long *basep; |
271 | const u32 *sizep; | ||
271 | 272 | ||
272 | node = (struct device_node *)phb->arch_data; | 273 | node = (struct device_node *)phb->arch_data; |
273 | 274 | ||
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index ad9aec2c6fee..89a8119f988d 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c | |||
@@ -123,7 +123,7 @@ static void __init fwnmi_init(void) | |||
123 | 123 | ||
124 | void pseries_8259_cascade(unsigned int irq, struct irq_desc *desc) | 124 | void pseries_8259_cascade(unsigned int irq, struct irq_desc *desc) |
125 | { | 125 | { |
126 | unsigned int cascade_irq = i8259_irq(get_irq_regs()); | 126 | unsigned int cascade_irq = i8259_irq(); |
127 | if (cascade_irq != NO_IRQ) | 127 | if (cascade_irq != NO_IRQ) |
128 | generic_handle_irq(cascade_irq); | 128 | generic_handle_irq(cascade_irq); |
129 | desc->chip->eoi(irq); | 129 | desc->chip->eoi(irq); |
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index f6bd2f285153..d071abe78ab1 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c | |||
@@ -308,14 +308,14 @@ static inline unsigned int xics_remap_irq(unsigned int vec) | |||
308 | return NO_IRQ; | 308 | return NO_IRQ; |
309 | } | 309 | } |
310 | 310 | ||
311 | static unsigned int xics_get_irq_direct(struct pt_regs *regs) | 311 | static unsigned int xics_get_irq_direct(void) |
312 | { | 312 | { |
313 | unsigned int cpu = smp_processor_id(); | 313 | unsigned int cpu = smp_processor_id(); |
314 | 314 | ||
315 | return xics_remap_irq(direct_xirr_info_get(cpu)); | 315 | return xics_remap_irq(direct_xirr_info_get(cpu)); |
316 | } | 316 | } |
317 | 317 | ||
318 | static unsigned int xics_get_irq_lpar(struct pt_regs *regs) | 318 | static unsigned int xics_get_irq_lpar(void) |
319 | { | 319 | { |
320 | unsigned int cpu = smp_processor_id(); | 320 | unsigned int cpu = smp_processor_id(); |
321 | 321 | ||
diff --git a/arch/powerpc/sysdev/cpm2_pic.c b/arch/powerpc/sysdev/cpm2_pic.c index 28b018994746..767ee6651adc 100644 --- a/arch/powerpc/sysdev/cpm2_pic.c +++ b/arch/powerpc/sysdev/cpm2_pic.c | |||
@@ -147,7 +147,7 @@ static struct irq_chip cpm2_pic = { | |||
147 | .end = cpm2_end_irq, | 147 | .end = cpm2_end_irq, |
148 | }; | 148 | }; |
149 | 149 | ||
150 | unsigned int cpm2_get_irq(struct pt_regs *regs) | 150 | unsigned int cpm2_get_irq(void) |
151 | { | 151 | { |
152 | int irq; | 152 | int irq; |
153 | unsigned long bits; | 153 | unsigned long bits; |
diff --git a/arch/powerpc/sysdev/cpm2_pic.h b/arch/powerpc/sysdev/cpm2_pic.h index 3c513e5a688e..2840616529e4 100644 --- a/arch/powerpc/sysdev/cpm2_pic.h +++ b/arch/powerpc/sysdev/cpm2_pic.h | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | extern intctl_cpm2_t *cpm2_intctl; | 4 | extern intctl_cpm2_t *cpm2_intctl; |
5 | 5 | ||
6 | extern unsigned int cpm2_get_irq(struct pt_regs *regs); | 6 | extern unsigned int cpm2_get_irq(void); |
7 | 7 | ||
8 | extern void cpm2_pic_init(struct device_node*); | 8 | extern void cpm2_pic_init(struct device_node*); |
9 | 9 | ||
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c index 7d759f1c26b1..dbe92ae20333 100644 --- a/arch/powerpc/sysdev/fsl_soc.c +++ b/arch/powerpc/sysdev/fsl_soc.c | |||
@@ -567,7 +567,7 @@ static int __init fs_enet_of_init(void) | |||
567 | struct resource r[4]; | 567 | struct resource r[4]; |
568 | struct device_node *phy, *mdio; | 568 | struct device_node *phy, *mdio; |
569 | struct fs_platform_info fs_enet_data; | 569 | struct fs_platform_info fs_enet_data; |
570 | const unsigned int *id, *phy_addr, phy_irq; | 570 | const unsigned int *id, *phy_addr, *phy_irq; |
571 | const void *mac_addr; | 571 | const void *mac_addr; |
572 | const phandle *ph; | 572 | const phandle *ph; |
573 | const char *model; | 573 | const char *model; |
@@ -641,7 +641,7 @@ static int __init fs_enet_of_init(void) | |||
641 | 641 | ||
642 | if (strstr(model, "FCC")) { | 642 | if (strstr(model, "FCC")) { |
643 | int fcc_index = *id - 1; | 643 | int fcc_index = *id - 1; |
644 | unsigned char* mdio_bb_prop; | 644 | const unsigned char *mdio_bb_prop; |
645 | 645 | ||
646 | fs_enet_data.dpram_offset = (u32)cpm_dpram_addr(0); | 646 | fs_enet_data.dpram_offset = (u32)cpm_dpram_addr(0); |
647 | fs_enet_data.rx_ring = 32; | 647 | fs_enet_data.rx_ring = 32; |
@@ -708,8 +708,9 @@ static int __init fs_enet_of_init(void) | |||
708 | ret = platform_device_add_data(fs_enet_dev, &fs_enet_data, | 708 | ret = platform_device_add_data(fs_enet_dev, &fs_enet_data, |
709 | sizeof(struct | 709 | sizeof(struct |
710 | fs_platform_info)); | 710 | fs_platform_info)); |
711 | if (ret) | 711 | if (ret) |
712 | goto unreg; | 712 | goto unreg; |
713 | } | ||
713 | } | 714 | } |
714 | return 0; | 715 | return 0; |
715 | 716 | ||
diff --git a/arch/powerpc/sysdev/i8259.c b/arch/powerpc/sysdev/i8259.c index 26a6a3becd66..0450265d73bb 100644 --- a/arch/powerpc/sysdev/i8259.c +++ b/arch/powerpc/sysdev/i8259.c | |||
@@ -34,7 +34,7 @@ static struct irq_host *i8259_host; | |||
34 | * which is called. It should be noted that polling is broken on some | 34 | * which is called. It should be noted that polling is broken on some |
35 | * IBM and Motorola PReP boxes so we must use the int-ack feature on them. | 35 | * IBM and Motorola PReP boxes so we must use the int-ack feature on them. |
36 | */ | 36 | */ |
37 | unsigned int i8259_irq(struct pt_regs *regs) | 37 | unsigned int i8259_irq(void) |
38 | { | 38 | { |
39 | int irq; | 39 | int irq; |
40 | int lock = 0; | 40 | int lock = 0; |
diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c index 6ebdae8e6f69..bc4d4a7f9657 100644 --- a/arch/powerpc/sysdev/ipic.c +++ b/arch/powerpc/sysdev/ipic.c | |||
@@ -709,7 +709,7 @@ void ipic_clear_mcp_status(u32 mask) | |||
709 | } | 709 | } |
710 | 710 | ||
711 | /* Return an interrupt vector or NO_IRQ if no interrupt is pending. */ | 711 | /* Return an interrupt vector or NO_IRQ if no interrupt is pending. */ |
712 | unsigned int ipic_get_irq(struct pt_regs *regs) | 712 | unsigned int ipic_get_irq(void) |
713 | { | 713 | { |
714 | int irq; | 714 | int irq; |
715 | 715 | ||
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 195215560fd7..ba4833f57d47 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -1217,7 +1217,7 @@ void mpic_send_ipi(unsigned int ipi_no, unsigned int cpu_mask) | |||
1217 | mpic_physmask(cpu_mask & cpus_addr(cpu_online_map)[0])); | 1217 | mpic_physmask(cpu_mask & cpus_addr(cpu_online_map)[0])); |
1218 | } | 1218 | } |
1219 | 1219 | ||
1220 | unsigned int mpic_get_one_irq(struct mpic *mpic, struct pt_regs *regs) | 1220 | unsigned int mpic_get_one_irq(struct mpic *mpic) |
1221 | { | 1221 | { |
1222 | u32 src; | 1222 | u32 src; |
1223 | 1223 | ||
@@ -1230,13 +1230,13 @@ unsigned int mpic_get_one_irq(struct mpic *mpic, struct pt_regs *regs) | |||
1230 | return irq_linear_revmap(mpic->irqhost, src); | 1230 | return irq_linear_revmap(mpic->irqhost, src); |
1231 | } | 1231 | } |
1232 | 1232 | ||
1233 | unsigned int mpic_get_irq(struct pt_regs *regs) | 1233 | unsigned int mpic_get_irq(void) |
1234 | { | 1234 | { |
1235 | struct mpic *mpic = mpic_primary; | 1235 | struct mpic *mpic = mpic_primary; |
1236 | 1236 | ||
1237 | BUG_ON(mpic == NULL); | 1237 | BUG_ON(mpic == NULL); |
1238 | 1238 | ||
1239 | return mpic_get_one_irq(mpic, regs); | 1239 | return mpic_get_one_irq(mpic); |
1240 | } | 1240 | } |
1241 | 1241 | ||
1242 | 1242 | ||
diff --git a/arch/powerpc/sysdev/qe_lib/qe_ic.c b/arch/powerpc/sysdev/qe_lib/qe_ic.c index c229d07d4957..6995f51b9488 100644 --- a/arch/powerpc/sysdev/qe_lib/qe_ic.c +++ b/arch/powerpc/sysdev/qe_lib/qe_ic.c | |||
@@ -300,7 +300,7 @@ static struct irq_host_ops qe_ic_host_ops = { | |||
300 | }; | 300 | }; |
301 | 301 | ||
302 | /* Return an interrupt vector or NO_IRQ if no interrupt is pending. */ | 302 | /* Return an interrupt vector or NO_IRQ if no interrupt is pending. */ |
303 | unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic, struct pt_regs *regs) | 303 | unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic) |
304 | { | 304 | { |
305 | int irq; | 305 | int irq; |
306 | 306 | ||
@@ -316,7 +316,7 @@ unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic, struct pt_regs *regs) | |||
316 | } | 316 | } |
317 | 317 | ||
318 | /* Return an interrupt vector or NO_IRQ if no interrupt is pending. */ | 318 | /* Return an interrupt vector or NO_IRQ if no interrupt is pending. */ |
319 | unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic, struct pt_regs *regs) | 319 | unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic) |
320 | { | 320 | { |
321 | int irq; | 321 | int irq; |
322 | 322 | ||
@@ -333,33 +333,31 @@ unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic, struct pt_regs *regs) | |||
333 | 333 | ||
334 | /* FIXME: We mask all the QE Low interrupts while handling. We should | 334 | /* FIXME: We mask all the QE Low interrupts while handling. We should |
335 | * let other interrupt come in, but BAD interrupts are generated */ | 335 | * let other interrupt come in, but BAD interrupts are generated */ |
336 | void fastcall qe_ic_cascade_low(unsigned int irq, struct irq_desc *desc, | 336 | void fastcall qe_ic_cascade_low(unsigned int irq, struct irq_desc *desc) |
337 | struct pt_regs *regs) | ||
338 | { | 337 | { |
339 | struct qe_ic *qe_ic = desc->handler_data; | 338 | struct qe_ic *qe_ic = desc->handler_data; |
340 | struct irq_chip *chip = irq_desc[irq].chip; | 339 | struct irq_chip *chip = irq_desc[irq].chip; |
341 | 340 | ||
342 | unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic, regs); | 341 | unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic); |
343 | 342 | ||
344 | chip->mask_ack(irq); | 343 | chip->mask_ack(irq); |
345 | if (cascade_irq != NO_IRQ) | 344 | if (cascade_irq != NO_IRQ) |
346 | generic_handle_irq(cascade_irq, regs); | 345 | generic_handle_irq(cascade_irq); |
347 | chip->unmask(irq); | 346 | chip->unmask(irq); |
348 | } | 347 | } |
349 | 348 | ||
350 | /* FIXME: We mask all the QE High interrupts while handling. We should | 349 | /* FIXME: We mask all the QE High interrupts while handling. We should |
351 | * let other interrupt come in, but BAD interrupts are generated */ | 350 | * let other interrupt come in, but BAD interrupts are generated */ |
352 | void fastcall qe_ic_cascade_high(unsigned int irq, struct irq_desc *desc, | 351 | void fastcall qe_ic_cascade_high(unsigned int irq, struct irq_desc *desc) |
353 | struct pt_regs *regs) | ||
354 | { | 352 | { |
355 | struct qe_ic *qe_ic = desc->handler_data; | 353 | struct qe_ic *qe_ic = desc->handler_data; |
356 | struct irq_chip *chip = irq_desc[irq].chip; | 354 | struct irq_chip *chip = irq_desc[irq].chip; |
357 | 355 | ||
358 | unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic, regs); | 356 | unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic); |
359 | 357 | ||
360 | chip->mask_ack(irq); | 358 | chip->mask_ack(irq); |
361 | if (cascade_irq != NO_IRQ) | 359 | if (cascade_irq != NO_IRQ) |
362 | generic_handle_irq(cascade_irq, regs); | 360 | generic_handle_irq(cascade_irq); |
363 | chip->unmask(irq); | 361 | chip->unmask(irq); |
364 | } | 362 | } |
365 | 363 | ||
diff --git a/arch/powerpc/sysdev/qe_lib/qe_io.c b/arch/powerpc/sysdev/qe_lib/qe_io.c index aea435970389..0afe6bfe3714 100644 --- a/arch/powerpc/sysdev/qe_lib/qe_io.c +++ b/arch/powerpc/sysdev/qe_lib/qe_io.c | |||
@@ -14,7 +14,6 @@ | |||
14 | * option) any later version. | 14 | * option) any later version. |
15 | */ | 15 | */ |
16 | 16 | ||
17 | #include <linux/config.h> | ||
18 | #include <linux/stddef.h> | 17 | #include <linux/stddef.h> |
19 | #include <linux/kernel.h> | 18 | #include <linux/kernel.h> |
20 | #include <linux/init.h> | 19 | #include <linux/init.h> |
diff --git a/arch/powerpc/sysdev/tsi108_pci.c b/arch/powerpc/sysdev/tsi108_pci.c index c28f69bef8e2..322f86e93de5 100644 --- a/arch/powerpc/sysdev/tsi108_pci.c +++ b/arch/powerpc/sysdev/tsi108_pci.c | |||
@@ -405,11 +405,10 @@ void __init tsi108_pci_int_init(void) | |||
405 | init_pci_source(); | 405 | init_pci_source(); |
406 | } | 406 | } |
407 | 407 | ||
408 | void tsi108_irq_cascade(unsigned int irq, struct irq_desc *desc, | 408 | void tsi108_irq_cascade(unsigned int irq, struct irq_desc *desc) |
409 | struct pt_regs *regs) | ||
410 | { | 409 | { |
411 | unsigned int cascade_irq = get_pci_source(); | 410 | unsigned int cascade_irq = get_pci_source(); |
412 | if (cascade_irq != NO_IRQ) | 411 | if (cascade_irq != NO_IRQ) |
413 | generic_handle_irq(cascade_irq, regs); | 412 | generic_handle_irq(cascade_irq); |
414 | desc->chip->eoi(irq); | 413 | desc->chip->eoi(irq); |
415 | } | 414 | } |
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c index 5a854f36383c..f56ffef4defa 100644 --- a/arch/powerpc/xmon/xmon.c +++ b/arch/powerpc/xmon/xmon.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <asm/rtas.h> | 36 | #include <asm/rtas.h> |
37 | #include <asm/sstep.h> | 37 | #include <asm/sstep.h> |
38 | #include <asm/bug.h> | 38 | #include <asm/bug.h> |
39 | #include <asm/irq_regs.h> | ||
39 | 40 | ||
40 | #ifdef CONFIG_PPC64 | 41 | #ifdef CONFIG_PPC64 |
41 | #include <asm/hvcall.h> | 42 | #include <asm/hvcall.h> |
@@ -521,13 +522,12 @@ int xmon(struct pt_regs *excp) | |||
521 | } | 522 | } |
522 | EXPORT_SYMBOL(xmon); | 523 | EXPORT_SYMBOL(xmon); |
523 | 524 | ||
524 | irqreturn_t | 525 | irqreturn_t xmon_irq(int irq, void *d) |
525 | xmon_irq(int irq, void *d, struct pt_regs *regs) | ||
526 | { | 526 | { |
527 | unsigned long flags; | 527 | unsigned long flags; |
528 | local_irq_save(flags); | 528 | local_irq_save(flags); |
529 | printf("Keyboard interrupt\n"); | 529 | printf("Keyboard interrupt\n"); |
530 | xmon(regs); | 530 | xmon(get_irq_regs()); |
531 | local_irq_restore(flags); | 531 | local_irq_restore(flags); |
532 | return IRQ_HANDLED; | 532 | return IRQ_HANDLED; |
533 | } | 533 | } |
diff --git a/arch/ppc/4xx_io/serial_sicc.c b/arch/ppc/4xx_io/serial_sicc.c index 87fe9a89dba7..e35483961b90 100644 --- a/arch/ppc/4xx_io/serial_sicc.c +++ b/arch/ppc/4xx_io/serial_sicc.c | |||
@@ -414,7 +414,7 @@ static void siccuart_event(struct SICC_info *info, int event) | |||
414 | } | 414 | } |
415 | 415 | ||
416 | static void | 416 | static void |
417 | siccuart_rx_chars(struct SICC_info *info, struct pt_regs *regs) | 417 | siccuart_rx_chars(struct SICC_info *info) |
418 | { | 418 | { |
419 | struct tty_struct *tty = info->tty; | 419 | struct tty_struct *tty = info->tty; |
420 | unsigned int status, ch, rsr, flg, ignored = 0; | 420 | unsigned int status, ch, rsr, flg, ignored = 0; |
@@ -441,7 +441,7 @@ siccuart_rx_chars(struct SICC_info *info, struct pt_regs *regs) | |||
441 | #ifdef SUPPORT_SYSRQ | 441 | #ifdef SUPPORT_SYSRQ |
442 | if (info->sysrq) { | 442 | if (info->sysrq) { |
443 | if (ch && time_before(jiffies, info->sysrq)) { | 443 | if (ch && time_before(jiffies, info->sysrq)) { |
444 | handle_sysrq(ch, regs, NULL); | 444 | handle_sysrq(ch, NULL); |
445 | info->sysrq = 0; | 445 | info->sysrq = 0; |
446 | goto ignore_char; | 446 | goto ignore_char; |
447 | } | 447 | } |
@@ -553,15 +553,15 @@ static void siccuart_tx_chars(struct SICC_info *info) | |||
553 | } | 553 | } |
554 | 554 | ||
555 | 555 | ||
556 | static irqreturn_t siccuart_int_rx(int irq, void *dev_id, struct pt_regs *regs) | 556 | static irqreturn_t siccuart_int_rx(int irq, void *dev_id) |
557 | { | 557 | { |
558 | struct SICC_info *info = dev_id; | 558 | struct SICC_info *info = dev_id; |
559 | siccuart_rx_chars(info, regs); | 559 | siccuart_rx_chars(info) |
560 | return IRQ_HANDLED; | 560 | return IRQ_HANDLED; |
561 | } | 561 | } |
562 | 562 | ||
563 | 563 | ||
564 | static irqreturn_t siccuart_int_tx(int irq, void *dev_id, struct pt_regs *regs) | 564 | static irqreturn_t siccuart_int_tx(int irq, void *dev_id) |
565 | { | 565 | { |
566 | struct SICC_info *info = dev_id; | 566 | struct SICC_info *info = dev_id; |
567 | siccuart_tx_chars(info); | 567 | siccuart_tx_chars(info); |
diff --git a/arch/ppc/8260_io/enet.c b/arch/ppc/8260_io/enet.c index ac6d55fe2235..a6056c29cf00 100644 --- a/arch/ppc/8260_io/enet.c +++ b/arch/ppc/8260_io/enet.c | |||
@@ -122,7 +122,7 @@ struct scc_enet_private { | |||
122 | static int scc_enet_open(struct net_device *dev); | 122 | static int scc_enet_open(struct net_device *dev); |
123 | static int scc_enet_start_xmit(struct sk_buff *skb, struct net_device *dev); | 123 | static int scc_enet_start_xmit(struct sk_buff *skb, struct net_device *dev); |
124 | static int scc_enet_rx(struct net_device *dev); | 124 | static int scc_enet_rx(struct net_device *dev); |
125 | static irqreturn_t scc_enet_interrupt(int irq, void *dev_id, struct pt_regs *); | 125 | static irqreturn_t scc_enet_interrupt(int irq, void *dev_id); |
126 | static int scc_enet_close(struct net_device *dev); | 126 | static int scc_enet_close(struct net_device *dev); |
127 | static struct net_device_stats *scc_enet_get_stats(struct net_device *dev); | 127 | static struct net_device_stats *scc_enet_get_stats(struct net_device *dev); |
128 | static void set_multicast_list(struct net_device *dev); | 128 | static void set_multicast_list(struct net_device *dev); |
@@ -273,7 +273,7 @@ scc_enet_timeout(struct net_device *dev) | |||
273 | * This is called from the CPM handler, not the MPC core interrupt. | 273 | * This is called from the CPM handler, not the MPC core interrupt. |
274 | */ | 274 | */ |
275 | static irqreturn_t | 275 | static irqreturn_t |
276 | scc_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs) | 276 | scc_enet_interrupt(int irq, void * dev_id) |
277 | { | 277 | { |
278 | struct net_device *dev = dev_id; | 278 | struct net_device *dev = dev_id; |
279 | volatile struct scc_enet_private *cep; | 279 | volatile struct scc_enet_private *cep; |
diff --git a/arch/ppc/8260_io/fcc_enet.c b/arch/ppc/8260_io/fcc_enet.c index e347fe88316d..2e1943e27819 100644 --- a/arch/ppc/8260_io/fcc_enet.c +++ b/arch/ppc/8260_io/fcc_enet.c | |||
@@ -140,7 +140,7 @@ typedef struct { | |||
140 | static int fcc_enet_open(struct net_device *dev); | 140 | static int fcc_enet_open(struct net_device *dev); |
141 | static int fcc_enet_start_xmit(struct sk_buff *skb, struct net_device *dev); | 141 | static int fcc_enet_start_xmit(struct sk_buff *skb, struct net_device *dev); |
142 | static int fcc_enet_rx(struct net_device *dev); | 142 | static int fcc_enet_rx(struct net_device *dev); |
143 | static irqreturn_t fcc_enet_interrupt(int irq, void *dev_id, struct pt_regs *); | 143 | static irqreturn_t fcc_enet_interrupt(int irq, void *dev_id); |
144 | static int fcc_enet_close(struct net_device *dev); | 144 | static int fcc_enet_close(struct net_device *dev); |
145 | static struct net_device_stats *fcc_enet_get_stats(struct net_device *dev); | 145 | static struct net_device_stats *fcc_enet_get_stats(struct net_device *dev); |
146 | /* static void set_multicast_list(struct net_device *dev); */ | 146 | /* static void set_multicast_list(struct net_device *dev); */ |
@@ -524,7 +524,7 @@ fcc_enet_timeout(struct net_device *dev) | |||
524 | 524 | ||
525 | /* The interrupt handler. */ | 525 | /* The interrupt handler. */ |
526 | static irqreturn_t | 526 | static irqreturn_t |
527 | fcc_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs) | 527 | fcc_enet_interrupt(int irq, void * dev_id) |
528 | { | 528 | { |
529 | struct net_device *dev = dev_id; | 529 | struct net_device *dev = dev_id; |
530 | volatile struct fcc_enet_private *cep; | 530 | volatile struct fcc_enet_private *cep; |
@@ -1563,7 +1563,7 @@ mii_discover_phy(uint mii_reg, struct net_device *dev) | |||
1563 | #ifdef PHY_INTERRUPT | 1563 | #ifdef PHY_INTERRUPT |
1564 | /* This interrupt occurs when the PHY detects a link change. */ | 1564 | /* This interrupt occurs when the PHY detects a link change. */ |
1565 | static irqreturn_t | 1565 | static irqreturn_t |
1566 | mii_link_interrupt(int irq, void * dev_id, struct pt_regs * regs) | 1566 | mii_link_interrupt(int irq, void * dev_id) |
1567 | { | 1567 | { |
1568 | struct net_device *dev = dev_id; | 1568 | struct net_device *dev = dev_id; |
1569 | struct fcc_enet_private *fep = dev->priv; | 1569 | struct fcc_enet_private *fep = dev->priv; |
diff --git a/arch/ppc/8xx_io/commproc.c b/arch/ppc/8xx_io/commproc.c index 9b3ace26280c..3b23bcb35b7a 100644 --- a/arch/ppc/8xx_io/commproc.c +++ b/arch/ppc/8xx_io/commproc.c | |||
@@ -47,12 +47,12 @@ cpm8xx_t *cpmp; /* Pointer to comm processor space */ | |||
47 | /* CPM interrupt vector functions. | 47 | /* CPM interrupt vector functions. |
48 | */ | 48 | */ |
49 | struct cpm_action { | 49 | struct cpm_action { |
50 | void (*handler)(void *, struct pt_regs * regs); | 50 | void (*handler)(void *); |
51 | void *dev_id; | 51 | void *dev_id; |
52 | }; | 52 | }; |
53 | static struct cpm_action cpm_vecs[CPMVEC_NR]; | 53 | static struct cpm_action cpm_vecs[CPMVEC_NR]; |
54 | static irqreturn_t cpm_interrupt(int irq, void * dev, struct pt_regs * regs); | 54 | static irqreturn_t cpm_interrupt(int irq, void * dev); |
55 | static irqreturn_t cpm_error_interrupt(int irq, void *dev, struct pt_regs * regs); | 55 | static irqreturn_t cpm_error_interrupt(int irq, void *dev); |
56 | static void alloc_host_memory(void); | 56 | static void alloc_host_memory(void); |
57 | /* Define a table of names to identify CPM interrupt handlers in | 57 | /* Define a table of names to identify CPM interrupt handlers in |
58 | * /proc/interrupts. | 58 | * /proc/interrupts. |
@@ -205,7 +205,7 @@ cpm_interrupt_init(void) | |||
205 | * Get the CPM interrupt vector. | 205 | * Get the CPM interrupt vector. |
206 | */ | 206 | */ |
207 | int | 207 | int |
208 | cpm_get_irq(struct pt_regs *regs) | 208 | cpm_get_irq(void) |
209 | { | 209 | { |
210 | int cpm_vec; | 210 | int cpm_vec; |
211 | 211 | ||
@@ -222,7 +222,7 @@ cpm_get_irq(struct pt_regs *regs) | |||
222 | /* CPM interrupt controller cascade interrupt. | 222 | /* CPM interrupt controller cascade interrupt. |
223 | */ | 223 | */ |
224 | static irqreturn_t | 224 | static irqreturn_t |
225 | cpm_interrupt(int irq, void * dev, struct pt_regs * regs) | 225 | cpm_interrupt(int irq, void * dev) |
226 | { | 226 | { |
227 | /* This interrupt handler never actually gets called. It is | 227 | /* This interrupt handler never actually gets called. It is |
228 | * installed only to unmask the CPM cascade interrupt in the SIU | 228 | * installed only to unmask the CPM cascade interrupt in the SIU |
@@ -237,7 +237,7 @@ cpm_interrupt(int irq, void * dev, struct pt_regs * regs) | |||
237 | * tests in the interrupt handler. | 237 | * tests in the interrupt handler. |
238 | */ | 238 | */ |
239 | static irqreturn_t | 239 | static irqreturn_t |
240 | cpm_error_interrupt(int irq, void *dev, struct pt_regs *regs) | 240 | cpm_error_interrupt(int irq, void *dev) |
241 | { | 241 | { |
242 | return IRQ_HANDLED; | 242 | return IRQ_HANDLED; |
243 | } | 243 | } |
@@ -246,11 +246,11 @@ cpm_error_interrupt(int irq, void *dev, struct pt_regs *regs) | |||
246 | * request_irq() to the handler prototype required by cpm_install_handler(). | 246 | * request_irq() to the handler prototype required by cpm_install_handler(). |
247 | */ | 247 | */ |
248 | static irqreturn_t | 248 | static irqreturn_t |
249 | cpm_handler_helper(int irq, void *dev_id, struct pt_regs *regs) | 249 | cpm_handler_helper(int irq, void *dev_id) |
250 | { | 250 | { |
251 | int cpm_vec = irq - CPM_IRQ_OFFSET; | 251 | int cpm_vec = irq - CPM_IRQ_OFFSET; |
252 | 252 | ||
253 | (*cpm_vecs[cpm_vec].handler)(dev_id, regs); | 253 | (*cpm_vecs[cpm_vec].handler)(dev_id); |
254 | 254 | ||
255 | return IRQ_HANDLED; | 255 | return IRQ_HANDLED; |
256 | } | 256 | } |
@@ -267,8 +267,7 @@ cpm_handler_helper(int irq, void *dev_id, struct pt_regs *regs) | |||
267 | * request_irq() or cpm_install_handler(). | 267 | * request_irq() or cpm_install_handler(). |
268 | */ | 268 | */ |
269 | void | 269 | void |
270 | cpm_install_handler(int cpm_vec, void (*handler)(void *, struct pt_regs *regs), | 270 | cpm_install_handler(int cpm_vec, void (*handler)(void *), void *dev_id) |
271 | void *dev_id) | ||
272 | { | 271 | { |
273 | int err; | 272 | int err; |
274 | 273 | ||
diff --git a/arch/ppc/8xx_io/cs4218_tdm.c b/arch/ppc/8xx_io/cs4218_tdm.c index f5f300fc213d..959d31c26cbb 100644 --- a/arch/ppc/8xx_io/cs4218_tdm.c +++ b/arch/ppc/8xx_io/cs4218_tdm.c | |||
@@ -331,7 +331,7 @@ static int CS_SetFormat(int format); | |||
331 | static int CS_SetVolume(int volume); | 331 | static int CS_SetVolume(int volume); |
332 | static void cs4218_tdm_tx_intr(void *devid); | 332 | static void cs4218_tdm_tx_intr(void *devid); |
333 | static void cs4218_tdm_rx_intr(void *devid); | 333 | static void cs4218_tdm_rx_intr(void *devid); |
334 | static void cs4218_intr(void *devid, struct pt_regs *regs); | 334 | static void cs4218_intr(void *devid); |
335 | static int cs_get_volume(uint reg); | 335 | static int cs_get_volume(uint reg); |
336 | static int cs_volume_setter(int volume, int mute); | 336 | static int cs_volume_setter(int volume, int mute); |
337 | static int cs_get_gain(uint reg); | 337 | static int cs_get_gain(uint reg); |
@@ -2646,7 +2646,7 @@ int __init tdm8xx_sound_init(void) | |||
2646 | * full duplex operation. | 2646 | * full duplex operation. |
2647 | */ | 2647 | */ |
2648 | static void | 2648 | static void |
2649 | cs4218_intr(void *dev_id, struct pt_regs *regs) | 2649 | cs4218_intr(void *dev_id) |
2650 | { | 2650 | { |
2651 | volatile smc_t *sp; | 2651 | volatile smc_t *sp; |
2652 | volatile cpm8xx_t *cp; | 2652 | volatile cpm8xx_t *cp; |
diff --git a/arch/ppc/8xx_io/enet.c b/arch/ppc/8xx_io/enet.c index a695375c3e4c..b23c45bc151a 100644 --- a/arch/ppc/8xx_io/enet.c +++ b/arch/ppc/8xx_io/enet.c | |||
@@ -149,7 +149,7 @@ struct scc_enet_private { | |||
149 | static int scc_enet_open(struct net_device *dev); | 149 | static int scc_enet_open(struct net_device *dev); |
150 | static int scc_enet_start_xmit(struct sk_buff *skb, struct net_device *dev); | 150 | static int scc_enet_start_xmit(struct sk_buff *skb, struct net_device *dev); |
151 | static int scc_enet_rx(struct net_device *dev); | 151 | static int scc_enet_rx(struct net_device *dev); |
152 | static void scc_enet_interrupt(void *dev_id, struct pt_regs *regs); | 152 | static void scc_enet_interrupt(void *dev_id); |
153 | static int scc_enet_close(struct net_device *dev); | 153 | static int scc_enet_close(struct net_device *dev); |
154 | static struct net_device_stats *scc_enet_get_stats(struct net_device *dev); | 154 | static struct net_device_stats *scc_enet_get_stats(struct net_device *dev); |
155 | static void set_multicast_list(struct net_device *dev); | 155 | static void set_multicast_list(struct net_device *dev); |
@@ -305,7 +305,7 @@ scc_enet_timeout(struct net_device *dev) | |||
305 | * This is called from the CPM handler, not the MPC core interrupt. | 305 | * This is called from the CPM handler, not the MPC core interrupt. |
306 | */ | 306 | */ |
307 | static void | 307 | static void |
308 | scc_enet_interrupt(void *dev_id, struct pt_regs *regs) | 308 | scc_enet_interrupt(void *dev_id) |
309 | { | 309 | { |
310 | struct net_device *dev = dev_id; | 310 | struct net_device *dev = dev_id; |
311 | volatile struct scc_enet_private *cep; | 311 | volatile struct scc_enet_private *cep; |
diff --git a/arch/ppc/8xx_io/fec.c b/arch/ppc/8xx_io/fec.c index 8b6295bbb564..2f9fa9e3d331 100644 --- a/arch/ppc/8xx_io/fec.c +++ b/arch/ppc/8xx_io/fec.c | |||
@@ -198,8 +198,7 @@ static int fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev); | |||
198 | #ifdef CONFIG_USE_MDIO | 198 | #ifdef CONFIG_USE_MDIO |
199 | static void fec_enet_mii(struct net_device *dev); | 199 | static void fec_enet_mii(struct net_device *dev); |
200 | #endif /* CONFIG_USE_MDIO */ | 200 | #endif /* CONFIG_USE_MDIO */ |
201 | static irqreturn_t fec_enet_interrupt(int irq, void * dev_id, | 201 | static irqreturn_t fec_enet_interrupt(int irq, void * dev_id); |
202 | struct pt_regs * regs); | ||
203 | #ifdef CONFIG_FEC_PACKETHOOK | 202 | #ifdef CONFIG_FEC_PACKETHOOK |
204 | static void fec_enet_tx(struct net_device *dev, __u32 regval); | 203 | static void fec_enet_tx(struct net_device *dev, __u32 regval); |
205 | static void fec_enet_rx(struct net_device *dev, __u32 regval); | 204 | static void fec_enet_rx(struct net_device *dev, __u32 regval); |
@@ -472,7 +471,7 @@ fec_timeout(struct net_device *dev) | |||
472 | * This is called from the MPC core interrupt. | 471 | * This is called from the MPC core interrupt. |
473 | */ | 472 | */ |
474 | static irqreturn_t | 473 | static irqreturn_t |
475 | fec_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs) | 474 | fec_enet_interrupt(int irq, void * dev_id) |
476 | { | 475 | { |
477 | struct net_device *dev = dev_id; | 476 | struct net_device *dev = dev_id; |
478 | volatile fec_t *fecp; | 477 | volatile fec_t *fecp; |
@@ -1408,7 +1407,7 @@ static | |||
1408 | #ifdef CONFIG_RPXCLASSIC | 1407 | #ifdef CONFIG_RPXCLASSIC |
1409 | void mii_link_interrupt(void *dev_id) | 1408 | void mii_link_interrupt(void *dev_id) |
1410 | #else | 1409 | #else |
1411 | irqreturn_t mii_link_interrupt(int irq, void * dev_id, struct pt_regs * regs) | 1410 | irqreturn_t mii_link_interrupt(int irq, void * dev_id) |
1412 | #endif | 1411 | #endif |
1413 | { | 1412 | { |
1414 | #ifdef CONFIG_USE_MDIO | 1413 | #ifdef CONFIG_USE_MDIO |
diff --git a/arch/ppc/kernel/smp.c b/arch/ppc/kernel/smp.c index ca57e896a36c..96a55972b986 100644 --- a/arch/ppc/kernel/smp.c +++ b/arch/ppc/kernel/smp.c | |||
@@ -84,7 +84,7 @@ smp_message_pass(int target, int msg) | |||
84 | /* | 84 | /* |
85 | * Common functions | 85 | * Common functions |
86 | */ | 86 | */ |
87 | void smp_message_recv(int msg, struct pt_regs *regs) | 87 | void smp_message_recv(int msg) |
88 | { | 88 | { |
89 | atomic_inc(&ipi_recv); | 89 | atomic_inc(&ipi_recv); |
90 | 90 | ||
@@ -100,7 +100,7 @@ void smp_message_recv(int msg, struct pt_regs *regs) | |||
100 | break; | 100 | break; |
101 | #ifdef CONFIG_XMON | 101 | #ifdef CONFIG_XMON |
102 | case PPC_MSG_XMON_BREAK: | 102 | case PPC_MSG_XMON_BREAK: |
103 | xmon(regs); | 103 | xmon(get_irq_regs()); |
104 | break; | 104 | break; |
105 | #endif /* CONFIG_XMON */ | 105 | #endif /* CONFIG_XMON */ |
106 | default: | 106 | default: |
diff --git a/arch/ppc/kernel/time.c b/arch/ppc/kernel/time.c index 187388625a76..d4b2cf74da6a 100644 --- a/arch/ppc/kernel/time.c +++ b/arch/ppc/kernel/time.c | |||
@@ -142,7 +142,7 @@ void timer_interrupt(struct pt_regs * regs) | |||
142 | while ((next_dec = tb_ticks_per_jiffy - tb_delta(&jiffy_stamp)) <= 0) { | 142 | while ((next_dec = tb_ticks_per_jiffy - tb_delta(&jiffy_stamp)) <= 0) { |
143 | jiffy_stamp += tb_ticks_per_jiffy; | 143 | jiffy_stamp += tb_ticks_per_jiffy; |
144 | 144 | ||
145 | profile_tick(CPU_PROFILING, regs); | 145 | profile_tick(CPU_PROFILING); |
146 | update_process_times(user_mode(regs)); | 146 | update_process_times(user_mode(regs)); |
147 | 147 | ||
148 | if (smp_processor_id()) | 148 | if (smp_processor_id()) |
diff --git a/arch/ppc/platforms/85xx/mpc8560_ads.c b/arch/ppc/platforms/85xx/mpc8560_ads.c index 94badafe4ef1..14ecec7bbed7 100644 --- a/arch/ppc/platforms/85xx/mpc8560_ads.c +++ b/arch/ppc/platforms/85xx/mpc8560_ads.c | |||
@@ -211,10 +211,10 @@ mpc8560ads_setup_arch(void) | |||
211 | #endif | 211 | #endif |
212 | } | 212 | } |
213 | 213 | ||
214 | static irqreturn_t cpm2_cascade(int irq, void *dev_id, struct pt_regs *regs) | 214 | static irqreturn_t cpm2_cascade(int irq, void *dev_id) |
215 | { | 215 | { |
216 | while ((irq = cpm2_get_irq(regs)) >= 0) | 216 | while ((irq = cpm2_get_irq()) >= 0) |
217 | __do_IRQ(irq, regs); | 217 | __do_IRQ(irq); |
218 | return IRQ_HANDLED; | 218 | return IRQ_HANDLED; |
219 | } | 219 | } |
220 | 220 | ||
diff --git a/arch/ppc/platforms/85xx/mpc85xx_cds_common.c b/arch/ppc/platforms/85xx/mpc85xx_cds_common.c index 75204588a3e7..5ce0f69c1db6 100644 --- a/arch/ppc/platforms/85xx/mpc85xx_cds_common.c +++ b/arch/ppc/platforms/85xx/mpc85xx_cds_common.c | |||
@@ -127,10 +127,10 @@ mpc85xx_cds_show_cpuinfo(struct seq_file *m) | |||
127 | } | 127 | } |
128 | 128 | ||
129 | #ifdef CONFIG_CPM2 | 129 | #ifdef CONFIG_CPM2 |
130 | static irqreturn_t cpm2_cascade(int irq, void *dev_id, struct pt_regs *regs) | 130 | static irqreturn_t cpm2_cascade(int irq, void *dev_id) |
131 | { | 131 | { |
132 | while((irq = cpm2_get_irq(regs)) >= 0) | 132 | while((irq = cpm2_get_irq()) >= 0) |
133 | __do_IRQ(irq, regs); | 133 | __do_IRQ(irq); |
134 | return IRQ_HANDLED; | 134 | return IRQ_HANDLED; |
135 | } | 135 | } |
136 | 136 | ||
diff --git a/arch/ppc/platforms/85xx/stx_gp3.c b/arch/ppc/platforms/85xx/stx_gp3.c index 495aa79bb3a1..4bb18ab27672 100644 --- a/arch/ppc/platforms/85xx/stx_gp3.c +++ b/arch/ppc/platforms/85xx/stx_gp3.c | |||
@@ -156,10 +156,10 @@ gp3_setup_arch(void) | |||
156 | printk ("bi_immr_base = %8.8lx\n", binfo->bi_immr_base); | 156 | printk ("bi_immr_base = %8.8lx\n", binfo->bi_immr_base); |
157 | } | 157 | } |
158 | 158 | ||
159 | static irqreturn_t cpm2_cascade(int irq, void *dev_id, struct pt_regs *regs) | 159 | static irqreturn_t cpm2_cascade(int irq, void *dev_id) |
160 | { | 160 | { |
161 | while ((irq = cpm2_get_irq(regs)) >= 0) | 161 | while ((irq = cpm2_get_irq()) >= 0) |
162 | __do_IRQ(irq, regs); | 162 | __do_IRQ(irq); |
163 | 163 | ||
164 | return IRQ_HANDLED; | 164 | return IRQ_HANDLED; |
165 | } | 165 | } |
diff --git a/arch/ppc/platforms/85xx/tqm85xx.c b/arch/ppc/platforms/85xx/tqm85xx.c index 189ed4175f9f..dd45f2e18449 100644 --- a/arch/ppc/platforms/85xx/tqm85xx.c +++ b/arch/ppc/platforms/85xx/tqm85xx.c | |||
@@ -181,10 +181,10 @@ tqm85xx_setup_arch(void) | |||
181 | } | 181 | } |
182 | 182 | ||
183 | #ifdef CONFIG_MPC8560 | 183 | #ifdef CONFIG_MPC8560 |
184 | static irqreturn_t cpm2_cascade(int irq, void *dev_id, struct pt_regs *regs) | 184 | static irqreturn_t cpm2_cascade(int irq, void *dev_id) |
185 | { | 185 | { |
186 | while ((irq = cpm2_get_irq(regs)) >= 0) | 186 | while ((irq = cpm2_get_irq()) >= 0) |
187 | __do_IRQ(irq, regs); | 187 | __do_IRQ(irq); |
188 | return IRQ_HANDLED; | 188 | return IRQ_HANDLED; |
189 | } | 189 | } |
190 | 190 | ||
diff --git a/arch/ppc/platforms/apus_setup.c b/arch/ppc/platforms/apus_setup.c index 1d034ead2c9a..063274d2c503 100644 --- a/arch/ppc/platforms/apus_setup.c +++ b/arch/ppc/platforms/apus_setup.c | |||
@@ -492,7 +492,7 @@ apus_halt(void) | |||
492 | 492 | ||
493 | static unsigned char last_ipl[8]; | 493 | static unsigned char last_ipl[8]; |
494 | 494 | ||
495 | int apus_get_irq(struct pt_regs* regs) | 495 | int apus_get_irq(void) |
496 | { | 496 | { |
497 | unsigned char ipl_emu, mask; | 497 | unsigned char ipl_emu, mask; |
498 | unsigned int level; | 498 | unsigned int level; |
diff --git a/arch/ppc/platforms/hdpu.c b/arch/ppc/platforms/hdpu.c index e0f112a1fd0b..d809e17aa536 100644 --- a/arch/ppc/platforms/hdpu.c +++ b/arch/ppc/platforms/hdpu.c | |||
@@ -659,8 +659,7 @@ static void __init hdpu_map_io(void) | |||
659 | char hdpu_smp0[] = "SMP Cpu #0"; | 659 | char hdpu_smp0[] = "SMP Cpu #0"; |
660 | char hdpu_smp1[] = "SMP Cpu #1"; | 660 | char hdpu_smp1[] = "SMP Cpu #1"; |
661 | 661 | ||
662 | static irqreturn_t hdpu_smp_cpu0_int_handler(int irq, void *dev_id, | 662 | static irqreturn_t hdpu_smp_cpu0_int_handler(int irq, void *dev_id) |
663 | struct pt_regs *regs) | ||
664 | { | 663 | { |
665 | volatile unsigned int doorbell; | 664 | volatile unsigned int doorbell; |
666 | 665 | ||
@@ -670,22 +669,21 @@ static irqreturn_t hdpu_smp_cpu0_int_handler(int irq, void *dev_id, | |||
670 | mv64x60_write(&bh, MV64360_CPU0_DOORBELL_CLR, doorbell); | 669 | mv64x60_write(&bh, MV64360_CPU0_DOORBELL_CLR, doorbell); |
671 | 670 | ||
672 | if (doorbell & 1) { | 671 | if (doorbell & 1) { |
673 | smp_message_recv(0, regs); | 672 | smp_message_recv(0); |
674 | } | 673 | } |
675 | if (doorbell & 2) { | 674 | if (doorbell & 2) { |
676 | smp_message_recv(1, regs); | 675 | smp_message_recv(1); |
677 | } | 676 | } |
678 | if (doorbell & 4) { | 677 | if (doorbell & 4) { |
679 | smp_message_recv(2, regs); | 678 | smp_message_recv(2); |
680 | } | 679 | } |
681 | if (doorbell & 8) { | 680 | if (doorbell & 8) { |
682 | smp_message_recv(3, regs); | 681 | smp_message_recv(3); |
683 | } | 682 | } |
684 | return IRQ_HANDLED; | 683 | return IRQ_HANDLED; |
685 | } | 684 | } |
686 | 685 | ||
687 | static irqreturn_t hdpu_smp_cpu1_int_handler(int irq, void *dev_id, | 686 | static irqreturn_t hdpu_smp_cpu1_int_handler(int irq, void *dev_id) |
688 | struct pt_regs *regs) | ||
689 | { | 687 | { |
690 | volatile unsigned int doorbell; | 688 | volatile unsigned int doorbell; |
691 | 689 | ||
@@ -695,16 +693,16 @@ static irqreturn_t hdpu_smp_cpu1_int_handler(int irq, void *dev_id, | |||
695 | mv64x60_write(&bh, MV64360_CPU1_DOORBELL_CLR, doorbell); | 693 | mv64x60_write(&bh, MV64360_CPU1_DOORBELL_CLR, doorbell); |
696 | 694 | ||
697 | if (doorbell & 1) { | 695 | if (doorbell & 1) { |
698 | smp_message_recv(0, regs); | 696 | smp_message_recv(0); |
699 | } | 697 | } |
700 | if (doorbell & 2) { | 698 | if (doorbell & 2) { |
701 | smp_message_recv(1, regs); | 699 | smp_message_recv(1); |
702 | } | 700 | } |
703 | if (doorbell & 4) { | 701 | if (doorbell & 4) { |
704 | smp_message_recv(2, regs); | 702 | smp_message_recv(2); |
705 | } | 703 | } |
706 | if (doorbell & 8) { | 704 | if (doorbell & 8) { |
707 | smp_message_recv(3, regs); | 705 | smp_message_recv(3); |
708 | } | 706 | } |
709 | return IRQ_HANDLED; | 707 | return IRQ_HANDLED; |
710 | } | 708 | } |
diff --git a/arch/ppc/platforms/radstone_ppc7d.c b/arch/ppc/platforms/radstone_ppc7d.c index 3bb530af0297..13d70ab50bf1 100644 --- a/arch/ppc/platforms/radstone_ppc7d.c +++ b/arch/ppc/platforms/radstone_ppc7d.c | |||
@@ -451,11 +451,11 @@ static void __init ppc7d_calibrate_decr(void) | |||
451 | * Interrupt stuff | 451 | * Interrupt stuff |
452 | *****************************************************************************/ | 452 | *****************************************************************************/ |
453 | 453 | ||
454 | static irqreturn_t ppc7d_i8259_intr(int irq, void *dev_id, struct pt_regs *regs) | 454 | static irqreturn_t ppc7d_i8259_intr(int irq, void *dev_id) |
455 | { | 455 | { |
456 | u32 temp = mv64x60_read(&bh, MV64x60_GPP_INTR_CAUSE); | 456 | u32 temp = mv64x60_read(&bh, MV64x60_GPP_INTR_CAUSE); |
457 | if (temp & (1 << 28)) { | 457 | if (temp & (1 << 28)) { |
458 | i8259_irq(regs); | 458 | i8259_irq(); |
459 | mv64x60_write(&bh, MV64x60_GPP_INTR_CAUSE, temp & (~(1 << 28))); | 459 | mv64x60_write(&bh, MV64x60_GPP_INTR_CAUSE, temp & (~(1 << 28))); |
460 | return IRQ_HANDLED; | 460 | return IRQ_HANDLED; |
461 | } | 461 | } |
@@ -536,13 +536,13 @@ static u32 ppc7d_irq_canonicalize(u32 irq) | |||
536 | return irq; | 536 | return irq; |
537 | } | 537 | } |
538 | 538 | ||
539 | static int ppc7d_get_irq(struct pt_regs *regs) | 539 | static int ppc7d_get_irq(void) |
540 | { | 540 | { |
541 | int irq; | 541 | int irq; |
542 | 542 | ||
543 | irq = mv64360_get_irq(regs); | 543 | irq = mv64360_get_irq(); |
544 | if (irq == (mv64360_irq_base + MV64x60_IRQ_GPP28)) | 544 | if (irq == (mv64360_irq_base + MV64x60_IRQ_GPP28)) |
545 | irq = i8259_irq(regs); | 545 | irq = i8259_irq(); |
546 | return irq; | 546 | return irq; |
547 | } | 547 | } |
548 | 548 | ||
diff --git a/arch/ppc/platforms/sbc82xx.c b/arch/ppc/platforms/sbc82xx.c index 60b769c7f3fc..cc0935ccab7a 100644 --- a/arch/ppc/platforms/sbc82xx.c +++ b/arch/ppc/platforms/sbc82xx.c | |||
@@ -121,7 +121,7 @@ struct hw_interrupt_type sbc82xx_i8259_ic = { | |||
121 | .end = sbc82xx_i8259_end_irq, | 121 | .end = sbc82xx_i8259_end_irq, |
122 | }; | 122 | }; |
123 | 123 | ||
124 | static irqreturn_t sbc82xx_i8259_demux(int irq, void *dev_id, struct pt_regs *regs) | 124 | static irqreturn_t sbc82xx_i8259_demux(int irq, void *dev_id) |
125 | { | 125 | { |
126 | spin_lock(&sbc82xx_i8259_lock); | 126 | spin_lock(&sbc82xx_i8259_lock); |
127 | 127 | ||
@@ -139,7 +139,7 @@ static irqreturn_t sbc82xx_i8259_demux(int irq, void *dev_id, struct pt_regs *re | |||
139 | return IRQ_HANDLED; | 139 | return IRQ_HANDLED; |
140 | } | 140 | } |
141 | } | 141 | } |
142 | __do_IRQ(NR_SIU_INTS + irq, regs); | 142 | __do_IRQ(NR_SIU_INTS + irq); |
143 | return IRQ_HANDLED; | 143 | return IRQ_HANDLED; |
144 | } | 144 | } |
145 | 145 | ||
diff --git a/arch/ppc/syslib/cpc700.h b/arch/ppc/syslib/cpc700.h index 0a8a5d84390f..987e9aa0dd45 100644 --- a/arch/ppc/syslib/cpc700.h +++ b/arch/ppc/syslib/cpc700.h | |||
@@ -91,6 +91,6 @@ extern struct hw_interrupt_type cpc700_pic; | |||
91 | extern unsigned int cpc700_irq_assigns[32][2]; | 91 | extern unsigned int cpc700_irq_assigns[32][2]; |
92 | 92 | ||
93 | extern void __init cpc700_init_IRQ(void); | 93 | extern void __init cpc700_init_IRQ(void); |
94 | extern int cpc700_get_irq(struct pt_regs *); | 94 | extern int cpc700_get_irq(void); |
95 | 95 | ||
96 | #endif /* __PPC_SYSLIB_CPC700_H__ */ | 96 | #endif /* __PPC_SYSLIB_CPC700_H__ */ |
diff --git a/arch/ppc/syslib/cpc700_pic.c b/arch/ppc/syslib/cpc700_pic.c index 172aa215fdb0..d48e8f45c050 100644 --- a/arch/ppc/syslib/cpc700_pic.c +++ b/arch/ppc/syslib/cpc700_pic.c | |||
@@ -158,7 +158,7 @@ cpc700_init_IRQ(void) | |||
158 | * Find the highest IRQ that generating an interrupt, if any. | 158 | * Find the highest IRQ that generating an interrupt, if any. |
159 | */ | 159 | */ |
160 | int | 160 | int |
161 | cpc700_get_irq(struct pt_regs *regs) | 161 | cpc700_get_irq(void) |
162 | { | 162 | { |
163 | int irq = 0; | 163 | int irq = 0; |
164 | u_int irq_status, irq_test = 1; | 164 | u_int irq_status, irq_test = 1; |
diff --git a/arch/ppc/syslib/cpm2_pic.c b/arch/ppc/syslib/cpm2_pic.c index c0fee0beb815..fb2d5842641a 100644 --- a/arch/ppc/syslib/cpm2_pic.c +++ b/arch/ppc/syslib/cpm2_pic.c | |||
@@ -123,7 +123,7 @@ static struct hw_interrupt_type cpm2_pic = { | |||
123 | .end = cpm2_end_irq, | 123 | .end = cpm2_end_irq, |
124 | }; | 124 | }; |
125 | 125 | ||
126 | int cpm2_get_irq(struct pt_regs *regs) | 126 | int cpm2_get_irq(void) |
127 | { | 127 | { |
128 | int irq; | 128 | int irq; |
129 | unsigned long bits; | 129 | unsigned long bits; |
diff --git a/arch/ppc/syslib/cpm2_pic.h b/arch/ppc/syslib/cpm2_pic.h index 97cab8f13a1a..467339337a78 100644 --- a/arch/ppc/syslib/cpm2_pic.h +++ b/arch/ppc/syslib/cpm2_pic.h | |||
@@ -1,7 +1,7 @@ | |||
1 | #ifndef _PPC_KERNEL_CPM2_H | 1 | #ifndef _PPC_KERNEL_CPM2_H |
2 | #define _PPC_KERNEL_CPM2_H | 2 | #define _PPC_KERNEL_CPM2_H |
3 | 3 | ||
4 | extern int cpm2_get_irq(struct pt_regs *regs); | 4 | extern int cpm2_get_irq(void); |
5 | 5 | ||
6 | extern void cpm2_init_IRQ(void); | 6 | extern void cpm2_init_IRQ(void); |
7 | 7 | ||
diff --git a/arch/ppc/syslib/gt64260_pic.c b/arch/ppc/syslib/gt64260_pic.c index 7fd550a7d586..e84d432c0657 100644 --- a/arch/ppc/syslib/gt64260_pic.c +++ b/arch/ppc/syslib/gt64260_pic.c | |||
@@ -110,9 +110,6 @@ gt64260_init_irq(void) | |||
110 | * This function returns the lowest interrupt number of all interrupts that | 110 | * This function returns the lowest interrupt number of all interrupts that |
111 | * are currently asserted. | 111 | * are currently asserted. |
112 | * | 112 | * |
113 | * Input Variable(s): | ||
114 | * struct pt_regs* not used | ||
115 | * | ||
116 | * Output Variable(s): | 113 | * Output Variable(s): |
117 | * None. | 114 | * None. |
118 | * | 115 | * |
@@ -120,7 +117,7 @@ gt64260_init_irq(void) | |||
120 | * int <interrupt number> or -2 (bogus interrupt) | 117 | * int <interrupt number> or -2 (bogus interrupt) |
121 | */ | 118 | */ |
122 | int | 119 | int |
123 | gt64260_get_irq(struct pt_regs *regs) | 120 | gt64260_get_irq(void) |
124 | { | 121 | { |
125 | int irq; | 122 | int irq; |
126 | int irq_gpp; | 123 | int irq_gpp; |
@@ -229,7 +226,7 @@ gt64260_mask_irq(unsigned int irq) | |||
229 | } | 226 | } |
230 | 227 | ||
231 | static irqreturn_t | 228 | static irqreturn_t |
232 | gt64260_cpu_error_int_handler(int irq, void *dev_id, struct pt_regs *regs) | 229 | gt64260_cpu_error_int_handler(int irq, void *dev_id) |
233 | { | 230 | { |
234 | printk(KERN_ERR "gt64260_cpu_error_int_handler: %s 0x%08x\n", | 231 | printk(KERN_ERR "gt64260_cpu_error_int_handler: %s 0x%08x\n", |
235 | "Error on CPU interface - Cause regiser", | 232 | "Error on CPU interface - Cause regiser", |
@@ -250,7 +247,7 @@ gt64260_cpu_error_int_handler(int irq, void *dev_id, struct pt_regs *regs) | |||
250 | } | 247 | } |
251 | 248 | ||
252 | static irqreturn_t | 249 | static irqreturn_t |
253 | gt64260_pci_error_int_handler(int irq, void *dev_id, struct pt_regs *regs) | 250 | gt64260_pci_error_int_handler(int irq, void *dev_id) |
254 | { | 251 | { |
255 | u32 val; | 252 | u32 val; |
256 | unsigned int pci_bus = (unsigned int)dev_id; | 253 | unsigned int pci_bus = (unsigned int)dev_id; |
diff --git a/arch/ppc/syslib/i8259.c b/arch/ppc/syslib/i8259.c index eb35353af837..a43dda5a8334 100644 --- a/arch/ppc/syslib/i8259.c +++ b/arch/ppc/syslib/i8259.c | |||
@@ -28,7 +28,7 @@ static int i8259_pic_irq_offset; | |||
28 | * which is called. It should be noted that polling is broken on some | 28 | * which is called. It should be noted that polling is broken on some |
29 | * IBM and Motorola PReP boxes so we must use the int-ack feature on them. | 29 | * IBM and Motorola PReP boxes so we must use the int-ack feature on them. |
30 | */ | 30 | */ |
31 | int i8259_irq(struct pt_regs *regs) | 31 | int i8259_irq(void) |
32 | { | 32 | { |
33 | int irq; | 33 | int irq; |
34 | 34 | ||
diff --git a/arch/ppc/syslib/ibm440gx_common.c b/arch/ppc/syslib/ibm440gx_common.c index 4b77e6c8c87f..6ad52f4a26e1 100644 --- a/arch/ppc/syslib/ibm440gx_common.c +++ b/arch/ppc/syslib/ibm440gx_common.c | |||
@@ -119,7 +119,7 @@ static inline u32 l2c_diag(u32 addr) | |||
119 | return mfdcr(DCRN_L2C0_DATA); | 119 | return mfdcr(DCRN_L2C0_DATA); |
120 | } | 120 | } |
121 | 121 | ||
122 | static irqreturn_t l2c_error_handler(int irq, void* dev, struct pt_regs* regs) | 122 | static irqreturn_t l2c_error_handler(int irq, void* dev) |
123 | { | 123 | { |
124 | u32 sr = mfdcr(DCRN_L2C0_SR); | 124 | u32 sr = mfdcr(DCRN_L2C0_SR); |
125 | if (sr & L2C_SR_CPE){ | 125 | if (sr & L2C_SR_CPE){ |
diff --git a/arch/ppc/syslib/ipic.c b/arch/ppc/syslib/ipic.c index 46801f5ec03f..10659c24b1be 100644 --- a/arch/ppc/syslib/ipic.c +++ b/arch/ppc/syslib/ipic.c | |||
@@ -601,7 +601,7 @@ void ipic_clear_mcp_status(u32 mask) | |||
601 | } | 601 | } |
602 | 602 | ||
603 | /* Return an interrupt vector or -1 if no interrupt is pending. */ | 603 | /* Return an interrupt vector or -1 if no interrupt is pending. */ |
604 | int ipic_get_irq(struct pt_regs *regs) | 604 | int ipic_get_irq(void) |
605 | { | 605 | { |
606 | int irq; | 606 | int irq; |
607 | 607 | ||
diff --git a/arch/ppc/syslib/m82xx_pci.c b/arch/ppc/syslib/m82xx_pci.c index d3fa264e179e..e3b586b1ede9 100644 --- a/arch/ppc/syslib/m82xx_pci.c +++ b/arch/ppc/syslib/m82xx_pci.c | |||
@@ -117,7 +117,7 @@ struct hw_interrupt_type pq2pci_ic = { | |||
117 | }; | 117 | }; |
118 | 118 | ||
119 | static irqreturn_t | 119 | static irqreturn_t |
120 | pq2pci_irq_demux(int irq, void *dev_id, struct pt_regs *regs) | 120 | pq2pci_irq_demux(int irq, void *dev_id) |
121 | { | 121 | { |
122 | unsigned long stat, mask, pend; | 122 | unsigned long stat, mask, pend; |
123 | int bit; | 123 | int bit; |
@@ -130,7 +130,7 @@ pq2pci_irq_demux(int irq, void *dev_id, struct pt_regs *regs) | |||
130 | break; | 130 | break; |
131 | for (bit = 0; pend != 0; ++bit, pend <<= 1) { | 131 | for (bit = 0; pend != 0; ++bit, pend <<= 1) { |
132 | if (pend & 0x80000000) | 132 | if (pend & 0x80000000) |
133 | __do_IRQ(NR_CPM_INTS + bit, regs); | 133 | __do_IRQ(NR_CPM_INTS + bit); |
134 | } | 134 | } |
135 | } | 135 | } |
136 | 136 | ||
diff --git a/arch/ppc/syslib/m8xx_setup.c b/arch/ppc/syslib/m8xx_setup.c index 54303a7b4e69..d8d299bd1a12 100644 --- a/arch/ppc/syslib/m8xx_setup.c +++ b/arch/ppc/syslib/m8xx_setup.c | |||
@@ -169,7 +169,7 @@ abort(void) | |||
169 | } | 169 | } |
170 | 170 | ||
171 | /* A place holder for time base interrupts, if they are ever enabled. */ | 171 | /* A place holder for time base interrupts, if they are ever enabled. */ |
172 | irqreturn_t timebase_interrupt(int irq, void * dev, struct pt_regs * regs) | 172 | irqreturn_t timebase_interrupt(int irq, void * dev) |
173 | { | 173 | { |
174 | printk ("timebase_interrupt()\n"); | 174 | printk ("timebase_interrupt()\n"); |
175 | 175 | ||
diff --git a/arch/ppc/syslib/m8xx_wdt.c b/arch/ppc/syslib/m8xx_wdt.c index ac11d7bab443..fffac8cbeb51 100644 --- a/arch/ppc/syslib/m8xx_wdt.c +++ b/arch/ppc/syslib/m8xx_wdt.c | |||
@@ -21,7 +21,7 @@ | |||
21 | static int wdt_timeout; | 21 | static int wdt_timeout; |
22 | int m8xx_has_internal_rtc = 0; | 22 | int m8xx_has_internal_rtc = 0; |
23 | 23 | ||
24 | static irqreturn_t m8xx_wdt_interrupt(int, void *, struct pt_regs *); | 24 | static irqreturn_t m8xx_wdt_interrupt(int, void *); |
25 | static struct irqaction m8xx_wdt_irqaction = { | 25 | static struct irqaction m8xx_wdt_irqaction = { |
26 | .handler = m8xx_wdt_interrupt, | 26 | .handler = m8xx_wdt_interrupt, |
27 | .name = "watchdog", | 27 | .name = "watchdog", |
@@ -35,7 +35,7 @@ void m8xx_wdt_reset(void) | |||
35 | out_be16(&imap->im_siu_conf.sc_swsr, 0xaa39); /* write magic2 */ | 35 | out_be16(&imap->im_siu_conf.sc_swsr, 0xaa39); /* write magic2 */ |
36 | } | 36 | } |
37 | 37 | ||
38 | static irqreturn_t m8xx_wdt_interrupt(int irq, void *dev, struct pt_regs *regs) | 38 | static irqreturn_t m8xx_wdt_interrupt(int irq, void *dev) |
39 | { | 39 | { |
40 | volatile immap_t *imap = (volatile immap_t *)IMAP_ADDR; | 40 | volatile immap_t *imap = (volatile immap_t *)IMAP_ADDR; |
41 | 41 | ||
diff --git a/arch/ppc/syslib/mpc52xx_pic.c b/arch/ppc/syslib/mpc52xx_pic.c index 6425b5cee7db..af35a316544a 100644 --- a/arch/ppc/syslib/mpc52xx_pic.c +++ b/arch/ppc/syslib/mpc52xx_pic.c | |||
@@ -220,7 +220,7 @@ mpc52xx_init_irq(void) | |||
220 | } | 220 | } |
221 | 221 | ||
222 | int | 222 | int |
223 | mpc52xx_get_irq(struct pt_regs *regs) | 223 | mpc52xx_get_irq(void) |
224 | { | 224 | { |
225 | u32 status; | 225 | u32 status; |
226 | int irq = -1; | 226 | int irq = -1; |
diff --git a/arch/ppc/syslib/mv64360_pic.c b/arch/ppc/syslib/mv64360_pic.c index 3f6d162f87cf..4b7a3338e122 100644 --- a/arch/ppc/syslib/mv64360_pic.c +++ b/arch/ppc/syslib/mv64360_pic.c | |||
@@ -55,10 +55,9 @@ | |||
55 | 55 | ||
56 | static void mv64360_unmask_irq(unsigned int); | 56 | static void mv64360_unmask_irq(unsigned int); |
57 | static void mv64360_mask_irq(unsigned int); | 57 | static void mv64360_mask_irq(unsigned int); |
58 | static irqreturn_t mv64360_cpu_error_int_handler(int, void *, struct pt_regs *); | 58 | static irqreturn_t mv64360_cpu_error_int_handler(int, void *); |
59 | static irqreturn_t mv64360_sram_error_int_handler(int, void *, | 59 | static irqreturn_t mv64360_sram_error_int_handler(int, void *); |
60 | struct pt_regs *); | 60 | static irqreturn_t mv64360_pci_error_int_handler(int, void *); |
61 | static irqreturn_t mv64360_pci_error_int_handler(int, void *, struct pt_regs *); | ||
62 | 61 | ||
63 | /* ========================== local declarations =========================== */ | 62 | /* ========================== local declarations =========================== */ |
64 | 63 | ||
@@ -131,9 +130,6 @@ mv64360_init_irq(void) | |||
131 | * This function returns the lowest interrupt number of all interrupts that | 130 | * This function returns the lowest interrupt number of all interrupts that |
132 | * are currently asserted. | 131 | * are currently asserted. |
133 | * | 132 | * |
134 | * Input Variable(s): | ||
135 | * struct pt_regs* not used | ||
136 | * | ||
137 | * Output Variable(s): | 133 | * Output Variable(s): |
138 | * None. | 134 | * None. |
139 | * | 135 | * |
@@ -142,7 +138,7 @@ mv64360_init_irq(void) | |||
142 | * | 138 | * |
143 | */ | 139 | */ |
144 | int | 140 | int |
145 | mv64360_get_irq(struct pt_regs *regs) | 141 | mv64360_get_irq(void) |
146 | { | 142 | { |
147 | int irq; | 143 | int irq; |
148 | int irq_gpp; | 144 | int irq_gpp; |
@@ -283,7 +279,7 @@ mv64360_mask_irq(unsigned int irq) | |||
283 | } | 279 | } |
284 | 280 | ||
285 | static irqreturn_t | 281 | static irqreturn_t |
286 | mv64360_cpu_error_int_handler(int irq, void *dev_id, struct pt_regs *regs) | 282 | mv64360_cpu_error_int_handler(int irq, void *dev_id) |
287 | { | 283 | { |
288 | printk(KERN_ERR "mv64360_cpu_error_int_handler: %s 0x%08x\n", | 284 | printk(KERN_ERR "mv64360_cpu_error_int_handler: %s 0x%08x\n", |
289 | "Error on CPU interface - Cause regiser", | 285 | "Error on CPU interface - Cause regiser", |
@@ -304,7 +300,7 @@ mv64360_cpu_error_int_handler(int irq, void *dev_id, struct pt_regs *regs) | |||
304 | } | 300 | } |
305 | 301 | ||
306 | static irqreturn_t | 302 | static irqreturn_t |
307 | mv64360_sram_error_int_handler(int irq, void *dev_id, struct pt_regs *regs) | 303 | mv64360_sram_error_int_handler(int irq, void *dev_id) |
308 | { | 304 | { |
309 | printk(KERN_ERR "mv64360_sram_error_int_handler: %s 0x%08x\n", | 305 | printk(KERN_ERR "mv64360_sram_error_int_handler: %s 0x%08x\n", |
310 | "Error in internal SRAM - Cause register", | 306 | "Error in internal SRAM - Cause register", |
@@ -325,7 +321,7 @@ mv64360_sram_error_int_handler(int irq, void *dev_id, struct pt_regs *regs) | |||
325 | } | 321 | } |
326 | 322 | ||
327 | static irqreturn_t | 323 | static irqreturn_t |
328 | mv64360_pci_error_int_handler(int irq, void *dev_id, struct pt_regs *regs) | 324 | mv64360_pci_error_int_handler(int irq, void *dev_id) |
329 | { | 325 | { |
330 | u32 val; | 326 | u32 val; |
331 | unsigned int pci_bus = (unsigned int)dev_id; | 327 | unsigned int pci_bus = (unsigned int)dev_id; |
@@ -380,7 +376,7 @@ mv64360_register_hdlrs(void) | |||
380 | /* Clear old errors and register CPU interface error intr handler */ | 376 | /* Clear old errors and register CPU interface error intr handler */ |
381 | mv64x60_write(&bh, MV64x60_CPU_ERR_CAUSE, 0); | 377 | mv64x60_write(&bh, MV64x60_CPU_ERR_CAUSE, 0); |
382 | if ((rc = request_irq(MV64x60_IRQ_CPU_ERR + mv64360_irq_base, | 378 | if ((rc = request_irq(MV64x60_IRQ_CPU_ERR + mv64360_irq_base, |
383 | mv64360_cpu_error_int_handler, IRQF_DISABLED, CPU_INTR_STR, 0))) | 379 | mv64360_cpu_error_int_handler, IRQF_DISABLED, CPU_INTR_STR, NULL))) |
384 | printk(KERN_WARNING "Can't register cpu error handler: %d", rc); | 380 | printk(KERN_WARNING "Can't register cpu error handler: %d", rc); |
385 | 381 | ||
386 | mv64x60_write(&bh, MV64x60_CPU_ERR_MASK, 0); | 382 | mv64x60_write(&bh, MV64x60_CPU_ERR_MASK, 0); |
@@ -389,7 +385,7 @@ mv64360_register_hdlrs(void) | |||
389 | /* Clear old errors and register internal SRAM error intr handler */ | 385 | /* Clear old errors and register internal SRAM error intr handler */ |
390 | mv64x60_write(&bh, MV64360_SRAM_ERR_CAUSE, 0); | 386 | mv64x60_write(&bh, MV64360_SRAM_ERR_CAUSE, 0); |
391 | if ((rc = request_irq(MV64360_IRQ_SRAM_PAR_ERR + mv64360_irq_base, | 387 | if ((rc = request_irq(MV64360_IRQ_SRAM_PAR_ERR + mv64360_irq_base, |
392 | mv64360_sram_error_int_handler,IRQF_DISABLED,SRAM_INTR_STR, 0))) | 388 | mv64360_sram_error_int_handler,IRQF_DISABLED,SRAM_INTR_STR, NULL))) |
393 | printk(KERN_WARNING "Can't register SRAM error handler: %d",rc); | 389 | printk(KERN_WARNING "Can't register SRAM error handler: %d",rc); |
394 | 390 | ||
395 | /* Clear old errors and register PCI 0 error intr handler */ | 391 | /* Clear old errors and register PCI 0 error intr handler */ |
diff --git a/arch/ppc/syslib/open_pic.c b/arch/ppc/syslib/open_pic.c index aa0b95788705..18ec94733293 100644 --- a/arch/ppc/syslib/open_pic.c +++ b/arch/ppc/syslib/open_pic.c | |||
@@ -45,7 +45,7 @@ static u_int NumSources; | |||
45 | static int open_pic_irq_offset; | 45 | static int open_pic_irq_offset; |
46 | static volatile OpenPIC_Source __iomem *ISR[NR_IRQS]; | 46 | static volatile OpenPIC_Source __iomem *ISR[NR_IRQS]; |
47 | static int openpic_cascade_irq = -1; | 47 | static int openpic_cascade_irq = -1; |
48 | static int (*openpic_cascade_fn)(struct pt_regs *); | 48 | static int (*openpic_cascade_fn)(void); |
49 | 49 | ||
50 | /* Global Operations */ | 50 | /* Global Operations */ |
51 | static void openpic_disable_8259_pass_through(void); | 51 | static void openpic_disable_8259_pass_through(void); |
@@ -54,7 +54,7 @@ static void openpic_set_spurious(u_int vector); | |||
54 | #ifdef CONFIG_SMP | 54 | #ifdef CONFIG_SMP |
55 | /* Interprocessor Interrupts */ | 55 | /* Interprocessor Interrupts */ |
56 | static void openpic_initipi(u_int ipi, u_int pri, u_int vector); | 56 | static void openpic_initipi(u_int ipi, u_int pri, u_int vector); |
57 | static irqreturn_t openpic_ipi_action(int cpl, void *dev_id, struct pt_regs *); | 57 | static irqreturn_t openpic_ipi_action(int cpl, void *dev_id); |
58 | #endif | 58 | #endif |
59 | 59 | ||
60 | /* Timer Interrupts */ | 60 | /* Timer Interrupts */ |
@@ -700,7 +700,7 @@ static struct irqaction openpic_cascade_irqaction = { | |||
700 | 700 | ||
701 | void __init | 701 | void __init |
702 | openpic_hookup_cascade(u_int irq, char *name, | 702 | openpic_hookup_cascade(u_int irq, char *name, |
703 | int (*cascade_fn)(struct pt_regs *)) | 703 | int (*cascade_fn)(void)) |
704 | { | 704 | { |
705 | openpic_cascade_irq = irq; | 705 | openpic_cascade_irq = irq; |
706 | openpic_cascade_fn = cascade_fn; | 706 | openpic_cascade_fn = cascade_fn; |
@@ -857,16 +857,16 @@ static void openpic_end_ipi(unsigned int irq_nr) | |||
857 | { | 857 | { |
858 | } | 858 | } |
859 | 859 | ||
860 | static irqreturn_t openpic_ipi_action(int cpl, void *dev_id, struct pt_regs *regs) | 860 | static irqreturn_t openpic_ipi_action(int cpl, void *dev_id) |
861 | { | 861 | { |
862 | smp_message_recv(cpl-OPENPIC_VEC_IPI-open_pic_irq_offset, regs); | 862 | smp_message_recv(cpl-OPENPIC_VEC_IPI-open_pic_irq_offset); |
863 | return IRQ_HANDLED; | 863 | return IRQ_HANDLED; |
864 | } | 864 | } |
865 | 865 | ||
866 | #endif /* CONFIG_SMP */ | 866 | #endif /* CONFIG_SMP */ |
867 | 867 | ||
868 | int | 868 | int |
869 | openpic_get_irq(struct pt_regs *regs) | 869 | openpic_get_irq(void) |
870 | { | 870 | { |
871 | int irq = openpic_irq(); | 871 | int irq = openpic_irq(); |
872 | 872 | ||
@@ -876,7 +876,7 @@ openpic_get_irq(struct pt_regs *regs) | |||
876 | * This should move to irq.c eventually. -- paulus | 876 | * This should move to irq.c eventually. -- paulus |
877 | */ | 877 | */ |
878 | if (irq == openpic_cascade_irq && openpic_cascade_fn != NULL) { | 878 | if (irq == openpic_cascade_irq && openpic_cascade_fn != NULL) { |
879 | int cirq = openpic_cascade_fn(regs); | 879 | int cirq = openpic_cascade_fn(); |
880 | 880 | ||
881 | /* Allow for the cascade being shared with other devices */ | 881 | /* Allow for the cascade being shared with other devices */ |
882 | if (cirq != -1) { | 882 | if (cirq != -1) { |
diff --git a/arch/ppc/syslib/open_pic2.c b/arch/ppc/syslib/open_pic2.c index e1ff971539ea..d585207f9f77 100644 --- a/arch/ppc/syslib/open_pic2.c +++ b/arch/ppc/syslib/open_pic2.c | |||
@@ -529,7 +529,7 @@ static void openpic2_end_irq(unsigned int irq_nr) | |||
529 | } | 529 | } |
530 | 530 | ||
531 | int | 531 | int |
532 | openpic2_get_irq(struct pt_regs *regs) | 532 | openpic2_get_irq(void) |
533 | { | 533 | { |
534 | int irq = openpic2_irq(); | 534 | int irq = openpic2_irq(); |
535 | 535 | ||
diff --git a/arch/ppc/syslib/ppc403_pic.c b/arch/ppc/syslib/ppc403_pic.c index 1584c8b1229f..607ebd111d44 100644 --- a/arch/ppc/syslib/ppc403_pic.c +++ b/arch/ppc/syslib/ppc403_pic.c | |||
@@ -42,7 +42,7 @@ static struct hw_interrupt_type ppc403_aic = { | |||
42 | }; | 42 | }; |
43 | 43 | ||
44 | int | 44 | int |
45 | ppc403_pic_get_irq(struct pt_regs *regs) | 45 | ppc403_pic_get_irq(void) |
46 | { | 46 | { |
47 | int irq; | 47 | int irq; |
48 | unsigned long bits; | 48 | unsigned long bits; |
diff --git a/arch/ppc/syslib/ppc4xx_pic.c b/arch/ppc/syslib/ppc4xx_pic.c index 745685df5984..ee0da4b4b993 100644 --- a/arch/ppc/syslib/ppc4xx_pic.c +++ b/arch/ppc/syslib/ppc4xx_pic.c | |||
@@ -96,7 +96,7 @@ UIC_HANDLERS(1); | |||
96 | UIC_HANDLERS(2); | 96 | UIC_HANDLERS(2); |
97 | UIC_HANDLERS(3); | 97 | UIC_HANDLERS(3); |
98 | 98 | ||
99 | static int ppc4xx_pic_get_irq(struct pt_regs *regs) | 99 | static int ppc4xx_pic_get_irq(void) |
100 | { | 100 | { |
101 | u32 uic0 = mfdcr(DCRN_UIC_MSR(UIC0)); | 101 | u32 uic0 = mfdcr(DCRN_UIC_MSR(UIC0)); |
102 | if (uic0 & UIC0_UIC1NC) | 102 | if (uic0 & UIC0_UIC1NC) |
@@ -125,7 +125,7 @@ UIC_HANDLERS(0); | |||
125 | UIC_HANDLERS(1); | 125 | UIC_HANDLERS(1); |
126 | UIC_HANDLERS(2); | 126 | UIC_HANDLERS(2); |
127 | 127 | ||
128 | static int ppc4xx_pic_get_irq(struct pt_regs *regs) | 128 | static int ppc4xx_pic_get_irq(void) |
129 | { | 129 | { |
130 | u32 uicb = mfdcr(DCRN_UIC_MSR(UICB)); | 130 | u32 uicb = mfdcr(DCRN_UIC_MSR(UICB)); |
131 | if (uicb & UICB_UIC0NC) | 131 | if (uicb & UICB_UIC0NC) |
@@ -158,7 +158,7 @@ static void __init ppc4xx_pic_impl_init(void) | |||
158 | UIC_HANDLERS(0); | 158 | UIC_HANDLERS(0); |
159 | UIC_HANDLERS(1); | 159 | UIC_HANDLERS(1); |
160 | 160 | ||
161 | static int ppc4xx_pic_get_irq(struct pt_regs *regs) | 161 | static int ppc4xx_pic_get_irq(void) |
162 | { | 162 | { |
163 | u32 uic0 = mfdcr(DCRN_UIC_MSR(UIC0)); | 163 | u32 uic0 = mfdcr(DCRN_UIC_MSR(UIC0)); |
164 | if (uic0 & UIC0_UIC1NC) | 164 | if (uic0 & UIC0_UIC1NC) |
@@ -179,7 +179,7 @@ static void __init ppc4xx_pic_impl_init(void) | |||
179 | #define ACK_UIC0_PARENT | 179 | #define ACK_UIC0_PARENT |
180 | UIC_HANDLERS(0); | 180 | UIC_HANDLERS(0); |
181 | 181 | ||
182 | static int ppc4xx_pic_get_irq(struct pt_regs *regs) | 182 | static int ppc4xx_pic_get_irq(void) |
183 | { | 183 | { |
184 | u32 uic0 = mfdcr(DCRN_UIC_MSR(UIC0)); | 184 | u32 uic0 = mfdcr(DCRN_UIC_MSR(UIC0)); |
185 | return uic0 ? 32 - ffs(uic0) : -1; | 185 | return uic0 ? 32 - ffs(uic0) : -1; |
diff --git a/arch/ppc/syslib/ppc85xx_rio.c b/arch/ppc/syslib/ppc85xx_rio.c index d9b471b4d695..05b0e9415085 100644 --- a/arch/ppc/syslib/ppc85xx_rio.c +++ b/arch/ppc/syslib/ppc85xx_rio.c | |||
@@ -349,13 +349,12 @@ EXPORT_SYMBOL_GPL(rio_hw_add_outb_message); | |||
349 | * mpc85xx_rio_tx_handler - MPC85xx outbound message interrupt handler | 349 | * mpc85xx_rio_tx_handler - MPC85xx outbound message interrupt handler |
350 | * @irq: Linux interrupt number | 350 | * @irq: Linux interrupt number |
351 | * @dev_instance: Pointer to interrupt-specific data | 351 | * @dev_instance: Pointer to interrupt-specific data |
352 | * @regs: Register context | ||
353 | * | 352 | * |
354 | * Handles outbound message interrupts. Executes a register outbound | 353 | * Handles outbound message interrupts. Executes a register outbound |
355 | * mailbox event handler and acks the interrupt occurence. | 354 | * mailbox event handler and acks the interrupt occurence. |
356 | */ | 355 | */ |
357 | static irqreturn_t | 356 | static irqreturn_t |
358 | mpc85xx_rio_tx_handler(int irq, void *dev_instance, struct pt_regs *regs) | 357 | mpc85xx_rio_tx_handler(int irq, void *dev_instance) |
359 | { | 358 | { |
360 | int osr; | 359 | int osr; |
361 | struct rio_mport *port = (struct rio_mport *)dev_instance; | 360 | struct rio_mport *port = (struct rio_mport *)dev_instance; |
@@ -517,13 +516,12 @@ void rio_close_outb_mbox(struct rio_mport *mport, int mbox) | |||
517 | * mpc85xx_rio_rx_handler - MPC85xx inbound message interrupt handler | 516 | * mpc85xx_rio_rx_handler - MPC85xx inbound message interrupt handler |
518 | * @irq: Linux interrupt number | 517 | * @irq: Linux interrupt number |
519 | * @dev_instance: Pointer to interrupt-specific data | 518 | * @dev_instance: Pointer to interrupt-specific data |
520 | * @regs: Register context | ||
521 | * | 519 | * |
522 | * Handles inbound message interrupts. Executes a registered inbound | 520 | * Handles inbound message interrupts. Executes a registered inbound |
523 | * mailbox event handler and acks the interrupt occurence. | 521 | * mailbox event handler and acks the interrupt occurence. |
524 | */ | 522 | */ |
525 | static irqreturn_t | 523 | static irqreturn_t |
526 | mpc85xx_rio_rx_handler(int irq, void *dev_instance, struct pt_regs *regs) | 524 | mpc85xx_rio_rx_handler(int irq, void *dev_instance) |
527 | { | 525 | { |
528 | int isr; | 526 | int isr; |
529 | struct rio_mport *port = (struct rio_mport *)dev_instance; | 527 | struct rio_mport *port = (struct rio_mport *)dev_instance; |
@@ -736,13 +734,12 @@ EXPORT_SYMBOL_GPL(rio_hw_get_inb_message); | |||
736 | * mpc85xx_rio_dbell_handler - MPC85xx doorbell interrupt handler | 734 | * mpc85xx_rio_dbell_handler - MPC85xx doorbell interrupt handler |
737 | * @irq: Linux interrupt number | 735 | * @irq: Linux interrupt number |
738 | * @dev_instance: Pointer to interrupt-specific data | 736 | * @dev_instance: Pointer to interrupt-specific data |
739 | * @regs: Register context | ||
740 | * | 737 | * |
741 | * Handles doorbell interrupts. Parses a list of registered | 738 | * Handles doorbell interrupts. Parses a list of registered |
742 | * doorbell event handlers and executes a matching event handler. | 739 | * doorbell event handlers and executes a matching event handler. |
743 | */ | 740 | */ |
744 | static irqreturn_t | 741 | static irqreturn_t |
745 | mpc85xx_rio_dbell_handler(int irq, void *dev_instance, struct pt_regs *regs) | 742 | mpc85xx_rio_dbell_handler(int irq, void *dev_instance) |
746 | { | 743 | { |
747 | int dsr; | 744 | int dsr; |
748 | struct rio_mport *port = (struct rio_mport *)dev_instance; | 745 | struct rio_mport *port = (struct rio_mport *)dev_instance; |
diff --git a/arch/ppc/syslib/ppc8xx_pic.c b/arch/ppc/syslib/ppc8xx_pic.c index d6c25fe25011..e8619c750732 100644 --- a/arch/ppc/syslib/ppc8xx_pic.c +++ b/arch/ppc/syslib/ppc8xx_pic.c | |||
@@ -10,7 +10,7 @@ | |||
10 | #include <asm/mpc8xx.h> | 10 | #include <asm/mpc8xx.h> |
11 | #include "ppc8xx_pic.h" | 11 | #include "ppc8xx_pic.h" |
12 | 12 | ||
13 | extern int cpm_get_irq(struct pt_regs *regs); | 13 | extern int cpm_get_irq(void); |
14 | 14 | ||
15 | /* The 8xx internal interrupt controller. It is usually | 15 | /* The 8xx internal interrupt controller. It is usually |
16 | * the only interrupt controller. Some boards, like the MBX and | 16 | * the only interrupt controller. Some boards, like the MBX and |
@@ -96,7 +96,7 @@ m8xx_get_irq(struct pt_regs *regs) | |||
96 | * get back SIU_LEVEL7. In this case, return -1 | 96 | * get back SIU_LEVEL7. In this case, return -1 |
97 | */ | 97 | */ |
98 | if (irq == CPM_INTERRUPT) | 98 | if (irq == CPM_INTERRUPT) |
99 | irq = CPM_IRQ_OFFSET + cpm_get_irq(regs); | 99 | irq = CPM_IRQ_OFFSET + cpm_get_irq(); |
100 | #if defined(CONFIG_PCI) | 100 | #if defined(CONFIG_PCI) |
101 | else if (irq == ISA_BRIDGE_INT) { | 101 | else if (irq == ISA_BRIDGE_INT) { |
102 | int isa_irq; | 102 | int isa_irq; |
diff --git a/arch/ppc/syslib/xilinx_pic.c b/arch/ppc/syslib/xilinx_pic.c index 39a93dc6375b..6fd4cdbada72 100644 --- a/arch/ppc/syslib/xilinx_pic.c +++ b/arch/ppc/syslib/xilinx_pic.c | |||
@@ -86,7 +86,7 @@ static struct hw_interrupt_type xilinx_intc = { | |||
86 | }; | 86 | }; |
87 | 87 | ||
88 | int | 88 | int |
89 | xilinx_pic_get_irq(struct pt_regs *regs) | 89 | xilinx_pic_get_irq(void) |
90 | { | 90 | { |
91 | int irq; | 91 | int irq; |
92 | 92 | ||
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 51c2dfe89c62..608193cfe43f 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
@@ -30,6 +30,9 @@ config GENERIC_CALIBRATE_DELAY | |||
30 | bool | 30 | bool |
31 | default y | 31 | default y |
32 | 32 | ||
33 | config GENERIC_TIME | ||
34 | def_bool y | ||
35 | |||
33 | config GENERIC_BUST_SPINLOCK | 36 | config GENERIC_BUST_SPINLOCK |
34 | bool | 37 | bool |
35 | 38 | ||
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index b6cad75fd1f4..a3257398ea8d 100644 --- a/arch/s390/defconfig +++ b/arch/s390/defconfig | |||
@@ -9,6 +9,7 @@ CONFIG_STACKTRACE_SUPPORT=y | |||
9 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 9 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
10 | CONFIG_GENERIC_HWEIGHT=y | 10 | CONFIG_GENERIC_HWEIGHT=y |
11 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 11 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
12 | CONFIG_GENERIC_TIME=y | ||
12 | CONFIG_S390=y | 13 | CONFIG_S390=y |
13 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 14 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
14 | 15 | ||
diff --git a/arch/s390/kernel/s390_ext.c b/arch/s390/kernel/s390_ext.c index c1b383537fec..c49ab8c784d2 100644 --- a/arch/s390/kernel/s390_ext.c +++ b/arch/s390/kernel/s390_ext.c | |||
@@ -16,6 +16,7 @@ | |||
16 | 16 | ||
17 | #include <asm/lowcore.h> | 17 | #include <asm/lowcore.h> |
18 | #include <asm/s390_ext.h> | 18 | #include <asm/s390_ext.h> |
19 | #include <asm/irq_regs.h> | ||
19 | #include <asm/irq.h> | 20 | #include <asm/irq.h> |
20 | 21 | ||
21 | /* | 22 | /* |
@@ -114,26 +115,28 @@ void do_extint(struct pt_regs *regs, unsigned short code) | |||
114 | { | 115 | { |
115 | ext_int_info_t *p; | 116 | ext_int_info_t *p; |
116 | int index; | 117 | int index; |
118 | struct pt_regs *old_regs; | ||
117 | 119 | ||
118 | irq_enter(); | 120 | irq_enter(); |
121 | old_regs = set_irq_regs(regs); | ||
119 | asm volatile ("mc 0,0"); | 122 | asm volatile ("mc 0,0"); |
120 | if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer) | 123 | if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer) |
121 | /** | 124 | /** |
122 | * Make sure that the i/o interrupt did not "overtake" | 125 | * Make sure that the i/o interrupt did not "overtake" |
123 | * the last HZ timer interrupt. | 126 | * the last HZ timer interrupt. |
124 | */ | 127 | */ |
125 | account_ticks(regs); | 128 | account_ticks(); |
126 | kstat_cpu(smp_processor_id()).irqs[EXTERNAL_INTERRUPT]++; | 129 | kstat_cpu(smp_processor_id()).irqs[EXTERNAL_INTERRUPT]++; |
127 | index = ext_hash(code); | 130 | index = ext_hash(code); |
128 | for (p = ext_int_hash[index]; p; p = p->next) { | 131 | for (p = ext_int_hash[index]; p; p = p->next) { |
129 | if (likely(p->code == code)) { | 132 | if (likely(p->code == code)) { |
130 | if (likely(p->handler)) | 133 | if (likely(p->handler)) |
131 | p->handler(regs, code); | 134 | p->handler(code); |
132 | } | 135 | } |
133 | } | 136 | } |
137 | set_irq_regs(old_regs); | ||
134 | irq_exit(); | 138 | irq_exit(); |
135 | } | 139 | } |
136 | 140 | ||
137 | EXPORT_SYMBOL(register_external_interrupt); | 141 | EXPORT_SYMBOL(register_external_interrupt); |
138 | EXPORT_SYMBOL(unregister_external_interrupt); | 142 | EXPORT_SYMBOL(unregister_external_interrupt); |
139 | |||
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index a8e6199755d4..62822245f9be 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -339,7 +339,7 @@ void machine_power_off_smp(void) | |||
339 | * cpus are handled. | 339 | * cpus are handled. |
340 | */ | 340 | */ |
341 | 341 | ||
342 | void do_ext_call_interrupt(struct pt_regs *regs, __u16 code) | 342 | void do_ext_call_interrupt(__u16 code) |
343 | { | 343 | { |
344 | unsigned long bits; | 344 | unsigned long bits; |
345 | 345 | ||
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index 4bf66cc4a267..6cceed4df73e 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -28,12 +28,14 @@ | |||
28 | #include <linux/profile.h> | 28 | #include <linux/profile.h> |
29 | #include <linux/timex.h> | 29 | #include <linux/timex.h> |
30 | #include <linux/notifier.h> | 30 | #include <linux/notifier.h> |
31 | #include <linux/clocksource.h> | ||
31 | 32 | ||
32 | #include <asm/uaccess.h> | 33 | #include <asm/uaccess.h> |
33 | #include <asm/delay.h> | 34 | #include <asm/delay.h> |
34 | #include <asm/s390_ext.h> | 35 | #include <asm/s390_ext.h> |
35 | #include <asm/div64.h> | 36 | #include <asm/div64.h> |
36 | #include <asm/irq.h> | 37 | #include <asm/irq.h> |
38 | #include <asm/irq_regs.h> | ||
37 | #include <asm/timer.h> | 39 | #include <asm/timer.h> |
38 | 40 | ||
39 | /* change this if you have some constant time drift */ | 41 | /* change this if you have some constant time drift */ |
@@ -81,78 +83,10 @@ void tod_to_timeval(__u64 todval, struct timespec *xtime) | |||
81 | xtime->tv_nsec = ((todval * 1000) >> 12); | 83 | xtime->tv_nsec = ((todval * 1000) >> 12); |
82 | } | 84 | } |
83 | 85 | ||
84 | static inline unsigned long do_gettimeoffset(void) | ||
85 | { | ||
86 | __u64 now; | ||
87 | |||
88 | now = (get_clock() - jiffies_timer_cc) >> 12; | ||
89 | now -= (__u64) jiffies * USECS_PER_JIFFY; | ||
90 | return (unsigned long) now; | ||
91 | } | ||
92 | |||
93 | /* | ||
94 | * This version of gettimeofday has microsecond resolution. | ||
95 | */ | ||
96 | void do_gettimeofday(struct timeval *tv) | ||
97 | { | ||
98 | unsigned long flags; | ||
99 | unsigned long seq; | ||
100 | unsigned long usec, sec; | ||
101 | |||
102 | do { | ||
103 | seq = read_seqbegin_irqsave(&xtime_lock, flags); | ||
104 | |||
105 | sec = xtime.tv_sec; | ||
106 | usec = xtime.tv_nsec / 1000 + do_gettimeoffset(); | ||
107 | } while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); | ||
108 | |||
109 | while (usec >= 1000000) { | ||
110 | usec -= 1000000; | ||
111 | sec++; | ||
112 | } | ||
113 | |||
114 | tv->tv_sec = sec; | ||
115 | tv->tv_usec = usec; | ||
116 | } | ||
117 | |||
118 | EXPORT_SYMBOL(do_gettimeofday); | ||
119 | |||
120 | int do_settimeofday(struct timespec *tv) | ||
121 | { | ||
122 | time_t wtm_sec, sec = tv->tv_sec; | ||
123 | long wtm_nsec, nsec = tv->tv_nsec; | ||
124 | |||
125 | if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) | ||
126 | return -EINVAL; | ||
127 | |||
128 | write_seqlock_irq(&xtime_lock); | ||
129 | /* This is revolting. We need to set the xtime.tv_nsec | ||
130 | * correctly. However, the value in this location is | ||
131 | * is value at the last tick. | ||
132 | * Discover what correction gettimeofday | ||
133 | * would have done, and then undo it! | ||
134 | */ | ||
135 | nsec -= do_gettimeoffset() * 1000; | ||
136 | |||
137 | wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); | ||
138 | wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); | ||
139 | |||
140 | set_normalized_timespec(&xtime, sec, nsec); | ||
141 | set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec); | ||
142 | |||
143 | ntp_clear(); | ||
144 | write_sequnlock_irq(&xtime_lock); | ||
145 | clock_was_set(); | ||
146 | return 0; | ||
147 | } | ||
148 | |||
149 | EXPORT_SYMBOL(do_settimeofday); | ||
150 | |||
151 | |||
152 | #ifdef CONFIG_PROFILING | 86 | #ifdef CONFIG_PROFILING |
153 | #define s390_do_profile(regs) profile_tick(CPU_PROFILING, regs) | 87 | #define s390_do_profile() profile_tick(CPU_PROFILING) |
154 | #else | 88 | #else |
155 | #define s390_do_profile(regs) do { ; } while(0) | 89 | #define s390_do_profile() do { ; } while(0) |
156 | #endif /* CONFIG_PROFILING */ | 90 | #endif /* CONFIG_PROFILING */ |
157 | 91 | ||
158 | 92 | ||
@@ -160,7 +94,7 @@ EXPORT_SYMBOL(do_settimeofday); | |||
160 | * timer_interrupt() needs to keep up the real-time clock, | 94 | * timer_interrupt() needs to keep up the real-time clock, |
161 | * as well as call the "do_timer()" routine every clocktick | 95 | * as well as call the "do_timer()" routine every clocktick |
162 | */ | 96 | */ |
163 | void account_ticks(struct pt_regs *regs) | 97 | void account_ticks(void) |
164 | { | 98 | { |
165 | __u64 tmp; | 99 | __u64 tmp; |
166 | __u32 ticks; | 100 | __u32 ticks; |
@@ -221,10 +155,10 @@ void account_ticks(struct pt_regs *regs) | |||
221 | account_tick_vtime(current); | 155 | account_tick_vtime(current); |
222 | #else | 156 | #else |
223 | while (ticks--) | 157 | while (ticks--) |
224 | update_process_times(user_mode(regs)); | 158 | update_process_times(user_mode(get_irq_regs())); |
225 | #endif | 159 | #endif |
226 | 160 | ||
227 | s390_do_profile(regs); | 161 | s390_do_profile(); |
228 | } | 162 | } |
229 | 163 | ||
230 | #ifdef CONFIG_NO_IDLE_HZ | 164 | #ifdef CONFIG_NO_IDLE_HZ |
@@ -285,9 +219,11 @@ static inline void stop_hz_timer(void) | |||
285 | */ | 219 | */ |
286 | static inline void start_hz_timer(void) | 220 | static inline void start_hz_timer(void) |
287 | { | 221 | { |
222 | BUG_ON(!in_interrupt()); | ||
223 | |||
288 | if (!cpu_isset(smp_processor_id(), nohz_cpu_mask)) | 224 | if (!cpu_isset(smp_processor_id(), nohz_cpu_mask)) |
289 | return; | 225 | return; |
290 | account_ticks(task_pt_regs(current)); | 226 | account_ticks(); |
291 | cpu_clear(smp_processor_id(), nohz_cpu_mask); | 227 | cpu_clear(smp_processor_id(), nohz_cpu_mask); |
292 | } | 228 | } |
293 | 229 | ||
@@ -337,6 +273,22 @@ void init_cpu_timer(void) | |||
337 | 273 | ||
338 | extern void vtime_init(void); | 274 | extern void vtime_init(void); |
339 | 275 | ||
276 | static cycle_t read_tod_clock(void) | ||
277 | { | ||
278 | return get_clock(); | ||
279 | } | ||
280 | |||
281 | static struct clocksource clocksource_tod = { | ||
282 | .name = "tod", | ||
283 | .rating = 100, | ||
284 | .read = read_tod_clock, | ||
285 | .mask = -1ULL, | ||
286 | .mult = 1000, | ||
287 | .shift = 12, | ||
288 | .is_continuous = 1, | ||
289 | }; | ||
290 | |||
291 | |||
340 | /* | 292 | /* |
341 | * Initialize the TOD clock and the CPU timer of | 293 | * Initialize the TOD clock and the CPU timer of |
342 | * the boot cpu. | 294 | * the boot cpu. |
@@ -381,6 +333,9 @@ void __init time_init(void) | |||
381 | &ext_int_info_cc) != 0) | 333 | &ext_int_info_cc) != 0) |
382 | panic("Couldn't request external interrupt 0x1004"); | 334 | panic("Couldn't request external interrupt 0x1004"); |
383 | 335 | ||
336 | if (clocksource_register(&clocksource_tod) != 0) | ||
337 | panic("Could not register TOD clock source"); | ||
338 | |||
384 | init_cpu_timer(); | 339 | init_cpu_timer(); |
385 | 340 | ||
386 | #ifdef CONFIG_NO_IDLE_HZ | 341 | #ifdef CONFIG_NO_IDLE_HZ |
diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c index 3eb4fab048b8..66375a5e3d12 100644 --- a/arch/s390/kernel/traps.c +++ b/arch/s390/kernel/traps.c | |||
@@ -61,7 +61,7 @@ extern pgm_check_handler_t do_dat_exception; | |||
61 | #ifdef CONFIG_PFAULT | 61 | #ifdef CONFIG_PFAULT |
62 | extern int pfault_init(void); | 62 | extern int pfault_init(void); |
63 | extern void pfault_fini(void); | 63 | extern void pfault_fini(void); |
64 | extern void pfault_interrupt(struct pt_regs *regs, __u16 error_code); | 64 | extern void pfault_interrupt(__u16 error_code); |
65 | static ext_int_info_t ext_int_pfault; | 65 | static ext_int_info_t ext_int_pfault; |
66 | #endif | 66 | #endif |
67 | extern pgm_check_handler_t do_monitor_call; | 67 | extern pgm_check_handler_t do_monitor_call; |
@@ -474,7 +474,7 @@ asmlinkage void illegal_op(struct pt_regs * regs, long interruption_code) | |||
474 | signal = math_emu_b3(opcode, regs); | 474 | signal = math_emu_b3(opcode, regs); |
475 | } else if (opcode[0] == 0xed) { | 475 | } else if (opcode[0] == 0xed) { |
476 | get_user(*((__u32 *) (opcode+2)), | 476 | get_user(*((__u32 *) (opcode+2)), |
477 | (__u32 *)(location+1)); | 477 | (__u32 __user *)(location+1)); |
478 | signal = math_emu_ed(opcode, regs); | 478 | signal = math_emu_ed(opcode, regs); |
479 | } else if (*((__u16 *) opcode) == 0xb299) { | 479 | } else if (*((__u16 *) opcode) == 0xb299) { |
480 | get_user(*((__u16 *) (opcode+2)), location+1); | 480 | get_user(*((__u16 *) (opcode+2)), location+1); |
@@ -499,7 +499,7 @@ asmlinkage void illegal_op(struct pt_regs * regs, long interruption_code) | |||
499 | info.si_signo = signal; | 499 | info.si_signo = signal; |
500 | info.si_errno = 0; | 500 | info.si_errno = 0; |
501 | info.si_code = SEGV_MAPERR; | 501 | info.si_code = SEGV_MAPERR; |
502 | info.si_addr = (void *) location; | 502 | info.si_addr = (void __user *) location; |
503 | do_trap(interruption_code, signal, | 503 | do_trap(interruption_code, signal, |
504 | "user address fault", regs, &info); | 504 | "user address fault", regs, &info); |
505 | } else | 505 | } else |
@@ -520,10 +520,10 @@ asmlinkage void | |||
520 | specification_exception(struct pt_regs * regs, long interruption_code) | 520 | specification_exception(struct pt_regs * regs, long interruption_code) |
521 | { | 521 | { |
522 | __u8 opcode[6]; | 522 | __u8 opcode[6]; |
523 | __u16 *location = NULL; | 523 | __u16 __user *location = NULL; |
524 | int signal = 0; | 524 | int signal = 0; |
525 | 525 | ||
526 | location = (__u16 *) get_check_address(regs); | 526 | location = (__u16 __user *) get_check_address(regs); |
527 | 527 | ||
528 | /* | 528 | /* |
529 | * We got all needed information from the lowcore and can | 529 | * We got all needed information from the lowcore and can |
@@ -632,7 +632,7 @@ asmlinkage void data_exception(struct pt_regs * regs, long interruption_code) | |||
632 | break; | 632 | break; |
633 | case 0xed: | 633 | case 0xed: |
634 | get_user(*((__u32 *) (opcode+2)), | 634 | get_user(*((__u32 *) (opcode+2)), |
635 | (__u32 *)(location+1)); | 635 | (__u32 __user *)(location+1)); |
636 | signal = math_emu_ed(opcode, regs); | 636 | signal = math_emu_ed(opcode, regs); |
637 | break; | 637 | break; |
638 | case 0xb2: | 638 | case 0xb2: |
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c index 2306cd83fca1..1d7d3938b2b1 100644 --- a/arch/s390/kernel/vtime.c +++ b/arch/s390/kernel/vtime.c | |||
@@ -22,6 +22,7 @@ | |||
22 | 22 | ||
23 | #include <asm/s390_ext.h> | 23 | #include <asm/s390_ext.h> |
24 | #include <asm/timer.h> | 24 | #include <asm/timer.h> |
25 | #include <asm/irq_regs.h> | ||
25 | 26 | ||
26 | static ext_int_info_t ext_int_info_timer; | 27 | static ext_int_info_t ext_int_info_timer; |
27 | DEFINE_PER_CPU(struct vtimer_queue, virt_cpu_timer); | 28 | DEFINE_PER_CPU(struct vtimer_queue, virt_cpu_timer); |
@@ -241,7 +242,7 @@ static void do_callbacks(struct list_head *cb_list, struct pt_regs *regs) | |||
241 | /* | 242 | /* |
242 | * Handler for the virtual CPU timer. | 243 | * Handler for the virtual CPU timer. |
243 | */ | 244 | */ |
244 | static void do_cpu_timer_interrupt(struct pt_regs *regs, __u16 error_code) | 245 | static void do_cpu_timer_interrupt(__u16 error_code) |
245 | { | 246 | { |
246 | int cpu; | 247 | int cpu; |
247 | __u64 next, delta; | 248 | __u64 next, delta; |
@@ -274,7 +275,7 @@ static void do_cpu_timer_interrupt(struct pt_regs *regs, __u16 error_code) | |||
274 | list_move_tail(&event->entry, &cb_list); | 275 | list_move_tail(&event->entry, &cb_list); |
275 | } | 276 | } |
276 | spin_unlock(&vt_list->lock); | 277 | spin_unlock(&vt_list->lock); |
277 | do_callbacks(&cb_list, regs); | 278 | do_callbacks(&cb_list, get_irq_regs()); |
278 | 279 | ||
279 | /* next event is first in list */ | 280 | /* next event is first in list */ |
280 | spin_lock(&vt_list->lock); | 281 | spin_lock(&vt_list->lock); |
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index 9c3c19fe62fc..1c323bbfda91 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c | |||
@@ -451,7 +451,7 @@ void pfault_fini(void) | |||
451 | } | 451 | } |
452 | 452 | ||
453 | asmlinkage void | 453 | asmlinkage void |
454 | pfault_interrupt(struct pt_regs *regs, __u16 error_code) | 454 | pfault_interrupt(__u16 error_code) |
455 | { | 455 | { |
456 | struct task_struct *tsk; | 456 | struct task_struct *tsk; |
457 | __u16 subcode; | 457 | __u16 subcode; |
diff --git a/arch/sparc/kernel/irq.c b/arch/sparc/kernel/irq.c index 72f0201051a0..b3b6680a2a30 100644 --- a/arch/sparc/kernel/irq.c +++ b/arch/sparc/kernel/irq.c | |||
@@ -46,6 +46,7 @@ | |||
46 | #include <asm/pgtable.h> | 46 | #include <asm/pgtable.h> |
47 | #include <asm/pcic.h> | 47 | #include <asm/pcic.h> |
48 | #include <asm/cacheflush.h> | 48 | #include <asm/cacheflush.h> |
49 | #include <asm/irq_regs.h> | ||
49 | 50 | ||
50 | #ifdef CONFIG_SMP | 51 | #ifdef CONFIG_SMP |
51 | #define SMP_NOP2 "nop; nop;\n\t" | 52 | #define SMP_NOP2 "nop; nop;\n\t" |
@@ -133,8 +134,8 @@ static void irq_panic(void) | |||
133 | prom_halt(); | 134 | prom_halt(); |
134 | } | 135 | } |
135 | 136 | ||
136 | void (*sparc_init_timers)(irqreturn_t (*)(int, void *,struct pt_regs *)) = | 137 | void (*sparc_init_timers)(irq_handler_t ) = |
137 | (void (*)(irqreturn_t (*)(int, void *,struct pt_regs *))) irq_panic; | 138 | (void (*)(irq_handler_t )) irq_panic; |
138 | 139 | ||
139 | /* | 140 | /* |
140 | * Dave Redman (djhr@tadpole.co.uk) | 141 | * Dave Redman (djhr@tadpole.co.uk) |
@@ -319,12 +320,14 @@ void unexpected_irq(int irq, void *dev_id, struct pt_regs * regs) | |||
319 | 320 | ||
320 | void handler_irq(int irq, struct pt_regs * regs) | 321 | void handler_irq(int irq, struct pt_regs * regs) |
321 | { | 322 | { |
323 | struct pt_regs *old_regs; | ||
322 | struct irqaction * action; | 324 | struct irqaction * action; |
323 | int cpu = smp_processor_id(); | 325 | int cpu = smp_processor_id(); |
324 | #ifdef CONFIG_SMP | 326 | #ifdef CONFIG_SMP |
325 | extern void smp4m_irq_rotate(int cpu); | 327 | extern void smp4m_irq_rotate(int cpu); |
326 | #endif | 328 | #endif |
327 | 329 | ||
330 | old_regs = set_irq_regs(regs); | ||
328 | irq_enter(); | 331 | irq_enter(); |
329 | disable_pil_irq(irq); | 332 | disable_pil_irq(irq); |
330 | #ifdef CONFIG_SMP | 333 | #ifdef CONFIG_SMP |
@@ -338,27 +341,31 @@ void handler_irq(int irq, struct pt_regs * regs) | |||
338 | do { | 341 | do { |
339 | if (!action || !action->handler) | 342 | if (!action || !action->handler) |
340 | unexpected_irq(irq, NULL, regs); | 343 | unexpected_irq(irq, NULL, regs); |
341 | action->handler(irq, action->dev_id, regs); | 344 | action->handler(irq, action->dev_id); |
342 | action = action->next; | 345 | action = action->next; |
343 | } while (action); | 346 | } while (action); |
344 | sparc_irq[irq].flags &= ~SPARC_IRQ_INPROGRESS; | 347 | sparc_irq[irq].flags &= ~SPARC_IRQ_INPROGRESS; |
345 | enable_pil_irq(irq); | 348 | enable_pil_irq(irq); |
346 | irq_exit(); | 349 | irq_exit(); |
350 | set_irq_regs(old_regs); | ||
347 | } | 351 | } |
348 | 352 | ||
349 | #ifdef CONFIG_BLK_DEV_FD | 353 | #ifdef CONFIG_BLK_DEV_FD |
350 | extern void floppy_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 354 | extern void floppy_interrupt(int irq, void *dev_id) |
351 | 355 | ||
352 | void sparc_floppy_irq(int irq, void *dev_id, struct pt_regs *regs) | 356 | void sparc_floppy_irq(int irq, void *dev_id, struct pt_regs *regs) |
353 | { | 357 | { |
358 | struct pt_regs *old_regs; | ||
354 | int cpu = smp_processor_id(); | 359 | int cpu = smp_processor_id(); |
355 | 360 | ||
361 | old_regs = set_irq_regs(regs); | ||
356 | disable_pil_irq(irq); | 362 | disable_pil_irq(irq); |
357 | irq_enter(); | 363 | irq_enter(); |
358 | kstat_cpu(cpu).irqs[irq]++; | 364 | kstat_cpu(cpu).irqs[irq]++; |
359 | floppy_interrupt(irq, dev_id, regs); | 365 | floppy_interrupt(irq, dev_id); |
360 | irq_exit(); | 366 | irq_exit(); |
361 | enable_pil_irq(irq); | 367 | enable_pil_irq(irq); |
368 | set_irq_regs(old_regs); | ||
362 | // XXX Eek, it's totally changed with preempt_count() and such | 369 | // XXX Eek, it's totally changed with preempt_count() and such |
363 | // if (softirq_pending(cpu)) | 370 | // if (softirq_pending(cpu)) |
364 | // do_softirq(); | 371 | // do_softirq(); |
@@ -369,7 +376,7 @@ void sparc_floppy_irq(int irq, void *dev_id, struct pt_regs *regs) | |||
369 | * thus no sharing possible. | 376 | * thus no sharing possible. |
370 | */ | 377 | */ |
371 | int request_fast_irq(unsigned int irq, | 378 | int request_fast_irq(unsigned int irq, |
372 | irqreturn_t (*handler)(int, void *, struct pt_regs *), | 379 | irq_handler_t handler, |
373 | unsigned long irqflags, const char *devname) | 380 | unsigned long irqflags, const char *devname) |
374 | { | 381 | { |
375 | struct irqaction *action; | 382 | struct irqaction *action; |
@@ -468,7 +475,7 @@ out: | |||
468 | } | 475 | } |
469 | 476 | ||
470 | int request_irq(unsigned int irq, | 477 | int request_irq(unsigned int irq, |
471 | irqreturn_t (*handler)(int, void *, struct pt_regs *), | 478 | irq_handler_t handler, |
472 | unsigned long irqflags, const char * devname, void *dev_id) | 479 | unsigned long irqflags, const char * devname, void *dev_id) |
473 | { | 480 | { |
474 | struct irqaction * action, **actionp; | 481 | struct irqaction * action, **actionp; |
@@ -478,7 +485,7 @@ int request_irq(unsigned int irq, | |||
478 | 485 | ||
479 | if (sparc_cpu_model == sun4d) { | 486 | if (sparc_cpu_model == sun4d) { |
480 | extern int sun4d_request_irq(unsigned int, | 487 | extern int sun4d_request_irq(unsigned int, |
481 | irqreturn_t (*)(int, void *, struct pt_regs *), | 488 | irq_handler_t , |
482 | unsigned long, const char *, void *); | 489 | unsigned long, const char *, void *); |
483 | return sun4d_request_irq(irq, handler, irqflags, devname, dev_id); | 490 | return sun4d_request_irq(irq, handler, irqflags, devname, dev_id); |
484 | } | 491 | } |
diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c index edb6cc665f56..b4e50ae323bf 100644 --- a/arch/sparc/kernel/pcic.c +++ b/arch/sparc/kernel/pcic.c | |||
@@ -708,13 +708,13 @@ static void pcic_clear_clock_irq(void) | |||
708 | pcic_timer_dummy = readl(pcic0.pcic_regs+PCI_SYS_LIMIT); | 708 | pcic_timer_dummy = readl(pcic0.pcic_regs+PCI_SYS_LIMIT); |
709 | } | 709 | } |
710 | 710 | ||
711 | static irqreturn_t pcic_timer_handler (int irq, void *h, struct pt_regs *regs) | 711 | static irqreturn_t pcic_timer_handler (int irq, void *h) |
712 | { | 712 | { |
713 | write_seqlock(&xtime_lock); /* Dummy, to show that we remember */ | 713 | write_seqlock(&xtime_lock); /* Dummy, to show that we remember */ |
714 | pcic_clear_clock_irq(); | 714 | pcic_clear_clock_irq(); |
715 | do_timer(1); | 715 | do_timer(1); |
716 | #ifndef CONFIG_SMP | 716 | #ifndef CONFIG_SMP |
717 | update_process_times(user_mode(regs)); | 717 | update_process_times(user_mode(get_irq_regs())); |
718 | #endif | 718 | #endif |
719 | write_sequnlock(&xtime_lock); | 719 | write_sequnlock(&xtime_lock); |
720 | return IRQ_HANDLED; | 720 | return IRQ_HANDLED; |
diff --git a/arch/sparc/kernel/prom.c b/arch/sparc/kernel/prom.c index 4ca9e5fc97f4..2cc302b6bec0 100644 --- a/arch/sparc/kernel/prom.c +++ b/arch/sparc/kernel/prom.c | |||
@@ -243,7 +243,7 @@ int of_set_property(struct device_node *dp, const char *name, void *val, int len | |||
243 | void *old_val = prop->value; | 243 | void *old_val = prop->value; |
244 | int ret; | 244 | int ret; |
245 | 245 | ||
246 | ret = prom_setprop(dp->node, name, val, len); | 246 | ret = prom_setprop(dp->node, (char *) name, val, len); |
247 | err = -EINVAL; | 247 | err = -EINVAL; |
248 | if (ret >= 0) { | 248 | if (ret >= 0) { |
249 | prop->value = new_val; | 249 | prop->value = new_val; |
@@ -477,7 +477,10 @@ static struct property * __init build_one_prop(phandle node, char *prev, char *s | |||
477 | p->length = 0; | 477 | p->length = 0; |
478 | } else { | 478 | } else { |
479 | p->value = prom_early_alloc(p->length + 1); | 479 | p->value = prom_early_alloc(p->length + 1); |
480 | prom_getproperty(node, p->name, p->value, p->length); | 480 | len = prom_getproperty(node, p->name, p->value, |
481 | p->length); | ||
482 | if (len <= 0) | ||
483 | p->length = 0; | ||
481 | ((unsigned char *)p->value)[p->length] = '\0'; | 484 | ((unsigned char *)p->value)[p->length] = '\0'; |
482 | } | 485 | } |
483 | } | 486 | } |
diff --git a/arch/sparc/kernel/sparc_ksyms.c b/arch/sparc/kernel/sparc_ksyms.c index 4d441a554d35..33dadd9f2871 100644 --- a/arch/sparc/kernel/sparc_ksyms.c +++ b/arch/sparc/kernel/sparc_ksyms.c | |||
@@ -87,6 +87,7 @@ extern void ___set_bit(void); | |||
87 | extern void ___clear_bit(void); | 87 | extern void ___clear_bit(void); |
88 | extern void ___change_bit(void); | 88 | extern void ___change_bit(void); |
89 | extern void ___rw_read_enter(void); | 89 | extern void ___rw_read_enter(void); |
90 | extern void ___rw_read_try(void); | ||
90 | extern void ___rw_read_exit(void); | 91 | extern void ___rw_read_exit(void); |
91 | extern void ___rw_write_enter(void); | 92 | extern void ___rw_write_enter(void); |
92 | 93 | ||
@@ -104,8 +105,9 @@ extern unsigned _Urem(unsigned, unsigned); | |||
104 | EXPORT_SYMBOL(sparc_cpu_model); | 105 | EXPORT_SYMBOL(sparc_cpu_model); |
105 | EXPORT_SYMBOL(kernel_thread); | 106 | EXPORT_SYMBOL(kernel_thread); |
106 | #ifdef CONFIG_SMP | 107 | #ifdef CONFIG_SMP |
107 | // XXX find what uses (or used) these. | 108 | // XXX find what uses (or used) these. AV: see asm/spinlock.h |
108 | EXPORT_SYMBOL(___rw_read_enter); | 109 | EXPORT_SYMBOL(___rw_read_enter); |
110 | EXPORT_SYMBOL(___rw_read_try); | ||
109 | EXPORT_SYMBOL(___rw_read_exit); | 111 | EXPORT_SYMBOL(___rw_read_exit); |
110 | EXPORT_SYMBOL(___rw_write_enter); | 112 | EXPORT_SYMBOL(___rw_write_enter); |
111 | #endif | 113 | #endif |
diff --git a/arch/sparc/kernel/sun4c_irq.c b/arch/sparc/kernel/sun4c_irq.c index 4be2c86ea540..009e891a4329 100644 --- a/arch/sparc/kernel/sun4c_irq.c +++ b/arch/sparc/kernel/sun4c_irq.c | |||
@@ -154,7 +154,7 @@ static void sun4c_load_profile_irq(int cpu, unsigned int limit) | |||
154 | /* Errm.. not sure how to do this.. */ | 154 | /* Errm.. not sure how to do this.. */ |
155 | } | 155 | } |
156 | 156 | ||
157 | static void __init sun4c_init_timers(irqreturn_t (*counter_fn)(int, void *, struct pt_regs *)) | 157 | static void __init sun4c_init_timers(irq_handler_t counter_fn) |
158 | { | 158 | { |
159 | int irq; | 159 | int irq; |
160 | 160 | ||
diff --git a/arch/sparc/kernel/sun4d_irq.c b/arch/sparc/kernel/sun4d_irq.c index 74eed9775ac0..d4f9da8170c5 100644 --- a/arch/sparc/kernel/sun4d_irq.c +++ b/arch/sparc/kernel/sun4d_irq.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <asm/sbus.h> | 38 | #include <asm/sbus.h> |
39 | #include <asm/sbi.h> | 39 | #include <asm/sbi.h> |
40 | #include <asm/cacheflush.h> | 40 | #include <asm/cacheflush.h> |
41 | #include <asm/irq_regs.h> | ||
41 | 42 | ||
42 | /* If you trust current SCSI layer to handle different SCSI IRQs, enable this. I don't trust it... -jj */ | 43 | /* If you trust current SCSI layer to handle different SCSI IRQs, enable this. I don't trust it... -jj */ |
43 | /* #define DISTRIBUTE_IRQS */ | 44 | /* #define DISTRIBUTE_IRQS */ |
@@ -198,6 +199,7 @@ extern void unexpected_irq(int, void *, struct pt_regs *); | |||
198 | 199 | ||
199 | void sun4d_handler_irq(int irq, struct pt_regs * regs) | 200 | void sun4d_handler_irq(int irq, struct pt_regs * regs) |
200 | { | 201 | { |
202 | struct pt_regs *old_regs; | ||
201 | struct irqaction * action; | 203 | struct irqaction * action; |
202 | int cpu = smp_processor_id(); | 204 | int cpu = smp_processor_id(); |
203 | /* SBUS IRQ level (1 - 7) */ | 205 | /* SBUS IRQ level (1 - 7) */ |
@@ -208,6 +210,7 @@ void sun4d_handler_irq(int irq, struct pt_regs * regs) | |||
208 | 210 | ||
209 | cc_set_iclr(1 << irq); | 211 | cc_set_iclr(1 << irq); |
210 | 212 | ||
213 | old_regs = set_irq_regs(regs); | ||
211 | irq_enter(); | 214 | irq_enter(); |
212 | kstat_cpu(cpu).irqs[irq]++; | 215 | kstat_cpu(cpu).irqs[irq]++; |
213 | if (!sbusl) { | 216 | if (!sbusl) { |
@@ -215,7 +218,7 @@ void sun4d_handler_irq(int irq, struct pt_regs * regs) | |||
215 | if (!action) | 218 | if (!action) |
216 | unexpected_irq(irq, NULL, regs); | 219 | unexpected_irq(irq, NULL, regs); |
217 | do { | 220 | do { |
218 | action->handler(irq, action->dev_id, regs); | 221 | action->handler(irq, action->dev_id); |
219 | action = action->next; | 222 | action = action->next; |
220 | } while (action); | 223 | } while (action); |
221 | } else { | 224 | } else { |
@@ -242,7 +245,7 @@ void sun4d_handler_irq(int irq, struct pt_regs * regs) | |||
242 | if (!action) | 245 | if (!action) |
243 | unexpected_irq(irq, NULL, regs); | 246 | unexpected_irq(irq, NULL, regs); |
244 | do { | 247 | do { |
245 | action->handler(irq, action->dev_id, regs); | 248 | action->handler(irq, action->dev_id); |
246 | action = action->next; | 249 | action = action->next; |
247 | } while (action); | 250 | } while (action); |
248 | release_sbi(SBI2DEVID(sbino), slot); | 251 | release_sbi(SBI2DEVID(sbino), slot); |
@@ -250,6 +253,7 @@ void sun4d_handler_irq(int irq, struct pt_regs * regs) | |||
250 | } | 253 | } |
251 | } | 254 | } |
252 | irq_exit(); | 255 | irq_exit(); |
256 | set_irq_regs(old_regs); | ||
253 | } | 257 | } |
254 | 258 | ||
255 | unsigned int sun4d_build_irq(struct sbus_dev *sdev, int irq) | 259 | unsigned int sun4d_build_irq(struct sbus_dev *sdev, int irq) |
@@ -272,7 +276,7 @@ unsigned int sun4d_sbint_to_irq(struct sbus_dev *sdev, unsigned int sbint) | |||
272 | } | 276 | } |
273 | 277 | ||
274 | int sun4d_request_irq(unsigned int irq, | 278 | int sun4d_request_irq(unsigned int irq, |
275 | irqreturn_t (*handler)(int, void *, struct pt_regs *), | 279 | irq_handler_t handler, |
276 | unsigned long irqflags, const char * devname, void *dev_id) | 280 | unsigned long irqflags, const char * devname, void *dev_id) |
277 | { | 281 | { |
278 | struct irqaction *action, *tmp = NULL, **actionp; | 282 | struct irqaction *action, *tmp = NULL, **actionp; |
@@ -466,7 +470,7 @@ static void sun4d_load_profile_irq(int cpu, unsigned int limit) | |||
466 | bw_set_prof_limit(cpu, limit); | 470 | bw_set_prof_limit(cpu, limit); |
467 | } | 471 | } |
468 | 472 | ||
469 | static void __init sun4d_init_timers(irqreturn_t (*counter_fn)(int, void *, struct pt_regs *)) | 473 | static void __init sun4d_init_timers(irq_handler_t counter_fn) |
470 | { | 474 | { |
471 | int irq; | 475 | int irq; |
472 | int cpu; | 476 | int cpu; |
diff --git a/arch/sparc/kernel/sun4d_smp.c b/arch/sparc/kernel/sun4d_smp.c index 3ff4edd32815..c80ea61e8ba0 100644 --- a/arch/sparc/kernel/sun4d_smp.c +++ b/arch/sparc/kernel/sun4d_smp.c | |||
@@ -23,6 +23,7 @@ | |||
23 | 23 | ||
24 | #include <asm/ptrace.h> | 24 | #include <asm/ptrace.h> |
25 | #include <asm/atomic.h> | 25 | #include <asm/atomic.h> |
26 | #include <asm/irq_regs.h> | ||
26 | 27 | ||
27 | #include <asm/delay.h> | 28 | #include <asm/delay.h> |
28 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
@@ -369,10 +370,12 @@ void smp4d_message_pass(int target, int msg, unsigned long data, int wait) | |||
369 | 370 | ||
370 | void smp4d_percpu_timer_interrupt(struct pt_regs *regs) | 371 | void smp4d_percpu_timer_interrupt(struct pt_regs *regs) |
371 | { | 372 | { |
373 | struct pt_regs *old_regs; | ||
372 | int cpu = hard_smp4d_processor_id(); | 374 | int cpu = hard_smp4d_processor_id(); |
373 | static int cpu_tick[NR_CPUS]; | 375 | static int cpu_tick[NR_CPUS]; |
374 | static char led_mask[] = { 0xe, 0xd, 0xb, 0x7, 0xb, 0xd }; | 376 | static char led_mask[] = { 0xe, 0xd, 0xb, 0x7, 0xb, 0xd }; |
375 | 377 | ||
378 | old_regs = set_irq_regs(regs); | ||
376 | bw_get_prof_limit(cpu); | 379 | bw_get_prof_limit(cpu); |
377 | bw_clear_intr_mask(0, 1); /* INTR_TABLE[0] & 1 is Profile IRQ */ | 380 | bw_clear_intr_mask(0, 1); /* INTR_TABLE[0] & 1 is Profile IRQ */ |
378 | 381 | ||
@@ -384,7 +387,7 @@ void smp4d_percpu_timer_interrupt(struct pt_regs *regs) | |||
384 | show_leds(cpu); | 387 | show_leds(cpu); |
385 | } | 388 | } |
386 | 389 | ||
387 | profile_tick(CPU_PROFILING, regs); | 390 | profile_tick(CPU_PROFILING); |
388 | 391 | ||
389 | if(!--prof_counter(cpu)) { | 392 | if(!--prof_counter(cpu)) { |
390 | int user = user_mode(regs); | 393 | int user = user_mode(regs); |
@@ -395,6 +398,7 @@ void smp4d_percpu_timer_interrupt(struct pt_regs *regs) | |||
395 | 398 | ||
396 | prof_counter(cpu) = prof_multiplier(cpu); | 399 | prof_counter(cpu) = prof_multiplier(cpu); |
397 | } | 400 | } |
401 | set_irq_regs(old_regs); | ||
398 | } | 402 | } |
399 | 403 | ||
400 | extern unsigned int lvl14_resolution; | 404 | extern unsigned int lvl14_resolution; |
diff --git a/arch/sparc/kernel/sun4m_irq.c b/arch/sparc/kernel/sun4m_irq.c index 7cefa301efea..a654c16f4027 100644 --- a/arch/sparc/kernel/sun4m_irq.c +++ b/arch/sparc/kernel/sun4m_irq.c | |||
@@ -228,7 +228,7 @@ static void sun4m_load_profile_irq(int cpu, unsigned int limit) | |||
228 | sun4m_timers->cpu_timers[cpu].l14_timer_limit = limit; | 228 | sun4m_timers->cpu_timers[cpu].l14_timer_limit = limit; |
229 | } | 229 | } |
230 | 230 | ||
231 | static void __init sun4m_init_timers(irqreturn_t (*counter_fn)(int, void *, struct pt_regs *)) | 231 | static void __init sun4m_init_timers(irq_handler_t counter_fn) |
232 | { | 232 | { |
233 | int reg_count, irq, cpu; | 233 | int reg_count, irq, cpu; |
234 | struct linux_prom_registers cnt_regs[PROMREG_MAX]; | 234 | struct linux_prom_registers cnt_regs[PROMREG_MAX]; |
diff --git a/arch/sparc/kernel/sun4m_smp.c b/arch/sparc/kernel/sun4m_smp.c index 7d4a649138f6..e2d9c018bd56 100644 --- a/arch/sparc/kernel/sun4m_smp.c +++ b/arch/sparc/kernel/sun4m_smp.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/profile.h> | 19 | #include <linux/profile.h> |
20 | #include <asm/cacheflush.h> | 20 | #include <asm/cacheflush.h> |
21 | #include <asm/tlbflush.h> | 21 | #include <asm/tlbflush.h> |
22 | #include <asm/irq_regs.h> | ||
22 | 23 | ||
23 | #include <asm/ptrace.h> | 24 | #include <asm/ptrace.h> |
24 | #include <asm/atomic.h> | 25 | #include <asm/atomic.h> |
@@ -353,11 +354,14 @@ void smp4m_cross_call_irq(void) | |||
353 | 354 | ||
354 | void smp4m_percpu_timer_interrupt(struct pt_regs *regs) | 355 | void smp4m_percpu_timer_interrupt(struct pt_regs *regs) |
355 | { | 356 | { |
357 | struct pt_regs *old_regs; | ||
356 | int cpu = smp_processor_id(); | 358 | int cpu = smp_processor_id(); |
357 | 359 | ||
360 | old_regs = set_irq_regs(regs); | ||
361 | |||
358 | clear_profile_irq(cpu); | 362 | clear_profile_irq(cpu); |
359 | 363 | ||
360 | profile_tick(CPU_PROFILING, regs); | 364 | profile_tick(CPU_PROFILING); |
361 | 365 | ||
362 | if(!--prof_counter(cpu)) { | 366 | if(!--prof_counter(cpu)) { |
363 | int user = user_mode(regs); | 367 | int user = user_mode(regs); |
@@ -368,6 +372,7 @@ void smp4m_percpu_timer_interrupt(struct pt_regs *regs) | |||
368 | 372 | ||
369 | prof_counter(cpu) = prof_multiplier(cpu); | 373 | prof_counter(cpu) = prof_multiplier(cpu); |
370 | } | 374 | } |
375 | set_irq_regs(old_regs); | ||
371 | } | 376 | } |
372 | 377 | ||
373 | extern unsigned int lvl14_resolution; | 378 | extern unsigned int lvl14_resolution; |
diff --git a/arch/sparc/kernel/tick14.c b/arch/sparc/kernel/tick14.c index d3b4daac705f..f1a7bd19e04f 100644 --- a/arch/sparc/kernel/tick14.c +++ b/arch/sparc/kernel/tick14.c | |||
@@ -55,7 +55,7 @@ void install_obp_ticker(void) | |||
55 | linux_lvl14[3] = obp_lvl14[3]; | 55 | linux_lvl14[3] = obp_lvl14[3]; |
56 | } | 56 | } |
57 | 57 | ||
58 | void claim_ticker14(irqreturn_t (*handler)(int, void *, struct pt_regs *), | 58 | void claim_ticker14(irq_handler_t handler, |
59 | int irq_nr, unsigned int timeout ) | 59 | int irq_nr, unsigned int timeout ) |
60 | { | 60 | { |
61 | int cpu = smp_processor_id(); | 61 | int cpu = smp_processor_id(); |
diff --git a/arch/sparc/kernel/time.c b/arch/sparc/kernel/time.c index e10dc831944d..7dcd1a16c6e4 100644 --- a/arch/sparc/kernel/time.c +++ b/arch/sparc/kernel/time.c | |||
@@ -42,6 +42,7 @@ | |||
42 | #include <asm/page.h> | 42 | #include <asm/page.h> |
43 | #include <asm/pcic.h> | 43 | #include <asm/pcic.h> |
44 | #include <asm/of_device.h> | 44 | #include <asm/of_device.h> |
45 | #include <asm/irq_regs.h> | ||
45 | 46 | ||
46 | DEFINE_SPINLOCK(rtc_lock); | 47 | DEFINE_SPINLOCK(rtc_lock); |
47 | enum sparc_clock_type sp_clock_typ; | 48 | enum sparc_clock_type sp_clock_typ; |
@@ -104,13 +105,13 @@ __volatile__ unsigned int *master_l10_limit; | |||
104 | 105 | ||
105 | #define TICK_SIZE (tick_nsec / 1000) | 106 | #define TICK_SIZE (tick_nsec / 1000) |
106 | 107 | ||
107 | irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs) | 108 | irqreturn_t timer_interrupt(int irq, void *dev_id) |
108 | { | 109 | { |
109 | /* last time the cmos clock got updated */ | 110 | /* last time the cmos clock got updated */ |
110 | static long last_rtc_update; | 111 | static long last_rtc_update; |
111 | 112 | ||
112 | #ifndef CONFIG_SMP | 113 | #ifndef CONFIG_SMP |
113 | profile_tick(CPU_PROFILING, regs); | 114 | profile_tick(CPU_PROFILING); |
114 | #endif | 115 | #endif |
115 | 116 | ||
116 | /* Protect counter clear so that do_gettimeoffset works */ | 117 | /* Protect counter clear so that do_gettimeoffset works */ |
@@ -128,7 +129,7 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs) | |||
128 | 129 | ||
129 | do_timer(1); | 130 | do_timer(1); |
130 | #ifndef CONFIG_SMP | 131 | #ifndef CONFIG_SMP |
131 | update_process_times(user_mode(regs)); | 132 | update_process_times(user_mode(get_irq_regs())); |
132 | #endif | 133 | #endif |
133 | 134 | ||
134 | 135 | ||
diff --git a/arch/sparc/lib/locks.S b/arch/sparc/lib/locks.S index 95fa48424967..b1df55cb2215 100644 --- a/arch/sparc/lib/locks.S +++ b/arch/sparc/lib/locks.S | |||
@@ -25,6 +25,15 @@ ___rw_read_enter_spin_on_wlock: | |||
25 | ldstub [%g1 + 3], %g2 | 25 | ldstub [%g1 + 3], %g2 |
26 | b ___rw_read_enter_spin_on_wlock | 26 | b ___rw_read_enter_spin_on_wlock |
27 | ldub [%g1 + 3], %g2 | 27 | ldub [%g1 + 3], %g2 |
28 | ___rw_read_try_spin_on_wlock: | ||
29 | andcc %g2, 0xff, %g0 | ||
30 | be,a ___rw_read_try | ||
31 | ldstub [%g1 + 3], %g2 | ||
32 | xnorcc %g2, 0x0, %o0 /* if g2 is ~0, set o0 to 0 and bugger off */ | ||
33 | bne,a ___rw_read_enter_spin_on_wlock | ||
34 | ld [%g1], %g2 | ||
35 | retl | ||
36 | mov %g4, %o7 | ||
28 | ___rw_read_exit_spin_on_wlock: | 37 | ___rw_read_exit_spin_on_wlock: |
29 | orcc %g2, 0x0, %g0 | 38 | orcc %g2, 0x0, %g0 |
30 | be,a ___rw_read_exit | 39 | be,a ___rw_read_exit |
@@ -60,6 +69,17 @@ ___rw_read_exit: | |||
60 | retl | 69 | retl |
61 | mov %g4, %o7 | 70 | mov %g4, %o7 |
62 | 71 | ||
72 | .globl ___rw_read_try | ||
73 | ___rw_read_try: | ||
74 | orcc %g2, 0x0, %g0 | ||
75 | bne ___rw_read_try_spin_on_wlock | ||
76 | ld [%g1], %g2 | ||
77 | add %g2, 1, %g2 | ||
78 | st %g2, [%g1] | ||
79 | set 1, %o1 | ||
80 | retl | ||
81 | mov %g4, %o7 | ||
82 | |||
63 | .globl ___rw_write_enter | 83 | .globl ___rw_write_enter |
64 | ___rw_write_enter: | 84 | ___rw_write_enter: |
65 | orcc %g2, 0x0, %g0 | 85 | orcc %g2, 0x0, %g0 |
diff --git a/arch/sparc64/defconfig b/arch/sparc64/defconfig index f54ab375464b..dcae559879ae 100644 --- a/arch/sparc64/defconfig +++ b/arch/sparc64/defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.18 | 3 | # Linux kernel version: 2.6.19-rc1 |
4 | # Mon Oct 2 14:24:40 2006 | 4 | # Thu Oct 5 02:08:41 2006 |
5 | # | 5 | # |
6 | CONFIG_SPARC=y | 6 | CONFIG_SPARC=y |
7 | CONFIG_SPARC64=y | 7 | CONFIG_SPARC64=y |
@@ -197,6 +197,7 @@ CONFIG_INET_XFRM_TUNNEL=y | |||
197 | CONFIG_INET_TUNNEL=y | 197 | CONFIG_INET_TUNNEL=y |
198 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 198 | CONFIG_INET_XFRM_MODE_TRANSPORT=y |
199 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 199 | CONFIG_INET_XFRM_MODE_TUNNEL=y |
200 | CONFIG_INET_XFRM_MODE_BEET=y | ||
200 | CONFIG_INET_DIAG=y | 201 | CONFIG_INET_DIAG=y |
201 | CONFIG_INET_TCP_DIAG=y | 202 | CONFIG_INET_TCP_DIAG=y |
202 | # CONFIG_TCP_CONG_ADVANCED is not set | 203 | # CONFIG_TCP_CONG_ADVANCED is not set |
@@ -214,6 +215,7 @@ CONFIG_INET6_XFRM_TUNNEL=m | |||
214 | CONFIG_INET6_TUNNEL=m | 215 | CONFIG_INET6_TUNNEL=m |
215 | CONFIG_INET6_XFRM_MODE_TRANSPORT=m | 216 | CONFIG_INET6_XFRM_MODE_TRANSPORT=m |
216 | CONFIG_INET6_XFRM_MODE_TUNNEL=m | 217 | CONFIG_INET6_XFRM_MODE_TUNNEL=m |
218 | CONFIG_INET6_XFRM_MODE_BEET=m | ||
217 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | 219 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set |
218 | CONFIG_IPV6_TUNNEL=m | 220 | CONFIG_IPV6_TUNNEL=m |
219 | # CONFIG_IPV6_SUBTREES is not set | 221 | # CONFIG_IPV6_SUBTREES is not set |
@@ -373,6 +375,7 @@ CONFIG_BLK_DEV_ALI15X3=y | |||
373 | # CONFIG_BLK_DEV_CS5530 is not set | 375 | # CONFIG_BLK_DEV_CS5530 is not set |
374 | # CONFIG_BLK_DEV_HPT34X is not set | 376 | # CONFIG_BLK_DEV_HPT34X is not set |
375 | # CONFIG_BLK_DEV_HPT366 is not set | 377 | # CONFIG_BLK_DEV_HPT366 is not set |
378 | # CONFIG_BLK_DEV_JMICRON is not set | ||
376 | # CONFIG_BLK_DEV_SC1200 is not set | 379 | # CONFIG_BLK_DEV_SC1200 is not set |
377 | # CONFIG_BLK_DEV_PIIX is not set | 380 | # CONFIG_BLK_DEV_PIIX is not set |
378 | # CONFIG_BLK_DEV_IT821X is not set | 381 | # CONFIG_BLK_DEV_IT821X is not set |
@@ -449,10 +452,10 @@ CONFIG_ISCSI_TCP=m | |||
449 | # CONFIG_SCSI_INIA100 is not set | 452 | # CONFIG_SCSI_INIA100 is not set |
450 | # CONFIG_SCSI_STEX is not set | 453 | # CONFIG_SCSI_STEX is not set |
451 | # CONFIG_SCSI_SYM53C8XX_2 is not set | 454 | # CONFIG_SCSI_SYM53C8XX_2 is not set |
452 | # CONFIG_SCSI_IPR is not set | ||
453 | # CONFIG_SCSI_QLOGIC_1280 is not set | 455 | # CONFIG_SCSI_QLOGIC_1280 is not set |
454 | # CONFIG_SCSI_QLOGICPTI is not set | 456 | # CONFIG_SCSI_QLOGICPTI is not set |
455 | # CONFIG_SCSI_QLA_FC is not set | 457 | # CONFIG_SCSI_QLA_FC is not set |
458 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
456 | # CONFIG_SCSI_LPFC is not set | 459 | # CONFIG_SCSI_LPFC is not set |
457 | # CONFIG_SCSI_DC395x is not set | 460 | # CONFIG_SCSI_DC395x is not set |
458 | # CONFIG_SCSI_DC390T is not set | 461 | # CONFIG_SCSI_DC390T is not set |
@@ -478,6 +481,7 @@ CONFIG_MD_RAID456=m | |||
478 | CONFIG_MD_MULTIPATH=m | 481 | CONFIG_MD_MULTIPATH=m |
479 | # CONFIG_MD_FAULTY is not set | 482 | # CONFIG_MD_FAULTY is not set |
480 | CONFIG_BLK_DEV_DM=m | 483 | CONFIG_BLK_DEV_DM=m |
484 | # CONFIG_DM_DEBUG is not set | ||
481 | CONFIG_DM_CRYPT=m | 485 | CONFIG_DM_CRYPT=m |
482 | CONFIG_DM_SNAPSHOT=m | 486 | CONFIG_DM_SNAPSHOT=m |
483 | CONFIG_DM_MIRROR=m | 487 | CONFIG_DM_MIRROR=m |
@@ -840,12 +844,12 @@ CONFIG_HWMON=y | |||
840 | # | 844 | # |
841 | # Misc devices | 845 | # Misc devices |
842 | # | 846 | # |
847 | # CONFIG_TIFM_CORE is not set | ||
843 | 848 | ||
844 | # | 849 | # |
845 | # Multimedia devices | 850 | # Multimedia devices |
846 | # | 851 | # |
847 | # CONFIG_VIDEO_DEV is not set | 852 | # CONFIG_VIDEO_DEV is not set |
848 | CONFIG_VIDEO_V4L2=y | ||
849 | 853 | ||
850 | # | 854 | # |
851 | # Digital Video Broadcasting Devices | 855 | # Digital Video Broadcasting Devices |
@@ -858,6 +862,7 @@ CONFIG_VIDEO_V4L2=y | |||
858 | # | 862 | # |
859 | # CONFIG_FIRMWARE_EDID is not set | 863 | # CONFIG_FIRMWARE_EDID is not set |
860 | CONFIG_FB=y | 864 | CONFIG_FB=y |
865 | CONFIG_FB_DDC=y | ||
861 | CONFIG_FB_CFB_FILLRECT=y | 866 | CONFIG_FB_CFB_FILLRECT=y |
862 | CONFIG_FB_CFB_COPYAREA=y | 867 | CONFIG_FB_CFB_COPYAREA=y |
863 | CONFIG_FB_CFB_IMAGEBLIT=y | 868 | CONFIG_FB_CFB_IMAGEBLIT=y |
@@ -1236,6 +1241,7 @@ CONFIG_FS_MBCACHE=y | |||
1236 | # CONFIG_JFS_FS is not set | 1241 | # CONFIG_JFS_FS is not set |
1237 | CONFIG_FS_POSIX_ACL=y | 1242 | CONFIG_FS_POSIX_ACL=y |
1238 | # CONFIG_XFS_FS is not set | 1243 | # CONFIG_XFS_FS is not set |
1244 | # CONFIG_GFS2_FS is not set | ||
1239 | # CONFIG_OCFS2_FS is not set | 1245 | # CONFIG_OCFS2_FS is not set |
1240 | # CONFIG_MINIX_FS is not set | 1246 | # CONFIG_MINIX_FS is not set |
1241 | # CONFIG_ROMFS_FS is not set | 1247 | # CONFIG_ROMFS_FS is not set |
@@ -1279,6 +1285,7 @@ CONFIG_RAMFS=y | |||
1279 | # | 1285 | # |
1280 | # CONFIG_ADFS_FS is not set | 1286 | # CONFIG_ADFS_FS is not set |
1281 | # CONFIG_AFFS_FS is not set | 1287 | # CONFIG_AFFS_FS is not set |
1288 | # CONFIG_ECRYPT_FS is not set | ||
1282 | # CONFIG_HFS_FS is not set | 1289 | # CONFIG_HFS_FS is not set |
1283 | # CONFIG_HFSPLUS_FS is not set | 1290 | # CONFIG_HFSPLUS_FS is not set |
1284 | # CONFIG_BEFS_FS is not set | 1291 | # CONFIG_BEFS_FS is not set |
@@ -1355,6 +1362,10 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
1355 | # CONFIG_NLS_UTF8 is not set | 1362 | # CONFIG_NLS_UTF8 is not set |
1356 | 1363 | ||
1357 | # | 1364 | # |
1365 | # Distributed Lock Manager | ||
1366 | # | ||
1367 | |||
1368 | # | ||
1358 | # Instrumentation Support | 1369 | # Instrumentation Support |
1359 | # | 1370 | # |
1360 | CONFIG_PROFILING=y | 1371 | CONFIG_PROFILING=y |
diff --git a/arch/sparc64/kernel/ebus.c b/arch/sparc64/kernel/ebus.c index 8a9b470e1b65..2df25c2b4071 100644 --- a/arch/sparc64/kernel/ebus.c +++ b/arch/sparc64/kernel/ebus.c | |||
@@ -79,7 +79,7 @@ static void __ebus_dma_reset(struct ebus_dma_info *p, int no_drain) | |||
79 | } | 79 | } |
80 | } | 80 | } |
81 | 81 | ||
82 | static irqreturn_t ebus_dma_irq(int irq, void *dev_id, struct pt_regs *regs) | 82 | static irqreturn_t ebus_dma_irq(int irq, void *dev_id) |
83 | { | 83 | { |
84 | struct ebus_dma_info *p = dev_id; | 84 | struct ebus_dma_info *p = dev_id; |
85 | unsigned long flags; | 85 | unsigned long flags; |
diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c index 4e64724cb9ae..d64b1ea848de 100644 --- a/arch/sparc64/kernel/irq.c +++ b/arch/sparc64/kernel/irq.c | |||
@@ -522,12 +522,13 @@ void ack_bad_irq(unsigned int virt_irq) | |||
522 | } | 522 | } |
523 | 523 | ||
524 | #ifndef CONFIG_SMP | 524 | #ifndef CONFIG_SMP |
525 | extern irqreturn_t timer_interrupt(int, void *, struct pt_regs *); | 525 | extern irqreturn_t timer_interrupt(int, void *); |
526 | 526 | ||
527 | void timer_irq(int irq, struct pt_regs *regs) | 527 | void timer_irq(int irq, struct pt_regs *regs) |
528 | { | 528 | { |
529 | unsigned long clr_mask = 1 << irq; | 529 | unsigned long clr_mask = 1 << irq; |
530 | unsigned long tick_mask = tick_ops->softint_mask; | 530 | unsigned long tick_mask = tick_ops->softint_mask; |
531 | struct pt_regs *old_regs; | ||
531 | 532 | ||
532 | if (get_softint() & tick_mask) { | 533 | if (get_softint() & tick_mask) { |
533 | irq = 0; | 534 | irq = 0; |
@@ -535,21 +536,25 @@ void timer_irq(int irq, struct pt_regs *regs) | |||
535 | } | 536 | } |
536 | clear_softint(clr_mask); | 537 | clear_softint(clr_mask); |
537 | 538 | ||
539 | old_regs = set_irq_regs(regs); | ||
538 | irq_enter(); | 540 | irq_enter(); |
539 | 541 | ||
540 | kstat_this_cpu.irqs[0]++; | 542 | kstat_this_cpu.irqs[0]++; |
541 | timer_interrupt(irq, NULL, regs); | 543 | timer_interrupt(irq, NULL); |
542 | 544 | ||
543 | irq_exit(); | 545 | irq_exit(); |
546 | set_irq_regs(old_regs); | ||
544 | } | 547 | } |
545 | #endif | 548 | #endif |
546 | 549 | ||
547 | void handler_irq(int irq, struct pt_regs *regs) | 550 | void handler_irq(int irq, struct pt_regs *regs) |
548 | { | 551 | { |
549 | struct ino_bucket *bucket; | 552 | struct ino_bucket *bucket; |
553 | struct pt_regs *old_regs; | ||
550 | 554 | ||
551 | clear_softint(1 << irq); | 555 | clear_softint(1 << irq); |
552 | 556 | ||
557 | old_regs = set_irq_regs(regs); | ||
553 | irq_enter(); | 558 | irq_enter(); |
554 | 559 | ||
555 | /* Sliiiick... */ | 560 | /* Sliiiick... */ |
@@ -558,12 +563,13 @@ void handler_irq(int irq, struct pt_regs *regs) | |||
558 | struct ino_bucket *next = __bucket(bucket->irq_chain); | 563 | struct ino_bucket *next = __bucket(bucket->irq_chain); |
559 | 564 | ||
560 | bucket->irq_chain = 0; | 565 | bucket->irq_chain = 0; |
561 | __do_IRQ(bucket->virt_irq, regs); | 566 | __do_IRQ(bucket->virt_irq); |
562 | 567 | ||
563 | bucket = next; | 568 | bucket = next; |
564 | } | 569 | } |
565 | 570 | ||
566 | irq_exit(); | 571 | irq_exit(); |
572 | set_irq_regs(old_regs); | ||
567 | } | 573 | } |
568 | 574 | ||
569 | struct sun5_timer { | 575 | struct sun5_timer { |
diff --git a/arch/sparc64/kernel/of_device.c b/arch/sparc64/kernel/of_device.c index 7f9204535770..d822c7c18e1f 100644 --- a/arch/sparc64/kernel/of_device.c +++ b/arch/sparc64/kernel/of_device.c | |||
@@ -841,7 +841,7 @@ static struct of_device * __init scan_one_device(struct device_node *dp, | |||
841 | if (!parent) | 841 | if (!parent) |
842 | strcpy(op->dev.bus_id, "root"); | 842 | strcpy(op->dev.bus_id, "root"); |
843 | else | 843 | else |
844 | strcpy(op->dev.bus_id, dp->path_component_name); | 844 | sprintf(op->dev.bus_id, "%s@%08x", dp->name, dp->node); |
845 | 845 | ||
846 | if (of_device_register(op)) { | 846 | if (of_device_register(op)) { |
847 | printk("%s: Could not register of device.\n", | 847 | printk("%s: Could not register of device.\n", |
diff --git a/arch/sparc64/kernel/pci_psycho.c b/arch/sparc64/kernel/pci_psycho.c index 1ec0aab68c08..fda5db223d96 100644 --- a/arch/sparc64/kernel/pci_psycho.c +++ b/arch/sparc64/kernel/pci_psycho.c | |||
@@ -533,7 +533,7 @@ static void psycho_check_iommu_error(struct pci_controller_info *p, | |||
533 | #define PSYCHO_UEAFSR_RESV2 0x00000000007fffffUL /* Reserved */ | 533 | #define PSYCHO_UEAFSR_RESV2 0x00000000007fffffUL /* Reserved */ |
534 | #define PSYCHO_UE_AFAR 0x0038UL | 534 | #define PSYCHO_UE_AFAR 0x0038UL |
535 | 535 | ||
536 | static irqreturn_t psycho_ue_intr(int irq, void *dev_id, struct pt_regs *regs) | 536 | static irqreturn_t psycho_ue_intr(int irq, void *dev_id) |
537 | { | 537 | { |
538 | struct pci_controller_info *p = dev_id; | 538 | struct pci_controller_info *p = dev_id; |
539 | unsigned long afsr_reg = p->pbm_A.controller_regs + PSYCHO_UE_AFSR; | 539 | unsigned long afsr_reg = p->pbm_A.controller_regs + PSYCHO_UE_AFSR; |
@@ -610,7 +610,7 @@ static irqreturn_t psycho_ue_intr(int irq, void *dev_id, struct pt_regs *regs) | |||
610 | #define PSYCHO_CEAFSR_RESV2 0x00000000007fffffUL /* Reserved */ | 610 | #define PSYCHO_CEAFSR_RESV2 0x00000000007fffffUL /* Reserved */ |
611 | #define PSYCHO_CE_AFAR 0x0040UL | 611 | #define PSYCHO_CE_AFAR 0x0040UL |
612 | 612 | ||
613 | static irqreturn_t psycho_ce_intr(int irq, void *dev_id, struct pt_regs *regs) | 613 | static irqreturn_t psycho_ce_intr(int irq, void *dev_id) |
614 | { | 614 | { |
615 | struct pci_controller_info *p = dev_id; | 615 | struct pci_controller_info *p = dev_id; |
616 | unsigned long afsr_reg = p->pbm_A.controller_regs + PSYCHO_CE_AFSR; | 616 | unsigned long afsr_reg = p->pbm_A.controller_regs + PSYCHO_CE_AFSR; |
@@ -735,7 +735,7 @@ static irqreturn_t psycho_pcierr_intr_other(struct pci_pbm_info *pbm, int is_pbm | |||
735 | return ret; | 735 | return ret; |
736 | } | 736 | } |
737 | 737 | ||
738 | static irqreturn_t psycho_pcierr_intr(int irq, void *dev_id, struct pt_regs *regs) | 738 | static irqreturn_t psycho_pcierr_intr(int irq, void *dev_id) |
739 | { | 739 | { |
740 | struct pci_pbm_info *pbm = dev_id; | 740 | struct pci_pbm_info *pbm = dev_id; |
741 | struct pci_controller_info *p = pbm->parent; | 741 | struct pci_controller_info *p = pbm->parent; |
diff --git a/arch/sparc64/kernel/pci_sabre.c b/arch/sparc64/kernel/pci_sabre.c index 45891850b90d..6ec569828c29 100644 --- a/arch/sparc64/kernel/pci_sabre.c +++ b/arch/sparc64/kernel/pci_sabre.c | |||
@@ -574,7 +574,7 @@ static void sabre_check_iommu_error(struct pci_controller_info *p, | |||
574 | spin_unlock_irqrestore(&iommu->lock, flags); | 574 | spin_unlock_irqrestore(&iommu->lock, flags); |
575 | } | 575 | } |
576 | 576 | ||
577 | static irqreturn_t sabre_ue_intr(int irq, void *dev_id, struct pt_regs *regs) | 577 | static irqreturn_t sabre_ue_intr(int irq, void *dev_id) |
578 | { | 578 | { |
579 | struct pci_controller_info *p = dev_id; | 579 | struct pci_controller_info *p = dev_id; |
580 | unsigned long afsr_reg = p->pbm_A.controller_regs + SABRE_UE_AFSR; | 580 | unsigned long afsr_reg = p->pbm_A.controller_regs + SABRE_UE_AFSR; |
@@ -634,7 +634,7 @@ static irqreturn_t sabre_ue_intr(int irq, void *dev_id, struct pt_regs *regs) | |||
634 | return IRQ_HANDLED; | 634 | return IRQ_HANDLED; |
635 | } | 635 | } |
636 | 636 | ||
637 | static irqreturn_t sabre_ce_intr(int irq, void *dev_id, struct pt_regs *regs) | 637 | static irqreturn_t sabre_ce_intr(int irq, void *dev_id) |
638 | { | 638 | { |
639 | struct pci_controller_info *p = dev_id; | 639 | struct pci_controller_info *p = dev_id; |
640 | unsigned long afsr_reg = p->pbm_A.controller_regs + SABRE_CE_AFSR; | 640 | unsigned long afsr_reg = p->pbm_A.controller_regs + SABRE_CE_AFSR; |
@@ -726,7 +726,7 @@ static irqreturn_t sabre_pcierr_intr_other(struct pci_controller_info *p) | |||
726 | return ret; | 726 | return ret; |
727 | } | 727 | } |
728 | 728 | ||
729 | static irqreturn_t sabre_pcierr_intr(int irq, void *dev_id, struct pt_regs *regs) | 729 | static irqreturn_t sabre_pcierr_intr(int irq, void *dev_id) |
730 | { | 730 | { |
731 | struct pci_controller_info *p = dev_id; | 731 | struct pci_controller_info *p = dev_id; |
732 | unsigned long afsr_reg, afar_reg; | 732 | unsigned long afsr_reg, afar_reg; |
diff --git a/arch/sparc64/kernel/pci_schizo.c b/arch/sparc64/kernel/pci_schizo.c index 75ade83ecc65..66911b126aed 100644 --- a/arch/sparc64/kernel/pci_schizo.c +++ b/arch/sparc64/kernel/pci_schizo.c | |||
@@ -515,7 +515,7 @@ static void schizo_check_iommu_error(struct pci_controller_info *p, | |||
515 | #define SCHIZO_UEAFSR_MTAG 0x000000000000e000UL /* Safari */ | 515 | #define SCHIZO_UEAFSR_MTAG 0x000000000000e000UL /* Safari */ |
516 | #define SCHIZO_UEAFSR_ECCSYND 0x00000000000001ffUL /* Safari */ | 516 | #define SCHIZO_UEAFSR_ECCSYND 0x00000000000001ffUL /* Safari */ |
517 | 517 | ||
518 | static irqreturn_t schizo_ue_intr(int irq, void *dev_id, struct pt_regs *regs) | 518 | static irqreturn_t schizo_ue_intr(int irq, void *dev_id) |
519 | { | 519 | { |
520 | struct pci_controller_info *p = dev_id; | 520 | struct pci_controller_info *p = dev_id; |
521 | unsigned long afsr_reg = p->pbm_B.controller_regs + SCHIZO_UE_AFSR; | 521 | unsigned long afsr_reg = p->pbm_B.controller_regs + SCHIZO_UE_AFSR; |
@@ -603,7 +603,7 @@ static irqreturn_t schizo_ue_intr(int irq, void *dev_id, struct pt_regs *regs) | |||
603 | #define SCHIZO_CEAFSR_MTAG 0x000000000000e000UL | 603 | #define SCHIZO_CEAFSR_MTAG 0x000000000000e000UL |
604 | #define SCHIZO_CEAFSR_ECCSYND 0x00000000000001ffUL | 604 | #define SCHIZO_CEAFSR_ECCSYND 0x00000000000001ffUL |
605 | 605 | ||
606 | static irqreturn_t schizo_ce_intr(int irq, void *dev_id, struct pt_regs *regs) | 606 | static irqreturn_t schizo_ce_intr(int irq, void *dev_id) |
607 | { | 607 | { |
608 | struct pci_controller_info *p = dev_id; | 608 | struct pci_controller_info *p = dev_id; |
609 | unsigned long afsr_reg = p->pbm_B.controller_regs + SCHIZO_CE_AFSR; | 609 | unsigned long afsr_reg = p->pbm_B.controller_regs + SCHIZO_CE_AFSR; |
@@ -778,7 +778,7 @@ static irqreturn_t schizo_pcierr_intr_other(struct pci_pbm_info *pbm) | |||
778 | return ret; | 778 | return ret; |
779 | } | 779 | } |
780 | 780 | ||
781 | static irqreturn_t schizo_pcierr_intr(int irq, void *dev_id, struct pt_regs *regs) | 781 | static irqreturn_t schizo_pcierr_intr(int irq, void *dev_id) |
782 | { | 782 | { |
783 | struct pci_pbm_info *pbm = dev_id; | 783 | struct pci_pbm_info *pbm = dev_id; |
784 | struct pci_controller_info *p = pbm->parent; | 784 | struct pci_controller_info *p = pbm->parent; |
@@ -933,7 +933,7 @@ static irqreturn_t schizo_pcierr_intr(int irq, void *dev_id, struct pt_regs *reg | |||
933 | /* We only expect UNMAP errors here. The rest of the Safari errors | 933 | /* We only expect UNMAP errors here. The rest of the Safari errors |
934 | * are marked fatal and thus cause a system reset. | 934 | * are marked fatal and thus cause a system reset. |
935 | */ | 935 | */ |
936 | static irqreturn_t schizo_safarierr_intr(int irq, void *dev_id, struct pt_regs *regs) | 936 | static irqreturn_t schizo_safarierr_intr(int irq, void *dev_id) |
937 | { | 937 | { |
938 | struct pci_controller_info *p = dev_id; | 938 | struct pci_controller_info *p = dev_id; |
939 | u64 errlog; | 939 | u64 errlog; |
diff --git a/arch/sparc64/kernel/power.c b/arch/sparc64/kernel/power.c index 0b9c70627ce4..699b24b890df 100644 --- a/arch/sparc64/kernel/power.c +++ b/arch/sparc64/kernel/power.c | |||
@@ -35,7 +35,7 @@ static void __iomem *power_reg; | |||
35 | static DECLARE_WAIT_QUEUE_HEAD(powerd_wait); | 35 | static DECLARE_WAIT_QUEUE_HEAD(powerd_wait); |
36 | static int button_pressed; | 36 | static int button_pressed; |
37 | 37 | ||
38 | static irqreturn_t power_handler(int irq, void *dev_id, struct pt_regs *regs) | 38 | static irqreturn_t power_handler(int irq, void *dev_id) |
39 | { | 39 | { |
40 | if (button_pressed == 0) { | 40 | if (button_pressed == 0) { |
41 | button_pressed = 1; | 41 | button_pressed = 1; |
diff --git a/arch/sparc64/kernel/sbus.c b/arch/sparc64/kernel/sbus.c index c49a57795743..01d6d869ea2b 100644 --- a/arch/sparc64/kernel/sbus.c +++ b/arch/sparc64/kernel/sbus.c | |||
@@ -839,7 +839,7 @@ unsigned int sbus_build_irq(void *buscookie, unsigned int ino) | |||
839 | #define SYSIO_UEAFSR_SIZE 0x00001c0000000000UL /* Bad transfer size 2^SIZE */ | 839 | #define SYSIO_UEAFSR_SIZE 0x00001c0000000000UL /* Bad transfer size 2^SIZE */ |
840 | #define SYSIO_UEAFSR_MID 0x000003e000000000UL /* UPA MID causing the fault */ | 840 | #define SYSIO_UEAFSR_MID 0x000003e000000000UL /* UPA MID causing the fault */ |
841 | #define SYSIO_UEAFSR_RESV2 0x0000001fffffffffUL /* Reserved */ | 841 | #define SYSIO_UEAFSR_RESV2 0x0000001fffffffffUL /* Reserved */ |
842 | static irqreturn_t sysio_ue_handler(int irq, void *dev_id, struct pt_regs *regs) | 842 | static irqreturn_t sysio_ue_handler(int irq, void *dev_id) |
843 | { | 843 | { |
844 | struct sbus_bus *sbus = dev_id; | 844 | struct sbus_bus *sbus = dev_id; |
845 | struct sbus_iommu *iommu = sbus->iommu; | 845 | struct sbus_iommu *iommu = sbus->iommu; |
@@ -911,7 +911,7 @@ static irqreturn_t sysio_ue_handler(int irq, void *dev_id, struct pt_regs *regs) | |||
911 | #define SYSIO_CEAFSR_SIZE 0x00001c0000000000UL /* Bad transfer size 2^SIZE */ | 911 | #define SYSIO_CEAFSR_SIZE 0x00001c0000000000UL /* Bad transfer size 2^SIZE */ |
912 | #define SYSIO_CEAFSR_MID 0x000003e000000000UL /* UPA MID causing the fault */ | 912 | #define SYSIO_CEAFSR_MID 0x000003e000000000UL /* UPA MID causing the fault */ |
913 | #define SYSIO_CEAFSR_RESV2 0x0000001fffffffffUL /* Reserved */ | 913 | #define SYSIO_CEAFSR_RESV2 0x0000001fffffffffUL /* Reserved */ |
914 | static irqreturn_t sysio_ce_handler(int irq, void *dev_id, struct pt_regs *regs) | 914 | static irqreturn_t sysio_ce_handler(int irq, void *dev_id) |
915 | { | 915 | { |
916 | struct sbus_bus *sbus = dev_id; | 916 | struct sbus_bus *sbus = dev_id; |
917 | struct sbus_iommu *iommu = sbus->iommu; | 917 | struct sbus_iommu *iommu = sbus->iommu; |
@@ -988,7 +988,7 @@ static irqreturn_t sysio_ce_handler(int irq, void *dev_id, struct pt_regs *regs) | |||
988 | #define SYSIO_SBAFSR_SIZE 0x00001c0000000000UL /* Size of transfer */ | 988 | #define SYSIO_SBAFSR_SIZE 0x00001c0000000000UL /* Size of transfer */ |
989 | #define SYSIO_SBAFSR_MID 0x000003e000000000UL /* MID causing the error */ | 989 | #define SYSIO_SBAFSR_MID 0x000003e000000000UL /* MID causing the error */ |
990 | #define SYSIO_SBAFSR_RESV3 0x0000001fffffffffUL /* Reserved */ | 990 | #define SYSIO_SBAFSR_RESV3 0x0000001fffffffffUL /* Reserved */ |
991 | static irqreturn_t sysio_sbus_error_handler(int irq, void *dev_id, struct pt_regs *regs) | 991 | static irqreturn_t sysio_sbus_error_handler(int irq, void *dev_id) |
992 | { | 992 | { |
993 | struct sbus_bus *sbus = dev_id; | 993 | struct sbus_bus *sbus = dev_id; |
994 | struct sbus_iommu *iommu = sbus->iommu; | 994 | struct sbus_iommu *iommu = sbus->iommu; |
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c index f62bf3a2de1a..cc09d8266414 100644 --- a/arch/sparc64/kernel/smp.c +++ b/arch/sparc64/kernel/smp.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <asm/cpudata.h> | 31 | #include <asm/cpudata.h> |
32 | 32 | ||
33 | #include <asm/irq.h> | 33 | #include <asm/irq.h> |
34 | #include <asm/irq_regs.h> | ||
34 | #include <asm/page.h> | 35 | #include <asm/page.h> |
35 | #include <asm/pgtable.h> | 36 | #include <asm/pgtable.h> |
36 | #include <asm/oplib.h> | 37 | #include <asm/oplib.h> |
@@ -1187,6 +1188,7 @@ void smp_percpu_timer_interrupt(struct pt_regs *regs) | |||
1187 | unsigned long compare, tick, pstate; | 1188 | unsigned long compare, tick, pstate; |
1188 | int cpu = smp_processor_id(); | 1189 | int cpu = smp_processor_id(); |
1189 | int user = user_mode(regs); | 1190 | int user = user_mode(regs); |
1191 | struct pt_regs *old_regs; | ||
1190 | 1192 | ||
1191 | /* | 1193 | /* |
1192 | * Check for level 14 softint. | 1194 | * Check for level 14 softint. |
@@ -1203,8 +1205,9 @@ void smp_percpu_timer_interrupt(struct pt_regs *regs) | |||
1203 | clear_softint(tick_mask); | 1205 | clear_softint(tick_mask); |
1204 | } | 1206 | } |
1205 | 1207 | ||
1208 | old_regs = set_irq_regs(regs); | ||
1206 | do { | 1209 | do { |
1207 | profile_tick(CPU_PROFILING, regs); | 1210 | profile_tick(CPU_PROFILING); |
1208 | if (!--prof_counter(cpu)) { | 1211 | if (!--prof_counter(cpu)) { |
1209 | irq_enter(); | 1212 | irq_enter(); |
1210 | 1213 | ||
@@ -1236,6 +1239,7 @@ void smp_percpu_timer_interrupt(struct pt_regs *regs) | |||
1236 | : /* no outputs */ | 1239 | : /* no outputs */ |
1237 | : "r" (pstate)); | 1240 | : "r" (pstate)); |
1238 | } while (time_after_eq(tick, compare)); | 1241 | } while (time_after_eq(tick, compare)); |
1242 | set_irq_regs(old_regs); | ||
1239 | } | 1243 | } |
1240 | 1244 | ||
1241 | static void __init smp_setup_percpu_timer(void) | 1245 | static void __init smp_setup_percpu_timer(void) |
diff --git a/arch/sparc64/kernel/time.c b/arch/sparc64/kernel/time.c index 00f6fc4aaaff..061e1b1fa583 100644 --- a/arch/sparc64/kernel/time.c +++ b/arch/sparc64/kernel/time.c | |||
@@ -45,6 +45,7 @@ | |||
45 | #include <asm/cpudata.h> | 45 | #include <asm/cpudata.h> |
46 | #include <asm/uaccess.h> | 46 | #include <asm/uaccess.h> |
47 | #include <asm/prom.h> | 47 | #include <asm/prom.h> |
48 | #include <asm/irq_regs.h> | ||
48 | 49 | ||
49 | DEFINE_SPINLOCK(mostek_lock); | 50 | DEFINE_SPINLOCK(mostek_lock); |
50 | DEFINE_SPINLOCK(rtc_lock); | 51 | DEFINE_SPINLOCK(rtc_lock); |
@@ -452,7 +453,7 @@ static inline void timer_check_rtc(void) | |||
452 | } | 453 | } |
453 | } | 454 | } |
454 | 455 | ||
455 | irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs) | 456 | irqreturn_t timer_interrupt(int irq, void *dev_id) |
456 | { | 457 | { |
457 | unsigned long ticks, compare, pstate; | 458 | unsigned long ticks, compare, pstate; |
458 | 459 | ||
@@ -460,8 +461,8 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs) | |||
460 | 461 | ||
461 | do { | 462 | do { |
462 | #ifndef CONFIG_SMP | 463 | #ifndef CONFIG_SMP |
463 | profile_tick(CPU_PROFILING, regs); | 464 | profile_tick(CPU_PROFILING); |
464 | update_process_times(user_mode(regs)); | 465 | update_process_times(user_mode(get_irq_regs())); |
465 | #endif | 466 | #endif |
466 | do_timer(1); | 467 | do_timer(1); |
467 | 468 | ||
diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c index cfd9f01fd464..426633e5d6e3 100644 --- a/arch/um/drivers/line.c +++ b/arch/um/drivers/line.c | |||
@@ -20,7 +20,7 @@ | |||
20 | 20 | ||
21 | #define LINE_BUFSIZE 4096 | 21 | #define LINE_BUFSIZE 4096 |
22 | 22 | ||
23 | static irqreturn_t line_interrupt(int irq, void *data, struct pt_regs *unused) | 23 | static irqreturn_t line_interrupt(int irq, void *data) |
24 | { | 24 | { |
25 | struct chan *chan = data; | 25 | struct chan *chan = data; |
26 | struct line *line = chan->line; | 26 | struct line *line = chan->line; |
@@ -364,8 +364,7 @@ void line_unthrottle(struct tty_struct *tty) | |||
364 | reactivate_chan(&line->chan_list, line->driver->read_irq); | 364 | reactivate_chan(&line->chan_list, line->driver->read_irq); |
365 | } | 365 | } |
366 | 366 | ||
367 | static irqreturn_t line_write_interrupt(int irq, void *data, | 367 | static irqreturn_t line_write_interrupt(int irq, void *data) |
368 | struct pt_regs *unused) | ||
369 | { | 368 | { |
370 | struct chan *chan = data; | 369 | struct chan *chan = data; |
371 | struct line *line = chan->line; | 370 | struct line *line = chan->line; |
@@ -712,7 +711,7 @@ struct winch { | |||
712 | struct tty_struct *tty; | 711 | struct tty_struct *tty; |
713 | }; | 712 | }; |
714 | 713 | ||
715 | static irqreturn_t winch_interrupt(int irq, void *data, struct pt_regs *unused) | 714 | static irqreturn_t winch_interrupt(int irq, void *data) |
716 | { | 715 | { |
717 | struct winch *winch = data; | 716 | struct winch *winch = data; |
718 | struct tty_struct *tty; | 717 | struct tty_struct *tty; |
diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c index a67dcbd78de4..d08bd036ccb8 100644 --- a/arch/um/drivers/mconsole_kern.c +++ b/arch/um/drivers/mconsole_kern.c | |||
@@ -74,8 +74,7 @@ static void mc_work_proc(void *unused) | |||
74 | 74 | ||
75 | static DECLARE_WORK(mconsole_work, mc_work_proc, NULL); | 75 | static DECLARE_WORK(mconsole_work, mc_work_proc, NULL); |
76 | 76 | ||
77 | static irqreturn_t mconsole_interrupt(int irq, void *dev_id, | 77 | static irqreturn_t mconsole_interrupt(int irq, void *dev_id) |
78 | struct pt_regs *regs) | ||
79 | { | 78 | { |
80 | /* long to avoid size mismatch warnings from gcc */ | 79 | /* long to avoid size mismatch warnings from gcc */ |
81 | long fd; | 80 | long fd; |
@@ -674,8 +673,9 @@ static void with_console(struct mc_request *req, void (*proc)(void *), | |||
674 | static void sysrq_proc(void *arg) | 673 | static void sysrq_proc(void *arg) |
675 | { | 674 | { |
676 | char *op = arg; | 675 | char *op = arg; |
677 | 676 | struct pt_regs *old_regs = set_irq_regs(¤t->thread.regs); | |
678 | handle_sysrq(*op, ¤t->thread.regs, NULL); | 677 | handle_sysrq(*op, NULL); |
678 | set_irq_regs(old_regs); | ||
679 | } | 679 | } |
680 | 680 | ||
681 | void mconsole_sysrq(struct mc_request *req) | 681 | void mconsole_sysrq(struct mc_request *req) |
diff --git a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c index c1c5604752fb..ec9eb8bd9432 100644 --- a/arch/um/drivers/net_kern.c +++ b/arch/um/drivers/net_kern.c | |||
@@ -77,7 +77,7 @@ static void uml_dev_close(void* dev) | |||
77 | dev_close( (struct net_device *) dev); | 77 | dev_close( (struct net_device *) dev); |
78 | } | 78 | } |
79 | 79 | ||
80 | irqreturn_t uml_net_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 80 | irqreturn_t uml_net_interrupt(int irq, void *dev_id) |
81 | { | 81 | { |
82 | struct net_device *dev = dev_id; | 82 | struct net_device *dev = dev_id; |
83 | struct uml_net_private *lp = dev->priv; | 83 | struct uml_net_private *lp = dev->priv; |
diff --git a/arch/um/drivers/pcap_user.h b/arch/um/drivers/pcap_user.h index 58f9f6a1420f..96b80b565eeb 100644 --- a/arch/um/drivers/pcap_user.h +++ b/arch/um/drivers/pcap_user.h | |||
@@ -15,7 +15,7 @@ struct pcap_data { | |||
15 | void *dev; | 15 | void *dev; |
16 | }; | 16 | }; |
17 | 17 | ||
18 | extern struct net_user_info pcap_user_info; | 18 | extern const struct net_user_info pcap_user_info; |
19 | 19 | ||
20 | extern int pcap_user_read(int fd, void *buf, int len, struct pcap_data *pri); | 20 | extern int pcap_user_read(int fd, void *buf, int len, struct pcap_data *pri); |
21 | 21 | ||
diff --git a/arch/um/drivers/port_kern.c b/arch/um/drivers/port_kern.c index 73755f37a8a8..ce9f3733f73e 100644 --- a/arch/um/drivers/port_kern.c +++ b/arch/um/drivers/port_kern.c | |||
@@ -47,7 +47,7 @@ struct connection { | |||
47 | struct port_list *port; | 47 | struct port_list *port; |
48 | }; | 48 | }; |
49 | 49 | ||
50 | static irqreturn_t pipe_interrupt(int irq, void *data, struct pt_regs *regs) | 50 | static irqreturn_t pipe_interrupt(int irq, void *data) |
51 | { | 51 | { |
52 | struct connection *conn = data; | 52 | struct connection *conn = data; |
53 | int fd; | 53 | int fd; |
@@ -152,7 +152,7 @@ void port_work_proc(void *unused) | |||
152 | 152 | ||
153 | DECLARE_WORK(port_work, port_work_proc, NULL); | 153 | DECLARE_WORK(port_work, port_work_proc, NULL); |
154 | 154 | ||
155 | static irqreturn_t port_interrupt(int irq, void *data, struct pt_regs *regs) | 155 | static irqreturn_t port_interrupt(int irq, void *data) |
156 | { | 156 | { |
157 | struct port_list *port = data; | 157 | struct port_list *port = data; |
158 | 158 | ||
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index f0b0668458b7..bc458f57921b 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c | |||
@@ -524,7 +524,7 @@ static void ubd_handler(void) | |||
524 | do_ubd_request(ubd_queue); | 524 | do_ubd_request(ubd_queue); |
525 | } | 525 | } |
526 | 526 | ||
527 | static irqreturn_t ubd_intr(int irq, void *dev, struct pt_regs *unused) | 527 | static irqreturn_t ubd_intr(int irq, void *dev) |
528 | { | 528 | { |
529 | ubd_handler(); | 529 | ubd_handler(); |
530 | return(IRQ_HANDLED); | 530 | return(IRQ_HANDLED); |
diff --git a/arch/um/drivers/xterm_kern.c b/arch/um/drivers/xterm_kern.c index 6036ec85895a..a4ce7058e10e 100644 --- a/arch/um/drivers/xterm_kern.c +++ b/arch/um/drivers/xterm_kern.c | |||
@@ -21,7 +21,7 @@ struct xterm_wait { | |||
21 | int new_fd; | 21 | int new_fd; |
22 | }; | 22 | }; |
23 | 23 | ||
24 | static irqreturn_t xterm_interrupt(int irq, void *data, struct pt_regs *regs) | 24 | static irqreturn_t xterm_interrupt(int irq, void *data) |
25 | { | 25 | { |
26 | struct xterm_wait *xterm = data; | 26 | struct xterm_wait *xterm = data; |
27 | int fd; | 27 | int fd; |
diff --git a/arch/um/include/irq_kern.h b/arch/um/include/irq_kern.h index c222d56b1494..4f775597fd5f 100644 --- a/arch/um/include/irq_kern.h +++ b/arch/um/include/irq_kern.h | |||
@@ -10,12 +10,11 @@ | |||
10 | #include "asm/ptrace.h" | 10 | #include "asm/ptrace.h" |
11 | 11 | ||
12 | extern int um_request_irq(unsigned int irq, int fd, int type, | 12 | extern int um_request_irq(unsigned int irq, int fd, int type, |
13 | irqreturn_t (*handler)(int, void *, | 13 | irq_handler_t handler, |
14 | struct pt_regs *), | ||
15 | unsigned long irqflags, const char * devname, | 14 | unsigned long irqflags, const char * devname, |
16 | void *dev_id); | 15 | void *dev_id); |
17 | extern int init_aio_irq(int irq, char *name, | 16 | extern int init_aio_irq(int irq, char *name, |
18 | irqreturn_t (*handler)(int, void *, struct pt_regs *)); | 17 | irq_handler_t handler); |
19 | 18 | ||
20 | #endif | 19 | #endif |
21 | 20 | ||
diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c index eee97bb81ba5..ef259569fd8c 100644 --- a/arch/um/kernel/irq.c +++ b/arch/um/kernel/irq.c | |||
@@ -355,14 +355,16 @@ void forward_interrupts(int pid) | |||
355 | */ | 355 | */ |
356 | unsigned int do_IRQ(int irq, union uml_pt_regs *regs) | 356 | unsigned int do_IRQ(int irq, union uml_pt_regs *regs) |
357 | { | 357 | { |
358 | irq_enter(); | 358 | struct pt_regs *old_regs = set_irq_regs((struct pt_regs *)regs); |
359 | __do_IRQ(irq, (struct pt_regs *)regs); | 359 | irq_enter(); |
360 | irq_exit(); | 360 | __do_IRQ(irq); |
361 | return 1; | 361 | irq_exit(); |
362 | set_irq_regs(old_regs); | ||
363 | return 1; | ||
362 | } | 364 | } |
363 | 365 | ||
364 | int um_request_irq(unsigned int irq, int fd, int type, | 366 | int um_request_irq(unsigned int irq, int fd, int type, |
365 | irqreturn_t (*handler)(int, void *, struct pt_regs *), | 367 | irq_handler_t handler, |
366 | unsigned long irqflags, const char * devname, | 368 | unsigned long irqflags, const char * devname, |
367 | void *dev_id) | 369 | void *dev_id) |
368 | { | 370 | { |
@@ -423,8 +425,7 @@ void __init init_IRQ(void) | |||
423 | } | 425 | } |
424 | } | 426 | } |
425 | 427 | ||
426 | int init_aio_irq(int irq, char *name, irqreturn_t (*handler)(int, void *, | 428 | int init_aio_irq(int irq, char *name, irq_handler_t handler) |
427 | struct pt_regs *)) | ||
428 | { | 429 | { |
429 | int fds[2], err; | 430 | int fds[2], err; |
430 | 431 | ||
diff --git a/arch/um/kernel/sigio.c b/arch/um/kernel/sigio.c index 0ad755ceb212..2b0ab438301c 100644 --- a/arch/um/kernel/sigio.c +++ b/arch/um/kernel/sigio.c | |||
@@ -17,7 +17,7 @@ | |||
17 | /* Protected by sigio_lock() called from write_sigio_workaround */ | 17 | /* Protected by sigio_lock() called from write_sigio_workaround */ |
18 | static int sigio_irq_fd = -1; | 18 | static int sigio_irq_fd = -1; |
19 | 19 | ||
20 | static irqreturn_t sigio_interrupt(int irq, void *data, struct pt_regs *unused) | 20 | static irqreturn_t sigio_interrupt(int irq, void *data) |
21 | { | 21 | { |
22 | char c; | 22 | char c; |
23 | 23 | ||
diff --git a/arch/um/kernel/time.c b/arch/um/kernel/time.c index a92965f8f9cd..2e354b3ca060 100644 --- a/arch/um/kernel/time.c +++ b/arch/um/kernel/time.c | |||
@@ -86,7 +86,7 @@ static inline unsigned long long get_time(void) | |||
86 | return nsecs; | 86 | return nsecs; |
87 | } | 87 | } |
88 | 88 | ||
89 | irqreturn_t um_timer(int irq, void *dev, struct pt_regs *regs) | 89 | irqreturn_t um_timer(int irq, void *dev) |
90 | { | 90 | { |
91 | unsigned long long nsecs; | 91 | unsigned long long nsecs; |
92 | unsigned long flags; | 92 | unsigned long flags; |
diff --git a/arch/x86_64/ia32/ptrace32.c b/arch/x86_64/ia32/ptrace32.c index d18198ed636b..3a7561d4703e 100644 --- a/arch/x86_64/ia32/ptrace32.c +++ b/arch/x86_64/ia32/ptrace32.c | |||
@@ -205,9 +205,9 @@ static int getreg32(struct task_struct *child, unsigned regno, u32 *val) | |||
205 | static long ptrace32_siginfo(unsigned request, u32 pid, u32 addr, u32 data) | 205 | static long ptrace32_siginfo(unsigned request, u32 pid, u32 addr, u32 data) |
206 | { | 206 | { |
207 | int ret; | 207 | int ret; |
208 | compat_siginfo_t *si32 = (compat_siginfo_t *)compat_ptr(data); | 208 | compat_siginfo_t __user *si32 = compat_ptr(data); |
209 | siginfo_t ssi; | 209 | siginfo_t ssi; |
210 | siginfo_t *si = compat_alloc_user_space(sizeof(siginfo_t)); | 210 | siginfo_t __user *si = compat_alloc_user_space(sizeof(siginfo_t)); |
211 | if (request == PTRACE_SETSIGINFO) { | 211 | if (request == PTRACE_SETSIGINFO) { |
212 | memset(&ssi, 0, sizeof(siginfo_t)); | 212 | memset(&ssi, 0, sizeof(siginfo_t)); |
213 | ret = copy_siginfo_from_user32(&ssi, si32); | 213 | ret = copy_siginfo_from_user32(&ssi, si32); |
diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c index af4a1c71a80d..4d9d5ed942b2 100644 --- a/arch/x86_64/kernel/apic.c +++ b/arch/x86_64/kernel/apic.c | |||
@@ -913,8 +913,10 @@ void smp_local_timer_interrupt(void) | |||
913 | * [ if a single-CPU system runs an SMP kernel then we call the local | 913 | * [ if a single-CPU system runs an SMP kernel then we call the local |
914 | * interrupt as well. Thus we cannot inline the local irq ... ] | 914 | * interrupt as well. Thus we cannot inline the local irq ... ] |
915 | */ | 915 | */ |
916 | void smp_apic_timer_interrupt(void) | 916 | void smp_apic_timer_interrupt(struct pt_regs *regs) |
917 | { | 917 | { |
918 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
919 | |||
918 | /* | 920 | /* |
919 | * the NMI deadlock-detector uses this. | 921 | * the NMI deadlock-detector uses this. |
920 | */ | 922 | */ |
@@ -934,6 +936,7 @@ void smp_apic_timer_interrupt(void) | |||
934 | irq_enter(); | 936 | irq_enter(); |
935 | smp_local_timer_interrupt(); | 937 | smp_local_timer_interrupt(); |
936 | irq_exit(); | 938 | irq_exit(); |
939 | set_irq_regs(old_regs); | ||
937 | } | 940 | } |
938 | 941 | ||
939 | /* | 942 | /* |
diff --git a/arch/x86_64/kernel/genapic_cluster.c b/arch/x86_64/kernel/genapic_cluster.c index cdb90e671b88..73d76308b955 100644 --- a/arch/x86_64/kernel/genapic_cluster.c +++ b/arch/x86_64/kernel/genapic_cluster.c | |||
@@ -63,6 +63,13 @@ static cpumask_t cluster_target_cpus(void) | |||
63 | return cpumask_of_cpu(0); | 63 | return cpumask_of_cpu(0); |
64 | } | 64 | } |
65 | 65 | ||
66 | static cpumask_t cluster_vector_allocation_domain(int cpu) | ||
67 | { | ||
68 | cpumask_t domain = CPU_MASK_NONE; | ||
69 | cpu_set(cpu, domain); | ||
70 | return domain; | ||
71 | } | ||
72 | |||
66 | static void cluster_send_IPI_mask(cpumask_t mask, int vector) | 73 | static void cluster_send_IPI_mask(cpumask_t mask, int vector) |
67 | { | 74 | { |
68 | send_IPI_mask_sequence(mask, vector); | 75 | send_IPI_mask_sequence(mask, vector); |
@@ -119,6 +126,7 @@ struct genapic apic_cluster = { | |||
119 | .int_delivery_mode = dest_Fixed, | 126 | .int_delivery_mode = dest_Fixed, |
120 | .int_dest_mode = (APIC_DEST_PHYSICAL != 0), | 127 | .int_dest_mode = (APIC_DEST_PHYSICAL != 0), |
121 | .target_cpus = cluster_target_cpus, | 128 | .target_cpus = cluster_target_cpus, |
129 | .vector_allocation_domain = cluster_vector_allocation_domain, | ||
122 | .apic_id_registered = cluster_apic_id_registered, | 130 | .apic_id_registered = cluster_apic_id_registered, |
123 | .init_apic_ldr = cluster_init_apic_ldr, | 131 | .init_apic_ldr = cluster_init_apic_ldr, |
124 | .send_IPI_all = cluster_send_IPI_all, | 132 | .send_IPI_all = cluster_send_IPI_all, |
diff --git a/arch/x86_64/kernel/genapic_flat.c b/arch/x86_64/kernel/genapic_flat.c index 50ad153eaac4..0dfc223c1839 100644 --- a/arch/x86_64/kernel/genapic_flat.c +++ b/arch/x86_64/kernel/genapic_flat.c | |||
@@ -22,6 +22,20 @@ static cpumask_t flat_target_cpus(void) | |||
22 | return cpu_online_map; | 22 | return cpu_online_map; |
23 | } | 23 | } |
24 | 24 | ||
25 | static cpumask_t flat_vector_allocation_domain(int cpu) | ||
26 | { | ||
27 | /* Careful. Some cpus do not strictly honor the set of cpus | ||
28 | * specified in the interrupt destination when using lowest | ||
29 | * priority interrupt delivery mode. | ||
30 | * | ||
31 | * In particular there was a hyperthreading cpu observed to | ||
32 | * deliver interrupts to the wrong hyperthread when only one | ||
33 | * hyperthread was specified in the interrupt desitination. | ||
34 | */ | ||
35 | cpumask_t domain = { { [0] = APIC_ALL_CPUS, } }; | ||
36 | return domain; | ||
37 | } | ||
38 | |||
25 | /* | 39 | /* |
26 | * Set up the logical destination ID. | 40 | * Set up the logical destination ID. |
27 | * | 41 | * |
@@ -121,6 +135,7 @@ struct genapic apic_flat = { | |||
121 | .int_delivery_mode = dest_LowestPrio, | 135 | .int_delivery_mode = dest_LowestPrio, |
122 | .int_dest_mode = (APIC_DEST_LOGICAL != 0), | 136 | .int_dest_mode = (APIC_DEST_LOGICAL != 0), |
123 | .target_cpus = flat_target_cpus, | 137 | .target_cpus = flat_target_cpus, |
138 | .vector_allocation_domain = flat_vector_allocation_domain, | ||
124 | .apic_id_registered = flat_apic_id_registered, | 139 | .apic_id_registered = flat_apic_id_registered, |
125 | .init_apic_ldr = flat_init_apic_ldr, | 140 | .init_apic_ldr = flat_init_apic_ldr, |
126 | .send_IPI_all = flat_send_IPI_all, | 141 | .send_IPI_all = flat_send_IPI_all, |
@@ -141,6 +156,14 @@ static cpumask_t physflat_target_cpus(void) | |||
141 | return cpumask_of_cpu(0); | 156 | return cpumask_of_cpu(0); |
142 | } | 157 | } |
143 | 158 | ||
159 | static cpumask_t physflat_vector_allocation_domain(int cpu) | ||
160 | { | ||
161 | cpumask_t domain = CPU_MASK_NONE; | ||
162 | cpu_set(cpu, domain); | ||
163 | return domain; | ||
164 | } | ||
165 | |||
166 | |||
144 | static void physflat_send_IPI_mask(cpumask_t cpumask, int vector) | 167 | static void physflat_send_IPI_mask(cpumask_t cpumask, int vector) |
145 | { | 168 | { |
146 | send_IPI_mask_sequence(cpumask, vector); | 169 | send_IPI_mask_sequence(cpumask, vector); |
@@ -179,6 +202,7 @@ struct genapic apic_physflat = { | |||
179 | .int_delivery_mode = dest_Fixed, | 202 | .int_delivery_mode = dest_Fixed, |
180 | .int_dest_mode = (APIC_DEST_PHYSICAL != 0), | 203 | .int_dest_mode = (APIC_DEST_PHYSICAL != 0), |
181 | .target_cpus = physflat_target_cpus, | 204 | .target_cpus = physflat_target_cpus, |
205 | .vector_allocation_domain = physflat_vector_allocation_domain, | ||
182 | .apic_id_registered = flat_apic_id_registered, | 206 | .apic_id_registered = flat_apic_id_registered, |
183 | .init_apic_ldr = flat_init_apic_ldr,/*not needed, but shouldn't hurt*/ | 207 | .init_apic_ldr = flat_init_apic_ldr,/*not needed, but shouldn't hurt*/ |
184 | .send_IPI_all = physflat_send_IPI_all, | 208 | .send_IPI_all = physflat_send_IPI_all, |
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c index 91728d9d3472..771bcf77daf2 100644 --- a/arch/x86_64/kernel/io_apic.c +++ b/arch/x86_64/kernel/io_apic.c | |||
@@ -47,7 +47,7 @@ | |||
47 | #include <asm/msidef.h> | 47 | #include <asm/msidef.h> |
48 | #include <asm/hypertransport.h> | 48 | #include <asm/hypertransport.h> |
49 | 49 | ||
50 | static int assign_irq_vector(int irq, cpumask_t mask); | 50 | static int assign_irq_vector(int irq, cpumask_t mask, cpumask_t *result); |
51 | 51 | ||
52 | #define __apicdebuginit __init | 52 | #define __apicdebuginit __init |
53 | 53 | ||
@@ -174,12 +174,10 @@ static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t mask) | |||
174 | 174 | ||
175 | cpus_and(mask, tmp, CPU_MASK_ALL); | 175 | cpus_and(mask, tmp, CPU_MASK_ALL); |
176 | 176 | ||
177 | vector = assign_irq_vector(irq, mask); | 177 | vector = assign_irq_vector(irq, mask, &tmp); |
178 | if (vector < 0) | 178 | if (vector < 0) |
179 | return; | 179 | return; |
180 | 180 | ||
181 | cpus_clear(tmp); | ||
182 | cpu_set(vector >> 8, tmp); | ||
183 | dest = cpu_mask_to_apicid(tmp); | 181 | dest = cpu_mask_to_apicid(tmp); |
184 | 182 | ||
185 | /* | 183 | /* |
@@ -188,7 +186,7 @@ static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t mask) | |||
188 | dest = SET_APIC_LOGICAL_ID(dest); | 186 | dest = SET_APIC_LOGICAL_ID(dest); |
189 | 187 | ||
190 | spin_lock_irqsave(&ioapic_lock, flags); | 188 | spin_lock_irqsave(&ioapic_lock, flags); |
191 | __target_IO_APIC_irq(irq, dest, vector & 0xff); | 189 | __target_IO_APIC_irq(irq, dest, vector); |
192 | set_native_irq_info(irq, mask); | 190 | set_native_irq_info(irq, mask); |
193 | spin_unlock_irqrestore(&ioapic_lock, flags); | 191 | spin_unlock_irqrestore(&ioapic_lock, flags); |
194 | } | 192 | } |
@@ -563,9 +561,45 @@ static inline int IO_APIC_irq_trigger(int irq) | |||
563 | } | 561 | } |
564 | 562 | ||
565 | /* irq_vectors is indexed by the sum of all RTEs in all I/O APICs. */ | 563 | /* irq_vectors is indexed by the sum of all RTEs in all I/O APICs. */ |
566 | unsigned int irq_vector[NR_IRQ_VECTORS] __read_mostly = { FIRST_EXTERNAL_VECTOR, 0 }; | 564 | static u8 irq_vector[NR_IRQ_VECTORS] __read_mostly = { |
565 | [0] = FIRST_EXTERNAL_VECTOR + 0, | ||
566 | [1] = FIRST_EXTERNAL_VECTOR + 1, | ||
567 | [2] = FIRST_EXTERNAL_VECTOR + 2, | ||
568 | [3] = FIRST_EXTERNAL_VECTOR + 3, | ||
569 | [4] = FIRST_EXTERNAL_VECTOR + 4, | ||
570 | [5] = FIRST_EXTERNAL_VECTOR + 5, | ||
571 | [6] = FIRST_EXTERNAL_VECTOR + 6, | ||
572 | [7] = FIRST_EXTERNAL_VECTOR + 7, | ||
573 | [8] = FIRST_EXTERNAL_VECTOR + 8, | ||
574 | [9] = FIRST_EXTERNAL_VECTOR + 9, | ||
575 | [10] = FIRST_EXTERNAL_VECTOR + 10, | ||
576 | [11] = FIRST_EXTERNAL_VECTOR + 11, | ||
577 | [12] = FIRST_EXTERNAL_VECTOR + 12, | ||
578 | [13] = FIRST_EXTERNAL_VECTOR + 13, | ||
579 | [14] = FIRST_EXTERNAL_VECTOR + 14, | ||
580 | [15] = FIRST_EXTERNAL_VECTOR + 15, | ||
581 | }; | ||
582 | |||
583 | static cpumask_t irq_domain[NR_IRQ_VECTORS] __read_mostly = { | ||
584 | [0] = CPU_MASK_ALL, | ||
585 | [1] = CPU_MASK_ALL, | ||
586 | [2] = CPU_MASK_ALL, | ||
587 | [3] = CPU_MASK_ALL, | ||
588 | [4] = CPU_MASK_ALL, | ||
589 | [5] = CPU_MASK_ALL, | ||
590 | [6] = CPU_MASK_ALL, | ||
591 | [7] = CPU_MASK_ALL, | ||
592 | [8] = CPU_MASK_ALL, | ||
593 | [9] = CPU_MASK_ALL, | ||
594 | [10] = CPU_MASK_ALL, | ||
595 | [11] = CPU_MASK_ALL, | ||
596 | [12] = CPU_MASK_ALL, | ||
597 | [13] = CPU_MASK_ALL, | ||
598 | [14] = CPU_MASK_ALL, | ||
599 | [15] = CPU_MASK_ALL, | ||
600 | }; | ||
567 | 601 | ||
568 | static int __assign_irq_vector(int irq, cpumask_t mask) | 602 | static int __assign_irq_vector(int irq, cpumask_t mask, cpumask_t *result) |
569 | { | 603 | { |
570 | /* | 604 | /* |
571 | * NOTE! The local APIC isn't very good at handling | 605 | * NOTE! The local APIC isn't very good at handling |
@@ -587,16 +621,24 @@ static int __assign_irq_vector(int irq, cpumask_t mask) | |||
587 | 621 | ||
588 | BUG_ON((unsigned)irq >= NR_IRQ_VECTORS); | 622 | BUG_ON((unsigned)irq >= NR_IRQ_VECTORS); |
589 | 623 | ||
590 | if (IO_APIC_VECTOR(irq) > 0) | 624 | if (irq_vector[irq] > 0) |
591 | old_vector = IO_APIC_VECTOR(irq); | 625 | old_vector = irq_vector[irq]; |
592 | if ((old_vector > 0) && cpu_isset(old_vector >> 8, mask)) { | 626 | if (old_vector > 0) { |
593 | return old_vector; | 627 | cpus_and(*result, irq_domain[irq], mask); |
628 | if (!cpus_empty(*result)) | ||
629 | return old_vector; | ||
594 | } | 630 | } |
595 | 631 | ||
596 | for_each_cpu_mask(cpu, mask) { | 632 | for_each_cpu_mask(cpu, mask) { |
633 | cpumask_t domain; | ||
634 | int first, new_cpu; | ||
597 | int vector, offset; | 635 | int vector, offset; |
598 | vector = pos[cpu].vector; | 636 | |
599 | offset = pos[cpu].offset; | 637 | domain = vector_allocation_domain(cpu); |
638 | first = first_cpu(domain); | ||
639 | |||
640 | vector = pos[first].vector; | ||
641 | offset = pos[first].offset; | ||
600 | next: | 642 | next: |
601 | vector += 8; | 643 | vector += 8; |
602 | if (vector >= FIRST_SYSTEM_VECTOR) { | 644 | if (vector >= FIRST_SYSTEM_VECTOR) { |
@@ -604,35 +646,40 @@ next: | |||
604 | offset = (offset + 1) % 8; | 646 | offset = (offset + 1) % 8; |
605 | vector = FIRST_DEVICE_VECTOR + offset; | 647 | vector = FIRST_DEVICE_VECTOR + offset; |
606 | } | 648 | } |
607 | if (unlikely(pos[cpu].vector == vector)) | 649 | if (unlikely(pos[first].vector == vector)) |
608 | continue; | 650 | continue; |
609 | if (vector == IA32_SYSCALL_VECTOR) | 651 | if (vector == IA32_SYSCALL_VECTOR) |
610 | goto next; | 652 | goto next; |
611 | if (per_cpu(vector_irq, cpu)[vector] != -1) | 653 | for_each_cpu_mask(new_cpu, domain) |
612 | goto next; | 654 | if (per_cpu(vector_irq, cpu)[vector] != -1) |
655 | goto next; | ||
613 | /* Found one! */ | 656 | /* Found one! */ |
614 | pos[cpu].vector = vector; | 657 | for_each_cpu_mask(new_cpu, domain) { |
615 | pos[cpu].offset = offset; | 658 | pos[cpu].vector = vector; |
659 | pos[cpu].offset = offset; | ||
660 | } | ||
616 | if (old_vector >= 0) { | 661 | if (old_vector >= 0) { |
617 | int old_cpu = old_vector >> 8; | 662 | int old_cpu; |
618 | old_vector &= 0xff; | 663 | for_each_cpu_mask(old_cpu, domain) |
619 | per_cpu(vector_irq, old_cpu)[old_vector] = -1; | 664 | per_cpu(vector_irq, old_cpu)[old_vector] = -1; |
620 | } | 665 | } |
621 | per_cpu(vector_irq, cpu)[vector] = irq; | 666 | for_each_cpu_mask(new_cpu, domain) |
622 | vector |= cpu << 8; | 667 | per_cpu(vector_irq, new_cpu)[vector] = irq; |
623 | IO_APIC_VECTOR(irq) = vector; | 668 | irq_vector[irq] = vector; |
669 | irq_domain[irq] = domain; | ||
670 | cpus_and(*result, domain, mask); | ||
624 | return vector; | 671 | return vector; |
625 | } | 672 | } |
626 | return -ENOSPC; | 673 | return -ENOSPC; |
627 | } | 674 | } |
628 | 675 | ||
629 | static int assign_irq_vector(int irq, cpumask_t mask) | 676 | static int assign_irq_vector(int irq, cpumask_t mask, cpumask_t *result) |
630 | { | 677 | { |
631 | int vector; | 678 | int vector; |
632 | unsigned long flags; | 679 | unsigned long flags; |
633 | 680 | ||
634 | spin_lock_irqsave(&vector_lock, flags); | 681 | spin_lock_irqsave(&vector_lock, flags); |
635 | vector = __assign_irq_vector(irq, mask); | 682 | vector = __assign_irq_vector(irq, mask, result); |
636 | spin_unlock_irqrestore(&vector_lock, flags); | 683 | spin_unlock_irqrestore(&vector_lock, flags); |
637 | return vector; | 684 | return vector; |
638 | } | 685 | } |
@@ -704,14 +751,12 @@ static void __init setup_IO_APIC_irqs(void) | |||
704 | 751 | ||
705 | if (IO_APIC_IRQ(irq)) { | 752 | if (IO_APIC_IRQ(irq)) { |
706 | cpumask_t mask; | 753 | cpumask_t mask; |
707 | vector = assign_irq_vector(irq, TARGET_CPUS); | 754 | vector = assign_irq_vector(irq, TARGET_CPUS, &mask); |
708 | if (vector < 0) | 755 | if (vector < 0) |
709 | continue; | 756 | continue; |
710 | 757 | ||
711 | cpus_clear(mask); | ||
712 | cpu_set(vector >> 8, mask); | ||
713 | entry.dest.logical.logical_dest = cpu_mask_to_apicid(mask); | 758 | entry.dest.logical.logical_dest = cpu_mask_to_apicid(mask); |
714 | entry.vector = vector & 0xff; | 759 | entry.vector = vector; |
715 | 760 | ||
716 | ioapic_register_intr(irq, vector, IOAPIC_AUTO); | 761 | ioapic_register_intr(irq, vector, IOAPIC_AUTO); |
717 | if (!apic && (irq < 16)) | 762 | if (!apic && (irq < 16)) |
@@ -1289,7 +1334,7 @@ static inline void init_IO_APIC_traps(void) | |||
1289 | */ | 1334 | */ |
1290 | for (irq = 0; irq < NR_IRQS ; irq++) { | 1335 | for (irq = 0; irq < NR_IRQS ; irq++) { |
1291 | int tmp = irq; | 1336 | int tmp = irq; |
1292 | if (IO_APIC_IRQ(tmp) && !IO_APIC_VECTOR(tmp)) { | 1337 | if (IO_APIC_IRQ(tmp) && !irq_vector[tmp]) { |
1293 | /* | 1338 | /* |
1294 | * Hmm.. We don't have an entry for this, | 1339 | * Hmm.. We don't have an entry for this, |
1295 | * so default to an old-fashioned 8259 | 1340 | * so default to an old-fashioned 8259 |
@@ -1430,12 +1475,13 @@ static inline void check_timer(void) | |||
1430 | { | 1475 | { |
1431 | int apic1, pin1, apic2, pin2; | 1476 | int apic1, pin1, apic2, pin2; |
1432 | int vector; | 1477 | int vector; |
1478 | cpumask_t mask; | ||
1433 | 1479 | ||
1434 | /* | 1480 | /* |
1435 | * get/set the timer IRQ vector: | 1481 | * get/set the timer IRQ vector: |
1436 | */ | 1482 | */ |
1437 | disable_8259A_irq(0); | 1483 | disable_8259A_irq(0); |
1438 | vector = assign_irq_vector(0, TARGET_CPUS); | 1484 | vector = assign_irq_vector(0, TARGET_CPUS, &mask); |
1439 | 1485 | ||
1440 | /* | 1486 | /* |
1441 | * Subtle, code in do_timer_interrupt() expects an AEOI | 1487 | * Subtle, code in do_timer_interrupt() expects an AEOI |
@@ -1667,6 +1713,7 @@ int create_irq(void) | |||
1667 | int new; | 1713 | int new; |
1668 | int vector = 0; | 1714 | int vector = 0; |
1669 | unsigned long flags; | 1715 | unsigned long flags; |
1716 | cpumask_t mask; | ||
1670 | 1717 | ||
1671 | irq = -ENOSPC; | 1718 | irq = -ENOSPC; |
1672 | spin_lock_irqsave(&vector_lock, flags); | 1719 | spin_lock_irqsave(&vector_lock, flags); |
@@ -1675,7 +1722,7 @@ int create_irq(void) | |||
1675 | continue; | 1722 | continue; |
1676 | if (irq_vector[new] != 0) | 1723 | if (irq_vector[new] != 0) |
1677 | continue; | 1724 | continue; |
1678 | vector = __assign_irq_vector(new, TARGET_CPUS); | 1725 | vector = __assign_irq_vector(new, TARGET_CPUS, &mask); |
1679 | if (likely(vector > 0)) | 1726 | if (likely(vector > 0)) |
1680 | irq = new; | 1727 | irq = new; |
1681 | break; | 1728 | break; |
@@ -1707,13 +1754,10 @@ static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq, struct msi_ms | |||
1707 | { | 1754 | { |
1708 | int vector; | 1755 | int vector; |
1709 | unsigned dest; | 1756 | unsigned dest; |
1757 | cpumask_t tmp; | ||
1710 | 1758 | ||
1711 | vector = assign_irq_vector(irq, TARGET_CPUS); | 1759 | vector = assign_irq_vector(irq, TARGET_CPUS, &tmp); |
1712 | if (vector >= 0) { | 1760 | if (vector >= 0) { |
1713 | cpumask_t tmp; | ||
1714 | |||
1715 | cpus_clear(tmp); | ||
1716 | cpu_set(vector >> 8, tmp); | ||
1717 | dest = cpu_mask_to_apicid(tmp); | 1761 | dest = cpu_mask_to_apicid(tmp); |
1718 | 1762 | ||
1719 | msg->address_hi = MSI_ADDR_BASE_HI; | 1763 | msg->address_hi = MSI_ADDR_BASE_HI; |
@@ -1752,12 +1796,10 @@ static void set_msi_irq_affinity(unsigned int irq, cpumask_t mask) | |||
1752 | 1796 | ||
1753 | cpus_and(mask, tmp, CPU_MASK_ALL); | 1797 | cpus_and(mask, tmp, CPU_MASK_ALL); |
1754 | 1798 | ||
1755 | vector = assign_irq_vector(irq, mask); | 1799 | vector = assign_irq_vector(irq, mask, &tmp); |
1756 | if (vector < 0) | 1800 | if (vector < 0) |
1757 | return; | 1801 | return; |
1758 | 1802 | ||
1759 | cpus_clear(tmp); | ||
1760 | cpu_set(vector >> 8, tmp); | ||
1761 | dest = cpu_mask_to_apicid(tmp); | 1803 | dest = cpu_mask_to_apicid(tmp); |
1762 | 1804 | ||
1763 | read_msi_msg(irq, &msg); | 1805 | read_msi_msg(irq, &msg); |
@@ -1844,12 +1886,10 @@ static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask) | |||
1844 | 1886 | ||
1845 | cpus_and(mask, tmp, CPU_MASK_ALL); | 1887 | cpus_and(mask, tmp, CPU_MASK_ALL); |
1846 | 1888 | ||
1847 | vector = assign_irq_vector(irq, mask); | 1889 | vector = assign_irq_vector(irq, mask, &tmp); |
1848 | if (vector < 0) | 1890 | if (vector < 0) |
1849 | return; | 1891 | return; |
1850 | 1892 | ||
1851 | cpus_clear(tmp); | ||
1852 | cpu_set(vector >> 8, tmp); | ||
1853 | dest = cpu_mask_to_apicid(tmp); | 1893 | dest = cpu_mask_to_apicid(tmp); |
1854 | 1894 | ||
1855 | target_ht_irq(irq, dest, vector & 0xff); | 1895 | target_ht_irq(irq, dest, vector & 0xff); |
@@ -1871,15 +1911,13 @@ static struct hw_interrupt_type ht_irq_chip = { | |||
1871 | int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) | 1911 | int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) |
1872 | { | 1912 | { |
1873 | int vector; | 1913 | int vector; |
1914 | cpumask_t tmp; | ||
1874 | 1915 | ||
1875 | vector = assign_irq_vector(irq, TARGET_CPUS); | 1916 | vector = assign_irq_vector(irq, TARGET_CPUS, &tmp); |
1876 | if (vector >= 0) { | 1917 | if (vector >= 0) { |
1877 | u32 low, high; | 1918 | u32 low, high; |
1878 | unsigned dest; | 1919 | unsigned dest; |
1879 | cpumask_t tmp; | ||
1880 | 1920 | ||
1881 | cpus_clear(tmp); | ||
1882 | cpu_set(vector >> 8, tmp); | ||
1883 | dest = cpu_mask_to_apicid(tmp); | 1921 | dest = cpu_mask_to_apicid(tmp); |
1884 | 1922 | ||
1885 | high = HT_IRQ_HIGH_DEST_ID(dest); | 1923 | high = HT_IRQ_HIGH_DEST_ID(dest); |
@@ -1945,13 +1983,10 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int p | |||
1945 | add_pin_to_irq(irq, ioapic, pin); | 1983 | add_pin_to_irq(irq, ioapic, pin); |
1946 | 1984 | ||
1947 | 1985 | ||
1948 | vector = assign_irq_vector(irq, TARGET_CPUS); | 1986 | vector = assign_irq_vector(irq, TARGET_CPUS, &mask); |
1949 | if (vector < 0) | 1987 | if (vector < 0) |
1950 | return vector; | 1988 | return vector; |
1951 | 1989 | ||
1952 | cpus_clear(mask); | ||
1953 | cpu_set(vector >> 8, mask); | ||
1954 | |||
1955 | /* | 1990 | /* |
1956 | * Generate a PCI IRQ routing entry and program the IOAPIC accordingly. | 1991 | * Generate a PCI IRQ routing entry and program the IOAPIC accordingly. |
1957 | * Note that we mask (disable) IRQs now -- these get enabled when the | 1992 | * Note that we mask (disable) IRQs now -- these get enabled when the |
diff --git a/arch/x86_64/kernel/irq.c b/arch/x86_64/kernel/irq.c index b8a407fcd5d5..dff68eb2b787 100644 --- a/arch/x86_64/kernel/irq.c +++ b/arch/x86_64/kernel/irq.c | |||
@@ -114,16 +114,16 @@ asmlinkage unsigned int do_IRQ(struct pt_regs *regs) | |||
114 | irq_enter(); | 114 | irq_enter(); |
115 | irq = __get_cpu_var(vector_irq)[vector]; | 115 | irq = __get_cpu_var(vector_irq)[vector]; |
116 | 116 | ||
117 | if (unlikely(irq >= NR_IRQS)) { | ||
118 | printk(KERN_EMERG "%s: cannot handle IRQ %d\n", | ||
119 | __FUNCTION__, irq); | ||
120 | BUG(); | ||
121 | } | ||
122 | |||
123 | #ifdef CONFIG_DEBUG_STACKOVERFLOW | 117 | #ifdef CONFIG_DEBUG_STACKOVERFLOW |
124 | stack_overflow_check(regs); | 118 | stack_overflow_check(regs); |
125 | #endif | 119 | #endif |
126 | generic_handle_irq(irq); | 120 | |
121 | if (likely(irq < NR_IRQS)) | ||
122 | generic_handle_irq(irq); | ||
123 | else | ||
124 | printk(KERN_EMERG "%s: %d.%d No irq handler for vector\n", | ||
125 | __func__, smp_processor_id(), vector); | ||
126 | |||
127 | irq_exit(); | 127 | irq_exit(); |
128 | 128 | ||
129 | set_irq_regs(old_regs); | 129 | set_irq_regs(old_regs); |
diff --git a/crypto/serpent.c b/crypto/serpent.c index 465d091cd3ec..2b0a19a44ec5 100644 --- a/crypto/serpent.c +++ b/crypto/serpent.c | |||
@@ -364,10 +364,10 @@ static void serpent_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | |||
364 | { | 364 | { |
365 | struct serpent_ctx *ctx = crypto_tfm_ctx(tfm); | 365 | struct serpent_ctx *ctx = crypto_tfm_ctx(tfm); |
366 | const u32 | 366 | const u32 |
367 | *k = ctx->expkey, | 367 | *k = ctx->expkey; |
368 | *s = (const u32 *)src; | 368 | const __le32 *s = (const __le32 *)src; |
369 | u32 *d = (u32 *)dst, | 369 | __le32 *d = (__le32 *)dst; |
370 | r0, r1, r2, r3, r4; | 370 | u32 r0, r1, r2, r3, r4; |
371 | 371 | ||
372 | /* | 372 | /* |
373 | * Note: The conversions between u8* and u32* might cause trouble | 373 | * Note: The conversions between u8* and u32* might cause trouble |
@@ -423,10 +423,10 @@ static void serpent_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | |||
423 | { | 423 | { |
424 | struct serpent_ctx *ctx = crypto_tfm_ctx(tfm); | 424 | struct serpent_ctx *ctx = crypto_tfm_ctx(tfm); |
425 | const u32 | 425 | const u32 |
426 | *k = ((struct serpent_ctx *)ctx)->expkey, | 426 | *k = ((struct serpent_ctx *)ctx)->expkey; |
427 | *s = (const u32 *)src; | 427 | const __le32 *s = (const __le32 *)src; |
428 | u32 *d = (u32 *)dst, | 428 | __le32 *d = (__le32 *)dst; |
429 | r0, r1, r2, r3, r4; | 429 | u32 r0, r1, r2, r3, r4; |
430 | 430 | ||
431 | r0 = le32_to_cpu(s[0]); | 431 | r0 = le32_to_cpu(s[0]); |
432 | r1 = le32_to_cpu(s[1]); | 432 | r1 = le32_to_cpu(s[1]); |
diff --git a/drivers/acpi/cm_sbs.c b/drivers/acpi/cm_sbs.c index a01ce6700bfe..4a9b7bf6f44e 100644 --- a/drivers/acpi/cm_sbs.c +++ b/drivers/acpi/cm_sbs.c | |||
@@ -67,7 +67,7 @@ void acpi_unlock_ac_dir(struct proc_dir_entry *acpi_ac_dir_param) | |||
67 | lock_ac_dir_cnt--; | 67 | lock_ac_dir_cnt--; |
68 | if (lock_ac_dir_cnt == 0 && acpi_ac_dir_param && acpi_ac_dir) { | 68 | if (lock_ac_dir_cnt == 0 && acpi_ac_dir_param && acpi_ac_dir) { |
69 | remove_proc_entry(ACPI_AC_CLASS, acpi_root_dir); | 69 | remove_proc_entry(ACPI_AC_CLASS, acpi_root_dir); |
70 | acpi_ac_dir = 0; | 70 | acpi_ac_dir = NULL; |
71 | } | 71 | } |
72 | mutex_unlock(&cm_sbs_mutex); | 72 | mutex_unlock(&cm_sbs_mutex); |
73 | } | 73 | } |
@@ -99,7 +99,7 @@ void acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir_param) | |||
99 | if (lock_battery_dir_cnt == 0 && acpi_battery_dir_param | 99 | if (lock_battery_dir_cnt == 0 && acpi_battery_dir_param |
100 | && acpi_battery_dir) { | 100 | && acpi_battery_dir) { |
101 | remove_proc_entry(ACPI_BATTERY_CLASS, acpi_root_dir); | 101 | remove_proc_entry(ACPI_BATTERY_CLASS, acpi_root_dir); |
102 | acpi_battery_dir = 0; | 102 | acpi_battery_dir = NULL; |
103 | } | 103 | } |
104 | mutex_unlock(&cm_sbs_mutex); | 104 | mutex_unlock(&cm_sbs_mutex); |
105 | return; | 105 | return; |
diff --git a/drivers/acpi/hardware/hwregs.c b/drivers/acpi/hardware/hwregs.c index 3143f36fcec9..fa58c1edce1e 100644 --- a/drivers/acpi/hardware/hwregs.c +++ b/drivers/acpi/hardware/hwregs.c | |||
@@ -665,8 +665,6 @@ acpi_status acpi_hw_register_write(u8 use_lock, u32 register_id, u32 value) | |||
665 | 665 | ||
666 | /* | 666 | /* |
667 | * Perform a read first to preserve certain bits (per ACPI spec) | 667 | * Perform a read first to preserve certain bits (per ACPI spec) |
668 | * | ||
669 | * Note: This includes SCI_EN, we never want to change this bit | ||
670 | */ | 668 | */ |
671 | status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | 669 | status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, |
672 | ACPI_REGISTER_PM1_CONTROL, | 670 | ACPI_REGISTER_PM1_CONTROL, |
diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c index 1eb0d63c17d5..72eda5160fad 100644 --- a/drivers/ata/sata_promise.c +++ b/drivers/ata/sata_promise.c | |||
@@ -361,7 +361,7 @@ static void pdc_sata_phy_reset(struct ata_port *ap) | |||
361 | static void pdc_pata_cbl_detect(struct ata_port *ap) | 361 | static void pdc_pata_cbl_detect(struct ata_port *ap) |
362 | { | 362 | { |
363 | u8 tmp; | 363 | u8 tmp; |
364 | void __iomem *mmio = (void *) ap->ioaddr.cmd_addr + PDC_CTLSTAT + 0x03; | 364 | void __iomem *mmio = (void __iomem *) ap->ioaddr.cmd_addr + PDC_CTLSTAT + 0x03; |
365 | 365 | ||
366 | tmp = readb(mmio); | 366 | tmp = readb(mmio); |
367 | 367 | ||
diff --git a/drivers/ata/sata_sil.c b/drivers/ata/sata_sil.c index ae5edb80ea9a..ca8d99312472 100644 --- a/drivers/ata/sata_sil.c +++ b/drivers/ata/sata_sil.c | |||
@@ -349,7 +349,7 @@ static u32 sil_scr_read (struct ata_port *ap, unsigned int sc_reg) | |||
349 | 349 | ||
350 | static void sil_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val) | 350 | static void sil_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val) |
351 | { | 351 | { |
352 | void *mmio = (void __iomem *) sil_scr_addr(ap, sc_reg); | 352 | void __iomem *mmio = (void __iomem *) sil_scr_addr(ap, sc_reg); |
353 | if (mmio) | 353 | if (mmio) |
354 | writel(val, mmio); | 354 | writel(val, mmio); |
355 | } | 355 | } |
diff --git a/drivers/ata/sata_svw.c b/drivers/ata/sata_svw.c index 84025a2fd5be..db32d15b7fa1 100644 --- a/drivers/ata/sata_svw.c +++ b/drivers/ata/sata_svw.c | |||
@@ -177,7 +177,7 @@ static void k2_bmdma_setup_mmio (struct ata_queued_cmd *qc) | |||
177 | struct ata_port *ap = qc->ap; | 177 | struct ata_port *ap = qc->ap; |
178 | unsigned int rw = (qc->tf.flags & ATA_TFLAG_WRITE); | 178 | unsigned int rw = (qc->tf.flags & ATA_TFLAG_WRITE); |
179 | u8 dmactl; | 179 | u8 dmactl; |
180 | void *mmio = (void *) ap->ioaddr.bmdma_addr; | 180 | void __iomem *mmio = (void __iomem *) ap->ioaddr.bmdma_addr; |
181 | /* load PRD table addr. */ | 181 | /* load PRD table addr. */ |
182 | mb(); /* make sure PRD table writes are visible to controller */ | 182 | mb(); /* make sure PRD table writes are visible to controller */ |
183 | writel(ap->prd_dma, mmio + ATA_DMA_TABLE_OFS); | 183 | writel(ap->prd_dma, mmio + ATA_DMA_TABLE_OFS); |
@@ -205,7 +205,7 @@ static void k2_bmdma_setup_mmio (struct ata_queued_cmd *qc) | |||
205 | static void k2_bmdma_start_mmio (struct ata_queued_cmd *qc) | 205 | static void k2_bmdma_start_mmio (struct ata_queued_cmd *qc) |
206 | { | 206 | { |
207 | struct ata_port *ap = qc->ap; | 207 | struct ata_port *ap = qc->ap; |
208 | void *mmio = (void *) ap->ioaddr.bmdma_addr; | 208 | void __iomem *mmio = (void __iomem *) ap->ioaddr.bmdma_addr; |
209 | u8 dmactl; | 209 | u8 dmactl; |
210 | 210 | ||
211 | /* start host DMA transaction */ | 211 | /* start host DMA transaction */ |
diff --git a/drivers/atm/ambassador.c b/drivers/atm/ambassador.c index 8ff5c4e50823..323592de047b 100644 --- a/drivers/atm/ambassador.c +++ b/drivers/atm/ambassador.c | |||
@@ -862,15 +862,10 @@ static inline void interrupts_off (amb_dev * dev) { | |||
862 | /********** interrupt handling **********/ | 862 | /********** interrupt handling **********/ |
863 | 863 | ||
864 | static irqreturn_t interrupt_handler(int irq, void *dev_id) { | 864 | static irqreturn_t interrupt_handler(int irq, void *dev_id) { |
865 | amb_dev * dev = (amb_dev *) dev_id; | 865 | amb_dev * dev = dev_id; |
866 | 866 | ||
867 | PRINTD (DBG_IRQ|DBG_FLOW, "interrupt_handler: %p", dev_id); | 867 | PRINTD (DBG_IRQ|DBG_FLOW, "interrupt_handler: %p", dev_id); |
868 | 868 | ||
869 | if (!dev_id) { | ||
870 | PRINTD (DBG_IRQ|DBG_ERR, "irq with NULL dev_id: %d", irq); | ||
871 | return IRQ_NONE; | ||
872 | } | ||
873 | |||
874 | { | 869 | { |
875 | u32 interrupt = rd_plain (dev, offsetof(amb_mem, interrupt)); | 870 | u32 interrupt = rd_plain (dev, offsetof(amb_mem, interrupt)); |
876 | 871 | ||
diff --git a/drivers/atm/horizon.c b/drivers/atm/horizon.c index 33e9ee47392b..f59349206dd2 100644 --- a/drivers/atm/horizon.c +++ b/drivers/atm/horizon.c | |||
@@ -1389,15 +1389,6 @@ static irqreturn_t interrupt_handler(int irq, void *dev_id) { | |||
1389 | 1389 | ||
1390 | PRINTD (DBG_FLOW, "interrupt_handler: %p", dev_id); | 1390 | PRINTD (DBG_FLOW, "interrupt_handler: %p", dev_id); |
1391 | 1391 | ||
1392 | if (!dev_id) { | ||
1393 | PRINTD (DBG_IRQ|DBG_ERR, "irq with NULL dev_id: %d", irq); | ||
1394 | return IRQ_NONE; | ||
1395 | } | ||
1396 | if (irq != dev->irq) { | ||
1397 | PRINTD (DBG_IRQ|DBG_ERR, "irq mismatch: %d", irq); | ||
1398 | return IRQ_NONE; | ||
1399 | } | ||
1400 | |||
1401 | // definitely for us | 1392 | // definitely for us |
1402 | irq_ok = 0; | 1393 | irq_ok = 0; |
1403 | while ((int_source = rd_regl (dev, INT_SOURCE_REG_OFF) | 1394 | while ((int_source = rd_regl (dev, INT_SOURCE_REG_OFF) |
diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c index 8895f026bea7..267825501dfe 100644 --- a/drivers/atm/lanai.c +++ b/drivers/atm/lanai.c | |||
@@ -1892,11 +1892,9 @@ static inline void lanai_int_1(struct lanai_dev *lanai, u32 reason) | |||
1892 | 1892 | ||
1893 | static irqreturn_t lanai_int(int irq, void *devid) | 1893 | static irqreturn_t lanai_int(int irq, void *devid) |
1894 | { | 1894 | { |
1895 | struct lanai_dev *lanai = (struct lanai_dev *) devid; | 1895 | struct lanai_dev *lanai = devid; |
1896 | u32 reason; | 1896 | u32 reason; |
1897 | 1897 | ||
1898 | (void) irq; /* unused variables */ | ||
1899 | |||
1900 | #ifdef USE_POWERDOWN | 1898 | #ifdef USE_POWERDOWN |
1901 | /* | 1899 | /* |
1902 | * If we're powered down we shouldn't be generating any interrupts - | 1900 | * If we're powered down we shouldn't be generating any interrupts - |
diff --git a/drivers/block/DAC960.c b/drivers/block/DAC960.c index 3e8ab84b9447..742d07403101 100644 --- a/drivers/block/DAC960.c +++ b/drivers/block/DAC960.c | |||
@@ -5254,7 +5254,7 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command) | |||
5254 | static irqreturn_t DAC960_GEM_InterruptHandler(int IRQ_Channel, | 5254 | static irqreturn_t DAC960_GEM_InterruptHandler(int IRQ_Channel, |
5255 | void *DeviceIdentifier) | 5255 | void *DeviceIdentifier) |
5256 | { | 5256 | { |
5257 | DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier; | 5257 | DAC960_Controller_T *Controller = DeviceIdentifier; |
5258 | void __iomem *ControllerBaseAddress = Controller->BaseAddress; | 5258 | void __iomem *ControllerBaseAddress = Controller->BaseAddress; |
5259 | DAC960_V2_StatusMailbox_T *NextStatusMailbox; | 5259 | DAC960_V2_StatusMailbox_T *NextStatusMailbox; |
5260 | unsigned long flags; | 5260 | unsigned long flags; |
@@ -5295,7 +5295,7 @@ static irqreturn_t DAC960_GEM_InterruptHandler(int IRQ_Channel, | |||
5295 | static irqreturn_t DAC960_BA_InterruptHandler(int IRQ_Channel, | 5295 | static irqreturn_t DAC960_BA_InterruptHandler(int IRQ_Channel, |
5296 | void *DeviceIdentifier) | 5296 | void *DeviceIdentifier) |
5297 | { | 5297 | { |
5298 | DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier; | 5298 | DAC960_Controller_T *Controller = DeviceIdentifier; |
5299 | void __iomem *ControllerBaseAddress = Controller->BaseAddress; | 5299 | void __iomem *ControllerBaseAddress = Controller->BaseAddress; |
5300 | DAC960_V2_StatusMailbox_T *NextStatusMailbox; | 5300 | DAC960_V2_StatusMailbox_T *NextStatusMailbox; |
5301 | unsigned long flags; | 5301 | unsigned long flags; |
@@ -5337,7 +5337,7 @@ static irqreturn_t DAC960_BA_InterruptHandler(int IRQ_Channel, | |||
5337 | static irqreturn_t DAC960_LP_InterruptHandler(int IRQ_Channel, | 5337 | static irqreturn_t DAC960_LP_InterruptHandler(int IRQ_Channel, |
5338 | void *DeviceIdentifier) | 5338 | void *DeviceIdentifier) |
5339 | { | 5339 | { |
5340 | DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier; | 5340 | DAC960_Controller_T *Controller = DeviceIdentifier; |
5341 | void __iomem *ControllerBaseAddress = Controller->BaseAddress; | 5341 | void __iomem *ControllerBaseAddress = Controller->BaseAddress; |
5342 | DAC960_V2_StatusMailbox_T *NextStatusMailbox; | 5342 | DAC960_V2_StatusMailbox_T *NextStatusMailbox; |
5343 | unsigned long flags; | 5343 | unsigned long flags; |
@@ -5379,7 +5379,7 @@ static irqreturn_t DAC960_LP_InterruptHandler(int IRQ_Channel, | |||
5379 | static irqreturn_t DAC960_LA_InterruptHandler(int IRQ_Channel, | 5379 | static irqreturn_t DAC960_LA_InterruptHandler(int IRQ_Channel, |
5380 | void *DeviceIdentifier) | 5380 | void *DeviceIdentifier) |
5381 | { | 5381 | { |
5382 | DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier; | 5382 | DAC960_Controller_T *Controller = DeviceIdentifier; |
5383 | void __iomem *ControllerBaseAddress = Controller->BaseAddress; | 5383 | void __iomem *ControllerBaseAddress = Controller->BaseAddress; |
5384 | DAC960_V1_StatusMailbox_T *NextStatusMailbox; | 5384 | DAC960_V1_StatusMailbox_T *NextStatusMailbox; |
5385 | unsigned long flags; | 5385 | unsigned long flags; |
@@ -5417,7 +5417,7 @@ static irqreturn_t DAC960_LA_InterruptHandler(int IRQ_Channel, | |||
5417 | static irqreturn_t DAC960_PG_InterruptHandler(int IRQ_Channel, | 5417 | static irqreturn_t DAC960_PG_InterruptHandler(int IRQ_Channel, |
5418 | void *DeviceIdentifier) | 5418 | void *DeviceIdentifier) |
5419 | { | 5419 | { |
5420 | DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier; | 5420 | DAC960_Controller_T *Controller = DeviceIdentifier; |
5421 | void __iomem *ControllerBaseAddress = Controller->BaseAddress; | 5421 | void __iomem *ControllerBaseAddress = Controller->BaseAddress; |
5422 | DAC960_V1_StatusMailbox_T *NextStatusMailbox; | 5422 | DAC960_V1_StatusMailbox_T *NextStatusMailbox; |
5423 | unsigned long flags; | 5423 | unsigned long flags; |
@@ -5455,7 +5455,7 @@ static irqreturn_t DAC960_PG_InterruptHandler(int IRQ_Channel, | |||
5455 | static irqreturn_t DAC960_PD_InterruptHandler(int IRQ_Channel, | 5455 | static irqreturn_t DAC960_PD_InterruptHandler(int IRQ_Channel, |
5456 | void *DeviceIdentifier) | 5456 | void *DeviceIdentifier) |
5457 | { | 5457 | { |
5458 | DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier; | 5458 | DAC960_Controller_T *Controller = DeviceIdentifier; |
5459 | void __iomem *ControllerBaseAddress = Controller->BaseAddress; | 5459 | void __iomem *ControllerBaseAddress = Controller->BaseAddress; |
5460 | unsigned long flags; | 5460 | unsigned long flags; |
5461 | 5461 | ||
@@ -5493,7 +5493,7 @@ static irqreturn_t DAC960_PD_InterruptHandler(int IRQ_Channel, | |||
5493 | static irqreturn_t DAC960_P_InterruptHandler(int IRQ_Channel, | 5493 | static irqreturn_t DAC960_P_InterruptHandler(int IRQ_Channel, |
5494 | void *DeviceIdentifier) | 5494 | void *DeviceIdentifier) |
5495 | { | 5495 | { |
5496 | DAC960_Controller_T *Controller = (DAC960_Controller_T *) DeviceIdentifier; | 5496 | DAC960_Controller_T *Controller = DeviceIdentifier; |
5497 | void __iomem *ControllerBaseAddress = Controller->BaseAddress; | 5497 | void __iomem *ControllerBaseAddress = Controller->BaseAddress; |
5498 | unsigned long flags; | 5498 | unsigned long flags; |
5499 | 5499 | ||
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index d6bb8da955a2..beab6d2643cb 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c | |||
@@ -295,7 +295,7 @@ fail: | |||
295 | * and do_lo_send_write(). | 295 | * and do_lo_send_write(). |
296 | */ | 296 | */ |
297 | static int __do_lo_send_write(struct file *file, | 297 | static int __do_lo_send_write(struct file *file, |
298 | u8 __user *buf, const int len, loff_t pos) | 298 | u8 *buf, const int len, loff_t pos) |
299 | { | 299 | { |
300 | ssize_t bw; | 300 | ssize_t bw; |
301 | mm_segment_t old_fs = get_fs(); | 301 | mm_segment_t old_fs = get_fs(); |
@@ -324,7 +324,7 @@ static int do_lo_send_direct_write(struct loop_device *lo, | |||
324 | struct bio_vec *bvec, int bsize, loff_t pos, struct page *page) | 324 | struct bio_vec *bvec, int bsize, loff_t pos, struct page *page) |
325 | { | 325 | { |
326 | ssize_t bw = __do_lo_send_write(lo->lo_backing_file, | 326 | ssize_t bw = __do_lo_send_write(lo->lo_backing_file, |
327 | (u8 __user *)kmap(bvec->bv_page) + bvec->bv_offset, | 327 | kmap(bvec->bv_page) + bvec->bv_offset, |
328 | bvec->bv_len, pos); | 328 | bvec->bv_len, pos); |
329 | kunmap(bvec->bv_page); | 329 | kunmap(bvec->bv_page); |
330 | cond_resched(); | 330 | cond_resched(); |
@@ -351,7 +351,7 @@ static int do_lo_send_write(struct loop_device *lo, struct bio_vec *bvec, | |||
351 | bvec->bv_offset, bvec->bv_len, pos >> 9); | 351 | bvec->bv_offset, bvec->bv_len, pos >> 9); |
352 | if (likely(!ret)) | 352 | if (likely(!ret)) |
353 | return __do_lo_send_write(lo->lo_backing_file, | 353 | return __do_lo_send_write(lo->lo_backing_file, |
354 | (u8 __user *)page_address(page), bvec->bv_len, | 354 | page_address(page), bvec->bv_len, |
355 | pos); | 355 | pos); |
356 | printk(KERN_ERR "loop: Transfer error at byte offset %llu, " | 356 | printk(KERN_ERR "loop: Transfer error at byte offset %llu, " |
357 | "length %i.\n", (unsigned long long)pos, bvec->bv_len); | 357 | "length %i.\n", (unsigned long long)pos, bvec->bv_len); |
@@ -1187,7 +1187,7 @@ struct compat_loop_info { | |||
1187 | * - noinlined to reduce stack space usage in main part of driver | 1187 | * - noinlined to reduce stack space usage in main part of driver |
1188 | */ | 1188 | */ |
1189 | static noinline int | 1189 | static noinline int |
1190 | loop_info64_from_compat(const struct compat_loop_info *arg, | 1190 | loop_info64_from_compat(const struct compat_loop_info __user *arg, |
1191 | struct loop_info64 *info64) | 1191 | struct loop_info64 *info64) |
1192 | { | 1192 | { |
1193 | struct compat_loop_info info; | 1193 | struct compat_loop_info info; |
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c index 2a0c50d84fc5..7ea0f48f8fa6 100644 --- a/drivers/cdrom/cdrom.c +++ b/drivers/cdrom/cdrom.c | |||
@@ -703,7 +703,7 @@ static int cdrom_has_defect_mgt(struct cdrom_device_info *cdi) | |||
703 | { | 703 | { |
704 | struct packet_command cgc; | 704 | struct packet_command cgc; |
705 | char buffer[16]; | 705 | char buffer[16]; |
706 | __u16 *feature_code; | 706 | __be16 *feature_code; |
707 | int ret; | 707 | int ret; |
708 | 708 | ||
709 | init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_READ); | 709 | init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_READ); |
@@ -716,7 +716,7 @@ static int cdrom_has_defect_mgt(struct cdrom_device_info *cdi) | |||
716 | if ((ret = cdi->ops->generic_packet(cdi, &cgc))) | 716 | if ((ret = cdi->ops->generic_packet(cdi, &cgc))) |
717 | return ret; | 717 | return ret; |
718 | 718 | ||
719 | feature_code = (__u16 *) &buffer[sizeof(struct feature_header)]; | 719 | feature_code = (__be16 *) &buffer[sizeof(struct feature_header)]; |
720 | if (be16_to_cpu(*feature_code) == CDF_HWDM) | 720 | if (be16_to_cpu(*feature_code) == CDF_HWDM) |
721 | return 0; | 721 | return 0; |
722 | 722 | ||
@@ -2963,7 +2963,7 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, | |||
2963 | how much data is available for transfer. buffer[1] is | 2963 | how much data is available for transfer. buffer[1] is |
2964 | unfortunately ambigious and the only reliable way seem | 2964 | unfortunately ambigious and the only reliable way seem |
2965 | to be to simply skip over the block descriptor... */ | 2965 | to be to simply skip over the block descriptor... */ |
2966 | offset = 8 + be16_to_cpu(*(unsigned short *)(buffer+6)); | 2966 | offset = 8 + be16_to_cpu(*(__be16 *)(buffer+6)); |
2967 | 2967 | ||
2968 | if (offset + 16 > sizeof(buffer)) | 2968 | if (offset + 16 > sizeof(buffer)) |
2969 | return -E2BIG; | 2969 | return -E2BIG; |
diff --git a/drivers/cdrom/mcdx.c b/drivers/cdrom/mcdx.c index 60e1978ec0ea..f574962f4288 100644 --- a/drivers/cdrom/mcdx.c +++ b/drivers/cdrom/mcdx.c | |||
@@ -850,10 +850,6 @@ static irqreturn_t mcdx_intr(int irq, void *dev_id) | |||
850 | struct s_drive_stuff *stuffp = dev_id; | 850 | struct s_drive_stuff *stuffp = dev_id; |
851 | unsigned char b; | 851 | unsigned char b; |
852 | 852 | ||
853 | if (stuffp == NULL) { | ||
854 | xwarn("mcdx: no device for intr %d\n", irq); | ||
855 | return IRQ_NONE; | ||
856 | } | ||
857 | #ifdef AK2 | 853 | #ifdef AK2 |
858 | if (!stuffp->busy && stuffp->pending) | 854 | if (!stuffp->busy && stuffp->pending) |
859 | stuffp->int_err = 1; | 855 | stuffp->int_err = 1; |
diff --git a/drivers/char/istallion.c b/drivers/char/istallion.c index d6e031542c6b..ffdf9df1a67a 100644 --- a/drivers/char/istallion.c +++ b/drivers/char/istallion.c | |||
@@ -686,37 +686,37 @@ static stlibrd_t *stli_allocbrd(void); | |||
686 | static void stli_ecpinit(stlibrd_t *brdp); | 686 | static void stli_ecpinit(stlibrd_t *brdp); |
687 | static void stli_ecpenable(stlibrd_t *brdp); | 687 | static void stli_ecpenable(stlibrd_t *brdp); |
688 | static void stli_ecpdisable(stlibrd_t *brdp); | 688 | static void stli_ecpdisable(stlibrd_t *brdp); |
689 | static char *stli_ecpgetmemptr(stlibrd_t *brdp, unsigned long offset, int line); | 689 | static void __iomem *stli_ecpgetmemptr(stlibrd_t *brdp, unsigned long offset, int line); |
690 | static void stli_ecpreset(stlibrd_t *brdp); | 690 | static void stli_ecpreset(stlibrd_t *brdp); |
691 | static void stli_ecpintr(stlibrd_t *brdp); | 691 | static void stli_ecpintr(stlibrd_t *brdp); |
692 | static void stli_ecpeiinit(stlibrd_t *brdp); | 692 | static void stli_ecpeiinit(stlibrd_t *brdp); |
693 | static void stli_ecpeienable(stlibrd_t *brdp); | 693 | static void stli_ecpeienable(stlibrd_t *brdp); |
694 | static void stli_ecpeidisable(stlibrd_t *brdp); | 694 | static void stli_ecpeidisable(stlibrd_t *brdp); |
695 | static char *stli_ecpeigetmemptr(stlibrd_t *brdp, unsigned long offset, int line); | 695 | static void __iomem *stli_ecpeigetmemptr(stlibrd_t *brdp, unsigned long offset, int line); |
696 | static void stli_ecpeireset(stlibrd_t *brdp); | 696 | static void stli_ecpeireset(stlibrd_t *brdp); |
697 | static void stli_ecpmcenable(stlibrd_t *brdp); | 697 | static void stli_ecpmcenable(stlibrd_t *brdp); |
698 | static void stli_ecpmcdisable(stlibrd_t *brdp); | 698 | static void stli_ecpmcdisable(stlibrd_t *brdp); |
699 | static char *stli_ecpmcgetmemptr(stlibrd_t *brdp, unsigned long offset, int line); | 699 | static void __iomem *stli_ecpmcgetmemptr(stlibrd_t *brdp, unsigned long offset, int line); |
700 | static void stli_ecpmcreset(stlibrd_t *brdp); | 700 | static void stli_ecpmcreset(stlibrd_t *brdp); |
701 | static void stli_ecppciinit(stlibrd_t *brdp); | 701 | static void stli_ecppciinit(stlibrd_t *brdp); |
702 | static char *stli_ecppcigetmemptr(stlibrd_t *brdp, unsigned long offset, int line); | 702 | static void __iomem *stli_ecppcigetmemptr(stlibrd_t *brdp, unsigned long offset, int line); |
703 | static void stli_ecppcireset(stlibrd_t *brdp); | 703 | static void stli_ecppcireset(stlibrd_t *brdp); |
704 | 704 | ||
705 | static void stli_onbinit(stlibrd_t *brdp); | 705 | static void stli_onbinit(stlibrd_t *brdp); |
706 | static void stli_onbenable(stlibrd_t *brdp); | 706 | static void stli_onbenable(stlibrd_t *brdp); |
707 | static void stli_onbdisable(stlibrd_t *brdp); | 707 | static void stli_onbdisable(stlibrd_t *brdp); |
708 | static char *stli_onbgetmemptr(stlibrd_t *brdp, unsigned long offset, int line); | 708 | static void __iomem *stli_onbgetmemptr(stlibrd_t *brdp, unsigned long offset, int line); |
709 | static void stli_onbreset(stlibrd_t *brdp); | 709 | static void stli_onbreset(stlibrd_t *brdp); |
710 | static void stli_onbeinit(stlibrd_t *brdp); | 710 | static void stli_onbeinit(stlibrd_t *brdp); |
711 | static void stli_onbeenable(stlibrd_t *brdp); | 711 | static void stli_onbeenable(stlibrd_t *brdp); |
712 | static void stli_onbedisable(stlibrd_t *brdp); | 712 | static void stli_onbedisable(stlibrd_t *brdp); |
713 | static char *stli_onbegetmemptr(stlibrd_t *brdp, unsigned long offset, int line); | 713 | static void __iomem *stli_onbegetmemptr(stlibrd_t *brdp, unsigned long offset, int line); |
714 | static void stli_onbereset(stlibrd_t *brdp); | 714 | static void stli_onbereset(stlibrd_t *brdp); |
715 | static void stli_bbyinit(stlibrd_t *brdp); | 715 | static void stli_bbyinit(stlibrd_t *brdp); |
716 | static char *stli_bbygetmemptr(stlibrd_t *brdp, unsigned long offset, int line); | 716 | static void __iomem *stli_bbygetmemptr(stlibrd_t *brdp, unsigned long offset, int line); |
717 | static void stli_bbyreset(stlibrd_t *brdp); | 717 | static void stli_bbyreset(stlibrd_t *brdp); |
718 | static void stli_stalinit(stlibrd_t *brdp); | 718 | static void stli_stalinit(stlibrd_t *brdp); |
719 | static char *stli_stalgetmemptr(stlibrd_t *brdp, unsigned long offset, int line); | 719 | static void __iomem *stli_stalgetmemptr(stlibrd_t *brdp, unsigned long offset, int line); |
720 | static void stli_stalreset(stlibrd_t *brdp); | 720 | static void stli_stalreset(stlibrd_t *brdp); |
721 | 721 | ||
722 | static stliport_t *stli_getport(int brdnr, int panelnr, int portnr); | 722 | static stliport_t *stli_getport(int brdnr, int panelnr, int portnr); |
@@ -1566,7 +1566,7 @@ static void stli_flushchars(struct tty_struct *tty) | |||
1566 | 1566 | ||
1567 | len = MIN(len, cooksize); | 1567 | len = MIN(len, cooksize); |
1568 | count = 0; | 1568 | count = 0; |
1569 | shbuf = (char *) EBRDGETMEMPTR(brdp, portp->txoffset); | 1569 | shbuf = EBRDGETMEMPTR(brdp, portp->txoffset); |
1570 | buf = stli_txcookbuf; | 1570 | buf = stli_txcookbuf; |
1571 | 1571 | ||
1572 | while (len > 0) { | 1572 | while (len > 0) { |
@@ -2948,9 +2948,9 @@ static void stli_ecpdisable(stlibrd_t *brdp) | |||
2948 | 2948 | ||
2949 | /*****************************************************************************/ | 2949 | /*****************************************************************************/ |
2950 | 2950 | ||
2951 | static char *stli_ecpgetmemptr(stlibrd_t *brdp, unsigned long offset, int line) | 2951 | static void __iomem *stli_ecpgetmemptr(stlibrd_t *brdp, unsigned long offset, int line) |
2952 | { | 2952 | { |
2953 | void *ptr; | 2953 | void __iomem *ptr; |
2954 | unsigned char val; | 2954 | unsigned char val; |
2955 | 2955 | ||
2956 | if (offset > brdp->memsize) { | 2956 | if (offset > brdp->memsize) { |
@@ -3022,9 +3022,9 @@ static void stli_ecpeidisable(stlibrd_t *brdp) | |||
3022 | 3022 | ||
3023 | /*****************************************************************************/ | 3023 | /*****************************************************************************/ |
3024 | 3024 | ||
3025 | static char *stli_ecpeigetmemptr(stlibrd_t *brdp, unsigned long offset, int line) | 3025 | static void __iomem *stli_ecpeigetmemptr(stlibrd_t *brdp, unsigned long offset, int line) |
3026 | { | 3026 | { |
3027 | void *ptr; | 3027 | void __iomem *ptr; |
3028 | unsigned char val; | 3028 | unsigned char val; |
3029 | 3029 | ||
3030 | if (offset > brdp->memsize) { | 3030 | if (offset > brdp->memsize) { |
@@ -3074,9 +3074,9 @@ static void stli_ecpmcdisable(stlibrd_t *brdp) | |||
3074 | 3074 | ||
3075 | /*****************************************************************************/ | 3075 | /*****************************************************************************/ |
3076 | 3076 | ||
3077 | static char *stli_ecpmcgetmemptr(stlibrd_t *brdp, unsigned long offset, int line) | 3077 | static void __iomem *stli_ecpmcgetmemptr(stlibrd_t *brdp, unsigned long offset, int line) |
3078 | { | 3078 | { |
3079 | void *ptr; | 3079 | void __iomem *ptr; |
3080 | unsigned char val; | 3080 | unsigned char val; |
3081 | 3081 | ||
3082 | if (offset > brdp->memsize) { | 3082 | if (offset > brdp->memsize) { |
@@ -3119,9 +3119,9 @@ static void stli_ecppciinit(stlibrd_t *brdp) | |||
3119 | 3119 | ||
3120 | /*****************************************************************************/ | 3120 | /*****************************************************************************/ |
3121 | 3121 | ||
3122 | static char *stli_ecppcigetmemptr(stlibrd_t *brdp, unsigned long offset, int line) | 3122 | static void __iomem *stli_ecppcigetmemptr(stlibrd_t *brdp, unsigned long offset, int line) |
3123 | { | 3123 | { |
3124 | void *ptr; | 3124 | void __iomem *ptr; |
3125 | unsigned char val; | 3125 | unsigned char val; |
3126 | 3126 | ||
3127 | if (offset > brdp->memsize) { | 3127 | if (offset > brdp->memsize) { |
@@ -3185,9 +3185,9 @@ static void stli_onbdisable(stlibrd_t *brdp) | |||
3185 | 3185 | ||
3186 | /*****************************************************************************/ | 3186 | /*****************************************************************************/ |
3187 | 3187 | ||
3188 | static char *stli_onbgetmemptr(stlibrd_t *brdp, unsigned long offset, int line) | 3188 | static void __iomem *stli_onbgetmemptr(stlibrd_t *brdp, unsigned long offset, int line) |
3189 | { | 3189 | { |
3190 | void *ptr; | 3190 | void __iomem *ptr; |
3191 | 3191 | ||
3192 | if (offset > brdp->memsize) { | 3192 | if (offset > brdp->memsize) { |
3193 | printk(KERN_ERR "STALLION: shared memory pointer=%x out of " | 3193 | printk(KERN_ERR "STALLION: shared memory pointer=%x out of " |
@@ -3250,9 +3250,9 @@ static void stli_onbedisable(stlibrd_t *brdp) | |||
3250 | 3250 | ||
3251 | /*****************************************************************************/ | 3251 | /*****************************************************************************/ |
3252 | 3252 | ||
3253 | static char *stli_onbegetmemptr(stlibrd_t *brdp, unsigned long offset, int line) | 3253 | static void __iomem *stli_onbegetmemptr(stlibrd_t *brdp, unsigned long offset, int line) |
3254 | { | 3254 | { |
3255 | void *ptr; | 3255 | void __iomem *ptr; |
3256 | unsigned char val; | 3256 | unsigned char val; |
3257 | 3257 | ||
3258 | if (offset > brdp->memsize) { | 3258 | if (offset > brdp->memsize) { |
@@ -3300,9 +3300,9 @@ static void stli_bbyinit(stlibrd_t *brdp) | |||
3300 | 3300 | ||
3301 | /*****************************************************************************/ | 3301 | /*****************************************************************************/ |
3302 | 3302 | ||
3303 | static char *stli_bbygetmemptr(stlibrd_t *brdp, unsigned long offset, int line) | 3303 | static void __iomem *stli_bbygetmemptr(stlibrd_t *brdp, unsigned long offset, int line) |
3304 | { | 3304 | { |
3305 | void *ptr; | 3305 | void __iomem *ptr; |
3306 | unsigned char val; | 3306 | unsigned char val; |
3307 | 3307 | ||
3308 | BUG_ON(offset > brdp->memsize); | 3308 | BUG_ON(offset > brdp->memsize); |
@@ -3337,7 +3337,7 @@ static void stli_stalinit(stlibrd_t *brdp) | |||
3337 | 3337 | ||
3338 | /*****************************************************************************/ | 3338 | /*****************************************************************************/ |
3339 | 3339 | ||
3340 | static char *stli_stalgetmemptr(stlibrd_t *brdp, unsigned long offset, int line) | 3340 | static void __iomem *stli_stalgetmemptr(stlibrd_t *brdp, unsigned long offset, int line) |
3341 | { | 3341 | { |
3342 | BUG_ON(offset > brdp->memsize); | 3342 | BUG_ON(offset > brdp->memsize); |
3343 | return brdp->membase + (offset % STAL_PAGESIZE); | 3343 | return brdp->membase + (offset % STAL_PAGESIZE); |
@@ -3876,7 +3876,7 @@ static int stli_eisamemprobe(stlibrd_t *brdp) | |||
3876 | continue; | 3876 | continue; |
3877 | 3877 | ||
3878 | if (brdp->brdtype == BRD_ECPE) { | 3878 | if (brdp->brdtype == BRD_ECPE) { |
3879 | ecpsigp = (cdkecpsig_t __iomem *) stli_ecpeigetmemptr(brdp, | 3879 | ecpsigp = stli_ecpeigetmemptr(brdp, |
3880 | CDK_SIGADDR, __LINE__); | 3880 | CDK_SIGADDR, __LINE__); |
3881 | memcpy_fromio(&ecpsig, ecpsigp, sizeof(cdkecpsig_t)); | 3881 | memcpy_fromio(&ecpsig, ecpsigp, sizeof(cdkecpsig_t)); |
3882 | if (ecpsig.magic == cpu_to_le32(ECP_MAGIC)) | 3882 | if (ecpsig.magic == cpu_to_le32(ECP_MAGIC)) |
@@ -4184,7 +4184,7 @@ static int stli_initbrds(void) | |||
4184 | static ssize_t stli_memread(struct file *fp, char __user *buf, size_t count, loff_t *offp) | 4184 | static ssize_t stli_memread(struct file *fp, char __user *buf, size_t count, loff_t *offp) |
4185 | { | 4185 | { |
4186 | unsigned long flags; | 4186 | unsigned long flags; |
4187 | void *memptr; | 4187 | void __iomem *memptr; |
4188 | stlibrd_t *brdp; | 4188 | stlibrd_t *brdp; |
4189 | int brdnr, size, n; | 4189 | int brdnr, size, n; |
4190 | void *p; | 4190 | void *p; |
@@ -4214,7 +4214,7 @@ static ssize_t stli_memread(struct file *fp, char __user *buf, size_t count, lof | |||
4214 | while (size > 0) { | 4214 | while (size > 0) { |
4215 | spin_lock_irqsave(&brd_lock, flags); | 4215 | spin_lock_irqsave(&brd_lock, flags); |
4216 | EBRDENABLE(brdp); | 4216 | EBRDENABLE(brdp); |
4217 | memptr = (void *) EBRDGETMEMPTR(brdp, off); | 4217 | memptr = EBRDGETMEMPTR(brdp, off); |
4218 | n = MIN(size, (brdp->pagesize - (((unsigned long) off) % brdp->pagesize))); | 4218 | n = MIN(size, (brdp->pagesize - (((unsigned long) off) % brdp->pagesize))); |
4219 | n = MIN(n, PAGE_SIZE); | 4219 | n = MIN(n, PAGE_SIZE); |
4220 | memcpy_fromio(p, memptr, n); | 4220 | memcpy_fromio(p, memptr, n); |
@@ -4247,7 +4247,7 @@ out: | |||
4247 | static ssize_t stli_memwrite(struct file *fp, const char __user *buf, size_t count, loff_t *offp) | 4247 | static ssize_t stli_memwrite(struct file *fp, const char __user *buf, size_t count, loff_t *offp) |
4248 | { | 4248 | { |
4249 | unsigned long flags; | 4249 | unsigned long flags; |
4250 | void *memptr; | 4250 | void __iomem *memptr; |
4251 | stlibrd_t *brdp; | 4251 | stlibrd_t *brdp; |
4252 | char __user *chbuf; | 4252 | char __user *chbuf; |
4253 | int brdnr, size, n; | 4253 | int brdnr, size, n; |
@@ -4287,7 +4287,7 @@ static ssize_t stli_memwrite(struct file *fp, const char __user *buf, size_t cou | |||
4287 | } | 4287 | } |
4288 | spin_lock_irqsave(&brd_lock, flags); | 4288 | spin_lock_irqsave(&brd_lock, flags); |
4289 | EBRDENABLE(brdp); | 4289 | EBRDENABLE(brdp); |
4290 | memptr = (void *) EBRDGETMEMPTR(brdp, off); | 4290 | memptr = EBRDGETMEMPTR(brdp, off); |
4291 | memcpy_toio(memptr, p, n); | 4291 | memcpy_toio(memptr, p, n); |
4292 | EBRDDISABLE(brdp); | 4292 | EBRDDISABLE(brdp); |
4293 | spin_unlock_irqrestore(&brd_lock, flags); | 4293 | spin_unlock_irqrestore(&brd_lock, flags); |
diff --git a/drivers/char/qtronix.c b/drivers/char/qtronix.c deleted file mode 100644 index 5c9477741a30..000000000000 --- a/drivers/char/qtronix.c +++ /dev/null | |||
@@ -1,605 +0,0 @@ | |||
1 | /* | ||
2 | * | ||
3 | * BRIEF MODULE DESCRIPTION | ||
4 | * Qtronix 990P infrared keyboard driver. | ||
5 | * | ||
6 | * | ||
7 | * Copyright 2001 MontaVista Software Inc. | ||
8 | * Author: MontaVista Software, Inc. | ||
9 | * ppopov@mvista.com or source@mvista.com | ||
10 | * | ||
11 | * | ||
12 | * The bottom portion of this driver was take from | ||
13 | * pc_keyb.c Please see that file for copyrights. | ||
14 | * | ||
15 | * This program is free software; you can redistribute it and/or modify it | ||
16 | * under the terms of the GNU General Public License as published by the | ||
17 | * Free Software Foundation; either version 2 of the License, or (at your | ||
18 | * option) any later version. | ||
19 | * | ||
20 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
21 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
22 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
23 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
24 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
25 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
26 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
27 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
28 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
29 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
30 | * | ||
31 | * You should have received a copy of the GNU General Public License along | ||
32 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
33 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
34 | */ | ||
35 | |||
36 | |||
37 | /* | ||
38 | * NOTE: | ||
39 | * | ||
40 | * This driver has only been tested with the Consumer IR | ||
41 | * port of the ITE 8172 system controller. | ||
42 | * | ||
43 | * You do not need this driver if you are using the ps/2 or | ||
44 | * USB adapter that the keyboard ships with. You only need | ||
45 | * this driver if your board has a IR port and the keyboard | ||
46 | * data is being sent directly to the IR. In that case, | ||
47 | * you also need some low-level IR support. See it8172_cir.c. | ||
48 | * | ||
49 | */ | ||
50 | |||
51 | #ifdef CONFIG_QTRONIX_KEYBOARD | ||
52 | |||
53 | #include <linux/module.h> | ||
54 | #include <linux/types.h> | ||
55 | #include <linux/pci.h> | ||
56 | #include <linux/kernel.h> | ||
57 | |||
58 | #include <asm/it8172/it8172.h> | ||
59 | #include <asm/it8172/it8172_int.h> | ||
60 | #include <asm/it8172/it8172_cir.h> | ||
61 | |||
62 | #include <linux/spinlock.h> | ||
63 | #include <linux/sched.h> | ||
64 | #include <linux/interrupt.h> | ||
65 | #include <linux/tty.h> | ||
66 | #include <linux/mm.h> | ||
67 | #include <linux/signal.h> | ||
68 | #include <linux/init.h> | ||
69 | #include <linux/kbd_ll.h> | ||
70 | #include <linux/delay.h> | ||
71 | #include <linux/poll.h> | ||
72 | #include <linux/miscdevice.h> | ||
73 | #include <linux/slab.h> | ||
74 | #include <linux/kbd_kern.h> | ||
75 | #include <linux/smp_lock.h> | ||
76 | #include <asm/io.h> | ||
77 | #include <linux/pc_keyb.h> | ||
78 | |||
79 | #include <asm/keyboard.h> | ||
80 | #include <linux/bitops.h> | ||
81 | #include <asm/uaccess.h> | ||
82 | #include <asm/irq.h> | ||
83 | #include <asm/system.h> | ||
84 | |||
85 | #define leading1 0 | ||
86 | #define leading2 0xF | ||
87 | |||
88 | #define KBD_CIR_PORT 0 | ||
89 | #define AUX_RECONNECT 170 /* scancode when ps2 device is plugged (back) in */ | ||
90 | |||
91 | static int data_index; | ||
92 | struct cir_port *cir; | ||
93 | static unsigned char kbdbytes[5]; | ||
94 | static unsigned char cir_data[32]; /* we only need 16 chars */ | ||
95 | |||
96 | static void kbd_int_handler(int irq, void *dev_id); | ||
97 | static int handle_data(unsigned char *p_data); | ||
98 | static inline void handle_mouse_event(unsigned char scancode); | ||
99 | static inline void handle_keyboard_event(unsigned char scancode, int down); | ||
100 | static int __init psaux_init(void); | ||
101 | |||
102 | static struct aux_queue *queue; /* Mouse data buffer. */ | ||
103 | static int aux_count = 0; | ||
104 | |||
105 | /* | ||
106 | * Keys accessed through the 'Fn' key | ||
107 | * The Fn key does not produce a key-up sequence. So, the first | ||
108 | * time the user presses it, it will be key-down event. The key | ||
109 | * stays down until the user presses it again. | ||
110 | */ | ||
111 | #define NUM_FN_KEYS 56 | ||
112 | static unsigned char fn_keys[NUM_FN_KEYS] = { | ||
113 | 0,0,0,0,0,0,0,0, /* 0 7 */ | ||
114 | 8,9,10,93,0,0,0,0, /* 8 15 */ | ||
115 | 0,0,0,0,0,0,0,5, /* 16 23 */ | ||
116 | 6,7,91,0,0,0,0,0, /* 24 31 */ | ||
117 | 0,0,0,0,0,2,3,4, /* 32 39 */ | ||
118 | 92,0,0,0,0,0,0,0, /* 40 47 */ | ||
119 | 0,0,0,0,11,0,94,95 /* 48 55 */ | ||
120 | |||
121 | }; | ||
122 | |||
123 | void __init init_qtronix_990P_kbd(void) | ||
124 | { | ||
125 | int retval; | ||
126 | |||
127 | cir = (struct cir_port *)kmalloc(sizeof(struct cir_port), GFP_KERNEL); | ||
128 | if (!cir) { | ||
129 | printk("Unable to initialize Qtronix keyboard\n"); | ||
130 | return; | ||
131 | } | ||
132 | |||
133 | /* | ||
134 | * revisit | ||
135 | * this should be programmable, somehow by the, by the user. | ||
136 | */ | ||
137 | cir->port = KBD_CIR_PORT; | ||
138 | cir->baud_rate = 0x1d; | ||
139 | cir->rdwos = 0; | ||
140 | cir->rxdcr = 0x3; | ||
141 | cir->hcfs = 0; | ||
142 | cir->fifo_tl = 0; | ||
143 | cir->cfq = 0x1d; | ||
144 | cir_port_init(cir); | ||
145 | |||
146 | retval = request_irq(IT8172_CIR0_IRQ, kbd_int_handler, | ||
147 | (unsigned long )(IRQF_DISABLED|IRQF_SHARED), | ||
148 | (const char *)"Qtronix IR Keyboard", (void *)cir); | ||
149 | |||
150 | if (retval) { | ||
151 | printk("unable to allocate cir %d irq %d\n", | ||
152 | cir->port, IT8172_CIR0_IRQ); | ||
153 | } | ||
154 | #ifdef CONFIG_PSMOUSE | ||
155 | psaux_init(); | ||
156 | #endif | ||
157 | } | ||
158 | |||
159 | static inline unsigned char BitReverse(unsigned short key) | ||
160 | { | ||
161 | unsigned char rkey = 0; | ||
162 | rkey |= (key & 0x1) << 7; | ||
163 | rkey |= (key & 0x2) << 5; | ||
164 | rkey |= (key & 0x4) << 3; | ||
165 | rkey |= (key & 0x8) << 1; | ||
166 | rkey |= (key & 0x10) >> 1; | ||
167 | rkey |= (key & 0x20) >> 3; | ||
168 | rkey |= (key & 0x40) >> 5; | ||
169 | rkey |= (key & 0x80) >> 7; | ||
170 | return rkey; | ||
171 | |||
172 | } | ||
173 | |||
174 | |||
175 | static inline u_int8_t UpperByte(u_int8_t data) | ||
176 | { | ||
177 | return (data >> 4); | ||
178 | } | ||
179 | |||
180 | |||
181 | static inline u_int8_t LowerByte(u_int8_t data) | ||
182 | { | ||
183 | return (data & 0xF); | ||
184 | } | ||
185 | |||
186 | |||
187 | int CheckSumOk(u_int8_t byte1, u_int8_t byte2, | ||
188 | u_int8_t byte3, u_int8_t byte4, u_int8_t byte5) | ||
189 | { | ||
190 | u_int8_t CheckSum; | ||
191 | |||
192 | CheckSum = (byte1 & 0x0F) + byte2 + byte3 + byte4 + byte5; | ||
193 | if ( LowerByte(UpperByte(CheckSum) + LowerByte(CheckSum)) != UpperByte(byte1) ) | ||
194 | return 0; | ||
195 | else | ||
196 | return 1; | ||
197 | } | ||
198 | |||
199 | |||
200 | static void kbd_int_handler(int irq, void *dev_id) | ||
201 | { | ||
202 | struct cir_port *cir; | ||
203 | int j; | ||
204 | unsigned char int_status; | ||
205 | |||
206 | cir = (struct cir_port *)dev_id; | ||
207 | int_status = get_int_status(cir); | ||
208 | if (int_status & 0x4) { | ||
209 | clear_fifo(cir); | ||
210 | return; | ||
211 | } | ||
212 | |||
213 | while (cir_get_rx_count(cir)) { | ||
214 | |||
215 | cir_data[data_index] = cir_read_data(cir); | ||
216 | |||
217 | if (data_index == 0) {/* expecting first byte */ | ||
218 | if (cir_data[data_index] != leading1) { | ||
219 | //printk("!leading byte %x\n", cir_data[data_index]); | ||
220 | set_rx_active(cir); | ||
221 | clear_fifo(cir); | ||
222 | continue; | ||
223 | } | ||
224 | } | ||
225 | if (data_index == 1) { | ||
226 | if ((cir_data[data_index] & 0xf) != leading2) { | ||
227 | set_rx_active(cir); | ||
228 | data_index = 0; /* start over */ | ||
229 | clear_fifo(cir); | ||
230 | continue; | ||
231 | } | ||
232 | } | ||
233 | |||
234 | if ( (cir_data[data_index] == 0xff)) { /* last byte */ | ||
235 | //printk("data_index %d\n", data_index); | ||
236 | set_rx_active(cir); | ||
237 | #if 0 | ||
238 | for (j=0; j<=data_index; j++) { | ||
239 | printk("rx_data %d: %x\n", j, cir_data[j]); | ||
240 | } | ||
241 | #endif | ||
242 | data_index = 0; | ||
243 | handle_data(cir_data); | ||
244 | return; | ||
245 | } | ||
246 | else if (data_index>16) { | ||
247 | set_rx_active(cir); | ||
248 | #if 0 | ||
249 | printk("warning: data_index %d\n", data_index); | ||
250 | for (j=0; j<=data_index; j++) { | ||
251 | printk("rx_data %d: %x\n", j, cir_data[j]); | ||
252 | } | ||
253 | #endif | ||
254 | data_index = 0; | ||
255 | clear_fifo(cir); | ||
256 | return; | ||
257 | } | ||
258 | data_index++; | ||
259 | } | ||
260 | } | ||
261 | |||
262 | |||
263 | #define NUM_KBD_BYTES 5 | ||
264 | static int handle_data(unsigned char *p_data) | ||
265 | { | ||
266 | u_int32_t bit_bucket; | ||
267 | u_int32_t i, j; | ||
268 | u_int32_t got_bits, next_byte; | ||
269 | int down = 0; | ||
270 | |||
271 | /* Reorganize the bit stream */ | ||
272 | for (i=0; i<16; i++) | ||
273 | p_data[i] = BitReverse(~p_data[i]); | ||
274 | |||
275 | /* | ||
276 | * We've already previously checked that p_data[0] | ||
277 | * is equal to leading1 and that (p_data[1] & 0xf) | ||
278 | * is equal to leading2. These twelve bits are the | ||
279 | * leader code. We can now throw them away (the 12 | ||
280 | * bits) and continue parsing the stream. | ||
281 | */ | ||
282 | bit_bucket = p_data[1] << 12; | ||
283 | got_bits = 4; | ||
284 | next_byte = 2; | ||
285 | |||
286 | /* | ||
287 | * Process four bits at a time | ||
288 | */ | ||
289 | for (i=0; i<NUM_KBD_BYTES; i++) { | ||
290 | |||
291 | kbdbytes[i]=0; | ||
292 | |||
293 | for (j=0; j<8; j++) /* 8 bits per byte */ | ||
294 | { | ||
295 | if (got_bits < 4) { | ||
296 | bit_bucket |= (p_data[next_byte++] << (8 - got_bits)); | ||
297 | got_bits += 8; | ||
298 | } | ||
299 | |||
300 | if ((bit_bucket & 0xF000) == 0x8000) { | ||
301 | /* Convert 1000b to 1 */ | ||
302 | kbdbytes[i] = 0x80 | (kbdbytes[i] >> 1); | ||
303 | got_bits -= 4; | ||
304 | bit_bucket = bit_bucket << 4; | ||
305 | } | ||
306 | else if ((bit_bucket & 0xC000) == 0x8000) { | ||
307 | /* Convert 10b to 0 */ | ||
308 | kbdbytes[i] = kbdbytes[i] >> 1; | ||
309 | got_bits -= 2; | ||
310 | bit_bucket = bit_bucket << 2; | ||
311 | } | ||
312 | else { | ||
313 | /* bad serial stream */ | ||
314 | return 1; | ||
315 | } | ||
316 | |||
317 | if (next_byte > 16) { | ||
318 | //printk("error: too many bytes\n"); | ||
319 | return 1; | ||
320 | } | ||
321 | } | ||
322 | } | ||
323 | |||
324 | |||
325 | if (!CheckSumOk(kbdbytes[0], kbdbytes[1], | ||
326 | kbdbytes[2], kbdbytes[3], kbdbytes[4])) { | ||
327 | //printk("checksum failed\n"); | ||
328 | return 1; | ||
329 | } | ||
330 | |||
331 | if (kbdbytes[1] & 0x08) { | ||
332 | //printk("m: %x %x %x\n", kbdbytes[1], kbdbytes[2], kbdbytes[3]); | ||
333 | handle_mouse_event(kbdbytes[1]); | ||
334 | handle_mouse_event(kbdbytes[2]); | ||
335 | handle_mouse_event(kbdbytes[3]); | ||
336 | } | ||
337 | else { | ||
338 | if (kbdbytes[2] == 0) down = 1; | ||
339 | #if 0 | ||
340 | if (down) | ||
341 | printk("down %d\n", kbdbytes[3]); | ||
342 | else | ||
343 | printk("up %d\n", kbdbytes[3]); | ||
344 | #endif | ||
345 | handle_keyboard_event(kbdbytes[3], down); | ||
346 | } | ||
347 | return 0; | ||
348 | } | ||
349 | |||
350 | |||
351 | DEFINE_SPINLOCK(kbd_controller_lock); | ||
352 | static unsigned char handle_kbd_event(void); | ||
353 | |||
354 | |||
355 | int kbd_setkeycode(unsigned int scancode, unsigned int keycode) | ||
356 | { | ||
357 | printk("kbd_setkeycode scancode %x keycode %x\n", scancode, keycode); | ||
358 | return 0; | ||
359 | } | ||
360 | |||
361 | int kbd_getkeycode(unsigned int scancode) | ||
362 | { | ||
363 | return scancode; | ||
364 | } | ||
365 | |||
366 | |||
367 | int kbd_translate(unsigned char scancode, unsigned char *keycode, | ||
368 | char raw_mode) | ||
369 | { | ||
370 | static int prev_scancode = 0; | ||
371 | |||
372 | if (scancode == 0x00 || scancode == 0xff) { | ||
373 | prev_scancode = 0; | ||
374 | return 0; | ||
375 | } | ||
376 | |||
377 | /* todo */ | ||
378 | if (!prev_scancode && scancode == 160) { /* Fn key down */ | ||
379 | //printk("Fn key down\n"); | ||
380 | prev_scancode = 160; | ||
381 | return 0; | ||
382 | } | ||
383 | else if (prev_scancode && scancode == 160) { /* Fn key up */ | ||
384 | //printk("Fn key up\n"); | ||
385 | prev_scancode = 0; | ||
386 | return 0; | ||
387 | } | ||
388 | |||
389 | /* todo */ | ||
390 | if (prev_scancode == 160) { | ||
391 | if (scancode <= NUM_FN_KEYS) { | ||
392 | *keycode = fn_keys[scancode]; | ||
393 | //printk("fn keycode %d\n", *keycode); | ||
394 | } | ||
395 | else | ||
396 | return 0; | ||
397 | } | ||
398 | else if (scancode <= 127) { | ||
399 | *keycode = scancode; | ||
400 | } | ||
401 | else | ||
402 | return 0; | ||
403 | |||
404 | |||
405 | return 1; | ||
406 | } | ||
407 | |||
408 | char kbd_unexpected_up(unsigned char keycode) | ||
409 | { | ||
410 | //printk("kbd_unexpected_up\n"); | ||
411 | return 0; | ||
412 | } | ||
413 | |||
414 | static unsigned char kbd_exists = 1; | ||
415 | |||
416 | static inline void handle_keyboard_event(unsigned char scancode, int down) | ||
417 | { | ||
418 | kbd_exists = 1; | ||
419 | handle_scancode(scancode, down); | ||
420 | tasklet_schedule(&keyboard_tasklet); | ||
421 | } | ||
422 | |||
423 | |||
424 | void kbd_leds(unsigned char leds) | ||
425 | { | ||
426 | } | ||
427 | |||
428 | /* dummy */ | ||
429 | void kbd_init_hw(void) | ||
430 | { | ||
431 | } | ||
432 | |||
433 | |||
434 | |||
435 | static inline void handle_mouse_event(unsigned char scancode) | ||
436 | { | ||
437 | if(scancode == AUX_RECONNECT){ | ||
438 | queue->head = queue->tail = 0; /* Flush input queue */ | ||
439 | // __aux_write_ack(AUX_ENABLE_DEV); /* ping the mouse :) */ | ||
440 | return; | ||
441 | } | ||
442 | |||
443 | if (aux_count) { | ||
444 | int head = queue->head; | ||
445 | |||
446 | queue->buf[head] = scancode; | ||
447 | head = (head + 1) & (AUX_BUF_SIZE-1); | ||
448 | if (head != queue->tail) { | ||
449 | queue->head = head; | ||
450 | kill_fasync(&queue->fasync, SIGIO, POLL_IN); | ||
451 | wake_up_interruptible(&queue->proc_list); | ||
452 | } | ||
453 | } | ||
454 | } | ||
455 | |||
456 | static unsigned char get_from_queue(void) | ||
457 | { | ||
458 | unsigned char result; | ||
459 | unsigned long flags; | ||
460 | |||
461 | spin_lock_irqsave(&kbd_controller_lock, flags); | ||
462 | result = queue->buf[queue->tail]; | ||
463 | queue->tail = (queue->tail + 1) & (AUX_BUF_SIZE-1); | ||
464 | spin_unlock_irqrestore(&kbd_controller_lock, flags); | ||
465 | return result; | ||
466 | } | ||
467 | |||
468 | |||
469 | static inline int queue_empty(void) | ||
470 | { | ||
471 | return queue->head == queue->tail; | ||
472 | } | ||
473 | |||
474 | static int fasync_aux(int fd, struct file *filp, int on) | ||
475 | { | ||
476 | int retval; | ||
477 | |||
478 | //printk("fasync_aux\n"); | ||
479 | retval = fasync_helper(fd, filp, on, &queue->fasync); | ||
480 | if (retval < 0) | ||
481 | return retval; | ||
482 | return 0; | ||
483 | } | ||
484 | |||
485 | |||
486 | /* | ||
487 | * Random magic cookie for the aux device | ||
488 | */ | ||
489 | #define AUX_DEV ((void *)queue) | ||
490 | |||
491 | static int release_aux(struct inode * inode, struct file * file) | ||
492 | { | ||
493 | fasync_aux(-1, file, 0); | ||
494 | aux_count--; | ||
495 | return 0; | ||
496 | } | ||
497 | |||
498 | static int open_aux(struct inode * inode, struct file * file) | ||
499 | { | ||
500 | if (aux_count++) { | ||
501 | return 0; | ||
502 | } | ||
503 | queue->head = queue->tail = 0; /* Flush input queue */ | ||
504 | return 0; | ||
505 | } | ||
506 | |||
507 | /* | ||
508 | * Put bytes from input queue to buffer. | ||
509 | */ | ||
510 | |||
511 | static ssize_t read_aux(struct file * file, char * buffer, | ||
512 | size_t count, loff_t *ppos) | ||
513 | { | ||
514 | DECLARE_WAITQUEUE(wait, current); | ||
515 | ssize_t i = count; | ||
516 | unsigned char c; | ||
517 | |||
518 | if (queue_empty()) { | ||
519 | if (file->f_flags & O_NONBLOCK) | ||
520 | return -EAGAIN; | ||
521 | add_wait_queue(&queue->proc_list, &wait); | ||
522 | repeat: | ||
523 | set_current_state(TASK_INTERRUPTIBLE); | ||
524 | if (queue_empty() && !signal_pending(current)) { | ||
525 | schedule(); | ||
526 | goto repeat; | ||
527 | } | ||
528 | current->state = TASK_RUNNING; | ||
529 | remove_wait_queue(&queue->proc_list, &wait); | ||
530 | } | ||
531 | while (i > 0 && !queue_empty()) { | ||
532 | c = get_from_queue(); | ||
533 | put_user(c, buffer++); | ||
534 | i--; | ||
535 | } | ||
536 | if (count-i) { | ||
537 | struct inode *inode = file->f_dentry->d_inode; | ||
538 | inode->i_atime = current_fs_time(inode->i_sb); | ||
539 | return count-i; | ||
540 | } | ||
541 | if (signal_pending(current)) | ||
542 | return -ERESTARTSYS; | ||
543 | return 0; | ||
544 | } | ||
545 | |||
546 | /* | ||
547 | * Write to the aux device. | ||
548 | */ | ||
549 | |||
550 | static ssize_t write_aux(struct file * file, const char * buffer, | ||
551 | size_t count, loff_t *ppos) | ||
552 | { | ||
553 | /* | ||
554 | * The ITE boards this was tested on did not have the | ||
555 | * transmit wires connected. | ||
556 | */ | ||
557 | return count; | ||
558 | } | ||
559 | |||
560 | static unsigned int aux_poll(struct file *file, poll_table * wait) | ||
561 | { | ||
562 | poll_wait(file, &queue->proc_list, wait); | ||
563 | if (!queue_empty()) | ||
564 | return POLLIN | POLLRDNORM; | ||
565 | return 0; | ||
566 | } | ||
567 | |||
568 | struct file_operations psaux_fops = { | ||
569 | .read = read_aux, | ||
570 | .write = write_aux, | ||
571 | .poll = aux_poll, | ||
572 | .open = open_aux, | ||
573 | .release = release_aux, | ||
574 | .fasync = fasync_aux, | ||
575 | }; | ||
576 | |||
577 | /* | ||
578 | * Initialize driver. | ||
579 | */ | ||
580 | static struct miscdevice psaux_mouse = { | ||
581 | PSMOUSE_MINOR, "psaux", &psaux_fops | ||
582 | }; | ||
583 | |||
584 | static int __init psaux_init(void) | ||
585 | { | ||
586 | int retval; | ||
587 | |||
588 | retval = misc_register(&psaux_mouse); | ||
589 | if(retval < 0) | ||
590 | return retval; | ||
591 | |||
592 | queue = (struct aux_queue *) kmalloc(sizeof(*queue), GFP_KERNEL); | ||
593 | if (!queue) { | ||
594 | misc_deregister(&psaux_mouse); | ||
595 | return -ENOMEM; | ||
596 | } | ||
597 | |||
598 | memset(queue, 0, sizeof(*queue)); | ||
599 | queue->head = queue->tail = 0; | ||
600 | init_waitqueue_head(&queue->proc_list); | ||
601 | |||
602 | return 0; | ||
603 | } | ||
604 | module_init(init_qtronix_990P_kbd); | ||
605 | #endif | ||
diff --git a/drivers/char/rio/func.h b/drivers/char/rio/func.h index 6b039186856d..9e7283bd81a0 100644 --- a/drivers/char/rio/func.h +++ b/drivers/char/rio/func.h | |||
@@ -88,7 +88,7 @@ void RIOHostReset(unsigned int, struct DpRam __iomem *, unsigned int); | |||
88 | 88 | ||
89 | /* riointr.c */ | 89 | /* riointr.c */ |
90 | void RIOTxEnable(char *); | 90 | void RIOTxEnable(char *); |
91 | void RIOServiceHost(struct rio_info *, struct Host *, int); | 91 | void RIOServiceHost(struct rio_info *, struct Host *); |
92 | int riotproc(struct rio_info *, struct ttystatics *, int, int); | 92 | int riotproc(struct rio_info *, struct ttystatics *, int, int); |
93 | 93 | ||
94 | /* rioparam.c */ | 94 | /* rioparam.c */ |
diff --git a/drivers/char/rio/rio_linux.c b/drivers/char/rio/rio_linux.c index 3bea594600d4..c382df0f82f6 100644 --- a/drivers/char/rio/rio_linux.c +++ b/drivers/char/rio/rio_linux.c | |||
@@ -368,7 +368,7 @@ static irqreturn_t rio_interrupt(int irq, void *ptr) | |||
368 | struct Host *HostP; | 368 | struct Host *HostP; |
369 | func_enter(); | 369 | func_enter(); |
370 | 370 | ||
371 | HostP = (struct Host *) ptr; /* &p->RIOHosts[(long)ptr]; */ | 371 | HostP = ptr; /* &p->RIOHosts[(long)ptr]; */ |
372 | rio_dprintk(RIO_DEBUG_IFLOW, "rio: enter rio_interrupt (%d/%d)\n", irq, HostP->Ivec); | 372 | rio_dprintk(RIO_DEBUG_IFLOW, "rio: enter rio_interrupt (%d/%d)\n", irq, HostP->Ivec); |
373 | 373 | ||
374 | /* AAargh! The order in which to do these things is essential and | 374 | /* AAargh! The order in which to do these things is essential and |
@@ -402,7 +402,7 @@ static irqreturn_t rio_interrupt(int irq, void *ptr) | |||
402 | return IRQ_HANDLED; | 402 | return IRQ_HANDLED; |
403 | } | 403 | } |
404 | 404 | ||
405 | RIOServiceHost(p, HostP, irq); | 405 | RIOServiceHost(p, HostP); |
406 | 406 | ||
407 | rio_dprintk(RIO_DEBUG_IFLOW, "riointr() doing host %p type %d\n", ptr, HostP->Type); | 407 | rio_dprintk(RIO_DEBUG_IFLOW, "riointr() doing host %p type %d\n", ptr, HostP->Type); |
408 | 408 | ||
diff --git a/drivers/char/rio/riointr.c b/drivers/char/rio/riointr.c index 0bd09040a5c0..eeda40c5e189 100644 --- a/drivers/char/rio/riointr.c +++ b/drivers/char/rio/riointr.c | |||
@@ -181,7 +181,7 @@ static int RupIntr; | |||
181 | static int RxIntr; | 181 | static int RxIntr; |
182 | static int TxIntr; | 182 | static int TxIntr; |
183 | 183 | ||
184 | void RIOServiceHost(struct rio_info *p, struct Host *HostP, int From) | 184 | void RIOServiceHost(struct rio_info *p, struct Host *HostP) |
185 | { | 185 | { |
186 | rio_spin_lock(&HostP->HostLock); | 186 | rio_spin_lock(&HostP->HostLock); |
187 | if ((HostP->Flags & RUN_STATE) != RC_RUNNING) { | 187 | if ((HostP->Flags & RUN_STATE) != RC_RUNNING) { |
diff --git a/drivers/char/riscom8.c b/drivers/char/riscom8.c index be68cfb0ae69..5ab32b38f45a 100644 --- a/drivers/char/riscom8.c +++ b/drivers/char/riscom8.c | |||
@@ -559,11 +559,10 @@ static irqreturn_t rc_interrupt(int irq, void * dev_id) | |||
559 | int handled = 0; | 559 | int handled = 0; |
560 | 560 | ||
561 | bp = IRQ_to_board[irq]; | 561 | bp = IRQ_to_board[irq]; |
562 | 562 | ||
563 | if (!bp || !(bp->flags & RC_BOARD_ACTIVE)) { | 563 | if (!(bp->flags & RC_BOARD_ACTIVE)) |
564 | return IRQ_NONE; | 564 | return IRQ_NONE; |
565 | } | 565 | |
566 | |||
567 | while ((++loop < 16) && ((status = ~(rc_in(bp, RC_BSR))) & | 566 | while ((++loop < 16) && ((status = ~(rc_in(bp, RC_BSR))) & |
568 | (RC_BSR_TOUT | RC_BSR_TINT | | 567 | (RC_BSR_TOUT | RC_BSR_TINT | |
569 | RC_BSR_MINT | RC_BSR_RINT))) { | 568 | RC_BSR_MINT | RC_BSR_RINT))) { |
diff --git a/drivers/char/rtc.c b/drivers/char/rtc.c index abee7a339462..66a7385bc34a 100644 --- a/drivers/char/rtc.c +++ b/drivers/char/rtc.c | |||
@@ -35,13 +35,13 @@ | |||
35 | * 1.09a Pete Zaitcev: Sun SPARC | 35 | * 1.09a Pete Zaitcev: Sun SPARC |
36 | * 1.09b Jeff Garzik: Modularize, init cleanup | 36 | * 1.09b Jeff Garzik: Modularize, init cleanup |
37 | * 1.09c Jeff Garzik: SMP cleanup | 37 | * 1.09c Jeff Garzik: SMP cleanup |
38 | * 1.10 Paul Barton-Davis: add support for async I/O | 38 | * 1.10 Paul Barton-Davis: add support for async I/O |
39 | * 1.10a Andrea Arcangeli: Alpha updates | 39 | * 1.10a Andrea Arcangeli: Alpha updates |
40 | * 1.10b Andrew Morton: SMP lock fix | 40 | * 1.10b Andrew Morton: SMP lock fix |
41 | * 1.10c Cesar Barros: SMP locking fixes and cleanup | 41 | * 1.10c Cesar Barros: SMP locking fixes and cleanup |
42 | * 1.10d Paul Gortmaker: delete paranoia check in rtc_exit | 42 | * 1.10d Paul Gortmaker: delete paranoia check in rtc_exit |
43 | * 1.10e Maciej W. Rozycki: Handle DECstation's year weirdness. | 43 | * 1.10e Maciej W. Rozycki: Handle DECstation's year weirdness. |
44 | * 1.11 Takashi Iwai: Kernel access functions | 44 | * 1.11 Takashi Iwai: Kernel access functions |
45 | * rtc_register/rtc_unregister/rtc_control | 45 | * rtc_register/rtc_unregister/rtc_control |
46 | * 1.11a Daniele Bellucci: Audit create_proc_read_entry in rtc_init | 46 | * 1.11a Daniele Bellucci: Audit create_proc_read_entry in rtc_init |
47 | * 1.12 Venkatesh Pallipadi: Hooks for emulating rtc on HPET base-timer | 47 | * 1.12 Venkatesh Pallipadi: Hooks for emulating rtc on HPET base-timer |
diff --git a/drivers/char/serial167.c b/drivers/char/serial167.c index 6f13f98e3171..461bfe0234c9 100644 --- a/drivers/char/serial167.c +++ b/drivers/char/serial167.c | |||
@@ -62,6 +62,7 @@ | |||
62 | #include <linux/console.h> | 62 | #include <linux/console.h> |
63 | #include <linux/module.h> | 63 | #include <linux/module.h> |
64 | #include <linux/bitops.h> | 64 | #include <linux/bitops.h> |
65 | #include <linux/tty_flip.h> | ||
65 | 66 | ||
66 | #include <asm/system.h> | 67 | #include <asm/system.h> |
67 | #include <asm/io.h> | 68 | #include <asm/io.h> |
@@ -427,8 +428,9 @@ cd2401_rxerr_interrupt(int irq, void *dev_id) | |||
427 | overflowing, we still loose | 428 | overflowing, we still loose |
428 | the next incoming character. | 429 | the next incoming character. |
429 | */ | 430 | */ |
430 | tty_insert_flip_char(tty, data, TTY_NORMAL); | 431 | if (tty_buffer_request_room(tty, 1) != 0){ |
431 | } | 432 | tty_insert_flip_char(tty, data, TTY_FRAME); |
433 | } | ||
432 | /* These two conditions may imply */ | 434 | /* These two conditions may imply */ |
433 | /* a normal read should be done. */ | 435 | /* a normal read should be done. */ |
434 | /* else if(data & CyTIMEOUT) */ | 436 | /* else if(data & CyTIMEOUT) */ |
@@ -437,14 +439,14 @@ cd2401_rxerr_interrupt(int irq, void *dev_id) | |||
437 | tty_insert_flip_char(tty, 0, TTY_NORMAL); | 439 | tty_insert_flip_char(tty, 0, TTY_NORMAL); |
438 | } | 440 | } |
439 | }else{ | 441 | }else{ |
440 | tty_insert_flip_char(tty, data, TTY_NORMAL); | 442 | tty_insert_flip_char(tty, data, TTY_NORMAL); |
441 | } | 443 | } |
442 | }else{ | 444 | }else{ |
443 | /* there was a software buffer overrun | 445 | /* there was a software buffer overrun |
444 | and nothing could be done about it!!! */ | 446 | and nothing could be done about it!!! */ |
445 | } | 447 | } |
446 | } | 448 | } |
447 | schedule_delayed_work(&tty->flip.work, 1); | 449 | tty_schedule_flip(tty); |
448 | /* end of service */ | 450 | /* end of service */ |
449 | base_addr[CyREOIR] = rfoc ? 0 : CyNOTRANS; | 451 | base_addr[CyREOIR] = rfoc ? 0 : CyNOTRANS; |
450 | return IRQ_HANDLED; | 452 | return IRQ_HANDLED; |
@@ -635,6 +637,7 @@ cd2401_rx_interrupt(int irq, void *dev_id) | |||
635 | char data; | 637 | char data; |
636 | int char_count; | 638 | int char_count; |
637 | int save_cnt; | 639 | int save_cnt; |
640 | int len; | ||
638 | 641 | ||
639 | /* determine the channel and change to that context */ | 642 | /* determine the channel and change to that context */ |
640 | channel = (u_short ) (base_addr[CyLICR] >> 2); | 643 | channel = (u_short ) (base_addr[CyLICR] >> 2); |
@@ -667,14 +670,15 @@ cd2401_rx_interrupt(int irq, void *dev_id) | |||
667 | info->mon.char_max = char_count; | 670 | info->mon.char_max = char_count; |
668 | info->mon.char_last = char_count; | 671 | info->mon.char_last = char_count; |
669 | #endif | 672 | #endif |
670 | while(char_count--){ | 673 | len = tty_buffer_request_room(tty, char_count); |
674 | while(len--){ | ||
671 | data = base_addr[CyRDR]; | 675 | data = base_addr[CyRDR]; |
672 | tty_insert_flip_char(tty, data, TTY_NORMAL); | 676 | tty_insert_flip_char(tty, data, TTY_NORMAL); |
673 | #ifdef CYCLOM_16Y_HACK | 677 | #ifdef CYCLOM_16Y_HACK |
674 | udelay(10L); | 678 | udelay(10L); |
675 | #endif | 679 | #endif |
676 | } | 680 | } |
677 | schedule_delayed_work(&tty->flip.work, 1); | 681 | tty_schedule_flip(tty); |
678 | } | 682 | } |
679 | /* end of service */ | 683 | /* end of service */ |
680 | base_addr[CyREOIR] = save_cnt ? 0 : CyNOTRANS; | 684 | base_addr[CyREOIR] = save_cnt ? 0 : CyNOTRANS; |
@@ -1422,7 +1426,6 @@ cy_tiocmget(struct tty_struct *tty, struct file *file) | |||
1422 | volatile unsigned char *base_addr = (u_char *)BASE_ADDR; | 1426 | volatile unsigned char *base_addr = (u_char *)BASE_ADDR; |
1423 | unsigned long flags; | 1427 | unsigned long flags; |
1424 | unsigned char status; | 1428 | unsigned char status; |
1425 | unsigned int result; | ||
1426 | 1429 | ||
1427 | channel = info->line; | 1430 | channel = info->line; |
1428 | 1431 | ||
@@ -1446,7 +1449,6 @@ cy_tiocmset(struct tty_struct *tty, struct file *file, | |||
1446 | int channel; | 1449 | int channel; |
1447 | volatile unsigned char *base_addr = (u_char *)BASE_ADDR; | 1450 | volatile unsigned char *base_addr = (u_char *)BASE_ADDR; |
1448 | unsigned long flags; | 1451 | unsigned long flags; |
1449 | unsigned int arg; | ||
1450 | 1452 | ||
1451 | channel = info->line; | 1453 | channel = info->line; |
1452 | 1454 | ||
diff --git a/drivers/char/specialix.c b/drivers/char/specialix.c index 6022495571ae..d0b88d0e87fd 100644 --- a/drivers/char/specialix.c +++ b/drivers/char/specialix.c | |||
@@ -912,7 +912,7 @@ static irqreturn_t sx_interrupt(int irq, void *dev_id) | |||
912 | spin_lock_irqsave(&bp->lock, flags); | 912 | spin_lock_irqsave(&bp->lock, flags); |
913 | 913 | ||
914 | dprintk (SX_DEBUG_FLOW, "enter %s port %d room: %ld\n", __FUNCTION__, port_No(sx_get_port(bp, "INT")), SERIAL_XMIT_SIZE - sx_get_port(bp, "ITN")->xmit_cnt - 1); | 914 | dprintk (SX_DEBUG_FLOW, "enter %s port %d room: %ld\n", __FUNCTION__, port_No(sx_get_port(bp, "INT")), SERIAL_XMIT_SIZE - sx_get_port(bp, "ITN")->xmit_cnt - 1); |
915 | if (!bp || !(bp->flags & SX_BOARD_ACTIVE)) { | 915 | if (!(bp->flags & SX_BOARD_ACTIVE)) { |
916 | dprintk (SX_DEBUG_IRQ, "sx: False interrupt. irq %d.\n", irq); | 916 | dprintk (SX_DEBUG_IRQ, "sx: False interrupt. irq %d.\n", irq); |
917 | spin_unlock_irqrestore(&bp->lock, flags); | 917 | spin_unlock_irqrestore(&bp->lock, flags); |
918 | func_exit(); | 918 | func_exit(); |
diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c index 4c0e08685705..5f49280779fb 100644 --- a/drivers/char/sysrq.c +++ b/drivers/char/sysrq.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <linux/irq.h> | 38 | #include <linux/irq.h> |
39 | 39 | ||
40 | #include <asm/ptrace.h> | 40 | #include <asm/ptrace.h> |
41 | #include <asm/irq_regs.h> | ||
41 | 42 | ||
42 | /* Whether we react on sysrq keys or just ignore them */ | 43 | /* Whether we react on sysrq keys or just ignore them */ |
43 | int sysrq_enabled = 1; | 44 | int sysrq_enabled = 1; |
diff --git a/drivers/char/viocons.c b/drivers/char/viocons.c index a362ee9c92dd..6d2e314860df 100644 --- a/drivers/char/viocons.c +++ b/drivers/char/viocons.c | |||
@@ -947,7 +947,7 @@ static void vioHandleData(struct HvLpEvent *event) | |||
947 | */ | 947 | */ |
948 | continue; | 948 | continue; |
949 | } else if (vio_sysrq_pressed) { | 949 | } else if (vio_sysrq_pressed) { |
950 | handle_sysrq(cevent->data[index], NULL, tty); | 950 | handle_sysrq(cevent->data[index], tty); |
951 | vio_sysrq_pressed = 0; | 951 | vio_sysrq_pressed = 0; |
952 | /* | 952 | /* |
953 | * continue because we don't want to add | 953 | * continue because we don't want to add |
diff --git a/drivers/char/vme_scc.c b/drivers/char/vme_scc.c index 0cdbaa70cf9f..d0b94dd1af6d 100644 --- a/drivers/char/vme_scc.c +++ b/drivers/char/vme_scc.c | |||
@@ -593,7 +593,7 @@ static void scc_enable_tx_interrupts(void *ptr) | |||
593 | local_irq_save(flags); | 593 | local_irq_save(flags); |
594 | SCCmod(INT_AND_DMA_REG, 0xff, IDR_TX_INT_ENAB); | 594 | SCCmod(INT_AND_DMA_REG, 0xff, IDR_TX_INT_ENAB); |
595 | /* restart the transmitter */ | 595 | /* restart the transmitter */ |
596 | scc_tx_int (0, port, 0); | 596 | scc_tx_int (0, port); |
597 | local_irq_restore(flags); | 597 | local_irq_restore(flags); |
598 | } | 598 | } |
599 | 599 | ||
diff --git a/drivers/dma/ioatdma.c b/drivers/dma/ioatdma.c index f3bf1e230bca..0358419a0e48 100644 --- a/drivers/dma/ioatdma.c +++ b/drivers/dma/ioatdma.c | |||
@@ -80,7 +80,7 @@ static int enumerate_dma_channels(struct ioat_device *device) | |||
80 | 80 | ||
81 | static struct ioat_desc_sw *ioat_dma_alloc_descriptor( | 81 | static struct ioat_desc_sw *ioat_dma_alloc_descriptor( |
82 | struct ioat_dma_chan *ioat_chan, | 82 | struct ioat_dma_chan *ioat_chan, |
83 | int flags) | 83 | gfp_t flags) |
84 | { | 84 | { |
85 | struct ioat_dma_descriptor *desc; | 85 | struct ioat_dma_descriptor *desc; |
86 | struct ioat_desc_sw *desc_sw; | 86 | struct ioat_desc_sw *desc_sw; |
@@ -686,7 +686,7 @@ static int __devinit ioat_probe(struct pci_dev *pdev, | |||
686 | { | 686 | { |
687 | int err; | 687 | int err; |
688 | unsigned long mmio_start, mmio_len; | 688 | unsigned long mmio_start, mmio_len; |
689 | void *reg_base; | 689 | void __iomem *reg_base; |
690 | struct ioat_device *device; | 690 | struct ioat_device *device; |
691 | 691 | ||
692 | err = pci_enable_device(pdev); | 692 | err = pci_enable_device(pdev); |
diff --git a/drivers/dma/ioatdma.h b/drivers/dma/ioatdma.h index a5d3b3644160..62b26a9be4c9 100644 --- a/drivers/dma/ioatdma.h +++ b/drivers/dma/ioatdma.h | |||
@@ -44,7 +44,7 @@ extern struct list_head dma_client_list; | |||
44 | 44 | ||
45 | struct ioat_device { | 45 | struct ioat_device { |
46 | struct pci_dev *pdev; | 46 | struct pci_dev *pdev; |
47 | void *reg_base; | 47 | void __iomem *reg_base; |
48 | struct pci_pool *dma_pool; | 48 | struct pci_pool *dma_pool; |
49 | struct pci_pool *completion_pool; | 49 | struct pci_pool *completion_pool; |
50 | 50 | ||
@@ -73,7 +73,7 @@ struct ioat_device { | |||
73 | 73 | ||
74 | struct ioat_dma_chan { | 74 | struct ioat_dma_chan { |
75 | 75 | ||
76 | void *reg_base; | 76 | void __iomem *reg_base; |
77 | 77 | ||
78 | dma_cookie_t completed_cookie; | 78 | dma_cookie_t completed_cookie; |
79 | unsigned long last_completion; | 79 | unsigned long last_completion; |
diff --git a/drivers/firmware/dcdbas.c b/drivers/firmware/dcdbas.c index 339f405ff708..8bcb58cd4ac0 100644 --- a/drivers/firmware/dcdbas.c +++ b/drivers/firmware/dcdbas.c | |||
@@ -559,7 +559,7 @@ static int __devinit dcdbas_probe(struct platform_device *dev) | |||
559 | while (--i >= 0) | 559 | while (--i >= 0) |
560 | sysfs_remove_bin_file(&dev->dev.kobj, | 560 | sysfs_remove_bin_file(&dev->dev.kobj, |
561 | dcdbas_bin_attrs[i]); | 561 | dcdbas_bin_attrs[i]); |
562 | sysfs_create_group(&dev->dev.kobj, &dcdbas_attr_group); | 562 | sysfs_remove_group(&dev->dev.kobj, &dcdbas_attr_group); |
563 | return error; | 563 | return error; |
564 | } | 564 | } |
565 | } | 565 | } |
diff --git a/drivers/i2c/busses/i2c-powermac.c b/drivers/i2c/busses/i2c-powermac.c index a508cb962d24..648d55533d87 100644 --- a/drivers/i2c/busses/i2c-powermac.c +++ b/drivers/i2c/busses/i2c-powermac.c | |||
@@ -182,9 +182,9 @@ static const struct i2c_algorithm i2c_powermac_algorithm = { | |||
182 | }; | 182 | }; |
183 | 183 | ||
184 | 184 | ||
185 | static int i2c_powermac_remove(struct device *dev) | 185 | static int i2c_powermac_remove(struct platform_device *dev) |
186 | { | 186 | { |
187 | struct i2c_adapter *adapter = dev_get_drvdata(dev); | 187 | struct i2c_adapter *adapter = platform_get_drvdata(dev); |
188 | struct pmac_i2c_bus *bus = i2c_get_adapdata(adapter); | 188 | struct pmac_i2c_bus *bus = i2c_get_adapdata(adapter); |
189 | int rc; | 189 | int rc; |
190 | 190 | ||
@@ -195,16 +195,16 @@ static int i2c_powermac_remove(struct device *dev) | |||
195 | if (rc) | 195 | if (rc) |
196 | printk("i2c-powermac.c: Failed to remove bus %s !\n", | 196 | printk("i2c-powermac.c: Failed to remove bus %s !\n", |
197 | adapter->name); | 197 | adapter->name); |
198 | dev_set_drvdata(dev, NULL); | 198 | platform_set_drvdata(dev, NULL); |
199 | kfree(adapter); | 199 | kfree(adapter); |
200 | 200 | ||
201 | return 0; | 201 | return 0; |
202 | } | 202 | } |
203 | 203 | ||
204 | 204 | ||
205 | static int i2c_powermac_probe(struct device *dev) | 205 | static int __devexit i2c_powermac_probe(struct platform_device *dev) |
206 | { | 206 | { |
207 | struct pmac_i2c_bus *bus = dev->platform_data; | 207 | struct pmac_i2c_bus *bus = dev->dev.platform_data; |
208 | struct device_node *parent = NULL; | 208 | struct device_node *parent = NULL; |
209 | struct i2c_adapter *adapter; | 209 | struct i2c_adapter *adapter; |
210 | char name[32]; | 210 | char name[32]; |
@@ -246,11 +246,11 @@ static int i2c_powermac_probe(struct device *dev) | |||
246 | printk(KERN_ERR "i2c-powermac: can't allocate inteface !\n"); | 246 | printk(KERN_ERR "i2c-powermac: can't allocate inteface !\n"); |
247 | return -ENOMEM; | 247 | return -ENOMEM; |
248 | } | 248 | } |
249 | dev_set_drvdata(dev, adapter); | 249 | platform_set_drvdata(dev, adapter); |
250 | strcpy(adapter->name, name); | 250 | strcpy(adapter->name, name); |
251 | adapter->algo = &i2c_powermac_algorithm; | 251 | adapter->algo = &i2c_powermac_algorithm; |
252 | i2c_set_adapdata(adapter, bus); | 252 | i2c_set_adapdata(adapter, bus); |
253 | adapter->dev.parent = dev; | 253 | adapter->dev.parent = &dev->dev; |
254 | pmac_i2c_attach_adapter(bus, adapter); | 254 | pmac_i2c_attach_adapter(bus, adapter); |
255 | rc = i2c_add_adapter(adapter); | 255 | rc = i2c_add_adapter(adapter); |
256 | if (rc) { | 256 | if (rc) { |
@@ -265,23 +265,25 @@ static int i2c_powermac_probe(struct device *dev) | |||
265 | } | 265 | } |
266 | 266 | ||
267 | 267 | ||
268 | static struct device_driver i2c_powermac_driver = { | 268 | static struct platform_driver i2c_powermac_driver = { |
269 | .name = "i2c-powermac", | ||
270 | .bus = &platform_bus_type, | ||
271 | .probe = i2c_powermac_probe, | 269 | .probe = i2c_powermac_probe, |
272 | .remove = i2c_powermac_remove, | 270 | .remove = __devexit_p(i2c_powermac_remove), |
271 | .driver = { | ||
272 | .name = "i2c-powermac", | ||
273 | .bus = &platform_bus_type, | ||
274 | }, | ||
273 | }; | 275 | }; |
274 | 276 | ||
275 | static int __init i2c_powermac_init(void) | 277 | static int __init i2c_powermac_init(void) |
276 | { | 278 | { |
277 | driver_register(&i2c_powermac_driver); | 279 | platform_driver_register(&i2c_powermac_driver); |
278 | return 0; | 280 | return 0; |
279 | } | 281 | } |
280 | 282 | ||
281 | 283 | ||
282 | static void __exit i2c_powermac_cleanup(void) | 284 | static void __exit i2c_powermac_cleanup(void) |
283 | { | 285 | { |
284 | driver_unregister(&i2c_powermac_driver); | 286 | platform_driver_unregister(&i2c_powermac_driver); |
285 | } | 287 | } |
286 | 288 | ||
287 | module_init(i2c_powermac_init); | 289 | module_init(i2c_powermac_init); |
diff --git a/drivers/ide/mips/swarm.c b/drivers/ide/mips/swarm.c index 66f6064f4640..09c9e7936b0d 100644 --- a/drivers/ide/mips/swarm.c +++ b/drivers/ide/mips/swarm.c | |||
@@ -4,6 +4,7 @@ | |||
4 | * Author: Manish Lachwani, mlachwani@mvista.com | 4 | * Author: Manish Lachwani, mlachwani@mvista.com |
5 | * Copyright (C) 2004 MIPS Technologies, Inc. All rights reserved. | 5 | * Copyright (C) 2004 MIPS Technologies, Inc. All rights reserved. |
6 | * Author: Maciej W. Rozycki <macro@mips.com> | 6 | * Author: Maciej W. Rozycki <macro@mips.com> |
7 | * Copyright (c) 2006 Maciej W. Rozycki | ||
7 | * | 8 | * |
8 | * This program is free software; you can redistribute it and/or | 9 | * This program is free software; you can redistribute it and/or |
9 | * modify it under the terms of the GNU General Public License | 10 | * modify it under the terms of the GNU General Public License |
@@ -127,6 +128,7 @@ static int __devinit swarm_ide_probe(struct device *dev) | |||
127 | memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports)); | 128 | memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports)); |
128 | hwif->irq = hwif->hw.irq; | 129 | hwif->irq = hwif->hw.irq; |
129 | 130 | ||
131 | probe_hwif_init(hwif); | ||
130 | dev_set_drvdata(dev, hwif); | 132 | dev_set_drvdata(dev, hwif); |
131 | 133 | ||
132 | return 0; | 134 | return 0; |
diff --git a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c index 3e7974c57443..8e7b83f84485 100644 --- a/drivers/ieee1394/nodemgr.c +++ b/drivers/ieee1394/nodemgr.c | |||
@@ -1614,7 +1614,7 @@ static int nodemgr_host_thread(void *__hi) | |||
1614 | { | 1614 | { |
1615 | struct host_info *hi = (struct host_info *)__hi; | 1615 | struct host_info *hi = (struct host_info *)__hi; |
1616 | struct hpsb_host *host = hi->host; | 1616 | struct hpsb_host *host = hi->host; |
1617 | unsigned int g, generation = get_hpsb_generation(host) - 1; | 1617 | unsigned int g, generation = 0; |
1618 | int i, reset_cycles = 0; | 1618 | int i, reset_cycles = 0; |
1619 | 1619 | ||
1620 | /* Setup our device-model entries */ | 1620 | /* Setup our device-model entries */ |
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c index f35fcc4c0638..25b1018a476c 100644 --- a/drivers/infiniband/core/cm.c +++ b/drivers/infiniband/core/cm.c | |||
@@ -75,6 +75,7 @@ static struct ib_cm { | |||
75 | struct rb_root remote_sidr_table; | 75 | struct rb_root remote_sidr_table; |
76 | struct idr local_id_table; | 76 | struct idr local_id_table; |
77 | __be32 random_id_operand; | 77 | __be32 random_id_operand; |
78 | struct list_head timewait_list; | ||
78 | struct workqueue_struct *wq; | 79 | struct workqueue_struct *wq; |
79 | } cm; | 80 | } cm; |
80 | 81 | ||
@@ -112,6 +113,7 @@ struct cm_work { | |||
112 | 113 | ||
113 | struct cm_timewait_info { | 114 | struct cm_timewait_info { |
114 | struct cm_work work; /* Must be first. */ | 115 | struct cm_work work; /* Must be first. */ |
116 | struct list_head list; | ||
115 | struct rb_node remote_qp_node; | 117 | struct rb_node remote_qp_node; |
116 | struct rb_node remote_id_node; | 118 | struct rb_node remote_id_node; |
117 | __be64 remote_ca_guid; | 119 | __be64 remote_ca_guid; |
@@ -647,13 +649,6 @@ static inline int cm_convert_to_ms(int iba_time) | |||
647 | 649 | ||
648 | static void cm_cleanup_timewait(struct cm_timewait_info *timewait_info) | 650 | static void cm_cleanup_timewait(struct cm_timewait_info *timewait_info) |
649 | { | 651 | { |
650 | unsigned long flags; | ||
651 | |||
652 | if (!timewait_info->inserted_remote_id && | ||
653 | !timewait_info->inserted_remote_qp) | ||
654 | return; | ||
655 | |||
656 | spin_lock_irqsave(&cm.lock, flags); | ||
657 | if (timewait_info->inserted_remote_id) { | 652 | if (timewait_info->inserted_remote_id) { |
658 | rb_erase(&timewait_info->remote_id_node, &cm.remote_id_table); | 653 | rb_erase(&timewait_info->remote_id_node, &cm.remote_id_table); |
659 | timewait_info->inserted_remote_id = 0; | 654 | timewait_info->inserted_remote_id = 0; |
@@ -663,7 +658,6 @@ static void cm_cleanup_timewait(struct cm_timewait_info *timewait_info) | |||
663 | rb_erase(&timewait_info->remote_qp_node, &cm.remote_qp_table); | 658 | rb_erase(&timewait_info->remote_qp_node, &cm.remote_qp_table); |
664 | timewait_info->inserted_remote_qp = 0; | 659 | timewait_info->inserted_remote_qp = 0; |
665 | } | 660 | } |
666 | spin_unlock_irqrestore(&cm.lock, flags); | ||
667 | } | 661 | } |
668 | 662 | ||
669 | static struct cm_timewait_info * cm_create_timewait_info(__be32 local_id) | 663 | static struct cm_timewait_info * cm_create_timewait_info(__be32 local_id) |
@@ -684,8 +678,12 @@ static struct cm_timewait_info * cm_create_timewait_info(__be32 local_id) | |||
684 | static void cm_enter_timewait(struct cm_id_private *cm_id_priv) | 678 | static void cm_enter_timewait(struct cm_id_private *cm_id_priv) |
685 | { | 679 | { |
686 | int wait_time; | 680 | int wait_time; |
681 | unsigned long flags; | ||
687 | 682 | ||
683 | spin_lock_irqsave(&cm.lock, flags); | ||
688 | cm_cleanup_timewait(cm_id_priv->timewait_info); | 684 | cm_cleanup_timewait(cm_id_priv->timewait_info); |
685 | list_add_tail(&cm_id_priv->timewait_info->list, &cm.timewait_list); | ||
686 | spin_unlock_irqrestore(&cm.lock, flags); | ||
689 | 687 | ||
690 | /* | 688 | /* |
691 | * The cm_id could be destroyed by the user before we exit timewait. | 689 | * The cm_id could be destroyed by the user before we exit timewait. |
@@ -701,9 +699,13 @@ static void cm_enter_timewait(struct cm_id_private *cm_id_priv) | |||
701 | 699 | ||
702 | static void cm_reset_to_idle(struct cm_id_private *cm_id_priv) | 700 | static void cm_reset_to_idle(struct cm_id_private *cm_id_priv) |
703 | { | 701 | { |
702 | unsigned long flags; | ||
703 | |||
704 | cm_id_priv->id.state = IB_CM_IDLE; | 704 | cm_id_priv->id.state = IB_CM_IDLE; |
705 | if (cm_id_priv->timewait_info) { | 705 | if (cm_id_priv->timewait_info) { |
706 | spin_lock_irqsave(&cm.lock, flags); | ||
706 | cm_cleanup_timewait(cm_id_priv->timewait_info); | 707 | cm_cleanup_timewait(cm_id_priv->timewait_info); |
708 | spin_unlock_irqrestore(&cm.lock, flags); | ||
707 | kfree(cm_id_priv->timewait_info); | 709 | kfree(cm_id_priv->timewait_info); |
708 | cm_id_priv->timewait_info = NULL; | 710 | cm_id_priv->timewait_info = NULL; |
709 | } | 711 | } |
@@ -1307,6 +1309,7 @@ static struct cm_id_private * cm_match_req(struct cm_work *work, | |||
1307 | if (timewait_info) { | 1309 | if (timewait_info) { |
1308 | cur_cm_id_priv = cm_get_id(timewait_info->work.local_id, | 1310 | cur_cm_id_priv = cm_get_id(timewait_info->work.local_id, |
1309 | timewait_info->work.remote_id); | 1311 | timewait_info->work.remote_id); |
1312 | cm_cleanup_timewait(cm_id_priv->timewait_info); | ||
1310 | spin_unlock_irqrestore(&cm.lock, flags); | 1313 | spin_unlock_irqrestore(&cm.lock, flags); |
1311 | if (cur_cm_id_priv) { | 1314 | if (cur_cm_id_priv) { |
1312 | cm_dup_req_handler(work, cur_cm_id_priv); | 1315 | cm_dup_req_handler(work, cur_cm_id_priv); |
@@ -1315,7 +1318,8 @@ static struct cm_id_private * cm_match_req(struct cm_work *work, | |||
1315 | cm_issue_rej(work->port, work->mad_recv_wc, | 1318 | cm_issue_rej(work->port, work->mad_recv_wc, |
1316 | IB_CM_REJ_STALE_CONN, CM_MSG_RESPONSE_REQ, | 1319 | IB_CM_REJ_STALE_CONN, CM_MSG_RESPONSE_REQ, |
1317 | NULL, 0); | 1320 | NULL, 0); |
1318 | goto error; | 1321 | listen_cm_id_priv = NULL; |
1322 | goto out; | ||
1319 | } | 1323 | } |
1320 | 1324 | ||
1321 | /* Find matching listen request. */ | 1325 | /* Find matching listen request. */ |
@@ -1323,21 +1327,20 @@ static struct cm_id_private * cm_match_req(struct cm_work *work, | |||
1323 | req_msg->service_id, | 1327 | req_msg->service_id, |
1324 | req_msg->private_data); | 1328 | req_msg->private_data); |
1325 | if (!listen_cm_id_priv) { | 1329 | if (!listen_cm_id_priv) { |
1330 | cm_cleanup_timewait(cm_id_priv->timewait_info); | ||
1326 | spin_unlock_irqrestore(&cm.lock, flags); | 1331 | spin_unlock_irqrestore(&cm.lock, flags); |
1327 | cm_issue_rej(work->port, work->mad_recv_wc, | 1332 | cm_issue_rej(work->port, work->mad_recv_wc, |
1328 | IB_CM_REJ_INVALID_SERVICE_ID, CM_MSG_RESPONSE_REQ, | 1333 | IB_CM_REJ_INVALID_SERVICE_ID, CM_MSG_RESPONSE_REQ, |
1329 | NULL, 0); | 1334 | NULL, 0); |
1330 | goto error; | 1335 | goto out; |
1331 | } | 1336 | } |
1332 | atomic_inc(&listen_cm_id_priv->refcount); | 1337 | atomic_inc(&listen_cm_id_priv->refcount); |
1333 | atomic_inc(&cm_id_priv->refcount); | 1338 | atomic_inc(&cm_id_priv->refcount); |
1334 | cm_id_priv->id.state = IB_CM_REQ_RCVD; | 1339 | cm_id_priv->id.state = IB_CM_REQ_RCVD; |
1335 | atomic_inc(&cm_id_priv->work_count); | 1340 | atomic_inc(&cm_id_priv->work_count); |
1336 | spin_unlock_irqrestore(&cm.lock, flags); | 1341 | spin_unlock_irqrestore(&cm.lock, flags); |
1342 | out: | ||
1337 | return listen_cm_id_priv; | 1343 | return listen_cm_id_priv; |
1338 | |||
1339 | error: cm_cleanup_timewait(cm_id_priv->timewait_info); | ||
1340 | return NULL; | ||
1341 | } | 1344 | } |
1342 | 1345 | ||
1343 | static int cm_req_handler(struct cm_work *work) | 1346 | static int cm_req_handler(struct cm_work *work) |
@@ -1899,6 +1902,32 @@ out: spin_unlock_irqrestore(&cm_id_priv->lock, flags); | |||
1899 | } | 1902 | } |
1900 | EXPORT_SYMBOL(ib_send_cm_drep); | 1903 | EXPORT_SYMBOL(ib_send_cm_drep); |
1901 | 1904 | ||
1905 | static int cm_issue_drep(struct cm_port *port, | ||
1906 | struct ib_mad_recv_wc *mad_recv_wc) | ||
1907 | { | ||
1908 | struct ib_mad_send_buf *msg = NULL; | ||
1909 | struct cm_dreq_msg *dreq_msg; | ||
1910 | struct cm_drep_msg *drep_msg; | ||
1911 | int ret; | ||
1912 | |||
1913 | ret = cm_alloc_response_msg(port, mad_recv_wc, &msg); | ||
1914 | if (ret) | ||
1915 | return ret; | ||
1916 | |||
1917 | dreq_msg = (struct cm_dreq_msg *) mad_recv_wc->recv_buf.mad; | ||
1918 | drep_msg = (struct cm_drep_msg *) msg->mad; | ||
1919 | |||
1920 | cm_format_mad_hdr(&drep_msg->hdr, CM_DREP_ATTR_ID, dreq_msg->hdr.tid); | ||
1921 | drep_msg->remote_comm_id = dreq_msg->local_comm_id; | ||
1922 | drep_msg->local_comm_id = dreq_msg->remote_comm_id; | ||
1923 | |||
1924 | ret = ib_post_send_mad(msg, NULL); | ||
1925 | if (ret) | ||
1926 | cm_free_msg(msg); | ||
1927 | |||
1928 | return ret; | ||
1929 | } | ||
1930 | |||
1902 | static int cm_dreq_handler(struct cm_work *work) | 1931 | static int cm_dreq_handler(struct cm_work *work) |
1903 | { | 1932 | { |
1904 | struct cm_id_private *cm_id_priv; | 1933 | struct cm_id_private *cm_id_priv; |
@@ -1910,8 +1939,10 @@ static int cm_dreq_handler(struct cm_work *work) | |||
1910 | dreq_msg = (struct cm_dreq_msg *)work->mad_recv_wc->recv_buf.mad; | 1939 | dreq_msg = (struct cm_dreq_msg *)work->mad_recv_wc->recv_buf.mad; |
1911 | cm_id_priv = cm_acquire_id(dreq_msg->remote_comm_id, | 1940 | cm_id_priv = cm_acquire_id(dreq_msg->remote_comm_id, |
1912 | dreq_msg->local_comm_id); | 1941 | dreq_msg->local_comm_id); |
1913 | if (!cm_id_priv) | 1942 | if (!cm_id_priv) { |
1943 | cm_issue_drep(work->port, work->mad_recv_wc); | ||
1914 | return -EINVAL; | 1944 | return -EINVAL; |
1945 | } | ||
1915 | 1946 | ||
1916 | work->cm_event.private_data = &dreq_msg->private_data; | 1947 | work->cm_event.private_data = &dreq_msg->private_data; |
1917 | 1948 | ||
@@ -2601,28 +2632,29 @@ static int cm_timewait_handler(struct cm_work *work) | |||
2601 | { | 2632 | { |
2602 | struct cm_timewait_info *timewait_info; | 2633 | struct cm_timewait_info *timewait_info; |
2603 | struct cm_id_private *cm_id_priv; | 2634 | struct cm_id_private *cm_id_priv; |
2604 | unsigned long flags; | ||
2605 | int ret; | 2635 | int ret; |
2606 | 2636 | ||
2607 | timewait_info = (struct cm_timewait_info *)work; | 2637 | timewait_info = (struct cm_timewait_info *)work; |
2608 | cm_cleanup_timewait(timewait_info); | 2638 | spin_lock_irq(&cm.lock); |
2639 | list_del(&timewait_info->list); | ||
2640 | spin_unlock_irq(&cm.lock); | ||
2609 | 2641 | ||
2610 | cm_id_priv = cm_acquire_id(timewait_info->work.local_id, | 2642 | cm_id_priv = cm_acquire_id(timewait_info->work.local_id, |
2611 | timewait_info->work.remote_id); | 2643 | timewait_info->work.remote_id); |
2612 | if (!cm_id_priv) | 2644 | if (!cm_id_priv) |
2613 | return -EINVAL; | 2645 | return -EINVAL; |
2614 | 2646 | ||
2615 | spin_lock_irqsave(&cm_id_priv->lock, flags); | 2647 | spin_lock_irq(&cm_id_priv->lock); |
2616 | if (cm_id_priv->id.state != IB_CM_TIMEWAIT || | 2648 | if (cm_id_priv->id.state != IB_CM_TIMEWAIT || |
2617 | cm_id_priv->remote_qpn != timewait_info->remote_qpn) { | 2649 | cm_id_priv->remote_qpn != timewait_info->remote_qpn) { |
2618 | spin_unlock_irqrestore(&cm_id_priv->lock, flags); | 2650 | spin_unlock_irq(&cm_id_priv->lock); |
2619 | goto out; | 2651 | goto out; |
2620 | } | 2652 | } |
2621 | cm_id_priv->id.state = IB_CM_IDLE; | 2653 | cm_id_priv->id.state = IB_CM_IDLE; |
2622 | ret = atomic_inc_and_test(&cm_id_priv->work_count); | 2654 | ret = atomic_inc_and_test(&cm_id_priv->work_count); |
2623 | if (!ret) | 2655 | if (!ret) |
2624 | list_add_tail(&work->list, &cm_id_priv->work_list); | 2656 | list_add_tail(&work->list, &cm_id_priv->work_list); |
2625 | spin_unlock_irqrestore(&cm_id_priv->lock, flags); | 2657 | spin_unlock_irq(&cm_id_priv->lock); |
2626 | 2658 | ||
2627 | if (ret) | 2659 | if (ret) |
2628 | cm_process_work(cm_id_priv, work); | 2660 | cm_process_work(cm_id_priv, work); |
@@ -3374,6 +3406,7 @@ static int __init ib_cm_init(void) | |||
3374 | idr_init(&cm.local_id_table); | 3406 | idr_init(&cm.local_id_table); |
3375 | get_random_bytes(&cm.random_id_operand, sizeof cm.random_id_operand); | 3407 | get_random_bytes(&cm.random_id_operand, sizeof cm.random_id_operand); |
3376 | idr_pre_get(&cm.local_id_table, GFP_KERNEL); | 3408 | idr_pre_get(&cm.local_id_table, GFP_KERNEL); |
3409 | INIT_LIST_HEAD(&cm.timewait_list); | ||
3377 | 3410 | ||
3378 | cm.wq = create_workqueue("ib_cm"); | 3411 | cm.wq = create_workqueue("ib_cm"); |
3379 | if (!cm.wq) | 3412 | if (!cm.wq) |
@@ -3391,7 +3424,20 @@ error: | |||
3391 | 3424 | ||
3392 | static void __exit ib_cm_cleanup(void) | 3425 | static void __exit ib_cm_cleanup(void) |
3393 | { | 3426 | { |
3427 | struct cm_timewait_info *timewait_info, *tmp; | ||
3428 | |||
3429 | spin_lock_irq(&cm.lock); | ||
3430 | list_for_each_entry(timewait_info, &cm.timewait_list, list) | ||
3431 | cancel_delayed_work(&timewait_info->work.work); | ||
3432 | spin_unlock_irq(&cm.lock); | ||
3433 | |||
3394 | destroy_workqueue(cm.wq); | 3434 | destroy_workqueue(cm.wq); |
3435 | |||
3436 | list_for_each_entry_safe(timewait_info, tmp, &cm.timewait_list, list) { | ||
3437 | list_del(&timewait_info->list); | ||
3438 | kfree(timewait_info); | ||
3439 | } | ||
3440 | |||
3395 | ib_unregister_client(&cm_client); | 3441 | ib_unregister_client(&cm_client); |
3396 | idr_destroy(&cm.local_id_table); | 3442 | idr_destroy(&cm.local_id_table); |
3397 | } | 3443 | } |
diff --git a/drivers/infiniband/hw/amso1100/c2_ae.c b/drivers/infiniband/hw/amso1100/c2_ae.c index 3aae4978e1cb..a31439bd3b67 100644 --- a/drivers/infiniband/hw/amso1100/c2_ae.c +++ b/drivers/infiniband/hw/amso1100/c2_ae.c | |||
@@ -66,7 +66,6 @@ static int c2_convert_cm_status(u32 c2_status) | |||
66 | } | 66 | } |
67 | } | 67 | } |
68 | 68 | ||
69 | #ifdef DEBUG | ||
70 | static const char* to_event_str(int event) | 69 | static const char* to_event_str(int event) |
71 | { | 70 | { |
72 | static const char* event_str[] = { | 71 | static const char* event_str[] = { |
@@ -144,7 +143,6 @@ static const char *to_qp_state_str(int state) | |||
144 | return "<invalid QP state>"; | 143 | return "<invalid QP state>"; |
145 | }; | 144 | }; |
146 | } | 145 | } |
147 | #endif | ||
148 | 146 | ||
149 | void c2_ae_event(struct c2_dev *c2dev, u32 mq_index) | 147 | void c2_ae_event(struct c2_dev *c2dev, u32 mq_index) |
150 | { | 148 | { |
diff --git a/drivers/infiniband/hw/amso1100/c2_qp.c b/drivers/infiniband/hw/amso1100/c2_qp.c index 12261132b077..5bcf697aa335 100644 --- a/drivers/infiniband/hw/amso1100/c2_qp.c +++ b/drivers/infiniband/hw/amso1100/c2_qp.c | |||
@@ -35,6 +35,8 @@ | |||
35 | * | 35 | * |
36 | */ | 36 | */ |
37 | 37 | ||
38 | #include <linux/delay.h> | ||
39 | |||
38 | #include "c2.h" | 40 | #include "c2.h" |
39 | #include "c2_vq.h" | 41 | #include "c2_vq.h" |
40 | #include "c2_status.h" | 42 | #include "c2_status.h" |
@@ -705,10 +707,8 @@ static inline void c2_activity(struct c2_dev *c2dev, u32 mq_index, u16 shared) | |||
705 | * cannot get on the bus and the card and system hang in a | 707 | * cannot get on the bus and the card and system hang in a |
706 | * deadlock -- thus the need for this code. [TOT] | 708 | * deadlock -- thus the need for this code. [TOT] |
707 | */ | 709 | */ |
708 | while (readl(c2dev->regs + PCI_BAR0_ADAPTER_HINT) & 0x80000000) { | 710 | while (readl(c2dev->regs + PCI_BAR0_ADAPTER_HINT) & 0x80000000) |
709 | set_current_state(TASK_UNINTERRUPTIBLE); | 711 | udelay(10); |
710 | schedule_timeout(0); | ||
711 | } | ||
712 | 712 | ||
713 | __raw_writel(C2_HINT_MAKE(mq_index, shared), | 713 | __raw_writel(C2_HINT_MAKE(mq_index, shared), |
714 | c2dev->regs + PCI_BAR0_ADAPTER_HINT); | 714 | c2dev->regs + PCI_BAR0_ADAPTER_HINT); |
@@ -766,6 +766,7 @@ int c2_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr, | |||
766 | struct c2_dev *c2dev = to_c2dev(ibqp->device); | 766 | struct c2_dev *c2dev = to_c2dev(ibqp->device); |
767 | struct c2_qp *qp = to_c2qp(ibqp); | 767 | struct c2_qp *qp = to_c2qp(ibqp); |
768 | union c2wr wr; | 768 | union c2wr wr; |
769 | unsigned long lock_flags; | ||
769 | int err = 0; | 770 | int err = 0; |
770 | 771 | ||
771 | u32 flags; | 772 | u32 flags; |
@@ -881,8 +882,10 @@ int c2_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr, | |||
881 | /* | 882 | /* |
882 | * Post the puppy! | 883 | * Post the puppy! |
883 | */ | 884 | */ |
885 | spin_lock_irqsave(&qp->lock, lock_flags); | ||
884 | err = qp_wr_post(&qp->sq_mq, &wr, qp, msg_size); | 886 | err = qp_wr_post(&qp->sq_mq, &wr, qp, msg_size); |
885 | if (err) { | 887 | if (err) { |
888 | spin_unlock_irqrestore(&qp->lock, lock_flags); | ||
886 | break; | 889 | break; |
887 | } | 890 | } |
888 | 891 | ||
@@ -890,6 +893,7 @@ int c2_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr, | |||
890 | * Enqueue mq index to activity FIFO. | 893 | * Enqueue mq index to activity FIFO. |
891 | */ | 894 | */ |
892 | c2_activity(c2dev, qp->sq_mq.index, qp->sq_mq.hint_count); | 895 | c2_activity(c2dev, qp->sq_mq.index, qp->sq_mq.hint_count); |
896 | spin_unlock_irqrestore(&qp->lock, lock_flags); | ||
893 | 897 | ||
894 | ib_wr = ib_wr->next; | 898 | ib_wr = ib_wr->next; |
895 | } | 899 | } |
@@ -905,6 +909,7 @@ int c2_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr, | |||
905 | struct c2_dev *c2dev = to_c2dev(ibqp->device); | 909 | struct c2_dev *c2dev = to_c2dev(ibqp->device); |
906 | struct c2_qp *qp = to_c2qp(ibqp); | 910 | struct c2_qp *qp = to_c2qp(ibqp); |
907 | union c2wr wr; | 911 | union c2wr wr; |
912 | unsigned long lock_flags; | ||
908 | int err = 0; | 913 | int err = 0; |
909 | 914 | ||
910 | if (qp->state > IB_QPS_RTS) | 915 | if (qp->state > IB_QPS_RTS) |
@@ -945,8 +950,10 @@ int c2_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr, | |||
945 | break; | 950 | break; |
946 | } | 951 | } |
947 | 952 | ||
953 | spin_lock_irqsave(&qp->lock, lock_flags); | ||
948 | err = qp_wr_post(&qp->rq_mq, &wr, qp, qp->rq_mq.msg_size); | 954 | err = qp_wr_post(&qp->rq_mq, &wr, qp, qp->rq_mq.msg_size); |
949 | if (err) { | 955 | if (err) { |
956 | spin_unlock_irqrestore(&qp->lock, lock_flags); | ||
950 | break; | 957 | break; |
951 | } | 958 | } |
952 | 959 | ||
@@ -954,6 +961,7 @@ int c2_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr, | |||
954 | * Enqueue mq index to activity FIFO | 961 | * Enqueue mq index to activity FIFO |
955 | */ | 962 | */ |
956 | c2_activity(c2dev, qp->rq_mq.index, qp->rq_mq.hint_count); | 963 | c2_activity(c2dev, qp->rq_mq.index, qp->rq_mq.hint_count); |
964 | spin_unlock_irqrestore(&qp->lock, lock_flags); | ||
957 | 965 | ||
958 | ib_wr = ib_wr->next; | 966 | ib_wr = ib_wr->next; |
959 | } | 967 | } |
diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c index 981fe2eebdfa..fc67f780581b 100644 --- a/drivers/infiniband/hw/mthca/mthca_provider.c +++ b/drivers/infiniband/hw/mthca/mthca_provider.c | |||
@@ -179,6 +179,8 @@ static int mthca_query_port(struct ib_device *ibdev, | |||
179 | props->max_mtu = out_mad->data[41] & 0xf; | 179 | props->max_mtu = out_mad->data[41] & 0xf; |
180 | props->active_mtu = out_mad->data[36] >> 4; | 180 | props->active_mtu = out_mad->data[36] >> 4; |
181 | props->subnet_timeout = out_mad->data[51] & 0x1f; | 181 | props->subnet_timeout = out_mad->data[51] & 0x1f; |
182 | props->max_vl_num = out_mad->data[37] >> 4; | ||
183 | props->init_type_reply = out_mad->data[41] >> 4; | ||
182 | 184 | ||
183 | out: | 185 | out: |
184 | kfree(in_mad); | 186 | kfree(in_mad); |
diff --git a/drivers/infiniband/hw/mthca/mthca_srq.c b/drivers/infiniband/hw/mthca/mthca_srq.c index 0f316c87bf64..92a72f521528 100644 --- a/drivers/infiniband/hw/mthca/mthca_srq.c +++ b/drivers/infiniband/hw/mthca/mthca_srq.c | |||
@@ -201,6 +201,8 @@ int mthca_alloc_srq(struct mthca_dev *dev, struct mthca_pd *pd, | |||
201 | 201 | ||
202 | if (mthca_is_memfree(dev)) | 202 | if (mthca_is_memfree(dev)) |
203 | srq->max = roundup_pow_of_two(srq->max + 1); | 203 | srq->max = roundup_pow_of_two(srq->max + 1); |
204 | else | ||
205 | srq->max = srq->max + 1; | ||
204 | 206 | ||
205 | ds = max(64UL, | 207 | ds = max(64UL, |
206 | roundup_pow_of_two(sizeof (struct mthca_next_seg) + | 208 | roundup_pow_of_two(sizeof (struct mthca_next_seg) + |
@@ -277,7 +279,7 @@ int mthca_alloc_srq(struct mthca_dev *dev, struct mthca_pd *pd, | |||
277 | srq->first_free = 0; | 279 | srq->first_free = 0; |
278 | srq->last_free = srq->max - 1; | 280 | srq->last_free = srq->max - 1; |
279 | 281 | ||
280 | attr->max_wr = (mthca_is_memfree(dev)) ? srq->max - 1 : srq->max; | 282 | attr->max_wr = srq->max - 1; |
281 | attr->max_sge = srq->max_gs; | 283 | attr->max_sge = srq->max_gs; |
282 | 284 | ||
283 | return 0; | 285 | return 0; |
@@ -413,7 +415,7 @@ int mthca_query_srq(struct ib_srq *ibsrq, struct ib_srq_attr *srq_attr) | |||
413 | srq_attr->srq_limit = be16_to_cpu(tavor_ctx->limit_watermark); | 415 | srq_attr->srq_limit = be16_to_cpu(tavor_ctx->limit_watermark); |
414 | } | 416 | } |
415 | 417 | ||
416 | srq_attr->max_wr = (mthca_is_memfree(dev)) ? srq->max - 1 : srq->max; | 418 | srq_attr->max_wr = srq->max - 1; |
417 | srq_attr->max_sge = srq->max_gs; | 419 | srq_attr->max_sge = srq->max_gs; |
418 | 420 | ||
419 | out: | 421 | out: |
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c index f426a69d9a43..8bf5e9ec7c95 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c | |||
@@ -355,6 +355,11 @@ void ipoib_send(struct net_device *dev, struct sk_buff *skb, | |||
355 | tx_req->skb = skb; | 355 | tx_req->skb = skb; |
356 | addr = dma_map_single(priv->ca->dma_device, skb->data, skb->len, | 356 | addr = dma_map_single(priv->ca->dma_device, skb->data, skb->len, |
357 | DMA_TO_DEVICE); | 357 | DMA_TO_DEVICE); |
358 | if (unlikely(dma_mapping_error(addr))) { | ||
359 | ++priv->stats.tx_errors; | ||
360 | dev_kfree_skb_any(skb); | ||
361 | return; | ||
362 | } | ||
358 | pci_unmap_addr_set(tx_req, mapping, addr); | 363 | pci_unmap_addr_set(tx_req, mapping, addr); |
359 | 364 | ||
360 | if (unlikely(post_send(priv, priv->tx_head & (ipoib_sendq_size - 1), | 365 | if (unlikely(post_send(priv, priv->tx_head & (ipoib_sendq_size - 1), |
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index 44b9e5be6687..4b09147f438f 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c | |||
@@ -343,29 +343,32 @@ static int srp_send_req(struct srp_target_port *target) | |||
343 | */ | 343 | */ |
344 | if (target->io_class == SRP_REV10_IB_IO_CLASS) { | 344 | if (target->io_class == SRP_REV10_IB_IO_CLASS) { |
345 | memcpy(req->priv.initiator_port_id, | 345 | memcpy(req->priv.initiator_port_id, |
346 | target->srp_host->initiator_port_id + 8, 8); | 346 | &target->path.sgid.global.interface_id, 8); |
347 | memcpy(req->priv.initiator_port_id + 8, | 347 | memcpy(req->priv.initiator_port_id + 8, |
348 | target->srp_host->initiator_port_id, 8); | 348 | &target->initiator_ext, 8); |
349 | memcpy(req->priv.target_port_id, &target->ioc_guid, 8); | 349 | memcpy(req->priv.target_port_id, &target->ioc_guid, 8); |
350 | memcpy(req->priv.target_port_id + 8, &target->id_ext, 8); | 350 | memcpy(req->priv.target_port_id + 8, &target->id_ext, 8); |
351 | } else { | 351 | } else { |
352 | memcpy(req->priv.initiator_port_id, | 352 | memcpy(req->priv.initiator_port_id, |
353 | target->srp_host->initiator_port_id, 16); | 353 | &target->initiator_ext, 8); |
354 | memcpy(req->priv.initiator_port_id + 8, | ||
355 | &target->path.sgid.global.interface_id, 8); | ||
354 | memcpy(req->priv.target_port_id, &target->id_ext, 8); | 356 | memcpy(req->priv.target_port_id, &target->id_ext, 8); |
355 | memcpy(req->priv.target_port_id + 8, &target->ioc_guid, 8); | 357 | memcpy(req->priv.target_port_id + 8, &target->ioc_guid, 8); |
356 | } | 358 | } |
357 | 359 | ||
358 | /* | 360 | /* |
359 | * Topspin/Cisco SRP targets will reject our login unless we | 361 | * Topspin/Cisco SRP targets will reject our login unless we |
360 | * zero out the first 8 bytes of our initiator port ID. The | 362 | * zero out the first 8 bytes of our initiator port ID and set |
361 | * second 8 bytes must be our local node GUID, but we always | 363 | * the second 8 bytes to the local node GUID. |
362 | * use that anyway. | ||
363 | */ | 364 | */ |
364 | if (topspin_workarounds && !memcmp(&target->ioc_guid, topspin_oui, 3)) { | 365 | if (topspin_workarounds && !memcmp(&target->ioc_guid, topspin_oui, 3)) { |
365 | printk(KERN_DEBUG PFX "Topspin/Cisco initiator port ID workaround " | 366 | printk(KERN_DEBUG PFX "Topspin/Cisco initiator port ID workaround " |
366 | "activated for target GUID %016llx\n", | 367 | "activated for target GUID %016llx\n", |
367 | (unsigned long long) be64_to_cpu(target->ioc_guid)); | 368 | (unsigned long long) be64_to_cpu(target->ioc_guid)); |
368 | memset(req->priv.initiator_port_id, 0, 8); | 369 | memset(req->priv.initiator_port_id, 0, 8); |
370 | memcpy(req->priv.initiator_port_id + 8, | ||
371 | &target->srp_host->dev->dev->node_guid, 8); | ||
369 | } | 372 | } |
370 | 373 | ||
371 | status = ib_send_cm_req(target->cm_id, &req->param); | 374 | status = ib_send_cm_req(target->cm_id, &req->param); |
@@ -1553,6 +1556,7 @@ enum { | |||
1553 | SRP_OPT_MAX_SECT = 1 << 5, | 1556 | SRP_OPT_MAX_SECT = 1 << 5, |
1554 | SRP_OPT_MAX_CMD_PER_LUN = 1 << 6, | 1557 | SRP_OPT_MAX_CMD_PER_LUN = 1 << 6, |
1555 | SRP_OPT_IO_CLASS = 1 << 7, | 1558 | SRP_OPT_IO_CLASS = 1 << 7, |
1559 | SRP_OPT_INITIATOR_EXT = 1 << 8, | ||
1556 | SRP_OPT_ALL = (SRP_OPT_ID_EXT | | 1560 | SRP_OPT_ALL = (SRP_OPT_ID_EXT | |
1557 | SRP_OPT_IOC_GUID | | 1561 | SRP_OPT_IOC_GUID | |
1558 | SRP_OPT_DGID | | 1562 | SRP_OPT_DGID | |
@@ -1569,6 +1573,7 @@ static match_table_t srp_opt_tokens = { | |||
1569 | { SRP_OPT_MAX_SECT, "max_sect=%d" }, | 1573 | { SRP_OPT_MAX_SECT, "max_sect=%d" }, |
1570 | { SRP_OPT_MAX_CMD_PER_LUN, "max_cmd_per_lun=%d" }, | 1574 | { SRP_OPT_MAX_CMD_PER_LUN, "max_cmd_per_lun=%d" }, |
1571 | { SRP_OPT_IO_CLASS, "io_class=%x" }, | 1575 | { SRP_OPT_IO_CLASS, "io_class=%x" }, |
1576 | { SRP_OPT_INITIATOR_EXT, "initiator_ext=%s" }, | ||
1572 | { SRP_OPT_ERR, NULL } | 1577 | { SRP_OPT_ERR, NULL } |
1573 | }; | 1578 | }; |
1574 | 1579 | ||
@@ -1668,6 +1673,12 @@ static int srp_parse_options(const char *buf, struct srp_target_port *target) | |||
1668 | target->io_class = token; | 1673 | target->io_class = token; |
1669 | break; | 1674 | break; |
1670 | 1675 | ||
1676 | case SRP_OPT_INITIATOR_EXT: | ||
1677 | p = match_strdup(args); | ||
1678 | target->initiator_ext = cpu_to_be64(simple_strtoull(p, NULL, 16)); | ||
1679 | kfree(p); | ||
1680 | break; | ||
1681 | |||
1671 | default: | 1682 | default: |
1672 | printk(KERN_WARNING PFX "unknown parameter or missing value " | 1683 | printk(KERN_WARNING PFX "unknown parameter or missing value " |
1673 | "'%s' in target creation request\n", p); | 1684 | "'%s' in target creation request\n", p); |
@@ -1708,7 +1719,6 @@ static ssize_t srp_create_target(struct class_device *class_dev, | |||
1708 | target_host->max_lun = SRP_MAX_LUN; | 1719 | target_host->max_lun = SRP_MAX_LUN; |
1709 | 1720 | ||
1710 | target = host_to_target(target_host); | 1721 | target = host_to_target(target_host); |
1711 | memset(target, 0, sizeof *target); | ||
1712 | 1722 | ||
1713 | target->io_class = SRP_REV16A_IB_IO_CLASS; | 1723 | target->io_class = SRP_REV16A_IB_IO_CLASS; |
1714 | target->scsi_host = target_host; | 1724 | target->scsi_host = target_host; |
@@ -1815,9 +1825,6 @@ static struct srp_host *srp_add_port(struct srp_device *device, u8 port) | |||
1815 | host->dev = device; | 1825 | host->dev = device; |
1816 | host->port = port; | 1826 | host->port = port; |
1817 | 1827 | ||
1818 | host->initiator_port_id[7] = port; | ||
1819 | memcpy(host->initiator_port_id + 8, &device->dev->node_guid, 8); | ||
1820 | |||
1821 | host->class_dev.class = &srp_class; | 1828 | host->class_dev.class = &srp_class; |
1822 | host->class_dev.dev = device->dev->dma_device; | 1829 | host->class_dev.dev = device->dev->dma_device; |
1823 | snprintf(host->class_dev.class_id, BUS_ID_SIZE, "srp-%s-%d", | 1830 | snprintf(host->class_dev.class_id, BUS_ID_SIZE, "srp-%s-%d", |
diff --git a/drivers/infiniband/ulp/srp/ib_srp.h b/drivers/infiniband/ulp/srp/ib_srp.h index 5b581fb8eb0d..d4e35ef51374 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.h +++ b/drivers/infiniband/ulp/srp/ib_srp.h | |||
@@ -91,7 +91,6 @@ struct srp_device { | |||
91 | }; | 91 | }; |
92 | 92 | ||
93 | struct srp_host { | 93 | struct srp_host { |
94 | u8 initiator_port_id[16]; | ||
95 | struct srp_device *dev; | 94 | struct srp_device *dev; |
96 | u8 port; | 95 | u8 port; |
97 | struct class_device class_dev; | 96 | struct class_device class_dev; |
@@ -122,6 +121,7 @@ struct srp_target_port { | |||
122 | __be64 id_ext; | 121 | __be64 id_ext; |
123 | __be64 ioc_guid; | 122 | __be64 ioc_guid; |
124 | __be64 service_id; | 123 | __be64 service_id; |
124 | __be64 initiator_ext; | ||
125 | u16 io_class; | 125 | u16 io_class; |
126 | struct srp_host *srp_host; | 126 | struct srp_host *srp_host; |
127 | struct Scsi_Host *scsi_host; | 127 | struct Scsi_Host *scsi_host; |
diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig index 679bde34d247..81a333f73010 100644 --- a/drivers/input/keyboard/Kconfig +++ b/drivers/input/keyboard/Kconfig | |||
@@ -166,7 +166,7 @@ config KEYBOARD_AMIGA | |||
166 | 166 | ||
167 | config KEYBOARD_HIL_OLD | 167 | config KEYBOARD_HIL_OLD |
168 | tristate "HP HIL keyboard support (simple driver)" | 168 | tristate "HP HIL keyboard support (simple driver)" |
169 | depends on GSC | 169 | depends on GSC || HP300 |
170 | default y | 170 | default y |
171 | help | 171 | help |
172 | The "Human Interface Loop" is a older, 8-channel USB-like | 172 | The "Human Interface Loop" is a older, 8-channel USB-like |
@@ -183,7 +183,7 @@ config KEYBOARD_HIL_OLD | |||
183 | 183 | ||
184 | config KEYBOARD_HIL | 184 | config KEYBOARD_HIL |
185 | tristate "HP HIL keyboard support" | 185 | tristate "HP HIL keyboard support" |
186 | depends on GSC | 186 | depends on GSC || HP300 |
187 | default y | 187 | default y |
188 | select HP_SDC | 188 | select HP_SDC |
189 | select HIL_MLC | 189 | select HIL_MLC |
diff --git a/drivers/input/keyboard/hil_kbd.c b/drivers/input/keyboard/hil_kbd.c index c9b0b8978cd8..e774dd31e99b 100644 --- a/drivers/input/keyboard/hil_kbd.c +++ b/drivers/input/keyboard/hil_kbd.c | |||
@@ -328,7 +328,7 @@ static int hil_kbd_connect(struct serio *serio, struct serio_driver *drv) | |||
328 | kbd->dev->id.vendor = PCI_VENDOR_ID_HP; | 328 | kbd->dev->id.vendor = PCI_VENDOR_ID_HP; |
329 | kbd->dev->id.product = 0x0001; /* TODO: get from kbd->rsc */ | 329 | kbd->dev->id.product = 0x0001; /* TODO: get from kbd->rsc */ |
330 | kbd->dev->id.version = 0x0100; /* TODO: get from kbd->rsc */ | 330 | kbd->dev->id.version = 0x0100; /* TODO: get from kbd->rsc */ |
331 | kbd->dev->dev = &serio->dev; | 331 | kbd->dev->cdev.dev = &serio->dev; |
332 | 332 | ||
333 | for (i = 0; i < 128; i++) { | 333 | for (i = 0; i < 128; i++) { |
334 | set_bit(hil_kbd_set1[i], kbd->dev->keybit); | 334 | set_bit(hil_kbd_set1[i], kbd->dev->keybit); |
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index a6dfc7455733..ba0e88c64e1e 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig | |||
@@ -73,7 +73,7 @@ config INPUT_UINPUT | |||
73 | 73 | ||
74 | config HP_SDC_RTC | 74 | config HP_SDC_RTC |
75 | tristate "HP SDC Real Time Clock" | 75 | tristate "HP SDC Real Time Clock" |
76 | depends on GSC | 76 | depends on GSC || HP300 |
77 | select HP_SDC | 77 | select HP_SDC |
78 | help | 78 | help |
79 | Say Y here if you want to support the built-in real time clock | 79 | Say Y here if you want to support the built-in real time clock |
diff --git a/drivers/input/mouse/Kconfig b/drivers/input/mouse/Kconfig index f15ccf781688..35d998c3e578 100644 --- a/drivers/input/mouse/Kconfig +++ b/drivers/input/mouse/Kconfig | |||
@@ -119,7 +119,7 @@ config MOUSE_VSXXXAA | |||
119 | 119 | ||
120 | config MOUSE_HIL | 120 | config MOUSE_HIL |
121 | tristate "HIL pointers (mice etc)." | 121 | tristate "HIL pointers (mice etc)." |
122 | depends on GSC | 122 | depends on GSC || HP300 |
123 | select HP_SDC | 123 | select HP_SDC |
124 | select HIL_MLC | 124 | select HIL_MLC |
125 | help | 125 | help |
diff --git a/drivers/input/mouse/hil_ptr.c b/drivers/input/mouse/hil_ptr.c index 402b057e986e..4f2b503c1ac7 100644 --- a/drivers/input/mouse/hil_ptr.c +++ b/drivers/input/mouse/hil_ptr.c | |||
@@ -375,7 +375,7 @@ static int hil_ptr_connect(struct serio *serio, struct serio_driver *driver) | |||
375 | ptr->dev->id.vendor = PCI_VENDOR_ID_HP; | 375 | ptr->dev->id.vendor = PCI_VENDOR_ID_HP; |
376 | ptr->dev->id.product = 0x0001; /* TODO: get from ptr->rsc */ | 376 | ptr->dev->id.product = 0x0001; /* TODO: get from ptr->rsc */ |
377 | ptr->dev->id.version = 0x0100; /* TODO: get from ptr->rsc */ | 377 | ptr->dev->id.version = 0x0100; /* TODO: get from ptr->rsc */ |
378 | ptr->dev->dev = &serio->dev; | 378 | ptr->dev->cdev.dev = &serio->dev; |
379 | 379 | ||
380 | input_register_device(ptr->dev); | 380 | input_register_device(ptr->dev); |
381 | printk(KERN_INFO "input: %s (%s), ID: %d\n", | 381 | printk(KERN_INFO "input: %s (%s), ID: %d\n", |
diff --git a/drivers/input/serio/Kconfig b/drivers/input/serio/Kconfig index 8cdbfeca5903..adef447f23ea 100644 --- a/drivers/input/serio/Kconfig +++ b/drivers/input/serio/Kconfig | |||
@@ -112,7 +112,7 @@ config SERIO_GSCPS2 | |||
112 | 112 | ||
113 | config HP_SDC | 113 | config HP_SDC |
114 | tristate "HP System Device Controller i8042 Support" | 114 | tristate "HP System Device Controller i8042 Support" |
115 | depends on GSC && SERIO | 115 | depends on (GSC || HP300) && SERIO |
116 | default y | 116 | default y |
117 | ---help--- | 117 | ---help--- |
118 | This option enables support for the "System Device | 118 | This option enables support for the "System Device |
diff --git a/drivers/input/serio/gscps2.c b/drivers/input/serio/gscps2.c index 081fdc3c7737..74f14e097789 100644 --- a/drivers/input/serio/gscps2.c +++ b/drivers/input/serio/gscps2.c | |||
@@ -166,7 +166,7 @@ static inline int gscps2_writeb_output(struct gscps2port *ps2port, u8 data) | |||
166 | 166 | ||
167 | /* make sure any received data is returned as fast as possible */ | 167 | /* make sure any received data is returned as fast as possible */ |
168 | /* this is important e.g. when we set the LEDs on the keyboard */ | 168 | /* this is important e.g. when we set the LEDs on the keyboard */ |
169 | gscps2_interrupt(0, NULL, NULL); | 169 | gscps2_interrupt(0, NULL); |
170 | 170 | ||
171 | return 1; | 171 | return 1; |
172 | } | 172 | } |
@@ -306,7 +306,7 @@ static int gscps2_open(struct serio *port) | |||
306 | /* enable it */ | 306 | /* enable it */ |
307 | gscps2_enable(ps2port, ENABLE); | 307 | gscps2_enable(ps2port, ENABLE); |
308 | 308 | ||
309 | gscps2_interrupt(0, NULL, NULL); | 309 | gscps2_interrupt(0, NULL); |
310 | 310 | ||
311 | return 0; | 311 | return 0; |
312 | } | 312 | } |
diff --git a/drivers/input/serio/hil_mlc.c b/drivers/input/serio/hil_mlc.c index bbbe15e21904..bdfde046b741 100644 --- a/drivers/input/serio/hil_mlc.c +++ b/drivers/input/serio/hil_mlc.c | |||
@@ -162,10 +162,10 @@ static void hil_mlc_send_polls(hil_mlc *mlc) { | |||
162 | if (did != (p & HIL_PKT_ADDR_MASK) >> 8) { | 162 | if (did != (p & HIL_PKT_ADDR_MASK) >> 8) { |
163 | if (drv == NULL || drv->interrupt == NULL) goto skip; | 163 | if (drv == NULL || drv->interrupt == NULL) goto skip; |
164 | 164 | ||
165 | drv->interrupt(serio, 0, 0, NULL); | 165 | drv->interrupt(serio, 0, 0); |
166 | drv->interrupt(serio, HIL_ERR_INT >> 16, 0, NULL); | 166 | drv->interrupt(serio, HIL_ERR_INT >> 16, 0); |
167 | drv->interrupt(serio, HIL_PKT_CMD >> 8, 0, NULL); | 167 | drv->interrupt(serio, HIL_PKT_CMD >> 8, 0); |
168 | drv->interrupt(serio, HIL_CMD_POL + cnt, 0, NULL); | 168 | drv->interrupt(serio, HIL_CMD_POL + cnt, 0); |
169 | skip: | 169 | skip: |
170 | did = (p & HIL_PKT_ADDR_MASK) >> 8; | 170 | did = (p & HIL_PKT_ADDR_MASK) >> 8; |
171 | serio = did ? mlc->serio[mlc->di_map[did-1]] : NULL; | 171 | serio = did ? mlc->serio[mlc->di_map[did-1]] : NULL; |
@@ -174,10 +174,10 @@ static void hil_mlc_send_polls(hil_mlc *mlc) { | |||
174 | } | 174 | } |
175 | cnt++; i++; | 175 | cnt++; i++; |
176 | if (drv == NULL || drv->interrupt == NULL) continue; | 176 | if (drv == NULL || drv->interrupt == NULL) continue; |
177 | drv->interrupt(serio, (p >> 24), 0, NULL); | 177 | drv->interrupt(serio, (p >> 24), 0); |
178 | drv->interrupt(serio, (p >> 16) & 0xff, 0, NULL); | 178 | drv->interrupt(serio, (p >> 16) & 0xff, 0); |
179 | drv->interrupt(serio, (p >> 8) & ~HIL_PKT_ADDR_MASK, 0, NULL); | 179 | drv->interrupt(serio, (p >> 8) & ~HIL_PKT_ADDR_MASK, 0); |
180 | drv->interrupt(serio, p & 0xff, 0, NULL); | 180 | drv->interrupt(serio, p & 0xff, 0); |
181 | } | 181 | } |
182 | } | 182 | } |
183 | 183 | ||
@@ -780,16 +780,16 @@ static int hil_mlc_serio_write(struct serio *serio, unsigned char c) { | |||
780 | while ((last != idx) && (*last == 0)) last--; | 780 | while ((last != idx) && (*last == 0)) last--; |
781 | 781 | ||
782 | while (idx != last) { | 782 | while (idx != last) { |
783 | drv->interrupt(serio, 0, 0, NULL); | 783 | drv->interrupt(serio, 0, 0); |
784 | drv->interrupt(serio, HIL_ERR_INT >> 16, 0, NULL); | 784 | drv->interrupt(serio, HIL_ERR_INT >> 16, 0); |
785 | drv->interrupt(serio, 0, 0, NULL); | 785 | drv->interrupt(serio, 0, 0); |
786 | drv->interrupt(serio, *idx, 0, NULL); | 786 | drv->interrupt(serio, *idx, 0); |
787 | idx++; | 787 | idx++; |
788 | } | 788 | } |
789 | drv->interrupt(serio, 0, 0, NULL); | 789 | drv->interrupt(serio, 0, 0); |
790 | drv->interrupt(serio, HIL_ERR_INT >> 16, 0, NULL); | 790 | drv->interrupt(serio, HIL_ERR_INT >> 16, 0); |
791 | drv->interrupt(serio, HIL_PKT_CMD >> 8, 0, NULL); | 791 | drv->interrupt(serio, HIL_PKT_CMD >> 8, 0); |
792 | drv->interrupt(serio, *idx, 0, NULL); | 792 | drv->interrupt(serio, *idx, 0); |
793 | 793 | ||
794 | mlc->serio_oidx[map->didx] = 0; | 794 | mlc->serio_oidx[map->didx] = 0; |
795 | mlc->serio_opacket[map->didx] = 0; | 795 | mlc->serio_opacket[map->didx] = 0; |
diff --git a/drivers/isdn/act2000/act2000_isa.c b/drivers/isdn/act2000/act2000_isa.c index 3014495b7ff7..3cac23739344 100644 --- a/drivers/isdn/act2000/act2000_isa.c +++ b/drivers/isdn/act2000/act2000_isa.c | |||
@@ -16,8 +16,6 @@ | |||
16 | #include "act2000_isa.h" | 16 | #include "act2000_isa.h" |
17 | #include "capi.h" | 17 | #include "capi.h" |
18 | 18 | ||
19 | static act2000_card *irq2card_map[16]; | ||
20 | |||
21 | /* | 19 | /* |
22 | * Reset Controller, then try to read the Card's signature. | 20 | * Reset Controller, then try to read the Card's signature. |
23 | + Return: | 21 | + Return: |
@@ -65,14 +63,9 @@ act2000_isa_detect(unsigned short portbase) | |||
65 | static irqreturn_t | 63 | static irqreturn_t |
66 | act2000_isa_interrupt(int irq, void *dev_id) | 64 | act2000_isa_interrupt(int irq, void *dev_id) |
67 | { | 65 | { |
68 | act2000_card *card = irq2card_map[irq]; | 66 | act2000_card *card = dev_id; |
69 | u_char istatus; | 67 | u_char istatus; |
70 | 68 | ||
71 | if (!card) { | ||
72 | printk(KERN_WARNING | ||
73 | "act2000: Spurious interrupt!\n"); | ||
74 | return IRQ_NONE; | ||
75 | } | ||
76 | istatus = (inb(ISA_PORT_ISR) & 0x07); | 69 | istatus = (inb(ISA_PORT_ISR) & 0x07); |
77 | if (istatus & ISA_ISR_OUT) { | 70 | if (istatus & ISA_ISR_OUT) { |
78 | /* RX fifo has data */ | 71 | /* RX fifo has data */ |
@@ -139,17 +132,15 @@ int | |||
139 | act2000_isa_config_irq(act2000_card * card, short irq) | 132 | act2000_isa_config_irq(act2000_card * card, short irq) |
140 | { | 133 | { |
141 | if (card->flags & ACT2000_FLAGS_IVALID) { | 134 | if (card->flags & ACT2000_FLAGS_IVALID) { |
142 | free_irq(card->irq, NULL); | 135 | free_irq(card->irq, card); |
143 | irq2card_map[card->irq] = NULL; | ||
144 | } | 136 | } |
145 | card->flags &= ~ACT2000_FLAGS_IVALID; | 137 | card->flags &= ~ACT2000_FLAGS_IVALID; |
146 | outb(ISA_COR_IRQOFF, ISA_PORT_COR); | 138 | outb(ISA_COR_IRQOFF, ISA_PORT_COR); |
147 | if (!irq) | 139 | if (!irq) |
148 | return 0; | 140 | return 0; |
149 | 141 | ||
150 | if (!request_irq(irq, &act2000_isa_interrupt, 0, card->regname, NULL)) { | 142 | if (!request_irq(irq, &act2000_isa_interrupt, 0, card->regname, card)) { |
151 | card->irq = irq; | 143 | card->irq = irq; |
152 | irq2card_map[card->irq] = card; | ||
153 | card->flags |= ACT2000_FLAGS_IVALID; | 144 | card->flags |= ACT2000_FLAGS_IVALID; |
154 | printk(KERN_WARNING | 145 | printk(KERN_WARNING |
155 | "act2000: Could not request irq %d\n",irq); | 146 | "act2000: Could not request irq %d\n",irq); |
@@ -188,10 +179,9 @@ act2000_isa_release(act2000_card * card) | |||
188 | unsigned long flags; | 179 | unsigned long flags; |
189 | 180 | ||
190 | spin_lock_irqsave(&card->lock, flags); | 181 | spin_lock_irqsave(&card->lock, flags); |
191 | if (card->flags & ACT2000_FLAGS_IVALID) { | 182 | if (card->flags & ACT2000_FLAGS_IVALID) |
192 | free_irq(card->irq, NULL); | 183 | free_irq(card->irq, card); |
193 | irq2card_map[card->irq] = NULL; | 184 | |
194 | } | ||
195 | card->flags &= ~ACT2000_FLAGS_IVALID; | 185 | card->flags &= ~ACT2000_FLAGS_IVALID; |
196 | if (card->flags & ACT2000_FLAGS_PVALID) | 186 | if (card->flags & ACT2000_FLAGS_PVALID) |
197 | release_region(card->port, ISA_REGION); | 187 | release_region(card->port, ISA_REGION); |
diff --git a/drivers/macintosh/adb-iop.c b/drivers/macintosh/adb-iop.c index 1ffee7aaff20..17ef5d3c01b4 100644 --- a/drivers/macintosh/adb-iop.c +++ b/drivers/macintosh/adb-iop.c | |||
@@ -266,7 +266,7 @@ int adb_iop_autopoll(int devs) | |||
266 | void adb_iop_poll(void) | 266 | void adb_iop_poll(void) |
267 | { | 267 | { |
268 | if (adb_iop_state == idle) adb_iop_start(); | 268 | if (adb_iop_state == idle) adb_iop_start(); |
269 | iop_ism_irq(0, (void *) ADB_IOP, NULL); | 269 | iop_ism_irq(0, (void *) ADB_IOP); |
270 | } | 270 | } |
271 | 271 | ||
272 | int adb_iop_reset_bus(void) | 272 | int adb_iop_reset_bus(void) |
diff --git a/drivers/macintosh/macio-adb.c b/drivers/macintosh/macio-adb.c index 57ccc19cbdbf..797cef72258f 100644 --- a/drivers/macintosh/macio-adb.c +++ b/drivers/macintosh/macio-adb.c | |||
@@ -270,6 +270,6 @@ static void macio_adb_poll(void) | |||
270 | 270 | ||
271 | local_irq_save(flags); | 271 | local_irq_save(flags); |
272 | if (in_8(&adb->intr.r) != 0) | 272 | if (in_8(&adb->intr.r) != 0) |
273 | macio_adb_interrupt(0, NULL, NULL); | 273 | macio_adb_interrupt(0, NULL); |
274 | local_irq_restore(flags); | 274 | local_irq_restore(flags); |
275 | } | 275 | } |
diff --git a/drivers/macintosh/via-cuda.c b/drivers/macintosh/via-cuda.c index 64a07ccfe369..df66291b1322 100644 --- a/drivers/macintosh/via-cuda.c +++ b/drivers/macintosh/via-cuda.c | |||
@@ -437,7 +437,7 @@ cuda_poll(void) | |||
437 | * disable_irq(), would that work on m68k ? --BenH | 437 | * disable_irq(), would that work on m68k ? --BenH |
438 | */ | 438 | */ |
439 | local_irq_save(flags); | 439 | local_irq_save(flags); |
440 | cuda_interrupt(0, NULL, NULL); | 440 | cuda_interrupt(0, NULL); |
441 | local_irq_restore(flags); | 441 | local_irq_restore(flags); |
442 | } | 442 | } |
443 | 443 | ||
diff --git a/drivers/macintosh/via-macii.c b/drivers/macintosh/via-macii.c index ad4bd579f610..5d88d5b0ad99 100644 --- a/drivers/macintosh/via-macii.c +++ b/drivers/macintosh/via-macii.c | |||
@@ -295,7 +295,7 @@ static void macii_poll(void) | |||
295 | unsigned long flags; | 295 | unsigned long flags; |
296 | 296 | ||
297 | local_irq_save(flags); | 297 | local_irq_save(flags); |
298 | if (via[IFR] & SR_INT) macii_interrupt(0, NULL, NULL); | 298 | if (via[IFR] & SR_INT) macii_interrupt(0, NULL); |
299 | local_irq_restore(flags); | 299 | local_irq_restore(flags); |
300 | } | 300 | } |
301 | 301 | ||
diff --git a/drivers/macintosh/via-maciisi.c b/drivers/macintosh/via-maciisi.c index 789ee52086fe..1f0aa5dc9aa5 100644 --- a/drivers/macintosh/via-maciisi.c +++ b/drivers/macintosh/via-maciisi.c | |||
@@ -421,7 +421,7 @@ maciisi_poll(void) | |||
421 | 421 | ||
422 | local_irq_save(flags); | 422 | local_irq_save(flags); |
423 | if (via[IFR] & SR_INT) { | 423 | if (via[IFR] & SR_INT) { |
424 | maciisi_interrupt(0, NULL, NULL); | 424 | maciisi_interrupt(0, NULL); |
425 | } | 425 | } |
426 | else /* avoid calling this function too quickly in a loop */ | 426 | else /* avoid calling this function too quickly in a loop */ |
427 | udelay(ADB_DELAY); | 427 | udelay(ADB_DELAY); |
diff --git a/drivers/macintosh/via-pmu68k.c b/drivers/macintosh/via-pmu68k.c index 98ec915d0409..d9986f3a3fbf 100644 --- a/drivers/macintosh/via-pmu68k.c +++ b/drivers/macintosh/via-pmu68k.c | |||
@@ -221,7 +221,7 @@ pmu_init(void) | |||
221 | } | 221 | } |
222 | if (pmu_state == idle) { | 222 | if (pmu_state == idle) { |
223 | adb_int_pending = 1; | 223 | adb_int_pending = 1; |
224 | pmu_interrupt(0, NULL, NULL); | 224 | pmu_interrupt(0, NULL); |
225 | } | 225 | } |
226 | pmu_poll(); | 226 | pmu_poll(); |
227 | udelay(10); | 227 | udelay(10); |
@@ -562,11 +562,11 @@ pmu_poll(void) | |||
562 | local_irq_save(flags); | 562 | local_irq_save(flags); |
563 | if (via1[IFR] & SR_INT) { | 563 | if (via1[IFR] & SR_INT) { |
564 | via1[IFR] = SR_INT; | 564 | via1[IFR] = SR_INT; |
565 | pmu_interrupt(IRQ_MAC_ADB_SR, NULL, NULL); | 565 | pmu_interrupt(IRQ_MAC_ADB_SR, NULL); |
566 | } | 566 | } |
567 | if (via1[IFR] & CB1_INT) { | 567 | if (via1[IFR] & CB1_INT) { |
568 | via1[IFR] = CB1_INT; | 568 | via1[IFR] = CB1_INT; |
569 | pmu_interrupt(IRQ_MAC_ADB_CL, NULL, NULL); | 569 | pmu_interrupt(IRQ_MAC_ADB_CL, NULL); |
570 | } | 570 | } |
571 | local_irq_restore(flags); | 571 | local_irq_restore(flags); |
572 | } | 572 | } |
diff --git a/drivers/macintosh/windfarm_pm112.c b/drivers/macintosh/windfarm_pm112.c index ef66bf2778ec..fa4b13f89369 100644 --- a/drivers/macintosh/windfarm_pm112.c +++ b/drivers/macintosh/windfarm_pm112.c | |||
@@ -650,24 +650,26 @@ static struct notifier_block pm112_events = { | |||
650 | .notifier_call = pm112_wf_notify, | 650 | .notifier_call = pm112_wf_notify, |
651 | }; | 651 | }; |
652 | 652 | ||
653 | static int wf_pm112_probe(struct device *dev) | 653 | static int wf_pm112_probe(struct platform_device *dev) |
654 | { | 654 | { |
655 | wf_register_client(&pm112_events); | 655 | wf_register_client(&pm112_events); |
656 | return 0; | 656 | return 0; |
657 | } | 657 | } |
658 | 658 | ||
659 | static int wf_pm112_remove(struct device *dev) | 659 | static int __devexit wf_pm112_remove(struct platform_device *dev) |
660 | { | 660 | { |
661 | wf_unregister_client(&pm112_events); | 661 | wf_unregister_client(&pm112_events); |
662 | /* should release all sensors and controls */ | 662 | /* should release all sensors and controls */ |
663 | return 0; | 663 | return 0; |
664 | } | 664 | } |
665 | 665 | ||
666 | static struct device_driver wf_pm112_driver = { | 666 | static struct platform_driver wf_pm112_driver = { |
667 | .name = "windfarm", | ||
668 | .bus = &platform_bus_type, | ||
669 | .probe = wf_pm112_probe, | 667 | .probe = wf_pm112_probe, |
670 | .remove = wf_pm112_remove, | 668 | .remove = __devexit_p(wf_pm112_remove), |
669 | .driver = { | ||
670 | .name = "windfarm", | ||
671 | .bus = &platform_bus_type, | ||
672 | }, | ||
671 | }; | 673 | }; |
672 | 674 | ||
673 | static int __init wf_pm112_init(void) | 675 | static int __init wf_pm112_init(void) |
@@ -683,13 +685,13 @@ static int __init wf_pm112_init(void) | |||
683 | ++nr_cores; | 685 | ++nr_cores; |
684 | 686 | ||
685 | printk(KERN_INFO "windfarm: initializing for dual-core desktop G5\n"); | 687 | printk(KERN_INFO "windfarm: initializing for dual-core desktop G5\n"); |
686 | driver_register(&wf_pm112_driver); | 688 | platform_driver_register(&wf_pm112_driver); |
687 | return 0; | 689 | return 0; |
688 | } | 690 | } |
689 | 691 | ||
690 | static void __exit wf_pm112_exit(void) | 692 | static void __exit wf_pm112_exit(void) |
691 | { | 693 | { |
692 | driver_unregister(&wf_pm112_driver); | 694 | platform_driver_unregister(&wf_pm112_driver); |
693 | } | 695 | } |
694 | 696 | ||
695 | module_init(wf_pm112_init); | 697 | module_init(wf_pm112_init); |
diff --git a/drivers/macintosh/windfarm_pm81.c b/drivers/macintosh/windfarm_pm81.c index 2ff546e4c92f..2a944851b8e1 100644 --- a/drivers/macintosh/windfarm_pm81.c +++ b/drivers/macintosh/windfarm_pm81.c | |||
@@ -131,8 +131,6 @@ | |||
131 | 131 | ||
132 | static int wf_smu_mach_model; /* machine model id */ | 132 | static int wf_smu_mach_model; /* machine model id */ |
133 | 133 | ||
134 | static struct device *wf_smu_dev; | ||
135 | |||
136 | /* Controls & sensors */ | 134 | /* Controls & sensors */ |
137 | static struct wf_sensor *sensor_cpu_power; | 135 | static struct wf_sensor *sensor_cpu_power; |
138 | static struct wf_sensor *sensor_cpu_temp; | 136 | static struct wf_sensor *sensor_cpu_temp; |
@@ -717,16 +715,14 @@ static int wf_init_pm(void) | |||
717 | return 0; | 715 | return 0; |
718 | } | 716 | } |
719 | 717 | ||
720 | static int wf_smu_probe(struct device *ddev) | 718 | static int wf_smu_probe(struct platform_device *ddev) |
721 | { | 719 | { |
722 | wf_smu_dev = ddev; | ||
723 | |||
724 | wf_register_client(&wf_smu_events); | 720 | wf_register_client(&wf_smu_events); |
725 | 721 | ||
726 | return 0; | 722 | return 0; |
727 | } | 723 | } |
728 | 724 | ||
729 | static int wf_smu_remove(struct device *ddev) | 725 | static int __devexit wf_smu_remove(struct platform_device *ddev) |
730 | { | 726 | { |
731 | wf_unregister_client(&wf_smu_events); | 727 | wf_unregister_client(&wf_smu_events); |
732 | 728 | ||
@@ -766,16 +762,16 @@ static int wf_smu_remove(struct device *ddev) | |||
766 | if (wf_smu_cpu_fans) | 762 | if (wf_smu_cpu_fans) |
767 | kfree(wf_smu_cpu_fans); | 763 | kfree(wf_smu_cpu_fans); |
768 | 764 | ||
769 | wf_smu_dev = NULL; | ||
770 | |||
771 | return 0; | 765 | return 0; |
772 | } | 766 | } |
773 | 767 | ||
774 | static struct device_driver wf_smu_driver = { | 768 | static struct platform_driver wf_smu_driver = { |
775 | .name = "windfarm", | ||
776 | .bus = &platform_bus_type, | ||
777 | .probe = wf_smu_probe, | 769 | .probe = wf_smu_probe, |
778 | .remove = wf_smu_remove, | 770 | .remove = __devexit_p(wf_smu_remove), |
771 | .driver = { | ||
772 | .name = "windfarm", | ||
773 | .bus = &platform_bus_type, | ||
774 | }, | ||
779 | }; | 775 | }; |
780 | 776 | ||
781 | 777 | ||
@@ -794,7 +790,7 @@ static int __init wf_smu_init(void) | |||
794 | request_module("windfarm_lm75_sensor"); | 790 | request_module("windfarm_lm75_sensor"); |
795 | 791 | ||
796 | #endif /* MODULE */ | 792 | #endif /* MODULE */ |
797 | driver_register(&wf_smu_driver); | 793 | platform_driver_register(&wf_smu_driver); |
798 | } | 794 | } |
799 | 795 | ||
800 | return rc; | 796 | return rc; |
@@ -803,7 +799,7 @@ static int __init wf_smu_init(void) | |||
803 | static void __exit wf_smu_exit(void) | 799 | static void __exit wf_smu_exit(void) |
804 | { | 800 | { |
805 | 801 | ||
806 | driver_unregister(&wf_smu_driver); | 802 | platform_driver_unregister(&wf_smu_driver); |
807 | } | 803 | } |
808 | 804 | ||
809 | 805 | ||
diff --git a/drivers/macintosh/windfarm_pm91.c b/drivers/macintosh/windfarm_pm91.c index 59e9ffe37c39..9961a67b4f85 100644 --- a/drivers/macintosh/windfarm_pm91.c +++ b/drivers/macintosh/windfarm_pm91.c | |||
@@ -63,8 +63,6 @@ | |||
63 | */ | 63 | */ |
64 | #undef HACKED_OVERTEMP | 64 | #undef HACKED_OVERTEMP |
65 | 65 | ||
66 | static struct device *wf_smu_dev; | ||
67 | |||
68 | /* Controls & sensors */ | 66 | /* Controls & sensors */ |
69 | static struct wf_sensor *sensor_cpu_power; | 67 | static struct wf_sensor *sensor_cpu_power; |
70 | static struct wf_sensor *sensor_cpu_temp; | 68 | static struct wf_sensor *sensor_cpu_temp; |
@@ -641,16 +639,14 @@ static int wf_init_pm(void) | |||
641 | return 0; | 639 | return 0; |
642 | } | 640 | } |
643 | 641 | ||
644 | static int wf_smu_probe(struct device *ddev) | 642 | static int wf_smu_probe(struct platform_device *ddev) |
645 | { | 643 | { |
646 | wf_smu_dev = ddev; | ||
647 | |||
648 | wf_register_client(&wf_smu_events); | 644 | wf_register_client(&wf_smu_events); |
649 | 645 | ||
650 | return 0; | 646 | return 0; |
651 | } | 647 | } |
652 | 648 | ||
653 | static int wf_smu_remove(struct device *ddev) | 649 | static int __devexit wf_smu_remove(struct platform_device *ddev) |
654 | { | 650 | { |
655 | wf_unregister_client(&wf_smu_events); | 651 | wf_unregister_client(&wf_smu_events); |
656 | 652 | ||
@@ -698,16 +694,16 @@ static int wf_smu_remove(struct device *ddev) | |||
698 | if (wf_smu_cpu_fans) | 694 | if (wf_smu_cpu_fans) |
699 | kfree(wf_smu_cpu_fans); | 695 | kfree(wf_smu_cpu_fans); |
700 | 696 | ||
701 | wf_smu_dev = NULL; | ||
702 | |||
703 | return 0; | 697 | return 0; |
704 | } | 698 | } |
705 | 699 | ||
706 | static struct device_driver wf_smu_driver = { | 700 | static struct platform_driver wf_smu_driver = { |
707 | .name = "windfarm", | ||
708 | .bus = &platform_bus_type, | ||
709 | .probe = wf_smu_probe, | 701 | .probe = wf_smu_probe, |
710 | .remove = wf_smu_remove, | 702 | .remove = __devexit_p(wf_smu_remove), |
703 | .driver = { | ||
704 | .name = "windfarm", | ||
705 | .bus = &platform_bus_type, | ||
706 | }, | ||
711 | }; | 707 | }; |
712 | 708 | ||
713 | 709 | ||
@@ -725,7 +721,7 @@ static int __init wf_smu_init(void) | |||
725 | request_module("windfarm_lm75_sensor"); | 721 | request_module("windfarm_lm75_sensor"); |
726 | 722 | ||
727 | #endif /* MODULE */ | 723 | #endif /* MODULE */ |
728 | driver_register(&wf_smu_driver); | 724 | platform_driver_register(&wf_smu_driver); |
729 | } | 725 | } |
730 | 726 | ||
731 | return rc; | 727 | return rc; |
@@ -734,7 +730,7 @@ static int __init wf_smu_init(void) | |||
734 | static void __exit wf_smu_exit(void) | 730 | static void __exit wf_smu_exit(void) |
735 | { | 731 | { |
736 | 732 | ||
737 | driver_unregister(&wf_smu_driver); | 733 | platform_driver_unregister(&wf_smu_driver); |
738 | } | 734 | } |
739 | 735 | ||
740 | 736 | ||
diff --git a/drivers/md/md.c b/drivers/md/md.c index cb8281605be8..57fa64f93e5f 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -3849,6 +3849,7 @@ static int hot_add_disk(mddev_t * mddev, dev_t dev) | |||
3849 | } | 3849 | } |
3850 | clear_bit(In_sync, &rdev->flags); | 3850 | clear_bit(In_sync, &rdev->flags); |
3851 | rdev->desc_nr = -1; | 3851 | rdev->desc_nr = -1; |
3852 | rdev->saved_raid_disk = -1; | ||
3852 | err = bind_rdev_to_array(rdev, mddev); | 3853 | err = bind_rdev_to_array(rdev, mddev); |
3853 | if (err) | 3854 | if (err) |
3854 | goto abort_export; | 3855 | goto abort_export; |
diff --git a/drivers/media/video/em28xx/em28xx-video.c b/drivers/media/video/em28xx/em28xx-video.c index 20df657b70c8..2a461dde480c 100644 --- a/drivers/media/video/em28xx/em28xx-video.c +++ b/drivers/media/video/em28xx/em28xx-video.c | |||
@@ -174,7 +174,7 @@ static void em28xx_config_i2c(struct em28xx *dev) | |||
174 | 174 | ||
175 | route.input = INPUT(dev->ctl_input)->vmux; | 175 | route.input = INPUT(dev->ctl_input)->vmux; |
176 | route.output = 0; | 176 | route.output = 0; |
177 | em28xx_i2c_call_clients(dev, VIDIOC_INT_RESET, 0); | 177 | em28xx_i2c_call_clients(dev, VIDIOC_INT_RESET, NULL); |
178 | em28xx_i2c_call_clients(dev, VIDIOC_INT_S_VIDEO_ROUTING, &route); | 178 | em28xx_i2c_call_clients(dev, VIDIOC_INT_S_VIDEO_ROUTING, &route); |
179 | em28xx_i2c_call_clients(dev, VIDIOC_STREAMON, NULL); | 179 | em28xx_i2c_call_clients(dev, VIDIOC_STREAMON, NULL); |
180 | 180 | ||
diff --git a/drivers/media/video/zoran_device.c b/drivers/media/video/zoran_device.c index d9d5020a2224..168e431d7c71 100644 --- a/drivers/media/video/zoran_device.c +++ b/drivers/media/video/zoran_device.c | |||
@@ -1415,7 +1415,7 @@ zoran_irq (int irq, | |||
1415 | struct zoran *zr; | 1415 | struct zoran *zr; |
1416 | unsigned long flags; | 1416 | unsigned long flags; |
1417 | 1417 | ||
1418 | zr = (struct zoran *) dev_id; | 1418 | zr = dev_id; |
1419 | count = 0; | 1419 | count = 0; |
1420 | 1420 | ||
1421 | if (zr->testing) { | 1421 | if (zr->testing) { |
diff --git a/drivers/misc/tifm_7xx1.c b/drivers/misc/tifm_7xx1.c index b1748669e05b..1ba8754e9383 100644 --- a/drivers/misc/tifm_7xx1.c +++ b/drivers/misc/tifm_7xx1.c | |||
@@ -48,7 +48,7 @@ static void tifm_7xx1_remove_media(void *adapter) | |||
48 | printk(KERN_INFO DRIVER_NAME | 48 | printk(KERN_INFO DRIVER_NAME |
49 | ": demand removing card from socket %d\n", cnt); | 49 | ": demand removing card from socket %d\n", cnt); |
50 | sock = fm->sockets[cnt]; | 50 | sock = fm->sockets[cnt]; |
51 | fm->sockets[cnt] = 0; | 51 | fm->sockets[cnt] = NULL; |
52 | fm->remove_mask &= ~(1 << cnt); | 52 | fm->remove_mask &= ~(1 << cnt); |
53 | 53 | ||
54 | writel(0x0e00, sock->addr + SOCK_CONTROL); | 54 | writel(0x0e00, sock->addr + SOCK_CONTROL); |
@@ -118,7 +118,7 @@ static irqreturn_t tifm_7xx1_isr(int irq, void *dev_id) | |||
118 | return IRQ_HANDLED; | 118 | return IRQ_HANDLED; |
119 | } | 119 | } |
120 | 120 | ||
121 | static tifm_media_id tifm_7xx1_toggle_sock_power(char *sock_addr, int is_x2) | 121 | static tifm_media_id tifm_7xx1_toggle_sock_power(char __iomem *sock_addr, int is_x2) |
122 | { | 122 | { |
123 | unsigned int s_state; | 123 | unsigned int s_state; |
124 | int cnt; | 124 | int cnt; |
@@ -163,7 +163,8 @@ static tifm_media_id tifm_7xx1_toggle_sock_power(char *sock_addr, int is_x2) | |||
163 | return (readl(sock_addr + SOCK_PRESENT_STATE) >> 4) & 7; | 163 | return (readl(sock_addr + SOCK_PRESENT_STATE) >> 4) & 7; |
164 | } | 164 | } |
165 | 165 | ||
166 | inline static char *tifm_7xx1_sock_addr(char *base_addr, unsigned int sock_num) | 166 | inline static char __iomem * |
167 | tifm_7xx1_sock_addr(char __iomem *base_addr, unsigned int sock_num) | ||
167 | { | 168 | { |
168 | return base_addr + ((sock_num + 1) << 10); | 169 | return base_addr + ((sock_num + 1) << 10); |
169 | } | 170 | } |
@@ -176,7 +177,7 @@ static void tifm_7xx1_insert_media(void *adapter) | |||
176 | char *card_name = "xx"; | 177 | char *card_name = "xx"; |
177 | int cnt, ok_to_register; | 178 | int cnt, ok_to_register; |
178 | unsigned int insert_mask; | 179 | unsigned int insert_mask; |
179 | struct tifm_dev *new_sock = 0; | 180 | struct tifm_dev *new_sock = NULL; |
180 | 181 | ||
181 | if (!class_device_get(&fm->cdev)) | 182 | if (!class_device_get(&fm->cdev)) |
182 | return; | 183 | return; |
@@ -230,7 +231,7 @@ static void tifm_7xx1_insert_media(void *adapter) | |||
230 | if (!ok_to_register || | 231 | if (!ok_to_register || |
231 | device_register(&new_sock->dev)) { | 232 | device_register(&new_sock->dev)) { |
232 | spin_lock_irqsave(&fm->lock, flags); | 233 | spin_lock_irqsave(&fm->lock, flags); |
233 | fm->sockets[cnt] = 0; | 234 | fm->sockets[cnt] = NULL; |
234 | spin_unlock_irqrestore(&fm->lock, | 235 | spin_unlock_irqrestore(&fm->lock, |
235 | flags); | 236 | flags); |
236 | tifm_free_device(&new_sock->dev); | 237 | tifm_free_device(&new_sock->dev); |
@@ -390,7 +391,7 @@ static void tifm_7xx1_remove(struct pci_dev *dev) | |||
390 | 391 | ||
391 | tifm_remove_adapter(fm); | 392 | tifm_remove_adapter(fm); |
392 | 393 | ||
393 | pci_set_drvdata(dev, 0); | 394 | pci_set_drvdata(dev, NULL); |
394 | 395 | ||
395 | iounmap(fm->addr); | 396 | iounmap(fm->addr); |
396 | pci_intx(dev, 0); | 397 | pci_intx(dev, 0); |
diff --git a/drivers/misc/tifm_core.c b/drivers/misc/tifm_core.c index cca5f8522469..ee326136d03b 100644 --- a/drivers/misc/tifm_core.c +++ b/drivers/misc/tifm_core.c | |||
@@ -157,7 +157,7 @@ struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm, unsigned int id) | |||
157 | dev->wq = create_singlethread_workqueue(dev->wq_name); | 157 | dev->wq = create_singlethread_workqueue(dev->wq_name); |
158 | if (!dev->wq) { | 158 | if (!dev->wq) { |
159 | kfree(dev); | 159 | kfree(dev); |
160 | return 0; | 160 | return NULL; |
161 | } | 161 | } |
162 | dev->dev.parent = fm->dev; | 162 | dev->dev.parent = fm->dev; |
163 | dev->dev.bus = &tifm_bus_type; | 163 | dev->dev.bus = &tifm_bus_type; |
diff --git a/drivers/mmc/mmc_block.c b/drivers/mmc/mmc_block.c index c1293f1bda87..f9027c8db792 100644 --- a/drivers/mmc/mmc_block.c +++ b/drivers/mmc/mmc_block.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/kdev_t.h> | 28 | #include <linux/kdev_t.h> |
29 | #include <linux/blkdev.h> | 29 | #include <linux/blkdev.h> |
30 | #include <linux/mutex.h> | 30 | #include <linux/mutex.h> |
31 | #include <linux/scatterlist.h> | ||
31 | 32 | ||
32 | #include <linux/mmc/card.h> | 33 | #include <linux/mmc/card.h> |
33 | #include <linux/mmc/host.h> | 34 | #include <linux/mmc/host.h> |
@@ -154,6 +155,71 @@ static int mmc_blk_prep_rq(struct mmc_queue *mq, struct request *req) | |||
154 | return stat; | 155 | return stat; |
155 | } | 156 | } |
156 | 157 | ||
158 | static u32 mmc_sd_num_wr_blocks(struct mmc_card *card) | ||
159 | { | ||
160 | int err; | ||
161 | u32 blocks; | ||
162 | |||
163 | struct mmc_request mrq; | ||
164 | struct mmc_command cmd; | ||
165 | struct mmc_data data; | ||
166 | unsigned int timeout_us; | ||
167 | |||
168 | struct scatterlist sg; | ||
169 | |||
170 | memset(&cmd, 0, sizeof(struct mmc_command)); | ||
171 | |||
172 | cmd.opcode = MMC_APP_CMD; | ||
173 | cmd.arg = card->rca << 16; | ||
174 | cmd.flags = MMC_RSP_R1 | MMC_CMD_AC; | ||
175 | |||
176 | err = mmc_wait_for_cmd(card->host, &cmd, 0); | ||
177 | if ((err != MMC_ERR_NONE) || !(cmd.resp[0] & R1_APP_CMD)) | ||
178 | return (u32)-1; | ||
179 | |||
180 | memset(&cmd, 0, sizeof(struct mmc_command)); | ||
181 | |||
182 | cmd.opcode = SD_APP_SEND_NUM_WR_BLKS; | ||
183 | cmd.arg = 0; | ||
184 | cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC; | ||
185 | |||
186 | memset(&data, 0, sizeof(struct mmc_data)); | ||
187 | |||
188 | data.timeout_ns = card->csd.tacc_ns * 100; | ||
189 | data.timeout_clks = card->csd.tacc_clks * 100; | ||
190 | |||
191 | timeout_us = data.timeout_ns / 1000; | ||
192 | timeout_us += data.timeout_clks * 1000 / | ||
193 | (card->host->ios.clock / 1000); | ||
194 | |||
195 | if (timeout_us > 100000) { | ||
196 | data.timeout_ns = 100000000; | ||
197 | data.timeout_clks = 0; | ||
198 | } | ||
199 | |||
200 | data.blksz = 4; | ||
201 | data.blocks = 1; | ||
202 | data.flags = MMC_DATA_READ; | ||
203 | data.sg = &sg; | ||
204 | data.sg_len = 1; | ||
205 | |||
206 | memset(&mrq, 0, sizeof(struct mmc_request)); | ||
207 | |||
208 | mrq.cmd = &cmd; | ||
209 | mrq.data = &data; | ||
210 | |||
211 | sg_init_one(&sg, &blocks, 4); | ||
212 | |||
213 | mmc_wait_for_req(card->host, &mrq); | ||
214 | |||
215 | if (cmd.error != MMC_ERR_NONE || data.error != MMC_ERR_NONE) | ||
216 | return (u32)-1; | ||
217 | |||
218 | blocks = ntohl(blocks); | ||
219 | |||
220 | return blocks; | ||
221 | } | ||
222 | |||
157 | static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) | 223 | static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) |
158 | { | 224 | { |
159 | struct mmc_blk_data *md = mq->data; | 225 | struct mmc_blk_data *md = mq->data; |
@@ -184,10 +250,13 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) | |||
184 | 250 | ||
185 | /* | 251 | /* |
186 | * If the host doesn't support multiple block writes, force | 252 | * If the host doesn't support multiple block writes, force |
187 | * block writes to single block. | 253 | * block writes to single block. SD cards are excepted from |
254 | * this rule as they support querying the number of | ||
255 | * successfully written sectors. | ||
188 | */ | 256 | */ |
189 | if (rq_data_dir(req) != READ && | 257 | if (rq_data_dir(req) != READ && |
190 | !(card->host->caps & MMC_CAP_MULTIWRITE)) | 258 | !(card->host->caps & MMC_CAP_MULTIWRITE) && |
259 | !mmc_card_sd(card)) | ||
191 | brq.data.blocks = 1; | 260 | brq.data.blocks = 1; |
192 | 261 | ||
193 | if (brq.data.blocks > 1) { | 262 | if (brq.data.blocks > 1) { |
@@ -276,24 +345,41 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) | |||
276 | return 1; | 345 | return 1; |
277 | 346 | ||
278 | cmd_err: | 347 | cmd_err: |
279 | mmc_card_release_host(card); | ||
280 | |||
281 | ret = 1; | 348 | ret = 1; |
282 | 349 | ||
283 | /* | 350 | /* |
284 | * For writes and where the host claims to support proper | 351 | * If this is an SD card and we're writing, we can first |
285 | * error reporting, we first ok the successful blocks. | 352 | * mark the known good sectors as ok. |
353 | * | ||
354 | * If the card is not SD, we can still ok written sectors | ||
355 | * if the controller can do proper error reporting. | ||
286 | * | 356 | * |
287 | * For reads we just fail the entire chunk as that should | 357 | * For reads we just fail the entire chunk as that should |
288 | * be safe in all cases. | 358 | * be safe in all cases. |
289 | */ | 359 | */ |
290 | if (rq_data_dir(req) != READ && | 360 | if (rq_data_dir(req) != READ && mmc_card_sd(card)) { |
291 | (card->host->caps & MMC_CAP_MULTIWRITE)) { | 361 | u32 blocks; |
362 | unsigned int bytes; | ||
363 | |||
364 | blocks = mmc_sd_num_wr_blocks(card); | ||
365 | if (blocks != (u32)-1) { | ||
366 | if (card->csd.write_partial) | ||
367 | bytes = blocks << md->block_bits; | ||
368 | else | ||
369 | bytes = blocks << 9; | ||
370 | spin_lock_irq(&md->lock); | ||
371 | ret = end_that_request_chunk(req, 1, bytes); | ||
372 | spin_unlock_irq(&md->lock); | ||
373 | } | ||
374 | } else if (rq_data_dir(req) != READ && | ||
375 | (card->host->caps & MMC_CAP_MULTIWRITE)) { | ||
292 | spin_lock_irq(&md->lock); | 376 | spin_lock_irq(&md->lock); |
293 | ret = end_that_request_chunk(req, 1, brq.data.bytes_xfered); | 377 | ret = end_that_request_chunk(req, 1, brq.data.bytes_xfered); |
294 | spin_unlock_irq(&md->lock); | 378 | spin_unlock_irq(&md->lock); |
295 | } | 379 | } |
296 | 380 | ||
381 | mmc_card_release_host(card); | ||
382 | |||
297 | spin_lock_irq(&md->lock); | 383 | spin_lock_irq(&md->lock); |
298 | while (ret) { | 384 | while (ret) { |
299 | ret = end_that_request_chunk(req, 0, | 385 | ret = end_that_request_chunk(req, 0, |
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c index 6d024342b2fd..9a7d39b7cdbf 100644 --- a/drivers/mmc/sdhci.c +++ b/drivers/mmc/sdhci.c | |||
@@ -1329,7 +1329,7 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot) | |||
1329 | tasklet_init(&host->finish_tasklet, | 1329 | tasklet_init(&host->finish_tasklet, |
1330 | sdhci_tasklet_finish, (unsigned long)host); | 1330 | sdhci_tasklet_finish, (unsigned long)host); |
1331 | 1331 | ||
1332 | setup_timer(&host->timer, sdhci_timeout_timer, (long)host); | 1332 | setup_timer(&host->timer, sdhci_timeout_timer, (unsigned long)host); |
1333 | 1333 | ||
1334 | ret = request_irq(host->irq, sdhci_irq, IRQF_SHARED, | 1334 | ret = request_irq(host->irq, sdhci_irq, IRQF_SHARED, |
1335 | host->slot_descr, host); | 1335 | host->slot_descr, host); |
diff --git a/drivers/mmc/tifm_sd.c b/drivers/mmc/tifm_sd.c index 6d23dc08d169..2bacff60913d 100644 --- a/drivers/mmc/tifm_sd.c +++ b/drivers/mmc/tifm_sd.c | |||
@@ -501,13 +501,13 @@ static void tifm_sd_end_cmd(void *data) | |||
501 | struct tifm_dev *sock = host->dev; | 501 | struct tifm_dev *sock = host->dev; |
502 | struct mmc_host *mmc = tifm_get_drvdata(sock); | 502 | struct mmc_host *mmc = tifm_get_drvdata(sock); |
503 | struct mmc_request *mrq; | 503 | struct mmc_request *mrq; |
504 | struct mmc_data *r_data = 0; | 504 | struct mmc_data *r_data = NULL; |
505 | unsigned long flags; | 505 | unsigned long flags; |
506 | 506 | ||
507 | spin_lock_irqsave(&sock->lock, flags); | 507 | spin_lock_irqsave(&sock->lock, flags); |
508 | 508 | ||
509 | mrq = host->req; | 509 | mrq = host->req; |
510 | host->req = 0; | 510 | host->req = NULL; |
511 | host->state = IDLE; | 511 | host->state = IDLE; |
512 | 512 | ||
513 | if (!mrq) { | 513 | if (!mrq) { |
@@ -546,7 +546,7 @@ static void tifm_sd_request_nodma(struct mmc_host *mmc, struct mmc_request *mrq) | |||
546 | struct tifm_dev *sock = host->dev; | 546 | struct tifm_dev *sock = host->dev; |
547 | unsigned long flags; | 547 | unsigned long flags; |
548 | struct mmc_data *r_data = mrq->cmd->data; | 548 | struct mmc_data *r_data = mrq->cmd->data; |
549 | char *t_buffer = 0; | 549 | char *t_buffer = NULL; |
550 | 550 | ||
551 | if (r_data) { | 551 | if (r_data) { |
552 | t_buffer = kmap(r_data->sg->page); | 552 | t_buffer = kmap(r_data->sg->page); |
@@ -613,13 +613,13 @@ static void tifm_sd_end_cmd_nodma(void *data) | |||
613 | struct tifm_dev *sock = host->dev; | 613 | struct tifm_dev *sock = host->dev; |
614 | struct mmc_host *mmc = tifm_get_drvdata(sock); | 614 | struct mmc_host *mmc = tifm_get_drvdata(sock); |
615 | struct mmc_request *mrq; | 615 | struct mmc_request *mrq; |
616 | struct mmc_data *r_data = 0; | 616 | struct mmc_data *r_data = NULL; |
617 | unsigned long flags; | 617 | unsigned long flags; |
618 | 618 | ||
619 | spin_lock_irqsave(&sock->lock, flags); | 619 | spin_lock_irqsave(&sock->lock, flags); |
620 | 620 | ||
621 | mrq = host->req; | 621 | mrq = host->req; |
622 | host->req = 0; | 622 | host->req = NULL; |
623 | host->state = IDLE; | 623 | host->state = IDLE; |
624 | 624 | ||
625 | if (!mrq) { | 625 | if (!mrq) { |
@@ -644,7 +644,7 @@ static void tifm_sd_end_cmd_nodma(void *data) | |||
644 | r_data->bytes_xfered += r_data->blksz - | 644 | r_data->bytes_xfered += r_data->blksz - |
645 | readl(sock->addr + SOCK_MMCSD_BLOCK_LEN) + 1; | 645 | readl(sock->addr + SOCK_MMCSD_BLOCK_LEN) + 1; |
646 | } | 646 | } |
647 | host->buffer = 0; | 647 | host->buffer = NULL; |
648 | host->buffer_pos = 0; | 648 | host->buffer_pos = 0; |
649 | host->buffer_size = 0; | 649 | host->buffer_size = 0; |
650 | } | 650 | } |
@@ -895,7 +895,7 @@ static void tifm_sd_remove(struct tifm_dev *sock) | |||
895 | sock->addr + SOCK_DMA_FIFO_INT_ENABLE_CLEAR); | 895 | sock->addr + SOCK_DMA_FIFO_INT_ENABLE_CLEAR); |
896 | writel(0, sock->addr + SOCK_DMA_FIFO_INT_ENABLE_SET); | 896 | writel(0, sock->addr + SOCK_DMA_FIFO_INT_ENABLE_SET); |
897 | 897 | ||
898 | tifm_set_drvdata(sock, 0); | 898 | tifm_set_drvdata(sock, NULL); |
899 | mmc_free_host(mmc); | 899 | mmc_free_host(mmc); |
900 | } | 900 | } |
901 | 901 | ||
diff --git a/drivers/mtd/maps/physmap.c b/drivers/mtd/maps/physmap.c index bc7cc71788bc..d1717763f719 100644 --- a/drivers/mtd/maps/physmap.c +++ b/drivers/mtd/maps/physmap.c | |||
@@ -62,7 +62,7 @@ static int physmap_flash_remove(struct platform_device *dev) | |||
62 | } | 62 | } |
63 | 63 | ||
64 | if (info->map.virt != NULL) | 64 | if (info->map.virt != NULL) |
65 | iounmap((void *)info->map.virt); | 65 | iounmap(info->map.virt); |
66 | 66 | ||
67 | if (info->res != NULL) { | 67 | if (info->res != NULL) { |
68 | release_resource(info->res); | 68 | release_resource(info->res); |
diff --git a/drivers/mtd/nand/cs553x_nand.c b/drivers/mtd/nand/cs553x_nand.c index e0a1d386e581..94924d52a9b9 100644 --- a/drivers/mtd/nand/cs553x_nand.c +++ b/drivers/mtd/nand/cs553x_nand.c | |||
@@ -249,7 +249,7 @@ static int __init cs553x_init_one(int cs, int mmio, unsigned long adr) | |||
249 | goto out; | 249 | goto out; |
250 | 250 | ||
251 | out_ior: | 251 | out_ior: |
252 | iounmap((void *)this->IO_ADDR_R); | 252 | iounmap(this->IO_ADDR_R); |
253 | out_mtd: | 253 | out_mtd: |
254 | kfree(new_mtd); | 254 | kfree(new_mtd); |
255 | out: | 255 | out: |
diff --git a/drivers/net/3c509.c b/drivers/net/3c509.c index 7ad0a54779c4..f791bf026e51 100644 --- a/drivers/net/3c509.c +++ b/drivers/net/3c509.c | |||
@@ -912,16 +912,11 @@ el3_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
912 | static irqreturn_t | 912 | static irqreturn_t |
913 | el3_interrupt(int irq, void *dev_id) | 913 | el3_interrupt(int irq, void *dev_id) |
914 | { | 914 | { |
915 | struct net_device *dev = (struct net_device *)dev_id; | 915 | struct net_device *dev = dev_id; |
916 | struct el3_private *lp; | 916 | struct el3_private *lp; |
917 | int ioaddr, status; | 917 | int ioaddr, status; |
918 | int i = max_interrupt_work; | 918 | int i = max_interrupt_work; |
919 | 919 | ||
920 | if (dev == NULL) { | ||
921 | printk ("el3_interrupt(): irq %d for unknown device.\n", irq); | ||
922 | return IRQ_NONE; | ||
923 | } | ||
924 | |||
925 | lp = netdev_priv(dev); | 920 | lp = netdev_priv(dev); |
926 | spin_lock(&lp->lock); | 921 | spin_lock(&lp->lock); |
927 | 922 | ||
diff --git a/drivers/net/3c523.c b/drivers/net/3c523.c index 1c97271112d0..91849469b4f4 100644 --- a/drivers/net/3c523.c +++ b/drivers/net/3c523.c | |||
@@ -902,14 +902,11 @@ static void *alloc_rfa(struct net_device *dev, void *ptr) | |||
902 | static irqreturn_t | 902 | static irqreturn_t |
903 | elmc_interrupt(int irq, void *dev_id) | 903 | elmc_interrupt(int irq, void *dev_id) |
904 | { | 904 | { |
905 | struct net_device *dev = (struct net_device *) dev_id; | 905 | struct net_device *dev = dev_id; |
906 | unsigned short stat; | 906 | unsigned short stat; |
907 | struct priv *p; | 907 | struct priv *p; |
908 | 908 | ||
909 | if (dev == NULL) { | 909 | if (!netif_running(dev)) { |
910 | printk(KERN_ERR "elmc-interrupt: irq %d for unknown device.\n", irq); | ||
911 | return IRQ_NONE; | ||
912 | } else if (!netif_running(dev)) { | ||
913 | /* The 3c523 has this habit of generating interrupts during the | 910 | /* The 3c523 has this habit of generating interrupts during the |
914 | reset. I'm not sure if the ni52 has this same problem, but it's | 911 | reset. I'm not sure if the ni52 has this same problem, but it's |
915 | really annoying if we haven't finished initializing it. I was | 912 | really annoying if we haven't finished initializing it. I was |
diff --git a/drivers/net/3c527.c b/drivers/net/3c527.c index d516c3225ca4..f4aca5386add 100644 --- a/drivers/net/3c527.c +++ b/drivers/net/3c527.c | |||
@@ -1324,11 +1324,6 @@ static irqreturn_t mc32_interrupt(int irq, void *dev_id) | |||
1324 | int rx_event = 0; | 1324 | int rx_event = 0; |
1325 | int tx_event = 0; | 1325 | int tx_event = 0; |
1326 | 1326 | ||
1327 | if (dev == NULL) { | ||
1328 | printk(KERN_WARNING "%s: irq %d for unknown device.\n", cardname, irq); | ||
1329 | return IRQ_NONE; | ||
1330 | } | ||
1331 | |||
1332 | ioaddr = dev->base_addr; | 1327 | ioaddr = dev->base_addr; |
1333 | lp = netdev_priv(dev); | 1328 | lp = netdev_priv(dev); |
1334 | 1329 | ||
diff --git a/drivers/net/7990.c b/drivers/net/7990.c index 8e996b4a34ea..7733697f7776 100644 --- a/drivers/net/7990.c +++ b/drivers/net/7990.c | |||
@@ -674,7 +674,7 @@ void lance_poll(struct net_device *dev) | |||
674 | WRITERAP(lp, LE_CSR0); | 674 | WRITERAP(lp, LE_CSR0); |
675 | WRITERDP(lp, LE_C0_STRT); | 675 | WRITERDP(lp, LE_C0_STRT); |
676 | spin_unlock (&lp->devlock); | 676 | spin_unlock (&lp->devlock); |
677 | lance_interrupt(dev->irq, dev, NULL); | 677 | lance_interrupt(dev->irq, dev); |
678 | } | 678 | } |
679 | #endif | 679 | #endif |
680 | 680 | ||
diff --git a/drivers/net/8390.c b/drivers/net/8390.c index fa3442cb1a49..3d1c599ac3cb 100644 --- a/drivers/net/8390.c +++ b/drivers/net/8390.c | |||
@@ -406,14 +406,8 @@ irqreturn_t ei_interrupt(int irq, void *dev_id) | |||
406 | int interrupts, nr_serviced = 0; | 406 | int interrupts, nr_serviced = 0; |
407 | struct ei_device *ei_local; | 407 | struct ei_device *ei_local; |
408 | 408 | ||
409 | if (dev == NULL) | ||
410 | { | ||
411 | printk ("net_interrupt(): irq %d for unknown device.\n", irq); | ||
412 | return IRQ_NONE; | ||
413 | } | ||
414 | |||
415 | e8390_base = dev->base_addr; | 409 | e8390_base = dev->base_addr; |
416 | ei_local = (struct ei_device *) netdev_priv(dev); | 410 | ei_local = netdev_priv(dev); |
417 | 411 | ||
418 | /* | 412 | /* |
419 | * Protect the irq test too. | 413 | * Protect the irq test too. |
diff --git a/drivers/net/atp.c b/drivers/net/atp.c index 062f80e20874..2d306fcb7f36 100644 --- a/drivers/net/atp.c +++ b/drivers/net/atp.c | |||
@@ -598,17 +598,13 @@ static int atp_send_packet(struct sk_buff *skb, struct net_device *dev) | |||
598 | Handle the network interface interrupts. */ | 598 | Handle the network interface interrupts. */ |
599 | static irqreturn_t atp_interrupt(int irq, void *dev_instance) | 599 | static irqreturn_t atp_interrupt(int irq, void *dev_instance) |
600 | { | 600 | { |
601 | struct net_device *dev = (struct net_device *)dev_instance; | 601 | struct net_device *dev = dev_instance; |
602 | struct net_local *lp; | 602 | struct net_local *lp; |
603 | long ioaddr; | 603 | long ioaddr; |
604 | static int num_tx_since_rx; | 604 | static int num_tx_since_rx; |
605 | int boguscount = max_interrupt_work; | 605 | int boguscount = max_interrupt_work; |
606 | int handled = 0; | 606 | int handled = 0; |
607 | 607 | ||
608 | if (dev == NULL) { | ||
609 | printk(KERN_ERR "ATP_interrupt(): irq %d for unknown device.\n", irq); | ||
610 | return IRQ_NONE; | ||
611 | } | ||
612 | ioaddr = dev->base_addr; | 608 | ioaddr = dev->base_addr; |
613 | lp = netdev_priv(dev); | 609 | lp = netdev_priv(dev); |
614 | 610 | ||
diff --git a/drivers/net/chelsio/cpl5_cmd.h b/drivers/net/chelsio/cpl5_cmd.h index 27925e487bcf..5b357d9e88d6 100644 --- a/drivers/net/chelsio/cpl5_cmd.h +++ b/drivers/net/chelsio/cpl5_cmd.h | |||
@@ -108,7 +108,7 @@ struct cpl_tx_pkt_lso { | |||
108 | u8 iff:4; | 108 | u8 iff:4; |
109 | #endif | 109 | #endif |
110 | u16 vlan; | 110 | u16 vlan; |
111 | u32 len; | 111 | __be32 len; |
112 | 112 | ||
113 | u32 rsvd2; | 113 | u32 rsvd2; |
114 | u8 rsvd3; | 114 | u8 rsvd3; |
@@ -119,7 +119,7 @@ struct cpl_tx_pkt_lso { | |||
119 | u8 ip_hdr_words:4; | 119 | u8 ip_hdr_words:4; |
120 | u8 tcp_hdr_words:4; | 120 | u8 tcp_hdr_words:4; |
121 | #endif | 121 | #endif |
122 | u16 eth_type_mss; | 122 | __be16 eth_type_mss; |
123 | }; | 123 | }; |
124 | 124 | ||
125 | struct cpl_rx_pkt { | 125 | struct cpl_rx_pkt { |
@@ -138,7 +138,7 @@ struct cpl_rx_pkt { | |||
138 | u8 iff:4; | 138 | u8 iff:4; |
139 | #endif | 139 | #endif |
140 | u16 csum; | 140 | u16 csum; |
141 | u16 vlan; | 141 | __be16 vlan; |
142 | u16 len; | 142 | u16 len; |
143 | }; | 143 | }; |
144 | 144 | ||
diff --git a/drivers/net/de600.c b/drivers/net/de600.c index d9b006c9e367..690bb40b353d 100644 --- a/drivers/net/de600.c +++ b/drivers/net/de600.c | |||
@@ -265,12 +265,6 @@ static irqreturn_t de600_interrupt(int irq, void *dev_id) | |||
265 | int retrig = 0; | 265 | int retrig = 0; |
266 | int boguscount = 0; | 266 | int boguscount = 0; |
267 | 267 | ||
268 | /* This might just as well be deleted now, no crummy drivers present :-) */ | ||
269 | if ((dev == NULL) || (DE600_IRQ != irq)) { | ||
270 | printk(KERN_ERR "%s: bogus interrupt %d\n", dev?dev->name:"DE-600", irq); | ||
271 | return IRQ_NONE; | ||
272 | } | ||
273 | |||
274 | spin_lock(&de600_lock); | 268 | spin_lock(&de600_lock); |
275 | 269 | ||
276 | select_nic(); | 270 | select_nic(); |
diff --git a/drivers/net/declance.c b/drivers/net/declance.c index e179aa1c1ba0..00e2a8a134d7 100644 --- a/drivers/net/declance.c +++ b/drivers/net/declance.c | |||
@@ -696,7 +696,7 @@ out: | |||
696 | 696 | ||
697 | static irqreturn_t lance_dma_merr_int(const int irq, void *dev_id) | 697 | static irqreturn_t lance_dma_merr_int(const int irq, void *dev_id) |
698 | { | 698 | { |
699 | struct net_device *dev = (struct net_device *) dev_id; | 699 | struct net_device *dev = dev_id; |
700 | 700 | ||
701 | printk("%s: DMA error\n", dev->name); | 701 | printk("%s: DMA error\n", dev->name); |
702 | return IRQ_HANDLED; | 702 | return IRQ_HANDLED; |
@@ -704,7 +704,7 @@ static irqreturn_t lance_dma_merr_int(const int irq, void *dev_id) | |||
704 | 704 | ||
705 | static irqreturn_t lance_interrupt(const int irq, void *dev_id) | 705 | static irqreturn_t lance_interrupt(const int irq, void *dev_id) |
706 | { | 706 | { |
707 | struct net_device *dev = (struct net_device *) dev_id; | 707 | struct net_device *dev = dev_id; |
708 | struct lance_private *lp = netdev_priv(dev); | 708 | struct lance_private *lp = netdev_priv(dev); |
709 | volatile struct lance_regs *ll = lp->ll; | 709 | volatile struct lance_regs *ll = lp->ll; |
710 | int csr0; | 710 | int csr0; |
diff --git a/drivers/net/dgrs.c b/drivers/net/dgrs.c index 6b1234b09fb3..a79520295fd0 100644 --- a/drivers/net/dgrs.c +++ b/drivers/net/dgrs.c | |||
@@ -897,8 +897,8 @@ static int dgrs_ioctl(struct net_device *devN, struct ifreq *ifr, int cmd) | |||
897 | 897 | ||
898 | static irqreturn_t dgrs_intr(int irq, void *dev_id) | 898 | static irqreturn_t dgrs_intr(int irq, void *dev_id) |
899 | { | 899 | { |
900 | struct net_device *dev0 = (struct net_device *) dev_id; | 900 | struct net_device *dev0 = dev_id; |
901 | DGRS_PRIV *priv0 = (DGRS_PRIV *) dev0->priv; | 901 | DGRS_PRIV *priv0 = dev0->priv; |
902 | I596_CB *cbp; | 902 | I596_CB *cbp; |
903 | int cmd; | 903 | int cmd; |
904 | int i; | 904 | int i; |
diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c index 3641f3b4a2cc..615d2b14efa7 100644 --- a/drivers/net/dm9000.c +++ b/drivers/net/dm9000.c | |||
@@ -346,7 +346,7 @@ static void dm9000_timeout(struct net_device *dev) | |||
346 | static void dm9000_poll_controller(struct net_device *dev) | 346 | static void dm9000_poll_controller(struct net_device *dev) |
347 | { | 347 | { |
348 | disable_irq(dev->irq); | 348 | disable_irq(dev->irq); |
349 | dm9000_interrupt(dev->irq,dev,NULL); | 349 | dm9000_interrupt(dev->irq,dev); |
350 | enable_irq(dev->irq); | 350 | enable_irq(dev->irq); |
351 | } | 351 | } |
352 | #endif | 352 | #endif |
diff --git a/drivers/net/eepro.c b/drivers/net/eepro.c index aae454aaa1c6..a4eb0dc99ecf 100644 --- a/drivers/net/eepro.c +++ b/drivers/net/eepro.c | |||
@@ -994,16 +994,6 @@ static int eepro_open(struct net_device *dev) | |||
994 | return -EAGAIN; | 994 | return -EAGAIN; |
995 | } | 995 | } |
996 | 996 | ||
997 | #ifdef irq2dev_map | ||
998 | if (((irq2dev_map[dev->irq] != 0) | ||
999 | || (irq2dev_map[dev->irq] = dev) == 0) && | ||
1000 | (irq2dev_map[dev->irq]!=dev)) { | ||
1001 | /* printk("%s: IRQ map wrong\n", dev->name); */ | ||
1002 | free_irq(dev->irq, dev); | ||
1003 | return -EAGAIN; | ||
1004 | } | ||
1005 | #endif | ||
1006 | |||
1007 | /* Initialize the 82595. */ | 997 | /* Initialize the 82595. */ |
1008 | 998 | ||
1009 | eepro_sw2bank2(ioaddr); /* be CAREFUL, BANK 2 now */ | 999 | eepro_sw2bank2(ioaddr); /* be CAREFUL, BANK 2 now */ |
@@ -1198,17 +1188,11 @@ static int eepro_send_packet(struct sk_buff *skb, struct net_device *dev) | |||
1198 | static irqreturn_t | 1188 | static irqreturn_t |
1199 | eepro_interrupt(int irq, void *dev_id) | 1189 | eepro_interrupt(int irq, void *dev_id) |
1200 | { | 1190 | { |
1201 | struct net_device *dev = (struct net_device *)dev_id; | 1191 | struct net_device *dev = dev_id; |
1202 | /* (struct net_device *)(irq2dev_map[irq]);*/ | ||
1203 | struct eepro_local *lp; | 1192 | struct eepro_local *lp; |
1204 | int ioaddr, status, boguscount = 20; | 1193 | int ioaddr, status, boguscount = 20; |
1205 | int handled = 0; | 1194 | int handled = 0; |
1206 | 1195 | ||
1207 | if (dev == NULL) { | ||
1208 | printk (KERN_ERR "eepro_interrupt(): irq %d for unknown device.\\n", irq); | ||
1209 | return IRQ_NONE; | ||
1210 | } | ||
1211 | |||
1212 | lp = netdev_priv(dev); | 1196 | lp = netdev_priv(dev); |
1213 | 1197 | ||
1214 | spin_lock(&lp->lock); | 1198 | spin_lock(&lp->lock); |
@@ -1288,10 +1272,6 @@ static int eepro_close(struct net_device *dev) | |||
1288 | /* release the interrupt */ | 1272 | /* release the interrupt */ |
1289 | free_irq(dev->irq, dev); | 1273 | free_irq(dev->irq, dev); |
1290 | 1274 | ||
1291 | #ifdef irq2dev_map | ||
1292 | irq2dev_map[dev->irq] = 0; | ||
1293 | #endif | ||
1294 | |||
1295 | /* Update the statistics here. What statistics? */ | 1275 | /* Update the statistics here. What statistics? */ |
1296 | 1276 | ||
1297 | return 0; | 1277 | return 0; |
diff --git a/drivers/net/eexpress.c b/drivers/net/eexpress.c index 05ca730fe81e..e14be020e562 100644 --- a/drivers/net/eexpress.c +++ b/drivers/net/eexpress.c | |||
@@ -796,13 +796,6 @@ static irqreturn_t eexp_irq(int irq, void *dev_info) | |||
796 | unsigned short ioaddr,status,ack_cmd; | 796 | unsigned short ioaddr,status,ack_cmd; |
797 | unsigned short old_read_ptr, old_write_ptr; | 797 | unsigned short old_read_ptr, old_write_ptr; |
798 | 798 | ||
799 | if (dev==NULL) | ||
800 | { | ||
801 | printk(KERN_WARNING "eexpress: irq %d for unknown device\n", | ||
802 | irq); | ||
803 | return IRQ_NONE; | ||
804 | } | ||
805 | |||
806 | lp = netdev_priv(dev); | 799 | lp = netdev_priv(dev); |
807 | ioaddr = dev->base_addr; | 800 | ioaddr = dev->base_addr; |
808 | 801 | ||
diff --git a/drivers/net/irda/ali-ircc.c b/drivers/net/irda/ali-ircc.c index 971e2dee1e6b..cebf8c374bc5 100644 --- a/drivers/net/irda/ali-ircc.c +++ b/drivers/net/irda/ali-ircc.c | |||
@@ -662,19 +662,13 @@ static int ali_ircc_read_dongle_id (int i, chipio_t *info) | |||
662 | */ | 662 | */ |
663 | static irqreturn_t ali_ircc_interrupt(int irq, void *dev_id) | 663 | static irqreturn_t ali_ircc_interrupt(int irq, void *dev_id) |
664 | { | 664 | { |
665 | struct net_device *dev = (struct net_device *) dev_id; | 665 | struct net_device *dev = dev_id; |
666 | struct ali_ircc_cb *self; | 666 | struct ali_ircc_cb *self; |
667 | int ret; | 667 | int ret; |
668 | 668 | ||
669 | IRDA_DEBUG(2, "%s(), ---------------- Start ----------------\n", __FUNCTION__); | 669 | IRDA_DEBUG(2, "%s(), ---------------- Start ----------------\n", __FUNCTION__); |
670 | 670 | ||
671 | if (!dev) { | 671 | self = dev->priv; |
672 | IRDA_WARNING("%s: irq %d for unknown device.\n", | ||
673 | ALI_IRCC_DRIVER_NAME, irq); | ||
674 | return IRQ_NONE; | ||
675 | } | ||
676 | |||
677 | self = (struct ali_ircc_cb *) dev->priv; | ||
678 | 672 | ||
679 | spin_lock(&self->lock); | 673 | spin_lock(&self->lock); |
680 | 674 | ||
diff --git a/drivers/net/irda/donauboe.c b/drivers/net/irda/donauboe.c index 7a9128181e68..16620bd97fbf 100644 --- a/drivers/net/irda/donauboe.c +++ b/drivers/net/irda/donauboe.c | |||
@@ -657,12 +657,6 @@ toshoboe_makemttpacket (struct toshoboe_cb *self, void *buf, int mtt) | |||
657 | return xbofs; | 657 | return xbofs; |
658 | } | 658 | } |
659 | 659 | ||
660 | static int toshoboe_invalid_dev(int irq) | ||
661 | { | ||
662 | printk (KERN_WARNING DRIVER_NAME ": irq %d for unknown device.\n", irq); | ||
663 | return 1; | ||
664 | } | ||
665 | |||
666 | #ifdef USE_PROBE | 660 | #ifdef USE_PROBE |
667 | /***********************************************************************/ | 661 | /***********************************************************************/ |
668 | /* Probe code */ | 662 | /* Probe code */ |
@@ -711,12 +705,9 @@ stuff_byte (__u8 byte, __u8 * buf) | |||
711 | static irqreturn_t | 705 | static irqreturn_t |
712 | toshoboe_probeinterrupt (int irq, void *dev_id) | 706 | toshoboe_probeinterrupt (int irq, void *dev_id) |
713 | { | 707 | { |
714 | struct toshoboe_cb *self = (struct toshoboe_cb *) dev_id; | 708 | struct toshoboe_cb *self = dev_id; |
715 | __u8 irqstat; | 709 | __u8 irqstat; |
716 | 710 | ||
717 | if (self == NULL && toshoboe_invalid_dev(irq)) | ||
718 | return IRQ_NONE; | ||
719 | |||
720 | irqstat = INB (OBOE_ISR); | 711 | irqstat = INB (OBOE_ISR); |
721 | 712 | ||
722 | /* was it us */ | 713 | /* was it us */ |
@@ -1163,13 +1154,10 @@ dumpbufs(skb->data,skb->len,'>'); | |||
1163 | static irqreturn_t | 1154 | static irqreturn_t |
1164 | toshoboe_interrupt (int irq, void *dev_id) | 1155 | toshoboe_interrupt (int irq, void *dev_id) |
1165 | { | 1156 | { |
1166 | struct toshoboe_cb *self = (struct toshoboe_cb *) dev_id; | 1157 | struct toshoboe_cb *self = dev_id; |
1167 | __u8 irqstat; | 1158 | __u8 irqstat; |
1168 | struct sk_buff *skb = NULL; | 1159 | struct sk_buff *skb = NULL; |
1169 | 1160 | ||
1170 | if (self == NULL && toshoboe_invalid_dev(irq)) | ||
1171 | return IRQ_NONE; | ||
1172 | |||
1173 | irqstat = INB (OBOE_ISR); | 1161 | irqstat = INB (OBOE_ISR); |
1174 | 1162 | ||
1175 | /* was it us */ | 1163 | /* was it us */ |
@@ -1357,13 +1345,11 @@ toshoboe_net_open (struct net_device *dev) | |||
1357 | { | 1345 | { |
1358 | struct toshoboe_cb *self; | 1346 | struct toshoboe_cb *self; |
1359 | unsigned long flags; | 1347 | unsigned long flags; |
1348 | int rc; | ||
1360 | 1349 | ||
1361 | IRDA_DEBUG (4, "%s()\n", __FUNCTION__); | 1350 | IRDA_DEBUG (4, "%s()\n", __FUNCTION__); |
1362 | 1351 | ||
1363 | IRDA_ASSERT (dev != NULL, return -1; ); | 1352 | self = netdev_priv(dev); |
1364 | self = (struct toshoboe_cb *) dev->priv; | ||
1365 | |||
1366 | IRDA_ASSERT (self != NULL, return 0; ); | ||
1367 | 1353 | ||
1368 | if (self->async) | 1354 | if (self->async) |
1369 | return -EBUSY; | 1355 | return -EBUSY; |
@@ -1371,11 +1357,10 @@ toshoboe_net_open (struct net_device *dev) | |||
1371 | if (self->stopped) | 1357 | if (self->stopped) |
1372 | return 0; | 1358 | return 0; |
1373 | 1359 | ||
1374 | if (request_irq (self->io.irq, toshoboe_interrupt, | 1360 | rc = request_irq (self->io.irq, toshoboe_interrupt, |
1375 | IRQF_SHARED | IRQF_DISABLED, dev->name, (void *) self)) | 1361 | IRQF_SHARED | IRQF_DISABLED, dev->name, self); |
1376 | { | 1362 | if (rc) |
1377 | return -EAGAIN; | 1363 | return rc; |
1378 | } | ||
1379 | 1364 | ||
1380 | spin_lock_irqsave(&self->spinlock, flags); | 1365 | spin_lock_irqsave(&self->spinlock, flags); |
1381 | toshoboe_startchip (self); | 1366 | toshoboe_startchip (self); |
diff --git a/drivers/net/irda/irport.c b/drivers/net/irda/irport.c index 6ea78ececca7..654a68b490ae 100644 --- a/drivers/net/irda/irport.c +++ b/drivers/net/irda/irport.c | |||
@@ -766,18 +766,14 @@ static inline void irport_receive(struct irport_cb *self) | |||
766 | */ | 766 | */ |
767 | static irqreturn_t irport_interrupt(int irq, void *dev_id) | 767 | static irqreturn_t irport_interrupt(int irq, void *dev_id) |
768 | { | 768 | { |
769 | struct net_device *dev = (struct net_device *) dev_id; | 769 | struct net_device *dev = dev_id; |
770 | struct irport_cb *self; | 770 | struct irport_cb *self; |
771 | int boguscount = 0; | 771 | int boguscount = 0; |
772 | int iobase; | 772 | int iobase; |
773 | int iir, lsr; | 773 | int iir, lsr; |
774 | int handled = 0; | 774 | int handled = 0; |
775 | 775 | ||
776 | if (!dev) { | 776 | self = dev->priv; |
777 | IRDA_WARNING("%s() irq %d for unknown device.\n", __FUNCTION__, irq); | ||
778 | return IRQ_NONE; | ||
779 | } | ||
780 | self = (struct irport_cb *) dev->priv; | ||
781 | 777 | ||
782 | spin_lock(&self->lock); | 778 | spin_lock(&self->lock); |
783 | 779 | ||
diff --git a/drivers/net/irda/irport.h b/drivers/net/irda/irport.h index 4393168347e3..3f46b84c6c85 100644 --- a/drivers/net/irda/irport.h +++ b/drivers/net/irda/irport.h | |||
@@ -74,7 +74,7 @@ struct irport_cb { | |||
74 | /* For piggyback drivers */ | 74 | /* For piggyback drivers */ |
75 | void *priv; | 75 | void *priv; |
76 | void (*change_speed)(void *priv, __u32 speed); | 76 | void (*change_speed)(void *priv, __u32 speed); |
77 | int (*interrupt)(int irq, void *dev_id); | 77 | irqreturn_t (*interrupt)(int irq, void *dev_id); |
78 | }; | 78 | }; |
79 | 79 | ||
80 | #endif /* IRPORT_H */ | 80 | #endif /* IRPORT_H */ |
diff --git a/drivers/net/irda/nsc-ircc.c b/drivers/net/irda/nsc-ircc.c index ea12e999814a..29b5ccd29d0b 100644 --- a/drivers/net/irda/nsc-ircc.c +++ b/drivers/net/irda/nsc-ircc.c | |||
@@ -2068,17 +2068,12 @@ static void nsc_ircc_fir_interrupt(struct nsc_ircc_cb *self, int iobase, | |||
2068 | */ | 2068 | */ |
2069 | static irqreturn_t nsc_ircc_interrupt(int irq, void *dev_id) | 2069 | static irqreturn_t nsc_ircc_interrupt(int irq, void *dev_id) |
2070 | { | 2070 | { |
2071 | struct net_device *dev = (struct net_device *) dev_id; | 2071 | struct net_device *dev = dev_id; |
2072 | struct nsc_ircc_cb *self; | 2072 | struct nsc_ircc_cb *self; |
2073 | __u8 bsr, eir; | 2073 | __u8 bsr, eir; |
2074 | int iobase; | 2074 | int iobase; |
2075 | 2075 | ||
2076 | if (!dev) { | 2076 | self = dev->priv; |
2077 | IRDA_WARNING("%s: irq %d for unknown device.\n", | ||
2078 | driver_name, irq); | ||
2079 | return IRQ_NONE; | ||
2080 | } | ||
2081 | self = (struct nsc_ircc_cb *) dev->priv; | ||
2082 | 2077 | ||
2083 | spin_lock(&self->lock); | 2078 | spin_lock(&self->lock); |
2084 | 2079 | ||
diff --git a/drivers/net/irda/w83977af_ir.c b/drivers/net/irda/w83977af_ir.c index b4fb92a7baa8..4212657fa4f9 100644 --- a/drivers/net/irda/w83977af_ir.c +++ b/drivers/net/irda/w83977af_ir.c | |||
@@ -1113,17 +1113,12 @@ static __u8 w83977af_fir_interrupt(struct w83977af_ir *self, int isr) | |||
1113 | */ | 1113 | */ |
1114 | static irqreturn_t w83977af_interrupt(int irq, void *dev_id) | 1114 | static irqreturn_t w83977af_interrupt(int irq, void *dev_id) |
1115 | { | 1115 | { |
1116 | struct net_device *dev = (struct net_device *) dev_id; | 1116 | struct net_device *dev = dev_id; |
1117 | struct w83977af_ir *self; | 1117 | struct w83977af_ir *self; |
1118 | __u8 set, icr, isr; | 1118 | __u8 set, icr, isr; |
1119 | int iobase; | 1119 | int iobase; |
1120 | 1120 | ||
1121 | if (!dev) { | 1121 | self = dev->priv; |
1122 | printk(KERN_WARNING "%s: irq %d for unknown device.\n", | ||
1123 | driver_name, irq); | ||
1124 | return IRQ_NONE; | ||
1125 | } | ||
1126 | self = (struct w83977af_ir *) dev->priv; | ||
1127 | 1122 | ||
1128 | iobase = self->io.fir_base; | 1123 | iobase = self->io.fir_base; |
1129 | 1124 | ||
diff --git a/drivers/net/lance.c b/drivers/net/lance.c index 7afac47e59ad..6efbd499d752 100644 --- a/drivers/net/lance.c +++ b/drivers/net/lance.c | |||
@@ -1019,11 +1019,6 @@ static irqreturn_t lance_interrupt(int irq, void *dev_id) | |||
1019 | int csr0, ioaddr, boguscnt=10; | 1019 | int csr0, ioaddr, boguscnt=10; |
1020 | int must_restart; | 1020 | int must_restart; |
1021 | 1021 | ||
1022 | if (dev == NULL) { | ||
1023 | printk ("lance_interrupt(): irq %d for unknown device.\n", irq); | ||
1024 | return IRQ_NONE; | ||
1025 | } | ||
1026 | |||
1027 | ioaddr = dev->base_addr; | 1022 | ioaddr = dev->base_addr; |
1028 | lp = dev->priv; | 1023 | lp = dev->priv; |
1029 | 1024 | ||
diff --git a/drivers/net/lasi_82596.c b/drivers/net/lasi_82596.c index 8cbd940f0ac2..f4d815bca643 100644 --- a/drivers/net/lasi_82596.c +++ b/drivers/net/lasi_82596.c | |||
@@ -1252,7 +1252,7 @@ static int __devinit i82596_probe(struct net_device *dev, | |||
1252 | static void i596_poll_controller(struct net_device *dev) | 1252 | static void i596_poll_controller(struct net_device *dev) |
1253 | { | 1253 | { |
1254 | disable_irq(dev->irq); | 1254 | disable_irq(dev->irq); |
1255 | i596_interrupt(dev->irq, dev, NULL); | 1255 | i596_interrupt(dev->irq, dev); |
1256 | enable_irq(dev->irq); | 1256 | enable_irq(dev->irq); |
1257 | } | 1257 | } |
1258 | #endif | 1258 | #endif |
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c index d26a819a9735..2ffa3a59e704 100644 --- a/drivers/net/mv643xx_eth.c +++ b/drivers/net/mv643xx_eth.c | |||
@@ -1251,7 +1251,7 @@ static void mv643xx_netpoll(struct net_device *netdev) | |||
1251 | /* wait for previous write to complete */ | 1251 | /* wait for previous write to complete */ |
1252 | mv_read(MV643XX_ETH_INTERRUPT_MASK_REG(port_num)); | 1252 | mv_read(MV643XX_ETH_INTERRUPT_MASK_REG(port_num)); |
1253 | 1253 | ||
1254 | mv643xx_eth_int_handler(netdev->irq, netdev, NULL); | 1254 | mv643xx_eth_int_handler(netdev->irq, netdev); |
1255 | 1255 | ||
1256 | mv_write(MV643XX_ETH_INTERRUPT_MASK_REG(port_num), ETH_INT_UNMASK_ALL); | 1256 | mv_write(MV643XX_ETH_INTERRUPT_MASK_REG(port_num), ETH_INT_UNMASK_ALL); |
1257 | } | 1257 | } |
diff --git a/drivers/net/pcmcia/axnet_cs.c b/drivers/net/pcmcia/axnet_cs.c index e5f366910914..5ddd5742f779 100644 --- a/drivers/net/pcmcia/axnet_cs.c +++ b/drivers/net/pcmcia/axnet_cs.c | |||
@@ -1201,14 +1201,8 @@ static irqreturn_t ax_interrupt(int irq, void *dev_id) | |||
1201 | struct ei_device *ei_local; | 1201 | struct ei_device *ei_local; |
1202 | int handled = 0; | 1202 | int handled = 0; |
1203 | 1203 | ||
1204 | if (dev == NULL) | ||
1205 | { | ||
1206 | printk ("net_interrupt(): irq %d for unknown device.\n", irq); | ||
1207 | return IRQ_NONE; | ||
1208 | } | ||
1209 | |||
1210 | e8390_base = dev->base_addr; | 1204 | e8390_base = dev->base_addr; |
1211 | ei_local = (struct ei_device *) netdev_priv(dev); | 1205 | ei_local = netdev_priv(dev); |
1212 | 1206 | ||
1213 | /* | 1207 | /* |
1214 | * Protect the irq test too. | 1208 | * Protect the irq test too. |
diff --git a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c index c73e2f210774..36f9d988278f 100644 --- a/drivers/net/pcnet32.c +++ b/drivers/net/pcnet32.c | |||
@@ -2569,13 +2569,6 @@ pcnet32_interrupt(int irq, void *dev_id) | |||
2569 | u16 csr0; | 2569 | u16 csr0; |
2570 | int boguscnt = max_interrupt_work; | 2570 | int boguscnt = max_interrupt_work; |
2571 | 2571 | ||
2572 | if (!dev) { | ||
2573 | if (pcnet32_debug & NETIF_MSG_INTR) | ||
2574 | printk(KERN_DEBUG "%s(): irq %d for unknown device\n", | ||
2575 | __FUNCTION__, irq); | ||
2576 | return IRQ_NONE; | ||
2577 | } | ||
2578 | |||
2579 | ioaddr = dev->base_addr; | 2572 | ioaddr = dev->base_addr; |
2580 | lp = dev->priv; | 2573 | lp = dev->priv; |
2581 | 2574 | ||
diff --git a/drivers/net/plip.c b/drivers/net/plip.c index c0b333d2917a..71afb274498f 100644 --- a/drivers/net/plip.c +++ b/drivers/net/plip.c | |||
@@ -909,11 +909,6 @@ plip_interrupt(int irq, void *dev_id) | |||
909 | struct plip_local *rcv; | 909 | struct plip_local *rcv; |
910 | unsigned char c0; | 910 | unsigned char c0; |
911 | 911 | ||
912 | if (dev == NULL) { | ||
913 | printk(KERN_DEBUG "plip_interrupt: irq %d for unknown device.\n", irq); | ||
914 | return; | ||
915 | } | ||
916 | |||
917 | nl = netdev_priv(dev); | 912 | nl = netdev_priv(dev); |
918 | rcv = &nl->rcv_data; | 913 | rcv = &nl->rcv_data; |
919 | 914 | ||
diff --git a/drivers/net/s2io.h b/drivers/net/s2io.h index 72f52dc98f53..12b719f4d00f 100644 --- a/drivers/net/s2io.h +++ b/drivers/net/s2io.h | |||
@@ -116,179 +116,179 @@ typedef struct { | |||
116 | /* The statistics block of Xena */ | 116 | /* The statistics block of Xena */ |
117 | typedef struct stat_block { | 117 | typedef struct stat_block { |
118 | /* Tx MAC statistics counters. */ | 118 | /* Tx MAC statistics counters. */ |
119 | u32 tmac_data_octets; | 119 | __le32 tmac_data_octets; |
120 | u32 tmac_frms; | 120 | __le32 tmac_frms; |
121 | u64 tmac_drop_frms; | 121 | __le64 tmac_drop_frms; |
122 | u32 tmac_bcst_frms; | 122 | __le32 tmac_bcst_frms; |
123 | u32 tmac_mcst_frms; | 123 | __le32 tmac_mcst_frms; |
124 | u64 tmac_pause_ctrl_frms; | 124 | __le64 tmac_pause_ctrl_frms; |
125 | u32 tmac_ucst_frms; | 125 | __le32 tmac_ucst_frms; |
126 | u32 tmac_ttl_octets; | 126 | __le32 tmac_ttl_octets; |
127 | u32 tmac_any_err_frms; | 127 | __le32 tmac_any_err_frms; |
128 | u32 tmac_nucst_frms; | 128 | __le32 tmac_nucst_frms; |
129 | u64 tmac_ttl_less_fb_octets; | 129 | __le64 tmac_ttl_less_fb_octets; |
130 | u64 tmac_vld_ip_octets; | 130 | __le64 tmac_vld_ip_octets; |
131 | u32 tmac_drop_ip; | 131 | __le32 tmac_drop_ip; |
132 | u32 tmac_vld_ip; | 132 | __le32 tmac_vld_ip; |
133 | u32 tmac_rst_tcp; | 133 | __le32 tmac_rst_tcp; |
134 | u32 tmac_icmp; | 134 | __le32 tmac_icmp; |
135 | u64 tmac_tcp; | 135 | __le64 tmac_tcp; |
136 | u32 reserved_0; | 136 | __le32 reserved_0; |
137 | u32 tmac_udp; | 137 | __le32 tmac_udp; |
138 | 138 | ||
139 | /* Rx MAC Statistics counters. */ | 139 | /* Rx MAC Statistics counters. */ |
140 | u32 rmac_data_octets; | 140 | __le32 rmac_data_octets; |
141 | u32 rmac_vld_frms; | 141 | __le32 rmac_vld_frms; |
142 | u64 rmac_fcs_err_frms; | 142 | __le64 rmac_fcs_err_frms; |
143 | u64 rmac_drop_frms; | 143 | __le64 rmac_drop_frms; |
144 | u32 rmac_vld_bcst_frms; | 144 | __le32 rmac_vld_bcst_frms; |
145 | u32 rmac_vld_mcst_frms; | 145 | __le32 rmac_vld_mcst_frms; |
146 | u32 rmac_out_rng_len_err_frms; | 146 | __le32 rmac_out_rng_len_err_frms; |
147 | u32 rmac_in_rng_len_err_frms; | 147 | __le32 rmac_in_rng_len_err_frms; |
148 | u64 rmac_long_frms; | 148 | __le64 rmac_long_frms; |
149 | u64 rmac_pause_ctrl_frms; | 149 | __le64 rmac_pause_ctrl_frms; |
150 | u64 rmac_unsup_ctrl_frms; | 150 | __le64 rmac_unsup_ctrl_frms; |
151 | u32 rmac_accepted_ucst_frms; | 151 | __le32 rmac_accepted_ucst_frms; |
152 | u32 rmac_ttl_octets; | 152 | __le32 rmac_ttl_octets; |
153 | u32 rmac_discarded_frms; | 153 | __le32 rmac_discarded_frms; |
154 | u32 rmac_accepted_nucst_frms; | 154 | __le32 rmac_accepted_nucst_frms; |
155 | u32 reserved_1; | 155 | __le32 reserved_1; |
156 | u32 rmac_drop_events; | 156 | __le32 rmac_drop_events; |
157 | u64 rmac_ttl_less_fb_octets; | 157 | __le64 rmac_ttl_less_fb_octets; |
158 | u64 rmac_ttl_frms; | 158 | __le64 rmac_ttl_frms; |
159 | u64 reserved_2; | 159 | __le64 reserved_2; |
160 | u32 rmac_usized_frms; | 160 | __le32 rmac_usized_frms; |
161 | u32 reserved_3; | 161 | __le32 reserved_3; |
162 | u32 rmac_frag_frms; | 162 | __le32 rmac_frag_frms; |
163 | u32 rmac_osized_frms; | 163 | __le32 rmac_osized_frms; |
164 | u32 reserved_4; | 164 | __le32 reserved_4; |
165 | u32 rmac_jabber_frms; | 165 | __le32 rmac_jabber_frms; |
166 | u64 rmac_ttl_64_frms; | 166 | __le64 rmac_ttl_64_frms; |
167 | u64 rmac_ttl_65_127_frms; | 167 | __le64 rmac_ttl_65_127_frms; |
168 | u64 reserved_5; | 168 | __le64 reserved_5; |
169 | u64 rmac_ttl_128_255_frms; | 169 | __le64 rmac_ttl_128_255_frms; |
170 | u64 rmac_ttl_256_511_frms; | 170 | __le64 rmac_ttl_256_511_frms; |
171 | u64 reserved_6; | 171 | __le64 reserved_6; |
172 | u64 rmac_ttl_512_1023_frms; | 172 | __le64 rmac_ttl_512_1023_frms; |
173 | u64 rmac_ttl_1024_1518_frms; | 173 | __le64 rmac_ttl_1024_1518_frms; |
174 | u32 rmac_ip; | 174 | __le32 rmac_ip; |
175 | u32 reserved_7; | 175 | __le32 reserved_7; |
176 | u64 rmac_ip_octets; | 176 | __le64 rmac_ip_octets; |
177 | u32 rmac_drop_ip; | 177 | __le32 rmac_drop_ip; |
178 | u32 rmac_hdr_err_ip; | 178 | __le32 rmac_hdr_err_ip; |
179 | u32 reserved_8; | 179 | __le32 reserved_8; |
180 | u32 rmac_icmp; | 180 | __le32 rmac_icmp; |
181 | u64 rmac_tcp; | 181 | __le64 rmac_tcp; |
182 | u32 rmac_err_drp_udp; | 182 | __le32 rmac_err_drp_udp; |
183 | u32 rmac_udp; | 183 | __le32 rmac_udp; |
184 | u64 rmac_xgmii_err_sym; | 184 | __le64 rmac_xgmii_err_sym; |
185 | u64 rmac_frms_q0; | 185 | __le64 rmac_frms_q0; |
186 | u64 rmac_frms_q1; | 186 | __le64 rmac_frms_q1; |
187 | u64 rmac_frms_q2; | 187 | __le64 rmac_frms_q2; |
188 | u64 rmac_frms_q3; | 188 | __le64 rmac_frms_q3; |
189 | u64 rmac_frms_q4; | 189 | __le64 rmac_frms_q4; |
190 | u64 rmac_frms_q5; | 190 | __le64 rmac_frms_q5; |
191 | u64 rmac_frms_q6; | 191 | __le64 rmac_frms_q6; |
192 | u64 rmac_frms_q7; | 192 | __le64 rmac_frms_q7; |
193 | u16 rmac_full_q3; | 193 | __le16 rmac_full_q3; |
194 | u16 rmac_full_q2; | 194 | __le16 rmac_full_q2; |
195 | u16 rmac_full_q1; | 195 | __le16 rmac_full_q1; |
196 | u16 rmac_full_q0; | 196 | __le16 rmac_full_q0; |
197 | u16 rmac_full_q7; | 197 | __le16 rmac_full_q7; |
198 | u16 rmac_full_q6; | 198 | __le16 rmac_full_q6; |
199 | u16 rmac_full_q5; | 199 | __le16 rmac_full_q5; |
200 | u16 rmac_full_q4; | 200 | __le16 rmac_full_q4; |
201 | u32 reserved_9; | 201 | __le32 reserved_9; |
202 | u32 rmac_pause_cnt; | 202 | __le32 rmac_pause_cnt; |
203 | u64 rmac_xgmii_data_err_cnt; | 203 | __le64 rmac_xgmii_data_err_cnt; |
204 | u64 rmac_xgmii_ctrl_err_cnt; | 204 | __le64 rmac_xgmii_ctrl_err_cnt; |
205 | u32 rmac_err_tcp; | 205 | __le32 rmac_err_tcp; |
206 | u32 rmac_accepted_ip; | 206 | __le32 rmac_accepted_ip; |
207 | 207 | ||
208 | /* PCI/PCI-X Read transaction statistics. */ | 208 | /* PCI/PCI-X Read transaction statistics. */ |
209 | u32 new_rd_req_cnt; | 209 | __le32 new_rd_req_cnt; |
210 | u32 rd_req_cnt; | 210 | __le32 rd_req_cnt; |
211 | u32 rd_rtry_cnt; | 211 | __le32 rd_rtry_cnt; |
212 | u32 new_rd_req_rtry_cnt; | 212 | __le32 new_rd_req_rtry_cnt; |
213 | 213 | ||
214 | /* PCI/PCI-X Write/Read transaction statistics. */ | 214 | /* PCI/PCI-X Write/Read transaction statistics. */ |
215 | u32 wr_req_cnt; | 215 | __le32 wr_req_cnt; |
216 | u32 wr_rtry_rd_ack_cnt; | 216 | __le32 wr_rtry_rd_ack_cnt; |
217 | u32 new_wr_req_rtry_cnt; | 217 | __le32 new_wr_req_rtry_cnt; |
218 | u32 new_wr_req_cnt; | 218 | __le32 new_wr_req_cnt; |
219 | u32 wr_disc_cnt; | 219 | __le32 wr_disc_cnt; |
220 | u32 wr_rtry_cnt; | 220 | __le32 wr_rtry_cnt; |
221 | 221 | ||
222 | /* PCI/PCI-X Write / DMA Transaction statistics. */ | 222 | /* PCI/PCI-X Write / DMA Transaction statistics. */ |
223 | u32 txp_wr_cnt; | 223 | __le32 txp_wr_cnt; |
224 | u32 rd_rtry_wr_ack_cnt; | 224 | __le32 rd_rtry_wr_ack_cnt; |
225 | u32 txd_wr_cnt; | 225 | __le32 txd_wr_cnt; |
226 | u32 txd_rd_cnt; | 226 | __le32 txd_rd_cnt; |
227 | u32 rxd_wr_cnt; | 227 | __le32 rxd_wr_cnt; |
228 | u32 rxd_rd_cnt; | 228 | __le32 rxd_rd_cnt; |
229 | u32 rxf_wr_cnt; | 229 | __le32 rxf_wr_cnt; |
230 | u32 txf_rd_cnt; | 230 | __le32 txf_rd_cnt; |
231 | 231 | ||
232 | /* Tx MAC statistics overflow counters. */ | 232 | /* Tx MAC statistics overflow counters. */ |
233 | u32 tmac_data_octets_oflow; | 233 | __le32 tmac_data_octets_oflow; |
234 | u32 tmac_frms_oflow; | 234 | __le32 tmac_frms_oflow; |
235 | u32 tmac_bcst_frms_oflow; | 235 | __le32 tmac_bcst_frms_oflow; |
236 | u32 tmac_mcst_frms_oflow; | 236 | __le32 tmac_mcst_frms_oflow; |
237 | u32 tmac_ucst_frms_oflow; | 237 | __le32 tmac_ucst_frms_oflow; |
238 | u32 tmac_ttl_octets_oflow; | 238 | __le32 tmac_ttl_octets_oflow; |
239 | u32 tmac_any_err_frms_oflow; | 239 | __le32 tmac_any_err_frms_oflow; |
240 | u32 tmac_nucst_frms_oflow; | 240 | __le32 tmac_nucst_frms_oflow; |
241 | u64 tmac_vlan_frms; | 241 | __le64 tmac_vlan_frms; |
242 | u32 tmac_drop_ip_oflow; | 242 | __le32 tmac_drop_ip_oflow; |
243 | u32 tmac_vld_ip_oflow; | 243 | __le32 tmac_vld_ip_oflow; |
244 | u32 tmac_rst_tcp_oflow; | 244 | __le32 tmac_rst_tcp_oflow; |
245 | u32 tmac_icmp_oflow; | 245 | __le32 tmac_icmp_oflow; |
246 | u32 tpa_unknown_protocol; | 246 | __le32 tpa_unknown_protocol; |
247 | u32 tmac_udp_oflow; | 247 | __le32 tmac_udp_oflow; |
248 | u32 reserved_10; | 248 | __le32 reserved_10; |
249 | u32 tpa_parse_failure; | 249 | __le32 tpa_parse_failure; |
250 | 250 | ||
251 | /* Rx MAC Statistics overflow counters. */ | 251 | /* Rx MAC Statistics overflow counters. */ |
252 | u32 rmac_data_octets_oflow; | 252 | __le32 rmac_data_octets_oflow; |
253 | u32 rmac_vld_frms_oflow; | 253 | __le32 rmac_vld_frms_oflow; |
254 | u32 rmac_vld_bcst_frms_oflow; | 254 | __le32 rmac_vld_bcst_frms_oflow; |
255 | u32 rmac_vld_mcst_frms_oflow; | 255 | __le32 rmac_vld_mcst_frms_oflow; |
256 | u32 rmac_accepted_ucst_frms_oflow; | 256 | __le32 rmac_accepted_ucst_frms_oflow; |
257 | u32 rmac_ttl_octets_oflow; | 257 | __le32 rmac_ttl_octets_oflow; |
258 | u32 rmac_discarded_frms_oflow; | 258 | __le32 rmac_discarded_frms_oflow; |
259 | u32 rmac_accepted_nucst_frms_oflow; | 259 | __le32 rmac_accepted_nucst_frms_oflow; |
260 | u32 rmac_usized_frms_oflow; | 260 | __le32 rmac_usized_frms_oflow; |
261 | u32 rmac_drop_events_oflow; | 261 | __le32 rmac_drop_events_oflow; |
262 | u32 rmac_frag_frms_oflow; | 262 | __le32 rmac_frag_frms_oflow; |
263 | u32 rmac_osized_frms_oflow; | 263 | __le32 rmac_osized_frms_oflow; |
264 | u32 rmac_ip_oflow; | 264 | __le32 rmac_ip_oflow; |
265 | u32 rmac_jabber_frms_oflow; | 265 | __le32 rmac_jabber_frms_oflow; |
266 | u32 rmac_icmp_oflow; | 266 | __le32 rmac_icmp_oflow; |
267 | u32 rmac_drop_ip_oflow; | 267 | __le32 rmac_drop_ip_oflow; |
268 | u32 rmac_err_drp_udp_oflow; | 268 | __le32 rmac_err_drp_udp_oflow; |
269 | u32 rmac_udp_oflow; | 269 | __le32 rmac_udp_oflow; |
270 | u32 reserved_11; | 270 | __le32 reserved_11; |
271 | u32 rmac_pause_cnt_oflow; | 271 | __le32 rmac_pause_cnt_oflow; |
272 | u64 rmac_ttl_1519_4095_frms; | 272 | __le64 rmac_ttl_1519_4095_frms; |
273 | u64 rmac_ttl_4096_8191_frms; | 273 | __le64 rmac_ttl_4096_8191_frms; |
274 | u64 rmac_ttl_8192_max_frms; | 274 | __le64 rmac_ttl_8192_max_frms; |
275 | u64 rmac_ttl_gt_max_frms; | 275 | __le64 rmac_ttl_gt_max_frms; |
276 | u64 rmac_osized_alt_frms; | 276 | __le64 rmac_osized_alt_frms; |
277 | u64 rmac_jabber_alt_frms; | 277 | __le64 rmac_jabber_alt_frms; |
278 | u64 rmac_gt_max_alt_frms; | 278 | __le64 rmac_gt_max_alt_frms; |
279 | u64 rmac_vlan_frms; | 279 | __le64 rmac_vlan_frms; |
280 | u32 rmac_len_discard; | 280 | __le32 rmac_len_discard; |
281 | u32 rmac_fcs_discard; | 281 | __le32 rmac_fcs_discard; |
282 | u32 rmac_pf_discard; | 282 | __le32 rmac_pf_discard; |
283 | u32 rmac_da_discard; | 283 | __le32 rmac_da_discard; |
284 | u32 rmac_red_discard; | 284 | __le32 rmac_red_discard; |
285 | u32 rmac_rts_discard; | 285 | __le32 rmac_rts_discard; |
286 | u32 reserved_12; | 286 | __le32 reserved_12; |
287 | u32 rmac_ingm_full_discard; | 287 | __le32 rmac_ingm_full_discard; |
288 | u32 reserved_13; | 288 | __le32 reserved_13; |
289 | u32 rmac_accepted_ip_oflow; | 289 | __le32 rmac_accepted_ip_oflow; |
290 | u32 reserved_14; | 290 | __le32 reserved_14; |
291 | u32 link_fault_cnt; | 291 | __le32 link_fault_cnt; |
292 | u8 buffer[20]; | 292 | u8 buffer[20]; |
293 | swStat_t sw_stat; | 293 | swStat_t sw_stat; |
294 | xpakStat_t xpak_stat; | 294 | xpakStat_t xpak_stat; |
diff --git a/drivers/net/saa9730.c b/drivers/net/saa9730.c index c9efad8a917e..b269513cde45 100644 --- a/drivers/net/saa9730.c +++ b/drivers/net/saa9730.c | |||
@@ -747,7 +747,7 @@ static int lan_saa9730_rx(struct net_device *dev) | |||
747 | 747 | ||
748 | static irqreturn_t lan_saa9730_interrupt(const int irq, void *dev_id) | 748 | static irqreturn_t lan_saa9730_interrupt(const int irq, void *dev_id) |
749 | { | 749 | { |
750 | struct net_device *dev = (struct net_device *) dev_id; | 750 | struct net_device *dev = dev_id; |
751 | struct lan_saa9730_private *lp = netdev_priv(dev); | 751 | struct lan_saa9730_private *lp = netdev_priv(dev); |
752 | 752 | ||
753 | if (lan_saa9730_debug > 5) | 753 | if (lan_saa9730_debug > 5) |
diff --git a/drivers/net/sb1000.c b/drivers/net/sb1000.c index dc30dee5537f..b9fa4fbb1398 100644 --- a/drivers/net/sb1000.c +++ b/drivers/net/sb1000.c | |||
@@ -1084,19 +1084,13 @@ static irqreturn_t sb1000_interrupt(int irq, void *dev_id) | |||
1084 | char *name; | 1084 | char *name; |
1085 | unsigned char st; | 1085 | unsigned char st; |
1086 | int ioaddr[2]; | 1086 | int ioaddr[2]; |
1087 | struct net_device *dev = (struct net_device *) dev_id; | 1087 | struct net_device *dev = dev_id; |
1088 | struct sb1000_private *lp = netdev_priv(dev); | 1088 | struct sb1000_private *lp = netdev_priv(dev); |
1089 | 1089 | ||
1090 | const unsigned char Command0[6] = {0x80, 0x2c, 0x00, 0x00, 0x00, 0x00}; | 1090 | const unsigned char Command0[6] = {0x80, 0x2c, 0x00, 0x00, 0x00, 0x00}; |
1091 | const unsigned char Command1[6] = {0x80, 0x2e, 0x00, 0x00, 0x00, 0x00}; | 1091 | const unsigned char Command1[6] = {0x80, 0x2e, 0x00, 0x00, 0x00, 0x00}; |
1092 | const int MaxRxErrorCount = 6; | 1092 | const int MaxRxErrorCount = 6; |
1093 | 1093 | ||
1094 | if (dev == NULL) { | ||
1095 | printk(KERN_ERR "sb1000_interrupt(): irq %d for unknown device.\n", | ||
1096 | irq); | ||
1097 | return IRQ_NONE; | ||
1098 | } | ||
1099 | |||
1100 | ioaddr[0] = dev->base_addr; | 1094 | ioaddr[0] = dev->base_addr; |
1101 | /* mem_start holds the second I/O address */ | 1095 | /* mem_start holds the second I/O address */ |
1102 | ioaddr[1] = dev->mem_start; | 1096 | ioaddr[1] = dev->mem_start; |
diff --git a/drivers/net/skfp/skfddi.c b/drivers/net/skfp/skfddi.c index 06ea2626c6f4..9733a11c6146 100644 --- a/drivers/net/skfp/skfddi.c +++ b/drivers/net/skfp/skfddi.c | |||
@@ -616,15 +616,10 @@ static int skfp_close(struct net_device *dev) | |||
616 | 616 | ||
617 | irqreturn_t skfp_interrupt(int irq, void *dev_id) | 617 | irqreturn_t skfp_interrupt(int irq, void *dev_id) |
618 | { | 618 | { |
619 | struct net_device *dev = (struct net_device *) dev_id; | 619 | struct net_device *dev = dev_id; |
620 | struct s_smc *smc; /* private board structure pointer */ | 620 | struct s_smc *smc; /* private board structure pointer */ |
621 | skfddi_priv *bp; | 621 | skfddi_priv *bp; |
622 | 622 | ||
623 | if (dev == NULL) { | ||
624 | printk("%s: irq %d for unknown device\n", dev->name, irq); | ||
625 | return IRQ_NONE; | ||
626 | } | ||
627 | |||
628 | smc = netdev_priv(dev); | 623 | smc = netdev_priv(dev); |
629 | bp = &smc->os; | 624 | bp = &smc->os; |
630 | 625 | ||
diff --git a/drivers/net/smc91x.c b/drivers/net/smc91x.c index 506807fa5268..95b6478f55c6 100644 --- a/drivers/net/smc91x.c +++ b/drivers/net/smc91x.c | |||
@@ -1400,7 +1400,7 @@ static irqreturn_t smc_interrupt(int irq, void *dev_id) | |||
1400 | static void smc_poll_controller(struct net_device *dev) | 1400 | static void smc_poll_controller(struct net_device *dev) |
1401 | { | 1401 | { |
1402 | disable_irq(dev->irq); | 1402 | disable_irq(dev->irq); |
1403 | smc_interrupt(dev->irq, dev, NULL); | 1403 | smc_interrupt(dev->irq, dev); |
1404 | enable_irq(dev->irq); | 1404 | enable_irq(dev->irq); |
1405 | } | 1405 | } |
1406 | #endif | 1406 | #endif |
diff --git a/drivers/net/sonic.c b/drivers/net/sonic.c index cfece9676aff..ed7aa0a5acca 100644 --- a/drivers/net/sonic.c +++ b/drivers/net/sonic.c | |||
@@ -295,15 +295,10 @@ static int sonic_send_packet(struct sk_buff *skb, struct net_device *dev) | |||
295 | */ | 295 | */ |
296 | static irqreturn_t sonic_interrupt(int irq, void *dev_id) | 296 | static irqreturn_t sonic_interrupt(int irq, void *dev_id) |
297 | { | 297 | { |
298 | struct net_device *dev = (struct net_device *) dev_id; | 298 | struct net_device *dev = dev_id; |
299 | struct sonic_local *lp = netdev_priv(dev); | 299 | struct sonic_local *lp = netdev_priv(dev); |
300 | int status; | 300 | int status; |
301 | 301 | ||
302 | if (dev == NULL) { | ||
303 | printk(KERN_ERR "sonic_interrupt: irq %d for unknown device.\n", irq); | ||
304 | return IRQ_NONE; | ||
305 | } | ||
306 | |||
307 | if (!(status = SONIC_READ(SONIC_ISR) & SONIC_IMR_DEFAULT)) | 302 | if (!(status = SONIC_READ(SONIC_ISR) & SONIC_IMR_DEFAULT)) |
308 | return IRQ_NONE; | 303 | return IRQ_NONE; |
309 | 304 | ||
diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c index 45d07faf7b96..9d7cd130c19d 100644 --- a/drivers/net/sunhme.c +++ b/drivers/net/sunhme.c | |||
@@ -2095,8 +2095,8 @@ static void happy_meal_rx(struct happy_meal *hp, struct net_device *dev) | |||
2095 | 2095 | ||
2096 | static irqreturn_t happy_meal_interrupt(int irq, void *dev_id) | 2096 | static irqreturn_t happy_meal_interrupt(int irq, void *dev_id) |
2097 | { | 2097 | { |
2098 | struct net_device *dev = (struct net_device *) dev_id; | 2098 | struct net_device *dev = dev_id; |
2099 | struct happy_meal *hp = dev->priv; | 2099 | struct happy_meal *hp = netdev_priv(dev); |
2100 | u32 happy_status = hme_read32(hp, hp->gregs + GREG_STAT); | 2100 | u32 happy_status = hme_read32(hp, hp->gregs + GREG_STAT); |
2101 | 2101 | ||
2102 | HMD(("happy_meal_interrupt: status=%08x ", happy_status)); | 2102 | HMD(("happy_meal_interrupt: status=%08x ", happy_status)); |
diff --git a/drivers/net/sunlance.c b/drivers/net/sunlance.c index 9207e19cac34..5b00d79b5573 100644 --- a/drivers/net/sunlance.c +++ b/drivers/net/sunlance.c | |||
@@ -822,7 +822,7 @@ out: | |||
822 | 822 | ||
823 | static irqreturn_t lance_interrupt(int irq, void *dev_id) | 823 | static irqreturn_t lance_interrupt(int irq, void *dev_id) |
824 | { | 824 | { |
825 | struct net_device *dev = (struct net_device *)dev_id; | 825 | struct net_device *dev = dev_id; |
826 | struct lance_private *lp = netdev_priv(dev); | 826 | struct lance_private *lp = netdev_priv(dev); |
827 | int csr0; | 827 | int csr0; |
828 | 828 | ||
diff --git a/drivers/net/sunqe.c b/drivers/net/sunqe.c index 020e78170595..7874eb1ef043 100644 --- a/drivers/net/sunqe.c +++ b/drivers/net/sunqe.c | |||
@@ -468,7 +468,7 @@ static void qe_tx_reclaim(struct sunqe *qep); | |||
468 | */ | 468 | */ |
469 | static irqreturn_t qec_interrupt(int irq, void *dev_id) | 469 | static irqreturn_t qec_interrupt(int irq, void *dev_id) |
470 | { | 470 | { |
471 | struct sunqec *qecp = (struct sunqec *) dev_id; | 471 | struct sunqec *qecp = dev_id; |
472 | u32 qec_status; | 472 | u32 qec_status; |
473 | int channel = 0; | 473 | int channel = 0; |
474 | 474 | ||
diff --git a/drivers/net/tokenring/smctr.c b/drivers/net/tokenring/smctr.c index 9bd4cba87872..46dabdb12071 100644 --- a/drivers/net/tokenring/smctr.c +++ b/drivers/net/tokenring/smctr.c | |||
@@ -1990,15 +1990,8 @@ static irqreturn_t smctr_interrupt(int irq, void *dev_id) | |||
1990 | __u8 isb_type, isb_subtype; | 1990 | __u8 isb_type, isb_subtype; |
1991 | __u16 isb_index; | 1991 | __u16 isb_index; |
1992 | 1992 | ||
1993 | if(dev == NULL) | ||
1994 | { | ||
1995 | printk(KERN_CRIT "%s: irq %d for unknown device.\n", dev->name, irq); | ||
1996 | return IRQ_NONE; | ||
1997 | } | ||
1998 | |||
1999 | ioaddr = dev->base_addr; | 1993 | ioaddr = dev->base_addr; |
2000 | tp = netdev_priv(dev); | 1994 | tp = netdev_priv(dev); |
2001 | |||
2002 | 1995 | ||
2003 | if(tp->status == NOT_INITIALIZED) | 1996 | if(tp->status == NOT_INITIALIZED) |
2004 | return IRQ_NONE; | 1997 | return IRQ_NONE; |
diff --git a/drivers/net/tokenring/tms380tr.c b/drivers/net/tokenring/tms380tr.c index c0ab6e44eb1f..ea797ca2b988 100644 --- a/drivers/net/tokenring/tms380tr.c +++ b/drivers/net/tokenring/tms380tr.c | |||
@@ -751,11 +751,6 @@ irqreturn_t tms380tr_interrupt(int irq, void *dev_id) | |||
751 | unsigned short irq_type; | 751 | unsigned short irq_type; |
752 | int handled = 0; | 752 | int handled = 0; |
753 | 753 | ||
754 | if(dev == NULL) { | ||
755 | printk(KERN_INFO "%s: irq %d for unknown device.\n", dev->name, irq); | ||
756 | return IRQ_NONE; | ||
757 | } | ||
758 | |||
759 | tp = netdev_priv(dev); | 754 | tp = netdev_priv(dev); |
760 | 755 | ||
761 | irq_type = SIFREADW(SIFSTS); | 756 | irq_type = SIFREADW(SIFSTS); |
diff --git a/drivers/net/tulip/de4x5.c b/drivers/net/tulip/de4x5.c index e17f9779ead2..3f4b6408b755 100644 --- a/drivers/net/tulip/de4x5.c +++ b/drivers/net/tulip/de4x5.c | |||
@@ -1540,16 +1540,12 @@ de4x5_queue_pkt(struct sk_buff *skb, struct net_device *dev) | |||
1540 | static irqreturn_t | 1540 | static irqreturn_t |
1541 | de4x5_interrupt(int irq, void *dev_id) | 1541 | de4x5_interrupt(int irq, void *dev_id) |
1542 | { | 1542 | { |
1543 | struct net_device *dev = (struct net_device *)dev_id; | 1543 | struct net_device *dev = dev_id; |
1544 | struct de4x5_private *lp; | 1544 | struct de4x5_private *lp; |
1545 | s32 imr, omr, sts, limit; | 1545 | s32 imr, omr, sts, limit; |
1546 | u_long iobase; | 1546 | u_long iobase; |
1547 | unsigned int handled = 0; | 1547 | unsigned int handled = 0; |
1548 | 1548 | ||
1549 | if (dev == NULL) { | ||
1550 | printk ("de4x5_interrupt(): irq %d for unknown device.\n", irq); | ||
1551 | return IRQ_NONE; | ||
1552 | } | ||
1553 | lp = netdev_priv(dev); | 1549 | lp = netdev_priv(dev); |
1554 | spin_lock(&lp->lock); | 1550 | spin_lock(&lp->lock); |
1555 | iobase = dev->base_addr; | 1551 | iobase = dev->base_addr; |
diff --git a/drivers/net/wan/cycx_main.c b/drivers/net/wan/cycx_main.c index 12363e056b63..6e5f1c898517 100644 --- a/drivers/net/wan/cycx_main.c +++ b/drivers/net/wan/cycx_main.c | |||
@@ -303,9 +303,9 @@ out: return ret; | |||
303 | */ | 303 | */ |
304 | static irqreturn_t cycx_isr(int irq, void *dev_id) | 304 | static irqreturn_t cycx_isr(int irq, void *dev_id) |
305 | { | 305 | { |
306 | struct cycx_device *card = (struct cycx_device *)dev_id; | 306 | struct cycx_device *card = dev_id; |
307 | 307 | ||
308 | if (!card || card->wandev.state == WAN_UNCONFIGURED) | 308 | if (card->wandev.state == WAN_UNCONFIGURED) |
309 | goto out; | 309 | goto out; |
310 | 310 | ||
311 | if (card->in_isr) { | 311 | if (card->in_isr) { |
diff --git a/drivers/net/wan/sdla.c b/drivers/net/wan/sdla.c index 5715d25271f1..6a485f0556f4 100644 --- a/drivers/net/wan/sdla.c +++ b/drivers/net/wan/sdla.c | |||
@@ -875,13 +875,7 @@ static irqreturn_t sdla_isr(int irq, void *dev_id) | |||
875 | 875 | ||
876 | dev = dev_id; | 876 | dev = dev_id; |
877 | 877 | ||
878 | if (dev == NULL) | 878 | flp = netdev_priv(dev); |
879 | { | ||
880 | printk(KERN_WARNING "sdla_isr(): irq %d for unknown device.\n", irq); | ||
881 | return IRQ_NONE; | ||
882 | } | ||
883 | |||
884 | flp = dev->priv; | ||
885 | 879 | ||
886 | if (!flp->initialized) | 880 | if (!flp->initialized) |
887 | { | 881 | { |
diff --git a/drivers/net/wireless/orinoco.c b/drivers/net/wireless/orinoco.c index 793da5f69344..b779c7dcc1a8 100644 --- a/drivers/net/wireless/orinoco.c +++ b/drivers/net/wireless/orinoco.c | |||
@@ -1954,7 +1954,7 @@ static void __orinoco_ev_wterr(struct net_device *dev, hermes_t *hw) | |||
1954 | 1954 | ||
1955 | irqreturn_t orinoco_interrupt(int irq, void *dev_id) | 1955 | irqreturn_t orinoco_interrupt(int irq, void *dev_id) |
1956 | { | 1956 | { |
1957 | struct net_device *dev = (struct net_device *)dev_id; | 1957 | struct net_device *dev = dev_id; |
1958 | struct orinoco_private *priv = netdev_priv(dev); | 1958 | struct orinoco_private *priv = netdev_priv(dev); |
1959 | hermes_t *hw = &priv->hw; | 1959 | hermes_t *hw = &priv->hw; |
1960 | int count = MAX_IRQLOOPS_PER_IRQ; | 1960 | int count = MAX_IRQLOOPS_PER_IRQ; |
diff --git a/drivers/net/wireless/wavelan_cs.c b/drivers/net/wireless/wavelan_cs.c index cadfe132db84..aafb301041b1 100644 --- a/drivers/net/wireless/wavelan_cs.c +++ b/drivers/net/wireless/wavelan_cs.c | |||
@@ -4119,21 +4119,12 @@ static irqreturn_t | |||
4119 | wavelan_interrupt(int irq, | 4119 | wavelan_interrupt(int irq, |
4120 | void * dev_id) | 4120 | void * dev_id) |
4121 | { | 4121 | { |
4122 | struct net_device * dev; | 4122 | struct net_device * dev = dev_id; |
4123 | net_local * lp; | 4123 | net_local * lp; |
4124 | kio_addr_t base; | 4124 | kio_addr_t base; |
4125 | int status0; | 4125 | int status0; |
4126 | u_int tx_status; | 4126 | u_int tx_status; |
4127 | 4127 | ||
4128 | if ((dev = dev_id) == NULL) | ||
4129 | { | ||
4130 | #ifdef DEBUG_INTERRUPT_ERROR | ||
4131 | printk(KERN_WARNING "wavelan_interrupt(): irq %d for unknown device.\n", | ||
4132 | irq); | ||
4133 | #endif | ||
4134 | return IRQ_NONE; | ||
4135 | } | ||
4136 | |||
4137 | #ifdef DEBUG_INTERRUPT_TRACE | 4128 | #ifdef DEBUG_INTERRUPT_TRACE |
4138 | printk(KERN_DEBUG "%s: ->wavelan_interrupt()\n", dev->name); | 4129 | printk(KERN_DEBUG "%s: ->wavelan_interrupt()\n", dev->name); |
4139 | #endif | 4130 | #endif |
diff --git a/drivers/net/wireless/wl3501_cs.c b/drivers/net/wireless/wl3501_cs.c index a1430352169b..5b98a7876982 100644 --- a/drivers/net/wireless/wl3501_cs.c +++ b/drivers/net/wireless/wl3501_cs.c | |||
@@ -1155,25 +1155,18 @@ static inline void wl3501_ack_interrupt(struct wl3501_card *this) | |||
1155 | */ | 1155 | */ |
1156 | static irqreturn_t wl3501_interrupt(int irq, void *dev_id) | 1156 | static irqreturn_t wl3501_interrupt(int irq, void *dev_id) |
1157 | { | 1157 | { |
1158 | struct net_device *dev = (struct net_device *)dev_id; | 1158 | struct net_device *dev = dev_id; |
1159 | struct wl3501_card *this; | 1159 | struct wl3501_card *this; |
1160 | int handled = 1; | ||
1161 | 1160 | ||
1162 | if (!dev) | 1161 | this = netdev_priv(dev); |
1163 | goto unknown; | ||
1164 | this = dev->priv; | ||
1165 | spin_lock(&this->lock); | 1162 | spin_lock(&this->lock); |
1166 | wl3501_ack_interrupt(this); | 1163 | wl3501_ack_interrupt(this); |
1167 | wl3501_block_interrupt(this); | 1164 | wl3501_block_interrupt(this); |
1168 | wl3501_rx_interrupt(dev); | 1165 | wl3501_rx_interrupt(dev); |
1169 | wl3501_unblock_interrupt(this); | 1166 | wl3501_unblock_interrupt(this); |
1170 | spin_unlock(&this->lock); | 1167 | spin_unlock(&this->lock); |
1171 | out: | 1168 | |
1172 | return IRQ_RETVAL(handled); | 1169 | return IRQ_HANDLED; |
1173 | unknown: | ||
1174 | handled = 0; | ||
1175 | printk(KERN_ERR "%s: irq %d for unknown device.\n", __FUNCTION__, irq); | ||
1176 | goto out; | ||
1177 | } | 1170 | } |
1178 | 1171 | ||
1179 | static int wl3501_reset_board(struct wl3501_card *this) | 1172 | static int wl3501_reset_board(struct wl3501_card *this) |
diff --git a/drivers/net/yellowfin.c b/drivers/net/yellowfin.c index ac600212d9a9..2412ce4917f2 100644 --- a/drivers/net/yellowfin.c +++ b/drivers/net/yellowfin.c | |||
@@ -896,13 +896,6 @@ static irqreturn_t yellowfin_interrupt(int irq, void *dev_instance) | |||
896 | int boguscnt = max_interrupt_work; | 896 | int boguscnt = max_interrupt_work; |
897 | unsigned int handled = 0; | 897 | unsigned int handled = 0; |
898 | 898 | ||
899 | #ifndef final_version /* Can never occur. */ | ||
900 | if (dev == NULL) { | ||
901 | printk (KERN_ERR "yellowfin_interrupt(): irq %d for unknown device.\n", irq); | ||
902 | return IRQ_NONE; | ||
903 | } | ||
904 | #endif | ||
905 | |||
906 | yp = netdev_priv(dev); | 899 | yp = netdev_priv(dev); |
907 | ioaddr = yp->base; | 900 | ioaddr = yp->base; |
908 | 901 | ||
diff --git a/drivers/net/znet.c b/drivers/net/znet.c index 2068a109a86c..b24b0727108c 100644 --- a/drivers/net/znet.c +++ b/drivers/net/znet.c | |||
@@ -610,11 +610,6 @@ static irqreturn_t znet_interrupt(int irq, void *dev_id) | |||
610 | int boguscnt = 20; | 610 | int boguscnt = 20; |
611 | int handled = 0; | 611 | int handled = 0; |
612 | 612 | ||
613 | if (dev == NULL) { | ||
614 | printk(KERN_WARNING "znet_interrupt(): IRQ %d for unknown device.\n", irq); | ||
615 | return IRQ_NONE; | ||
616 | } | ||
617 | |||
618 | spin_lock (&znet->lock); | 613 | spin_lock (&znet->lock); |
619 | 614 | ||
620 | ioaddr = dev->base_addr; | 615 | ioaddr = dev->base_addr; |
diff --git a/drivers/parisc/dino.c b/drivers/parisc/dino.c index a0a8fd8d2124..03c763c2d0e0 100644 --- a/drivers/parisc/dino.c +++ b/drivers/parisc/dino.c | |||
@@ -389,7 +389,7 @@ ilr_again: | |||
389 | int irq = dino_dev->global_irq[local_irq]; | 389 | int irq = dino_dev->global_irq[local_irq]; |
390 | DBG(KERN_DEBUG "%s(%d, %p) mask 0x%x\n", | 390 | DBG(KERN_DEBUG "%s(%d, %p) mask 0x%x\n", |
391 | __FUNCTION__, irq, intr_dev, mask); | 391 | __FUNCTION__, irq, intr_dev, mask); |
392 | __do_IRQ(irq, regs); | 392 | __do_IRQ(irq); |
393 | mask &= ~(1 << local_irq); | 393 | mask &= ~(1 << local_irq); |
394 | } while (mask); | 394 | } while (mask); |
395 | 395 | ||
diff --git a/drivers/parisc/eisa.c b/drivers/parisc/eisa.c index 094562e044f3..e97cecbc4d18 100644 --- a/drivers/parisc/eisa.c +++ b/drivers/parisc/eisa.c | |||
@@ -234,7 +234,7 @@ static irqreturn_t eisa_irq(int wax_irq, void *intr_dev) | |||
234 | } | 234 | } |
235 | spin_unlock_irqrestore(&eisa_irq_lock, flags); | 235 | spin_unlock_irqrestore(&eisa_irq_lock, flags); |
236 | 236 | ||
237 | __do_IRQ(irq, regs); | 237 | __do_IRQ(irq); |
238 | 238 | ||
239 | spin_lock_irqsave(&eisa_irq_lock, flags); | 239 | spin_lock_irqsave(&eisa_irq_lock, flags); |
240 | /* unmask */ | 240 | /* unmask */ |
diff --git a/drivers/parport/parport_mfc3.c b/drivers/parport/parport_mfc3.c index 6541cde4df00..e5b0a544de40 100644 --- a/drivers/parport/parport_mfc3.c +++ b/drivers/parport/parport_mfc3.c | |||
@@ -219,7 +219,7 @@ static irqreturn_t mfc3_interrupt(int irq, void *dev_id) | |||
219 | if (this_port[i] != NULL) | 219 | if (this_port[i] != NULL) |
220 | if (pia(this_port[i])->crb & 128) { /* Board caused interrupt */ | 220 | if (pia(this_port[i])->crb & 128) { /* Board caused interrupt */ |
221 | dummy = pia(this_port[i])->pprb; /* clear irq bit */ | 221 | dummy = pia(this_port[i])->pprb; /* clear irq bit */ |
222 | parport_generic_irq(irq, this_port[i], regs); | 222 | parport_generic_irq(irq, this_port[i]); |
223 | } | 223 | } |
224 | return IRQ_HANDLED; | 224 | return IRQ_HANDLED; |
225 | } | 225 | } |
diff --git a/drivers/parport/parport_sunbpp.c b/drivers/parport/parport_sunbpp.c index d758c90c86af..9793533276ec 100644 --- a/drivers/parport/parport_sunbpp.c +++ b/drivers/parport/parport_sunbpp.c | |||
@@ -48,7 +48,7 @@ | |||
48 | 48 | ||
49 | static irqreturn_t parport_sunbpp_interrupt(int irq, void *dev_id) | 49 | static irqreturn_t parport_sunbpp_interrupt(int irq, void *dev_id) |
50 | { | 50 | { |
51 | parport_generic_irq(irq, (struct parport *) dev_id, regs); | 51 | parport_generic_irq(irq, (struct parport *) dev_id); |
52 | return IRQ_HANDLED; | 52 | return IRQ_HANDLED; |
53 | } | 53 | } |
54 | 54 | ||
diff --git a/drivers/pcmcia/at91_cf.c b/drivers/pcmcia/at91_cf.c index 991e084db2d6..7f5df9a9f393 100644 --- a/drivers/pcmcia/at91_cf.c +++ b/drivers/pcmcia/at91_cf.c | |||
@@ -66,7 +66,7 @@ static int at91_cf_ss_init(struct pcmcia_socket *s) | |||
66 | 66 | ||
67 | static irqreturn_t at91_cf_irq(int irq, void *_cf) | 67 | static irqreturn_t at91_cf_irq(int irq, void *_cf) |
68 | { | 68 | { |
69 | struct at91_cf_socket *cf = (struct at91_cf_socket *) _cf; | 69 | struct at91_cf_socket *cf = _cf; |
70 | 70 | ||
71 | if (irq == cf->board->det_pin) { | 71 | if (irq == cf->board->det_pin) { |
72 | unsigned present = at91_cf_present(cf); | 72 | unsigned present = at91_cf_present(cf); |
diff --git a/drivers/pcmcia/hd64465_ss.c b/drivers/pcmcia/hd64465_ss.c index db3c26b5de14..caca0dc9d30f 100644 --- a/drivers/pcmcia/hd64465_ss.c +++ b/drivers/pcmcia/hd64465_ss.c | |||
@@ -650,7 +650,7 @@ static int hs_set_mem_map(struct pcmcia_socket *s, struct pccard_mem_map *mem) | |||
650 | */ | 650 | */ |
651 | static int hs_irq_demux(int irq, void *dev) | 651 | static int hs_irq_demux(int irq, void *dev) |
652 | { | 652 | { |
653 | hs_socket_t *sp = (hs_socket_t *)dev; | 653 | hs_socket_t *sp = dev; |
654 | u_int cscr; | 654 | u_int cscr; |
655 | 655 | ||
656 | DPRINTK("hs_irq_demux(irq=%d)\n", irq); | 656 | DPRINTK("hs_irq_demux(irq=%d)\n", irq); |
@@ -673,11 +673,10 @@ static int hs_irq_demux(int irq, void *dev) | |||
673 | 673 | ||
674 | static irqreturn_t hs_interrupt(int irq, void *dev) | 674 | static irqreturn_t hs_interrupt(int irq, void *dev) |
675 | { | 675 | { |
676 | hs_socket_t *sp = (hs_socket_t *)dev; | 676 | hs_socket_t *sp = dev; |
677 | u_int events = 0; | 677 | u_int events = 0; |
678 | u_int cscr; | 678 | u_int cscr; |
679 | 679 | ||
680 | |||
681 | cscr = hs_in(sp, CSCR); | 680 | cscr = hs_in(sp, CSCR); |
682 | 681 | ||
683 | DPRINTK("hs_interrupt, cscr=%04x\n", cscr); | 682 | DPRINTK("hs_interrupt, cscr=%04x\n", cscr); |
diff --git a/drivers/pcmcia/m32r_pcc.c b/drivers/pcmcia/m32r_pcc.c index 0964fd76bfe3..bbf025874d0c 100644 --- a/drivers/pcmcia/m32r_pcc.c +++ b/drivers/pcmcia/m32r_pcc.c | |||
@@ -395,7 +395,7 @@ static irqreturn_t pcc_interrupt(int irq, void *dev) | |||
395 | 395 | ||
396 | static void pcc_interrupt_wrapper(u_long data) | 396 | static void pcc_interrupt_wrapper(u_long data) |
397 | { | 397 | { |
398 | pcc_interrupt(0, NULL, NULL); | 398 | pcc_interrupt(0, NULL); |
399 | init_timer(&poll_timer); | 399 | init_timer(&poll_timer); |
400 | poll_timer.expires = jiffies + poll_interval; | 400 | poll_timer.expires = jiffies + poll_interval; |
401 | add_timer(&poll_timer); | 401 | add_timer(&poll_timer); |
diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c index 222a8a71a5e8..53db58a68617 100644 --- a/drivers/s390/block/dasd_diag.c +++ b/drivers/s390/block/dasd_diag.c | |||
@@ -218,7 +218,7 @@ dasd_diag_term_IO(struct dasd_ccw_req * cqr) | |||
218 | 218 | ||
219 | /* Handle external interruption. */ | 219 | /* Handle external interruption. */ |
220 | static void | 220 | static void |
221 | dasd_ext_handler(struct pt_regs *regs, __u16 code) | 221 | dasd_ext_handler(__u16 code) |
222 | { | 222 | { |
223 | struct dasd_ccw_req *cqr, *next; | 223 | struct dasd_ccw_req *cqr, *next; |
224 | struct dasd_device *device; | 224 | struct dasd_device *device; |
diff --git a/drivers/s390/char/ctrlchar.c b/drivers/s390/char/ctrlchar.c index d83eb6358bac..49e9628d9297 100644 --- a/drivers/s390/char/ctrlchar.c +++ b/drivers/s390/char/ctrlchar.c | |||
@@ -20,7 +20,7 @@ static int ctrlchar_sysrq_key; | |||
20 | static void | 20 | static void |
21 | ctrlchar_handle_sysrq(void *tty) | 21 | ctrlchar_handle_sysrq(void *tty) |
22 | { | 22 | { |
23 | handle_sysrq(ctrlchar_sysrq_key, NULL, (struct tty_struct *) tty); | 23 | handle_sysrq(ctrlchar_sysrq_key, (struct tty_struct *) tty); |
24 | } | 24 | } |
25 | 25 | ||
26 | static DECLARE_WORK(ctrlchar_work, ctrlchar_handle_sysrq, NULL); | 26 | static DECLARE_WORK(ctrlchar_work, ctrlchar_handle_sysrq, NULL); |
diff --git a/drivers/s390/char/keyboard.c b/drivers/s390/char/keyboard.c index 3be06569180d..e3491a5f5219 100644 --- a/drivers/s390/char/keyboard.c +++ b/drivers/s390/char/keyboard.c | |||
@@ -304,7 +304,7 @@ kbd_keycode(struct kbd_data *kbd, unsigned int keycode) | |||
304 | if (kbd->sysrq) { | 304 | if (kbd->sysrq) { |
305 | if (kbd->sysrq == K(KT_LATIN, '-')) { | 305 | if (kbd->sysrq == K(KT_LATIN, '-')) { |
306 | kbd->sysrq = 0; | 306 | kbd->sysrq = 0; |
307 | handle_sysrq(value, NULL, kbd->tty); | 307 | handle_sysrq(value, kbd->tty); |
308 | return; | 308 | return; |
309 | } | 309 | } |
310 | if (value == '-') { | 310 | if (value == '-') { |
diff --git a/drivers/s390/char/monwriter.c b/drivers/s390/char/monwriter.c index 1e3939aeb8ab..4362ff260244 100644 --- a/drivers/s390/char/monwriter.c +++ b/drivers/s390/char/monwriter.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #define MONWRITE_MAX_DATALEN 4024 | 26 | #define MONWRITE_MAX_DATALEN 4024 |
27 | 27 | ||
28 | static int mon_max_bufs = 255; | 28 | static int mon_max_bufs = 255; |
29 | static int mon_buf_count; | ||
29 | 30 | ||
30 | struct mon_buf { | 31 | struct mon_buf { |
31 | struct list_head list; | 32 | struct list_head list; |
@@ -40,7 +41,6 @@ struct mon_private { | |||
40 | size_t hdr_to_read; | 41 | size_t hdr_to_read; |
41 | size_t data_to_read; | 42 | size_t data_to_read; |
42 | struct mon_buf *current_buf; | 43 | struct mon_buf *current_buf; |
43 | int mon_buf_count; | ||
44 | }; | 44 | }; |
45 | 45 | ||
46 | /* | 46 | /* |
@@ -99,13 +99,13 @@ static int monwrite_new_hdr(struct mon_private *monpriv) | |||
99 | rc = monwrite_diag(monhdr, monbuf->data, | 99 | rc = monwrite_diag(monhdr, monbuf->data, |
100 | APPLDATA_STOP_REC); | 100 | APPLDATA_STOP_REC); |
101 | list_del(&monbuf->list); | 101 | list_del(&monbuf->list); |
102 | monpriv->mon_buf_count--; | 102 | mon_buf_count--; |
103 | kfree(monbuf->data); | 103 | kfree(monbuf->data); |
104 | kfree(monbuf); | 104 | kfree(monbuf); |
105 | monbuf = NULL; | 105 | monbuf = NULL; |
106 | } | 106 | } |
107 | } else { | 107 | } else { |
108 | if (monpriv->mon_buf_count >= mon_max_bufs) | 108 | if (mon_buf_count >= mon_max_bufs) |
109 | return -ENOSPC; | 109 | return -ENOSPC; |
110 | monbuf = kzalloc(sizeof(struct mon_buf), GFP_KERNEL); | 110 | monbuf = kzalloc(sizeof(struct mon_buf), GFP_KERNEL); |
111 | if (!monbuf) | 111 | if (!monbuf) |
@@ -118,7 +118,7 @@ static int monwrite_new_hdr(struct mon_private *monpriv) | |||
118 | } | 118 | } |
119 | monbuf->hdr = *monhdr; | 119 | monbuf->hdr = *monhdr; |
120 | list_add_tail(&monbuf->list, &monpriv->list); | 120 | list_add_tail(&monbuf->list, &monpriv->list); |
121 | monpriv->mon_buf_count++; | 121 | mon_buf_count++; |
122 | } | 122 | } |
123 | monpriv->current_buf = monbuf; | 123 | monpriv->current_buf = monbuf; |
124 | return 0; | 124 | return 0; |
@@ -186,7 +186,7 @@ static int monwrite_close(struct inode *inode, struct file *filp) | |||
186 | if (entry->hdr.mon_function != MONWRITE_GEN_EVENT) | 186 | if (entry->hdr.mon_function != MONWRITE_GEN_EVENT) |
187 | monwrite_diag(&entry->hdr, entry->data, | 187 | monwrite_diag(&entry->hdr, entry->data, |
188 | APPLDATA_STOP_REC); | 188 | APPLDATA_STOP_REC); |
189 | monpriv->mon_buf_count--; | 189 | mon_buf_count--; |
190 | list_del(&entry->list); | 190 | list_del(&entry->list); |
191 | kfree(entry->data); | 191 | kfree(entry->data); |
192 | kfree(entry); | 192 | kfree(entry); |
diff --git a/drivers/s390/char/sclp.c b/drivers/s390/char/sclp.c index 31e335751d6d..8a056df09d6b 100644 --- a/drivers/s390/char/sclp.c +++ b/drivers/s390/char/sclp.c | |||
@@ -324,7 +324,7 @@ __sclp_find_req(u32 sccb) | |||
324 | * Prepare read event data request if necessary. Start processing of next | 324 | * Prepare read event data request if necessary. Start processing of next |
325 | * request on queue. */ | 325 | * request on queue. */ |
326 | static void | 326 | static void |
327 | sclp_interrupt_handler(struct pt_regs *regs, __u16 code) | 327 | sclp_interrupt_handler(__u16 code) |
328 | { | 328 | { |
329 | struct sclp_req *req; | 329 | struct sclp_req *req; |
330 | u32 finished_sccb; | 330 | u32 finished_sccb; |
@@ -743,7 +743,7 @@ EXPORT_SYMBOL(sclp_reactivate); | |||
743 | /* Handler for external interruption used during initialization. Modify | 743 | /* Handler for external interruption used during initialization. Modify |
744 | * request state to done. */ | 744 | * request state to done. */ |
745 | static void | 745 | static void |
746 | sclp_check_handler(struct pt_regs *regs, __u16 code) | 746 | sclp_check_handler(__u16 code) |
747 | { | 747 | { |
748 | u32 finished_sccb; | 748 | u32 finished_sccb; |
749 | 749 | ||
diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c index 3bb4e472d73d..07c7f19339d2 100644 --- a/drivers/s390/cio/chsc.c +++ b/drivers/s390/cio/chsc.c | |||
@@ -200,11 +200,13 @@ css_get_ssd_info(struct subchannel *sch) | |||
200 | spin_unlock_irq(&sch->lock); | 200 | spin_unlock_irq(&sch->lock); |
201 | free_page((unsigned long)page); | 201 | free_page((unsigned long)page); |
202 | if (!ret) { | 202 | if (!ret) { |
203 | int j, chpid; | 203 | int j, chpid, mask; |
204 | /* Allocate channel path structures, if needed. */ | 204 | /* Allocate channel path structures, if needed. */ |
205 | for (j = 0; j < 8; j++) { | 205 | for (j = 0; j < 8; j++) { |
206 | mask = 0x80 >> j; | ||
206 | chpid = sch->ssd_info.chpid[j]; | 207 | chpid = sch->ssd_info.chpid[j]; |
207 | if (chpid && (get_chp_status(chpid) < 0)) | 208 | if ((sch->schib.pmcw.pim & mask) && |
209 | (get_chp_status(chpid) < 0)) | ||
208 | new_channel_path(chpid); | 210 | new_channel_path(chpid); |
209 | } | 211 | } |
210 | } | 212 | } |
@@ -222,13 +224,15 @@ s390_subchannel_remove_chpid(struct device *dev, void *data) | |||
222 | 224 | ||
223 | sch = to_subchannel(dev); | 225 | sch = to_subchannel(dev); |
224 | chpid = data; | 226 | chpid = data; |
225 | for (j = 0; j < 8; j++) | 227 | for (j = 0; j < 8; j++) { |
226 | if (sch->schib.pmcw.chpid[j] == chpid->id) | 228 | mask = 0x80 >> j; |
229 | if ((sch->schib.pmcw.pim & mask) && | ||
230 | (sch->schib.pmcw.chpid[j] == chpid->id)) | ||
227 | break; | 231 | break; |
232 | } | ||
228 | if (j >= 8) | 233 | if (j >= 8) |
229 | return 0; | 234 | return 0; |
230 | 235 | ||
231 | mask = 0x80 >> j; | ||
232 | spin_lock_irq(&sch->lock); | 236 | spin_lock_irq(&sch->lock); |
233 | 237 | ||
234 | stsch(sch->schid, &schib); | 238 | stsch(sch->schid, &schib); |
@@ -620,7 +624,7 @@ __chp_add_new_sch(struct subchannel_id schid) | |||
620 | static int | 624 | static int |
621 | __chp_add(struct subchannel_id schid, void *data) | 625 | __chp_add(struct subchannel_id schid, void *data) |
622 | { | 626 | { |
623 | int i; | 627 | int i, mask; |
624 | struct channel_path *chp; | 628 | struct channel_path *chp; |
625 | struct subchannel *sch; | 629 | struct subchannel *sch; |
626 | 630 | ||
@@ -630,8 +634,10 @@ __chp_add(struct subchannel_id schid, void *data) | |||
630 | /* Check if the subchannel is now available. */ | 634 | /* Check if the subchannel is now available. */ |
631 | return __chp_add_new_sch(schid); | 635 | return __chp_add_new_sch(schid); |
632 | spin_lock_irq(&sch->lock); | 636 | spin_lock_irq(&sch->lock); |
633 | for (i=0; i<8; i++) | 637 | for (i=0; i<8; i++) { |
634 | if (sch->schib.pmcw.chpid[i] == chp->id) { | 638 | mask = 0x80 >> i; |
639 | if ((sch->schib.pmcw.pim & mask) && | ||
640 | (sch->schib.pmcw.chpid[i] == chp->id)) { | ||
635 | if (stsch(sch->schid, &sch->schib) != 0) { | 641 | if (stsch(sch->schid, &sch->schib) != 0) { |
636 | /* Endgame. */ | 642 | /* Endgame. */ |
637 | spin_unlock_irq(&sch->lock); | 643 | spin_unlock_irq(&sch->lock); |
@@ -639,6 +645,7 @@ __chp_add(struct subchannel_id schid, void *data) | |||
639 | } | 645 | } |
640 | break; | 646 | break; |
641 | } | 647 | } |
648 | } | ||
642 | if (i==8) { | 649 | if (i==8) { |
643 | spin_unlock_irq(&sch->lock); | 650 | spin_unlock_irq(&sch->lock); |
644 | return 0; | 651 | return 0; |
@@ -646,7 +653,7 @@ __chp_add(struct subchannel_id schid, void *data) | |||
646 | sch->lpm = ((sch->schib.pmcw.pim & | 653 | sch->lpm = ((sch->schib.pmcw.pim & |
647 | sch->schib.pmcw.pam & | 654 | sch->schib.pmcw.pam & |
648 | sch->schib.pmcw.pom) | 655 | sch->schib.pmcw.pom) |
649 | | 0x80 >> i) & sch->opm; | 656 | | mask) & sch->opm; |
650 | 657 | ||
651 | if (sch->driver && sch->driver->verify) | 658 | if (sch->driver && sch->driver->verify) |
652 | sch->driver->verify(&sch->dev); | 659 | sch->driver->verify(&sch->dev); |
diff --git a/drivers/s390/cio/cio.c b/drivers/s390/cio/cio.c index 2e2882daefbb..f18b1623cad7 100644 --- a/drivers/s390/cio/cio.c +++ b/drivers/s390/cio/cio.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <asm/cio.h> | 19 | #include <asm/cio.h> |
20 | #include <asm/delay.h> | 20 | #include <asm/delay.h> |
21 | #include <asm/irq.h> | 21 | #include <asm/irq.h> |
22 | #include <asm/irq_regs.h> | ||
22 | #include <asm/setup.h> | 23 | #include <asm/setup.h> |
23 | #include "airq.h" | 24 | #include "airq.h" |
24 | #include "cio.h" | 25 | #include "cio.h" |
@@ -606,15 +607,17 @@ do_IRQ (struct pt_regs *regs) | |||
606 | struct tpi_info *tpi_info; | 607 | struct tpi_info *tpi_info; |
607 | struct subchannel *sch; | 608 | struct subchannel *sch; |
608 | struct irb *irb; | 609 | struct irb *irb; |
610 | struct pt_regs *old_regs; | ||
609 | 611 | ||
610 | irq_enter (); | 612 | irq_enter (); |
613 | old_regs = set_irq_regs(regs); | ||
611 | asm volatile ("mc 0,0"); | 614 | asm volatile ("mc 0,0"); |
612 | if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer) | 615 | if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer) |
613 | /** | 616 | /** |
614 | * Make sure that the i/o interrupt did not "overtake" | 617 | * Make sure that the i/o interrupt did not "overtake" |
615 | * the last HZ timer interrupt. | 618 | * the last HZ timer interrupt. |
616 | */ | 619 | */ |
617 | account_ticks(regs); | 620 | account_ticks(); |
618 | /* | 621 | /* |
619 | * Get interrupt information from lowcore | 622 | * Get interrupt information from lowcore |
620 | */ | 623 | */ |
@@ -652,6 +655,7 @@ do_IRQ (struct pt_regs *regs) | |||
652 | * out of the sie which costs more cycles than it saves. | 655 | * out of the sie which costs more cycles than it saves. |
653 | */ | 656 | */ |
654 | } while (!MACHINE_IS_VM && tpi (NULL) != 0); | 657 | } while (!MACHINE_IS_VM && tpi (NULL) != 0); |
658 | set_irq_regs(old_regs); | ||
655 | irq_exit (); | 659 | irq_exit (); |
656 | } | 660 | } |
657 | 661 | ||
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c index cd30f37fceae..c5ccd20b110c 100644 --- a/drivers/s390/crypto/ap_bus.c +++ b/drivers/s390/crypto/ap_bus.c | |||
@@ -1062,7 +1062,7 @@ static int ap_poll_thread(void *data) | |||
1062 | unsigned long flags; | 1062 | unsigned long flags; |
1063 | int requests; | 1063 | int requests; |
1064 | 1064 | ||
1065 | set_user_nice(current, -20); | 1065 | set_user_nice(current, 19); |
1066 | while (1) { | 1066 | while (1) { |
1067 | if (need_resched()) { | 1067 | if (need_resched()) { |
1068 | schedule(); | 1068 | schedule(); |
diff --git a/drivers/s390/net/iucv.c b/drivers/s390/net/iucv.c index 809dd8d7f47a..1476ce2b437c 100644 --- a/drivers/s390/net/iucv.c +++ b/drivers/s390/net/iucv.c | |||
@@ -116,7 +116,7 @@ static DEFINE_SPINLOCK(iucv_irq_queue_lock); | |||
116 | *Internal function prototypes | 116 | *Internal function prototypes |
117 | */ | 117 | */ |
118 | static void iucv_tasklet_handler(unsigned long); | 118 | static void iucv_tasklet_handler(unsigned long); |
119 | static void iucv_irq_handler(struct pt_regs *, __u16); | 119 | static void iucv_irq_handler(__u16); |
120 | 120 | ||
121 | static DECLARE_TASKLET(iucv_tasklet,iucv_tasklet_handler,0); | 121 | static DECLARE_TASKLET(iucv_tasklet,iucv_tasklet_handler,0); |
122 | 122 | ||
@@ -2251,7 +2251,7 @@ iucv_sever(__u16 pathid, __u8 user_data[16]) | |||
2251 | * Places the interrupt buffer on a queue and schedules iucv_tasklet_handler(). | 2251 | * Places the interrupt buffer on a queue and schedules iucv_tasklet_handler(). |
2252 | */ | 2252 | */ |
2253 | static void | 2253 | static void |
2254 | iucv_irq_handler(struct pt_regs *regs, __u16 code) | 2254 | iucv_irq_handler(__u16 code) |
2255 | { | 2255 | { |
2256 | iucv_irqdata *irqdata; | 2256 | iucv_irqdata *irqdata; |
2257 | 2257 | ||
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c index 862a411a4aa0..c88babce9bca 100644 --- a/drivers/s390/scsi/zfcp_erp.c +++ b/drivers/s390/scsi/zfcp_erp.c | |||
@@ -1987,7 +1987,7 @@ zfcp_erp_adapter_strategy_open_qdio(struct zfcp_erp_action *erp_action) | |||
1987 | sbale = &(adapter->response_queue.buffer[i]->element[0]); | 1987 | sbale = &(adapter->response_queue.buffer[i]->element[0]); |
1988 | sbale->length = 0; | 1988 | sbale->length = 0; |
1989 | sbale->flags = SBAL_FLAGS_LAST_ENTRY; | 1989 | sbale->flags = SBAL_FLAGS_LAST_ENTRY; |
1990 | sbale->addr = 0; | 1990 | sbale->addr = NULL; |
1991 | } | 1991 | } |
1992 | 1992 | ||
1993 | ZFCP_LOG_TRACE("calling do_QDIO on adapter %s (flags=0x%x, " | 1993 | ZFCP_LOG_TRACE("calling do_QDIO on adapter %s (flags=0x%x, " |
diff --git a/drivers/sbus/char/openprom.c b/drivers/sbus/char/openprom.c index 2f698763ba5d..81ba2d71cee2 100644 --- a/drivers/sbus/char/openprom.c +++ b/drivers/sbus/char/openprom.c | |||
@@ -630,7 +630,7 @@ static int openprom_ioctl(struct inode * inode, struct file * file, | |||
630 | case OPROMPATH2NODE: | 630 | case OPROMPATH2NODE: |
631 | if ((file->f_mode & FMODE_READ) == 0) | 631 | if ((file->f_mode & FMODE_READ) == 0) |
632 | return -EPERM; | 632 | return -EPERM; |
633 | return openprom_sunos_ioctl(inode, file, cmd, arg, 0); | 633 | return openprom_sunos_ioctl(inode, file, cmd, arg, NULL); |
634 | 634 | ||
635 | case OPIOCGET: | 635 | case OPIOCGET: |
636 | case OPIOCNEXTPROP: | 636 | case OPIOCNEXTPROP: |
diff --git a/drivers/sbus/char/uctrl.c b/drivers/sbus/char/uctrl.c index ddc0681ac759..b30372f17f1c 100644 --- a/drivers/sbus/char/uctrl.c +++ b/drivers/sbus/char/uctrl.c | |||
@@ -400,7 +400,7 @@ static int __init ts102_uctrl_init(void) | |||
400 | } | 400 | } |
401 | 401 | ||
402 | driver->regs->uctrl_intr = UCTRL_INTR_RXNE_REQ|UCTRL_INTR_RXNE_MSK; | 402 | driver->regs->uctrl_intr = UCTRL_INTR_RXNE_REQ|UCTRL_INTR_RXNE_MSK; |
403 | printk("uctrl: 0x%x (irq %d)\n", driver->regs, driver->irq); | 403 | printk("uctrl: 0x%p (irq %d)\n", driver->regs, driver->irq); |
404 | uctrl_get_event_status(); | 404 | uctrl_get_event_status(); |
405 | uctrl_get_external_status(); | 405 | uctrl_get_external_status(); |
406 | return 0; | 406 | return 0; |
diff --git a/drivers/scsi/NCR53c406a.c b/drivers/scsi/NCR53c406a.c index 3896278594c7..d4613815f685 100644 --- a/drivers/scsi/NCR53c406a.c +++ b/drivers/scsi/NCR53c406a.c | |||
@@ -168,7 +168,7 @@ enum Phase { | |||
168 | }; | 168 | }; |
169 | 169 | ||
170 | /* Static function prototypes */ | 170 | /* Static function prototypes */ |
171 | static void NCR53c406a_intr(int, void *); | 171 | static void NCR53c406a_intr(void *); |
172 | static irqreturn_t do_NCR53c406a_intr(int, void *); | 172 | static irqreturn_t do_NCR53c406a_intr(int, void *); |
173 | static void chip_init(void); | 173 | static void chip_init(void); |
174 | static void calc_port_addr(void); | 174 | static void calc_port_addr(void); |
@@ -685,7 +685,7 @@ static void wait_intr(void) | |||
685 | return; | 685 | return; |
686 | } | 686 | } |
687 | 687 | ||
688 | NCR53c406a_intr(0, NULL, NULL); | 688 | NCR53c406a_intr(NULL); |
689 | } | 689 | } |
690 | #endif | 690 | #endif |
691 | 691 | ||
@@ -767,12 +767,12 @@ static irqreturn_t do_NCR53c406a_intr(int unused, void *dev_id) | |||
767 | struct Scsi_Host *dev = dev_id; | 767 | struct Scsi_Host *dev = dev_id; |
768 | 768 | ||
769 | spin_lock_irqsave(dev->host_lock, flags); | 769 | spin_lock_irqsave(dev->host_lock, flags); |
770 | NCR53c406a_intr(0, dev_id); | 770 | NCR53c406a_intr(dev_id); |
771 | spin_unlock_irqrestore(dev->host_lock, flags); | 771 | spin_unlock_irqrestore(dev->host_lock, flags); |
772 | return IRQ_HANDLED; | 772 | return IRQ_HANDLED; |
773 | } | 773 | } |
774 | 774 | ||
775 | static void NCR53c406a_intr(int unused, void *dev_id) | 775 | static void NCR53c406a_intr(void *dev_id) |
776 | { | 776 | { |
777 | DEB(unsigned char fifo_size; | 777 | DEB(unsigned char fifo_size; |
778 | ) | 778 | ) |
diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c index 83695416b2c9..2b344356a29e 100644 --- a/drivers/scsi/advansys.c +++ b/drivers/scsi/advansys.c | |||
@@ -3881,7 +3881,7 @@ typedef struct asc_board { | |||
3881 | /* | 3881 | /* |
3882 | * The following fields are used only for Wide Boards. | 3882 | * The following fields are used only for Wide Boards. |
3883 | */ | 3883 | */ |
3884 | void *ioremap_addr; /* I/O Memory remap address. */ | 3884 | void __iomem *ioremap_addr; /* I/O Memory remap address. */ |
3885 | ushort ioport; /* I/O Port address. */ | 3885 | ushort ioport; /* I/O Port address. */ |
3886 | ADV_CARR_T *orig_carrp; /* ADV_CARR_T memory block. */ | 3886 | ADV_CARR_T *orig_carrp; /* ADV_CARR_T memory block. */ |
3887 | adv_req_t *orig_reqp; /* adv_req_t memory block. */ | 3887 | adv_req_t *orig_reqp; /* adv_req_t memory block. */ |
@@ -3951,7 +3951,7 @@ typedef struct _PCI_CONFIG_SPACE_ | |||
3951 | 3951 | ||
3952 | /* Number of boards detected in system. */ | 3952 | /* Number of boards detected in system. */ |
3953 | STATIC int asc_board_count = 0; | 3953 | STATIC int asc_board_count = 0; |
3954 | STATIC struct Scsi_Host *asc_host[ASC_NUM_BOARD_SUPPORTED] = { 0 }; | 3954 | STATIC struct Scsi_Host *asc_host[ASC_NUM_BOARD_SUPPORTED] = { NULL }; |
3955 | 3955 | ||
3956 | /* Overrun buffer used by all narrow boards. */ | 3956 | /* Overrun buffer used by all narrow boards. */ |
3957 | STATIC uchar overrun_buf[ASC_OVERRUN_BSIZE] = { 0 }; | 3957 | STATIC uchar overrun_buf[ASC_OVERRUN_BSIZE] = { 0 }; |
@@ -6621,7 +6621,7 @@ adv_build_req(asc_board_t *boardp, struct scsi_cmnd *scp, | |||
6621 | dma_map_single(dev, scp->request_buffer, | 6621 | dma_map_single(dev, scp->request_buffer, |
6622 | scp->request_bufflen, scp->sc_data_direction); | 6622 | scp->request_bufflen, scp->sc_data_direction); |
6623 | } else { | 6623 | } else { |
6624 | scsiqp->vdata_addr = 0; | 6624 | scsiqp->vdata_addr = NULL; |
6625 | scp->SCp.dma_handle = 0; | 6625 | scp->SCp.dma_handle = 0; |
6626 | } | 6626 | } |
6627 | scsiqp->data_addr = cpu_to_le32(scp->SCp.dma_handle); | 6627 | scsiqp->data_addr = cpu_to_le32(scp->SCp.dma_handle); |
diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c index e04c2bc1932b..a0d1cee0be77 100644 --- a/drivers/scsi/aha152x.c +++ b/drivers/scsi/aha152x.c | |||
@@ -759,12 +759,7 @@ static inline Scsi_Cmnd *remove_SC(Scsi_Cmnd **SC, Scsi_Cmnd *SCp) | |||
759 | 759 | ||
760 | static irqreturn_t swintr(int irqno, void *dev_id) | 760 | static irqreturn_t swintr(int irqno, void *dev_id) |
761 | { | 761 | { |
762 | struct Scsi_Host *shpnt = (struct Scsi_Host *)dev_id; | 762 | struct Scsi_Host *shpnt = dev_id; |
763 | |||
764 | if (!shpnt) { | ||
765 | printk(KERN_ERR "aha152x: catched software interrupt %d for unknown controller.\n", irqno); | ||
766 | return IRQ_NONE; | ||
767 | } | ||
768 | 763 | ||
769 | HOSTDATA(shpnt)->swint++; | 764 | HOSTDATA(shpnt)->swint++; |
770 | 765 | ||
diff --git a/drivers/scsi/aic7xxx_old.c b/drivers/scsi/aic7xxx_old.c index 7f0adf9c4c7e..bcd7fffab907 100644 --- a/drivers/scsi/aic7xxx_old.c +++ b/drivers/scsi/aic7xxx_old.c | |||
@@ -6345,12 +6345,12 @@ aic7xxx_handle_command_completion_intr(struct aic7xxx_host *p) | |||
6345 | * SCSI controller interrupt handler. | 6345 | * SCSI controller interrupt handler. |
6346 | *-F*************************************************************************/ | 6346 | *-F*************************************************************************/ |
6347 | static void | 6347 | static void |
6348 | aic7xxx_isr(int irq, void *dev_id) | 6348 | aic7xxx_isr(void *dev_id) |
6349 | { | 6349 | { |
6350 | struct aic7xxx_host *p; | 6350 | struct aic7xxx_host *p; |
6351 | unsigned char intstat; | 6351 | unsigned char intstat; |
6352 | 6352 | ||
6353 | p = (struct aic7xxx_host *)dev_id; | 6353 | p = dev_id; |
6354 | 6354 | ||
6355 | /* | 6355 | /* |
6356 | * Just a few sanity checks. Make sure that we have an int pending. | 6356 | * Just a few sanity checks. Make sure that we have an int pending. |
@@ -6489,7 +6489,7 @@ do_aic7xxx_isr(int irq, void *dev_id) | |||
6489 | p->flags |= AHC_IN_ISR; | 6489 | p->flags |= AHC_IN_ISR; |
6490 | do | 6490 | do |
6491 | { | 6491 | { |
6492 | aic7xxx_isr(irq, dev_id); | 6492 | aic7xxx_isr(dev_id); |
6493 | } while ( (aic_inb(p, INTSTAT) & INT_PEND) ); | 6493 | } while ( (aic_inb(p, INTSTAT) & INT_PEND) ); |
6494 | aic7xxx_done_cmds_complete(p); | 6494 | aic7xxx_done_cmds_complete(p); |
6495 | aic7xxx_run_waiting_queues(p); | 6495 | aic7xxx_run_waiting_queues(p); |
@@ -10377,7 +10377,7 @@ static int __aic7xxx_bus_device_reset(struct scsi_cmnd *cmd) | |||
10377 | 10377 | ||
10378 | hscb = scb->hscb; | 10378 | hscb = scb->hscb; |
10379 | 10379 | ||
10380 | aic7xxx_isr(p->irq, (void *)p); | 10380 | aic7xxx_isr(p); |
10381 | aic7xxx_done_cmds_complete(p); | 10381 | aic7xxx_done_cmds_complete(p); |
10382 | /* If the command was already complete or just completed, then we didn't | 10382 | /* If the command was already complete or just completed, then we didn't |
10383 | * do a reset, return FAILED */ | 10383 | * do a reset, return FAILED */ |
@@ -10608,7 +10608,7 @@ static int __aic7xxx_abort(struct scsi_cmnd *cmd) | |||
10608 | else | 10608 | else |
10609 | return FAILED; | 10609 | return FAILED; |
10610 | 10610 | ||
10611 | aic7xxx_isr(p->irq, (void *)p); | 10611 | aic7xxx_isr(p); |
10612 | aic7xxx_done_cmds_complete(p); | 10612 | aic7xxx_done_cmds_complete(p); |
10613 | /* If the command was already complete or just completed, then we didn't | 10613 | /* If the command was already complete or just completed, then we didn't |
10614 | * do a reset, return FAILED */ | 10614 | * do a reset, return FAILED */ |
@@ -10863,7 +10863,7 @@ static int aic7xxx_reset(struct scsi_cmnd *cmd) | |||
10863 | 10863 | ||
10864 | while((aic_inb(p, INTSTAT) & INT_PEND) && !(p->flags & AHC_IN_ISR)) | 10864 | while((aic_inb(p, INTSTAT) & INT_PEND) && !(p->flags & AHC_IN_ISR)) |
10865 | { | 10865 | { |
10866 | aic7xxx_isr(p->irq, p); | 10866 | aic7xxx_isr(p); |
10867 | pause_sequencer(p); | 10867 | pause_sequencer(p); |
10868 | } | 10868 | } |
10869 | aic7xxx_done_cmds_complete(p); | 10869 | aic7xxx_done_cmds_complete(p); |
diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c index 81e3ee51d897..e95b367d09ed 100644 --- a/drivers/scsi/dc395x.c +++ b/drivers/scsi/dc395x.c | |||
@@ -1219,7 +1219,7 @@ static void dump_register_info(struct AdapterCtlBlk *acb, | |||
1219 | srb, srb->cmd, srb->cmd->pid, | 1219 | srb, srb->cmd, srb->cmd->pid, |
1220 | srb->cmd->cmnd[0], srb->cmd->device->id, | 1220 | srb->cmd->cmnd[0], srb->cmd->device->id, |
1221 | srb->cmd->device->lun); | 1221 | srb->cmd->device->lun); |
1222 | printk(" sglist=%p cnt=%i idx=%i len=%Zd\n", | 1222 | printk(" sglist=%p cnt=%i idx=%i len=%zu\n", |
1223 | srb->segment_x, srb->sg_count, srb->sg_index, | 1223 | srb->segment_x, srb->sg_count, srb->sg_index, |
1224 | srb->total_xfer_length); | 1224 | srb->total_xfer_length); |
1225 | printk(" state=0x%04x status=0x%02x phase=0x%02x (%sconn.)\n", | 1225 | printk(" state=0x%04x status=0x%02x phase=0x%02x (%sconn.)\n", |
@@ -1815,7 +1815,7 @@ static void dc395x_handle_interrupt(struct AdapterCtlBlk *acb, | |||
1815 | 1815 | ||
1816 | static irqreturn_t dc395x_interrupt(int irq, void *dev_id) | 1816 | static irqreturn_t dc395x_interrupt(int irq, void *dev_id) |
1817 | { | 1817 | { |
1818 | struct AdapterCtlBlk *acb = (struct AdapterCtlBlk *)dev_id; | 1818 | struct AdapterCtlBlk *acb = dev_id; |
1819 | u16 scsi_status; | 1819 | u16 scsi_status; |
1820 | u8 dma_status; | 1820 | u8 dma_status; |
1821 | irqreturn_t handled = IRQ_NONE; | 1821 | irqreturn_t handled = IRQ_NONE; |
diff --git a/drivers/scsi/mesh.c b/drivers/scsi/mesh.c index c773e35dace7..1fd3c7590d31 100644 --- a/drivers/scsi/mesh.c +++ b/drivers/scsi/mesh.c | |||
@@ -466,7 +466,7 @@ static void mesh_start_cmd(struct mesh_state *ms, struct scsi_cmnd *cmd) | |||
466 | dlog(ms, "intr b4 arb, intr/exc/err/fc=%.8x", | 466 | dlog(ms, "intr b4 arb, intr/exc/err/fc=%.8x", |
467 | MKWORD(mr->interrupt, mr->exception, | 467 | MKWORD(mr->interrupt, mr->exception, |
468 | mr->error, mr->fifo_count)); | 468 | mr->error, mr->fifo_count)); |
469 | mesh_interrupt(0, (void *)ms, NULL); | 469 | mesh_interrupt(0, (void *)ms); |
470 | if (ms->phase != arbitrating) | 470 | if (ms->phase != arbitrating) |
471 | return; | 471 | return; |
472 | } | 472 | } |
@@ -504,7 +504,7 @@ static void mesh_start_cmd(struct mesh_state *ms, struct scsi_cmnd *cmd) | |||
504 | dlog(ms, "intr after disresel, intr/exc/err/fc=%.8x", | 504 | dlog(ms, "intr after disresel, intr/exc/err/fc=%.8x", |
505 | MKWORD(mr->interrupt, mr->exception, | 505 | MKWORD(mr->interrupt, mr->exception, |
506 | mr->error, mr->fifo_count)); | 506 | mr->error, mr->fifo_count)); |
507 | mesh_interrupt(0, (void *)ms, NULL); | 507 | mesh_interrupt(0, (void *)ms); |
508 | if (ms->phase != arbitrating) | 508 | if (ms->phase != arbitrating) |
509 | return; | 509 | return; |
510 | dlog(ms, "after intr after disresel, intr/exc/err/fc=%.8x", | 510 | dlog(ms, "after intr after disresel, intr/exc/err/fc=%.8x", |
diff --git a/drivers/scsi/qlogicfas408.c b/drivers/scsi/qlogicfas408.c index 1a7de3bd796f..e0725353c99c 100644 --- a/drivers/scsi/qlogicfas408.c +++ b/drivers/scsi/qlogicfas408.c | |||
@@ -405,10 +405,10 @@ static unsigned int ql_pcmd(Scsi_Cmnd * cmd) | |||
405 | * Interrupt handler | 405 | * Interrupt handler |
406 | */ | 406 | */ |
407 | 407 | ||
408 | static void ql_ihandl(int irq, void *dev_id) | 408 | static void ql_ihandl(void *dev_id) |
409 | { | 409 | { |
410 | Scsi_Cmnd *icmd; | 410 | Scsi_Cmnd *icmd; |
411 | struct Scsi_Host *host = (struct Scsi_Host *)dev_id; | 411 | struct Scsi_Host *host = dev_id; |
412 | struct qlogicfas408_priv *priv = get_priv_by_host(host); | 412 | struct qlogicfas408_priv *priv = get_priv_by_host(host); |
413 | int qbase = priv->qbase; | 413 | int qbase = priv->qbase; |
414 | REG0; | 414 | REG0; |
@@ -438,7 +438,7 @@ irqreturn_t qlogicfas408_ihandl(int irq, void *dev_id) | |||
438 | struct Scsi_Host *host = dev_id; | 438 | struct Scsi_Host *host = dev_id; |
439 | 439 | ||
440 | spin_lock_irqsave(host->host_lock, flags); | 440 | spin_lock_irqsave(host->host_lock, flags); |
441 | ql_ihandl(irq, dev_id); | 441 | ql_ihandl(dev_id); |
442 | spin_unlock_irqrestore(host->host_lock, flags); | 442 | spin_unlock_irqrestore(host->host_lock, flags); |
443 | return IRQ_HANDLED; | 443 | return IRQ_HANDLED; |
444 | } | 444 | } |
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index 3d355d054612..aff1b0cfd4b2 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c | |||
@@ -495,7 +495,7 @@ static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, unsigned char *cmnd, | |||
495 | memcpy(scmd->cmnd, cmnd, cmnd_size); | 495 | memcpy(scmd->cmnd, cmnd, cmnd_size); |
496 | 496 | ||
497 | if (copy_sense) { | 497 | if (copy_sense) { |
498 | int gfp_mask = GFP_ATOMIC; | 498 | gfp_t gfp_mask = GFP_ATOMIC; |
499 | 499 | ||
500 | if (shost->hostt->unchecked_isa_dma) | 500 | if (shost->hostt->unchecked_isa_dma) |
501 | gfp_mask |= __GFP_DMA; | 501 | gfp_mask |= __GFP_DMA; |
diff --git a/drivers/scsi/tmscsim.c b/drivers/scsi/tmscsim.c index 0f0ac925d319..d03aa6ce8fe8 100644 --- a/drivers/scsi/tmscsim.c +++ b/drivers/scsi/tmscsim.c | |||
@@ -700,9 +700,9 @@ dc390_InvalidCmd(struct dc390_acb* pACB) | |||
700 | 700 | ||
701 | 701 | ||
702 | static irqreturn_t __inline__ | 702 | static irqreturn_t __inline__ |
703 | DC390_Interrupt(int irq, void *dev_id) | 703 | DC390_Interrupt(void *dev_id) |
704 | { | 704 | { |
705 | struct dc390_acb *pACB = (struct dc390_acb*)dev_id; | 705 | struct dc390_acb *pACB = dev_id; |
706 | struct dc390_dcb *pDCB; | 706 | struct dc390_dcb *pDCB; |
707 | struct dc390_srb *pSRB; | 707 | struct dc390_srb *pSRB; |
708 | u8 sstatus=0; | 708 | u8 sstatus=0; |
@@ -811,12 +811,12 @@ DC390_Interrupt(int irq, void *dev_id) | |||
811 | return IRQ_HANDLED; | 811 | return IRQ_HANDLED; |
812 | } | 812 | } |
813 | 813 | ||
814 | static irqreturn_t do_DC390_Interrupt( int irq, void *dev_id) | 814 | static irqreturn_t do_DC390_Interrupt(int irq, void *dev_id) |
815 | { | 815 | { |
816 | irqreturn_t ret; | 816 | irqreturn_t ret; |
817 | DEBUG1(printk (KERN_INFO "DC390: Irq (%i) caught: ", irq)); | 817 | DEBUG1(printk (KERN_INFO "DC390: Irq (%i) caught: ", irq)); |
818 | /* Locking is done in DC390_Interrupt */ | 818 | /* Locking is done in DC390_Interrupt */ |
819 | ret = DC390_Interrupt(irq, dev_id); | 819 | ret = DC390_Interrupt(dev_id); |
820 | DEBUG1(printk (".. IRQ returned\n")); | 820 | DEBUG1(printk (".. IRQ returned\n")); |
821 | return ret; | 821 | return ret; |
822 | } | 822 | } |
diff --git a/drivers/scsi/ultrastor.c b/drivers/scsi/ultrastor.c index 107f0fc34949..56906aba5ee3 100644 --- a/drivers/scsi/ultrastor.c +++ b/drivers/scsi/ultrastor.c | |||
@@ -287,7 +287,7 @@ static const unsigned short ultrastor_ports_14f[] = { | |||
287 | }; | 287 | }; |
288 | #endif | 288 | #endif |
289 | 289 | ||
290 | static void ultrastor_interrupt(int, void *); | 290 | static void ultrastor_interrupt(void *); |
291 | static irqreturn_t do_ultrastor_interrupt(int, void *); | 291 | static irqreturn_t do_ultrastor_interrupt(int, void *); |
292 | static inline void build_sg_list(struct mscp *, struct scsi_cmnd *SCpnt); | 292 | static inline void build_sg_list(struct mscp *, struct scsi_cmnd *SCpnt); |
293 | 293 | ||
@@ -893,7 +893,7 @@ static int ultrastor_abort(struct scsi_cmnd *SCpnt) | |||
893 | 893 | ||
894 | spin_lock_irqsave(host->host_lock, flags); | 894 | spin_lock_irqsave(host->host_lock, flags); |
895 | /* FIXME: Ewww... need to think about passing host around properly */ | 895 | /* FIXME: Ewww... need to think about passing host around properly */ |
896 | ultrastor_interrupt(0, NULL); | 896 | ultrastor_interrupt(NULL); |
897 | spin_unlock_irqrestore(host->host_lock, flags); | 897 | spin_unlock_irqrestore(host->host_lock, flags); |
898 | return SUCCESS; | 898 | return SUCCESS; |
899 | } | 899 | } |
@@ -1039,7 +1039,7 @@ int ultrastor_biosparam(struct scsi_device *sdev, struct block_device *bdev, | |||
1039 | return 0; | 1039 | return 0; |
1040 | } | 1040 | } |
1041 | 1041 | ||
1042 | static void ultrastor_interrupt(int irq, void *dev_id) | 1042 | static void ultrastor_interrupt(void *dev_id) |
1043 | { | 1043 | { |
1044 | unsigned int status; | 1044 | unsigned int status; |
1045 | #if ULTRASTOR_MAX_CMDS > 1 | 1045 | #if ULTRASTOR_MAX_CMDS > 1 |
@@ -1177,7 +1177,7 @@ static irqreturn_t do_ultrastor_interrupt(int irq, void *dev_id) | |||
1177 | struct Scsi_Host *dev = dev_id; | 1177 | struct Scsi_Host *dev = dev_id; |
1178 | 1178 | ||
1179 | spin_lock_irqsave(dev->host_lock, flags); | 1179 | spin_lock_irqsave(dev->host_lock, flags); |
1180 | ultrastor_interrupt(irq, dev_id); | 1180 | ultrastor_interrupt(dev_id); |
1181 | spin_unlock_irqrestore(dev->host_lock, flags); | 1181 | spin_unlock_irqrestore(dev->host_lock, flags); |
1182 | return IRQ_HANDLED; | 1182 | return IRQ_HANDLED; |
1183 | } | 1183 | } |
diff --git a/drivers/serial/68360serial.c b/drivers/serial/68360serial.c index 4e56ec803861..634ecca36a77 100644 --- a/drivers/serial/68360serial.c +++ b/drivers/serial/68360serial.c | |||
@@ -620,7 +620,7 @@ static void rs_360_interrupt(int vec, void *dev_id) | |||
620 | volatile struct smc_regs *smcp; | 620 | volatile struct smc_regs *smcp; |
621 | volatile struct scc_regs *sccp; | 621 | volatile struct scc_regs *sccp; |
622 | 622 | ||
623 | info = (ser_info_t *)dev_id; | 623 | info = dev_id; |
624 | 624 | ||
625 | idx = PORT_NUM(info->state->smc_scc_num); | 625 | idx = PORT_NUM(info->state->smc_scc_num); |
626 | if (info->state->smc_scc_num & NUM_IS_SCC) { | 626 | if (info->state->smc_scc_num & NUM_IS_SCC) { |
diff --git a/drivers/serial/jsm/jsm_neo.c b/drivers/serial/jsm/jsm_neo.c index 8fa31e68989a..8be8da37f629 100644 --- a/drivers/serial/jsm/jsm_neo.c +++ b/drivers/serial/jsm/jsm_neo.c | |||
@@ -1116,7 +1116,7 @@ static void neo_param(struct jsm_channel *ch) | |||
1116 | */ | 1116 | */ |
1117 | static irqreturn_t neo_intr(int irq, void *voidbrd) | 1117 | static irqreturn_t neo_intr(int irq, void *voidbrd) |
1118 | { | 1118 | { |
1119 | struct jsm_board *brd = (struct jsm_board *) voidbrd; | 1119 | struct jsm_board *brd = voidbrd; |
1120 | struct jsm_channel *ch; | 1120 | struct jsm_channel *ch; |
1121 | int port = 0; | 1121 | int port = 0; |
1122 | int type = 0; | 1122 | int type = 0; |
diff --git a/drivers/serial/m32r_sio.c b/drivers/serial/m32r_sio.c index c85ac1a77608..7656a35f5e2f 100644 --- a/drivers/serial/m32r_sio.c +++ b/drivers/serial/m32r_sio.c | |||
@@ -590,7 +590,7 @@ static void m32r_sio_timeout(unsigned long data) | |||
590 | sts = sio_in(up, SIOSTS); | 590 | sts = sio_in(up, SIOSTS); |
591 | if (sts & 0x5) { | 591 | if (sts & 0x5) { |
592 | spin_lock(&up->port.lock); | 592 | spin_lock(&up->port.lock); |
593 | m32r_sio_handle_port(up, sts, NULL); | 593 | m32r_sio_handle_port(up, sts); |
594 | spin_unlock(&up->port.lock); | 594 | spin_unlock(&up->port.lock); |
595 | } | 595 | } |
596 | 596 | ||
diff --git a/drivers/serial/mpc52xx_uart.c b/drivers/serial/mpc52xx_uart.c index 039c2fd6d496..4f80c5b4a753 100644 --- a/drivers/serial/mpc52xx_uart.c +++ b/drivers/serial/mpc52xx_uart.c | |||
@@ -512,19 +512,11 @@ mpc52xx_uart_int_tx_chars(struct uart_port *port) | |||
512 | static irqreturn_t | 512 | static irqreturn_t |
513 | mpc52xx_uart_int(int irq, void *dev_id) | 513 | mpc52xx_uart_int(int irq, void *dev_id) |
514 | { | 514 | { |
515 | struct uart_port *port = (struct uart_port *) dev_id; | 515 | struct uart_port *port = dev_id; |
516 | unsigned long pass = ISR_PASS_LIMIT; | 516 | unsigned long pass = ISR_PASS_LIMIT; |
517 | unsigned int keepgoing; | 517 | unsigned int keepgoing; |
518 | unsigned short status; | 518 | unsigned short status; |
519 | 519 | ||
520 | if ( irq != port->irq ) { | ||
521 | printk( KERN_WARNING | ||
522 | "mpc52xx_uart_int : " \ | ||
523 | "Received wrong int %d. Waiting for %d\n", | ||
524 | irq, port->irq); | ||
525 | return IRQ_NONE; | ||
526 | } | ||
527 | |||
528 | spin_lock(&port->lock); | 520 | spin_lock(&port->lock); |
529 | 521 | ||
530 | /* While we have stuff to do, we continue */ | 522 | /* While we have stuff to do, we continue */ |
diff --git a/drivers/serial/mux.c b/drivers/serial/mux.c index aa819d3f8ee5..8ad1b8c5ec5d 100644 --- a/drivers/serial/mux.c +++ b/drivers/serial/mux.c | |||
@@ -230,7 +230,7 @@ static void mux_read(struct uart_port *port) | |||
230 | continue; | 230 | continue; |
231 | } | 231 | } |
232 | 232 | ||
233 | if (uart_handle_sysrq_char(port, data & 0xffu, NULL)) | 233 | if (uart_handle_sysrq_char(port, data & 0xffu)) |
234 | continue; | 234 | continue; |
235 | 235 | ||
236 | tty_insert_flip_char(tty, data & 0xFF, TTY_NORMAL); | 236 | tty_insert_flip_char(tty, data & 0xFF, TTY_NORMAL); |
diff --git a/drivers/serial/netx-serial.c b/drivers/serial/netx-serial.c index e92d7e1c22cf..062bad457b1a 100644 --- a/drivers/serial/netx-serial.c +++ b/drivers/serial/netx-serial.c | |||
@@ -247,7 +247,7 @@ static void netx_rxint(struct uart_port *port) | |||
247 | 247 | ||
248 | static irqreturn_t netx_int(int irq, void *dev_id) | 248 | static irqreturn_t netx_int(int irq, void *dev_id) |
249 | { | 249 | { |
250 | struct uart_port *port = (struct uart_port *)dev_id; | 250 | struct uart_port *port = dev_id; |
251 | unsigned long flags; | 251 | unsigned long flags; |
252 | unsigned char status; | 252 | unsigned char status; |
253 | 253 | ||
diff --git a/drivers/serial/pxa.c b/drivers/serial/pxa.c index 846089f222d4..415fe9633a9b 100644 --- a/drivers/serial/pxa.c +++ b/drivers/serial/pxa.c | |||
@@ -232,7 +232,7 @@ static inline void check_modem_status(struct uart_pxa_port *up) | |||
232 | */ | 232 | */ |
233 | static inline irqreturn_t serial_pxa_irq(int irq, void *dev_id) | 233 | static inline irqreturn_t serial_pxa_irq(int irq, void *dev_id) |
234 | { | 234 | { |
235 | struct uart_pxa_port *up = (struct uart_pxa_port *)dev_id; | 235 | struct uart_pxa_port *up = dev_id; |
236 | unsigned int iir, lsr; | 236 | unsigned int iir, lsr; |
237 | 237 | ||
238 | iir = serial_in(up, UART_IIR); | 238 | iir = serial_in(up, UART_IIR); |
diff --git a/drivers/serial/sn_console.c b/drivers/serial/sn_console.c index 709f93a6c18c..956b2cf08e1e 100644 --- a/drivers/serial/sn_console.c +++ b/drivers/serial/sn_console.c | |||
@@ -674,7 +674,7 @@ static void sn_sal_timer_poll(unsigned long data) | |||
674 | if (!port->sc_port.irq) { | 674 | if (!port->sc_port.irq) { |
675 | spin_lock_irqsave(&port->sc_port.lock, flags); | 675 | spin_lock_irqsave(&port->sc_port.lock, flags); |
676 | if (sn_process_input) | 676 | if (sn_process_input) |
677 | sn_receive_chars(port, NULL, flags); | 677 | sn_receive_chars(port, flags); |
678 | sn_transmit_chars(port, TRANSMIT_RAW); | 678 | sn_transmit_chars(port, TRANSMIT_RAW); |
679 | spin_unlock_irqrestore(&port->sc_port.lock, flags); | 679 | spin_unlock_irqrestore(&port->sc_port.lock, flags); |
680 | mod_timer(&port->sc_timer, | 680 | mod_timer(&port->sc_timer, |
diff --git a/drivers/serial/sunzilog.c b/drivers/serial/sunzilog.c index b11f6dea2704..73dd2eedaaad 100644 --- a/drivers/serial/sunzilog.c +++ b/drivers/serial/sunzilog.c | |||
@@ -1057,7 +1057,7 @@ static void sunzilog_free_tables(void) | |||
1057 | 1057 | ||
1058 | static void sunzilog_putchar(struct uart_port *port, int ch) | 1058 | static void sunzilog_putchar(struct uart_port *port, int ch) |
1059 | { | 1059 | { |
1060 | struct zilog_channel *channel = ZILOG_CHANNEL_FROM_PORT(port); | 1060 | struct zilog_channel __iomem *channel = ZILOG_CHANNEL_FROM_PORT(port); |
1061 | int loops = ZS_PUT_CHAR_MAX_DELAY; | 1061 | int loops = ZS_PUT_CHAR_MAX_DELAY; |
1062 | 1062 | ||
1063 | /* This is a timed polling loop so do not switch the explicit | 1063 | /* This is a timed polling loop so do not switch the explicit |
diff --git a/drivers/sn/ioc3.c b/drivers/sn/ioc3.c index 3d91b6b9287d..cd6b65333b71 100644 --- a/drivers/sn/ioc3.c +++ b/drivers/sn/ioc3.c | |||
@@ -401,7 +401,7 @@ static inline uint32_t get_pending_intrs(struct ioc3_driver_data *idd) | |||
401 | static irqreturn_t ioc3_intr_io(int irq, void *arg) | 401 | static irqreturn_t ioc3_intr_io(int irq, void *arg) |
402 | { | 402 | { |
403 | unsigned long flags; | 403 | unsigned long flags; |
404 | struct ioc3_driver_data *idd = (struct ioc3_driver_data *)arg; | 404 | struct ioc3_driver_data *idd = arg; |
405 | int handled = 1, id; | 405 | int handled = 1, id; |
406 | unsigned int pending; | 406 | unsigned int pending; |
407 | 407 | ||
diff --git a/drivers/spi/pxa2xx_spi.c b/drivers/spi/pxa2xx_spi.c index 77122edeb206..72025df5561d 100644 --- a/drivers/spi/pxa2xx_spi.c +++ b/drivers/spi/pxa2xx_spi.c | |||
@@ -669,7 +669,7 @@ static irqreturn_t interrupt_transfer(struct driver_data *drv_data) | |||
669 | 669 | ||
670 | static irqreturn_t ssp_int(int irq, void *dev_id) | 670 | static irqreturn_t ssp_int(int irq, void *dev_id) |
671 | { | 671 | { |
672 | struct driver_data *drv_data = (struct driver_data *)dev_id; | 672 | struct driver_data *drv_data = dev_id; |
673 | void *reg = drv_data->ioaddr; | 673 | void *reg = drv_data->ioaddr; |
674 | 674 | ||
675 | if (!drv_data->cur_msg) { | 675 | if (!drv_data->cur_msg) { |
diff --git a/drivers/tc/zs.c b/drivers/tc/zs.c index 7c0fe1dc96a9..792becdfe6f8 100644 --- a/drivers/tc/zs.c +++ b/drivers/tc/zs.c | |||
@@ -389,7 +389,7 @@ static void receive_chars(struct dec_serial *info) | |||
389 | if (ch == 0) | 389 | if (ch == 0) |
390 | continue; | 390 | continue; |
391 | if (time_before(jiffies, break_pressed + HZ * 5)) { | 391 | if (time_before(jiffies, break_pressed + HZ * 5)) { |
392 | handle_sysrq(ch, regs, NULL); | 392 | handle_sysrq(ch, NULL); |
393 | break_pressed = 0; | 393 | break_pressed = 0; |
394 | continue; | 394 | continue; |
395 | } | 395 | } |
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c index 2c9c9462d899..724822cac2b1 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c | |||
@@ -1216,7 +1216,7 @@ static int proc_submiturb_compat(struct dev_state *ps, void __user *arg) | |||
1216 | { | 1216 | { |
1217 | struct usbdevfs_urb uurb; | 1217 | struct usbdevfs_urb uurb; |
1218 | 1218 | ||
1219 | if (get_urb32(&uurb,(struct usbdevfs_urb32 *)arg)) | 1219 | if (get_urb32(&uurb,(struct usbdevfs_urb32 __user *)arg)) |
1220 | return -EFAULT; | 1220 | return -EFAULT; |
1221 | 1221 | ||
1222 | return proc_do_submiturb(ps, &uurb, ((struct usbdevfs_urb32 __user *)arg)->iso_frame_desc, arg); | 1222 | return proc_do_submiturb(ps, &uurb, ((struct usbdevfs_urb32 __user *)arg)->iso_frame_desc, arg); |
@@ -1251,7 +1251,7 @@ static int processcompl_compat(struct async *as, void __user * __user *arg) | |||
1251 | } | 1251 | } |
1252 | 1252 | ||
1253 | free_async(as); | 1253 | free_async(as); |
1254 | if (put_user((u32)(u64)addr, (u32 __user *)arg)) | 1254 | if (put_user(ptr_to_compat(addr), (u32 __user *)arg)) |
1255 | return -EFAULT; | 1255 | return -EFAULT; |
1256 | return 0; | 1256 | return 0; |
1257 | } | 1257 | } |
@@ -1520,7 +1520,7 @@ static int usbdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd | |||
1520 | 1520 | ||
1521 | case USBDEVFS_IOCTL32: | 1521 | case USBDEVFS_IOCTL32: |
1522 | snoop(&dev->dev, "%s: IOCTL\n", __FUNCTION__); | 1522 | snoop(&dev->dev, "%s: IOCTL\n", __FUNCTION__); |
1523 | ret = proc_ioctl_compat(ps, (compat_uptr_t)(long)p); | 1523 | ret = proc_ioctl_compat(ps, ptr_to_compat(p)); |
1524 | break; | 1524 | break; |
1525 | #endif | 1525 | #endif |
1526 | 1526 | ||
diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c index 4d2946e540cf..f1f32d7be5f9 100644 --- a/drivers/usb/gadget/dummy_hcd.c +++ b/drivers/usb/gadget/dummy_hcd.c | |||
@@ -1551,7 +1551,7 @@ return_urb: | |||
1551 | ep->already_seen = ep->setup_stage = 0; | 1551 | ep->already_seen = ep->setup_stage = 0; |
1552 | 1552 | ||
1553 | spin_unlock (&dum->lock); | 1553 | spin_unlock (&dum->lock); |
1554 | usb_hcd_giveback_urb (dummy_to_hcd(dum), urb, NULL); | 1554 | usb_hcd_giveback_urb (dummy_to_hcd(dum), urb); |
1555 | spin_lock (&dum->lock); | 1555 | spin_lock (&dum->lock); |
1556 | 1556 | ||
1557 | goto restart; | 1557 | goto restart; |
diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c index e08d1a2664e6..fe1fe2f97cb5 100644 --- a/drivers/usb/host/ohci-q.c +++ b/drivers/usb/host/ohci-q.c | |||
@@ -925,7 +925,7 @@ rescan_all: | |||
925 | /* only take off EDs that the HC isn't using, accounting for | 925 | /* only take off EDs that the HC isn't using, accounting for |
926 | * frame counter wraps and EDs with partially retired TDs | 926 | * frame counter wraps and EDs with partially retired TDs |
927 | */ | 927 | */ |
928 | if (likely (get_irq_regs() && HC_IS_RUNNING(ohci_to_hcd(ohci)->state))) { | 928 | if (likely (HC_IS_RUNNING(ohci_to_hcd(ohci)->state))) { |
929 | if (tick_before (tick, ed->tick)) { | 929 | if (tick_before (tick, ed->tick)) { |
930 | skip_ed: | 930 | skip_ed: |
931 | last = &ed->ed_next; | 931 | last = &ed->ed_next; |
diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c index 2306d493e55b..021be39fe16e 100644 --- a/drivers/usb/serial/mos7840.c +++ b/drivers/usb/serial/mos7840.c | |||
@@ -1087,7 +1087,7 @@ static int mos7840_open(struct usb_serial_port *port, struct file *filp) | |||
1087 | mos7840_port->icount.tx = 0; | 1087 | mos7840_port->icount.tx = 0; |
1088 | mos7840_port->icount.rx = 0; | 1088 | mos7840_port->icount.rx = 0; |
1089 | 1089 | ||
1090 | dbg("\n\nusb_serial serial:%x mos7840_port:%x\n usb_serial_port port:%x\n\n", (unsigned int)serial, (unsigned int)mos7840_port, (unsigned int)port); | 1090 | dbg("\n\nusb_serial serial:%p mos7840_port:%p\n usb_serial_port port:%p\n\n", serial, mos7840_port, port); |
1091 | 1091 | ||
1092 | return 0; | 1092 | return 0; |
1093 | 1093 | ||
@@ -1420,7 +1420,6 @@ static int mos7840_write(struct usb_serial_port *port, | |||
1420 | int i; | 1420 | int i; |
1421 | int bytes_sent = 0; | 1421 | int bytes_sent = 0; |
1422 | int transfer_size; | 1422 | int transfer_size; |
1423 | int from_user = 0; | ||
1424 | 1423 | ||
1425 | struct moschip_port *mos7840_port; | 1424 | struct moschip_port *mos7840_port; |
1426 | struct usb_serial *serial; | 1425 | struct usb_serial *serial; |
@@ -1511,15 +1510,7 @@ static int mos7840_write(struct usb_serial_port *port, | |||
1511 | } | 1510 | } |
1512 | transfer_size = min(count, URB_TRANSFER_BUFFER_SIZE); | 1511 | transfer_size = min(count, URB_TRANSFER_BUFFER_SIZE); |
1513 | 1512 | ||
1514 | if (from_user) { | 1513 | memcpy(urb->transfer_buffer, current_position, transfer_size); |
1515 | if (copy_from_user | ||
1516 | (urb->transfer_buffer, current_position, transfer_size)) { | ||
1517 | bytes_sent = -EFAULT; | ||
1518 | goto exit; | ||
1519 | } | ||
1520 | } else { | ||
1521 | memcpy(urb->transfer_buffer, current_position, transfer_size); | ||
1522 | } | ||
1523 | 1514 | ||
1524 | /* fill urb with data and submit */ | 1515 | /* fill urb with data and submit */ |
1525 | usb_fill_bulk_urb(urb, | 1516 | usb_fill_bulk_urb(urb, |
@@ -2225,7 +2216,7 @@ static void mos7840_set_termios(struct usb_serial_port *port, | |||
2225 | *****************************************************************************/ | 2216 | *****************************************************************************/ |
2226 | 2217 | ||
2227 | static int mos7840_get_lsr_info(struct moschip_port *mos7840_port, | 2218 | static int mos7840_get_lsr_info(struct moschip_port *mos7840_port, |
2228 | unsigned int *value) | 2219 | unsigned int __user *value) |
2229 | { | 2220 | { |
2230 | int count; | 2221 | int count; |
2231 | unsigned int result = 0; | 2222 | unsigned int result = 0; |
@@ -2248,7 +2239,7 @@ static int mos7840_get_lsr_info(struct moschip_port *mos7840_port, | |||
2248 | *****************************************************************************/ | 2239 | *****************************************************************************/ |
2249 | 2240 | ||
2250 | static int mos7840_get_bytes_avail(struct moschip_port *mos7840_port, | 2241 | static int mos7840_get_bytes_avail(struct moschip_port *mos7840_port, |
2251 | unsigned int *value) | 2242 | unsigned int __user *value) |
2252 | { | 2243 | { |
2253 | unsigned int result = 0; | 2244 | unsigned int result = 0; |
2254 | struct tty_struct *tty = mos7840_port->port->tty; | 2245 | struct tty_struct *tty = mos7840_port->port->tty; |
@@ -2271,7 +2262,7 @@ static int mos7840_get_bytes_avail(struct moschip_port *mos7840_port, | |||
2271 | *****************************************************************************/ | 2262 | *****************************************************************************/ |
2272 | 2263 | ||
2273 | static int mos7840_set_modem_info(struct moschip_port *mos7840_port, | 2264 | static int mos7840_set_modem_info(struct moschip_port *mos7840_port, |
2274 | unsigned int cmd, unsigned int *value) | 2265 | unsigned int cmd, unsigned int __user *value) |
2275 | { | 2266 | { |
2276 | unsigned int mcr; | 2267 | unsigned int mcr; |
2277 | unsigned int arg; | 2268 | unsigned int arg; |
@@ -2341,7 +2332,7 @@ static int mos7840_set_modem_info(struct moschip_port *mos7840_port, | |||
2341 | *****************************************************************************/ | 2332 | *****************************************************************************/ |
2342 | 2333 | ||
2343 | static int mos7840_get_modem_info(struct moschip_port *mos7840_port, | 2334 | static int mos7840_get_modem_info(struct moschip_port *mos7840_port, |
2344 | unsigned int *value) | 2335 | unsigned int __user *value) |
2345 | { | 2336 | { |
2346 | unsigned int result = 0; | 2337 | unsigned int result = 0; |
2347 | __u16 msr; | 2338 | __u16 msr; |
@@ -2370,7 +2361,7 @@ static int mos7840_get_modem_info(struct moschip_port *mos7840_port, | |||
2370 | *****************************************************************************/ | 2361 | *****************************************************************************/ |
2371 | 2362 | ||
2372 | static int mos7840_get_serial_info(struct moschip_port *mos7840_port, | 2363 | static int mos7840_get_serial_info(struct moschip_port *mos7840_port, |
2373 | struct serial_struct *retinfo) | 2364 | struct serial_struct __user *retinfo) |
2374 | { | 2365 | { |
2375 | struct serial_struct tmp; | 2366 | struct serial_struct tmp; |
2376 | 2367 | ||
@@ -2405,6 +2396,7 @@ static int mos7840_get_serial_info(struct moschip_port *mos7840_port, | |||
2405 | static int mos7840_ioctl(struct usb_serial_port *port, struct file *file, | 2396 | static int mos7840_ioctl(struct usb_serial_port *port, struct file *file, |
2406 | unsigned int cmd, unsigned long arg) | 2397 | unsigned int cmd, unsigned long arg) |
2407 | { | 2398 | { |
2399 | void __user *argp = (void __user *)arg; | ||
2408 | struct moschip_port *mos7840_port; | 2400 | struct moschip_port *mos7840_port; |
2409 | struct tty_struct *tty; | 2401 | struct tty_struct *tty; |
2410 | 2402 | ||
@@ -2433,16 +2425,13 @@ static int mos7840_ioctl(struct usb_serial_port *port, struct file *file, | |||
2433 | 2425 | ||
2434 | case TIOCINQ: | 2426 | case TIOCINQ: |
2435 | dbg("%s (%d) TIOCINQ", __FUNCTION__, port->number); | 2427 | dbg("%s (%d) TIOCINQ", __FUNCTION__, port->number); |
2436 | return mos7840_get_bytes_avail(mos7840_port, | 2428 | return mos7840_get_bytes_avail(mos7840_port, argp); |
2437 | (unsigned int *)arg); | ||
2438 | break; | ||
2439 | 2429 | ||
2440 | case TIOCOUTQ: | 2430 | case TIOCOUTQ: |
2441 | dbg("%s (%d) TIOCOUTQ", __FUNCTION__, port->number); | 2431 | dbg("%s (%d) TIOCOUTQ", __FUNCTION__, port->number); |
2442 | return put_user(tty->driver->chars_in_buffer ? | 2432 | return put_user(tty->driver->chars_in_buffer ? |
2443 | tty->driver->chars_in_buffer(tty) : 0, | 2433 | tty->driver->chars_in_buffer(tty) : 0, |
2444 | (int __user *)arg); | 2434 | (int __user *)arg); |
2445 | break; | ||
2446 | 2435 | ||
2447 | case TCFLSH: | 2436 | case TCFLSH: |
2448 | retval = tty_check_change(tty); | 2437 | retval = tty_check_change(tty); |
@@ -2472,13 +2461,13 @@ static int mos7840_ioctl(struct usb_serial_port *port, struct file *file, | |||
2472 | 2461 | ||
2473 | case TCGETS: | 2462 | case TCGETS: |
2474 | if (kernel_termios_to_user_termios | 2463 | if (kernel_termios_to_user_termios |
2475 | ((struct termios __user *)arg, tty->termios)) | 2464 | ((struct termios __user *)argp, tty->termios)) |
2476 | return -EFAULT; | 2465 | return -EFAULT; |
2477 | return 0; | 2466 | return 0; |
2478 | 2467 | ||
2479 | case TIOCSERGETLSR: | 2468 | case TIOCSERGETLSR: |
2480 | dbg("%s (%d) TIOCSERGETLSR", __FUNCTION__, port->number); | 2469 | dbg("%s (%d) TIOCSERGETLSR", __FUNCTION__, port->number); |
2481 | return mos7840_get_lsr_info(mos7840_port, (unsigned int *)arg); | 2470 | return mos7840_get_lsr_info(mos7840_port, argp); |
2482 | return 0; | 2471 | return 0; |
2483 | 2472 | ||
2484 | case TIOCMBIS: | 2473 | case TIOCMBIS: |
@@ -2487,19 +2476,16 @@ static int mos7840_ioctl(struct usb_serial_port *port, struct file *file, | |||
2487 | dbg("%s (%d) TIOCMSET/TIOCMBIC/TIOCMSET", __FUNCTION__, | 2476 | dbg("%s (%d) TIOCMSET/TIOCMBIC/TIOCMSET", __FUNCTION__, |
2488 | port->number); | 2477 | port->number); |
2489 | mosret = | 2478 | mosret = |
2490 | mos7840_set_modem_info(mos7840_port, cmd, | 2479 | mos7840_set_modem_info(mos7840_port, cmd, argp); |
2491 | (unsigned int *)arg); | ||
2492 | return mosret; | 2480 | return mosret; |
2493 | 2481 | ||
2494 | case TIOCMGET: | 2482 | case TIOCMGET: |
2495 | dbg("%s (%d) TIOCMGET", __FUNCTION__, port->number); | 2483 | dbg("%s (%d) TIOCMGET", __FUNCTION__, port->number); |
2496 | return mos7840_get_modem_info(mos7840_port, | 2484 | return mos7840_get_modem_info(mos7840_port, argp); |
2497 | (unsigned int *)arg); | ||
2498 | 2485 | ||
2499 | case TIOCGSERIAL: | 2486 | case TIOCGSERIAL: |
2500 | dbg("%s (%d) TIOCGSERIAL", __FUNCTION__, port->number); | 2487 | dbg("%s (%d) TIOCGSERIAL", __FUNCTION__, port->number); |
2501 | return mos7840_get_serial_info(mos7840_port, | 2488 | return mos7840_get_serial_info(mos7840_port, argp); |
2502 | (struct serial_struct *)arg); | ||
2503 | 2489 | ||
2504 | case TIOCSSERIAL: | 2490 | case TIOCSSERIAL: |
2505 | dbg("%s (%d) TIOCSSERIAL", __FUNCTION__, port->number); | 2491 | dbg("%s (%d) TIOCSSERIAL", __FUNCTION__, port->number); |
@@ -2549,7 +2535,7 @@ static int mos7840_ioctl(struct usb_serial_port *port, struct file *file, | |||
2549 | 2535 | ||
2550 | dbg("%s (%d) TIOCGICOUNT RX=%d, TX=%d", __FUNCTION__, | 2536 | dbg("%s (%d) TIOCGICOUNT RX=%d, TX=%d", __FUNCTION__, |
2551 | port->number, icount.rx, icount.tx); | 2537 | port->number, icount.rx, icount.tx); |
2552 | if (copy_to_user((void *)arg, &icount, sizeof(icount))) | 2538 | if (copy_to_user(argp, &icount, sizeof(icount))) |
2553 | return -EFAULT; | 2539 | return -EFAULT; |
2554 | return 0; | 2540 | return 0; |
2555 | 2541 | ||
@@ -2817,7 +2803,7 @@ static int mos7840_startup(struct usb_serial *serial) | |||
2817 | 2803 | ||
2818 | /* setting configuration feature to one */ | 2804 | /* setting configuration feature to one */ |
2819 | usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), | 2805 | usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), |
2820 | (__u8) 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 5 * HZ); | 2806 | (__u8) 0x03, 0x00, 0x01, 0x00, NULL, 0x00, 5 * HZ); |
2821 | return 0; | 2807 | return 0; |
2822 | } | 2808 | } |
2823 | 2809 | ||
diff --git a/fs/befs/befs.h b/fs/befs/befs.h index 057a2c3d73b7..d9a40abda6b7 100644 --- a/fs/befs/befs.h +++ b/fs/befs/befs.h | |||
@@ -94,7 +94,7 @@ void befs_debug(const struct super_block *sb, const char *fmt, ...); | |||
94 | 94 | ||
95 | void befs_dump_super_block(const struct super_block *sb, befs_super_block *); | 95 | void befs_dump_super_block(const struct super_block *sb, befs_super_block *); |
96 | void befs_dump_inode(const struct super_block *sb, befs_inode *); | 96 | void befs_dump_inode(const struct super_block *sb, befs_inode *); |
97 | void befs_dump_index_entry(const struct super_block *sb, befs_btree_super *); | 97 | void befs_dump_index_entry(const struct super_block *sb, befs_disk_btree_super *); |
98 | void befs_dump_index_node(const struct super_block *sb, befs_btree_nodehead *); | 98 | void befs_dump_index_node(const struct super_block *sb, befs_btree_nodehead *); |
99 | /****************************/ | 99 | /****************************/ |
100 | 100 | ||
@@ -136,7 +136,7 @@ blockno2iaddr(struct super_block *sb, befs_blocknr_t blockno) | |||
136 | static inline unsigned int | 136 | static inline unsigned int |
137 | befs_iaddrs_per_block(struct super_block *sb) | 137 | befs_iaddrs_per_block(struct super_block *sb) |
138 | { | 138 | { |
139 | return BEFS_SB(sb)->block_size / sizeof (befs_inode_addr); | 139 | return BEFS_SB(sb)->block_size / sizeof (befs_disk_inode_addr); |
140 | } | 140 | } |
141 | 141 | ||
142 | static inline int | 142 | static inline int |
@@ -151,4 +151,6 @@ befs_brun_size(struct super_block *sb, befs_block_run run) | |||
151 | return BEFS_SB(sb)->block_size * run.len; | 151 | return BEFS_SB(sb)->block_size * run.len; |
152 | } | 152 | } |
153 | 153 | ||
154 | #include "endian.h" | ||
155 | |||
154 | #endif /* _LINUX_BEFS_H */ | 156 | #endif /* _LINUX_BEFS_H */ |
diff --git a/fs/befs/befs_fs_types.h b/fs/befs/befs_fs_types.h index 63ef1e18fb84..e2595c2c403a 100644 --- a/fs/befs/befs_fs_types.h +++ b/fs/befs/befs_fs_types.h | |||
@@ -79,17 +79,27 @@ enum inode_flags { | |||
79 | * On-Disk datastructures of BeFS | 79 | * On-Disk datastructures of BeFS |
80 | */ | 80 | */ |
81 | 81 | ||
82 | typedef u64 __bitwise fs64; | ||
83 | typedef u32 __bitwise fs32; | ||
84 | typedef u16 __bitwise fs16; | ||
85 | |||
82 | typedef u64 befs_off_t; | 86 | typedef u64 befs_off_t; |
83 | typedef u64 befs_time_t; | 87 | typedef fs64 befs_time_t; |
84 | typedef void befs_binode_etc; | ||
85 | 88 | ||
86 | /* Block runs */ | 89 | /* Block runs */ |
87 | typedef struct { | 90 | typedef struct { |
91 | fs32 allocation_group; | ||
92 | fs16 start; | ||
93 | fs16 len; | ||
94 | } PACKED befs_disk_block_run; | ||
95 | |||
96 | typedef struct { | ||
88 | u32 allocation_group; | 97 | u32 allocation_group; |
89 | u16 start; | 98 | u16 start; |
90 | u16 len; | 99 | u16 len; |
91 | } PACKED befs_block_run; | 100 | } PACKED befs_block_run; |
92 | 101 | ||
102 | typedef befs_disk_block_run befs_disk_inode_addr; | ||
93 | typedef befs_block_run befs_inode_addr; | 103 | typedef befs_block_run befs_inode_addr; |
94 | 104 | ||
95 | /* | 105 | /* |
@@ -97,31 +107,31 @@ typedef befs_block_run befs_inode_addr; | |||
97 | */ | 107 | */ |
98 | typedef struct { | 108 | typedef struct { |
99 | char name[B_OS_NAME_LENGTH]; | 109 | char name[B_OS_NAME_LENGTH]; |
100 | u32 magic1; | 110 | fs32 magic1; |
101 | u32 fs_byte_order; | 111 | fs32 fs_byte_order; |
102 | 112 | ||
103 | u32 block_size; | 113 | fs32 block_size; |
104 | u32 block_shift; | 114 | fs32 block_shift; |
105 | 115 | ||
106 | befs_off_t num_blocks; | 116 | fs64 num_blocks; |
107 | befs_off_t used_blocks; | 117 | fs64 used_blocks; |
108 | 118 | ||
109 | u32 inode_size; | 119 | fs32 inode_size; |
110 | 120 | ||
111 | u32 magic2; | 121 | fs32 magic2; |
112 | u32 blocks_per_ag; | 122 | fs32 blocks_per_ag; |
113 | u32 ag_shift; | 123 | fs32 ag_shift; |
114 | u32 num_ags; | 124 | fs32 num_ags; |
115 | 125 | ||
116 | u32 flags; | 126 | fs32 flags; |
117 | 127 | ||
118 | befs_block_run log_blocks; | 128 | befs_disk_block_run log_blocks; |
119 | befs_off_t log_start; | 129 | fs64 log_start; |
120 | befs_off_t log_end; | 130 | fs64 log_end; |
121 | 131 | ||
122 | u32 magic3; | 132 | fs32 magic3; |
123 | befs_inode_addr root_dir; | 133 | befs_disk_inode_addr root_dir; |
124 | befs_inode_addr indices; | 134 | befs_disk_inode_addr indices; |
125 | 135 | ||
126 | } PACKED befs_super_block; | 136 | } PACKED befs_super_block; |
127 | 137 | ||
@@ -130,6 +140,16 @@ typedef struct { | |||
130 | * be longer than one block! | 140 | * be longer than one block! |
131 | */ | 141 | */ |
132 | typedef struct { | 142 | typedef struct { |
143 | befs_disk_block_run direct[BEFS_NUM_DIRECT_BLOCKS]; | ||
144 | fs64 max_direct_range; | ||
145 | befs_disk_block_run indirect; | ||
146 | fs64 max_indirect_range; | ||
147 | befs_disk_block_run double_indirect; | ||
148 | fs64 max_double_indirect_range; | ||
149 | fs64 size; | ||
150 | } PACKED befs_disk_data_stream; | ||
151 | |||
152 | typedef struct { | ||
133 | befs_block_run direct[BEFS_NUM_DIRECT_BLOCKS]; | 153 | befs_block_run direct[BEFS_NUM_DIRECT_BLOCKS]; |
134 | befs_off_t max_direct_range; | 154 | befs_off_t max_direct_range; |
135 | befs_block_run indirect; | 155 | befs_block_run indirect; |
@@ -141,35 +161,35 @@ typedef struct { | |||
141 | 161 | ||
142 | /* Attribute */ | 162 | /* Attribute */ |
143 | typedef struct { | 163 | typedef struct { |
144 | u32 type; | 164 | fs32 type; |
145 | u16 name_size; | 165 | fs16 name_size; |
146 | u16 data_size; | 166 | fs16 data_size; |
147 | char name[1]; | 167 | char name[1]; |
148 | } PACKED befs_small_data; | 168 | } PACKED befs_small_data; |
149 | 169 | ||
150 | /* Inode structure */ | 170 | /* Inode structure */ |
151 | typedef struct { | 171 | typedef struct { |
152 | u32 magic1; | 172 | fs32 magic1; |
153 | befs_inode_addr inode_num; | 173 | befs_disk_inode_addr inode_num; |
154 | u32 uid; | 174 | fs32 uid; |
155 | u32 gid; | 175 | fs32 gid; |
156 | u32 mode; | 176 | fs32 mode; |
157 | u32 flags; | 177 | fs32 flags; |
158 | befs_time_t create_time; | 178 | befs_time_t create_time; |
159 | befs_time_t last_modified_time; | 179 | befs_time_t last_modified_time; |
160 | befs_inode_addr parent; | 180 | befs_disk_inode_addr parent; |
161 | befs_inode_addr attributes; | 181 | befs_disk_inode_addr attributes; |
162 | u32 type; | 182 | fs32 type; |
163 | 183 | ||
164 | u32 inode_size; | 184 | fs32 inode_size; |
165 | u32 etc; /* not use */ | 185 | fs32 etc; /* not use */ |
166 | 186 | ||
167 | union { | 187 | union { |
168 | befs_data_stream datastream; | 188 | befs_disk_data_stream datastream; |
169 | char symlink[BEFS_SYMLINK_LEN]; | 189 | char symlink[BEFS_SYMLINK_LEN]; |
170 | } data; | 190 | } data; |
171 | 191 | ||
172 | u32 pad[4]; /* not use */ | 192 | fs32 pad[4]; /* not use */ |
173 | befs_small_data small_data[1]; | 193 | befs_small_data small_data[1]; |
174 | } PACKED befs_inode; | 194 | } PACKED befs_inode; |
175 | 195 | ||
@@ -190,6 +210,16 @@ enum btree_types { | |||
190 | }; | 210 | }; |
191 | 211 | ||
192 | typedef struct { | 212 | typedef struct { |
213 | fs32 magic; | ||
214 | fs32 node_size; | ||
215 | fs32 max_depth; | ||
216 | fs32 data_type; | ||
217 | fs64 root_node_ptr; | ||
218 | fs64 free_node_ptr; | ||
219 | fs64 max_size; | ||
220 | } PACKED befs_disk_btree_super; | ||
221 | |||
222 | typedef struct { | ||
193 | u32 magic; | 223 | u32 magic; |
194 | u32 node_size; | 224 | u32 node_size; |
195 | u32 max_depth; | 225 | u32 max_depth; |
@@ -203,11 +233,19 @@ typedef struct { | |||
203 | * Header stucture of each btree node | 233 | * Header stucture of each btree node |
204 | */ | 234 | */ |
205 | typedef struct { | 235 | typedef struct { |
236 | fs64 left; | ||
237 | fs64 right; | ||
238 | fs64 overflow; | ||
239 | fs16 all_key_count; | ||
240 | fs16 all_key_length; | ||
241 | } PACKED befs_btree_nodehead; | ||
242 | |||
243 | typedef struct { | ||
206 | befs_off_t left; | 244 | befs_off_t left; |
207 | befs_off_t right; | 245 | befs_off_t right; |
208 | befs_off_t overflow; | 246 | befs_off_t overflow; |
209 | u16 all_key_count; | 247 | u16 all_key_count; |
210 | u16 all_key_length; | 248 | u16 all_key_length; |
211 | } PACKED befs_btree_nodehead; | 249 | } PACKED befs_host_btree_nodehead; |
212 | 250 | ||
213 | #endif /* _LINUX_BEFS_FS_TYPES */ | 251 | #endif /* _LINUX_BEFS_FS_TYPES */ |
diff --git a/fs/befs/btree.c b/fs/befs/btree.c index 76e219799409..81b042ee24e6 100644 --- a/fs/befs/btree.c +++ b/fs/befs/btree.c | |||
@@ -30,7 +30,6 @@ | |||
30 | #include "befs.h" | 30 | #include "befs.h" |
31 | #include "btree.h" | 31 | #include "btree.h" |
32 | #include "datastream.h" | 32 | #include "datastream.h" |
33 | #include "endian.h" | ||
34 | 33 | ||
35 | /* | 34 | /* |
36 | * The btree functions in this file are built on top of the | 35 | * The btree functions in this file are built on top of the |
@@ -80,7 +79,7 @@ | |||
80 | * In memory structure of each btree node | 79 | * In memory structure of each btree node |
81 | */ | 80 | */ |
82 | typedef struct { | 81 | typedef struct { |
83 | befs_btree_nodehead head; /* head of node converted to cpu byteorder */ | 82 | befs_host_btree_nodehead head; /* head of node converted to cpu byteorder */ |
84 | struct buffer_head *bh; | 83 | struct buffer_head *bh; |
85 | befs_btree_nodehead *od_node; /* on disk node */ | 84 | befs_btree_nodehead *od_node; /* on disk node */ |
86 | } befs_btree_node; | 85 | } befs_btree_node; |
@@ -102,9 +101,9 @@ static int befs_bt_read_node(struct super_block *sb, befs_data_stream * ds, | |||
102 | 101 | ||
103 | static int befs_leafnode(befs_btree_node * node); | 102 | static int befs_leafnode(befs_btree_node * node); |
104 | 103 | ||
105 | static u16 *befs_bt_keylen_index(befs_btree_node * node); | 104 | static fs16 *befs_bt_keylen_index(befs_btree_node * node); |
106 | 105 | ||
107 | static befs_off_t *befs_bt_valarray(befs_btree_node * node); | 106 | static fs64 *befs_bt_valarray(befs_btree_node * node); |
108 | 107 | ||
109 | static char *befs_bt_keydata(befs_btree_node * node); | 108 | static char *befs_bt_keydata(befs_btree_node * node); |
110 | 109 | ||
@@ -136,7 +135,7 @@ befs_bt_read_super(struct super_block *sb, befs_data_stream * ds, | |||
136 | befs_btree_super * sup) | 135 | befs_btree_super * sup) |
137 | { | 136 | { |
138 | struct buffer_head *bh = NULL; | 137 | struct buffer_head *bh = NULL; |
139 | befs_btree_super *od_sup = NULL; | 138 | befs_disk_btree_super *od_sup = NULL; |
140 | 139 | ||
141 | befs_debug(sb, "---> befs_btree_read_super()"); | 140 | befs_debug(sb, "---> befs_btree_read_super()"); |
142 | 141 | ||
@@ -146,7 +145,7 @@ befs_bt_read_super(struct super_block *sb, befs_data_stream * ds, | |||
146 | befs_error(sb, "Couldn't read index header."); | 145 | befs_error(sb, "Couldn't read index header."); |
147 | goto error; | 146 | goto error; |
148 | } | 147 | } |
149 | od_sup = (befs_btree_super *) bh->b_data; | 148 | od_sup = (befs_disk_btree_super *) bh->b_data; |
150 | befs_dump_index_entry(sb, od_sup); | 149 | befs_dump_index_entry(sb, od_sup); |
151 | 150 | ||
152 | sup->magic = fs32_to_cpu(sb, od_sup->magic); | 151 | sup->magic = fs32_to_cpu(sb, od_sup->magic); |
@@ -342,7 +341,7 @@ befs_find_key(struct super_block *sb, befs_btree_node * node, | |||
342 | u16 keylen; | 341 | u16 keylen; |
343 | int findkey_len; | 342 | int findkey_len; |
344 | char *thiskey; | 343 | char *thiskey; |
345 | befs_off_t *valarray; | 344 | fs64 *valarray; |
346 | 345 | ||
347 | befs_debug(sb, "---> befs_find_key() %s", findkey); | 346 | befs_debug(sb, "---> befs_find_key() %s", findkey); |
348 | 347 | ||
@@ -422,7 +421,7 @@ befs_btree_read(struct super_block *sb, befs_data_stream * ds, | |||
422 | befs_btree_super bt_super; | 421 | befs_btree_super bt_super; |
423 | befs_off_t node_off = 0; | 422 | befs_off_t node_off = 0; |
424 | int cur_key; | 423 | int cur_key; |
425 | befs_off_t *valarray; | 424 | fs64 *valarray; |
426 | char *keystart; | 425 | char *keystart; |
427 | u16 keylen; | 426 | u16 keylen; |
428 | int res; | 427 | int res; |
@@ -572,7 +571,7 @@ befs_btree_seekleaf(struct super_block *sb, befs_data_stream * ds, | |||
572 | this_node->head.overflow); | 571 | this_node->head.overflow); |
573 | *node_off = this_node->head.overflow; | 572 | *node_off = this_node->head.overflow; |
574 | } else { | 573 | } else { |
575 | befs_off_t *valarray = befs_bt_valarray(this_node); | 574 | fs64 *valarray = befs_bt_valarray(this_node); |
576 | *node_off = fs64_to_cpu(sb, valarray[0]); | 575 | *node_off = fs64_to_cpu(sb, valarray[0]); |
577 | } | 576 | } |
578 | if (befs_bt_read_node(sb, ds, this_node, *node_off) != BEFS_OK) { | 577 | if (befs_bt_read_node(sb, ds, this_node, *node_off) != BEFS_OK) { |
@@ -622,7 +621,7 @@ befs_leafnode(befs_btree_node * node) | |||
622 | * | 621 | * |
623 | * Except that rounding up to 8 works, and rounding up to 4 doesn't. | 622 | * Except that rounding up to 8 works, and rounding up to 4 doesn't. |
624 | */ | 623 | */ |
625 | static u16 * | 624 | static fs16 * |
626 | befs_bt_keylen_index(befs_btree_node * node) | 625 | befs_bt_keylen_index(befs_btree_node * node) |
627 | { | 626 | { |
628 | const int keylen_align = 8; | 627 | const int keylen_align = 8; |
@@ -633,7 +632,7 @@ befs_bt_keylen_index(befs_btree_node * node) | |||
633 | if (tmp) | 632 | if (tmp) |
634 | off += keylen_align - tmp; | 633 | off += keylen_align - tmp; |
635 | 634 | ||
636 | return (u16 *) ((void *) node->od_node + off); | 635 | return (fs16 *) ((void *) node->od_node + off); |
637 | } | 636 | } |
638 | 637 | ||
639 | /** | 638 | /** |
@@ -643,13 +642,13 @@ befs_bt_keylen_index(befs_btree_node * node) | |||
643 | * Returns a pointer to the start of the value array | 642 | * Returns a pointer to the start of the value array |
644 | * of the node pointed to by the node header | 643 | * of the node pointed to by the node header |
645 | */ | 644 | */ |
646 | static befs_off_t * | 645 | static fs64 * |
647 | befs_bt_valarray(befs_btree_node * node) | 646 | befs_bt_valarray(befs_btree_node * node) |
648 | { | 647 | { |
649 | void *keylen_index_start = (void *) befs_bt_keylen_index(node); | 648 | void *keylen_index_start = (void *) befs_bt_keylen_index(node); |
650 | size_t keylen_index_size = node->head.all_key_count * sizeof (u16); | 649 | size_t keylen_index_size = node->head.all_key_count * sizeof (fs16); |
651 | 650 | ||
652 | return (befs_off_t *) (keylen_index_start + keylen_index_size); | 651 | return (fs64 *) (keylen_index_start + keylen_index_size); |
653 | } | 652 | } |
654 | 653 | ||
655 | /** | 654 | /** |
@@ -681,7 +680,7 @@ befs_bt_get_key(struct super_block *sb, befs_btree_node * node, | |||
681 | { | 680 | { |
682 | int prev_key_end; | 681 | int prev_key_end; |
683 | char *keystart; | 682 | char *keystart; |
684 | u16 *keylen_index; | 683 | fs16 *keylen_index; |
685 | 684 | ||
686 | if (index < 0 || index > node->head.all_key_count) { | 685 | if (index < 0 || index > node->head.all_key_count) { |
687 | *keylen = 0; | 686 | *keylen = 0; |
diff --git a/fs/befs/datastream.c b/fs/befs/datastream.c index b7d6b920f65f..aacb4da6298a 100644 --- a/fs/befs/datastream.c +++ b/fs/befs/datastream.c | |||
@@ -18,7 +18,6 @@ | |||
18 | #include "befs.h" | 18 | #include "befs.h" |
19 | #include "datastream.h" | 19 | #include "datastream.h" |
20 | #include "io.h" | 20 | #include "io.h" |
21 | #include "endian.h" | ||
22 | 21 | ||
23 | const befs_inode_addr BAD_IADDR = { 0, 0, 0 }; | 22 | const befs_inode_addr BAD_IADDR = { 0, 0, 0 }; |
24 | 23 | ||
@@ -312,7 +311,7 @@ befs_find_brun_indirect(struct super_block *sb, | |||
312 | befs_blocknr_t indir_start_blk; | 311 | befs_blocknr_t indir_start_blk; |
313 | befs_blocknr_t search_blk; | 312 | befs_blocknr_t search_blk; |
314 | struct buffer_head *indirblock; | 313 | struct buffer_head *indirblock; |
315 | befs_block_run *array; | 314 | befs_disk_block_run *array; |
316 | 315 | ||
317 | befs_block_run indirect = data->indirect; | 316 | befs_block_run indirect = data->indirect; |
318 | befs_blocknr_t indirblockno = iaddr2blockno(sb, &indirect); | 317 | befs_blocknr_t indirblockno = iaddr2blockno(sb, &indirect); |
@@ -334,7 +333,7 @@ befs_find_brun_indirect(struct super_block *sb, | |||
334 | return BEFS_ERR; | 333 | return BEFS_ERR; |
335 | } | 334 | } |
336 | 335 | ||
337 | array = (befs_block_run *) indirblock->b_data; | 336 | array = (befs_disk_block_run *) indirblock->b_data; |
338 | 337 | ||
339 | for (j = 0; j < arraylen; ++j) { | 338 | for (j = 0; j < arraylen; ++j) { |
340 | int len = fs16_to_cpu(sb, array[j].len); | 339 | int len = fs16_to_cpu(sb, array[j].len); |
@@ -427,7 +426,7 @@ befs_find_brun_dblindirect(struct super_block *sb, | |||
427 | struct buffer_head *dbl_indir_block; | 426 | struct buffer_head *dbl_indir_block; |
428 | struct buffer_head *indir_block; | 427 | struct buffer_head *indir_block; |
429 | befs_block_run indir_run; | 428 | befs_block_run indir_run; |
430 | befs_inode_addr *iaddr_array = NULL; | 429 | befs_disk_inode_addr *iaddr_array = NULL; |
431 | befs_sb_info *befs_sb = BEFS_SB(sb); | 430 | befs_sb_info *befs_sb = BEFS_SB(sb); |
432 | 431 | ||
433 | befs_blocknr_t indir_start_blk = | 432 | befs_blocknr_t indir_start_blk = |
@@ -482,7 +481,7 @@ befs_find_brun_dblindirect(struct super_block *sb, | |||
482 | 481 | ||
483 | dbl_block_indx = | 482 | dbl_block_indx = |
484 | dblindir_indx - (dbl_which_block * befs_iaddrs_per_block(sb)); | 483 | dblindir_indx - (dbl_which_block * befs_iaddrs_per_block(sb)); |
485 | iaddr_array = (befs_inode_addr *) dbl_indir_block->b_data; | 484 | iaddr_array = (befs_disk_inode_addr *) dbl_indir_block->b_data; |
486 | indir_run = fsrun_to_cpu(sb, iaddr_array[dbl_block_indx]); | 485 | indir_run = fsrun_to_cpu(sb, iaddr_array[dbl_block_indx]); |
487 | brelse(dbl_indir_block); | 486 | brelse(dbl_indir_block); |
488 | iaddr_array = NULL; | 487 | iaddr_array = NULL; |
@@ -507,7 +506,7 @@ befs_find_brun_dblindirect(struct super_block *sb, | |||
507 | } | 506 | } |
508 | 507 | ||
509 | block_indx = indir_indx - (which_block * befs_iaddrs_per_block(sb)); | 508 | block_indx = indir_indx - (which_block * befs_iaddrs_per_block(sb)); |
510 | iaddr_array = (befs_inode_addr *) indir_block->b_data; | 509 | iaddr_array = (befs_disk_inode_addr *) indir_block->b_data; |
511 | *run = fsrun_to_cpu(sb, iaddr_array[block_indx]); | 510 | *run = fsrun_to_cpu(sb, iaddr_array[block_indx]); |
512 | brelse(indir_block); | 511 | brelse(indir_block); |
513 | iaddr_array = NULL; | 512 | iaddr_array = NULL; |
diff --git a/fs/befs/debug.c b/fs/befs/debug.c index 875cc0aa318c..e831a8f30849 100644 --- a/fs/befs/debug.c +++ b/fs/befs/debug.c | |||
@@ -21,7 +21,6 @@ | |||
21 | #endif /* __KERNEL__ */ | 21 | #endif /* __KERNEL__ */ |
22 | 22 | ||
23 | #include "befs.h" | 23 | #include "befs.h" |
24 | #include "endian.h" | ||
25 | 24 | ||
26 | #define ERRBUFSIZE 1024 | 25 | #define ERRBUFSIZE 1024 |
27 | 26 | ||
@@ -125,7 +124,7 @@ befs_dump_inode(const struct super_block *sb, befs_inode * inode) | |||
125 | befs_debug(sb, " type %08x", fs32_to_cpu(sb, inode->type)); | 124 | befs_debug(sb, " type %08x", fs32_to_cpu(sb, inode->type)); |
126 | befs_debug(sb, " inode_size %u", fs32_to_cpu(sb, inode->inode_size)); | 125 | befs_debug(sb, " inode_size %u", fs32_to_cpu(sb, inode->inode_size)); |
127 | 126 | ||
128 | if (S_ISLNK(inode->mode)) { | 127 | if (S_ISLNK(fs32_to_cpu(sb, inode->mode))) { |
129 | befs_debug(sb, " Symbolic link [%s]", inode->data.symlink); | 128 | befs_debug(sb, " Symbolic link [%s]", inode->data.symlink); |
130 | } else { | 129 | } else { |
131 | int i; | 130 | int i; |
@@ -231,21 +230,20 @@ befs_dump_small_data(const struct super_block *sb, befs_small_data * sd) | |||
231 | 230 | ||
232 | /* unused */ | 231 | /* unused */ |
233 | void | 232 | void |
234 | befs_dump_run(const struct super_block *sb, befs_block_run run) | 233 | befs_dump_run(const struct super_block *sb, befs_disk_block_run run) |
235 | { | 234 | { |
236 | #ifdef CONFIG_BEFS_DEBUG | 235 | #ifdef CONFIG_BEFS_DEBUG |
237 | 236 | ||
238 | run = fsrun_to_cpu(sb, run); | 237 | befs_block_run n = fsrun_to_cpu(sb, run); |
239 | 238 | ||
240 | befs_debug(sb, "[%u, %hu, %hu]", | 239 | befs_debug(sb, "[%u, %hu, %hu]", n.allocation_group, n.start, n.len); |
241 | run.allocation_group, run.start, run.len); | ||
242 | 240 | ||
243 | #endif //CONFIG_BEFS_DEBUG | 241 | #endif //CONFIG_BEFS_DEBUG |
244 | } | 242 | } |
245 | #endif /* 0 */ | 243 | #endif /* 0 */ |
246 | 244 | ||
247 | void | 245 | void |
248 | befs_dump_index_entry(const struct super_block *sb, befs_btree_super * super) | 246 | befs_dump_index_entry(const struct super_block *sb, befs_disk_btree_super * super) |
249 | { | 247 | { |
250 | #ifdef CONFIG_BEFS_DEBUG | 248 | #ifdef CONFIG_BEFS_DEBUG |
251 | 249 | ||
diff --git a/fs/befs/endian.h b/fs/befs/endian.h index 9ecaea4e3325..e254a20869f4 100644 --- a/fs/befs/endian.h +++ b/fs/befs/endian.h | |||
@@ -10,85 +10,84 @@ | |||
10 | #define LINUX_BEFS_ENDIAN | 10 | #define LINUX_BEFS_ENDIAN |
11 | 11 | ||
12 | #include <linux/byteorder/generic.h> | 12 | #include <linux/byteorder/generic.h> |
13 | #include "befs.h" | ||
14 | 13 | ||
15 | static inline u64 | 14 | static inline u64 |
16 | fs64_to_cpu(const struct super_block *sb, u64 n) | 15 | fs64_to_cpu(const struct super_block *sb, fs64 n) |
17 | { | 16 | { |
18 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) | 17 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) |
19 | return le64_to_cpu(n); | 18 | return le64_to_cpu((__force __le64)n); |
20 | else | 19 | else |
21 | return be64_to_cpu(n); | 20 | return be64_to_cpu((__force __be64)n); |
22 | } | 21 | } |
23 | 22 | ||
24 | static inline u64 | 23 | static inline fs64 |
25 | cpu_to_fs64(const struct super_block *sb, u64 n) | 24 | cpu_to_fs64(const struct super_block *sb, u64 n) |
26 | { | 25 | { |
27 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) | 26 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) |
28 | return cpu_to_le64(n); | 27 | return (__force fs64)cpu_to_le64(n); |
29 | else | 28 | else |
30 | return cpu_to_be64(n); | 29 | return (__force fs64)cpu_to_be64(n); |
31 | } | 30 | } |
32 | 31 | ||
33 | static inline u32 | 32 | static inline u32 |
34 | fs32_to_cpu(const struct super_block *sb, u32 n) | 33 | fs32_to_cpu(const struct super_block *sb, fs32 n) |
35 | { | 34 | { |
36 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) | 35 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) |
37 | return le32_to_cpu(n); | 36 | return le32_to_cpu((__force __le32)n); |
38 | else | 37 | else |
39 | return be32_to_cpu(n); | 38 | return be32_to_cpu((__force __be32)n); |
40 | } | 39 | } |
41 | 40 | ||
42 | static inline u32 | 41 | static inline fs32 |
43 | cpu_to_fs32(const struct super_block *sb, u32 n) | 42 | cpu_to_fs32(const struct super_block *sb, u32 n) |
44 | { | 43 | { |
45 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) | 44 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) |
46 | return cpu_to_le32(n); | 45 | return (__force fs32)cpu_to_le32(n); |
47 | else | 46 | else |
48 | return cpu_to_be32(n); | 47 | return (__force fs32)cpu_to_be32(n); |
49 | } | 48 | } |
50 | 49 | ||
51 | static inline u16 | 50 | static inline u16 |
52 | fs16_to_cpu(const struct super_block *sb, u16 n) | 51 | fs16_to_cpu(const struct super_block *sb, fs16 n) |
53 | { | 52 | { |
54 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) | 53 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) |
55 | return le16_to_cpu(n); | 54 | return le16_to_cpu((__force __le16)n); |
56 | else | 55 | else |
57 | return be16_to_cpu(n); | 56 | return be16_to_cpu((__force __be16)n); |
58 | } | 57 | } |
59 | 58 | ||
60 | static inline u16 | 59 | static inline fs16 |
61 | cpu_to_fs16(const struct super_block *sb, u16 n) | 60 | cpu_to_fs16(const struct super_block *sb, u16 n) |
62 | { | 61 | { |
63 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) | 62 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) |
64 | return cpu_to_le16(n); | 63 | return (__force fs16)cpu_to_le16(n); |
65 | else | 64 | else |
66 | return cpu_to_be16(n); | 65 | return (__force fs16)cpu_to_be16(n); |
67 | } | 66 | } |
68 | 67 | ||
69 | /* Composite types below here */ | 68 | /* Composite types below here */ |
70 | 69 | ||
71 | static inline befs_block_run | 70 | static inline befs_block_run |
72 | fsrun_to_cpu(const struct super_block *sb, befs_block_run n) | 71 | fsrun_to_cpu(const struct super_block *sb, befs_disk_block_run n) |
73 | { | 72 | { |
74 | befs_block_run run; | 73 | befs_block_run run; |
75 | 74 | ||
76 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) { | 75 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) { |
77 | run.allocation_group = le32_to_cpu(n.allocation_group); | 76 | run.allocation_group = le32_to_cpu((__force __le32)n.allocation_group); |
78 | run.start = le16_to_cpu(n.start); | 77 | run.start = le16_to_cpu((__force __le16)n.start); |
79 | run.len = le16_to_cpu(n.len); | 78 | run.len = le16_to_cpu((__force __le16)n.len); |
80 | } else { | 79 | } else { |
81 | run.allocation_group = be32_to_cpu(n.allocation_group); | 80 | run.allocation_group = be32_to_cpu((__force __be32)n.allocation_group); |
82 | run.start = be16_to_cpu(n.start); | 81 | run.start = be16_to_cpu((__force __be16)n.start); |
83 | run.len = be16_to_cpu(n.len); | 82 | run.len = be16_to_cpu((__force __be16)n.len); |
84 | } | 83 | } |
85 | return run; | 84 | return run; |
86 | } | 85 | } |
87 | 86 | ||
88 | static inline befs_block_run | 87 | static inline befs_disk_block_run |
89 | cpu_to_fsrun(const struct super_block *sb, befs_block_run n) | 88 | cpu_to_fsrun(const struct super_block *sb, befs_block_run n) |
90 | { | 89 | { |
91 | befs_block_run run; | 90 | befs_disk_block_run run; |
92 | 91 | ||
93 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) { | 92 | if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) { |
94 | run.allocation_group = cpu_to_le32(n.allocation_group); | 93 | run.allocation_group = cpu_to_le32(n.allocation_group); |
@@ -103,7 +102,7 @@ cpu_to_fsrun(const struct super_block *sb, befs_block_run n) | |||
103 | } | 102 | } |
104 | 103 | ||
105 | static inline befs_data_stream | 104 | static inline befs_data_stream |
106 | fsds_to_cpu(const struct super_block *sb, befs_data_stream n) | 105 | fsds_to_cpu(const struct super_block *sb, befs_disk_data_stream n) |
107 | { | 106 | { |
108 | befs_data_stream data; | 107 | befs_data_stream data; |
109 | int i; | 108 | int i; |
diff --git a/fs/befs/inode.c b/fs/befs/inode.c index d41c9247ae8a..94c17f9a9576 100644 --- a/fs/befs/inode.c +++ b/fs/befs/inode.c | |||
@@ -8,7 +8,6 @@ | |||
8 | 8 | ||
9 | #include "befs.h" | 9 | #include "befs.h" |
10 | #include "inode.h" | 10 | #include "inode.h" |
11 | #include "endian.h" | ||
12 | 11 | ||
13 | /* | 12 | /* |
14 | Validates the correctness of the befs inode | 13 | Validates the correctness of the befs inode |
diff --git a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c index 57020c7a7e65..07f7144f0e2e 100644 --- a/fs/befs/linuxvfs.c +++ b/fs/befs/linuxvfs.c | |||
@@ -22,7 +22,6 @@ | |||
22 | #include "datastream.h" | 22 | #include "datastream.h" |
23 | #include "super.h" | 23 | #include "super.h" |
24 | #include "io.h" | 24 | #include "io.h" |
25 | #include "endian.h" | ||
26 | 25 | ||
27 | MODULE_DESCRIPTION("BeOS File System (BeFS) driver"); | 26 | MODULE_DESCRIPTION("BeOS File System (BeFS) driver"); |
28 | MODULE_AUTHOR("Will Dyson"); | 27 | MODULE_AUTHOR("Will Dyson"); |
diff --git a/fs/befs/super.c b/fs/befs/super.c index 4557acbac528..8c3401ff6d6a 100644 --- a/fs/befs/super.c +++ b/fs/befs/super.c | |||
@@ -11,7 +11,6 @@ | |||
11 | 11 | ||
12 | #include "befs.h" | 12 | #include "befs.h" |
13 | #include "super.h" | 13 | #include "super.h" |
14 | #include "endian.h" | ||
15 | 14 | ||
16 | /** | 15 | /** |
17 | * load_befs_sb -- Read from disk and properly byteswap all the fields | 16 | * load_befs_sb -- Read from disk and properly byteswap all the fields |
diff --git a/fs/buffer.c b/fs/buffer.c index 16cfbcd254f1..eeb8ac1aa856 100644 --- a/fs/buffer.c +++ b/fs/buffer.c | |||
@@ -701,7 +701,10 @@ EXPORT_SYMBOL(mark_buffer_dirty_inode); | |||
701 | */ | 701 | */ |
702 | int __set_page_dirty_buffers(struct page *page) | 702 | int __set_page_dirty_buffers(struct page *page) |
703 | { | 703 | { |
704 | struct address_space * const mapping = page->mapping; | 704 | struct address_space * const mapping = page_mapping(page); |
705 | |||
706 | if (unlikely(!mapping)) | ||
707 | return !TestSetPageDirty(page); | ||
705 | 708 | ||
706 | spin_lock(&mapping->private_lock); | 709 | spin_lock(&mapping->private_lock); |
707 | if (page_has_buffers(page)) { | 710 | if (page_has_buffers(page)) { |
diff --git a/fs/compat.c b/fs/compat.c index 4d3fbcb2ddb1..50624d4a70c6 100644 --- a/fs/compat.c +++ b/fs/compat.c | |||
@@ -1316,7 +1316,7 @@ compat_sys_vmsplice(int fd, const struct compat_iovec __user *iov32, | |||
1316 | unsigned int nr_segs, unsigned int flags) | 1316 | unsigned int nr_segs, unsigned int flags) |
1317 | { | 1317 | { |
1318 | unsigned i; | 1318 | unsigned i; |
1319 | struct iovec *iov; | 1319 | struct iovec __user *iov; |
1320 | if (nr_segs > UIO_MAXIOV) | 1320 | if (nr_segs > UIO_MAXIOV) |
1321 | return -EINVAL; | 1321 | return -EINVAL; |
1322 | iov = compat_alloc_user_space(nr_segs * sizeof(struct iovec)); | 1322 | iov = compat_alloc_user_space(nr_segs * sizeof(struct iovec)); |
diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c index 23f5ce12080b..7bcea7c5addb 100644 --- a/fs/dlm/lowcomms.c +++ b/fs/dlm/lowcomms.c | |||
@@ -174,7 +174,7 @@ static int nodeid_to_addr(int nodeid, struct sockaddr *retaddr) | |||
174 | return 0; | 174 | return 0; |
175 | } | 175 | } |
176 | 176 | ||
177 | static struct nodeinfo *nodeid2nodeinfo(int nodeid, int alloc) | 177 | static struct nodeinfo *nodeid2nodeinfo(int nodeid, gfp_t alloc) |
178 | { | 178 | { |
179 | struct nodeinfo *ni; | 179 | struct nodeinfo *ni; |
180 | int r; | 180 | int r; |
@@ -726,7 +726,7 @@ static int init_sock(void) | |||
726 | } | 726 | } |
727 | 727 | ||
728 | 728 | ||
729 | static struct writequeue_entry *new_writequeue_entry(int allocation) | 729 | static struct writequeue_entry *new_writequeue_entry(gfp_t allocation) |
730 | { | 730 | { |
731 | struct writequeue_entry *entry; | 731 | struct writequeue_entry *entry; |
732 | 732 | ||
@@ -748,7 +748,7 @@ static struct writequeue_entry *new_writequeue_entry(int allocation) | |||
748 | return entry; | 748 | return entry; |
749 | } | 749 | } |
750 | 750 | ||
751 | void *dlm_lowcomms_get_buffer(int nodeid, int len, int allocation, char **ppc) | 751 | void *dlm_lowcomms_get_buffer(int nodeid, int len, gfp_t allocation, char **ppc) |
752 | { | 752 | { |
753 | struct writequeue_entry *e; | 753 | struct writequeue_entry *e; |
754 | int offset = 0; | 754 | int offset = 0; |
diff --git a/fs/dlm/lowcomms.h b/fs/dlm/lowcomms.h index 6c04bb09cfa8..2d045e0daae1 100644 --- a/fs/dlm/lowcomms.h +++ b/fs/dlm/lowcomms.h | |||
@@ -19,7 +19,7 @@ void dlm_lowcomms_exit(void); | |||
19 | int dlm_lowcomms_start(void); | 19 | int dlm_lowcomms_start(void); |
20 | void dlm_lowcomms_stop(void); | 20 | void dlm_lowcomms_stop(void); |
21 | int dlm_lowcomms_close(int nodeid); | 21 | int dlm_lowcomms_close(int nodeid); |
22 | void *dlm_lowcomms_get_buffer(int nodeid, int len, int allocation, char **ppc); | 22 | void *dlm_lowcomms_get_buffer(int nodeid, int len, gfp_t allocation, char **ppc); |
23 | void dlm_lowcomms_commit_buffer(void *mh); | 23 | void dlm_lowcomms_commit_buffer(void *mh); |
24 | 24 | ||
25 | #endif /* __LOWCOMMS_DOT_H__ */ | 25 | #endif /* __LOWCOMMS_DOT_H__ */ |
diff --git a/fs/fat/inode.c b/fs/fat/inode.c index 045738032a83..4613cb202170 100644 --- a/fs/fat/inode.c +++ b/fs/fat/inode.c | |||
@@ -384,7 +384,7 @@ static int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de) | |||
384 | le16_to_cpu(de->cdate)) + secs; | 384 | le16_to_cpu(de->cdate)) + secs; |
385 | inode->i_ctime.tv_nsec = csecs * 10000000; | 385 | inode->i_ctime.tv_nsec = csecs * 10000000; |
386 | inode->i_atime.tv_sec = | 386 | inode->i_atime.tv_sec = |
387 | date_dos2unix(le16_to_cpu(0), le16_to_cpu(de->adate)); | 387 | date_dos2unix(0, le16_to_cpu(de->adate)); |
388 | inode->i_atime.tv_nsec = 0; | 388 | inode->i_atime.tv_nsec = 0; |
389 | } else | 389 | } else |
390 | inode->i_ctime = inode->i_atime = inode->i_mtime; | 390 | inode->i_ctime = inode->i_atime = inode->i_mtime; |
diff --git a/fs/hpfs/inode.c b/fs/hpfs/inode.c index bcf6ee36e065..7faef8544f32 100644 --- a/fs/hpfs/inode.c +++ b/fs/hpfs/inode.c | |||
@@ -60,14 +60,14 @@ void hpfs_read_inode(struct inode *i) | |||
60 | if (hpfs_sb(i->i_sb)->sb_eas) { | 60 | if (hpfs_sb(i->i_sb)->sb_eas) { |
61 | if ((ea = hpfs_get_ea(i->i_sb, fnode, "UID", &ea_size))) { | 61 | if ((ea = hpfs_get_ea(i->i_sb, fnode, "UID", &ea_size))) { |
62 | if (ea_size == 2) { | 62 | if (ea_size == 2) { |
63 | i->i_uid = le16_to_cpu(*(u16*)ea); | 63 | i->i_uid = le16_to_cpu(*(__le16*)ea); |
64 | hpfs_inode->i_ea_uid = 1; | 64 | hpfs_inode->i_ea_uid = 1; |
65 | } | 65 | } |
66 | kfree(ea); | 66 | kfree(ea); |
67 | } | 67 | } |
68 | if ((ea = hpfs_get_ea(i->i_sb, fnode, "GID", &ea_size))) { | 68 | if ((ea = hpfs_get_ea(i->i_sb, fnode, "GID", &ea_size))) { |
69 | if (ea_size == 2) { | 69 | if (ea_size == 2) { |
70 | i->i_gid = le16_to_cpu(*(u16*)ea); | 70 | i->i_gid = le16_to_cpu(*(__le16*)ea); |
71 | hpfs_inode->i_ea_gid = 1; | 71 | hpfs_inode->i_ea_gid = 1; |
72 | } | 72 | } |
73 | kfree(ea); | 73 | kfree(ea); |
@@ -87,7 +87,7 @@ void hpfs_read_inode(struct inode *i) | |||
87 | int rdev = 0; | 87 | int rdev = 0; |
88 | umode_t mode = hpfs_sb(sb)->sb_mode; | 88 | umode_t mode = hpfs_sb(sb)->sb_mode; |
89 | if (ea_size == 2) { | 89 | if (ea_size == 2) { |
90 | mode = le16_to_cpu(*(u16*)ea); | 90 | mode = le16_to_cpu(*(__le16*)ea); |
91 | hpfs_inode->i_ea_mode = 1; | 91 | hpfs_inode->i_ea_mode = 1; |
92 | } | 92 | } |
93 | kfree(ea); | 93 | kfree(ea); |
@@ -95,7 +95,7 @@ void hpfs_read_inode(struct inode *i) | |||
95 | if (S_ISBLK(mode) || S_ISCHR(mode)) { | 95 | if (S_ISBLK(mode) || S_ISCHR(mode)) { |
96 | if ((ea = hpfs_get_ea(i->i_sb, fnode, "DEV", &ea_size))) { | 96 | if ((ea = hpfs_get_ea(i->i_sb, fnode, "DEV", &ea_size))) { |
97 | if (ea_size == 4) | 97 | if (ea_size == 4) |
98 | rdev = le32_to_cpu(*(u32*)ea); | 98 | rdev = le32_to_cpu(*(__le32*)ea); |
99 | kfree(ea); | 99 | kfree(ea); |
100 | } | 100 | } |
101 | } | 101 | } |
@@ -148,7 +148,7 @@ static void hpfs_write_inode_ea(struct inode *i, struct fnode *fnode) | |||
148 | we'd better not overwrite them | 148 | we'd better not overwrite them |
149 | hpfs_error(i->i_sb, "fnode %08x has some unknown HPFS386 stuctures", i->i_ino); | 149 | hpfs_error(i->i_sb, "fnode %08x has some unknown HPFS386 stuctures", i->i_ino); |
150 | } else*/ if (hpfs_sb(i->i_sb)->sb_eas >= 2) { | 150 | } else*/ if (hpfs_sb(i->i_sb)->sb_eas >= 2) { |
151 | u32 ea; | 151 | __le32 ea; |
152 | if ((i->i_uid != hpfs_sb(i->i_sb)->sb_uid) || hpfs_inode->i_ea_uid) { | 152 | if ((i->i_uid != hpfs_sb(i->i_sb)->sb_uid) || hpfs_inode->i_ea_uid) { |
153 | ea = cpu_to_le32(i->i_uid); | 153 | ea = cpu_to_le32(i->i_uid); |
154 | hpfs_set_ea(i, fnode, "UID", (char*)&ea, 2); | 154 | hpfs_set_ea(i, fnode, "UID", (char*)&ea, 2); |
@@ -165,6 +165,7 @@ static void hpfs_write_inode_ea(struct inode *i, struct fnode *fnode) | |||
165 | && i->i_mode != ((hpfs_sb(i->i_sb)->sb_mode & ~(S_ISDIR(i->i_mode) ? 0222 : 0333)) | 165 | && i->i_mode != ((hpfs_sb(i->i_sb)->sb_mode & ~(S_ISDIR(i->i_mode) ? 0222 : 0333)) |
166 | | (S_ISDIR(i->i_mode) ? S_IFDIR : S_IFREG))) || hpfs_inode->i_ea_mode) { | 166 | | (S_ISDIR(i->i_mode) ? S_IFDIR : S_IFREG))) || hpfs_inode->i_ea_mode) { |
167 | ea = cpu_to_le32(i->i_mode); | 167 | ea = cpu_to_le32(i->i_mode); |
168 | /* sick, but legal */ | ||
168 | hpfs_set_ea(i, fnode, "MODE", (char *)&ea, 2); | 169 | hpfs_set_ea(i, fnode, "MODE", (char *)&ea, 2); |
169 | hpfs_inode->i_ea_mode = 1; | 170 | hpfs_inode->i_ea_mode = 1; |
170 | } | 171 | } |
diff --git a/fs/hppfs/hppfs_kern.c b/fs/hppfs/hppfs_kern.c index dcb6d2e988b8..642675fc394a 100644 --- a/fs/hppfs/hppfs_kern.c +++ b/fs/hppfs/hppfs_kern.c | |||
@@ -572,7 +572,7 @@ struct hppfs_dirent { | |||
572 | }; | 572 | }; |
573 | 573 | ||
574 | static int hppfs_filldir(void *d, const char *name, int size, | 574 | static int hppfs_filldir(void *d, const char *name, int size, |
575 | loff_t offset, ino_t inode, unsigned int type) | 575 | loff_t offset, u64 inode, unsigned int type) |
576 | { | 576 | { |
577 | struct hppfs_dirent *dirent = d; | 577 | struct hppfs_dirent *dirent = d; |
578 | 578 | ||
diff --git a/fs/inode.c b/fs/inode.c index bf6bec4e54ff..d9a21d122926 100644 --- a/fs/inode.c +++ b/fs/inode.c | |||
@@ -162,7 +162,7 @@ static struct inode *alloc_inode(struct super_block *sb) | |||
162 | bdi = sb->s_bdev->bd_inode->i_mapping->backing_dev_info; | 162 | bdi = sb->s_bdev->bd_inode->i_mapping->backing_dev_info; |
163 | mapping->backing_dev_info = bdi; | 163 | mapping->backing_dev_info = bdi; |
164 | } | 164 | } |
165 | inode->i_private = 0; | 165 | inode->i_private = NULL; |
166 | inode->i_mapping = mapping; | 166 | inode->i_mapping = mapping; |
167 | } | 167 | } |
168 | return inode; | 168 | return inode; |
diff --git a/fs/isofs/joliet.c b/fs/isofs/joliet.c index 81a90e170ac3..fb8fe7a9ddc6 100644 --- a/fs/isofs/joliet.c +++ b/fs/isofs/joliet.c | |||
@@ -14,9 +14,9 @@ | |||
14 | * Convert Unicode 16 to UTF-8 or ASCII. | 14 | * Convert Unicode 16 to UTF-8 or ASCII. |
15 | */ | 15 | */ |
16 | static int | 16 | static int |
17 | uni16_to_x8(unsigned char *ascii, u16 *uni, int len, struct nls_table *nls) | 17 | uni16_to_x8(unsigned char *ascii, __be16 *uni, int len, struct nls_table *nls) |
18 | { | 18 | { |
19 | wchar_t *ip, ch; | 19 | __be16 *ip, ch; |
20 | unsigned char *op; | 20 | unsigned char *op; |
21 | 21 | ||
22 | ip = uni; | 22 | ip = uni; |
@@ -24,8 +24,8 @@ uni16_to_x8(unsigned char *ascii, u16 *uni, int len, struct nls_table *nls) | |||
24 | 24 | ||
25 | while ((ch = get_unaligned(ip)) && len) { | 25 | while ((ch = get_unaligned(ip)) && len) { |
26 | int llen; | 26 | int llen; |
27 | ch = be16_to_cpu(ch); | 27 | llen = nls->uni2char(be16_to_cpu(ch), op, NLS_MAX_CHARSET_SIZE); |
28 | if ((llen = nls->uni2char(ch, op, NLS_MAX_CHARSET_SIZE)) > 0) | 28 | if (llen > 0) |
29 | op += llen; | 29 | op += llen; |
30 | else | 30 | else |
31 | *op++ = '?'; | 31 | *op++ = '?'; |
@@ -82,7 +82,7 @@ get_joliet_filename(struct iso_directory_record * de, unsigned char *outname, st | |||
82 | len = wcsntombs_be(outname, de->name, | 82 | len = wcsntombs_be(outname, de->name, |
83 | de->name_len[0] >> 1, PAGE_SIZE); | 83 | de->name_len[0] >> 1, PAGE_SIZE); |
84 | } else { | 84 | } else { |
85 | len = uni16_to_x8(outname, (u16 *) de->name, | 85 | len = uni16_to_x8(outname, (__be16 *) de->name, |
86 | de->name_len[0] >> 1, nls); | 86 | de->name_len[0] >> 1, nls); |
87 | } | 87 | } |
88 | if ((len > 2) && (outname[len-2] == ';') && (outname[len-1] == '1')) { | 88 | if ((len > 2) && (outname[len-2] == ';') && (outname[len-1] == '1')) { |
diff --git a/fs/ncpfs/ioctl.c b/fs/ncpfs/ioctl.c index a89ac84a8241..589d1eac55c1 100644 --- a/fs/ncpfs/ioctl.c +++ b/fs/ncpfs/ioctl.c | |||
@@ -726,7 +726,7 @@ outrel: | |||
726 | struct compat_ncp_privatedata_ioctl user32; | 726 | struct compat_ncp_privatedata_ioctl user32; |
727 | user32.len = user.len; | 727 | user32.len = user.len; |
728 | user32.data = (unsigned long) user.data; | 728 | user32.data = (unsigned long) user.data; |
729 | if (copy_to_user(&user32, argp, sizeof(user32))) | 729 | if (copy_to_user(argp, &user32, sizeof(user32))) |
730 | return -EFAULT; | 730 | return -EFAULT; |
731 | } else | 731 | } else |
732 | #endif | 732 | #endif |
diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 6e4e48c5092a..34c3996bd0f5 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c | |||
@@ -322,25 +322,11 @@ found_client: | |||
322 | if (new) | 322 | if (new) |
323 | nfs_free_client(new); | 323 | nfs_free_client(new); |
324 | 324 | ||
325 | if (clp->cl_cons_state == NFS_CS_INITING) { | 325 | error = wait_event_interruptible(nfs_client_active_wq, |
326 | DECLARE_WAITQUEUE(myself, current); | 326 | clp->cl_cons_state != NFS_CS_INITING); |
327 | 327 | if (error < 0) { | |
328 | add_wait_queue(&nfs_client_active_wq, &myself); | 328 | nfs_put_client(clp); |
329 | 329 | return ERR_PTR(-ERESTARTSYS); | |
330 | for (;;) { | ||
331 | set_current_state(TASK_INTERRUPTIBLE); | ||
332 | if (signal_pending(current) || | ||
333 | clp->cl_cons_state > NFS_CS_READY) | ||
334 | break; | ||
335 | schedule(); | ||
336 | } | ||
337 | |||
338 | remove_wait_queue(&nfs_client_active_wq, &myself); | ||
339 | |||
340 | if (signal_pending(current)) { | ||
341 | nfs_put_client(clp); | ||
342 | return ERR_PTR(-ERESTARTSYS); | ||
343 | } | ||
344 | } | 330 | } |
345 | 331 | ||
346 | if (clp->cl_cons_state < NFS_CS_READY) { | 332 | if (clp->cl_cons_state < NFS_CS_READY) { |
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c index 6fa6340a5fb8..013b38996e64 100644 --- a/fs/nfsd/nfssvc.c +++ b/fs/nfsd/nfssvc.c | |||
@@ -217,7 +217,7 @@ int nfsd_create_serv(void) | |||
217 | 217 | ||
218 | atomic_set(&nfsd_busy, 0); | 218 | atomic_set(&nfsd_busy, 0); |
219 | nfsd_serv = svc_create_pooled(&nfsd_program, | 219 | nfsd_serv = svc_create_pooled(&nfsd_program, |
220 | NFSD_BUFSIZE - NFSSVC_MAXBLKSIZE + nfsd_max_blksize, | 220 | nfsd_max_blksize, |
221 | nfsd_last_thread, | 221 | nfsd_last_thread, |
222 | nfsd, SIG_NOCLEAN, THIS_MODULE); | 222 | nfsd, SIG_NOCLEAN, THIS_MODULE); |
223 | if (nfsd_serv == NULL) | 223 | if (nfsd_serv == NULL) |
diff --git a/fs/partitions/msdos.c b/fs/partitions/msdos.c index 4f8df71e49d3..8c7af1777819 100644 --- a/fs/partitions/msdos.c +++ b/fs/partitions/msdos.c | |||
@@ -32,13 +32,11 @@ | |||
32 | #include <asm/unaligned.h> | 32 | #include <asm/unaligned.h> |
33 | 33 | ||
34 | #define SYS_IND(p) (get_unaligned(&p->sys_ind)) | 34 | #define SYS_IND(p) (get_unaligned(&p->sys_ind)) |
35 | #define NR_SECTS(p) ({ __typeof__(p->nr_sects) __a = \ | 35 | #define NR_SECTS(p) ({ __le32 __a = get_unaligned(&p->nr_sects); \ |
36 | get_unaligned(&p->nr_sects); \ | ||
37 | le32_to_cpu(__a); \ | 36 | le32_to_cpu(__a); \ |
38 | }) | 37 | }) |
39 | 38 | ||
40 | #define START_SECT(p) ({ __typeof__(p->start_sect) __a = \ | 39 | #define START_SECT(p) ({ __le32 __a = get_unaligned(&p->start_sect); \ |
41 | get_unaligned(&p->start_sect); \ | ||
42 | le32_to_cpu(__a); \ | 40 | le32_to_cpu(__a); \ |
43 | }) | 41 | }) |
44 | 42 | ||
diff --git a/fs/reiserfs/bitmap.c b/fs/reiserfs/bitmap.c index 1bfae42117ca..e3d466a228d4 100644 --- a/fs/reiserfs/bitmap.c +++ b/fs/reiserfs/bitmap.c | |||
@@ -1304,8 +1304,8 @@ struct buffer_head *reiserfs_read_bitmap_block(struct super_block *sb, | |||
1304 | 1304 | ||
1305 | bh = sb_bread(sb, block); | 1305 | bh = sb_bread(sb, block); |
1306 | if (bh == NULL) | 1306 | if (bh == NULL) |
1307 | reiserfs_warning(sb, "sh-2029: %s: bitmap block (#%lu) " | 1307 | reiserfs_warning(sb, "sh-2029: %s: bitmap block (#%u) " |
1308 | "reading failed", __FUNCTION__, bh->b_blocknr); | 1308 | "reading failed", __FUNCTION__, block); |
1309 | else { | 1309 | else { |
1310 | if (buffer_locked(bh)) { | 1310 | if (buffer_locked(bh)) { |
1311 | PROC_INFO_INC(sb, scan_bitmap.wait); | 1311 | PROC_INFO_INC(sb, scan_bitmap.wait); |
diff --git a/fs/ufs/util.c b/fs/ufs/util.c index 22f820a9b15c..17437574f79c 100644 --- a/fs/ufs/util.c +++ b/fs/ufs/util.c | |||
@@ -184,14 +184,13 @@ void _ubh_memcpyubh_(struct ufs_sb_private_info * uspi, | |||
184 | dev_t | 184 | dev_t |
185 | ufs_get_inode_dev(struct super_block *sb, struct ufs_inode_info *ufsi) | 185 | ufs_get_inode_dev(struct super_block *sb, struct ufs_inode_info *ufsi) |
186 | { | 186 | { |
187 | __fs32 fs32; | 187 | __u32 fs32; |
188 | dev_t dev; | 188 | dev_t dev; |
189 | 189 | ||
190 | if ((UFS_SB(sb)->s_flags & UFS_ST_MASK) == UFS_ST_SUNx86) | 190 | if ((UFS_SB(sb)->s_flags & UFS_ST_MASK) == UFS_ST_SUNx86) |
191 | fs32 = ufsi->i_u1.i_data[1]; | 191 | fs32 = fs32_to_cpu(sb, ufsi->i_u1.i_data[1]); |
192 | else | 192 | else |
193 | fs32 = ufsi->i_u1.i_data[0]; | 193 | fs32 = fs32_to_cpu(sb, ufsi->i_u1.i_data[0]); |
194 | fs32 = fs32_to_cpu(sb, fs32); | ||
195 | switch (UFS_SB(sb)->s_flags & UFS_ST_MASK) { | 194 | switch (UFS_SB(sb)->s_flags & UFS_ST_MASK) { |
196 | case UFS_ST_SUNx86: | 195 | case UFS_ST_SUNx86: |
197 | case UFS_ST_SUN: | 196 | case UFS_ST_SUN: |
@@ -212,7 +211,7 @@ ufs_get_inode_dev(struct super_block *sb, struct ufs_inode_info *ufsi) | |||
212 | void | 211 | void |
213 | ufs_set_inode_dev(struct super_block *sb, struct ufs_inode_info *ufsi, dev_t dev) | 212 | ufs_set_inode_dev(struct super_block *sb, struct ufs_inode_info *ufsi, dev_t dev) |
214 | { | 213 | { |
215 | __fs32 fs32; | 214 | __u32 fs32; |
216 | 215 | ||
217 | switch (UFS_SB(sb)->s_flags & UFS_ST_MASK) { | 216 | switch (UFS_SB(sb)->s_flags & UFS_ST_MASK) { |
218 | case UFS_ST_SUNx86: | 217 | case UFS_ST_SUNx86: |
@@ -227,11 +226,10 @@ ufs_set_inode_dev(struct super_block *sb, struct ufs_inode_info *ufsi, dev_t dev | |||
227 | fs32 = old_encode_dev(dev); | 226 | fs32 = old_encode_dev(dev); |
228 | break; | 227 | break; |
229 | } | 228 | } |
230 | fs32 = cpu_to_fs32(sb, fs32); | ||
231 | if ((UFS_SB(sb)->s_flags & UFS_ST_MASK) == UFS_ST_SUNx86) | 229 | if ((UFS_SB(sb)->s_flags & UFS_ST_MASK) == UFS_ST_SUNx86) |
232 | ufsi->i_u1.i_data[1] = fs32; | 230 | ufsi->i_u1.i_data[1] = cpu_to_fs32(sb, fs32); |
233 | else | 231 | else |
234 | ufsi->i_u1.i_data[0] = fs32; | 232 | ufsi->i_u1.i_data[0] = cpu_to_fs32(sb, fs32); |
235 | } | 233 | } |
236 | 234 | ||
237 | /** | 235 | /** |
diff --git a/fs/xattr.c b/fs/xattr.c index c32f15b5f60f..395635100f77 100644 --- a/fs/xattr.c +++ b/fs/xattr.c | |||
@@ -135,6 +135,26 @@ vfs_getxattr(struct dentry *dentry, char *name, void *value, size_t size) | |||
135 | } | 135 | } |
136 | EXPORT_SYMBOL_GPL(vfs_getxattr); | 136 | EXPORT_SYMBOL_GPL(vfs_getxattr); |
137 | 137 | ||
138 | ssize_t | ||
139 | vfs_listxattr(struct dentry *d, char *list, size_t size) | ||
140 | { | ||
141 | ssize_t error; | ||
142 | |||
143 | error = security_inode_listxattr(d); | ||
144 | if (error) | ||
145 | return error; | ||
146 | error = -EOPNOTSUPP; | ||
147 | if (d->d_inode->i_op && d->d_inode->i_op->listxattr) { | ||
148 | error = d->d_inode->i_op->listxattr(d, list, size); | ||
149 | } else { | ||
150 | error = security_inode_listsecurity(d->d_inode, list, size); | ||
151 | if (size && error > size) | ||
152 | error = -ERANGE; | ||
153 | } | ||
154 | return error; | ||
155 | } | ||
156 | EXPORT_SYMBOL_GPL(vfs_listxattr); | ||
157 | |||
138 | int | 158 | int |
139 | vfs_removexattr(struct dentry *dentry, char *name) | 159 | vfs_removexattr(struct dentry *dentry, char *name) |
140 | { | 160 | { |
@@ -346,17 +366,7 @@ listxattr(struct dentry *d, char __user *list, size_t size) | |||
346 | return -ENOMEM; | 366 | return -ENOMEM; |
347 | } | 367 | } |
348 | 368 | ||
349 | error = security_inode_listxattr(d); | 369 | error = vfs_listxattr(d, klist, size); |
350 | if (error) | ||
351 | goto out; | ||
352 | error = -EOPNOTSUPP; | ||
353 | if (d->d_inode->i_op && d->d_inode->i_op->listxattr) { | ||
354 | error = d->d_inode->i_op->listxattr(d, klist, size); | ||
355 | } else { | ||
356 | error = security_inode_listsecurity(d->d_inode, klist, size); | ||
357 | if (size && error > size) | ||
358 | error = -ERANGE; | ||
359 | } | ||
360 | if (error > 0) { | 370 | if (error > 0) { |
361 | if (size && copy_to_user(list, klist, error)) | 371 | if (size && copy_to_user(list, klist, error)) |
362 | error = -EFAULT; | 372 | error = -EFAULT; |
@@ -365,7 +375,6 @@ listxattr(struct dentry *d, char __user *list, size_t size) | |||
365 | than XATTR_LIST_MAX bytes. Not possible. */ | 375 | than XATTR_LIST_MAX bytes. Not possible. */ |
366 | error = -E2BIG; | 376 | error = -E2BIG; |
367 | } | 377 | } |
368 | out: | ||
369 | kfree(klist); | 378 | kfree(klist); |
370 | return error; | 379 | return error; |
371 | } | 380 | } |
diff --git a/include/acpi/aclocal.h b/include/acpi/aclocal.h index a4d0e73d5aca..063c4b54290f 100644 --- a/include/acpi/aclocal.h +++ b/include/acpi/aclocal.h | |||
@@ -708,7 +708,7 @@ struct acpi_bit_register_info { | |||
708 | * must be preserved. | 708 | * must be preserved. |
709 | */ | 709 | */ |
710 | #define ACPI_PM1_STATUS_PRESERVED_BITS 0x0800 /* Bit 11 */ | 710 | #define ACPI_PM1_STATUS_PRESERVED_BITS 0x0800 /* Bit 11 */ |
711 | #define ACPI_PM1_CONTROL_PRESERVED_BITS 0x0201 /* Bit 9, Bit 0 (SCI_EN) */ | 711 | #define ACPI_PM1_CONTROL_PRESERVED_BITS 0x0200 /* Bit 9 (whatever) */ |
712 | 712 | ||
713 | /* | 713 | /* |
714 | * Register IDs | 714 | * Register IDs |
diff --git a/include/asm-alpha/irq_regs.h b/include/asm-alpha/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-alpha/irq_regs.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-alpha/machvec.h b/include/asm-alpha/machvec.h index aced22f91752..a86c083cdf7f 100644 --- a/include/asm-alpha/machvec.h +++ b/include/asm-alpha/machvec.h | |||
@@ -15,7 +15,6 @@ | |||
15 | 15 | ||
16 | struct task_struct; | 16 | struct task_struct; |
17 | struct mm_struct; | 17 | struct mm_struct; |
18 | struct pt_regs; | ||
19 | struct vm_area_struct; | 18 | struct vm_area_struct; |
20 | struct linux_hose_info; | 19 | struct linux_hose_info; |
21 | struct pci_dev; | 20 | struct pci_dev; |
@@ -79,8 +78,8 @@ struct alpha_machine_vector | |||
79 | 78 | ||
80 | void (*update_irq_hw)(unsigned long, unsigned long, int); | 79 | void (*update_irq_hw)(unsigned long, unsigned long, int); |
81 | void (*ack_irq)(unsigned long); | 80 | void (*ack_irq)(unsigned long); |
82 | void (*device_interrupt)(unsigned long vector, struct pt_regs *regs); | 81 | void (*device_interrupt)(unsigned long vector); |
83 | void (*machine_check)(u64 vector, u64 la, struct pt_regs *regs); | 82 | void (*machine_check)(u64 vector, u64 la); |
84 | 83 | ||
85 | void (*smp_callin)(void); | 84 | void (*smp_callin)(void); |
86 | void (*init_arch)(void); | 85 | void (*init_arch)(void); |
diff --git a/include/asm-arm/arch-clps711x/time.h b/include/asm-arm/arch-clps711x/time.h index 0e4a3901d3b3..5edaae1c61d3 100644 --- a/include/asm-arm/arch-clps711x/time.h +++ b/include/asm-arm/arch-clps711x/time.h | |||
@@ -26,8 +26,9 @@ extern void clps711x_setup_timer(void); | |||
26 | * IRQ handler for the timer | 26 | * IRQ handler for the timer |
27 | */ | 27 | */ |
28 | static irqreturn_t | 28 | static irqreturn_t |
29 | p720t_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 29 | p720t_timer_interrupt(int irq, void *dev_id) |
30 | { | 30 | { |
31 | struct pt_regs *regs = get_irq_regs(); | ||
31 | do_leds(); | 32 | do_leds(); |
32 | do_timer(1); | 33 | do_timer(1); |
33 | #ifndef CONFIG_SMP | 34 | #ifndef CONFIG_SMP |
diff --git a/include/asm-arm/arch-imx/imx-dma.h b/include/asm-arm/arch-imx/imx-dma.h index 599f03e5a9ef..5b1066da4e1f 100644 --- a/include/asm-arm/arch-imx/imx-dma.h +++ b/include/asm-arm/arch-imx/imx-dma.h | |||
@@ -45,8 +45,8 @@ | |||
45 | 45 | ||
46 | struct imx_dma_channel { | 46 | struct imx_dma_channel { |
47 | const char *name; | 47 | const char *name; |
48 | void (*irq_handler) (int, void *, struct pt_regs *); | 48 | void (*irq_handler) (int, void *); |
49 | void (*err_handler) (int, void *, struct pt_regs *, int errcode); | 49 | void (*err_handler) (int, void *, int errcode); |
50 | void *data; | 50 | void *data; |
51 | dmamode_t dma_mode; | 51 | dmamode_t dma_mode; |
52 | struct scatterlist *sg; | 52 | struct scatterlist *sg; |
@@ -77,8 +77,8 @@ imx_dma_setup_sg(imx_dmach_t dma_ch, | |||
77 | 77 | ||
78 | int | 78 | int |
79 | imx_dma_setup_handlers(imx_dmach_t dma_ch, | 79 | imx_dma_setup_handlers(imx_dmach_t dma_ch, |
80 | void (*irq_handler) (int, void *, struct pt_regs *), | 80 | void (*irq_handler) (int, void *), |
81 | void (*err_handler) (int, void *, struct pt_regs *, int), void *data); | 81 | void (*err_handler) (int, void *, int), void *data); |
82 | 82 | ||
83 | void imx_dma_enable(imx_dmach_t dma_ch); | 83 | void imx_dma_enable(imx_dmach_t dma_ch); |
84 | 84 | ||
diff --git a/include/asm-arm/arch-l7200/time.h b/include/asm-arm/arch-l7200/time.h index c69cb508735f..ea22f7fff9cd 100644 --- a/include/asm-arm/arch-l7200/time.h +++ b/include/asm-arm/arch-l7200/time.h | |||
@@ -43,8 +43,9 @@ | |||
43 | * Handler for RTC timer interrupt | 43 | * Handler for RTC timer interrupt |
44 | */ | 44 | */ |
45 | static irqreturn_t | 45 | static irqreturn_t |
46 | timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 46 | timer_interrupt(int irq, void *dev_id) |
47 | { | 47 | { |
48 | struct pt_regs *regs = get_irq_regs(); | ||
48 | do_timer(1); | 49 | do_timer(1); |
49 | #ifndef CONFIG_SMP | 50 | #ifndef CONFIG_SMP |
50 | update_process_times(user_mode(regs)); | 51 | update_process_times(user_mode(regs)); |
diff --git a/include/asm-arm/arch-pnx4008/dma.h b/include/asm-arm/arch-pnx4008/dma.h index 3aee1204795b..418f15283ff1 100644 --- a/include/asm-arm/arch-pnx4008/dma.h +++ b/include/asm-arm/arch-pnx4008/dma.h | |||
@@ -137,7 +137,7 @@ extern void pnx4008_free_ll_entry(struct pnx4008_dma_ll *, dma_addr_t); | |||
137 | extern void pnx4008_free_ll(u32 ll_dma, struct pnx4008_dma_ll *); | 137 | extern void pnx4008_free_ll(u32 ll_dma, struct pnx4008_dma_ll *); |
138 | 138 | ||
139 | extern int pnx4008_request_channel(char *, int, | 139 | extern int pnx4008_request_channel(char *, int, |
140 | void (*)(int, int, void *, struct pt_regs *), | 140 | void (*)(int, int, void *), |
141 | void *); | 141 | void *); |
142 | extern void pnx4008_free_channel(int); | 142 | extern void pnx4008_free_channel(int); |
143 | extern int pnx4008_config_dma(int, int, int); | 143 | extern int pnx4008_config_dma(int, int, int); |
diff --git a/include/asm-arm/arch-pxa/dma.h b/include/asm-arm/arch-pxa/dma.h index a008150abc59..bed042d71d68 100644 --- a/include/asm-arm/arch-pxa/dma.h +++ b/include/asm-arm/arch-pxa/dma.h | |||
@@ -56,7 +56,7 @@ for ( \ | |||
56 | 56 | ||
57 | int pxa_request_dma (char *name, | 57 | int pxa_request_dma (char *name, |
58 | pxa_dma_prio prio, | 58 | pxa_dma_prio prio, |
59 | void (*irq_handler)(int, void *, struct pt_regs *), | 59 | void (*irq_handler)(int, void *), |
60 | void *data); | 60 | void *data); |
61 | 61 | ||
62 | void pxa_free_dma (int dma_ch); | 62 | void pxa_free_dma (int dma_ch); |
diff --git a/include/asm-arm/arch-pxa/mmc.h b/include/asm-arm/arch-pxa/mmc.h index 88c17dd02ed2..a38a28c4bbd8 100644 --- a/include/asm-arm/arch-pxa/mmc.h +++ b/include/asm-arm/arch-pxa/mmc.h | |||
@@ -10,7 +10,7 @@ struct mmc_host; | |||
10 | struct pxamci_platform_data { | 10 | struct pxamci_platform_data { |
11 | unsigned int ocr_mask; /* available voltages */ | 11 | unsigned int ocr_mask; /* available voltages */ |
12 | unsigned long detect_delay; /* delay in jiffies before detecting cards after interrupt */ | 12 | unsigned long detect_delay; /* delay in jiffies before detecting cards after interrupt */ |
13 | int (*init)(struct device *, irqreturn_t (*)(int, void *, struct pt_regs *), void *); | 13 | int (*init)(struct device *, irq_handler_t , void *); |
14 | int (*get_ro)(struct device *); | 14 | int (*get_ro)(struct device *); |
15 | void (*setpower)(struct device *, unsigned int); | 15 | void (*setpower)(struct device *, unsigned int); |
16 | void (*exit)(struct device *, void *); | 16 | void (*exit)(struct device *, void *); |
diff --git a/include/asm-arm/hardware/sharpsl_pm.h b/include/asm-arm/hardware/sharpsl_pm.h index a836e76a14f7..2d00db22b981 100644 --- a/include/asm-arm/hardware/sharpsl_pm.h +++ b/include/asm-arm/hardware/sharpsl_pm.h | |||
@@ -100,7 +100,7 @@ extern struct sharpsl_pm_status sharpsl_pm; | |||
100 | 100 | ||
101 | void sharpsl_battery_kick(void); | 101 | void sharpsl_battery_kick(void); |
102 | void sharpsl_pm_led(int val); | 102 | void sharpsl_pm_led(int val); |
103 | irqreturn_t sharpsl_ac_isr(int irq, void *dev_id, struct pt_regs *fp); | 103 | irqreturn_t sharpsl_ac_isr(int irq, void *dev_id); |
104 | irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id, struct pt_regs *fp); | 104 | irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id); |
105 | irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id, struct pt_regs *fp); | 105 | irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id); |
106 | 106 | ||
diff --git a/include/asm-arm/hw_irq.h b/include/asm-arm/hw_irq.h index ea856971989a..98d594a973d6 100644 --- a/include/asm-arm/hw_irq.h +++ b/include/asm-arm/hw_irq.h | |||
@@ -12,7 +12,7 @@ | |||
12 | if (!(action->flags & IRQF_TIMER) && system_timer->dyn_tick) { \ | 12 | if (!(action->flags & IRQF_TIMER) && system_timer->dyn_tick) { \ |
13 | write_seqlock(&xtime_lock); \ | 13 | write_seqlock(&xtime_lock); \ |
14 | if (system_timer->dyn_tick->state & DYN_TICK_ENABLED) \ | 14 | if (system_timer->dyn_tick->state & DYN_TICK_ENABLED) \ |
15 | system_timer->dyn_tick->handler(irq, 0, regs); \ | 15 | system_timer->dyn_tick->handler(irq, NULL); \ |
16 | write_sequnlock(&xtime_lock); \ | 16 | write_sequnlock(&xtime_lock); \ |
17 | } | 17 | } |
18 | #endif | 18 | #endif |
diff --git a/include/asm-arm/io.h b/include/asm-arm/io.h index 8076a85c3675..34aaaac4f617 100644 --- a/include/asm-arm/io.h +++ b/include/asm-arm/io.h | |||
@@ -63,7 +63,7 @@ extern void __raw_readsl(const void __iomem *addr, void *data, int longlen); | |||
63 | */ | 63 | */ |
64 | extern void __iomem * __ioremap_pfn(unsigned long, unsigned long, size_t, unsigned long); | 64 | extern void __iomem * __ioremap_pfn(unsigned long, unsigned long, size_t, unsigned long); |
65 | extern void __iomem * __ioremap(unsigned long, size_t, unsigned long); | 65 | extern void __iomem * __ioremap(unsigned long, size_t, unsigned long); |
66 | extern void __iounmap(void __iomem *addr); | 66 | extern void __iounmap(volatile void __iomem *addr); |
67 | 67 | ||
68 | /* | 68 | /* |
69 | * Bad read/write accesses... | 69 | * Bad read/write accesses... |
diff --git a/include/asm-arm/irq_regs.h b/include/asm-arm/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-arm/irq_regs.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-arm/mach/irq.h b/include/asm-arm/mach/irq.h index 131f33733d25..0e017ecf2096 100644 --- a/include/asm-arm/mach/irq.h +++ b/include/asm-arm/mach/irq.h | |||
@@ -30,10 +30,9 @@ extern int show_fiq_list(struct seq_file *, void *); | |||
30 | /* | 30 | /* |
31 | * Obsolete inline function for calling irq descriptor handlers. | 31 | * Obsolete inline function for calling irq descriptor handlers. |
32 | */ | 32 | */ |
33 | static inline void desc_handle_irq(unsigned int irq, struct irq_desc *desc, | 33 | static inline void desc_handle_irq(unsigned int irq, struct irq_desc *desc) |
34 | struct pt_regs *regs) | ||
35 | { | 34 | { |
36 | desc->handle_irq(irq, desc, regs); | 35 | desc->handle_irq(irq, desc); |
37 | } | 36 | } |
38 | 37 | ||
39 | void set_irq_flags(unsigned int irq, unsigned int flags); | 38 | void set_irq_flags(unsigned int irq, unsigned int flags); |
@@ -51,10 +50,10 @@ void set_irq_flags(unsigned int irq, unsigned int flags); | |||
51 | #define irqdesc irq_desc | 50 | #define irqdesc irq_desc |
52 | #define irqchip irq_chip | 51 | #define irqchip irq_chip |
53 | 52 | ||
54 | #define do_bad_IRQ(irq,desc,regs) \ | 53 | #define do_bad_IRQ(irq,desc) \ |
55 | do { \ | 54 | do { \ |
56 | spin_lock(&desc->lock); \ | 55 | spin_lock(&desc->lock); \ |
57 | handle_bad_irq(irq, desc, regs); \ | 56 | handle_bad_irq(irq, desc); \ |
58 | spin_unlock(&desc->lock); \ | 57 | spin_unlock(&desc->lock); \ |
59 | } while(0) | 58 | } while(0) |
60 | 59 | ||
diff --git a/include/asm-arm/mach/time.h b/include/asm-arm/mach/time.h index 1eb93f5c0d6c..5dc357013b79 100644 --- a/include/asm-arm/mach/time.h +++ b/include/asm-arm/mach/time.h | |||
@@ -57,7 +57,7 @@ struct dyn_tick_timer { | |||
57 | int (*enable)(void); /* Enables dynamic tick */ | 57 | int (*enable)(void); /* Enables dynamic tick */ |
58 | int (*disable)(void); /* Disables dynamic tick */ | 58 | int (*disable)(void); /* Disables dynamic tick */ |
59 | void (*reprogram)(unsigned long); /* Reprograms the timer */ | 59 | void (*reprogram)(unsigned long); /* Reprograms the timer */ |
60 | int (*handler)(int, void *, struct pt_regs *); | 60 | int (*handler)(int, void *); |
61 | }; | 61 | }; |
62 | 62 | ||
63 | void timer_dyn_reprogram(void); | 63 | void timer_dyn_reprogram(void); |
@@ -66,7 +66,7 @@ void timer_dyn_reprogram(void); | |||
66 | #endif | 66 | #endif |
67 | 67 | ||
68 | extern struct sys_timer *system_timer; | 68 | extern struct sys_timer *system_timer; |
69 | extern void timer_tick(struct pt_regs *); | 69 | extern void timer_tick(void); |
70 | 70 | ||
71 | /* | 71 | /* |
72 | * Kernel time keeping support. | 72 | * Kernel time keeping support. |
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h index a5250895155e..1d9573cf4a0b 100644 --- a/include/asm-generic/bug.h +++ b/include/asm-generic/bug.h | |||
@@ -41,14 +41,14 @@ | |||
41 | #endif | 41 | #endif |
42 | #endif | 42 | #endif |
43 | 43 | ||
44 | #define WARN_ON_ONCE(condition) ({ \ | 44 | #define WARN_ON_ONCE(condition) ({ \ |
45 | static int __warn_once = 1; \ | 45 | static int __warned; \ |
46 | typeof(condition) __ret_warn_once = (condition);\ | 46 | typeof(condition) __ret_warn_once = (condition); \ |
47 | \ | 47 | \ |
48 | if (likely(__warn_once)) \ | 48 | if (unlikely(__ret_warn_once)) \ |
49 | if (WARN_ON(__ret_warn_once)) \ | 49 | if (WARN_ON(!__warned)) \ |
50 | __warn_once = 0; \ | 50 | __warned = 1; \ |
51 | unlikely(__ret_warn_once); \ | 51 | unlikely(__ret_warn_once); \ |
52 | }) | 52 | }) |
53 | 53 | ||
54 | #ifdef CONFIG_SMP | 54 | #ifdef CONFIG_SMP |
diff --git a/include/asm-generic/percpu.h b/include/asm-generic/percpu.h index 6d45ee5472af..196376262240 100644 --- a/include/asm-generic/percpu.h +++ b/include/asm-generic/percpu.h | |||
@@ -15,7 +15,7 @@ extern unsigned long __per_cpu_offset[NR_CPUS]; | |||
15 | 15 | ||
16 | /* var is in discarded region: offset to particular copy we want */ | 16 | /* var is in discarded region: offset to particular copy we want */ |
17 | #define per_cpu(var, cpu) (*({ \ | 17 | #define per_cpu(var, cpu) (*({ \ |
18 | extern int simple_indentifier_##var(void); \ | 18 | extern int simple_identifier_##var(void); \ |
19 | RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]); })) | 19 | RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]); })) |
20 | #define __get_cpu_var(var) per_cpu(var, smp_processor_id()) | 20 | #define __get_cpu_var(var) per_cpu(var, smp_processor_id()) |
21 | #define __raw_get_cpu_var(var) per_cpu(var, raw_smp_processor_id()) | 21 | #define __raw_get_cpu_var(var) per_cpu(var, raw_smp_processor_id()) |
diff --git a/include/asm-i386/hw_irq.h b/include/asm-i386/hw_irq.h index 8806c7e002a7..0bedbdf5e907 100644 --- a/include/asm-i386/hw_irq.h +++ b/include/asm-i386/hw_irq.h | |||
@@ -26,9 +26,6 @@ | |||
26 | * Interrupt entry/exit code at both C and assembly level | 26 | * Interrupt entry/exit code at both C and assembly level |
27 | */ | 27 | */ |
28 | 28 | ||
29 | extern u8 irq_vector[NR_IRQ_VECTORS]; | ||
30 | #define IO_APIC_VECTOR(irq) (irq_vector[irq]) | ||
31 | |||
32 | extern void (*interrupt[NR_IRQS])(void); | 29 | extern void (*interrupt[NR_IRQS])(void); |
33 | 30 | ||
34 | #ifdef CONFIG_SMP | 31 | #ifdef CONFIG_SMP |
diff --git a/include/asm-i386/smp.h b/include/asm-i386/smp.h index 6aa1206f6e2a..bd59c1508e71 100644 --- a/include/asm-i386/smp.h +++ b/include/asm-i386/smp.h | |||
@@ -46,8 +46,6 @@ extern u8 x86_cpu_to_apicid[]; | |||
46 | 46 | ||
47 | #define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] | 47 | #define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] |
48 | 48 | ||
49 | extern u8 apicid_2_node[]; | ||
50 | |||
51 | #ifdef CONFIG_HOTPLUG_CPU | 49 | #ifdef CONFIG_HOTPLUG_CPU |
52 | extern void cpu_exit_clear(void); | 50 | extern void cpu_exit_clear(void); |
53 | extern void cpu_uninit(void); | 51 | extern void cpu_uninit(void); |
@@ -101,6 +99,9 @@ extern unsigned int num_processors; | |||
101 | #endif | 99 | #endif |
102 | 100 | ||
103 | #ifndef __ASSEMBLY__ | 101 | #ifndef __ASSEMBLY__ |
102 | |||
103 | extern u8 apicid_2_node[]; | ||
104 | |||
104 | #ifdef CONFIG_X86_LOCAL_APIC | 105 | #ifdef CONFIG_X86_LOCAL_APIC |
105 | static __inline int logical_smp_processor_id(void) | 106 | static __inline int logical_smp_processor_id(void) |
106 | { | 107 | { |
diff --git a/include/asm-ia64/sn/pcibr_provider.h b/include/asm-ia64/sn/pcibr_provider.h index e3b0c3fe5eed..da3eade0cae2 100644 --- a/include/asm-ia64/sn/pcibr_provider.h +++ b/include/asm-ia64/sn/pcibr_provider.h | |||
@@ -135,7 +135,7 @@ extern void pcireg_intr_addr_addr_set(struct pcibus_info *, int, u64 | |||
135 | extern void pcireg_force_intr_set(struct pcibus_info *, int); | 135 | extern void pcireg_force_intr_set(struct pcibus_info *, int); |
136 | extern u64 pcireg_wrb_flush_get(struct pcibus_info *, int); | 136 | extern u64 pcireg_wrb_flush_get(struct pcibus_info *, int); |
137 | extern void pcireg_int_ate_set(struct pcibus_info *, int, u64); | 137 | extern void pcireg_int_ate_set(struct pcibus_info *, int, u64); |
138 | extern u64 * pcireg_int_ate_addr(struct pcibus_info *, int); | 138 | extern u64 __iomem * pcireg_int_ate_addr(struct pcibus_info *, int); |
139 | extern void pcibr_force_interrupt(struct sn_irq_info *sn_irq_info); | 139 | extern void pcibr_force_interrupt(struct sn_irq_info *sn_irq_info); |
140 | extern void pcibr_change_devices_irq(struct sn_irq_info *sn_irq_info); | 140 | extern void pcibr_change_devices_irq(struct sn_irq_info *sn_irq_info); |
141 | extern int pcibr_ate_alloc(struct pcibus_info *, int); | 141 | extern int pcibr_ate_alloc(struct pcibus_info *, int); |
diff --git a/include/asm-ia64/sn/tioca_provider.h b/include/asm-ia64/sn/tioca_provider.h index 65cdd73c2a57..9a820ac61be3 100644 --- a/include/asm-ia64/sn/tioca_provider.h +++ b/include/asm-ia64/sn/tioca_provider.h | |||
@@ -162,11 +162,11 @@ static inline void | |||
162 | tioca_tlbflush(struct tioca_kernel *tioca_kernel) | 162 | tioca_tlbflush(struct tioca_kernel *tioca_kernel) |
163 | { | 163 | { |
164 | volatile u64 tmp; | 164 | volatile u64 tmp; |
165 | volatile struct tioca *ca_base; | 165 | volatile struct tioca __iomem *ca_base; |
166 | struct tioca_common *tioca_common; | 166 | struct tioca_common *tioca_common; |
167 | 167 | ||
168 | tioca_common = tioca_kernel->ca_common; | 168 | tioca_common = tioca_kernel->ca_common; |
169 | ca_base = (struct tioca *)tioca_common->ca_common.bs_base; | 169 | ca_base = (struct tioca __iomem *)tioca_common->ca_common.bs_base; |
170 | 170 | ||
171 | /* | 171 | /* |
172 | * Explicit flushes not needed if GART is in cached mode | 172 | * Explicit flushes not needed if GART is in cached mode |
diff --git a/include/asm-ia64/sn/tioce_provider.h b/include/asm-ia64/sn/tioce_provider.h index 6d62b13f7ae7..32c32f30b099 100644 --- a/include/asm-ia64/sn/tioce_provider.h +++ b/include/asm-ia64/sn/tioce_provider.h | |||
@@ -53,7 +53,7 @@ struct tioce_dmamap { | |||
53 | u64 ct_start; /* coretalk start address */ | 53 | u64 ct_start; /* coretalk start address */ |
54 | u64 pci_start; /* bus start address */ | 54 | u64 pci_start; /* bus start address */ |
55 | 55 | ||
56 | u64 *ate_hw; /* hw ptr of first ate in map */ | 56 | u64 __iomem *ate_hw;/* hw ptr of first ate in map */ |
57 | u64 *ate_shadow; /* shadow ptr of firat ate */ | 57 | u64 *ate_shadow; /* shadow ptr of firat ate */ |
58 | u16 ate_count; /* # ate's in the map */ | 58 | u16 ate_count; /* # ate's in the map */ |
59 | }; | 59 | }; |
diff --git a/include/asm-ia64/sn/xpc.h b/include/asm-ia64/sn/xpc.h index 35e1386f37ab..1d45e1518fb3 100644 --- a/include/asm-ia64/sn/xpc.h +++ b/include/asm-ia64/sn/xpc.h | |||
@@ -669,7 +669,7 @@ extern struct device *xpc_part; | |||
669 | extern struct device *xpc_chan; | 669 | extern struct device *xpc_chan; |
670 | extern int xpc_disengage_request_timelimit; | 670 | extern int xpc_disengage_request_timelimit; |
671 | extern int xpc_disengage_request_timedout; | 671 | extern int xpc_disengage_request_timedout; |
672 | extern irqreturn_t xpc_notify_IRQ_handler(int, void *, struct pt_regs *); | 672 | extern irqreturn_t xpc_notify_IRQ_handler(int, void *); |
673 | extern void xpc_dropped_IPI_check(struct xpc_partition *); | 673 | extern void xpc_dropped_IPI_check(struct xpc_partition *); |
674 | extern void xpc_activate_partition(struct xpc_partition *); | 674 | extern void xpc_activate_partition(struct xpc_partition *); |
675 | extern void xpc_activate_kthreads(struct xpc_channel *, int); | 675 | extern void xpc_activate_kthreads(struct xpc_channel *, int); |
diff --git a/include/asm-m32r/irq_regs.h b/include/asm-m32r/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-m32r/irq_regs.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-m68k/atari_stdma.h b/include/asm-m68k/atari_stdma.h index b4eadf852738..8e389b7fa70c 100644 --- a/include/asm-m68k/atari_stdma.h +++ b/include/asm-m68k/atari_stdma.h | |||
@@ -8,8 +8,7 @@ | |||
8 | 8 | ||
9 | /***************************** Prototypes *****************************/ | 9 | /***************************** Prototypes *****************************/ |
10 | 10 | ||
11 | void stdma_lock(irqreturn_t (*handler)(int, void *, struct pt_regs *), | 11 | void stdma_lock(irq_handler_t handler, void *data); |
12 | void *data); | ||
13 | void stdma_release( void ); | 12 | void stdma_release( void ); |
14 | int stdma_others_waiting( void ); | 13 | int stdma_others_waiting( void ); |
15 | int stdma_islocked( void ); | 14 | int stdma_islocked( void ); |
diff --git a/include/asm-m68k/dma-mapping.h b/include/asm-m68k/dma-mapping.h index cebbb03370ec..d90d841d3dfd 100644 --- a/include/asm-m68k/dma-mapping.h +++ b/include/asm-m68k/dma-mapping.h | |||
@@ -5,6 +5,7 @@ | |||
5 | 5 | ||
6 | struct scatterlist; | 6 | struct scatterlist; |
7 | 7 | ||
8 | #ifndef CONFIG_MMU_SUN3 | ||
8 | static inline int dma_supported(struct device *dev, u64 mask) | 9 | static inline int dma_supported(struct device *dev, u64 mask) |
9 | { | 10 | { |
10 | return 1; | 11 | return 1; |
@@ -26,7 +27,7 @@ static inline int dma_is_consistent(dma_addr_t dma_addr) | |||
26 | } | 27 | } |
27 | 28 | ||
28 | extern void *dma_alloc_coherent(struct device *, size_t, | 29 | extern void *dma_alloc_coherent(struct device *, size_t, |
29 | dma_addr_t *, int); | 30 | dma_addr_t *, gfp_t); |
30 | extern void dma_free_coherent(struct device *, size_t, | 31 | extern void dma_free_coherent(struct device *, size_t, |
31 | void *, dma_addr_t); | 32 | void *, dma_addr_t); |
32 | 33 | ||
@@ -88,4 +89,8 @@ static inline int dma_mapping_error(dma_addr_t handle) | |||
88 | return 0; | 89 | return 0; |
89 | } | 90 | } |
90 | 91 | ||
92 | #else | ||
93 | #include <asm-generic/dma-mapping-broken.h> | ||
94 | #endif | ||
95 | |||
91 | #endif /* _M68K_DMA_MAPPING_H */ | 96 | #endif /* _M68K_DMA_MAPPING_H */ |
diff --git a/include/asm-m68k/floppy.h b/include/asm-m68k/floppy.h index 57f4fdda65ab..45dc908932a3 100644 --- a/include/asm-m68k/floppy.h +++ b/include/asm-m68k/floppy.h | |||
@@ -17,8 +17,7 @@ | |||
17 | 17 | ||
18 | #include <linux/vmalloc.h> | 18 | #include <linux/vmalloc.h> |
19 | 19 | ||
20 | asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id, | 20 | asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id); |
21 | struct pt_regs *regs); | ||
22 | 21 | ||
23 | /* constants... */ | 22 | /* constants... */ |
24 | 23 | ||
@@ -184,8 +183,7 @@ static void fd_disable_dma(void) | |||
184 | 183 | ||
185 | /* this is the only truly Q40 specific function */ | 184 | /* this is the only truly Q40 specific function */ |
186 | 185 | ||
187 | asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id, | 186 | asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id) |
188 | struct pt_regs *regs) | ||
189 | { | 187 | { |
190 | register unsigned char st; | 188 | register unsigned char st; |
191 | 189 | ||
@@ -198,7 +196,7 @@ asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id, | |||
198 | static int dma_wait=0; | 196 | static int dma_wait=0; |
199 | #endif | 197 | #endif |
200 | if(!doing_pdma) { | 198 | if(!doing_pdma) { |
201 | floppy_interrupt(irq, dev_id, regs); | 199 | floppy_interrupt(irq, dev_id); |
202 | return IRQ_HANDLED; | 200 | return IRQ_HANDLED; |
203 | } | 201 | } |
204 | 202 | ||
@@ -246,7 +244,7 @@ asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id, | |||
246 | dma_wait=0; | 244 | dma_wait=0; |
247 | #endif | 245 | #endif |
248 | doing_pdma = 0; | 246 | doing_pdma = 0; |
249 | floppy_interrupt(irq, dev_id, regs); | 247 | floppy_interrupt(irq, dev_id); |
250 | return IRQ_HANDLED; | 248 | return IRQ_HANDLED; |
251 | } | 249 | } |
252 | #ifdef TRACE_FLPY_INT | 250 | #ifdef TRACE_FLPY_INT |
diff --git a/include/asm-m68k/ide.h b/include/asm-m68k/ide.h index 365f76fb8013..f9ffb2cbbae8 100644 --- a/include/asm-m68k/ide.h +++ b/include/asm-m68k/ide.h | |||
@@ -123,7 +123,7 @@ static __inline__ void ide_release_lock (void) | |||
123 | } | 123 | } |
124 | 124 | ||
125 | static __inline__ void | 125 | static __inline__ void |
126 | ide_get_lock(irqreturn_t (*handler)(int, void *, struct pt_regs *), void *data) | 126 | ide_get_lock(irq_handler_t handler, void *data) |
127 | { | 127 | { |
128 | if (MACH_IS_ATARI) { | 128 | if (MACH_IS_ATARI) { |
129 | if (falconide_intr_lock == 0) { | 129 | if (falconide_intr_lock == 0) { |
diff --git a/include/asm-m68k/irq.h b/include/asm-m68k/irq.h index 3257f9881002..4901cb105e2f 100644 --- a/include/asm-m68k/irq.h +++ b/include/asm-m68k/irq.h | |||
@@ -83,7 +83,7 @@ struct pt_regs; | |||
83 | * interrupt source (if it supports chaining). | 83 | * interrupt source (if it supports chaining). |
84 | */ | 84 | */ |
85 | typedef struct irq_node { | 85 | typedef struct irq_node { |
86 | int (*handler)(int, void *, struct pt_regs *); | 86 | int (*handler)(int, void *); |
87 | void *dev_id; | 87 | void *dev_id; |
88 | struct irq_node *next; | 88 | struct irq_node *next; |
89 | unsigned long flags; | 89 | unsigned long flags; |
@@ -93,12 +93,12 @@ typedef struct irq_node { | |||
93 | /* | 93 | /* |
94 | * This structure has only 4 elements for speed reasons | 94 | * This structure has only 4 elements for speed reasons |
95 | */ | 95 | */ |
96 | typedef struct irq_handler { | 96 | struct irq_handler { |
97 | int (*handler)(int, void *, struct pt_regs *); | 97 | int (*handler)(int, void *); |
98 | unsigned long flags; | 98 | unsigned long flags; |
99 | void *dev_id; | 99 | void *dev_id; |
100 | const char *devname; | 100 | const char *devname; |
101 | } irq_handler_t; | 101 | }; |
102 | 102 | ||
103 | struct irq_controller { | 103 | struct irq_controller { |
104 | const char *name; | 104 | const char *name; |
@@ -122,6 +122,7 @@ extern void m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, | |||
122 | void (*handler)(unsigned int, struct pt_regs *)); | 122 | void (*handler)(unsigned int, struct pt_regs *)); |
123 | extern void m68k_setup_irq_controller(struct irq_controller *, unsigned int, unsigned int); | 123 | extern void m68k_setup_irq_controller(struct irq_controller *, unsigned int, unsigned int); |
124 | 124 | ||
125 | asmlinkage void m68k_handle_int(unsigned int, struct pt_regs *); | 125 | asmlinkage void m68k_handle_int(unsigned int); |
126 | asmlinkage void __m68k_handle_int(unsigned int, struct pt_regs *); | ||
126 | 127 | ||
127 | #endif /* _M68K_IRQ_H_ */ | 128 | #endif /* _M68K_IRQ_H_ */ |
diff --git a/include/asm-m68k/irq_regs.h b/include/asm-m68k/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-m68k/irq_regs.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-m68k/mac_iop.h b/include/asm-m68k/mac_iop.h index b0d2e3473537..a2c7e6fcca38 100644 --- a/include/asm-m68k/mac_iop.h +++ b/include/asm-m68k/mac_iop.h | |||
@@ -143,17 +143,17 @@ struct iop_msg { | |||
143 | int status; /* status of this message */ | 143 | int status; /* status of this message */ |
144 | __u8 message[IOP_MSG_LEN]; /* the message being sent/received */ | 144 | __u8 message[IOP_MSG_LEN]; /* the message being sent/received */ |
145 | __u8 reply[IOP_MSG_LEN]; /* the reply to the message */ | 145 | __u8 reply[IOP_MSG_LEN]; /* the reply to the message */ |
146 | void (*handler)(struct iop_msg *, struct pt_regs *); | 146 | void (*handler)(struct iop_msg *); |
147 | /* function to call when reply recvd */ | 147 | /* function to call when reply recvd */ |
148 | }; | 148 | }; |
149 | 149 | ||
150 | extern int iop_scc_present,iop_ism_present; | 150 | extern int iop_scc_present,iop_ism_present; |
151 | 151 | ||
152 | extern int iop_listen(uint, uint, | 152 | extern int iop_listen(uint, uint, |
153 | void (*handler)(struct iop_msg *, struct pt_regs *), | 153 | void (*handler)(struct iop_msg *), |
154 | const char *); | 154 | const char *); |
155 | extern int iop_send_message(uint, uint, void *, uint, __u8 *, | 155 | extern int iop_send_message(uint, uint, void *, uint, __u8 *, |
156 | void (*)(struct iop_msg *, struct pt_regs *)); | 156 | void (*)(struct iop_msg *)); |
157 | extern void iop_complete_message(struct iop_msg *); | 157 | extern void iop_complete_message(struct iop_msg *); |
158 | extern void iop_upload_code(uint, __u8 *, uint, __u16); | 158 | extern void iop_upload_code(uint, __u8 *, uint, __u16); |
159 | extern void iop_download_code(uint, __u8 *, uint, __u16); | 159 | extern void iop_download_code(uint, __u8 *, uint, __u16); |
diff --git a/include/asm-m68k/machdep.h b/include/asm-m68k/machdep.h index df898f27e434..26d2b91209c5 100644 --- a/include/asm-m68k/machdep.h +++ b/include/asm-m68k/machdep.h | |||
@@ -10,7 +10,7 @@ struct rtc_time; | |||
10 | struct rtc_pll_info; | 10 | struct rtc_pll_info; |
11 | struct buffer_head; | 11 | struct buffer_head; |
12 | 12 | ||
13 | extern void (*mach_sched_init) (irqreturn_t (*handler)(int, void *, struct pt_regs *)); | 13 | extern void (*mach_sched_init) (irq_handler_t handler); |
14 | /* machine dependent irq functions */ | 14 | /* machine dependent irq functions */ |
15 | extern void (*mach_init_IRQ) (void); | 15 | extern void (*mach_init_IRQ) (void); |
16 | extern void (*mach_get_model) (char *model); | 16 | extern void (*mach_get_model) (char *model); |
diff --git a/include/asm-m68k/signal.h b/include/asm-m68k/signal.h index de1ba6ead3b4..3db8a81942f1 100644 --- a/include/asm-m68k/signal.h +++ b/include/asm-m68k/signal.h | |||
@@ -198,6 +198,7 @@ static inline int sigfindinword(unsigned long word) | |||
198 | return word ^ 31; | 198 | return word ^ 31; |
199 | } | 199 | } |
200 | 200 | ||
201 | struct pt_regs; | ||
201 | extern void ptrace_signal_deliver(struct pt_regs *regs, void *cookie); | 202 | extern void ptrace_signal_deliver(struct pt_regs *regs, void *cookie); |
202 | 203 | ||
203 | #endif /* __KERNEL__ */ | 204 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-m68k/string.h b/include/asm-m68k/string.h index 6c59215b285e..2eb7df1e0f5d 100644 --- a/include/asm-m68k/string.h +++ b/include/asm-m68k/string.h | |||
@@ -1,138 +1,114 @@ | |||
1 | #ifndef _M68K_STRING_H_ | 1 | #ifndef _M68K_STRING_H_ |
2 | #define _M68K_STRING_H_ | 2 | #define _M68K_STRING_H_ |
3 | 3 | ||
4 | #include <asm/setup.h> | 4 | #include <linux/types.h> |
5 | #include <asm/page.h> | 5 | #include <linux/compiler.h> |
6 | 6 | ||
7 | #define __HAVE_ARCH_STRCPY | 7 | static inline size_t __kernel_strlen(const char *s) |
8 | static inline char * strcpy(char * dest,const char *src) | ||
9 | { | 8 | { |
10 | char *xdest = dest; | 9 | const char *sc; |
11 | |||
12 | __asm__ __volatile__ | ||
13 | ("1:\tmoveb %1@+,%0@+\n\t" | ||
14 | "jne 1b" | ||
15 | : "=a" (dest), "=a" (src) | ||
16 | : "0" (dest), "1" (src) : "memory"); | ||
17 | return xdest; | ||
18 | } | ||
19 | 10 | ||
20 | #define __HAVE_ARCH_STRNCPY | 11 | for (sc = s; *sc++; ) |
21 | static inline char * strncpy(char *dest, const char *src, size_t n) | 12 | ; |
22 | { | 13 | return sc - s - 1; |
23 | char *xdest = dest; | ||
24 | |||
25 | if (n == 0) | ||
26 | return xdest; | ||
27 | |||
28 | __asm__ __volatile__ | ||
29 | ("1:\tmoveb %1@+,%0@+\n\t" | ||
30 | "jeq 2f\n\t" | ||
31 | "subql #1,%2\n\t" | ||
32 | "jne 1b\n\t" | ||
33 | "2:" | ||
34 | : "=a" (dest), "=a" (src), "=d" (n) | ||
35 | : "0" (dest), "1" (src), "2" (n) | ||
36 | : "memory"); | ||
37 | return xdest; | ||
38 | } | 14 | } |
39 | 15 | ||
40 | #define __HAVE_ARCH_STRCAT | 16 | static inline char *__kernel_strcpy(char *dest, const char *src) |
41 | static inline char * strcat(char * dest, const char * src) | ||
42 | { | 17 | { |
43 | char *tmp = dest; | 18 | char *xdest = dest; |
44 | 19 | ||
45 | while (*dest) | 20 | asm volatile ("\n" |
46 | dest++; | 21 | "1: move.b (%1)+,(%0)+\n" |
47 | while ((*dest++ = *src++)) | 22 | " jne 1b" |
48 | ; | 23 | : "+a" (dest), "+a" (src) |
49 | 24 | : : "memory"); | |
50 | return tmp; | 25 | return xdest; |
51 | } | 26 | } |
52 | 27 | ||
53 | #define __HAVE_ARCH_STRNCAT | 28 | #ifndef __IN_STRING_C |
54 | static inline char * strncat(char *dest, const char *src, size_t count) | ||
55 | { | ||
56 | char *tmp = dest; | ||
57 | |||
58 | if (count) { | ||
59 | while (*dest) | ||
60 | dest++; | ||
61 | while ((*dest++ = *src++)) { | ||
62 | if (--count == 0) { | ||
63 | *dest++='\0'; | ||
64 | break; | ||
65 | } | ||
66 | } | ||
67 | } | ||
68 | 29 | ||
69 | return tmp; | 30 | #define __HAVE_ARCH_STRLEN |
70 | } | 31 | #define strlen(s) (__builtin_constant_p(s) ? \ |
32 | __builtin_strlen(s) : \ | ||
33 | __kernel_strlen(s)) | ||
71 | 34 | ||
72 | #define __HAVE_ARCH_STRCHR | 35 | #define __HAVE_ARCH_STRNLEN |
73 | static inline char * strchr(const char * s, int c) | 36 | static inline size_t strnlen(const char *s, size_t count) |
74 | { | 37 | { |
75 | const char ch = c; | 38 | const char *sc = s; |
76 | 39 | ||
77 | for(; *s != ch; ++s) | 40 | asm volatile ("\n" |
78 | if (*s == '\0') | 41 | "1: subq.l #1,%1\n" |
79 | return( NULL ); | 42 | " jcs 2f\n" |
80 | return( (char *) s); | 43 | " tst.b (%0)+\n" |
44 | " jne 1b\n" | ||
45 | " subq.l #1,%0\n" | ||
46 | "2:" | ||
47 | : "+a" (sc), "+d" (count)); | ||
48 | return sc - s; | ||
81 | } | 49 | } |
82 | 50 | ||
83 | /* strstr !! */ | 51 | #define __HAVE_ARCH_STRCPY |
52 | #if __GNUC__ >= 4 | ||
53 | #define strcpy(d, s) (__builtin_constant_p(s) && \ | ||
54 | __builtin_strlen(s) <= 32 ? \ | ||
55 | __builtin_strcpy(d, s) : \ | ||
56 | __kernel_strcpy(d, s)) | ||
57 | #else | ||
58 | #define strcpy(d, s) __kernel_strcpy(d, s) | ||
59 | #endif | ||
84 | 60 | ||
85 | #define __HAVE_ARCH_STRLEN | 61 | #define __HAVE_ARCH_STRNCPY |
86 | static inline size_t strlen(const char * s) | 62 | static inline char *strncpy(char *dest, const char *src, size_t n) |
87 | { | 63 | { |
88 | const char *sc; | 64 | char *xdest = dest; |
89 | for (sc = s; *sc != '\0'; ++sc) ; | 65 | |
90 | return(sc - s); | 66 | asm volatile ("\n" |
67 | " jra 2f\n" | ||
68 | "1: move.b (%1),(%0)+\n" | ||
69 | " jeq 2f\n" | ||
70 | " addq.l #1,%1\n" | ||
71 | "2: subq.l #1,%2\n" | ||
72 | " jcc 1b\n" | ||
73 | : "+a" (dest), "+a" (src), "+d" (n) | ||
74 | : : "memory"); | ||
75 | return xdest; | ||
91 | } | 76 | } |
92 | 77 | ||
93 | /* strnlen !! */ | 78 | #define __HAVE_ARCH_STRCAT |
79 | #define strcat(d, s) ({ \ | ||
80 | char *__d = (d); \ | ||
81 | strcpy(__d + strlen(__d), (s)); \ | ||
82 | }) | ||
94 | 83 | ||
95 | #define __HAVE_ARCH_STRCMP | 84 | #define __HAVE_ARCH_STRCHR |
96 | static inline int strcmp(const char * cs,const char * ct) | 85 | static inline char *strchr(const char *s, int c) |
97 | { | 86 | { |
98 | char __res; | 87 | char sc, ch = c; |
99 | 88 | ||
100 | __asm__ | 89 | for (; (sc = *s++) != ch; ) { |
101 | ("1:\tmoveb %0@+,%2\n\t" /* get *cs */ | 90 | if (!sc) |
102 | "cmpb %1@+,%2\n\t" /* compare a byte */ | 91 | return NULL; |
103 | "jne 2f\n\t" /* not equal, break out */ | 92 | } |
104 | "tstb %2\n\t" /* at end of cs? */ | 93 | return (char *)s - 1; |
105 | "jne 1b\n\t" /* no, keep going */ | ||
106 | "jra 3f\n\t" /* strings are equal */ | ||
107 | "2:\tsubb %1@-,%2\n\t" /* *cs - *ct */ | ||
108 | "3:" | ||
109 | : "=a" (cs), "=a" (ct), "=d" (__res) | ||
110 | : "0" (cs), "1" (ct)); | ||
111 | return __res; | ||
112 | } | 94 | } |
113 | 95 | ||
114 | #define __HAVE_ARCH_STRNCMP | 96 | #define __HAVE_ARCH_STRCMP |
115 | static inline int strncmp(const char * cs,const char * ct,size_t count) | 97 | static inline int strcmp(const char *cs, const char *ct) |
116 | { | 98 | { |
117 | char __res; | 99 | char res; |
118 | 100 | ||
119 | if (!count) | 101 | asm ("\n" |
120 | return 0; | 102 | "1: move.b (%0)+,%2\n" /* get *cs */ |
121 | __asm__ | 103 | " cmp.b (%1)+,%2\n" /* compare a byte */ |
122 | ("1:\tmovb %0@+,%3\n\t" /* get *cs */ | 104 | " jne 2f\n" /* not equal, break out */ |
123 | "cmpb %1@+,%3\n\t" /* compare a byte */ | 105 | " tst.b %2\n" /* at end of cs? */ |
124 | "jne 3f\n\t" /* not equal, break out */ | 106 | " jne 1b\n" /* no, keep going */ |
125 | "tstb %3\n\t" /* at end of cs? */ | 107 | " jra 3f\n" /* strings are equal */ |
126 | "jeq 4f\n\t" /* yes, all done */ | 108 | "2: sub.b -(%1),%2\n" /* *cs - *ct */ |
127 | "subql #1,%2\n\t" /* no, adjust count */ | 109 | "3:" |
128 | "jne 1b\n\t" /* more to do, keep going */ | 110 | : "+a" (cs), "+a" (ct), "=d" (res)); |
129 | "2:\tmoveq #0,%3\n\t" /* strings are equal */ | 111 | return res; |
130 | "jra 4f\n\t" | ||
131 | "3:\tsubb %1@-,%3\n\t" /* *cs - *ct */ | ||
132 | "4:" | ||
133 | : "=a" (cs), "=a" (ct), "=d" (count), "=d" (__res) | ||
134 | : "0" (cs), "1" (ct), "2" (count)); | ||
135 | return __res; | ||
136 | } | 112 | } |
137 | 113 | ||
138 | #define __HAVE_ARCH_MEMSET | 114 | #define __HAVE_ARCH_MEMSET |
@@ -150,4 +126,6 @@ extern void *memmove(void *, const void *, __kernel_size_t); | |||
150 | extern int memcmp(const void *, const void *, __kernel_size_t); | 126 | extern int memcmp(const void *, const void *, __kernel_size_t); |
151 | #define memcmp(d, s, n) __builtin_memcmp(d, s, n) | 127 | #define memcmp(d, s, n) __builtin_memcmp(d, s, n) |
152 | 128 | ||
129 | #endif | ||
130 | |||
153 | #endif /* _M68K_STRING_H_ */ | 131 | #endif /* _M68K_STRING_H_ */ |
diff --git a/include/asm-m68k/sun3xflop.h b/include/asm-m68k/sun3xflop.h index ca8cc4113843..32c45f84ac60 100644 --- a/include/asm-m68k/sun3xflop.h +++ b/include/asm-m68k/sun3xflop.h | |||
@@ -111,8 +111,7 @@ static void sun3x_82072_fd_outb(unsigned char value, int port) | |||
111 | } | 111 | } |
112 | 112 | ||
113 | 113 | ||
114 | asmlinkage irqreturn_t sun3xflop_hardint(int irq, void *dev_id, | 114 | asmlinkage irqreturn_t sun3xflop_hardint(int irq, void *dev_id) |
115 | struct pt_regs * regs) | ||
116 | { | 115 | { |
117 | register unsigned char st; | 116 | register unsigned char st; |
118 | 117 | ||
@@ -125,7 +124,7 @@ asmlinkage irqreturn_t sun3xflop_hardint(int irq, void *dev_id, | |||
125 | static int dma_wait=0; | 124 | static int dma_wait=0; |
126 | #endif | 125 | #endif |
127 | if(!doing_pdma) { | 126 | if(!doing_pdma) { |
128 | floppy_interrupt(irq, dev_id, regs); | 127 | floppy_interrupt(irq, dev_id); |
129 | return IRQ_HANDLED; | 128 | return IRQ_HANDLED; |
130 | } | 129 | } |
131 | 130 | ||
@@ -189,7 +188,7 @@ asmlinkage irqreturn_t sun3xflop_hardint(int irq, void *dev_id, | |||
189 | dma_wait=0; | 188 | dma_wait=0; |
190 | #endif | 189 | #endif |
191 | 190 | ||
192 | floppy_interrupt(irq, dev_id, regs); | 191 | floppy_interrupt(irq, dev_id); |
193 | return IRQ_HANDLED; | 192 | return IRQ_HANDLED; |
194 | } | 193 | } |
195 | 194 | ||
diff --git a/include/asm-m68k/system.h b/include/asm-m68k/system.h index 131a0cb0f491..243dd13e6bfc 100644 --- a/include/asm-m68k/system.h +++ b/include/asm-m68k/system.h | |||
@@ -78,13 +78,13 @@ static inline int irqs_disabled(void) | |||
78 | #define mb() barrier() | 78 | #define mb() barrier() |
79 | #define rmb() barrier() | 79 | #define rmb() barrier() |
80 | #define wmb() barrier() | 80 | #define wmb() barrier() |
81 | #define read_barrier_depends() do { } while(0) | 81 | #define read_barrier_depends() ((void)0) |
82 | #define set_mb(var, value) do { xchg(&var, value); } while (0) | 82 | #define set_mb(var, value) ({ (var) = (value); wmb(); }) |
83 | 83 | ||
84 | #define smp_mb() barrier() | 84 | #define smp_mb() barrier() |
85 | #define smp_rmb() barrier() | 85 | #define smp_rmb() barrier() |
86 | #define smp_wmb() barrier() | 86 | #define smp_wmb() barrier() |
87 | #define smp_read_barrier_depends() do { } while(0) | 87 | #define smp_read_barrier_depends() ((void)0) |
88 | 88 | ||
89 | 89 | ||
90 | #define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) | 90 | #define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) |
diff --git a/include/asm-m68k/unistd.h b/include/asm-m68k/unistd.h index 3ab716f0fc18..ad4348058c66 100644 --- a/include/asm-m68k/unistd.h +++ b/include/asm-m68k/unistd.h | |||
@@ -284,10 +284,39 @@ | |||
284 | #define __NR_add_key 279 | 284 | #define __NR_add_key 279 |
285 | #define __NR_request_key 280 | 285 | #define __NR_request_key 280 |
286 | #define __NR_keyctl 281 | 286 | #define __NR_keyctl 281 |
287 | #define __NR_ioprio_set 282 | ||
288 | #define __NR_ioprio_get 283 | ||
289 | #define __NR_inotify_init 284 | ||
290 | #define __NR_inotify_add_watch 285 | ||
291 | #define __NR_inotify_rm_watch 286 | ||
292 | #define __NR_migrate_pages 287 | ||
293 | #define __NR_openat 288 | ||
294 | #define __NR_mkdirat 289 | ||
295 | #define __NR_mknodat 290 | ||
296 | #define __NR_fchownat 291 | ||
297 | #define __NR_futimesat 292 | ||
298 | #define __NR_fstatat64 293 | ||
299 | #define __NR_unlinkat 294 | ||
300 | #define __NR_renameat 295 | ||
301 | #define __NR_linkat 296 | ||
302 | #define __NR_symlinkat 297 | ||
303 | #define __NR_readlinkat 298 | ||
304 | #define __NR_fchmodat 299 | ||
305 | #define __NR_faccessat 300 | ||
306 | #define __NR_pselect6 301 | ||
307 | #define __NR_ppoll 302 | ||
308 | #define __NR_unshare 303 | ||
309 | #define __NR_set_robust_list 304 | ||
310 | #define __NR_get_robust_list 305 | ||
311 | #define __NR_splice 306 | ||
312 | #define __NR_sync_file_range 307 | ||
313 | #define __NR_tee 308 | ||
314 | #define __NR_vmsplice 309 | ||
315 | #define __NR_move_pages 310 | ||
287 | 316 | ||
288 | #ifdef __KERNEL__ | 317 | #ifdef __KERNEL__ |
289 | 318 | ||
290 | #define NR_syscalls 282 | 319 | #define NR_syscalls 311 |
291 | #include <linux/err.h> | 320 | #include <linux/err.h> |
292 | 321 | ||
293 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see | 322 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see |
diff --git a/include/asm-m68k/user.h b/include/asm-m68k/user.h index e8d5a64c7e79..d7c0b109bd45 100644 --- a/include/asm-m68k/user.h +++ b/include/asm-m68k/user.h | |||
@@ -81,7 +81,7 @@ struct user{ | |||
81 | unsigned long magic; /* To uniquely identify a core file */ | 81 | unsigned long magic; /* To uniquely identify a core file */ |
82 | char u_comm[32]; /* User command that was responsible */ | 82 | char u_comm[32]; /* User command that was responsible */ |
83 | }; | 83 | }; |
84 | #define NBPG PAGE_SIZE | 84 | #define NBPG 4096 |
85 | #define UPAGES 1 | 85 | #define UPAGES 1 |
86 | #define HOST_TEXT_START_ADDR (u.start_code) | 86 | #define HOST_TEXT_START_ADDR (u.start_code) |
87 | #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) | 87 | #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) |
diff --git a/include/asm-mips/dec/ecc.h b/include/asm-mips/dec/ecc.h index 19495a490e72..707ffdbc9add 100644 --- a/include/asm-mips/dec/ecc.h +++ b/include/asm-mips/dec/ecc.h | |||
@@ -49,8 +49,7 @@ struct pt_regs; | |||
49 | 49 | ||
50 | extern void dec_ecc_be_init(void); | 50 | extern void dec_ecc_be_init(void); |
51 | extern int dec_ecc_be_handler(struct pt_regs *regs, int is_fixup); | 51 | extern int dec_ecc_be_handler(struct pt_regs *regs, int is_fixup); |
52 | extern irqreturn_t dec_ecc_be_interrupt(int irq, void *dev_id, | 52 | extern irqreturn_t dec_ecc_be_interrupt(int irq, void *dev_id); |
53 | struct pt_regs *regs); | ||
54 | #endif | 53 | #endif |
55 | 54 | ||
56 | #endif /* __ASM_MIPS_DEC_ECC_H */ | 55 | #endif /* __ASM_MIPS_DEC_ECC_H */ |
diff --git a/include/asm-mips/dec/kn01.h b/include/asm-mips/dec/kn01.h index eb522aa1e226..28fa717ac423 100644 --- a/include/asm-mips/dec/kn01.h +++ b/include/asm-mips/dec/kn01.h | |||
@@ -84,8 +84,7 @@ extern spinlock_t kn01_lock; | |||
84 | 84 | ||
85 | extern void dec_kn01_be_init(void); | 85 | extern void dec_kn01_be_init(void); |
86 | extern int dec_kn01_be_handler(struct pt_regs *regs, int is_fixup); | 86 | extern int dec_kn01_be_handler(struct pt_regs *regs, int is_fixup); |
87 | extern irqreturn_t dec_kn01_be_interrupt(int irq, void *dev_id, | 87 | extern irqreturn_t dec_kn01_be_interrupt(int irq, void *dev_id); |
88 | struct pt_regs *regs); | ||
89 | #endif | 88 | #endif |
90 | 89 | ||
91 | #endif /* __ASM_MIPS_DEC_KN01_H */ | 90 | #endif /* __ASM_MIPS_DEC_KN01_H */ |
diff --git a/include/asm-mips/dec/kn02xa.h b/include/asm-mips/dec/kn02xa.h index a25f3d7da7f7..b56b4577f6ef 100644 --- a/include/asm-mips/dec/kn02xa.h +++ b/include/asm-mips/dec/kn02xa.h | |||
@@ -78,8 +78,7 @@ struct pt_regs; | |||
78 | 78 | ||
79 | extern void dec_kn02xa_be_init(void); | 79 | extern void dec_kn02xa_be_init(void); |
80 | extern int dec_kn02xa_be_handler(struct pt_regs *regs, int is_fixup); | 80 | extern int dec_kn02xa_be_handler(struct pt_regs *regs, int is_fixup); |
81 | extern irqreturn_t dec_kn02xa_be_interrupt(int irq, void *dev_id, | 81 | extern irqreturn_t dec_kn02xa_be_interrupt(int irq, void *dev_id); |
82 | struct pt_regs *regs); | ||
83 | #endif | 82 | #endif |
84 | 83 | ||
85 | #endif /* __ASM_MIPS_DEC_KN02XA_H */ | 84 | #endif /* __ASM_MIPS_DEC_KN02XA_H */ |
diff --git a/include/asm-mips/fpu.h b/include/asm-mips/fpu.h index 58c561a9ec6b..efef843b93f0 100644 --- a/include/asm-mips/fpu.h +++ b/include/asm-mips/fpu.h | |||
@@ -134,9 +134,11 @@ static inline void restore_fp(struct task_struct *tsk) | |||
134 | 134 | ||
135 | static inline fpureg_t *get_fpu_regs(struct task_struct *tsk) | 135 | static inline fpureg_t *get_fpu_regs(struct task_struct *tsk) |
136 | { | 136 | { |
137 | if (cpu_has_fpu) { | 137 | if (tsk == current) { |
138 | if ((tsk == current) && __is_fpu_owner()) | 138 | preempt_disable(); |
139 | if (is_fpu_owner()) | ||
139 | _save_fp(current); | 140 | _save_fp(current); |
141 | preempt_enable(); | ||
140 | } | 142 | } |
141 | 143 | ||
142 | return tsk->thread.fpu.fpr; | 144 | return tsk->thread.fpu.fpr; |
diff --git a/include/asm-mips/irq.h b/include/asm-mips/irq.h index d35c61776a02..1a9804c65369 100644 --- a/include/asm-mips/irq.h +++ b/include/asm-mips/irq.h | |||
@@ -26,7 +26,7 @@ static inline int irq_canonicalize(int irq) | |||
26 | 26 | ||
27 | struct pt_regs; | 27 | struct pt_regs; |
28 | 28 | ||
29 | extern asmlinkage unsigned int do_IRQ(unsigned int irq, struct pt_regs *regs); | 29 | extern asmlinkage unsigned int do_IRQ(unsigned int irq); |
30 | 30 | ||
31 | #ifdef CONFIG_MIPS_MT_SMTC | 31 | #ifdef CONFIG_MIPS_MT_SMTC |
32 | /* | 32 | /* |
@@ -55,18 +55,18 @@ do { \ | |||
55 | * Ideally there should be away to get this into kernel/irq/handle.c to | 55 | * Ideally there should be away to get this into kernel/irq/handle.c to |
56 | * avoid the overhead of a call for just a tiny function ... | 56 | * avoid the overhead of a call for just a tiny function ... |
57 | */ | 57 | */ |
58 | #define do_IRQ(irq, regs) \ | 58 | #define do_IRQ(irq) \ |
59 | do { \ | 59 | do { \ |
60 | irq_enter(); \ | 60 | irq_enter(); \ |
61 | __DO_IRQ_SMTC_HOOK(); \ | 61 | __DO_IRQ_SMTC_HOOK(); \ |
62 | __do_IRQ((irq), (regs)); \ | 62 | __do_IRQ((irq)); \ |
63 | irq_exit(); \ | 63 | irq_exit(); \ |
64 | } while (0) | 64 | } while (0) |
65 | 65 | ||
66 | #endif | 66 | #endif |
67 | 67 | ||
68 | extern void arch_init_irq(void); | 68 | extern void arch_init_irq(void); |
69 | extern void spurious_interrupt(struct pt_regs *regs); | 69 | extern void spurious_interrupt(void); |
70 | 70 | ||
71 | #ifdef CONFIG_MIPS_MT_SMTC | 71 | #ifdef CONFIG_MIPS_MT_SMTC |
72 | struct irqaction; | 72 | struct irqaction; |
diff --git a/include/asm-mips/irq_regs.h b/include/asm-mips/irq_regs.h index 3dd9c0b70270..33bd2a06de57 100644 --- a/include/asm-mips/irq_regs.h +++ b/include/asm-mips/irq_regs.h | |||
@@ -1 +1,21 @@ | |||
1 | #include <asm-generic/irq_regs.h> | 1 | /* |
2 | * This program is free software; you can redistribute it and/or | ||
3 | * modify it under the terms of the GNU General Public License | ||
4 | * as published by the Free Software Foundation; either version | ||
5 | * 2 of the License, or (at your option) any later version. | ||
6 | * | ||
7 | * Copyright (C) 2006 Ralf Baechle (ralf@linux-mips.org) | ||
8 | */ | ||
9 | #ifndef __ASM_IRQ_REGS_H | ||
10 | #define __ASM_IRQ_REGS_H | ||
11 | |||
12 | #define ARCH_HAS_OWN_IRQ_REGS | ||
13 | |||
14 | #include <linux/thread_info.h> | ||
15 | |||
16 | static inline struct pt_regs *get_irq_regs(void) | ||
17 | { | ||
18 | return current_thread_info()->regs; | ||
19 | } | ||
20 | |||
21 | #endif /* __ASM_IRQ_REGS_H */ | ||
diff --git a/include/asm-mips/jmr3927/irq.h b/include/asm-mips/jmr3927/irq.h index fe551f33a74f..e3e7ed38da6c 100644 --- a/include/asm-mips/jmr3927/irq.h +++ b/include/asm-mips/jmr3927/irq.h | |||
@@ -45,10 +45,6 @@ extern int | |||
45 | toshibaboards_setup_irq(int irq, struct irqaction * new); | 45 | toshibaboards_setup_irq(int irq, struct irqaction * new); |
46 | 46 | ||
47 | 47 | ||
48 | #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND | ||
49 | extern void tx_branch_likely_bug_fixup(struct pt_regs *regs); | ||
50 | #endif | ||
51 | |||
52 | extern int (*toshibaboards_gen_iack)(void); | 48 | extern int (*toshibaboards_gen_iack)(void); |
53 | 49 | ||
54 | #endif /* !__ASSEMBLY__ */ | 50 | #endif /* !__ASSEMBLY__ */ |
diff --git a/include/asm-mips/mach-au1x00/au1000_dma.h b/include/asm-mips/mach-au1x00/au1000_dma.h index 810f2fa33444..9f29520e8fb0 100644 --- a/include/asm-mips/mach-au1x00/au1000_dma.h +++ b/include/asm-mips/mach-au1x00/au1000_dma.h | |||
@@ -123,8 +123,7 @@ struct dma_chan { | |||
123 | extern struct dma_chan au1000_dma_table[]; | 123 | extern struct dma_chan au1000_dma_table[]; |
124 | extern int request_au1000_dma(int dev_id, | 124 | extern int request_au1000_dma(int dev_id, |
125 | const char *dev_str, | 125 | const char *dev_str, |
126 | irqreturn_t (*irqhandler)(int, void *, | 126 | irq_handler_t irqhandler, |
127 | struct pt_regs *), | ||
128 | unsigned long irqflags, | 127 | unsigned long irqflags, |
129 | void *irq_dev_id); | 128 | void *irq_dev_id); |
130 | extern void free_au1000_dma(unsigned int dmanr); | 129 | extern void free_au1000_dma(unsigned int dmanr); |
diff --git a/include/asm-mips/mach-au1x00/au1000_usbdev.h b/include/asm-mips/mach-au1x00/au1000_usbdev.h deleted file mode 100644 index 05bc74bed0b1..000000000000 --- a/include/asm-mips/mach-au1x00/au1000_usbdev.h +++ /dev/null | |||
@@ -1,73 +0,0 @@ | |||
1 | /* | ||
2 | * BRIEF MODULE DESCRIPTION | ||
3 | * Au1000 USB Device-Side Driver | ||
4 | * | ||
5 | * Copyright 2001 MontaVista Software Inc. | ||
6 | * Author: MontaVista Software, Inc. | ||
7 | * stevel@mvista.com or source@mvista.com | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms of the GNU General Public License as published by the | ||
11 | * Free Software Foundation; either version 2 of the License, or (at your | ||
12 | * option) any later version. | ||
13 | * | ||
14 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
15 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
16 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
17 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
18 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
19 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
20 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
21 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
22 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
23 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
24 | * | ||
25 | * You should have received a copy of the GNU General Public License along | ||
26 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
27 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
28 | */ | ||
29 | |||
30 | #define USBDEV_REV 0x0110 // BCD | ||
31 | #define USBDEV_EP0_MAX_PACKET_SIZE 64 | ||
32 | |||
33 | typedef enum { | ||
34 | ATTACHED = 0, | ||
35 | POWERED, | ||
36 | DEFAULT, | ||
37 | ADDRESS, | ||
38 | CONFIGURED | ||
39 | } usbdev_state_t; | ||
40 | |||
41 | typedef enum { | ||
42 | CB_NEW_STATE = 0, | ||
43 | CB_PKT_COMPLETE | ||
44 | } usbdev_cb_type_t; | ||
45 | |||
46 | |||
47 | typedef struct usbdev_pkt { | ||
48 | int ep_addr; // ep addr this packet routed to | ||
49 | int size; // size of payload in bytes | ||
50 | unsigned status; // packet status | ||
51 | struct usbdev_pkt* next; // function layer can't touch this | ||
52 | u8 payload[0]; // the payload | ||
53 | } usbdev_pkt_t; | ||
54 | |||
55 | #define PKT_STATUS_ACK (1<<0) | ||
56 | #define PKT_STATUS_NAK (1<<1) | ||
57 | #define PKT_STATUS_SU (1<<2) | ||
58 | |||
59 | extern int usbdev_init(struct usb_device_descriptor* dev_desc, | ||
60 | struct usb_config_descriptor* config_desc, | ||
61 | struct usb_interface_descriptor* if_desc, | ||
62 | struct usb_endpoint_descriptor* ep_desc, | ||
63 | struct usb_string_descriptor* str_desc[], | ||
64 | void (*cb)(usbdev_cb_type_t, unsigned long, void *), | ||
65 | void* cb_data); | ||
66 | |||
67 | extern void usbdev_exit(void); | ||
68 | |||
69 | extern int usbdev_alloc_packet (int ep_addr, int data_size, | ||
70 | usbdev_pkt_t** pkt); | ||
71 | extern int usbdev_send_packet (int ep_addr, usbdev_pkt_t* pkt); | ||
72 | extern int usbdev_receive_packet(int ep_addr, usbdev_pkt_t** pkt); | ||
73 | extern int usbdev_get_byte_count(int ep_addr); | ||
diff --git a/include/asm-mips/marvell.h b/include/asm-mips/marvell.h index 6bb2125bb053..df94955b098a 100644 --- a/include/asm-mips/marvell.h +++ b/include/asm-mips/marvell.h | |||
@@ -53,6 +53,6 @@ struct mv_pci_controller { | |||
53 | unsigned long config_vreg; | 53 | unsigned long config_vreg; |
54 | }; | 54 | }; |
55 | 55 | ||
56 | extern void ll_mv64340_irq(struct pt_regs *regs); | 56 | extern void ll_mv64340_irq(void); |
57 | 57 | ||
58 | #endif /* __ASM_MIPS_MARVELL_H */ | 58 | #endif /* __ASM_MIPS_MARVELL_H */ |
diff --git a/include/asm-mips/msc01_ic.h b/include/asm-mips/msc01_ic.h index 64f17208d602..aa7ad9a71762 100644 --- a/include/asm-mips/msc01_ic.h +++ b/include/asm-mips/msc01_ic.h | |||
@@ -145,7 +145,7 @@ typedef struct msc_irqmap { | |||
145 | #define MSC01_IRQ_EDGE 1 | 145 | #define MSC01_IRQ_EDGE 1 |
146 | 146 | ||
147 | extern void __init init_msc_irqs(unsigned int base, msc_irqmap_t *imp, int nirq); | 147 | extern void __init init_msc_irqs(unsigned int base, msc_irqmap_t *imp, int nirq); |
148 | extern void ll_msc_irq(struct pt_regs *regs); | 148 | extern void ll_msc_irq(void); |
149 | 149 | ||
150 | #endif /* __ASM_MIPS_BOARDS_MSC01_IC_H */ | 150 | #endif /* __ASM_MIPS_BOARDS_MSC01_IC_H */ |
151 | 151 | ||
diff --git a/include/asm-mips/thread_info.h b/include/asm-mips/thread_info.h index ae8ada5b42a9..e475c45ea263 100644 --- a/include/asm-mips/thread_info.h +++ b/include/asm-mips/thread_info.h | |||
@@ -34,6 +34,7 @@ struct thread_info { | |||
34 | 0-0xFFFFFFFF for kernel-thread | 34 | 0-0xFFFFFFFF for kernel-thread |
35 | */ | 35 | */ |
36 | struct restart_block restart_block; | 36 | struct restart_block restart_block; |
37 | struct pt_regs *regs; | ||
37 | }; | 38 | }; |
38 | 39 | ||
39 | /* | 40 | /* |
diff --git a/include/asm-mips/time.h b/include/asm-mips/time.h index 30f21df39253..28512ba2266e 100644 --- a/include/asm-mips/time.h +++ b/include/asm-mips/time.h | |||
@@ -72,13 +72,13 @@ extern irqreturn_t timer_interrupt(int irq, void *dev_id); | |||
72 | /* | 72 | /* |
73 | * the corresponding low-level timer interrupt routine. | 73 | * the corresponding low-level timer interrupt routine. |
74 | */ | 74 | */ |
75 | extern asmlinkage void ll_timer_interrupt(int irq, struct pt_regs *regs); | 75 | extern asmlinkage void ll_timer_interrupt(int irq); |
76 | 76 | ||
77 | /* | 77 | /* |
78 | * profiling and process accouting is done separately in local_timer_interrupt | 78 | * profiling and process accouting is done separately in local_timer_interrupt |
79 | */ | 79 | */ |
80 | extern void local_timer_interrupt(int irq, void *dev_id); | 80 | extern void local_timer_interrupt(int irq, void *dev_id); |
81 | extern asmlinkage void ll_local_timer_interrupt(int irq, struct pt_regs *regs); | 81 | extern asmlinkage void ll_local_timer_interrupt(int irq); |
82 | 82 | ||
83 | /* | 83 | /* |
84 | * board specific routines required by time_init(). | 84 | * board specific routines required by time_init(). |
diff --git a/include/asm-parisc/irq_regs.h b/include/asm-parisc/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-parisc/irq_regs.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-parisc/pdc.h b/include/asm-parisc/pdc.h index c9b2e35326ee..423c2b84b4a0 100644 --- a/include/asm-parisc/pdc.h +++ b/include/asm-parisc/pdc.h | |||
@@ -774,8 +774,6 @@ int pdc_sti_call(unsigned long func, unsigned long flags, | |||
774 | unsigned long inptr, unsigned long outputr, | 774 | unsigned long inptr, unsigned long outputr, |
775 | unsigned long glob_cfg); | 775 | unsigned long glob_cfg); |
776 | 776 | ||
777 | extern void pdc_init(void); | ||
778 | |||
779 | static inline char * os_id_to_string(u16 os_id) { | 777 | static inline char * os_id_to_string(u16 os_id) { |
780 | switch(os_id) { | 778 | switch(os_id) { |
781 | case OS_ID_NONE: return "No OS"; | 779 | case OS_ID_NONE: return "No OS"; |
diff --git a/include/asm-powerpc/i8259.h b/include/asm-powerpc/i8259.h index c80e113052cd..78489fb8d140 100644 --- a/include/asm-powerpc/i8259.h +++ b/include/asm-powerpc/i8259.h | |||
@@ -6,10 +6,10 @@ | |||
6 | 6 | ||
7 | #ifdef CONFIG_PPC_MERGE | 7 | #ifdef CONFIG_PPC_MERGE |
8 | extern void i8259_init(struct device_node *node, unsigned long intack_addr); | 8 | extern void i8259_init(struct device_node *node, unsigned long intack_addr); |
9 | extern unsigned int i8259_irq(struct pt_regs *regs); | 9 | extern unsigned int i8259_irq(void); |
10 | #else | 10 | #else |
11 | extern void i8259_init(unsigned long intack_addr, int offset); | 11 | extern void i8259_init(unsigned long intack_addr, int offset); |
12 | extern int i8259_irq(struct pt_regs *regs); | 12 | extern int i8259_irq(void); |
13 | #endif | 13 | #endif |
14 | 14 | ||
15 | #endif /* __KERNEL__ */ | 15 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-powerpc/ibmebus.h b/include/asm-powerpc/ibmebus.h index 7ab195a27888..3493429b70f5 100644 --- a/include/asm-powerpc/ibmebus.h +++ b/include/asm-powerpc/ibmebus.h | |||
@@ -65,7 +65,7 @@ void ibmebus_unregister_driver(struct ibmebus_driver *drv); | |||
65 | 65 | ||
66 | int ibmebus_request_irq(struct ibmebus_dev *dev, | 66 | int ibmebus_request_irq(struct ibmebus_dev *dev, |
67 | u32 ist, | 67 | u32 ist, |
68 | irqreturn_t (*handler)(int, void*, struct pt_regs *), | 68 | irq_handler_t handler, |
69 | unsigned long irq_flags, const char * devname, | 69 | unsigned long irq_flags, const char * devname, |
70 | void *dev_id); | 70 | void *dev_id); |
71 | void ibmebus_free_irq(struct ibmebus_dev *dev, u32 ist, void *dev_id); | 71 | void ibmebus_free_irq(struct ibmebus_dev *dev, u32 ist, void *dev_id); |
diff --git a/include/asm-powerpc/ipic.h b/include/asm-powerpc/ipic.h index 1ce09a35906e..9fbb03415860 100644 --- a/include/asm-powerpc/ipic.h +++ b/include/asm-powerpc/ipic.h | |||
@@ -79,12 +79,12 @@ extern void ipic_clear_mcp_status(u32 mask); | |||
79 | 79 | ||
80 | #ifdef CONFIG_PPC_MERGE | 80 | #ifdef CONFIG_PPC_MERGE |
81 | extern void ipic_init(struct device_node *node, unsigned int flags); | 81 | extern void ipic_init(struct device_node *node, unsigned int flags); |
82 | extern unsigned int ipic_get_irq(struct pt_regs *regs); | 82 | extern unsigned int ipic_get_irq(void); |
83 | #else | 83 | #else |
84 | extern void ipic_init(phys_addr_t phys_addr, unsigned int flags, | 84 | extern void ipic_init(phys_addr_t phys_addr, unsigned int flags, |
85 | unsigned int irq_offset, | 85 | unsigned int irq_offset, |
86 | unsigned char *senses, unsigned int senses_count); | 86 | unsigned char *senses, unsigned int senses_count); |
87 | extern int ipic_get_irq(struct pt_regs *regs); | 87 | extern int ipic_get_irq(void); |
88 | #endif | 88 | #endif |
89 | 89 | ||
90 | #endif /* __ASM_IPIC_H__ */ | 90 | #endif /* __ASM_IPIC_H__ */ |
diff --git a/include/asm-powerpc/iseries/hv_lp_event.h b/include/asm-powerpc/iseries/hv_lp_event.h index 4065a4de4935..6ce2ce1e2690 100644 --- a/include/asm-powerpc/iseries/hv_lp_event.h +++ b/include/asm-powerpc/iseries/hv_lp_event.h | |||
@@ -50,7 +50,7 @@ struct HvLpEvent { | |||
50 | u64 xCorrelationToken; /* Unique value for source/type x10-x17 */ | 50 | u64 xCorrelationToken; /* Unique value for source/type x10-x17 */ |
51 | }; | 51 | }; |
52 | 52 | ||
53 | typedef void (*LpEventHandler)(struct HvLpEvent *, struct pt_regs *); | 53 | typedef void (*LpEventHandler)(struct HvLpEvent *); |
54 | 54 | ||
55 | /* Register a handler for an event type - returns 0 on success */ | 55 | /* Register a handler for an event type - returns 0 on success */ |
56 | extern int HvLpEvent_registerHandler(HvLpEvent_Type eventType, | 56 | extern int HvLpEvent_registerHandler(HvLpEvent_Type eventType, |
diff --git a/include/asm-powerpc/iseries/it_lp_queue.h b/include/asm-powerpc/iseries/it_lp_queue.h index 3f6814769295..428278838821 100644 --- a/include/asm-powerpc/iseries/it_lp_queue.h +++ b/include/asm-powerpc/iseries/it_lp_queue.h | |||
@@ -72,7 +72,7 @@ struct hvlpevent_queue { | |||
72 | extern struct hvlpevent_queue hvlpevent_queue; | 72 | extern struct hvlpevent_queue hvlpevent_queue; |
73 | 73 | ||
74 | extern int hvlpevent_is_pending(void); | 74 | extern int hvlpevent_is_pending(void); |
75 | extern void process_hvlpevents(struct pt_regs *); | 75 | extern void process_hvlpevents(void); |
76 | extern void setup_hvlpevent_queue(void); | 76 | extern void setup_hvlpevent_queue(void); |
77 | 77 | ||
78 | #endif /* _ASM_POWERPC_ISERIES_IT_LP_QUEUE_H */ | 78 | #endif /* _ASM_POWERPC_ISERIES_IT_LP_QUEUE_H */ |
diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/machdep.h index c17c13742401..dac90dc341cb 100644 --- a/include/asm-powerpc/machdep.h +++ b/include/asm-powerpc/machdep.h | |||
@@ -97,7 +97,7 @@ struct machdep_calls { | |||
97 | void (*show_percpuinfo)(struct seq_file *m, int i); | 97 | void (*show_percpuinfo)(struct seq_file *m, int i); |
98 | 98 | ||
99 | void (*init_IRQ)(void); | 99 | void (*init_IRQ)(void); |
100 | unsigned int (*get_irq)(struct pt_regs *); | 100 | unsigned int (*get_irq)(void); |
101 | #ifdef CONFIG_KEXEC | 101 | #ifdef CONFIG_KEXEC |
102 | void (*kexec_cpu_down)(int crash_shutdown, int secondary); | 102 | void (*kexec_cpu_down)(int crash_shutdown, int secondary); |
103 | #endif | 103 | #endif |
diff --git a/include/asm-powerpc/mpic.h b/include/asm-powerpc/mpic.h index a9f9604b9eff..ef0a5458d2b2 100644 --- a/include/asm-powerpc/mpic.h +++ b/include/asm-powerpc/mpic.h | |||
@@ -409,9 +409,9 @@ extern void mpic_send_ipi(unsigned int ipi_no, unsigned int cpu_mask); | |||
409 | void smp_mpic_message_pass(int target, int msg); | 409 | void smp_mpic_message_pass(int target, int msg); |
410 | 410 | ||
411 | /* Fetch interrupt from a given mpic */ | 411 | /* Fetch interrupt from a given mpic */ |
412 | extern unsigned int mpic_get_one_irq(struct mpic *mpic, struct pt_regs *regs); | 412 | extern unsigned int mpic_get_one_irq(struct mpic *mpic); |
413 | /* This one gets to the primary mpic */ | 413 | /* This one gets to the primary mpic */ |
414 | extern unsigned int mpic_get_irq(struct pt_regs *regs); | 414 | extern unsigned int mpic_get_irq(void); |
415 | 415 | ||
416 | /* Set the EPIC clock ratio */ | 416 | /* Set the EPIC clock ratio */ |
417 | void mpic_set_clk_ratio(struct mpic *mpic, u32 clock_ratio); | 417 | void mpic_set_clk_ratio(struct mpic *mpic, u32 clock_ratio); |
diff --git a/include/asm-powerpc/reg.h b/include/asm-powerpc/reg.h index 3a9fcc15811b..8fb96811b55d 100644 --- a/include/asm-powerpc/reg.h +++ b/include/asm-powerpc/reg.h | |||
@@ -503,7 +503,7 @@ | |||
503 | 503 | ||
504 | /* | 504 | /* |
505 | * An mtfsf instruction with the L bit set. On CPUs that support this a | 505 | * An mtfsf instruction with the L bit set. On CPUs that support this a |
506 | * full 64bits of FPSCR is restored and on other CPUs it is ignored. | 506 | * full 64bits of FPSCR is restored and on other CPUs the L bit is ignored. |
507 | * | 507 | * |
508 | * Until binutils gets the new form of mtfsf, hardwire the instruction. | 508 | * Until binutils gets the new form of mtfsf, hardwire the instruction. |
509 | */ | 509 | */ |
diff --git a/include/asm-ppc/commproc.h b/include/asm-ppc/commproc.h index 3247bea5fc2b..7b06b4e6bf30 100644 --- a/include/asm-ppc/commproc.h +++ b/include/asm-ppc/commproc.h | |||
@@ -690,8 +690,7 @@ typedef struct risc_timer_pram { | |||
690 | #define CICR_IEN ((uint)0x00000080) /* Int. enable */ | 690 | #define CICR_IEN ((uint)0x00000080) /* Int. enable */ |
691 | #define CICR_SPS ((uint)0x00000001) /* SCC Spread */ | 691 | #define CICR_SPS ((uint)0x00000001) /* SCC Spread */ |
692 | 692 | ||
693 | extern void cpm_install_handler(int vec, | 693 | extern void cpm_install_handler(int vec, void (*handler)(void *), void *dev_id); |
694 | void (*handler)(void *, struct pt_regs *regs), void *dev_id); | ||
695 | extern void cpm_free_handler(int vec); | 694 | extern void cpm_free_handler(int vec); |
696 | 695 | ||
697 | #endif /* __CPM_8XX__ */ | 696 | #endif /* __CPM_8XX__ */ |
diff --git a/include/asm-ppc/floppy.h b/include/asm-ppc/floppy.h index d3963ca79ad8..ae316e6d2ca9 100644 --- a/include/asm-ppc/floppy.h +++ b/include/asm-ppc/floppy.h | |||
@@ -38,14 +38,14 @@ static int virtual_dma_mode; | |||
38 | static int doing_vdma; | 38 | static int doing_vdma; |
39 | static struct fd_dma_ops *fd_ops; | 39 | static struct fd_dma_ops *fd_ops; |
40 | 40 | ||
41 | static irqreturn_t floppy_hardint(int irq, void *dev_id, struct pt_regs * regs) | 41 | static irqreturn_t floppy_hardint(int irq, void *dev_id) |
42 | { | 42 | { |
43 | unsigned char st; | 43 | unsigned char st; |
44 | int lcount; | 44 | int lcount; |
45 | char *lptr; | 45 | char *lptr; |
46 | 46 | ||
47 | if (!doing_vdma) | 47 | if (!doing_vdma) |
48 | return floppy_interrupt(irq, dev_id, regs); | 48 | return floppy_interrupt(irq, dev_id); |
49 | 49 | ||
50 | 50 | ||
51 | st = 1; | 51 | st = 1; |
@@ -69,7 +69,7 @@ static irqreturn_t floppy_hardint(int irq, void *dev_id, struct pt_regs * regs) | |||
69 | virtual_dma_residue += virtual_dma_count; | 69 | virtual_dma_residue += virtual_dma_count; |
70 | virtual_dma_count=0; | 70 | virtual_dma_count=0; |
71 | doing_vdma = 0; | 71 | doing_vdma = 0; |
72 | floppy_interrupt(irq, dev_id, regs); | 72 | floppy_interrupt(irq, dev_id); |
73 | return IRQ_HANDLED; | 73 | return IRQ_HANDLED; |
74 | } | 74 | } |
75 | return IRQ_HANDLED; | 75 | return IRQ_HANDLED; |
diff --git a/include/asm-ppc/gt64260.h b/include/asm-ppc/gt64260.h index cd0ef644943d..9e63b3cfffca 100644 --- a/include/asm-ppc/gt64260.h +++ b/include/asm-ppc/gt64260.h | |||
@@ -315,7 +315,7 @@ int gt64260_get_base(u32 *base); | |||
315 | int gt64260_pci_exclude_device(u8 bus, u8 devfn); | 315 | int gt64260_pci_exclude_device(u8 bus, u8 devfn); |
316 | 316 | ||
317 | void gt64260_init_irq(void); | 317 | void gt64260_init_irq(void); |
318 | int gt64260_get_irq(struct pt_regs *regs); | 318 | int gt64260_get_irq(void); |
319 | 319 | ||
320 | void gt64260_mpsc_progress(char *s, unsigned short hex); | 320 | void gt64260_mpsc_progress(char *s, unsigned short hex); |
321 | 321 | ||
diff --git a/include/asm-ppc/machdep.h b/include/asm-ppc/machdep.h index da7746738aee..293a444a1d77 100644 --- a/include/asm-ppc/machdep.h +++ b/include/asm-ppc/machdep.h | |||
@@ -43,7 +43,7 @@ struct machdep_calls { | |||
43 | /* Optional, may be NULL. */ | 43 | /* Optional, may be NULL. */ |
44 | unsigned int (*irq_canonicalize)(unsigned int irq); | 44 | unsigned int (*irq_canonicalize)(unsigned int irq); |
45 | void (*init_IRQ)(void); | 45 | void (*init_IRQ)(void); |
46 | int (*get_irq)(struct pt_regs *); | 46 | int (*get_irq)(void); |
47 | 47 | ||
48 | /* A general init function, called by ppc_init in init/main.c. | 48 | /* A general init function, called by ppc_init in init/main.c. |
49 | May be NULL. DEPRECATED ! */ | 49 | May be NULL. DEPRECATED ! */ |
diff --git a/include/asm-ppc/mpc52xx.h b/include/asm-ppc/mpc52xx.h index 7e9842805a28..64c8874618dc 100644 --- a/include/asm-ppc/mpc52xx.h +++ b/include/asm-ppc/mpc52xx.h | |||
@@ -415,7 +415,7 @@ struct mpc52xx_cdm { | |||
415 | #ifndef __ASSEMBLY__ | 415 | #ifndef __ASSEMBLY__ |
416 | 416 | ||
417 | extern void mpc52xx_init_irq(void); | 417 | extern void mpc52xx_init_irq(void); |
418 | extern int mpc52xx_get_irq(struct pt_regs *regs); | 418 | extern int mpc52xx_get_irq(void); |
419 | 419 | ||
420 | extern unsigned long mpc52xx_find_end_of_memory(void); | 420 | extern unsigned long mpc52xx_find_end_of_memory(void); |
421 | extern void mpc52xx_set_bat(void); | 421 | extern void mpc52xx_set_bat(void); |
diff --git a/include/asm-ppc/mv64x60.h b/include/asm-ppc/mv64x60.h index 663edbee3e91..db3776f18198 100644 --- a/include/asm-ppc/mv64x60.h +++ b/include/asm-ppc/mv64x60.h | |||
@@ -336,9 +336,9 @@ int mv64x60_pci_exclude_device(u8 bus, u8 devfn); | |||
336 | 336 | ||
337 | 337 | ||
338 | void gt64260_init_irq(void); | 338 | void gt64260_init_irq(void); |
339 | int gt64260_get_irq(struct pt_regs *regs); | 339 | int gt64260_get_irq(void); |
340 | void mv64360_init_irq(void); | 340 | void mv64360_init_irq(void); |
341 | int mv64360_get_irq(struct pt_regs *regs); | 341 | int mv64360_get_irq(void); |
342 | 342 | ||
343 | u32 mv64x60_mask(u32 val, u32 num_bits); | 343 | u32 mv64x60_mask(u32 val, u32 num_bits); |
344 | u32 mv64x60_shift_left(u32 val, u32 num_bits); | 344 | u32 mv64x60_shift_left(u32 val, u32 num_bits); |
diff --git a/include/asm-ppc/open_pic.h b/include/asm-ppc/open_pic.h index a4fe962d9f73..778d5726212c 100644 --- a/include/asm-ppc/open_pic.h +++ b/include/asm-ppc/open_pic.h | |||
@@ -48,12 +48,12 @@ extern void openpic_init(int linux_irq_offset); | |||
48 | extern void openpic_init_nmi_irq(u_int irq); | 48 | extern void openpic_init_nmi_irq(u_int irq); |
49 | extern void openpic_set_irq_priority(u_int irq, u_int pri); | 49 | extern void openpic_set_irq_priority(u_int irq, u_int pri); |
50 | extern void openpic_hookup_cascade(u_int irq, char *name, | 50 | extern void openpic_hookup_cascade(u_int irq, char *name, |
51 | int (*cascade_fn)(struct pt_regs *)); | 51 | int (*cascade_fn)(void)); |
52 | extern u_int openpic_irq(void); | 52 | extern u_int openpic_irq(void); |
53 | extern void openpic_eoi(void); | 53 | extern void openpic_eoi(void); |
54 | extern void openpic_request_IPIs(void); | 54 | extern void openpic_request_IPIs(void); |
55 | extern void do_openpic_setup_cpu(void); | 55 | extern void do_openpic_setup_cpu(void); |
56 | extern int openpic_get_irq(struct pt_regs *regs); | 56 | extern int openpic_get_irq(void); |
57 | extern void openpic_reset_processor_phys(u_int cpumask); | 57 | extern void openpic_reset_processor_phys(u_int cpumask); |
58 | extern void openpic_setup_ISU(int isu_num, unsigned long addr); | 58 | extern void openpic_setup_ISU(int isu_num, unsigned long addr); |
59 | extern void openpic_cause_IPI(u_int ipi, cpumask_t cpumask); | 59 | extern void openpic_cause_IPI(u_int ipi, cpumask_t cpumask); |
@@ -93,6 +93,6 @@ extern void openpic2_init(int linux_irq_offset); | |||
93 | extern void openpic2_init_nmi_irq(u_int irq); | 93 | extern void openpic2_init_nmi_irq(u_int irq); |
94 | extern u_int openpic2_irq(void); | 94 | extern u_int openpic2_irq(void); |
95 | extern void openpic2_eoi(void); | 95 | extern void openpic2_eoi(void); |
96 | extern int openpic2_get_irq(struct pt_regs *regs); | 96 | extern int openpic2_get_irq(void); |
97 | extern void openpic2_setup_ISU(int isu_num, unsigned long addr); | 97 | extern void openpic2_setup_ISU(int isu_num, unsigned long addr); |
98 | #endif /* _PPC_KERNEL_OPEN_PIC_H */ | 98 | #endif /* _PPC_KERNEL_OPEN_PIC_H */ |
diff --git a/include/asm-ppc/smp.h b/include/asm-ppc/smp.h index 0b7fa89589df..e75791ea33a6 100644 --- a/include/asm-ppc/smp.h +++ b/include/asm-ppc/smp.h | |||
@@ -39,7 +39,7 @@ extern struct smp_ops_t *smp_ops; | |||
39 | extern void smp_send_tlb_invalidate(int); | 39 | extern void smp_send_tlb_invalidate(int); |
40 | extern void smp_send_xmon_break(int cpu); | 40 | extern void smp_send_xmon_break(int cpu); |
41 | struct pt_regs; | 41 | struct pt_regs; |
42 | extern void smp_message_recv(int, struct pt_regs *); | 42 | extern void smp_message_recv(int); |
43 | 43 | ||
44 | extern int __cpu_disable(void); | 44 | extern int __cpu_disable(void); |
45 | extern void __cpu_die(unsigned int cpu); | 45 | extern void __cpu_die(unsigned int cpu); |
diff --git a/include/asm-s390/hardirq.h b/include/asm-s390/hardirq.h index e84b7ef54aac..c2f6a8782d31 100644 --- a/include/asm-s390/hardirq.h +++ b/include/asm-s390/hardirq.h | |||
@@ -32,6 +32,6 @@ typedef struct { | |||
32 | 32 | ||
33 | #define HARDIRQ_BITS 8 | 33 | #define HARDIRQ_BITS 8 |
34 | 34 | ||
35 | extern void account_ticks(struct pt_regs *); | 35 | extern void account_ticks(void); |
36 | 36 | ||
37 | #endif /* __ASM_HARDIRQ_H */ | 37 | #endif /* __ASM_HARDIRQ_H */ |
diff --git a/include/asm-s390/irq_regs.h b/include/asm-s390/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-s390/irq_regs.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-s390/percpu.h b/include/asm-s390/percpu.h index 495ad99c7635..9ea7f1023e57 100644 --- a/include/asm-s390/percpu.h +++ b/include/asm-s390/percpu.h | |||
@@ -16,7 +16,7 @@ | |||
16 | #if defined(__s390x__) && defined(MODULE) | 16 | #if defined(__s390x__) && defined(MODULE) |
17 | 17 | ||
18 | #define __reloc_hide(var,offset) (*({ \ | 18 | #define __reloc_hide(var,offset) (*({ \ |
19 | extern int simple_indentifier_##var(void); \ | 19 | extern int simple_identifier_##var(void); \ |
20 | unsigned long *__ptr; \ | 20 | unsigned long *__ptr; \ |
21 | asm ( "larl %0,per_cpu__"#var"@GOTENT" \ | 21 | asm ( "larl %0,per_cpu__"#var"@GOTENT" \ |
22 | : "=a" (__ptr) : "X" (per_cpu__##var) ); \ | 22 | : "=a" (__ptr) : "X" (per_cpu__##var) ); \ |
@@ -25,7 +25,7 @@ | |||
25 | #else | 25 | #else |
26 | 26 | ||
27 | #define __reloc_hide(var, offset) (*({ \ | 27 | #define __reloc_hide(var, offset) (*({ \ |
28 | extern int simple_indentifier_##var(void); \ | 28 | extern int simple_identifier_##var(void); \ |
29 | unsigned long __ptr; \ | 29 | unsigned long __ptr; \ |
30 | asm ( "" : "=a" (__ptr) : "0" (&per_cpu__##var) ); \ | 30 | asm ( "" : "=a" (__ptr) : "0" (&per_cpu__##var) ); \ |
31 | (typeof(&per_cpu__##var)) (__ptr + (offset)); })) | 31 | (typeof(&per_cpu__##var)) (__ptr + (offset)); })) |
diff --git a/include/asm-s390/s390_ext.h b/include/asm-s390/s390_ext.h index e9a2862b230d..df9b1017b703 100644 --- a/include/asm-s390/s390_ext.h +++ b/include/asm-s390/s390_ext.h | |||
@@ -10,7 +10,7 @@ | |||
10 | * Martin Schwidefsky (schwidefsky@de.ibm.com) | 10 | * Martin Schwidefsky (schwidefsky@de.ibm.com) |
11 | */ | 11 | */ |
12 | 12 | ||
13 | typedef void (*ext_int_handler_t)(struct pt_regs *regs, __u16 code); | 13 | typedef void (*ext_int_handler_t)(__u16 code); |
14 | 14 | ||
15 | /* | 15 | /* |
16 | * Warning: if you change ext_int_info_t you have to change the | 16 | * Warning: if you change ext_int_info_t you have to change the |
diff --git a/include/asm-sparc/floppy.h b/include/asm-sparc/floppy.h index c53b332c850a..9073c84218ce 100644 --- a/include/asm-sparc/floppy.h +++ b/include/asm-sparc/floppy.h | |||
@@ -262,7 +262,7 @@ static __inline__ void sun_fd_enable_dma(void) | |||
262 | } | 262 | } |
263 | 263 | ||
264 | /* Our low-level entry point in arch/sparc/kernel/entry.S */ | 264 | /* Our low-level entry point in arch/sparc/kernel/entry.S */ |
265 | irqreturn_t floppy_hardint(int irq, void *unused, struct pt_regs *regs); | 265 | irqreturn_t floppy_hardint(int irq, void *unused); |
266 | 266 | ||
267 | static int sun_fd_request_irq(void) | 267 | static int sun_fd_request_irq(void) |
268 | { | 268 | { |
diff --git a/include/asm-sparc/irq.h b/include/asm-sparc/irq.h index 3141ddfea97d..ff520ea97473 100644 --- a/include/asm-sparc/irq.h +++ b/include/asm-sparc/irq.h | |||
@@ -76,8 +76,8 @@ static inline void load_profile_irq(int cpu, int limit) | |||
76 | BTFIXUP_CALL(load_profile_irq)(cpu, limit); | 76 | BTFIXUP_CALL(load_profile_irq)(cpu, limit); |
77 | } | 77 | } |
78 | 78 | ||
79 | extern void (*sparc_init_timers)(irqreturn_t (*lvl10_irq)(int, void *, struct pt_regs *)); | 79 | extern void (*sparc_init_timers)(irq_handler_t lvl10_irq); |
80 | extern void claim_ticker14(irqreturn_t (*irq_handler)(int, void *, struct pt_regs *), | 80 | extern void claim_ticker14(irq_handler_t irq_handler, |
81 | int irq, | 81 | int irq, |
82 | unsigned int timeout); | 82 | unsigned int timeout); |
83 | 83 | ||
@@ -91,7 +91,7 @@ BTFIXUPDEF_CALL(void, set_irq_udt, int) | |||
91 | #define set_irq_udt(cpu) BTFIXUP_CALL(set_irq_udt)(cpu) | 91 | #define set_irq_udt(cpu) BTFIXUP_CALL(set_irq_udt)(cpu) |
92 | #endif | 92 | #endif |
93 | 93 | ||
94 | extern int request_fast_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long flags, __const__ char *devname); | 94 | extern int request_fast_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, __const__ char *devname); |
95 | 95 | ||
96 | /* On the sun4m, just like the timers, we have both per-cpu and master | 96 | /* On the sun4m, just like the timers, we have both per-cpu and master |
97 | * interrupt registers. | 97 | * interrupt registers. |
diff --git a/include/asm-sparc/irq_regs.h b/include/asm-sparc/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-sparc/irq_regs.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-sparc/spinlock.h b/include/asm-sparc/spinlock.h index 557d08959d2f..de2249b267c6 100644 --- a/include/asm-sparc/spinlock.h +++ b/include/asm-sparc/spinlock.h | |||
@@ -129,6 +129,7 @@ static inline void __raw_write_lock(raw_rwlock_t *rw) | |||
129 | : /* no outputs */ | 129 | : /* no outputs */ |
130 | : "r" (lp) | 130 | : "r" (lp) |
131 | : "g2", "g4", "memory", "cc"); | 131 | : "g2", "g4", "memory", "cc"); |
132 | *(volatile __u32 *)&lp->lock = ~0U; | ||
132 | } | 133 | } |
133 | 134 | ||
134 | static inline int __raw_write_trylock(raw_rwlock_t *rw) | 135 | static inline int __raw_write_trylock(raw_rwlock_t *rw) |
@@ -144,15 +145,40 @@ static inline int __raw_write_trylock(raw_rwlock_t *rw) | |||
144 | val = rw->lock & ~0xff; | 145 | val = rw->lock & ~0xff; |
145 | if (val) | 146 | if (val) |
146 | ((volatile u8*)&rw->lock)[3] = 0; | 147 | ((volatile u8*)&rw->lock)[3] = 0; |
148 | else | ||
149 | *(volatile u32*)&rw->lock = ~0U; | ||
147 | } | 150 | } |
148 | 151 | ||
149 | return (val == 0); | 152 | return (val == 0); |
150 | } | 153 | } |
151 | 154 | ||
155 | static inline int __read_trylock(raw_rwlock_t *rw) | ||
156 | { | ||
157 | register raw_rwlock_t *lp asm("g1"); | ||
158 | register int res asm("o0"); | ||
159 | lp = rw; | ||
160 | __asm__ __volatile__( | ||
161 | "mov %%o7, %%g4\n\t" | ||
162 | "call ___rw_read_try\n\t" | ||
163 | " ldstub [%%g1 + 3], %%g2\n" | ||
164 | : "=r" (res) | ||
165 | : "r" (lp) | ||
166 | : "g2", "g4", "memory", "cc"); | ||
167 | return res; | ||
168 | } | ||
169 | |||
170 | #define __raw_read_trylock(lock) \ | ||
171 | ({ unsigned long flags; \ | ||
172 | int res; \ | ||
173 | local_irq_save(flags); \ | ||
174 | res = __read_trylock(lock); \ | ||
175 | local_irq_restore(flags); \ | ||
176 | res; \ | ||
177 | }) | ||
178 | |||
152 | #define __raw_write_unlock(rw) do { (rw)->lock = 0; } while(0) | 179 | #define __raw_write_unlock(rw) do { (rw)->lock = 0; } while(0) |
153 | 180 | ||
154 | #define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock) | 181 | #define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock) |
155 | #define __raw_read_trylock(lock) generic__raw_read_trylock(lock) | ||
156 | 182 | ||
157 | #define _raw_spin_relax(lock) cpu_relax() | 183 | #define _raw_spin_relax(lock) cpu_relax() |
158 | #define _raw_read_relax(lock) cpu_relax() | 184 | #define _raw_read_relax(lock) cpu_relax() |
diff --git a/include/asm-sparc64/floppy.h b/include/asm-sparc64/floppy.h index abf150038019..dbe033e494db 100644 --- a/include/asm-sparc64/floppy.h +++ b/include/asm-sparc64/floppy.h | |||
@@ -208,7 +208,7 @@ static void sun_fd_enable_dma(void) | |||
208 | pdma_areasize = pdma_size; | 208 | pdma_areasize = pdma_size; |
209 | } | 209 | } |
210 | 210 | ||
211 | irqreturn_t sparc_floppy_irq(int irq, void *dev_cookie, struct pt_regs *regs) | 211 | irqreturn_t sparc_floppy_irq(int irq, void *dev_cookie) |
212 | { | 212 | { |
213 | if (likely(doing_pdma)) { | 213 | if (likely(doing_pdma)) { |
214 | void __iomem *stat = (void __iomem *) fdc_status; | 214 | void __iomem *stat = (void __iomem *) fdc_status; |
@@ -255,7 +255,7 @@ irqreturn_t sparc_floppy_irq(int irq, void *dev_cookie, struct pt_regs *regs) | |||
255 | } | 255 | } |
256 | 256 | ||
257 | main_interrupt: | 257 | main_interrupt: |
258 | return floppy_interrupt(irq, dev_cookie, regs); | 258 | return floppy_interrupt(irq, dev_cookie); |
259 | } | 259 | } |
260 | 260 | ||
261 | static int sun_fd_request_irq(void) | 261 | static int sun_fd_request_irq(void) |
@@ -311,7 +311,7 @@ struct sun_pci_dma_op { | |||
311 | static struct sun_pci_dma_op sun_pci_dma_current = { -1U, 0, 0, NULL}; | 311 | static struct sun_pci_dma_op sun_pci_dma_current = { -1U, 0, 0, NULL}; |
312 | static struct sun_pci_dma_op sun_pci_dma_pending = { -1U, 0, 0, NULL}; | 312 | static struct sun_pci_dma_op sun_pci_dma_pending = { -1U, 0, 0, NULL}; |
313 | 313 | ||
314 | extern irqreturn_t floppy_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 314 | extern irqreturn_t floppy_interrupt(int irq, void *dev_id); |
315 | 315 | ||
316 | static unsigned char sun_pci_fd_inb(unsigned long port) | 316 | static unsigned char sun_pci_fd_inb(unsigned long port) |
317 | { | 317 | { |
@@ -446,7 +446,7 @@ static int sun_pci_fd_eject(int drive) | |||
446 | 446 | ||
447 | void sun_pci_fd_dma_callback(struct ebus_dma_info *p, int event, void *cookie) | 447 | void sun_pci_fd_dma_callback(struct ebus_dma_info *p, int event, void *cookie) |
448 | { | 448 | { |
449 | floppy_interrupt(0, NULL, NULL); | 449 | floppy_interrupt(0, NULL); |
450 | } | 450 | } |
451 | 451 | ||
452 | /* | 452 | /* |
diff --git a/include/asm-sparc64/irq_regs.h b/include/asm-sparc64/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-sparc64/irq_regs.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-um/irq_regs.h b/include/asm-um/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/include/asm-um/irq_regs.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/irq_regs.h> | |||
diff --git a/include/asm-x86_64/genapic.h b/include/asm-x86_64/genapic.h index 81e714665344..a0e9a4b93484 100644 --- a/include/asm-x86_64/genapic.h +++ b/include/asm-x86_64/genapic.h | |||
@@ -18,6 +18,7 @@ struct genapic { | |||
18 | u32 int_dest_mode; | 18 | u32 int_dest_mode; |
19 | int (*apic_id_registered)(void); | 19 | int (*apic_id_registered)(void); |
20 | cpumask_t (*target_cpus)(void); | 20 | cpumask_t (*target_cpus)(void); |
21 | cpumask_t (*vector_allocation_domain)(int cpu); | ||
21 | void (*init_apic_ldr)(void); | 22 | void (*init_apic_ldr)(void); |
22 | /* ipi */ | 23 | /* ipi */ |
23 | void (*send_IPI_mask)(cpumask_t mask, int vector); | 24 | void (*send_IPI_mask)(cpumask_t mask, int vector); |
diff --git a/include/asm-x86_64/hw_irq.h b/include/asm-x86_64/hw_irq.h index 53d0d9fd10d6..792dd52fcd70 100644 --- a/include/asm-x86_64/hw_irq.h +++ b/include/asm-x86_64/hw_irq.h | |||
@@ -74,10 +74,8 @@ | |||
74 | 74 | ||
75 | 75 | ||
76 | #ifndef __ASSEMBLY__ | 76 | #ifndef __ASSEMBLY__ |
77 | extern unsigned int irq_vector[NR_IRQ_VECTORS]; | ||
78 | typedef int vector_irq_t[NR_VECTORS]; | 77 | typedef int vector_irq_t[NR_VECTORS]; |
79 | DECLARE_PER_CPU(vector_irq_t, vector_irq); | 78 | DECLARE_PER_CPU(vector_irq_t, vector_irq); |
80 | #define IO_APIC_VECTOR(irq) (irq_vector[irq]) | ||
81 | 79 | ||
82 | /* | 80 | /* |
83 | * Various low-level irq details needed by irq.c, process.c, | 81 | * Various low-level irq details needed by irq.c, process.c, |
diff --git a/include/asm-x86_64/mach_apic.h b/include/asm-x86_64/mach_apic.h index d33422450c00..7b7115a0c1c9 100644 --- a/include/asm-x86_64/mach_apic.h +++ b/include/asm-x86_64/mach_apic.h | |||
@@ -17,6 +17,7 @@ | |||
17 | #define INT_DELIVERY_MODE (genapic->int_delivery_mode) | 17 | #define INT_DELIVERY_MODE (genapic->int_delivery_mode) |
18 | #define INT_DEST_MODE (genapic->int_dest_mode) | 18 | #define INT_DEST_MODE (genapic->int_dest_mode) |
19 | #define TARGET_CPUS (genapic->target_cpus()) | 19 | #define TARGET_CPUS (genapic->target_cpus()) |
20 | #define vector_allocation_domain (genapic->vector_allocation_domain) | ||
20 | #define apic_id_registered (genapic->apic_id_registered) | 21 | #define apic_id_registered (genapic->apic_id_registered) |
21 | #define init_apic_ldr (genapic->init_apic_ldr) | 22 | #define init_apic_ldr (genapic->init_apic_ldr) |
22 | #define send_IPI_mask (genapic->send_IPI_mask) | 23 | #define send_IPI_mask (genapic->send_IPI_mask) |
diff --git a/include/asm-x86_64/percpu.h b/include/asm-x86_64/percpu.h index 285756010c51..5ed0ef340842 100644 --- a/include/asm-x86_64/percpu.h +++ b/include/asm-x86_64/percpu.h | |||
@@ -32,13 +32,13 @@ | |||
32 | 32 | ||
33 | /* var is in discarded region: offset to particular copy we want */ | 33 | /* var is in discarded region: offset to particular copy we want */ |
34 | #define per_cpu(var, cpu) (*({ \ | 34 | #define per_cpu(var, cpu) (*({ \ |
35 | extern int simple_indentifier_##var(void); \ | 35 | extern int simple_identifier_##var(void); \ |
36 | RELOC_HIDE(&per_cpu__##var, __per_cpu_offset(cpu)); })) | 36 | RELOC_HIDE(&per_cpu__##var, __per_cpu_offset(cpu)); })) |
37 | #define __get_cpu_var(var) (*({ \ | 37 | #define __get_cpu_var(var) (*({ \ |
38 | extern int simple_indentifier_##var(void); \ | 38 | extern int simple_identifier_##var(void); \ |
39 | RELOC_HIDE(&per_cpu__##var, __my_cpu_offset()); })) | 39 | RELOC_HIDE(&per_cpu__##var, __my_cpu_offset()); })) |
40 | #define __raw_get_cpu_var(var) (*({ \ | 40 | #define __raw_get_cpu_var(var) (*({ \ |
41 | extern int simple_indentifier_##var(void); \ | 41 | extern int simple_identifier_##var(void); \ |
42 | RELOC_HIDE(&per_cpu__##var, __my_cpu_offset()); })) | 42 | RELOC_HIDE(&per_cpu__##var, __my_cpu_offset()); })) |
43 | 43 | ||
44 | /* A macro to avoid #include hell... */ | 44 | /* A macro to avoid #include hell... */ |
diff --git a/include/linux/cdrom.h b/include/linux/cdrom.h index 3c9b0bc05123..bbbe7b4da0bb 100644 --- a/include/linux/cdrom.h +++ b/include/linux/cdrom.h | |||
@@ -749,7 +749,7 @@ struct request_sense { | |||
749 | #define MRW_MODE_PC 0x03 | 749 | #define MRW_MODE_PC 0x03 |
750 | 750 | ||
751 | struct mrw_feature_desc { | 751 | struct mrw_feature_desc { |
752 | __u16 feature_code; | 752 | __be16 feature_code; |
753 | #if defined(__BIG_ENDIAN_BITFIELD) | 753 | #if defined(__BIG_ENDIAN_BITFIELD) |
754 | __u8 reserved1 : 2; | 754 | __u8 reserved1 : 2; |
755 | __u8 feature_version : 4; | 755 | __u8 feature_version : 4; |
@@ -776,7 +776,7 @@ struct mrw_feature_desc { | |||
776 | 776 | ||
777 | /* cf. mmc4r02g.pdf 5.3.10 Random Writable Feature (0020h) pg 197 of 635 */ | 777 | /* cf. mmc4r02g.pdf 5.3.10 Random Writable Feature (0020h) pg 197 of 635 */ |
778 | struct rwrt_feature_desc { | 778 | struct rwrt_feature_desc { |
779 | __u16 feature_code; | 779 | __be16 feature_code; |
780 | #if defined(__BIG_ENDIAN_BITFIELD) | 780 | #if defined(__BIG_ENDIAN_BITFIELD) |
781 | __u8 reserved1 : 2; | 781 | __u8 reserved1 : 2; |
782 | __u8 feature_version : 4; | 782 | __u8 feature_version : 4; |
@@ -803,7 +803,7 @@ struct rwrt_feature_desc { | |||
803 | }; | 803 | }; |
804 | 804 | ||
805 | typedef struct { | 805 | typedef struct { |
806 | __u16 disc_information_length; | 806 | __be16 disc_information_length; |
807 | #if defined(__BIG_ENDIAN_BITFIELD) | 807 | #if defined(__BIG_ENDIAN_BITFIELD) |
808 | __u8 reserved1 : 3; | 808 | __u8 reserved1 : 3; |
809 | __u8 erasable : 1; | 809 | __u8 erasable : 1; |
@@ -849,7 +849,7 @@ typedef struct { | |||
849 | } disc_information; | 849 | } disc_information; |
850 | 850 | ||
851 | typedef struct { | 851 | typedef struct { |
852 | __u16 track_information_length; | 852 | __be16 track_information_length; |
853 | __u8 track_lsb; | 853 | __u8 track_lsb; |
854 | __u8 session_lsb; | 854 | __u8 session_lsb; |
855 | __u8 reserved1; | 855 | __u8 reserved1; |
@@ -880,12 +880,12 @@ typedef struct { | |||
880 | __u8 lra_v : 1; | 880 | __u8 lra_v : 1; |
881 | __u8 reserved3 : 6; | 881 | __u8 reserved3 : 6; |
882 | #endif | 882 | #endif |
883 | __u32 track_start; | 883 | __be32 track_start; |
884 | __u32 next_writable; | 884 | __be32 next_writable; |
885 | __u32 free_blocks; | 885 | __be32 free_blocks; |
886 | __u32 fixed_packet_size; | 886 | __be32 fixed_packet_size; |
887 | __u32 track_size; | 887 | __be32 track_size; |
888 | __u32 last_rec_address; | 888 | __be32 last_rec_address; |
889 | } track_information; | 889 | } track_information; |
890 | 890 | ||
891 | struct feature_header { | 891 | struct feature_header { |
@@ -896,12 +896,12 @@ struct feature_header { | |||
896 | }; | 896 | }; |
897 | 897 | ||
898 | struct mode_page_header { | 898 | struct mode_page_header { |
899 | __u16 mode_data_length; | 899 | __be16 mode_data_length; |
900 | __u8 medium_type; | 900 | __u8 medium_type; |
901 | __u8 reserved1; | 901 | __u8 reserved1; |
902 | __u8 reserved2; | 902 | __u8 reserved2; |
903 | __u8 reserved3; | 903 | __u8 reserved3; |
904 | __u16 desc_length; | 904 | __be16 desc_length; |
905 | }; | 905 | }; |
906 | 906 | ||
907 | #ifdef __KERNEL__ | 907 | #ifdef __KERNEL__ |
@@ -1106,7 +1106,7 @@ typedef struct { | |||
1106 | #endif | 1106 | #endif |
1107 | __u8 session_format; | 1107 | __u8 session_format; |
1108 | __u8 reserved6; | 1108 | __u8 reserved6; |
1109 | __u32 packet_size; | 1109 | __be32 packet_size; |
1110 | __u16 audio_pause; | 1110 | __u16 audio_pause; |
1111 | __u8 mcn[16]; | 1111 | __u8 mcn[16]; |
1112 | __u8 isrc[16]; | 1112 | __u8 isrc[16]; |
@@ -1151,7 +1151,7 @@ typedef struct { | |||
1151 | } rpc_state_t; | 1151 | } rpc_state_t; |
1152 | 1152 | ||
1153 | struct event_header { | 1153 | struct event_header { |
1154 | __u16 data_len; | 1154 | __be16 data_len; |
1155 | #if defined(__BIG_ENDIAN_BITFIELD) | 1155 | #if defined(__BIG_ENDIAN_BITFIELD) |
1156 | __u8 nea : 1; | 1156 | __u8 nea : 1; |
1157 | __u8 reserved1 : 4; | 1157 | __u8 reserved1 : 4; |
diff --git a/include/linux/compat.h b/include/linux/compat.h index ef5cd192784c..f4ebf96f5308 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
@@ -163,7 +163,7 @@ asmlinkage long | |||
163 | compat_sys_set_robust_list(struct compat_robust_list_head __user *head, | 163 | compat_sys_set_robust_list(struct compat_robust_list_head __user *head, |
164 | compat_size_t len); | 164 | compat_size_t len); |
165 | asmlinkage long | 165 | asmlinkage long |
166 | compat_sys_get_robust_list(int pid, compat_uptr_t *head_ptr, | 166 | compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr, |
167 | compat_size_t __user *len_ptr); | 167 | compat_size_t __user *len_ptr); |
168 | 168 | ||
169 | long compat_sys_semctl(int first, int second, int third, void __user *uptr); | 169 | long compat_sys_semctl(int first, int second, int third, void __user *uptr); |
diff --git a/include/linux/config.h b/include/linux/config.h deleted file mode 100644 index 479ffb0a22d8..000000000000 --- a/include/linux/config.h +++ /dev/null | |||
@@ -1,9 +0,0 @@ | |||
1 | #ifndef _LINUX_CONFIG_H | ||
2 | #define _LINUX_CONFIG_H | ||
3 | /* This file is no longer in use and kept only for backward compatibility. | ||
4 | * autoconf.h is now included via -imacros on the commandline | ||
5 | */ | ||
6 | #warning Including config.h is deprecated. | ||
7 | #include <linux/autoconf.h> | ||
8 | |||
9 | #endif | ||
diff --git a/include/linux/dccp.h b/include/linux/dccp.h index d6f4ec467a4b..53553c99cad6 100644 --- a/include/linux/dccp.h +++ b/include/linux/dccp.h | |||
@@ -191,7 +191,7 @@ enum { | |||
191 | /* this structure is argument to DCCP_SOCKOPT_CHANGE_X */ | 191 | /* this structure is argument to DCCP_SOCKOPT_CHANGE_X */ |
192 | struct dccp_so_feat { | 192 | struct dccp_so_feat { |
193 | __u8 dccpsf_feat; | 193 | __u8 dccpsf_feat; |
194 | __u8 *dccpsf_val; | 194 | __u8 __user *dccpsf_val; |
195 | __u8 dccpsf_len; | 195 | __u8 dccpsf_len; |
196 | }; | 196 | }; |
197 | 197 | ||
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index ab2740832742..35cb38573583 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h | |||
@@ -44,7 +44,7 @@ struct vlan_ethhdr { | |||
44 | unsigned char h_source[ETH_ALEN]; /* source ether addr */ | 44 | unsigned char h_source[ETH_ALEN]; /* source ether addr */ |
45 | __be16 h_vlan_proto; /* Should always be 0x8100 */ | 45 | __be16 h_vlan_proto; /* Should always be 0x8100 */ |
46 | __be16 h_vlan_TCI; /* Encapsulates priority and VLAN ID */ | 46 | __be16 h_vlan_TCI; /* Encapsulates priority and VLAN ID */ |
47 | unsigned short h_vlan_encapsulated_proto; /* packet type ID field (or len) */ | 47 | __be16 h_vlan_encapsulated_proto; /* packet type ID field (or len) */ |
48 | }; | 48 | }; |
49 | 49 | ||
50 | #include <linux/skbuff.h> | 50 | #include <linux/skbuff.h> |
diff --git a/include/linux/io.h b/include/linux/io.h index aa3f5af670b5..2ad96c3f0e4e 100644 --- a/include/linux/io.h +++ b/include/linux/io.h | |||
@@ -18,6 +18,7 @@ | |||
18 | #ifndef _LINUX_IO_H | 18 | #ifndef _LINUX_IO_H |
19 | #define _LINUX_IO_H | 19 | #define _LINUX_IO_H |
20 | 20 | ||
21 | #include <linux/types.h> | ||
21 | #include <asm/io.h> | 22 | #include <asm/io.h> |
22 | #include <asm/page.h> | 23 | #include <asm/page.h> |
23 | 24 | ||
diff --git a/include/linux/ioc4.h b/include/linux/ioc4.h index de73a3289cc2..51e2b9fb6372 100644 --- a/include/linux/ioc4.h +++ b/include/linux/ioc4.h | |||
@@ -157,7 +157,7 @@ struct ioc4_driver_data { | |||
157 | unsigned long idd_bar0; | 157 | unsigned long idd_bar0; |
158 | struct pci_dev *idd_pdev; | 158 | struct pci_dev *idd_pdev; |
159 | const struct pci_device_id *idd_pci_id; | 159 | const struct pci_device_id *idd_pci_id; |
160 | struct __iomem ioc4_misc_regs *idd_misc_regs; | 160 | struct ioc4_misc_regs __iomem *idd_misc_regs; |
161 | unsigned long count_period; | 161 | unsigned long count_period; |
162 | void *idd_serial_data; | 162 | void *idd_serial_data; |
163 | unsigned int idd_variant; | 163 | unsigned int idd_variant; |
diff --git a/include/linux/istallion.h b/include/linux/istallion.h index 1f996621bc9c..b55e2a035605 100644 --- a/include/linux/istallion.h +++ b/include/linux/istallion.h | |||
@@ -100,7 +100,7 @@ typedef struct stlibrd { | |||
100 | unsigned int iobase; | 100 | unsigned int iobase; |
101 | int iosize; | 101 | int iosize; |
102 | unsigned long memaddr; | 102 | unsigned long memaddr; |
103 | void *membase; | 103 | void __iomem *membase; |
104 | int memsize; | 104 | int memsize; |
105 | int pagesize; | 105 | int pagesize; |
106 | int hostoffset; | 106 | int hostoffset; |
@@ -113,7 +113,7 @@ typedef struct stlibrd { | |||
113 | void (*enable)(struct stlibrd *brdp); | 113 | void (*enable)(struct stlibrd *brdp); |
114 | void (*reenable)(struct stlibrd *brdp); | 114 | void (*reenable)(struct stlibrd *brdp); |
115 | void (*disable)(struct stlibrd *brdp); | 115 | void (*disable)(struct stlibrd *brdp); |
116 | char *(*getmemptr)(struct stlibrd *brdp, unsigned long offset, int line); | 116 | void __iomem *(*getmemptr)(struct stlibrd *brdp, unsigned long offset, int line); |
117 | void (*intr)(struct stlibrd *brdp); | 117 | void (*intr)(struct stlibrd *brdp); |
118 | void (*reset)(struct stlibrd *brdp); | 118 | void (*reset)(struct stlibrd *brdp); |
119 | stliport_t *ports[STL_MAXPORTS]; | 119 | stliport_t *ports[STL_MAXPORTS]; |
diff --git a/include/linux/mm.h b/include/linux/mm.h index b7966ab8cb6a..26146623be2f 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -593,6 +593,7 @@ static inline int page_mapped(struct page *page) | |||
593 | */ | 593 | */ |
594 | #define NOPAGE_SIGBUS (NULL) | 594 | #define NOPAGE_SIGBUS (NULL) |
595 | #define NOPAGE_OOM ((struct page *) (-1)) | 595 | #define NOPAGE_OOM ((struct page *) (-1)) |
596 | #define NOPAGE_REFAULT ((struct page *) (-2)) /* Return to userspace, rerun */ | ||
596 | 597 | ||
597 | /* | 598 | /* |
598 | * Error return values for the *_nopfn functions | 599 | * Error return values for the *_nopfn functions |
diff --git a/include/linux/mmc/protocol.h b/include/linux/mmc/protocol.h index 81c3f77f652c..08dec8d9e703 100644 --- a/include/linux/mmc/protocol.h +++ b/include/linux/mmc/protocol.h | |||
@@ -83,6 +83,7 @@ | |||
83 | 83 | ||
84 | /* Application commands */ | 84 | /* Application commands */ |
85 | #define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */ | 85 | #define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */ |
86 | #define SD_APP_SEND_NUM_WR_BLKS 22 /* adtc R1 */ | ||
86 | #define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */ | 87 | #define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */ |
87 | #define SD_APP_SEND_SCR 51 /* adtc R1 */ | 88 | #define SD_APP_SEND_SCR 51 /* adtc R1 */ |
88 | 89 | ||
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index 46ec72fa2c84..600e3d387ffc 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
@@ -19,7 +19,7 @@ | |||
19 | * we force a syntax error here if it isn't. | 19 | * we force a syntax error here if it isn't. |
20 | */ | 20 | */ |
21 | #define get_cpu_var(var) (*({ \ | 21 | #define get_cpu_var(var) (*({ \ |
22 | extern int simple_indentifier_##var(void); \ | 22 | extern int simple_identifier_##var(void); \ |
23 | preempt_disable(); \ | 23 | preempt_disable(); \ |
24 | &__get_cpu_var(var); })) | 24 | &__get_cpu_var(var); })) |
25 | #define put_cpu_var(var) preempt_enable() | 25 | #define put_cpu_var(var) preempt_enable() |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 331f4502e92b..6735c1cf334c 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -1065,9 +1065,10 @@ static inline int pid_alive(struct task_struct *p) | |||
1065 | } | 1065 | } |
1066 | 1066 | ||
1067 | /** | 1067 | /** |
1068 | * is_init - check if a task structure is the first user space | 1068 | * is_init - check if a task structure is init |
1069 | * task the kernel created. | 1069 | * @tsk: Task structure to be checked. |
1070 | * @p: Task structure to be checked. | 1070 | * |
1071 | * Check if a task structure is the first user space task the kernel created. | ||
1071 | */ | 1072 | */ |
1072 | static inline int is_init(struct task_struct *tsk) | 1073 | static inline int is_init(struct task_struct *tsk) |
1073 | { | 1074 | { |
diff --git a/include/linux/smb_fs.h b/include/linux/smb_fs.h index 367d6c3e8ed4..13b3af547864 100644 --- a/include/linux/smb_fs.h +++ b/include/linux/smb_fs.h | |||
@@ -43,17 +43,17 @@ static inline struct smb_inode_info *SMB_I(struct inode *inode) | |||
43 | 43 | ||
44 | /* macro names are short for word, double-word, long value (?) */ | 44 | /* macro names are short for word, double-word, long value (?) */ |
45 | #define WVAL(buf,pos) \ | 45 | #define WVAL(buf,pos) \ |
46 | (le16_to_cpu(get_unaligned((u16 *)((u8 *)(buf) + (pos))))) | 46 | (le16_to_cpu(get_unaligned((__le16 *)((u8 *)(buf) + (pos))))) |
47 | #define DVAL(buf,pos) \ | 47 | #define DVAL(buf,pos) \ |
48 | (le32_to_cpu(get_unaligned((u32 *)((u8 *)(buf) + (pos))))) | 48 | (le32_to_cpu(get_unaligned((__le32 *)((u8 *)(buf) + (pos))))) |
49 | #define LVAL(buf,pos) \ | 49 | #define LVAL(buf,pos) \ |
50 | (le64_to_cpu(get_unaligned((u64 *)((u8 *)(buf) + (pos))))) | 50 | (le64_to_cpu(get_unaligned((__le64 *)((u8 *)(buf) + (pos))))) |
51 | #define WSET(buf,pos,val) \ | 51 | #define WSET(buf,pos,val) \ |
52 | put_unaligned(cpu_to_le16((u16)(val)), (u16 *)((u8 *)(buf) + (pos))) | 52 | put_unaligned(cpu_to_le16((u16)(val)), (__le16 *)((u8 *)(buf) + (pos))) |
53 | #define DSET(buf,pos,val) \ | 53 | #define DSET(buf,pos,val) \ |
54 | put_unaligned(cpu_to_le32((u32)(val)), (u32 *)((u8 *)(buf) + (pos))) | 54 | put_unaligned(cpu_to_le32((u32)(val)), (__le32 *)((u8 *)(buf) + (pos))) |
55 | #define LSET(buf,pos,val) \ | 55 | #define LSET(buf,pos,val) \ |
56 | put_unaligned(cpu_to_le64((u64)(val)), (u64 *)((u8 *)(buf) + (pos))) | 56 | put_unaligned(cpu_to_le64((u64)(val)), (__le64 *)((u8 *)(buf) + (pos))) |
57 | 57 | ||
58 | /* where to find the base of the SMB packet proper */ | 58 | /* where to find the base of the SMB packet proper */ |
59 | #define smb_base(buf) ((u8 *)(((u8 *)(buf))+4)) | 59 | #define smb_base(buf) ((u8 *)(((u8 *)(buf))+4)) |
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index d6288e89fd9d..9c9a8ad92477 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h | |||
@@ -57,7 +57,8 @@ struct svc_serv { | |||
57 | struct svc_stat * sv_stats; /* RPC statistics */ | 57 | struct svc_stat * sv_stats; /* RPC statistics */ |
58 | spinlock_t sv_lock; | 58 | spinlock_t sv_lock; |
59 | unsigned int sv_nrthreads; /* # of server threads */ | 59 | unsigned int sv_nrthreads; /* # of server threads */ |
60 | unsigned int sv_bufsz; /* datagram buffer size */ | 60 | unsigned int sv_max_payload; /* datagram payload size */ |
61 | unsigned int sv_max_mesg; /* max_payload + 1 page for overheads */ | ||
61 | unsigned int sv_xdrsize; /* XDR buffer size */ | 62 | unsigned int sv_xdrsize; /* XDR buffer size */ |
62 | 63 | ||
63 | struct list_head sv_permsocks; /* all permanent sockets */ | 64 | struct list_head sv_permsocks; /* all permanent sockets */ |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 3efcfc7e9c6c..b0ace3fd7eb9 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -593,7 +593,7 @@ asmlinkage long sys_tee(int fdin, int fdout, size_t len, unsigned int flags); | |||
593 | asmlinkage long sys_sync_file_range(int fd, loff_t offset, loff_t nbytes, | 593 | asmlinkage long sys_sync_file_range(int fd, loff_t offset, loff_t nbytes, |
594 | unsigned int flags); | 594 | unsigned int flags); |
595 | asmlinkage long sys_get_robust_list(int pid, | 595 | asmlinkage long sys_get_robust_list(int pid, |
596 | struct robust_list_head __user **head_ptr, | 596 | struct robust_list_head __user * __user *head_ptr, |
597 | size_t __user *len_ptr); | 597 | size_t __user *len_ptr); |
598 | asmlinkage long sys_set_robust_list(struct robust_list_head __user *head, | 598 | asmlinkage long sys_set_robust_list(struct robust_list_head __user *head, |
599 | size_t len); | 599 | size_t len); |
diff --git a/include/linux/tifm.h b/include/linux/tifm.h index 203dd5e11ecb..dfb8052eee5e 100644 --- a/include/linux/tifm.h +++ b/include/linux/tifm.h | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/wait.h> | 17 | #include <linux/wait.h> |
18 | #include <linux/delay.h> | 18 | #include <linux/delay.h> |
19 | #include <linux/pci.h> | 19 | #include <linux/pci.h> |
20 | #include <linux/scatterlist.h> | ||
20 | 21 | ||
21 | /* Host registers (relative to pci base address): */ | 22 | /* Host registers (relative to pci base address): */ |
22 | enum { | 23 | enum { |
diff --git a/include/linux/timex.h b/include/linux/timex.h index 049dfe4a11f2..db501dc23c29 100644 --- a/include/linux/timex.h +++ b/include/linux/timex.h | |||
@@ -293,6 +293,9 @@ extern void second_overflow(void); | |||
293 | extern void update_ntp_one_tick(void); | 293 | extern void update_ntp_one_tick(void); |
294 | extern int do_adjtimex(struct timex *); | 294 | extern int do_adjtimex(struct timex *); |
295 | 295 | ||
296 | /* Don't use! Compatibility define for existing users. */ | ||
297 | #define tickadj (500/HZ ? : 1) | ||
298 | |||
296 | #endif /* KERNEL */ | 299 | #endif /* KERNEL */ |
297 | 300 | ||
298 | #endif /* LINUX_TIMEX_H */ | 301 | #endif /* LINUX_TIMEX_H */ |
diff --git a/include/linux/ufs_fs.h b/include/linux/ufs_fs.h index fc62887c5206..61eef508b041 100644 --- a/include/linux/ufs_fs.h +++ b/include/linux/ufs_fs.h | |||
@@ -351,6 +351,14 @@ struct ufs2_csum_total { | |||
351 | __fs64 cs_spare[3]; /* future expansion */ | 351 | __fs64 cs_spare[3]; /* future expansion */ |
352 | }; | 352 | }; |
353 | 353 | ||
354 | struct ufs_csum_core { | ||
355 | __u64 cs_ndir; /* number of directories */ | ||
356 | __u64 cs_nbfree; /* number of free blocks */ | ||
357 | __u64 cs_nifree; /* number of free inodes */ | ||
358 | __u64 cs_nffree; /* number of free frags */ | ||
359 | __u64 cs_numclusters; /* number of free clusters */ | ||
360 | }; | ||
361 | |||
354 | /* | 362 | /* |
355 | * File system flags | 363 | * File system flags |
356 | */ | 364 | */ |
@@ -715,7 +723,7 @@ struct ufs_cg_private_info { | |||
715 | 723 | ||
716 | struct ufs_sb_private_info { | 724 | struct ufs_sb_private_info { |
717 | struct ufs_buffer_head s_ubh; /* buffer containing super block */ | 725 | struct ufs_buffer_head s_ubh; /* buffer containing super block */ |
718 | struct ufs2_csum_total cs_total; | 726 | struct ufs_csum_core cs_total; |
719 | __u32 s_sblkno; /* offset of super-blocks in filesys */ | 727 | __u32 s_sblkno; /* offset of super-blocks in filesys */ |
720 | __u32 s_cblkno; /* offset of cg-block in filesys */ | 728 | __u32 s_cblkno; /* offset of cg-block in filesys */ |
721 | __u32 s_iblkno; /* offset of inode-blocks in filesys */ | 729 | __u32 s_iblkno; /* offset of inode-blocks in filesys */ |
diff --git a/include/linux/xattr.h b/include/linux/xattr.h index cda8a96e2fa0..0e7f1e20ea45 100644 --- a/include/linux/xattr.h +++ b/include/linux/xattr.h | |||
@@ -41,6 +41,7 @@ struct xattr_handler { | |||
41 | }; | 41 | }; |
42 | 42 | ||
43 | ssize_t vfs_getxattr(struct dentry *, char *, void *, size_t); | 43 | ssize_t vfs_getxattr(struct dentry *, char *, void *, size_t); |
44 | ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); | ||
44 | int vfs_setxattr(struct dentry *, char *, void *, size_t, int); | 45 | int vfs_setxattr(struct dentry *, char *, void *, size_t, int); |
45 | int vfs_removexattr(struct dentry *, char *); | 46 | int vfs_removexattr(struct dentry *, char *); |
46 | 47 | ||
diff --git a/include/sound/core.h b/include/sound/core.h index b056ea925ecf..fa1ca0127bab 100644 --- a/include/sound/core.h +++ b/include/sound/core.h | |||
@@ -89,10 +89,10 @@ struct snd_device { | |||
89 | struct snd_monitor_file { | 89 | struct snd_monitor_file { |
90 | struct file *file; | 90 | struct file *file; |
91 | struct snd_monitor_file *next; | 91 | struct snd_monitor_file *next; |
92 | const struct file_operations *disconnected_f_op; | ||
93 | struct list_head shutdown_list; | ||
92 | }; | 94 | }; |
93 | 95 | ||
94 | struct snd_shutdown_f_ops; /* define it later in init.c */ | ||
95 | |||
96 | /* main structure for soundcard */ | 96 | /* main structure for soundcard */ |
97 | 97 | ||
98 | struct snd_card { | 98 | struct snd_card { |
diff --git a/include/sound/version.h b/include/sound/version.h index 2ee849d0e198..4ad86eb6440b 100644 --- a/include/sound/version.h +++ b/include/sound/version.h | |||
@@ -1,3 +1,3 @@ | |||
1 | /* include/version.h. Generated by configure. */ | 1 | /* include/version.h. Generated by alsa/ksync script. */ |
2 | #define CONFIG_SND_VERSION "1.0.12rc1" | 2 | #define CONFIG_SND_VERSION "1.0.13" |
3 | #define CONFIG_SND_DATE " (Thu Jun 22 13:55:50 2006 UTC)" | 3 | #define CONFIG_SND_DATE " (Fri Oct 06 18:28:19 2006 UTC)" |
diff --git a/kernel/audit.c b/kernel/audit.c index f9889ee77825..98106f6078b0 100644 --- a/kernel/audit.c +++ b/kernel/audit.c | |||
@@ -340,7 +340,7 @@ static int kauditd_thread(void *dummy) | |||
340 | { | 340 | { |
341 | struct sk_buff *skb; | 341 | struct sk_buff *skb; |
342 | 342 | ||
343 | while (1) { | 343 | while (!kthread_should_stop()) { |
344 | skb = skb_dequeue(&audit_skb_queue); | 344 | skb = skb_dequeue(&audit_skb_queue); |
345 | wake_up(&audit_backlog_wait); | 345 | wake_up(&audit_backlog_wait); |
346 | if (skb) { | 346 | if (skb) { |
@@ -369,6 +369,7 @@ static int kauditd_thread(void *dummy) | |||
369 | remove_wait_queue(&kauditd_wait, &wait); | 369 | remove_wait_queue(&kauditd_wait, &wait); |
370 | } | 370 | } |
371 | } | 371 | } |
372 | return 0; | ||
372 | } | 373 | } |
373 | 374 | ||
374 | int audit_send_list(void *_dest) | 375 | int audit_send_list(void *_dest) |
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 9d850ae13b1b..6313c38c930e 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -2137,7 +2137,7 @@ static int cpuset_handle_cpuhp(struct notifier_block *nb, | |||
2137 | * See also the previous routine cpuset_handle_cpuhp(). | 2137 | * See also the previous routine cpuset_handle_cpuhp(). |
2138 | */ | 2138 | */ |
2139 | 2139 | ||
2140 | void cpuset_track_online_nodes() | 2140 | void cpuset_track_online_nodes(void) |
2141 | { | 2141 | { |
2142 | common_cpu_mem_hotplug_unplug(); | 2142 | common_cpu_mem_hotplug_unplug(); |
2143 | } | 2143 | } |
diff --git a/kernel/futex.c b/kernel/futex.c index 4aaf91951a43..b364e0026191 100644 --- a/kernel/futex.c +++ b/kernel/futex.c | |||
@@ -1612,10 +1612,10 @@ sys_set_robust_list(struct robust_list_head __user *head, | |||
1612 | * @len_ptr: pointer to a length field, the kernel fills in the header size | 1612 | * @len_ptr: pointer to a length field, the kernel fills in the header size |
1613 | */ | 1613 | */ |
1614 | asmlinkage long | 1614 | asmlinkage long |
1615 | sys_get_robust_list(int pid, struct robust_list_head __user **head_ptr, | 1615 | sys_get_robust_list(int pid, struct robust_list_head __user * __user *head_ptr, |
1616 | size_t __user *len_ptr) | 1616 | size_t __user *len_ptr) |
1617 | { | 1617 | { |
1618 | struct robust_list_head *head; | 1618 | struct robust_list_head __user *head; |
1619 | unsigned long ret; | 1619 | unsigned long ret; |
1620 | 1620 | ||
1621 | if (!pid) | 1621 | if (!pid) |
@@ -1694,14 +1694,15 @@ retry: | |||
1694 | * Fetch a robust-list pointer. Bit 0 signals PI futexes: | 1694 | * Fetch a robust-list pointer. Bit 0 signals PI futexes: |
1695 | */ | 1695 | */ |
1696 | static inline int fetch_robust_entry(struct robust_list __user **entry, | 1696 | static inline int fetch_robust_entry(struct robust_list __user **entry, |
1697 | struct robust_list __user **head, int *pi) | 1697 | struct robust_list __user * __user *head, |
1698 | int *pi) | ||
1698 | { | 1699 | { |
1699 | unsigned long uentry; | 1700 | unsigned long uentry; |
1700 | 1701 | ||
1701 | if (get_user(uentry, (unsigned long *)head)) | 1702 | if (get_user(uentry, (unsigned long __user *)head)) |
1702 | return -EFAULT; | 1703 | return -EFAULT; |
1703 | 1704 | ||
1704 | *entry = (void *)(uentry & ~1UL); | 1705 | *entry = (void __user *)(uentry & ~1UL); |
1705 | *pi = uentry & 1; | 1706 | *pi = uentry & 1; |
1706 | 1707 | ||
1707 | return 0; | 1708 | return 0; |
@@ -1739,7 +1740,7 @@ void exit_robust_list(struct task_struct *curr) | |||
1739 | return; | 1740 | return; |
1740 | 1741 | ||
1741 | if (pending) | 1742 | if (pending) |
1742 | handle_futex_death((void *)pending + futex_offset, curr, pip); | 1743 | handle_futex_death((void __user *)pending + futex_offset, curr, pip); |
1743 | 1744 | ||
1744 | while (entry != &head->list) { | 1745 | while (entry != &head->list) { |
1745 | /* | 1746 | /* |
@@ -1747,7 +1748,7 @@ void exit_robust_list(struct task_struct *curr) | |||
1747 | * don't process it twice: | 1748 | * don't process it twice: |
1748 | */ | 1749 | */ |
1749 | if (entry != pending) | 1750 | if (entry != pending) |
1750 | if (handle_futex_death((void *)entry + futex_offset, | 1751 | if (handle_futex_death((void __user *)entry + futex_offset, |
1751 | curr, pi)) | 1752 | curr, pi)) |
1752 | return; | 1753 | return; |
1753 | /* | 1754 | /* |
diff --git a/kernel/futex_compat.c b/kernel/futex_compat.c index c5cca3f65cb7..50f24eea6cd0 100644 --- a/kernel/futex_compat.c +++ b/kernel/futex_compat.c | |||
@@ -18,7 +18,7 @@ | |||
18 | */ | 18 | */ |
19 | static inline int | 19 | static inline int |
20 | fetch_robust_entry(compat_uptr_t *uentry, struct robust_list __user **entry, | 20 | fetch_robust_entry(compat_uptr_t *uentry, struct robust_list __user **entry, |
21 | compat_uptr_t *head, int *pi) | 21 | compat_uptr_t __user *head, int *pi) |
22 | { | 22 | { |
23 | if (get_user(*uentry, head)) | 23 | if (get_user(*uentry, head)) |
24 | return -EFAULT; | 24 | return -EFAULT; |
@@ -62,7 +62,7 @@ void compat_exit_robust_list(struct task_struct *curr) | |||
62 | &head->list_op_pending, &pip)) | 62 | &head->list_op_pending, &pip)) |
63 | return; | 63 | return; |
64 | if (upending) | 64 | if (upending) |
65 | handle_futex_death((void *)pending + futex_offset, curr, pip); | 65 | handle_futex_death((void __user *)pending + futex_offset, curr, pip); |
66 | 66 | ||
67 | while (compat_ptr(uentry) != &head->list) { | 67 | while (compat_ptr(uentry) != &head->list) { |
68 | /* | 68 | /* |
@@ -70,7 +70,7 @@ void compat_exit_robust_list(struct task_struct *curr) | |||
70 | * dont process it twice: | 70 | * dont process it twice: |
71 | */ | 71 | */ |
72 | if (entry != pending) | 72 | if (entry != pending) |
73 | if (handle_futex_death((void *)entry + futex_offset, | 73 | if (handle_futex_death((void __user *)entry + futex_offset, |
74 | curr, pi)) | 74 | curr, pi)) |
75 | return; | 75 | return; |
76 | 76 | ||
@@ -78,7 +78,7 @@ void compat_exit_robust_list(struct task_struct *curr) | |||
78 | * Fetch the next entry in the list: | 78 | * Fetch the next entry in the list: |
79 | */ | 79 | */ |
80 | if (fetch_robust_entry(&uentry, &entry, | 80 | if (fetch_robust_entry(&uentry, &entry, |
81 | (compat_uptr_t *)&entry->next, &pi)) | 81 | (compat_uptr_t __user *)&entry->next, &pi)) |
82 | return; | 82 | return; |
83 | /* | 83 | /* |
84 | * Avoid excessively long or circular lists: | 84 | * Avoid excessively long or circular lists: |
@@ -103,10 +103,10 @@ compat_sys_set_robust_list(struct compat_robust_list_head __user *head, | |||
103 | } | 103 | } |
104 | 104 | ||
105 | asmlinkage long | 105 | asmlinkage long |
106 | compat_sys_get_robust_list(int pid, compat_uptr_t *head_ptr, | 106 | compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr, |
107 | compat_size_t __user *len_ptr) | 107 | compat_size_t __user *len_ptr) |
108 | { | 108 | { |
109 | struct compat_robust_list_head *head; | 109 | struct compat_robust_list_head __user *head; |
110 | unsigned long ret; | 110 | unsigned long ret; |
111 | 111 | ||
112 | if (!pid) | 112 | if (!pid) |
diff --git a/kernel/irq/resend.c b/kernel/irq/resend.c index 35f10f7ff94a..5bfeaed7e487 100644 --- a/kernel/irq/resend.c +++ b/kernel/irq/resend.c | |||
@@ -38,7 +38,7 @@ static void resend_irqs(unsigned long arg) | |||
38 | clear_bit(irq, irqs_resend); | 38 | clear_bit(irq, irqs_resend); |
39 | desc = irq_desc + irq; | 39 | desc = irq_desc + irq; |
40 | local_irq_disable(); | 40 | local_irq_disable(); |
41 | desc->handle_irq(irq, desc, NULL); | 41 | desc->handle_irq(irq, desc); |
42 | local_irq_enable(); | 42 | local_irq_enable(); |
43 | } | 43 | } |
44 | } | 44 | } |
diff --git a/kernel/power/user.c b/kernel/power/user.c index 72825c853cd7..93b5dd283dea 100644 --- a/kernel/power/user.c +++ b/kernel/power/user.c | |||
@@ -145,10 +145,10 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp, | |||
145 | error = freeze_processes(); | 145 | error = freeze_processes(); |
146 | if (error) { | 146 | if (error) { |
147 | thaw_processes(); | 147 | thaw_processes(); |
148 | enable_nonboot_cpus(); | ||
148 | error = -EBUSY; | 149 | error = -EBUSY; |
149 | } | 150 | } |
150 | } | 151 | } |
151 | enable_nonboot_cpus(); | ||
152 | up(&pm_sem); | 152 | up(&pm_sem); |
153 | if (!error) | 153 | if (!error) |
154 | data->frozen = 1; | 154 | data->frozen = 1; |
diff --git a/kernel/relay.c b/kernel/relay.c index 1d63ecddfa70..f04bbdb56ac2 100644 --- a/kernel/relay.c +++ b/kernel/relay.c | |||
@@ -887,7 +887,7 @@ static int subbuf_read_actor(size_t read_start, | |||
887 | 887 | ||
888 | from = buf->start + read_start; | 888 | from = buf->start + read_start; |
889 | ret = avail; | 889 | ret = avail; |
890 | if (copy_to_user(desc->arg.data, from, avail)) { | 890 | if (copy_to_user(desc->arg.buf, from, avail)) { |
891 | desc->error = -EFAULT; | 891 | desc->error = -EFAULT; |
892 | ret = 0; | 892 | ret = 0; |
893 | } | 893 | } |
@@ -946,24 +946,17 @@ typedef int (*subbuf_actor_t) (size_t read_start, | |||
946 | */ | 946 | */ |
947 | static inline ssize_t relay_file_read_subbufs(struct file *filp, | 947 | static inline ssize_t relay_file_read_subbufs(struct file *filp, |
948 | loff_t *ppos, | 948 | loff_t *ppos, |
949 | size_t count, | ||
950 | subbuf_actor_t subbuf_actor, | 949 | subbuf_actor_t subbuf_actor, |
951 | read_actor_t actor, | 950 | read_actor_t actor, |
952 | void *target) | 951 | read_descriptor_t *desc) |
953 | { | 952 | { |
954 | struct rchan_buf *buf = filp->private_data; | 953 | struct rchan_buf *buf = filp->private_data; |
955 | size_t read_start, avail; | 954 | size_t read_start, avail; |
956 | read_descriptor_t desc; | ||
957 | int ret; | 955 | int ret; |
958 | 956 | ||
959 | if (!count) | 957 | if (!desc->count) |
960 | return 0; | 958 | return 0; |
961 | 959 | ||
962 | desc.written = 0; | ||
963 | desc.count = count; | ||
964 | desc.arg.data = target; | ||
965 | desc.error = 0; | ||
966 | |||
967 | mutex_lock(&filp->f_dentry->d_inode->i_mutex); | 960 | mutex_lock(&filp->f_dentry->d_inode->i_mutex); |
968 | do { | 961 | do { |
969 | if (!relay_file_read_avail(buf, *ppos)) | 962 | if (!relay_file_read_avail(buf, *ppos)) |
@@ -974,19 +967,19 @@ static inline ssize_t relay_file_read_subbufs(struct file *filp, | |||
974 | if (!avail) | 967 | if (!avail) |
975 | break; | 968 | break; |
976 | 969 | ||
977 | avail = min(desc.count, avail); | 970 | avail = min(desc->count, avail); |
978 | ret = subbuf_actor(read_start, buf, avail, &desc, actor); | 971 | ret = subbuf_actor(read_start, buf, avail, desc, actor); |
979 | if (desc.error < 0) | 972 | if (desc->error < 0) |
980 | break; | 973 | break; |
981 | 974 | ||
982 | if (ret) { | 975 | if (ret) { |
983 | relay_file_read_consume(buf, read_start, ret); | 976 | relay_file_read_consume(buf, read_start, ret); |
984 | *ppos = relay_file_read_end_pos(buf, read_start, ret); | 977 | *ppos = relay_file_read_end_pos(buf, read_start, ret); |
985 | } | 978 | } |
986 | } while (desc.count && ret); | 979 | } while (desc->count && ret); |
987 | mutex_unlock(&filp->f_dentry->d_inode->i_mutex); | 980 | mutex_unlock(&filp->f_dentry->d_inode->i_mutex); |
988 | 981 | ||
989 | return desc.written; | 982 | return desc->written; |
990 | } | 983 | } |
991 | 984 | ||
992 | static ssize_t relay_file_read(struct file *filp, | 985 | static ssize_t relay_file_read(struct file *filp, |
@@ -994,8 +987,13 @@ static ssize_t relay_file_read(struct file *filp, | |||
994 | size_t count, | 987 | size_t count, |
995 | loff_t *ppos) | 988 | loff_t *ppos) |
996 | { | 989 | { |
997 | return relay_file_read_subbufs(filp, ppos, count, subbuf_read_actor, | 990 | read_descriptor_t desc; |
998 | NULL, buffer); | 991 | desc.written = 0; |
992 | desc.count = count; | ||
993 | desc.arg.buf = buffer; | ||
994 | desc.error = 0; | ||
995 | return relay_file_read_subbufs(filp, ppos, subbuf_read_actor, | ||
996 | NULL, &desc); | ||
999 | } | 997 | } |
1000 | 998 | ||
1001 | static ssize_t relay_file_sendfile(struct file *filp, | 999 | static ssize_t relay_file_sendfile(struct file *filp, |
@@ -1004,8 +1002,13 @@ static ssize_t relay_file_sendfile(struct file *filp, | |||
1004 | read_actor_t actor, | 1002 | read_actor_t actor, |
1005 | void *target) | 1003 | void *target) |
1006 | { | 1004 | { |
1007 | return relay_file_read_subbufs(filp, ppos, count, subbuf_send_actor, | 1005 | read_descriptor_t desc; |
1008 | actor, target); | 1006 | desc.written = 0; |
1007 | desc.count = count; | ||
1008 | desc.arg.data = target; | ||
1009 | desc.error = 0; | ||
1010 | return relay_file_read_subbufs(filp, ppos, subbuf_send_actor, | ||
1011 | actor, &desc); | ||
1009 | } | 1012 | } |
1010 | 1013 | ||
1011 | struct file_operations relay_file_operations = { | 1014 | struct file_operations relay_file_operations = { |
diff --git a/lib/irq_regs.c b/lib/irq_regs.c index 101b1a4f9b14..753880a5440c 100644 --- a/lib/irq_regs.c +++ b/lib/irq_regs.c | |||
@@ -8,8 +8,10 @@ | |||
8 | * as published by the Free Software Foundation; either version | 8 | * as published by the Free Software Foundation; either version |
9 | * 2 of the License, or (at your option) any later version. | 9 | * 2 of the License, or (at your option) any later version. |
10 | */ | 10 | */ |
11 | #include <linux/module.h> | ||
11 | #include <asm/irq_regs.h> | 12 | #include <asm/irq_regs.h> |
12 | 13 | ||
13 | #ifndef ARCH_HAS_OWN_IRQ_REGS | 14 | #ifndef ARCH_HAS_OWN_IRQ_REGS |
14 | DEFINE_PER_CPU(struct pt_regs *, __irq_regs); | 15 | DEFINE_PER_CPU(struct pt_regs *, __irq_regs); |
16 | EXPORT_PER_CPU_SYMBOL(__irq_regs); | ||
15 | #endif | 17 | #endif |
diff --git a/lib/radix-tree.c b/lib/radix-tree.c index 637d55608de5..aa9bfd0bdbd1 100644 --- a/lib/radix-tree.c +++ b/lib/radix-tree.c | |||
@@ -160,13 +160,13 @@ static inline int tag_get(struct radix_tree_node *node, unsigned int tag, | |||
160 | 160 | ||
161 | static inline void root_tag_set(struct radix_tree_root *root, unsigned int tag) | 161 | static inline void root_tag_set(struct radix_tree_root *root, unsigned int tag) |
162 | { | 162 | { |
163 | root->gfp_mask |= (1 << (tag + __GFP_BITS_SHIFT)); | 163 | root->gfp_mask |= (__force gfp_t)(1 << (tag + __GFP_BITS_SHIFT)); |
164 | } | 164 | } |
165 | 165 | ||
166 | 166 | ||
167 | static inline void root_tag_clear(struct radix_tree_root *root, unsigned int tag) | 167 | static inline void root_tag_clear(struct radix_tree_root *root, unsigned int tag) |
168 | { | 168 | { |
169 | root->gfp_mask &= ~(1 << (tag + __GFP_BITS_SHIFT)); | 169 | root->gfp_mask &= (__force gfp_t)~(1 << (tag + __GFP_BITS_SHIFT)); |
170 | } | 170 | } |
171 | 171 | ||
172 | static inline void root_tag_clear_all(struct radix_tree_root *root) | 172 | static inline void root_tag_clear_all(struct radix_tree_root *root) |
@@ -176,7 +176,7 @@ static inline void root_tag_clear_all(struct radix_tree_root *root) | |||
176 | 176 | ||
177 | static inline int root_tag_get(struct radix_tree_root *root, unsigned int tag) | 177 | static inline int root_tag_get(struct radix_tree_root *root, unsigned int tag) |
178 | { | 178 | { |
179 | return root->gfp_mask & (1 << (tag + __GFP_BITS_SHIFT)); | 179 | return (__force unsigned)root->gfp_mask & (1 << (tag + __GFP_BITS_SHIFT)); |
180 | } | 180 | } |
181 | 181 | ||
182 | /* | 182 | /* |
diff --git a/mm/memory.c b/mm/memory.c index 9cf3f341a28a..b5a4aadd961a 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
@@ -1086,6 +1086,7 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, | |||
1086 | default: | 1086 | default: |
1087 | BUG(); | 1087 | BUG(); |
1088 | } | 1088 | } |
1089 | cond_resched(); | ||
1089 | } | 1090 | } |
1090 | if (pages) { | 1091 | if (pages) { |
1091 | pages[i] = page; | 1092 | pages[i] = page; |
@@ -2169,11 +2170,13 @@ retry: | |||
2169 | * after the next truncate_count read. | 2170 | * after the next truncate_count read. |
2170 | */ | 2171 | */ |
2171 | 2172 | ||
2172 | /* no page was available -- either SIGBUS or OOM */ | 2173 | /* no page was available -- either SIGBUS, OOM or REFAULT */ |
2173 | if (new_page == NOPAGE_SIGBUS) | 2174 | if (unlikely(new_page == NOPAGE_SIGBUS)) |
2174 | return VM_FAULT_SIGBUS; | 2175 | return VM_FAULT_SIGBUS; |
2175 | if (new_page == NOPAGE_OOM) | 2176 | else if (unlikely(new_page == NOPAGE_OOM)) |
2176 | return VM_FAULT_OOM; | 2177 | return VM_FAULT_OOM; |
2178 | else if (unlikely(new_page == NOPAGE_REFAULT)) | ||
2179 | return VM_FAULT_MINOR; | ||
2177 | 2180 | ||
2178 | /* | 2181 | /* |
2179 | * Should we do an early C-O-W break? | 2182 | * Should we do an early C-O-W break? |
@@ -1106,15 +1106,18 @@ static inline int cache_free_alien(struct kmem_cache *cachep, void *objp) | |||
1106 | int nodeid = slabp->nodeid; | 1106 | int nodeid = slabp->nodeid; |
1107 | struct kmem_list3 *l3; | 1107 | struct kmem_list3 *l3; |
1108 | struct array_cache *alien = NULL; | 1108 | struct array_cache *alien = NULL; |
1109 | int node; | ||
1110 | |||
1111 | node = numa_node_id(); | ||
1109 | 1112 | ||
1110 | /* | 1113 | /* |
1111 | * Make sure we are not freeing a object from another node to the array | 1114 | * Make sure we are not freeing a object from another node to the array |
1112 | * cache on this cpu. | 1115 | * cache on this cpu. |
1113 | */ | 1116 | */ |
1114 | if (likely(slabp->nodeid == numa_node_id())) | 1117 | if (likely(slabp->nodeid == node)) |
1115 | return 0; | 1118 | return 0; |
1116 | 1119 | ||
1117 | l3 = cachep->nodelists[numa_node_id()]; | 1120 | l3 = cachep->nodelists[node]; |
1118 | STATS_INC_NODEFREES(cachep); | 1121 | STATS_INC_NODEFREES(cachep); |
1119 | if (l3->alien && l3->alien[nodeid]) { | 1122 | if (l3->alien && l3->alien[nodeid]) { |
1120 | alien = l3->alien[nodeid]; | 1123 | alien = l3->alien[nodeid]; |
@@ -1325,7 +1328,6 @@ static void init_list(struct kmem_cache *cachep, struct kmem_list3 *list, | |||
1325 | { | 1328 | { |
1326 | struct kmem_list3 *ptr; | 1329 | struct kmem_list3 *ptr; |
1327 | 1330 | ||
1328 | BUG_ON(cachep->nodelists[nodeid] != list); | ||
1329 | ptr = kmalloc_node(sizeof(struct kmem_list3), GFP_KERNEL, nodeid); | 1331 | ptr = kmalloc_node(sizeof(struct kmem_list3), GFP_KERNEL, nodeid); |
1330 | BUG_ON(!ptr); | 1332 | BUG_ON(!ptr); |
1331 | 1333 | ||
@@ -1352,6 +1354,7 @@ void __init kmem_cache_init(void) | |||
1352 | struct cache_names *names; | 1354 | struct cache_names *names; |
1353 | int i; | 1355 | int i; |
1354 | int order; | 1356 | int order; |
1357 | int node; | ||
1355 | 1358 | ||
1356 | for (i = 0; i < NUM_INIT_LISTS; i++) { | 1359 | for (i = 0; i < NUM_INIT_LISTS; i++) { |
1357 | kmem_list3_init(&initkmem_list3[i]); | 1360 | kmem_list3_init(&initkmem_list3[i]); |
@@ -1386,12 +1389,14 @@ void __init kmem_cache_init(void) | |||
1386 | * 6) Resize the head arrays of the kmalloc caches to their final sizes. | 1389 | * 6) Resize the head arrays of the kmalloc caches to their final sizes. |
1387 | */ | 1390 | */ |
1388 | 1391 | ||
1392 | node = numa_node_id(); | ||
1393 | |||
1389 | /* 1) create the cache_cache */ | 1394 | /* 1) create the cache_cache */ |
1390 | INIT_LIST_HEAD(&cache_chain); | 1395 | INIT_LIST_HEAD(&cache_chain); |
1391 | list_add(&cache_cache.next, &cache_chain); | 1396 | list_add(&cache_cache.next, &cache_chain); |
1392 | cache_cache.colour_off = cache_line_size(); | 1397 | cache_cache.colour_off = cache_line_size(); |
1393 | cache_cache.array[smp_processor_id()] = &initarray_cache.cache; | 1398 | cache_cache.array[smp_processor_id()] = &initarray_cache.cache; |
1394 | cache_cache.nodelists[numa_node_id()] = &initkmem_list3[CACHE_CACHE]; | 1399 | cache_cache.nodelists[node] = &initkmem_list3[CACHE_CACHE]; |
1395 | 1400 | ||
1396 | cache_cache.buffer_size = ALIGN(cache_cache.buffer_size, | 1401 | cache_cache.buffer_size = ALIGN(cache_cache.buffer_size, |
1397 | cache_line_size()); | 1402 | cache_line_size()); |
@@ -1496,19 +1501,18 @@ void __init kmem_cache_init(void) | |||
1496 | } | 1501 | } |
1497 | /* 5) Replace the bootstrap kmem_list3's */ | 1502 | /* 5) Replace the bootstrap kmem_list3's */ |
1498 | { | 1503 | { |
1499 | int node; | 1504 | int nid; |
1505 | |||
1500 | /* Replace the static kmem_list3 structures for the boot cpu */ | 1506 | /* Replace the static kmem_list3 structures for the boot cpu */ |
1501 | init_list(&cache_cache, &initkmem_list3[CACHE_CACHE], | 1507 | init_list(&cache_cache, &initkmem_list3[CACHE_CACHE], node); |
1502 | numa_node_id()); | ||
1503 | 1508 | ||
1504 | for_each_online_node(node) { | 1509 | for_each_online_node(nid) { |
1505 | init_list(malloc_sizes[INDEX_AC].cs_cachep, | 1510 | init_list(malloc_sizes[INDEX_AC].cs_cachep, |
1506 | &initkmem_list3[SIZE_AC + node], node); | 1511 | &initkmem_list3[SIZE_AC + nid], nid); |
1507 | 1512 | ||
1508 | if (INDEX_AC != INDEX_L3) { | 1513 | if (INDEX_AC != INDEX_L3) { |
1509 | init_list(malloc_sizes[INDEX_L3].cs_cachep, | 1514 | init_list(malloc_sizes[INDEX_L3].cs_cachep, |
1510 | &initkmem_list3[SIZE_L3 + node], | 1515 | &initkmem_list3[SIZE_L3 + nid], nid); |
1511 | node); | ||
1512 | } | 1516 | } |
1513 | } | 1517 | } |
1514 | } | 1518 | } |
@@ -2918,6 +2922,9 @@ static void *cache_alloc_refill(struct kmem_cache *cachep, gfp_t flags) | |||
2918 | int batchcount; | 2922 | int batchcount; |
2919 | struct kmem_list3 *l3; | 2923 | struct kmem_list3 *l3; |
2920 | struct array_cache *ac; | 2924 | struct array_cache *ac; |
2925 | int node; | ||
2926 | |||
2927 | node = numa_node_id(); | ||
2921 | 2928 | ||
2922 | check_irq_off(); | 2929 | check_irq_off(); |
2923 | ac = cpu_cache_get(cachep); | 2930 | ac = cpu_cache_get(cachep); |
@@ -2931,7 +2938,7 @@ retry: | |||
2931 | */ | 2938 | */ |
2932 | batchcount = BATCHREFILL_LIMIT; | 2939 | batchcount = BATCHREFILL_LIMIT; |
2933 | } | 2940 | } |
2934 | l3 = cachep->nodelists[numa_node_id()]; | 2941 | l3 = cachep->nodelists[node]; |
2935 | 2942 | ||
2936 | BUG_ON(ac->avail > 0 || !l3); | 2943 | BUG_ON(ac->avail > 0 || !l3); |
2937 | spin_lock(&l3->list_lock); | 2944 | spin_lock(&l3->list_lock); |
@@ -2961,7 +2968,7 @@ retry: | |||
2961 | STATS_SET_HIGH(cachep); | 2968 | STATS_SET_HIGH(cachep); |
2962 | 2969 | ||
2963 | ac->entry[ac->avail++] = slab_get_obj(cachep, slabp, | 2970 | ac->entry[ac->avail++] = slab_get_obj(cachep, slabp, |
2964 | numa_node_id()); | 2971 | node); |
2965 | } | 2972 | } |
2966 | check_slabp(cachep, slabp); | 2973 | check_slabp(cachep, slabp); |
2967 | 2974 | ||
@@ -2980,7 +2987,7 @@ alloc_done: | |||
2980 | 2987 | ||
2981 | if (unlikely(!ac->avail)) { | 2988 | if (unlikely(!ac->avail)) { |
2982 | int x; | 2989 | int x; |
2983 | x = cache_grow(cachep, flags, numa_node_id()); | 2990 | x = cache_grow(cachep, flags, node); |
2984 | 2991 | ||
2985 | /* cache_grow can reenable interrupts, then ac could change. */ | 2992 | /* cache_grow can reenable interrupts, then ac could change. */ |
2986 | ac = cpu_cache_get(cachep); | 2993 | ac = cpu_cache_get(cachep); |
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index da9cfe927158..60a508eb1945 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c | |||
@@ -62,7 +62,7 @@ int vlan_dev_rebuild_header(struct sk_buff *skb) | |||
62 | default: | 62 | default: |
63 | printk(VLAN_DBG | 63 | printk(VLAN_DBG |
64 | "%s: unable to resolve type %X addresses.\n", | 64 | "%s: unable to resolve type %X addresses.\n", |
65 | dev->name, (int)veth->h_vlan_encapsulated_proto); | 65 | dev->name, ntohs(veth->h_vlan_encapsulated_proto)); |
66 | 66 | ||
67 | memcpy(veth->h_source, dev->dev_addr, ETH_ALEN); | 67 | memcpy(veth->h_source, dev->dev_addr, ETH_ALEN); |
68 | break; | 68 | break; |
diff --git a/net/ipv4/ipvs/ip_vs_ftp.c b/net/ipv4/ipvs/ip_vs_ftp.c index e433cb0ff894..6d398f10aa91 100644 --- a/net/ipv4/ipvs/ip_vs_ftp.c +++ b/net/ipv4/ipvs/ip_vs_ftp.c | |||
@@ -274,7 +274,7 @@ static int ip_vs_ftp_in(struct ip_vs_app *app, struct ip_vs_conn *cp, | |||
274 | while (data <= data_limit - 6) { | 274 | while (data <= data_limit - 6) { |
275 | if (strnicmp(data, "PASV\r\n", 6) == 0) { | 275 | if (strnicmp(data, "PASV\r\n", 6) == 0) { |
276 | /* Passive mode on */ | 276 | /* Passive mode on */ |
277 | IP_VS_DBG(7, "got PASV at %zd of %zd\n", | 277 | IP_VS_DBG(7, "got PASV at %td of %td\n", |
278 | data - data_start, | 278 | data - data_start, |
279 | data_limit - data_start); | 279 | data_limit - data_start); |
280 | cp->app_data = &ip_vs_ftp_pasv; | 280 | cp->app_data = &ip_vs_ftp_pasv; |
diff --git a/net/irda/irias_object.c b/net/irda/irias_object.c index a154b1d71c0f..56292ab7d652 100644 --- a/net/irda/irias_object.c +++ b/net/irda/irias_object.c | |||
@@ -43,7 +43,7 @@ struct ias_value irias_missing = { IAS_MISSING, 0, 0, 0, {0}}; | |||
43 | * | 43 | * |
44 | * Faster, check boundary... Jean II | 44 | * Faster, check boundary... Jean II |
45 | */ | 45 | */ |
46 | static char *strndup(char *str, int max) | 46 | static char *strndup(char *str, size_t max) |
47 | { | 47 | { |
48 | char *new_str; | 48 | char *new_str; |
49 | int len; | 49 | int len; |
diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c index 447d9aef4605..1f0f079ffa65 100644 --- a/net/sunrpc/auth_gss/svcauth_gss.c +++ b/net/sunrpc/auth_gss/svcauth_gss.c | |||
@@ -1146,10 +1146,11 @@ out: | |||
1146 | return ret; | 1146 | return ret; |
1147 | } | 1147 | } |
1148 | 1148 | ||
1149 | u32 * | 1149 | static __be32 * |
1150 | svcauth_gss_prepare_to_wrap(struct xdr_buf *resbuf, struct gss_svc_data *gsd) | 1150 | svcauth_gss_prepare_to_wrap(struct xdr_buf *resbuf, struct gss_svc_data *gsd) |
1151 | { | 1151 | { |
1152 | u32 *p, verf_len; | 1152 | __be32 *p; |
1153 | u32 verf_len; | ||
1153 | 1154 | ||
1154 | p = gsd->verf_start; | 1155 | p = gsd->verf_start; |
1155 | gsd->verf_start = NULL; | 1156 | gsd->verf_start = NULL; |
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index c2c8bb20d07f..2807fa0eab40 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c | |||
@@ -282,7 +282,10 @@ __svc_create(struct svc_program *prog, unsigned int bufsize, int npools, | |||
282 | serv->sv_program = prog; | 282 | serv->sv_program = prog; |
283 | serv->sv_nrthreads = 1; | 283 | serv->sv_nrthreads = 1; |
284 | serv->sv_stats = prog->pg_stats; | 284 | serv->sv_stats = prog->pg_stats; |
285 | serv->sv_bufsz = bufsize? bufsize : 4096; | 285 | if (bufsize > RPCSVC_MAXPAYLOAD) |
286 | bufsize = RPCSVC_MAXPAYLOAD; | ||
287 | serv->sv_max_payload = bufsize? bufsize : 4096; | ||
288 | serv->sv_max_mesg = roundup(serv->sv_max_payload + PAGE_SIZE, PAGE_SIZE); | ||
286 | serv->sv_shutdown = shutdown; | 289 | serv->sv_shutdown = shutdown; |
287 | xdrsize = 0; | 290 | xdrsize = 0; |
288 | while (prog) { | 291 | while (prog) { |
@@ -414,9 +417,9 @@ svc_init_buffer(struct svc_rqst *rqstp, unsigned int size) | |||
414 | int pages; | 417 | int pages; |
415 | int arghi; | 418 | int arghi; |
416 | 419 | ||
417 | if (size > RPCSVC_MAXPAYLOAD) | 420 | pages = size / PAGE_SIZE + 1; /* extra page as we hold both request and reply. |
418 | size = RPCSVC_MAXPAYLOAD; | 421 | * We assume one is at most one page |
419 | pages = 2 + (size+ PAGE_SIZE -1) / PAGE_SIZE; | 422 | */ |
420 | arghi = 0; | 423 | arghi = 0; |
421 | BUG_ON(pages > RPCSVC_MAXPAGES); | 424 | BUG_ON(pages > RPCSVC_MAXPAGES); |
422 | while (pages) { | 425 | while (pages) { |
@@ -463,7 +466,7 @@ __svc_create_thread(svc_thread_fn func, struct svc_serv *serv, | |||
463 | 466 | ||
464 | if (!(rqstp->rq_argp = kmalloc(serv->sv_xdrsize, GFP_KERNEL)) | 467 | if (!(rqstp->rq_argp = kmalloc(serv->sv_xdrsize, GFP_KERNEL)) |
465 | || !(rqstp->rq_resp = kmalloc(serv->sv_xdrsize, GFP_KERNEL)) | 468 | || !(rqstp->rq_resp = kmalloc(serv->sv_xdrsize, GFP_KERNEL)) |
466 | || !svc_init_buffer(rqstp, serv->sv_bufsz)) | 469 | || !svc_init_buffer(rqstp, serv->sv_max_mesg)) |
467 | goto out_thread; | 470 | goto out_thread; |
468 | 471 | ||
469 | serv->sv_nrthreads++; | 472 | serv->sv_nrthreads++; |
@@ -938,8 +941,8 @@ u32 svc_max_payload(const struct svc_rqst *rqstp) | |||
938 | 941 | ||
939 | if (rqstp->rq_sock->sk_sock->type == SOCK_DGRAM) | 942 | if (rqstp->rq_sock->sk_sock->type == SOCK_DGRAM) |
940 | max = RPCSVC_MAXPAYLOAD_UDP; | 943 | max = RPCSVC_MAXPAYLOAD_UDP; |
941 | if (rqstp->rq_server->sv_bufsz < max) | 944 | if (rqstp->rq_server->sv_max_payload < max) |
942 | max = rqstp->rq_server->sv_bufsz; | 945 | max = rqstp->rq_server->sv_max_payload; |
943 | return max; | 946 | return max; |
944 | } | 947 | } |
945 | EXPORT_SYMBOL_GPL(svc_max_payload); | 948 | EXPORT_SYMBOL_GPL(svc_max_payload); |
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index b39e7e2b648f..61e307cca13d 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c | |||
@@ -192,13 +192,13 @@ svc_sock_enqueue(struct svc_sock *svsk) | |||
192 | svsk->sk_pool = pool; | 192 | svsk->sk_pool = pool; |
193 | 193 | ||
194 | set_bit(SOCK_NOSPACE, &svsk->sk_sock->flags); | 194 | set_bit(SOCK_NOSPACE, &svsk->sk_sock->flags); |
195 | if (((atomic_read(&svsk->sk_reserved) + serv->sv_bufsz)*2 | 195 | if (((atomic_read(&svsk->sk_reserved) + serv->sv_max_mesg)*2 |
196 | > svc_sock_wspace(svsk)) | 196 | > svc_sock_wspace(svsk)) |
197 | && !test_bit(SK_CLOSE, &svsk->sk_flags) | 197 | && !test_bit(SK_CLOSE, &svsk->sk_flags) |
198 | && !test_bit(SK_CONN, &svsk->sk_flags)) { | 198 | && !test_bit(SK_CONN, &svsk->sk_flags)) { |
199 | /* Don't enqueue while not enough space for reply */ | 199 | /* Don't enqueue while not enough space for reply */ |
200 | dprintk("svc: socket %p no space, %d*2 > %ld, not enqueued\n", | 200 | dprintk("svc: socket %p no space, %d*2 > %ld, not enqueued\n", |
201 | svsk->sk_sk, atomic_read(&svsk->sk_reserved)+serv->sv_bufsz, | 201 | svsk->sk_sk, atomic_read(&svsk->sk_reserved)+serv->sv_max_mesg, |
202 | svc_sock_wspace(svsk)); | 202 | svc_sock_wspace(svsk)); |
203 | svsk->sk_pool = NULL; | 203 | svsk->sk_pool = NULL; |
204 | clear_bit(SK_BUSY, &svsk->sk_flags); | 204 | clear_bit(SK_BUSY, &svsk->sk_flags); |
@@ -220,7 +220,7 @@ svc_sock_enqueue(struct svc_sock *svsk) | |||
220 | rqstp, rqstp->rq_sock); | 220 | rqstp, rqstp->rq_sock); |
221 | rqstp->rq_sock = svsk; | 221 | rqstp->rq_sock = svsk; |
222 | atomic_inc(&svsk->sk_inuse); | 222 | atomic_inc(&svsk->sk_inuse); |
223 | rqstp->rq_reserved = serv->sv_bufsz; | 223 | rqstp->rq_reserved = serv->sv_max_mesg; |
224 | atomic_add(rqstp->rq_reserved, &svsk->sk_reserved); | 224 | atomic_add(rqstp->rq_reserved, &svsk->sk_reserved); |
225 | BUG_ON(svsk->sk_pool != pool); | 225 | BUG_ON(svsk->sk_pool != pool); |
226 | wake_up(&rqstp->rq_wait); | 226 | wake_up(&rqstp->rq_wait); |
@@ -639,8 +639,8 @@ svc_udp_recvfrom(struct svc_rqst *rqstp) | |||
639 | * which will access the socket. | 639 | * which will access the socket. |
640 | */ | 640 | */ |
641 | svc_sock_setbufsize(svsk->sk_sock, | 641 | svc_sock_setbufsize(svsk->sk_sock, |
642 | (serv->sv_nrthreads+3) * serv->sv_bufsz, | 642 | (serv->sv_nrthreads+3) * serv->sv_max_mesg, |
643 | (serv->sv_nrthreads+3) * serv->sv_bufsz); | 643 | (serv->sv_nrthreads+3) * serv->sv_max_mesg); |
644 | 644 | ||
645 | if ((rqstp->rq_deferred = svc_deferred_dequeue(svsk))) { | 645 | if ((rqstp->rq_deferred = svc_deferred_dequeue(svsk))) { |
646 | svc_sock_received(svsk); | 646 | svc_sock_received(svsk); |
@@ -749,8 +749,8 @@ svc_udp_init(struct svc_sock *svsk) | |||
749 | * svc_udp_recvfrom will re-adjust if necessary | 749 | * svc_udp_recvfrom will re-adjust if necessary |
750 | */ | 750 | */ |
751 | svc_sock_setbufsize(svsk->sk_sock, | 751 | svc_sock_setbufsize(svsk->sk_sock, |
752 | 3 * svsk->sk_server->sv_bufsz, | 752 | 3 * svsk->sk_server->sv_max_mesg, |
753 | 3 * svsk->sk_server->sv_bufsz); | 753 | 3 * svsk->sk_server->sv_max_mesg); |
754 | 754 | ||
755 | set_bit(SK_DATA, &svsk->sk_flags); /* might have come in before data_ready set up */ | 755 | set_bit(SK_DATA, &svsk->sk_flags); /* might have come in before data_ready set up */ |
756 | set_bit(SK_CHNGBUF, &svsk->sk_flags); | 756 | set_bit(SK_CHNGBUF, &svsk->sk_flags); |
@@ -993,8 +993,8 @@ svc_tcp_recvfrom(struct svc_rqst *rqstp) | |||
993 | * as soon a a complete request arrives. | 993 | * as soon a a complete request arrives. |
994 | */ | 994 | */ |
995 | svc_sock_setbufsize(svsk->sk_sock, | 995 | svc_sock_setbufsize(svsk->sk_sock, |
996 | (serv->sv_nrthreads+3) * serv->sv_bufsz, | 996 | (serv->sv_nrthreads+3) * serv->sv_max_mesg, |
997 | 3 * serv->sv_bufsz); | 997 | 3 * serv->sv_max_mesg); |
998 | 998 | ||
999 | clear_bit(SK_DATA, &svsk->sk_flags); | 999 | clear_bit(SK_DATA, &svsk->sk_flags); |
1000 | 1000 | ||
@@ -1032,7 +1032,7 @@ svc_tcp_recvfrom(struct svc_rqst *rqstp) | |||
1032 | } | 1032 | } |
1033 | svsk->sk_reclen &= 0x7fffffff; | 1033 | svsk->sk_reclen &= 0x7fffffff; |
1034 | dprintk("svc: TCP record, %d bytes\n", svsk->sk_reclen); | 1034 | dprintk("svc: TCP record, %d bytes\n", svsk->sk_reclen); |
1035 | if (svsk->sk_reclen > serv->sv_bufsz) { | 1035 | if (svsk->sk_reclen > serv->sv_max_mesg) { |
1036 | printk(KERN_NOTICE "RPC: bad TCP reclen 0x%08lx (large)\n", | 1036 | printk(KERN_NOTICE "RPC: bad TCP reclen 0x%08lx (large)\n", |
1037 | (unsigned long) svsk->sk_reclen); | 1037 | (unsigned long) svsk->sk_reclen); |
1038 | goto err_delete; | 1038 | goto err_delete; |
@@ -1171,8 +1171,8 @@ svc_tcp_init(struct svc_sock *svsk) | |||
1171 | * svc_tcp_recvfrom will re-adjust if necessary | 1171 | * svc_tcp_recvfrom will re-adjust if necessary |
1172 | */ | 1172 | */ |
1173 | svc_sock_setbufsize(svsk->sk_sock, | 1173 | svc_sock_setbufsize(svsk->sk_sock, |
1174 | 3 * svsk->sk_server->sv_bufsz, | 1174 | 3 * svsk->sk_server->sv_max_mesg, |
1175 | 3 * svsk->sk_server->sv_bufsz); | 1175 | 3 * svsk->sk_server->sv_max_mesg); |
1176 | 1176 | ||
1177 | set_bit(SK_CHNGBUF, &svsk->sk_flags); | 1177 | set_bit(SK_CHNGBUF, &svsk->sk_flags); |
1178 | set_bit(SK_DATA, &svsk->sk_flags); | 1178 | set_bit(SK_DATA, &svsk->sk_flags); |
@@ -1234,7 +1234,7 @@ svc_recv(struct svc_rqst *rqstp, long timeout) | |||
1234 | 1234 | ||
1235 | 1235 | ||
1236 | /* now allocate needed pages. If we get a failure, sleep briefly */ | 1236 | /* now allocate needed pages. If we get a failure, sleep briefly */ |
1237 | pages = 2 + (serv->sv_bufsz + PAGE_SIZE -1) / PAGE_SIZE; | 1237 | pages = (serv->sv_max_mesg + PAGE_SIZE) / PAGE_SIZE; |
1238 | for (i=0; i < pages ; i++) | 1238 | for (i=0; i < pages ; i++) |
1239 | while (rqstp->rq_pages[i] == NULL) { | 1239 | while (rqstp->rq_pages[i] == NULL) { |
1240 | struct page *p = alloc_page(GFP_KERNEL); | 1240 | struct page *p = alloc_page(GFP_KERNEL); |
@@ -1263,7 +1263,7 @@ svc_recv(struct svc_rqst *rqstp, long timeout) | |||
1263 | if ((svsk = svc_sock_dequeue(pool)) != NULL) { | 1263 | if ((svsk = svc_sock_dequeue(pool)) != NULL) { |
1264 | rqstp->rq_sock = svsk; | 1264 | rqstp->rq_sock = svsk; |
1265 | atomic_inc(&svsk->sk_inuse); | 1265 | atomic_inc(&svsk->sk_inuse); |
1266 | rqstp->rq_reserved = serv->sv_bufsz; | 1266 | rqstp->rq_reserved = serv->sv_max_mesg; |
1267 | atomic_add(rqstp->rq_reserved, &svsk->sk_reserved); | 1267 | atomic_add(rqstp->rq_reserved, &svsk->sk_reserved); |
1268 | } else { | 1268 | } else { |
1269 | /* No data pending. Go to sleep */ | 1269 | /* No data pending. Go to sleep */ |
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 32d778448a00..acfb852e7c98 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -941,7 +941,7 @@ static int recv_stream(struct kiocb *iocb, struct socket *sock, | |||
941 | int sz_to_copy; | 941 | int sz_to_copy; |
942 | int sz_copied = 0; | 942 | int sz_copied = 0; |
943 | int needed; | 943 | int needed; |
944 | char *crs = m->msg_iov->iov_base; | 944 | char __user *crs = m->msg_iov->iov_base; |
945 | unsigned char *buf_crs; | 945 | unsigned char *buf_crs; |
946 | u32 err; | 946 | u32 err; |
947 | int res; | 947 | int res; |
@@ -1496,7 +1496,7 @@ static int setsockopt(struct socket *sock, | |||
1496 | return -ENOPROTOOPT; | 1496 | return -ENOPROTOOPT; |
1497 | if (ol < sizeof(value)) | 1497 | if (ol < sizeof(value)) |
1498 | return -EINVAL; | 1498 | return -EINVAL; |
1499 | if ((res = get_user(value, (u32 *)ov))) | 1499 | if ((res = get_user(value, (u32 __user *)ov))) |
1500 | return res; | 1500 | return res; |
1501 | 1501 | ||
1502 | if (down_interruptible(&tsock->sem)) | 1502 | if (down_interruptible(&tsock->sem)) |
@@ -1541,7 +1541,7 @@ static int setsockopt(struct socket *sock, | |||
1541 | */ | 1541 | */ |
1542 | 1542 | ||
1543 | static int getsockopt(struct socket *sock, | 1543 | static int getsockopt(struct socket *sock, |
1544 | int lvl, int opt, char __user *ov, int *ol) | 1544 | int lvl, int opt, char __user *ov, int __user *ol) |
1545 | { | 1545 | { |
1546 | struct tipc_sock *tsock = tipc_sk(sock->sk); | 1546 | struct tipc_sock *tsock = tipc_sk(sock->sk); |
1547 | int len; | 1547 | int len; |
diff --git a/sound/core/hwdep.c b/sound/core/hwdep.c index 9aa9d94891f0..46b47689362c 100644 --- a/sound/core/hwdep.c +++ b/sound/core/hwdep.c | |||
@@ -158,6 +158,7 @@ static int snd_hwdep_release(struct inode *inode, struct file * file) | |||
158 | { | 158 | { |
159 | int err = -ENXIO; | 159 | int err = -ENXIO; |
160 | struct snd_hwdep *hw = file->private_data; | 160 | struct snd_hwdep *hw = file->private_data; |
161 | struct module *mod = hw->card->module; | ||
161 | mutex_lock(&hw->open_mutex); | 162 | mutex_lock(&hw->open_mutex); |
162 | if (hw->ops.release) { | 163 | if (hw->ops.release) { |
163 | err = hw->ops.release(hw, file); | 164 | err = hw->ops.release(hw, file); |
@@ -167,7 +168,7 @@ static int snd_hwdep_release(struct inode *inode, struct file * file) | |||
167 | hw->used--; | 168 | hw->used--; |
168 | snd_card_file_remove(hw->card, file); | 169 | snd_card_file_remove(hw->card, file); |
169 | mutex_unlock(&hw->open_mutex); | 170 | mutex_unlock(&hw->open_mutex); |
170 | module_put(hw->card->module); | 171 | module_put(mod); |
171 | return err; | 172 | return err; |
172 | } | 173 | } |
173 | 174 | ||
diff --git a/sound/core/hwdep_compat.c b/sound/core/hwdep_compat.c index 938f77580966..3827c0ceec8f 100644 --- a/sound/core/hwdep_compat.c +++ b/sound/core/hwdep_compat.c | |||
@@ -33,7 +33,7 @@ struct snd_hwdep_dsp_image32 { | |||
33 | static int snd_hwdep_dsp_load_compat(struct snd_hwdep *hw, | 33 | static int snd_hwdep_dsp_load_compat(struct snd_hwdep *hw, |
34 | struct snd_hwdep_dsp_image32 __user *src) | 34 | struct snd_hwdep_dsp_image32 __user *src) |
35 | { | 35 | { |
36 | struct snd_hwdep_dsp_image *dst; | 36 | struct snd_hwdep_dsp_image __user *dst; |
37 | compat_caddr_t ptr; | 37 | compat_caddr_t ptr; |
38 | u32 val; | 38 | u32 val; |
39 | 39 | ||
diff --git a/sound/core/init.c b/sound/core/init.c index d7607a25acdf..3058d626a90a 100644 --- a/sound/core/init.c +++ b/sound/core/init.c | |||
@@ -33,10 +33,10 @@ | |||
33 | #include <sound/control.h> | 33 | #include <sound/control.h> |
34 | #include <sound/info.h> | 34 | #include <sound/info.h> |
35 | 35 | ||
36 | struct snd_shutdown_f_ops { | 36 | static DEFINE_SPINLOCK(shutdown_lock); |
37 | struct file_operations f_ops; | 37 | static LIST_HEAD(shutdown_files); |
38 | struct snd_shutdown_f_ops *next; | 38 | |
39 | }; | 39 | static struct file_operations snd_shutdown_f_ops; |
40 | 40 | ||
41 | static unsigned int snd_cards_lock; /* locked for registering/using */ | 41 | static unsigned int snd_cards_lock; /* locked for registering/using */ |
42 | struct snd_card *snd_cards[SNDRV_CARDS]; | 42 | struct snd_card *snd_cards[SNDRV_CARDS]; |
@@ -198,6 +198,25 @@ static ssize_t snd_disconnect_write(struct file *file, const char __user *buf, | |||
198 | return -ENODEV; | 198 | return -ENODEV; |
199 | } | 199 | } |
200 | 200 | ||
201 | static int snd_disconnect_release(struct inode *inode, struct file *file) | ||
202 | { | ||
203 | struct snd_monitor_file *df = NULL, *_df; | ||
204 | |||
205 | spin_lock(&shutdown_lock); | ||
206 | list_for_each_entry(_df, &shutdown_files, shutdown_list) { | ||
207 | if (_df->file == file) { | ||
208 | df = _df; | ||
209 | break; | ||
210 | } | ||
211 | } | ||
212 | spin_unlock(&shutdown_lock); | ||
213 | |||
214 | if (likely(df)) | ||
215 | return df->disconnected_f_op->release(inode, file); | ||
216 | |||
217 | panic("%s(%p, %p) failed!", __FUNCTION__, inode, file); | ||
218 | } | ||
219 | |||
201 | static unsigned int snd_disconnect_poll(struct file * file, poll_table * wait) | 220 | static unsigned int snd_disconnect_poll(struct file * file, poll_table * wait) |
202 | { | 221 | { |
203 | return POLLERR | POLLNVAL; | 222 | return POLLERR | POLLNVAL; |
@@ -219,6 +238,22 @@ static int snd_disconnect_fasync(int fd, struct file *file, int on) | |||
219 | return -ENODEV; | 238 | return -ENODEV; |
220 | } | 239 | } |
221 | 240 | ||
241 | static struct file_operations snd_shutdown_f_ops = | ||
242 | { | ||
243 | .owner = THIS_MODULE, | ||
244 | .llseek = snd_disconnect_llseek, | ||
245 | .read = snd_disconnect_read, | ||
246 | .write = snd_disconnect_write, | ||
247 | .release = snd_disconnect_release, | ||
248 | .poll = snd_disconnect_poll, | ||
249 | .unlocked_ioctl = snd_disconnect_ioctl, | ||
250 | #ifdef CONFIG_COMPAT | ||
251 | .compat_ioctl = snd_disconnect_ioctl, | ||
252 | #endif | ||
253 | .mmap = snd_disconnect_mmap, | ||
254 | .fasync = snd_disconnect_fasync | ||
255 | }; | ||
256 | |||
222 | /** | 257 | /** |
223 | * snd_card_disconnect - disconnect all APIs from the file-operations (user space) | 258 | * snd_card_disconnect - disconnect all APIs from the file-operations (user space) |
224 | * @card: soundcard structure | 259 | * @card: soundcard structure |
@@ -234,9 +269,6 @@ int snd_card_disconnect(struct snd_card *card) | |||
234 | { | 269 | { |
235 | struct snd_monitor_file *mfile; | 270 | struct snd_monitor_file *mfile; |
236 | struct file *file; | 271 | struct file *file; |
237 | struct snd_shutdown_f_ops *s_f_ops; | ||
238 | struct file_operations *f_ops; | ||
239 | const struct file_operations *old_f_ops; | ||
240 | int err; | 272 | int err; |
241 | 273 | ||
242 | spin_lock(&card->files_lock); | 274 | spin_lock(&card->files_lock); |
@@ -261,34 +293,14 @@ int snd_card_disconnect(struct snd_card *card) | |||
261 | 293 | ||
262 | /* it's critical part, use endless loop */ | 294 | /* it's critical part, use endless loop */ |
263 | /* we have no room to fail */ | 295 | /* we have no room to fail */ |
264 | s_f_ops = kmalloc(sizeof(struct snd_shutdown_f_ops), GFP_ATOMIC); | 296 | mfile->disconnected_f_op = mfile->file->f_op; |
265 | if (s_f_ops == NULL) | ||
266 | panic("Atomic allocation failed for snd_shutdown_f_ops!"); | ||
267 | |||
268 | f_ops = &s_f_ops->f_ops; | ||
269 | |||
270 | memset(f_ops, 0, sizeof(*f_ops)); | ||
271 | f_ops->owner = file->f_op->owner; | ||
272 | f_ops->release = file->f_op->release; | ||
273 | f_ops->llseek = snd_disconnect_llseek; | ||
274 | f_ops->read = snd_disconnect_read; | ||
275 | f_ops->write = snd_disconnect_write; | ||
276 | f_ops->poll = snd_disconnect_poll; | ||
277 | f_ops->unlocked_ioctl = snd_disconnect_ioctl; | ||
278 | #ifdef CONFIG_COMPAT | ||
279 | f_ops->compat_ioctl = snd_disconnect_ioctl; | ||
280 | #endif | ||
281 | f_ops->mmap = snd_disconnect_mmap; | ||
282 | f_ops->fasync = snd_disconnect_fasync; | ||
283 | 297 | ||
284 | s_f_ops->next = card->s_f_ops; | 298 | spin_lock(&shutdown_lock); |
285 | card->s_f_ops = s_f_ops; | 299 | list_add(&mfile->shutdown_list, &shutdown_files); |
286 | 300 | spin_unlock(&shutdown_lock); | |
287 | f_ops = fops_get(f_ops); | ||
288 | 301 | ||
289 | old_f_ops = file->f_op; | 302 | fops_get(&snd_shutdown_f_ops); |
290 | file->f_op = f_ops; /* must be atomic */ | 303 | mfile->file->f_op = &snd_shutdown_f_ops; |
291 | fops_put(old_f_ops); | ||
292 | 304 | ||
293 | mfile = mfile->next; | 305 | mfile = mfile->next; |
294 | } | 306 | } |
@@ -326,8 +338,6 @@ EXPORT_SYMBOL(snd_card_disconnect); | |||
326 | */ | 338 | */ |
327 | static int snd_card_do_free(struct snd_card *card) | 339 | static int snd_card_do_free(struct snd_card *card) |
328 | { | 340 | { |
329 | struct snd_shutdown_f_ops *s_f_ops; | ||
330 | |||
331 | #if defined(CONFIG_SND_MIXER_OSS) || defined(CONFIG_SND_MIXER_OSS_MODULE) | 341 | #if defined(CONFIG_SND_MIXER_OSS) || defined(CONFIG_SND_MIXER_OSS_MODULE) |
332 | if (snd_mixer_oss_notify_callback) | 342 | if (snd_mixer_oss_notify_callback) |
333 | snd_mixer_oss_notify_callback(card, SND_MIXER_OSS_NOTIFY_FREE); | 343 | snd_mixer_oss_notify_callback(card, SND_MIXER_OSS_NOTIFY_FREE); |
@@ -351,11 +361,6 @@ static int snd_card_do_free(struct snd_card *card) | |||
351 | snd_printk(KERN_WARNING "unable to free card info\n"); | 361 | snd_printk(KERN_WARNING "unable to free card info\n"); |
352 | /* Not fatal error */ | 362 | /* Not fatal error */ |
353 | } | 363 | } |
354 | while (card->s_f_ops) { | ||
355 | s_f_ops = card->s_f_ops; | ||
356 | card->s_f_ops = s_f_ops->next; | ||
357 | kfree(s_f_ops); | ||
358 | } | ||
359 | kfree(card); | 364 | kfree(card); |
360 | return 0; | 365 | return 0; |
361 | } | 366 | } |
@@ -670,6 +675,7 @@ int snd_card_file_add(struct snd_card *card, struct file *file) | |||
670 | if (mfile == NULL) | 675 | if (mfile == NULL) |
671 | return -ENOMEM; | 676 | return -ENOMEM; |
672 | mfile->file = file; | 677 | mfile->file = file; |
678 | mfile->disconnected_f_op = NULL; | ||
673 | mfile->next = NULL; | 679 | mfile->next = NULL; |
674 | spin_lock(&card->files_lock); | 680 | spin_lock(&card->files_lock); |
675 | if (card->shutdown) { | 681 | if (card->shutdown) { |
@@ -716,6 +722,12 @@ int snd_card_file_remove(struct snd_card *card, struct file *file) | |||
716 | pfile = mfile; | 722 | pfile = mfile; |
717 | mfile = mfile->next; | 723 | mfile = mfile->next; |
718 | } | 724 | } |
725 | if (mfile && mfile->disconnected_f_op) { | ||
726 | fops_put(mfile->disconnected_f_op); | ||
727 | spin_lock(&shutdown_lock); | ||
728 | list_del(&mfile->shutdown_list); | ||
729 | spin_unlock(&shutdown_lock); | ||
730 | } | ||
719 | if (card->files == NULL) | 731 | if (card->files == NULL) |
720 | last_close = 1; | 732 | last_close = 1; |
721 | spin_unlock(&card->files_lock); | 733 | spin_unlock(&card->files_lock); |
diff --git a/sound/isa/es18xx.c b/sound/isa/es18xx.c index 2398d2c55feb..725c115ff97d 100644 --- a/sound/isa/es18xx.c +++ b/sound/isa/es18xx.c | |||
@@ -2154,6 +2154,7 @@ static int __devinit snd_audiodrive_pnpc(int dev, struct snd_audiodrive *acard, | |||
2154 | } | 2154 | } |
2155 | /* Control port initialization */ | 2155 | /* Control port initialization */ |
2156 | if (pnp_activate_dev(acard->devc) < 0) { | 2156 | if (pnp_activate_dev(acard->devc) < 0) { |
2157 | kfree(cfg); | ||
2157 | snd_printk(KERN_ERR PFX "PnP control configure failure (out of resources?)\n"); | 2158 | snd_printk(KERN_ERR PFX "PnP control configure failure (out of resources?)\n"); |
2158 | return -EAGAIN; | 2159 | return -EAGAIN; |
2159 | } | 2160 | } |
diff --git a/sound/isa/gus/gusmax.c b/sound/isa/gus/gusmax.c index 52498c9d411e..c1c69e3cbfd0 100644 --- a/sound/isa/gus/gusmax.c +++ b/sound/isa/gus/gusmax.c | |||
@@ -107,7 +107,7 @@ static int __init snd_gusmax_detect(struct snd_gus_card * gus) | |||
107 | 107 | ||
108 | static irqreturn_t snd_gusmax_interrupt(int irq, void *dev_id) | 108 | static irqreturn_t snd_gusmax_interrupt(int irq, void *dev_id) |
109 | { | 109 | { |
110 | struct snd_gusmax *maxcard = (struct snd_gusmax *) dev_id; | 110 | struct snd_gusmax *maxcard = dev_id; |
111 | int loop, max = 5; | 111 | int loop, max = 5; |
112 | int handled = 0; | 112 | int handled = 0; |
113 | 113 | ||
diff --git a/sound/isa/gus/interwave.c b/sound/isa/gus/interwave.c index 5c474b831edc..f12cd09d1fcc 100644 --- a/sound/isa/gus/interwave.c +++ b/sound/isa/gus/interwave.c | |||
@@ -301,7 +301,7 @@ static int __devinit snd_interwave_detect(struct snd_interwave *iwcard, | |||
301 | 301 | ||
302 | static irqreturn_t snd_interwave_interrupt(int irq, void *dev_id) | 302 | static irqreturn_t snd_interwave_interrupt(int irq, void *dev_id) |
303 | { | 303 | { |
304 | struct snd_interwave *iwcard = (struct snd_interwave *) dev_id; | 304 | struct snd_interwave *iwcard = dev_id; |
305 | int loop, max = 5; | 305 | int loop, max = 5; |
306 | int handled = 0; | 306 | int handled = 0; |
307 | 307 | ||
diff --git a/sound/oss/dmasound/dmasound_awacs.c b/sound/oss/dmasound/dmasound_awacs.c index 3bd19c36fcd9..37773b1deea5 100644 --- a/sound/oss/dmasound/dmasound_awacs.c +++ b/sound/oss/dmasound/dmasound_awacs.c | |||
@@ -465,7 +465,7 @@ tas_dmasound_init(void) | |||
465 | val = pmac_call_feature(PMAC_FTR_READ_GPIO, NULL, gpio_headphone_detect, 0); | 465 | val = pmac_call_feature(PMAC_FTR_READ_GPIO, NULL, gpio_headphone_detect, 0); |
466 | pmac_call_feature(PMAC_FTR_WRITE_GPIO, NULL, gpio_headphone_detect, val | 0x80); | 466 | pmac_call_feature(PMAC_FTR_WRITE_GPIO, NULL, gpio_headphone_detect, val | 0x80); |
467 | /* Trigger it */ | 467 | /* Trigger it */ |
468 | headphone_intr(0,NULL,NULL); | 468 | headphone_intr(0, NULL); |
469 | } | 469 | } |
470 | } | 470 | } |
471 | if (!gpio_headphone_irq) { | 471 | if (!gpio_headphone_irq) { |
@@ -1499,7 +1499,7 @@ static int awacs_sleep_notify(struct pmu_sleep_notifier *self, int when) | |||
1499 | write_audio_gpio(gpio_audio_reset, !gpio_audio_reset_pol); | 1499 | write_audio_gpio(gpio_audio_reset, !gpio_audio_reset_pol); |
1500 | msleep(150); | 1500 | msleep(150); |
1501 | tas_leave_sleep(); /* Stub for now */ | 1501 | tas_leave_sleep(); /* Stub for now */ |
1502 | headphone_intr(0,NULL,NULL); | 1502 | headphone_intr(0, NULL); |
1503 | break; | 1503 | break; |
1504 | case AWACS_DACA: | 1504 | case AWACS_DACA: |
1505 | msleep(10); /* Check this !!! */ | 1505 | msleep(10); /* Check this !!! */ |
diff --git a/sound/oss/es1371.c b/sound/oss/es1371.c index 2562f4769b90..ddf6b0a0bca5 100644 --- a/sound/oss/es1371.c +++ b/sound/oss/es1371.c | |||
@@ -1102,7 +1102,7 @@ static void es1371_handle_midi(struct es1371_state *s) | |||
1102 | 1102 | ||
1103 | static irqreturn_t es1371_interrupt(int irq, void *dev_id) | 1103 | static irqreturn_t es1371_interrupt(int irq, void *dev_id) |
1104 | { | 1104 | { |
1105 | struct es1371_state *s = (struct es1371_state *)dev_id; | 1105 | struct es1371_state *s = dev_id; |
1106 | unsigned int intsrc, sctl; | 1106 | unsigned int intsrc, sctl; |
1107 | 1107 | ||
1108 | /* fastpath out, to ease interrupt sharing */ | 1108 | /* fastpath out, to ease interrupt sharing */ |
diff --git a/sound/oss/hal2.c b/sound/oss/hal2.c index 7807abac0625..784bdd707055 100644 --- a/sound/oss/hal2.c +++ b/sound/oss/hal2.c | |||
@@ -372,7 +372,7 @@ static void hal2_adc_interrupt(struct hal2_codec *adc) | |||
372 | 372 | ||
373 | static irqreturn_t hal2_interrupt(int irq, void *dev_id) | 373 | static irqreturn_t hal2_interrupt(int irq, void *dev_id) |
374 | { | 374 | { |
375 | struct hal2_card *hal2 = (struct hal2_card*)dev_id; | 375 | struct hal2_card *hal2 = dev_id; |
376 | irqreturn_t ret = IRQ_NONE; | 376 | irqreturn_t ret = IRQ_NONE; |
377 | 377 | ||
378 | /* decide what caused this interrupt */ | 378 | /* decide what caused this interrupt */ |
diff --git a/sound/oss/i810_audio.c b/sound/oss/i810_audio.c index a48af879b466..240cc7939b69 100644 --- a/sound/oss/i810_audio.c +++ b/sound/oss/i810_audio.c | |||
@@ -1525,7 +1525,7 @@ static void i810_channel_interrupt(struct i810_card *card) | |||
1525 | 1525 | ||
1526 | static irqreturn_t i810_interrupt(int irq, void *dev_id) | 1526 | static irqreturn_t i810_interrupt(int irq, void *dev_id) |
1527 | { | 1527 | { |
1528 | struct i810_card *card = (struct i810_card *)dev_id; | 1528 | struct i810_card *card = dev_id; |
1529 | u32 status; | 1529 | u32 status; |
1530 | 1530 | ||
1531 | spin_lock(&card->lock); | 1531 | spin_lock(&card->lock); |
diff --git a/sound/oss/mpu401.c b/sound/oss/mpu401.c index 58d4a5d05a27..e96220541971 100644 --- a/sound/oss/mpu401.c +++ b/sound/oss/mpu401.c | |||
@@ -435,7 +435,7 @@ static void mpu401_input_loop(struct mpu_config *devc) | |||
435 | static irqreturn_t mpuintr(int irq, void *dev_id) | 435 | static irqreturn_t mpuintr(int irq, void *dev_id) |
436 | { | 436 | { |
437 | struct mpu_config *devc; | 437 | struct mpu_config *devc; |
438 | int dev = (int) dev_id; | 438 | int dev = (int)(unsigned long) dev_id; |
439 | int handled = 0; | 439 | int handled = 0; |
440 | 440 | ||
441 | devc = &dev_conf[dev]; | 441 | devc = &dev_conf[dev]; |
diff --git a/sound/oss/vidc.c b/sound/oss/vidc.c index 8932d89408ef..bb4a0969f461 100644 --- a/sound/oss/vidc.c +++ b/sound/oss/vidc.c | |||
@@ -372,7 +372,7 @@ static void vidc_audio_trigger(int dev, int enable_bits) | |||
372 | adev->flags |= DMA_ACTIVE; | 372 | adev->flags |= DMA_ACTIVE; |
373 | 373 | ||
374 | dma_interrupt = vidc_audio_dma_interrupt; | 374 | dma_interrupt = vidc_audio_dma_interrupt; |
375 | vidc_sound_dma_irq(0, NULL, NULL); | 375 | vidc_sound_dma_irq(0, NULL); |
376 | iomd_writeb(DMA_CR_E | 0x10, IOMD_SD0CR); | 376 | iomd_writeb(DMA_CR_E | 0x10, IOMD_SD0CR); |
377 | 377 | ||
378 | local_irq_restore(flags); | 378 | local_irq_restore(flags); |
diff --git a/sound/oss/vwsnd.c b/sound/oss/vwsnd.c index 0cd4d6ec9862..6dfb9f4b03ec 100644 --- a/sound/oss/vwsnd.c +++ b/sound/oss/vwsnd.c | |||
@@ -2235,7 +2235,7 @@ static void vwsnd_audio_write_intr(vwsnd_dev_t *devc, unsigned int status) | |||
2235 | 2235 | ||
2236 | static irqreturn_t vwsnd_audio_intr(int irq, void *dev_id) | 2236 | static irqreturn_t vwsnd_audio_intr(int irq, void *dev_id) |
2237 | { | 2237 | { |
2238 | vwsnd_dev_t *devc = (vwsnd_dev_t *) dev_id; | 2238 | vwsnd_dev_t *devc = dev_id; |
2239 | unsigned int status; | 2239 | unsigned int status; |
2240 | 2240 | ||
2241 | DBGEV("(irq=%d, dev_id=0x%p)\n", irq, dev_id); | 2241 | DBGEV("(irq=%d, dev_id=0x%p)\n", irq, dev_id); |
diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c index dc28b111a06d..15be6ba87c82 100644 --- a/sound/pci/ac97/ac97_patch.c +++ b/sound/pci/ac97/ac97_patch.c | |||
@@ -530,7 +530,7 @@ AC97_ENUM("ALC Headphone Mux", wm9711_enum[1]), | |||
530 | AC97_SINGLE("ALC Headphone Volume", AC97_VIDEO, 7, 7, 1), | 530 | AC97_SINGLE("ALC Headphone Volume", AC97_VIDEO, 7, 7, 1), |
531 | 531 | ||
532 | AC97_SINGLE("Out3 Switch", AC97_AUX, 15, 1, 1), | 532 | AC97_SINGLE("Out3 Switch", AC97_AUX, 15, 1, 1), |
533 | AC97_SINGLE("Out3 ZC Switch", AC97_AUX, 7, 1, 1), | 533 | AC97_SINGLE("Out3 ZC Switch", AC97_AUX, 7, 1, 0), |
534 | AC97_ENUM("Out3 Mux", wm9711_enum[2]), | 534 | AC97_ENUM("Out3 Mux", wm9711_enum[2]), |
535 | AC97_ENUM("Out3 LR Mux", wm9711_enum[3]), | 535 | AC97_ENUM("Out3 LR Mux", wm9711_enum[3]), |
536 | AC97_SINGLE("Out3 Volume", AC97_AUX, 0, 31, 1), | 536 | AC97_SINGLE("Out3 Volume", AC97_AUX, 0, 31, 1), |
@@ -575,13 +575,14 @@ AC97_SINGLE("Playback Attenuate (-6dB) Switch", AC97_MASTER_TONE, 6, 1, 0), | |||
575 | 575 | ||
576 | AC97_SINGLE("ADC Switch", AC97_REC_GAIN, 15, 1, 1), | 576 | AC97_SINGLE("ADC Switch", AC97_REC_GAIN, 15, 1, 1), |
577 | AC97_ENUM("Capture Volume Steps", wm9711_enum[6]), | 577 | AC97_ENUM("Capture Volume Steps", wm9711_enum[6]), |
578 | AC97_DOUBLE("Capture Volume", AC97_REC_GAIN, 8, 0, 15, 1), | 578 | AC97_DOUBLE("Capture Volume", AC97_REC_GAIN, 8, 0, 63, 1), |
579 | AC97_SINGLE("Capture ZC Switch", AC97_REC_GAIN, 7, 1, 0), | 579 | AC97_SINGLE("Capture ZC Switch", AC97_REC_GAIN, 7, 1, 0), |
580 | 580 | ||
581 | AC97_SINGLE("Mic 1 to Phone Switch", AC97_MIC, 14, 1, 1), | 581 | AC97_SINGLE("Mic 1 to Phone Switch", AC97_MIC, 14, 1, 1), |
582 | AC97_SINGLE("Mic 2 to Phone Switch", AC97_MIC, 13, 1, 1), | 582 | AC97_SINGLE("Mic 2 to Phone Switch", AC97_MIC, 13, 1, 1), |
583 | AC97_ENUM("Mic Select Source", wm9711_enum[7]), | 583 | AC97_ENUM("Mic Select Source", wm9711_enum[7]), |
584 | AC97_SINGLE("Mic 1 Volume", AC97_MIC, 8, 32, 1), | 584 | AC97_SINGLE("Mic 1 Volume", AC97_MIC, 8, 31, 1), |
585 | AC97_SINGLE("Mic 2 Volume", AC97_MIC, 0, 31, 1), | ||
585 | AC97_SINGLE("Mic 20dB Boost Switch", AC97_MIC, 7, 1, 0), | 586 | AC97_SINGLE("Mic 20dB Boost Switch", AC97_MIC, 7, 1, 0), |
586 | 587 | ||
587 | AC97_SINGLE("Master ZC Switch", AC97_MASTER, 7, 1, 0), | 588 | AC97_SINGLE("Master ZC Switch", AC97_MASTER, 7, 1, 0), |
diff --git a/sound/pci/au88x0/au88x0.c b/sound/pci/au88x0/au88x0.c index ef189d7f09d3..6ed5ad59f5b5 100644 --- a/sound/pci/au88x0/au88x0.c +++ b/sound/pci/au88x0/au88x0.c | |||
@@ -128,6 +128,7 @@ static int snd_vortex_dev_free(struct snd_device *device) | |||
128 | // Take down PCI interface. | 128 | // Take down PCI interface. |
129 | synchronize_irq(vortex->irq); | 129 | synchronize_irq(vortex->irq); |
130 | free_irq(vortex->irq, vortex); | 130 | free_irq(vortex->irq, vortex); |
131 | iounmap(vortex->mmio); | ||
131 | pci_release_regions(vortex->pci_dev); | 132 | pci_release_regions(vortex->pci_dev); |
132 | pci_disable_device(vortex->pci_dev); | 133 | pci_disable_device(vortex->pci_dev); |
133 | kfree(vortex); | 134 | kfree(vortex); |
diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c index be65d4db8e27..8058059c56e9 100644 --- a/sound/pci/emu10k1/emu10k1_main.c +++ b/sound/pci/emu10k1/emu10k1_main.c | |||
@@ -1461,8 +1461,8 @@ void snd_emu10k1_resume_regs(struct snd_emu10k1 *emu) | |||
1461 | 1461 | ||
1462 | /* resore for spdif */ | 1462 | /* resore for spdif */ |
1463 | if (emu->audigy) | 1463 | if (emu->audigy) |
1464 | outl(emu->port + A_IOCFG, emu->saved_a_iocfg); | 1464 | outl(emu->saved_a_iocfg, emu->port + A_IOCFG); |
1465 | outl(emu->port + HCFG, emu->saved_hcfg); | 1465 | outl(emu->saved_hcfg, emu->port + HCFG); |
1466 | 1466 | ||
1467 | val = emu->saved_ptr; | 1467 | val = emu->saved_ptr; |
1468 | for (reg = saved_regs; *reg != 0xff; reg++) | 1468 | for (reg = saved_regs; *reg != 0xff; reg++) |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index a76a778d0a1f..feeed12920b4 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -1682,6 +1682,7 @@ static struct pci_device_id azx_ids[] = { | |||
1682 | { 0x10b9, 0x5461, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ULI }, /* ULI M5461 */ | 1682 | { 0x10b9, 0x5461, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ULI }, /* ULI M5461 */ |
1683 | { 0x10de, 0x026c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA 026c */ | 1683 | { 0x10de, 0x026c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA 026c */ |
1684 | { 0x10de, 0x0371, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA 0371 */ | 1684 | { 0x10de, 0x0371, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA 0371 */ |
1685 | { 0x10de, 0x03f0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA 03f0 */ | ||
1685 | { 0, } | 1686 | { 0, } |
1686 | }; | 1687 | }; |
1687 | MODULE_DEVICE_TABLE(pci, azx_ids); | 1688 | MODULE_DEVICE_TABLE(pci, azx_ids); |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index d08d2e399c8f..84a3eb8aacc2 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -5076,6 +5076,10 @@ static struct hda_board_config alc883_cfg_tbl[] = { | |||
5076 | { .modelname = "acer", .config = ALC883_ACER }, | 5076 | { .modelname = "acer", .config = ALC883_ACER }, |
5077 | { .pci_subvendor = 0x1025, .pci_subdevice = 0/*0x0102*/, | 5077 | { .pci_subvendor = 0x1025, .pci_subdevice = 0/*0x0102*/, |
5078 | .config = ALC883_ACER }, | 5078 | .config = ALC883_ACER }, |
5079 | { .pci_subvendor = 0x1025, .pci_subdevice = 0x0102, | ||
5080 | .config = ALC883_ACER }, | ||
5081 | { .pci_subvendor = 0x1025, .pci_subdevice = 0x009f, | ||
5082 | .config = ALC883_ACER }, | ||
5079 | { .modelname = "auto", .config = ALC883_AUTO }, | 5083 | { .modelname = "auto", .config = ALC883_AUTO }, |
5080 | {} | 5084 | {} |
5081 | }; | 5085 | }; |
diff --git a/sound/pci/hda/patch_si3054.c b/sound/pci/hda/patch_si3054.c index 76ec3d75fa9e..cc87dff1eb56 100644 --- a/sound/pci/hda/patch_si3054.c +++ b/sound/pci/hda/patch_si3054.c | |||
@@ -297,8 +297,13 @@ static int patch_si3054(struct hda_codec *codec) | |||
297 | struct hda_codec_preset snd_hda_preset_si3054[] = { | 297 | struct hda_codec_preset snd_hda_preset_si3054[] = { |
298 | { .id = 0x163c3055, .name = "Si3054", .patch = patch_si3054 }, | 298 | { .id = 0x163c3055, .name = "Si3054", .patch = patch_si3054 }, |
299 | { .id = 0x163c3155, .name = "Si3054", .patch = patch_si3054 }, | 299 | { .id = 0x163c3155, .name = "Si3054", .patch = patch_si3054 }, |
300 | { .id = 0x11c11040, .name = "Si3054", .patch = patch_si3054 }, | ||
300 | { .id = 0x11c13026, .name = "Si3054", .patch = patch_si3054 }, | 301 | { .id = 0x11c13026, .name = "Si3054", .patch = patch_si3054 }, |
302 | { .id = 0x11c13055, .name = "Si3054", .patch = patch_si3054 }, | ||
303 | { .id = 0x11c13155, .name = "Si3054", .patch = patch_si3054 }, | ||
304 | { .id = 0x10573055, .name = "Si3054", .patch = patch_si3054 }, | ||
301 | { .id = 0x10573057, .name = "Si3054", .patch = patch_si3054 }, | 305 | { .id = 0x10573057, .name = "Si3054", .patch = patch_si3054 }, |
306 | { .id = 0x10573155, .name = "Si3054", .patch = patch_si3054 }, | ||
302 | {} | 307 | {} |
303 | }; | 308 | }; |
304 | 309 | ||
diff --git a/sound/pci/korg1212/korg1212.c b/sound/pci/korg1212/korg1212.c index 398aa10a06e8..fa8cd8cecc21 100644 --- a/sound/pci/korg1212/korg1212.c +++ b/sound/pci/korg1212/korg1212.c | |||
@@ -1124,9 +1124,6 @@ static irqreturn_t snd_korg1212_interrupt(int irq, void *dev_id) | |||
1124 | u32 doorbellValue; | 1124 | u32 doorbellValue; |
1125 | struct snd_korg1212 *korg1212 = dev_id; | 1125 | struct snd_korg1212 *korg1212 = dev_id; |
1126 | 1126 | ||
1127 | if(irq != korg1212->irq) | ||
1128 | return IRQ_NONE; | ||
1129 | |||
1130 | doorbellValue = readl(korg1212->inDoorbellPtr); | 1127 | doorbellValue = readl(korg1212->inDoorbellPtr); |
1131 | 1128 | ||
1132 | if (!doorbellValue) | 1129 | if (!doorbellValue) |
@@ -1140,7 +1137,6 @@ static irqreturn_t snd_korg1212_interrupt(int irq, void *dev_id) | |||
1140 | 1137 | ||
1141 | korg1212->inIRQ++; | 1138 | korg1212->inIRQ++; |
1142 | 1139 | ||
1143 | |||
1144 | switch (doorbellValue) { | 1140 | switch (doorbellValue) { |
1145 | case K1212_DB_DSPDownloadDone: | 1141 | case K1212_DB_DSPDownloadDone: |
1146 | K1212_DEBUG_PRINTK("K1212_DEBUG: IRQ DNLD count - %ld, %x, [%s].\n", | 1142 | K1212_DEBUG_PRINTK("K1212_DEBUG: IRQ DNLD count - %ld, %x, [%s].\n", |
diff --git a/sound/pcmcia/pdaudiocf/pdaudiocf_irq.c b/sound/pcmcia/pdaudiocf/pdaudiocf_irq.c index 732263e4a437..5bd69206ba65 100644 --- a/sound/pcmcia/pdaudiocf/pdaudiocf_irq.c +++ b/sound/pcmcia/pdaudiocf/pdaudiocf_irq.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <sound/core.h> | 22 | #include <sound/core.h> |
23 | #include "pdaudiocf.h" | 23 | #include "pdaudiocf.h" |
24 | #include <sound/initval.h> | 24 | #include <sound/initval.h> |
25 | #include <asm/irq_regs.h> | ||
25 | 26 | ||
26 | /* | 27 | /* |
27 | * | 28 | * |
diff --git a/sound/usb/usx2y/usbusx2yaudio.c b/sound/usb/usx2y/usbusx2yaudio.c index e662281a751a..367f8a32a665 100644 --- a/sound/usb/usx2y/usbusx2yaudio.c +++ b/sound/usb/usx2y/usbusx2yaudio.c | |||
@@ -322,7 +322,7 @@ static void i_usX2Y_urb_complete(struct urb *urb) | |||
322 | usX2Y_error_urb_status(usX2Y, subs, urb); | 322 | usX2Y_error_urb_status(usX2Y, subs, urb); |
323 | return; | 323 | return; |
324 | } | 324 | } |
325 | if (likely((0xFFFF & urb->start_frame) == usX2Y->wait_iso_frame)) | 325 | if (likely(urb->start_frame == usX2Y->wait_iso_frame)) |
326 | subs->completed_urb = urb; | 326 | subs->completed_urb = urb; |
327 | else { | 327 | else { |
328 | usX2Y_error_sequence(usX2Y, subs, urb); | 328 | usX2Y_error_sequence(usX2Y, subs, urb); |
@@ -335,13 +335,9 @@ static void i_usX2Y_urb_complete(struct urb *urb) | |||
335 | atomic_read(&capsubs->state) >= state_PREPARED && | 335 | atomic_read(&capsubs->state) >= state_PREPARED && |
336 | (playbacksubs->completed_urb || | 336 | (playbacksubs->completed_urb || |
337 | atomic_read(&playbacksubs->state) < state_PREPARED)) { | 337 | atomic_read(&playbacksubs->state) < state_PREPARED)) { |
338 | if (!usX2Y_usbframe_complete(capsubs, playbacksubs, urb->start_frame)) { | 338 | if (!usX2Y_usbframe_complete(capsubs, playbacksubs, urb->start_frame)) |
339 | if (nr_of_packs() <= urb->start_frame && | 339 | usX2Y->wait_iso_frame += nr_of_packs(); |
340 | urb->start_frame <= (2 * nr_of_packs() - 1)) // uhci and ohci | 340 | else { |
341 | usX2Y->wait_iso_frame = urb->start_frame - nr_of_packs(); | ||
342 | else | ||
343 | usX2Y->wait_iso_frame += nr_of_packs(); | ||
344 | } else { | ||
345 | snd_printdd("\n"); | 341 | snd_printdd("\n"); |
346 | usX2Y_clients_stop(usX2Y); | 342 | usX2Y_clients_stop(usX2Y); |
347 | } | 343 | } |
@@ -495,7 +491,6 @@ static int usX2Y_urbs_start(struct snd_usX2Y_substream *subs) | |||
495 | if (subs != NULL && atomic_read(&subs->state) >= state_PREPARED) | 491 | if (subs != NULL && atomic_read(&subs->state) >= state_PREPARED) |
496 | goto start; | 492 | goto start; |
497 | } | 493 | } |
498 | usX2Y->wait_iso_frame = -1; | ||
499 | 494 | ||
500 | start: | 495 | start: |
501 | usX2Y_subs_startup(subs); | 496 | usX2Y_subs_startup(subs); |
@@ -516,10 +511,9 @@ static int usX2Y_urbs_start(struct snd_usX2Y_substream *subs) | |||
516 | snd_printk (KERN_ERR "cannot submit datapipe for urb %d, err = %d\n", i, err); | 511 | snd_printk (KERN_ERR "cannot submit datapipe for urb %d, err = %d\n", i, err); |
517 | err = -EPIPE; | 512 | err = -EPIPE; |
518 | goto cleanup; | 513 | goto cleanup; |
519 | } else { | 514 | } else |
520 | if (0 > usX2Y->wait_iso_frame) | 515 | if (i == 0) |
521 | usX2Y->wait_iso_frame = urb->start_frame; | 516 | usX2Y->wait_iso_frame = urb->start_frame; |
522 | } | ||
523 | urb->transfer_flags = 0; | 517 | urb->transfer_flags = 0; |
524 | } else { | 518 | } else { |
525 | atomic_set(&subs->state, state_STARTING1); | 519 | atomic_set(&subs->state, state_STARTING1); |
diff --git a/sound/usb/usx2y/usx2yhwdeppcm.c b/sound/usb/usx2y/usx2yhwdeppcm.c index 9acef9d90543..8f3e35e24e72 100644 --- a/sound/usb/usx2y/usx2yhwdeppcm.c +++ b/sound/usb/usx2y/usx2yhwdeppcm.c | |||
@@ -243,7 +243,7 @@ static void i_usX2Y_usbpcm_urb_complete(struct urb *urb) | |||
243 | usX2Y_error_urb_status(usX2Y, subs, urb); | 243 | usX2Y_error_urb_status(usX2Y, subs, urb); |
244 | return; | 244 | return; |
245 | } | 245 | } |
246 | if (likely((0xFFFF & urb->start_frame) == usX2Y->wait_iso_frame)) | 246 | if (likely(urb->start_frame == usX2Y->wait_iso_frame)) |
247 | subs->completed_urb = urb; | 247 | subs->completed_urb = urb; |
248 | else { | 248 | else { |
249 | usX2Y_error_sequence(usX2Y, subs, urb); | 249 | usX2Y_error_sequence(usX2Y, subs, urb); |
@@ -256,13 +256,9 @@ static void i_usX2Y_usbpcm_urb_complete(struct urb *urb) | |||
256 | if (capsubs->completed_urb && atomic_read(&capsubs->state) >= state_PREPARED && | 256 | if (capsubs->completed_urb && atomic_read(&capsubs->state) >= state_PREPARED && |
257 | (NULL == capsubs2 || capsubs2->completed_urb) && | 257 | (NULL == capsubs2 || capsubs2->completed_urb) && |
258 | (playbacksubs->completed_urb || atomic_read(&playbacksubs->state) < state_PREPARED)) { | 258 | (playbacksubs->completed_urb || atomic_read(&playbacksubs->state) < state_PREPARED)) { |
259 | if (!usX2Y_usbpcm_usbframe_complete(capsubs, capsubs2, playbacksubs, urb->start_frame)) { | 259 | if (!usX2Y_usbpcm_usbframe_complete(capsubs, capsubs2, playbacksubs, urb->start_frame)) |
260 | if (nr_of_packs() <= urb->start_frame && | 260 | usX2Y->wait_iso_frame += nr_of_packs(); |
261 | urb->start_frame <= (2 * nr_of_packs() - 1)) // uhci and ohci | 261 | else { |
262 | usX2Y->wait_iso_frame = urb->start_frame - nr_of_packs(); | ||
263 | else | ||
264 | usX2Y->wait_iso_frame += nr_of_packs(); | ||
265 | } else { | ||
266 | snd_printdd("\n"); | 262 | snd_printdd("\n"); |
267 | usX2Y_clients_stop(usX2Y); | 263 | usX2Y_clients_stop(usX2Y); |
268 | } | 264 | } |
@@ -433,7 +429,6 @@ static int usX2Y_usbpcm_urbs_start(struct snd_usX2Y_substream *subs) | |||
433 | if (subs != NULL && atomic_read(&subs->state) >= state_PREPARED) | 429 | if (subs != NULL && atomic_read(&subs->state) >= state_PREPARED) |
434 | goto start; | 430 | goto start; |
435 | } | 431 | } |
436 | usX2Y->wait_iso_frame = -1; | ||
437 | 432 | ||
438 | start: | 433 | start: |
439 | usX2Y_usbpcm_subs_startup(subs); | 434 | usX2Y_usbpcm_subs_startup(subs); |
@@ -459,7 +454,7 @@ static int usX2Y_usbpcm_urbs_start(struct snd_usX2Y_substream *subs) | |||
459 | goto cleanup; | 454 | goto cleanup; |
460 | } else { | 455 | } else { |
461 | snd_printdd("%i\n", urb->start_frame); | 456 | snd_printdd("%i\n", urb->start_frame); |
462 | if (0 > usX2Y->wait_iso_frame) | 457 | if (u == 0) |
463 | usX2Y->wait_iso_frame = urb->start_frame; | 458 | usX2Y->wait_iso_frame = urb->start_frame; |
464 | } | 459 | } |
465 | urb->transfer_flags = 0; | 460 | urb->transfer_flags = 0; |
@@ -632,7 +627,7 @@ static int usX2Y_pcms_lock_check(struct snd_card *card) | |||
632 | for (s = 0; s < 2; ++s) { | 627 | for (s = 0; s < 2; ++s) { |
633 | struct snd_pcm_substream *substream; | 628 | struct snd_pcm_substream *substream; |
634 | substream = pcm->streams[s].substream; | 629 | substream = pcm->streams[s].substream; |
635 | if (SUBSTREAM_BUSY(substream)) | 630 | if (substream && SUBSTREAM_BUSY(substream)) |
636 | err = -EBUSY; | 631 | err = -EBUSY; |
637 | } | 632 | } |
638 | } | 633 | } |