diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/irq/chip.c | 36 | ||||
-rw-r--r-- | kernel/irq/handle.c | 19 | ||||
-rw-r--r-- | kernel/irq/spurious.c | 10 | ||||
-rw-r--r-- | kernel/power/poweroff.c | 3 | ||||
-rw-r--r-- | kernel/profile.c | 5 |
5 files changed, 33 insertions, 40 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 53e9dce6c657..11c99697acfe 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c | |||
@@ -249,7 +249,6 @@ static inline void mask_ack_irq(struct irq_desc *desc, int irq) | |||
249 | * handle_simple_irq - Simple and software-decoded IRQs. | 249 | * handle_simple_irq - Simple and software-decoded IRQs. |
250 | * @irq: the interrupt number | 250 | * @irq: the interrupt number |
251 | * @desc: the interrupt description structure for this irq | 251 | * @desc: the interrupt description structure for this irq |
252 | * @regs: pointer to a register structure | ||
253 | * | 252 | * |
254 | * Simple interrupts are either sent from a demultiplexing interrupt | 253 | * Simple interrupts are either sent from a demultiplexing interrupt |
255 | * handler or come from hardware, where no interrupt hardware control | 254 | * handler or come from hardware, where no interrupt hardware control |
@@ -259,7 +258,7 @@ static inline void mask_ack_irq(struct irq_desc *desc, int irq) | |||
259 | * unmask issues if necessary. | 258 | * unmask issues if necessary. |
260 | */ | 259 | */ |
261 | void fastcall | 260 | void fastcall |
262 | handle_simple_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | 261 | handle_simple_irq(unsigned int irq, struct irq_desc *desc) |
263 | { | 262 | { |
264 | struct irqaction *action; | 263 | struct irqaction *action; |
265 | irqreturn_t action_ret; | 264 | irqreturn_t action_ret; |
@@ -279,9 +278,9 @@ handle_simple_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | |||
279 | desc->status |= IRQ_INPROGRESS; | 278 | desc->status |= IRQ_INPROGRESS; |
280 | spin_unlock(&desc->lock); | 279 | spin_unlock(&desc->lock); |
281 | 280 | ||
282 | action_ret = handle_IRQ_event(irq, regs, action); | 281 | action_ret = handle_IRQ_event(irq, action); |
283 | if (!noirqdebug) | 282 | if (!noirqdebug) |
284 | note_interrupt(irq, desc, action_ret, regs); | 283 | note_interrupt(irq, desc, action_ret); |
285 | 284 | ||
286 | spin_lock(&desc->lock); | 285 | spin_lock(&desc->lock); |
287 | desc->status &= ~IRQ_INPROGRESS; | 286 | desc->status &= ~IRQ_INPROGRESS; |
@@ -293,7 +292,6 @@ out_unlock: | |||
293 | * handle_level_irq - Level type irq handler | 292 | * handle_level_irq - Level type irq handler |
294 | * @irq: the interrupt number | 293 | * @irq: the interrupt number |
295 | * @desc: the interrupt description structure for this irq | 294 | * @desc: the interrupt description structure for this irq |
296 | * @regs: pointer to a register structure | ||
297 | * | 295 | * |
298 | * Level type interrupts are active as long as the hardware line has | 296 | * Level type interrupts are active as long as the hardware line has |
299 | * the active level. This may require to mask the interrupt and unmask | 297 | * the active level. This may require to mask the interrupt and unmask |
@@ -301,7 +299,7 @@ out_unlock: | |||
301 | * interrupt line is back to inactive. | 299 | * interrupt line is back to inactive. |
302 | */ | 300 | */ |
303 | void fastcall | 301 | void fastcall |
304 | handle_level_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | 302 | handle_level_irq(unsigned int irq, struct irq_desc *desc) |
305 | { | 303 | { |
306 | unsigned int cpu = smp_processor_id(); | 304 | unsigned int cpu = smp_processor_id(); |
307 | struct irqaction *action; | 305 | struct irqaction *action; |
@@ -329,9 +327,9 @@ handle_level_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | |||
329 | desc->status &= ~IRQ_PENDING; | 327 | desc->status &= ~IRQ_PENDING; |
330 | spin_unlock(&desc->lock); | 328 | spin_unlock(&desc->lock); |
331 | 329 | ||
332 | action_ret = handle_IRQ_event(irq, regs, action); | 330 | action_ret = handle_IRQ_event(irq, action); |
333 | if (!noirqdebug) | 331 | if (!noirqdebug) |
334 | note_interrupt(irq, desc, action_ret, regs); | 332 | note_interrupt(irq, desc, action_ret); |
335 | 333 | ||
336 | spin_lock(&desc->lock); | 334 | spin_lock(&desc->lock); |
337 | desc->status &= ~IRQ_INPROGRESS; | 335 | desc->status &= ~IRQ_INPROGRESS; |
@@ -345,7 +343,6 @@ out_unlock: | |||
345 | * handle_fasteoi_irq - irq handler for transparent controllers | 343 | * handle_fasteoi_irq - irq handler for transparent controllers |
346 | * @irq: the interrupt number | 344 | * @irq: the interrupt number |
347 | * @desc: the interrupt description structure for this irq | 345 | * @desc: the interrupt description structure for this irq |
348 | * @regs: pointer to a register structure | ||
349 | * | 346 | * |
350 | * Only a single callback will be issued to the chip: an ->eoi() | 347 | * Only a single callback will be issued to the chip: an ->eoi() |
351 | * call when the interrupt has been serviced. This enables support | 348 | * call when the interrupt has been serviced. This enables support |
@@ -353,8 +350,7 @@ out_unlock: | |||
353 | * details in hardware, transparently. | 350 | * details in hardware, transparently. |
354 | */ | 351 | */ |
355 | void fastcall | 352 | void fastcall |
356 | handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc, | 353 | handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc) |
357 | struct pt_regs *regs) | ||
358 | { | 354 | { |
359 | unsigned int cpu = smp_processor_id(); | 355 | unsigned int cpu = smp_processor_id(); |
360 | struct irqaction *action; | 356 | struct irqaction *action; |
@@ -382,9 +378,9 @@ handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc, | |||
382 | desc->status &= ~IRQ_PENDING; | 378 | desc->status &= ~IRQ_PENDING; |
383 | spin_unlock(&desc->lock); | 379 | spin_unlock(&desc->lock); |
384 | 380 | ||
385 | action_ret = handle_IRQ_event(irq, regs, action); | 381 | action_ret = handle_IRQ_event(irq, action); |
386 | if (!noirqdebug) | 382 | if (!noirqdebug) |
387 | note_interrupt(irq, desc, action_ret, regs); | 383 | note_interrupt(irq, desc, action_ret); |
388 | 384 | ||
389 | spin_lock(&desc->lock); | 385 | spin_lock(&desc->lock); |
390 | desc->status &= ~IRQ_INPROGRESS; | 386 | desc->status &= ~IRQ_INPROGRESS; |
@@ -398,7 +394,6 @@ out: | |||
398 | * handle_edge_irq - edge type IRQ handler | 394 | * handle_edge_irq - edge type IRQ handler |
399 | * @irq: the interrupt number | 395 | * @irq: the interrupt number |
400 | * @desc: the interrupt description structure for this irq | 396 | * @desc: the interrupt description structure for this irq |
401 | * @regs: pointer to a register structure | ||
402 | * | 397 | * |
403 | * Interrupt occures on the falling and/or rising edge of a hardware | 398 | * Interrupt occures on the falling and/or rising edge of a hardware |
404 | * signal. The occurence is latched into the irq controller hardware | 399 | * signal. The occurence is latched into the irq controller hardware |
@@ -412,7 +407,7 @@ out: | |||
412 | * loop is left. | 407 | * loop is left. |
413 | */ | 408 | */ |
414 | void fastcall | 409 | void fastcall |
415 | handle_edge_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | 410 | handle_edge_irq(unsigned int irq, struct irq_desc *desc) |
416 | { | 411 | { |
417 | const unsigned int cpu = smp_processor_id(); | 412 | const unsigned int cpu = smp_processor_id(); |
418 | 413 | ||
@@ -463,9 +458,9 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | |||
463 | 458 | ||
464 | desc->status &= ~IRQ_PENDING; | 459 | desc->status &= ~IRQ_PENDING; |
465 | spin_unlock(&desc->lock); | 460 | spin_unlock(&desc->lock); |
466 | action_ret = handle_IRQ_event(irq, regs, action); | 461 | action_ret = handle_IRQ_event(irq, action); |
467 | if (!noirqdebug) | 462 | if (!noirqdebug) |
468 | note_interrupt(irq, desc, action_ret, regs); | 463 | note_interrupt(irq, desc, action_ret); |
469 | spin_lock(&desc->lock); | 464 | spin_lock(&desc->lock); |
470 | 465 | ||
471 | } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING); | 466 | } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING); |
@@ -480,12 +475,11 @@ out_unlock: | |||
480 | * handle_percpu_IRQ - Per CPU local irq handler | 475 | * handle_percpu_IRQ - Per CPU local irq handler |
481 | * @irq: the interrupt number | 476 | * @irq: the interrupt number |
482 | * @desc: the interrupt description structure for this irq | 477 | * @desc: the interrupt description structure for this irq |
483 | * @regs: pointer to a register structure | ||
484 | * | 478 | * |
485 | * Per CPU interrupts on SMP machines without locking requirements | 479 | * Per CPU interrupts on SMP machines without locking requirements |
486 | */ | 480 | */ |
487 | void fastcall | 481 | void fastcall |
488 | handle_percpu_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | 482 | handle_percpu_irq(unsigned int irq, struct irq_desc *desc) |
489 | { | 483 | { |
490 | irqreturn_t action_ret; | 484 | irqreturn_t action_ret; |
491 | 485 | ||
@@ -494,9 +488,9 @@ handle_percpu_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | |||
494 | if (desc->chip->ack) | 488 | if (desc->chip->ack) |
495 | desc->chip->ack(irq); | 489 | desc->chip->ack(irq); |
496 | 490 | ||
497 | action_ret = handle_IRQ_event(irq, regs, desc->action); | 491 | action_ret = handle_IRQ_event(irq, desc->action); |
498 | if (!noirqdebug) | 492 | if (!noirqdebug) |
499 | note_interrupt(irq, desc, action_ret, regs); | 493 | note_interrupt(irq, desc, action_ret); |
500 | 494 | ||
501 | if (desc->chip->eoi) | 495 | if (desc->chip->eoi) |
502 | desc->chip->eoi(irq); | 496 | desc->chip->eoi(irq); |
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c index 4c6cdbaed661..42aa6f1a3f0f 100644 --- a/kernel/irq/handle.c +++ b/kernel/irq/handle.c | |||
@@ -27,7 +27,7 @@ | |||
27 | * Handles spurious and unhandled IRQ's. It also prints a debugmessage. | 27 | * Handles spurious and unhandled IRQ's. It also prints a debugmessage. |
28 | */ | 28 | */ |
29 | void fastcall | 29 | void fastcall |
30 | handle_bad_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | 30 | handle_bad_irq(unsigned int irq, struct irq_desc *desc) |
31 | { | 31 | { |
32 | print_irq_desc(irq, desc); | 32 | print_irq_desc(irq, desc); |
33 | kstat_this_cpu.irqs[irq]++; | 33 | kstat_this_cpu.irqs[irq]++; |
@@ -115,7 +115,7 @@ struct irq_chip dummy_irq_chip = { | |||
115 | /* | 115 | /* |
116 | * Special, empty irq handler: | 116 | * Special, empty irq handler: |
117 | */ | 117 | */ |
118 | irqreturn_t no_action(int cpl, void *dev_id, struct pt_regs *regs) | 118 | irqreturn_t no_action(int cpl, void *dev_id) |
119 | { | 119 | { |
120 | return IRQ_NONE; | 120 | return IRQ_NONE; |
121 | } | 121 | } |
@@ -123,13 +123,11 @@ irqreturn_t no_action(int cpl, void *dev_id, struct pt_regs *regs) | |||
123 | /** | 123 | /** |
124 | * handle_IRQ_event - irq action chain handler | 124 | * handle_IRQ_event - irq action chain handler |
125 | * @irq: the interrupt number | 125 | * @irq: the interrupt number |
126 | * @regs: pointer to a register structure | ||
127 | * @action: the interrupt action chain for this irq | 126 | * @action: the interrupt action chain for this irq |
128 | * | 127 | * |
129 | * Handles the action chain of an irq event | 128 | * Handles the action chain of an irq event |
130 | */ | 129 | */ |
131 | irqreturn_t handle_IRQ_event(unsigned int irq, struct pt_regs *regs, | 130 | irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action) |
132 | struct irqaction *action) | ||
133 | { | 131 | { |
134 | irqreturn_t ret, retval = IRQ_NONE; | 132 | irqreturn_t ret, retval = IRQ_NONE; |
135 | unsigned int status = 0; | 133 | unsigned int status = 0; |
@@ -140,7 +138,7 @@ irqreturn_t handle_IRQ_event(unsigned int irq, struct pt_regs *regs, | |||
140 | local_irq_enable_in_hardirq(); | 138 | local_irq_enable_in_hardirq(); |
141 | 139 | ||
142 | do { | 140 | do { |
143 | ret = action->handler(irq, action->dev_id, regs); | 141 | ret = action->handler(irq, action->dev_id); |
144 | if (ret == IRQ_HANDLED) | 142 | if (ret == IRQ_HANDLED) |
145 | status |= action->flags; | 143 | status |= action->flags; |
146 | retval |= ret; | 144 | retval |= ret; |
@@ -158,7 +156,6 @@ irqreturn_t handle_IRQ_event(unsigned int irq, struct pt_regs *regs, | |||
158 | /** | 156 | /** |
159 | * __do_IRQ - original all in one highlevel IRQ handler | 157 | * __do_IRQ - original all in one highlevel IRQ handler |
160 | * @irq: the interrupt number | 158 | * @irq: the interrupt number |
161 | * @regs: pointer to a register structure | ||
162 | * | 159 | * |
163 | * __do_IRQ handles all normal device IRQ's (the special | 160 | * __do_IRQ handles all normal device IRQ's (the special |
164 | * SMP cross-CPU interrupts have their own specific | 161 | * SMP cross-CPU interrupts have their own specific |
@@ -167,7 +164,7 @@ irqreturn_t handle_IRQ_event(unsigned int irq, struct pt_regs *regs, | |||
167 | * This is the original x86 implementation which is used for every | 164 | * This is the original x86 implementation which is used for every |
168 | * interrupt type. | 165 | * interrupt type. |
169 | */ | 166 | */ |
170 | fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs) | 167 | fastcall unsigned int __do_IRQ(unsigned int irq) |
171 | { | 168 | { |
172 | struct irq_desc *desc = irq_desc + irq; | 169 | struct irq_desc *desc = irq_desc + irq; |
173 | struct irqaction *action; | 170 | struct irqaction *action; |
@@ -182,7 +179,7 @@ fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs) | |||
182 | */ | 179 | */ |
183 | if (desc->chip->ack) | 180 | if (desc->chip->ack) |
184 | desc->chip->ack(irq); | 181 | desc->chip->ack(irq); |
185 | action_ret = handle_IRQ_event(irq, regs, desc->action); | 182 | action_ret = handle_IRQ_event(irq, desc->action); |
186 | desc->chip->end(irq); | 183 | desc->chip->end(irq); |
187 | return 1; | 184 | return 1; |
188 | } | 185 | } |
@@ -233,11 +230,11 @@ fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs) | |||
233 | 230 | ||
234 | spin_unlock(&desc->lock); | 231 | spin_unlock(&desc->lock); |
235 | 232 | ||
236 | action_ret = handle_IRQ_event(irq, regs, action); | 233 | action_ret = handle_IRQ_event(irq, action); |
237 | 234 | ||
238 | spin_lock(&desc->lock); | 235 | spin_lock(&desc->lock); |
239 | if (!noirqdebug) | 236 | if (!noirqdebug) |
240 | note_interrupt(irq, desc, action_ret, regs); | 237 | note_interrupt(irq, desc, action_ret); |
241 | if (likely(!(desc->status & IRQ_PENDING))) | 238 | if (likely(!(desc->status & IRQ_PENDING))) |
242 | break; | 239 | break; |
243 | desc->status &= ~IRQ_PENDING; | 240 | desc->status &= ~IRQ_PENDING; |
diff --git a/kernel/irq/spurious.c b/kernel/irq/spurious.c index 417e98092cf2..543ea2e5ad93 100644 --- a/kernel/irq/spurious.c +++ b/kernel/irq/spurious.c | |||
@@ -16,7 +16,7 @@ static int irqfixup __read_mostly; | |||
16 | /* | 16 | /* |
17 | * Recovery handler for misrouted interrupts. | 17 | * Recovery handler for misrouted interrupts. |
18 | */ | 18 | */ |
19 | static int misrouted_irq(int irq, struct pt_regs *regs) | 19 | static int misrouted_irq(int irq) |
20 | { | 20 | { |
21 | int i; | 21 | int i; |
22 | int ok = 0; | 22 | int ok = 0; |
@@ -49,7 +49,7 @@ static int misrouted_irq(int irq, struct pt_regs *regs) | |||
49 | while (action) { | 49 | while (action) { |
50 | /* Only shared IRQ handlers are safe to call */ | 50 | /* Only shared IRQ handlers are safe to call */ |
51 | if (action->flags & IRQF_SHARED) { | 51 | if (action->flags & IRQF_SHARED) { |
52 | if (action->handler(i, action->dev_id, regs) == | 52 | if (action->handler(i, action->dev_id) == |
53 | IRQ_HANDLED) | 53 | IRQ_HANDLED) |
54 | ok = 1; | 54 | ok = 1; |
55 | } | 55 | } |
@@ -70,7 +70,7 @@ static int misrouted_irq(int irq, struct pt_regs *regs) | |||
70 | */ | 70 | */ |
71 | work = 1; | 71 | work = 1; |
72 | spin_unlock(&desc->lock); | 72 | spin_unlock(&desc->lock); |
73 | handle_IRQ_event(i, regs, action); | 73 | handle_IRQ_event(i, action); |
74 | spin_lock(&desc->lock); | 74 | spin_lock(&desc->lock); |
75 | desc->status &= ~IRQ_PENDING; | 75 | desc->status &= ~IRQ_PENDING; |
76 | } | 76 | } |
@@ -136,7 +136,7 @@ report_bad_irq(unsigned int irq, struct irq_desc *desc, irqreturn_t action_ret) | |||
136 | } | 136 | } |
137 | 137 | ||
138 | void note_interrupt(unsigned int irq, struct irq_desc *desc, | 138 | void note_interrupt(unsigned int irq, struct irq_desc *desc, |
139 | irqreturn_t action_ret, struct pt_regs *regs) | 139 | irqreturn_t action_ret) |
140 | { | 140 | { |
141 | if (unlikely(action_ret != IRQ_HANDLED)) { | 141 | if (unlikely(action_ret != IRQ_HANDLED)) { |
142 | desc->irqs_unhandled++; | 142 | desc->irqs_unhandled++; |
@@ -147,7 +147,7 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc, | |||
147 | if (unlikely(irqfixup)) { | 147 | if (unlikely(irqfixup)) { |
148 | /* Don't punish working computers */ | 148 | /* Don't punish working computers */ |
149 | if ((irqfixup == 2 && irq == 0) || action_ret == IRQ_NONE) { | 149 | if ((irqfixup == 2 && irq == 0) || action_ret == IRQ_NONE) { |
150 | int ok = misrouted_irq(irq, regs); | 150 | int ok = misrouted_irq(irq); |
151 | if (action_ret == IRQ_NONE) | 151 | if (action_ret == IRQ_NONE) |
152 | desc->irqs_unhandled -= ok; | 152 | desc->irqs_unhandled -= ok; |
153 | } | 153 | } |
diff --git a/kernel/power/poweroff.c b/kernel/power/poweroff.c index 7a4144ba3afd..f1f900ac3164 100644 --- a/kernel/power/poweroff.c +++ b/kernel/power/poweroff.c | |||
@@ -23,8 +23,7 @@ static void do_poweroff(void *dummy) | |||
23 | 23 | ||
24 | static DECLARE_WORK(poweroff_work, do_poweroff, NULL); | 24 | static DECLARE_WORK(poweroff_work, do_poweroff, NULL); |
25 | 25 | ||
26 | static void handle_poweroff(int key, struct pt_regs *pt_regs, | 26 | static void handle_poweroff(int key, struct tty_struct *tty) |
27 | struct tty_struct *tty) | ||
28 | { | 27 | { |
29 | schedule_work(&poweroff_work); | 28 | schedule_work(&poweroff_work); |
30 | } | 29 | } |
diff --git a/kernel/profile.c b/kernel/profile.c index fb660c7d35ba..857300a2afec 100644 --- a/kernel/profile.c +++ b/kernel/profile.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/mutex.h> | 25 | #include <linux/mutex.h> |
26 | #include <asm/sections.h> | 26 | #include <asm/sections.h> |
27 | #include <asm/semaphore.h> | 27 | #include <asm/semaphore.h> |
28 | #include <asm/irq_regs.h> | ||
28 | 29 | ||
29 | struct profile_hit { | 30 | struct profile_hit { |
30 | u32 pc, hits; | 31 | u32 pc, hits; |
@@ -366,8 +367,10 @@ void profile_hit(int type, void *__pc) | |||
366 | } | 367 | } |
367 | #endif /* !CONFIG_SMP */ | 368 | #endif /* !CONFIG_SMP */ |
368 | 369 | ||
369 | void profile_tick(int type, struct pt_regs *regs) | 370 | void profile_tick(int type) |
370 | { | 371 | { |
372 | struct pt_regs *regs = get_irq_regs(); | ||
373 | |||
371 | if (type == CPU_PROFILING && timer_hook) | 374 | if (type == CPU_PROFILING && timer_hook) |
372 | timer_hook(regs); | 375 | timer_hook(regs); |
373 | if (!user_mode(regs) && cpu_isset(smp_processor_id(), prof_cpu_mask)) | 376 | if (!user_mode(regs) && cpu_isset(smp_processor_id(), prof_cpu_mask)) |