diff options
author | David S. Miller <davem@davemloft.net> | 2006-06-20 04:20:00 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2006-06-20 04:20:00 -0400 |
commit | fd0504c3217d6d1bc8f33f53fb536299cae8feda (patch) | |
tree | 4379f5376358d1f54fc183f458614f289ed6d326 /arch/sparc64/kernel/time.c | |
parent | 3185d4d2873a46ca1620d784013f285522091aa0 (diff) |
[SPARC64]: Send all device interrupts via one PIL.
This is the first in a series of cleanups that will hopefully
allow a seamless attempt at using the generic IRQ handling
infrastructure in the Linux kernel.
Define PIL_DEVICE_IRQ and vector all device interrupts through
there.
Get rid of the ugly pil0_dummy_{bucket,desc}, instead vector
the timer interrupt directly to a specific handler since the
timer interrupt is the only event that will be signaled on
PIL 14.
The irq_worklist is now in the per-cpu trap_block[].
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel/time.c')
-rw-r--r-- | arch/sparc64/kernel/time.c | 16 |
1 files changed, 3 insertions, 13 deletions
diff --git a/arch/sparc64/kernel/time.c b/arch/sparc64/kernel/time.c index e55b5c6ece02..0f00a99927e9 100644 --- a/arch/sparc64/kernel/time.c +++ b/arch/sparc64/kernel/time.c | |||
@@ -457,7 +457,7 @@ static inline void timer_check_rtc(void) | |||
457 | } | 457 | } |
458 | } | 458 | } |
459 | 459 | ||
460 | static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs) | 460 | irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs) |
461 | { | 461 | { |
462 | unsigned long ticks, compare, pstate; | 462 | unsigned long ticks, compare, pstate; |
463 | 463 | ||
@@ -1020,19 +1020,9 @@ static unsigned long sparc64_init_timers(void) | |||
1020 | return clock; | 1020 | return clock; |
1021 | } | 1021 | } |
1022 | 1022 | ||
1023 | static void sparc64_start_timers(irqreturn_t (*cfunc)(int, void *, struct pt_regs *)) | 1023 | static void sparc64_start_timers(void) |
1024 | { | 1024 | { |
1025 | unsigned long pstate; | 1025 | unsigned long pstate; |
1026 | int err; | ||
1027 | |||
1028 | /* Register IRQ handler. */ | ||
1029 | err = request_irq(build_irq(0, 0, 0UL, 0UL), cfunc, 0, | ||
1030 | "timer", NULL); | ||
1031 | |||
1032 | if (err) { | ||
1033 | prom_printf("Serious problem, cannot register TICK_INT\n"); | ||
1034 | prom_halt(); | ||
1035 | } | ||
1036 | 1026 | ||
1037 | /* Guarantee that the following sequences execute | 1027 | /* Guarantee that the following sequences execute |
1038 | * uninterrupted. | 1028 | * uninterrupted. |
@@ -1116,7 +1106,7 @@ void __init time_init(void) | |||
1116 | /* Now that the interpolator is registered, it is | 1106 | /* Now that the interpolator is registered, it is |
1117 | * safe to start the timer ticking. | 1107 | * safe to start the timer ticking. |
1118 | */ | 1108 | */ |
1119 | sparc64_start_timers(timer_interrupt); | 1109 | sparc64_start_timers(); |
1120 | 1110 | ||
1121 | timer_ticks_per_nsec_quotient = | 1111 | timer_ticks_per_nsec_quotient = |
1122 | (((NSEC_PER_SEC << SPARC64_NSEC_PER_CYC_SHIFT) + | 1112 | (((NSEC_PER_SEC << SPARC64_NSEC_PER_CYC_SHIFT) + |