aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/irq/handle.c59
-rw-r--r--kernel/irq/internals.h2
2 files changed, 44 insertions, 17 deletions
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index fc27d76e83ef..adca5b4b40d8 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -291,7 +291,15 @@ void clear_kstat_irqs(struct irq_desc *desc)
291 * What should we do if we get a hw irq event on an illegal vector? 291 * What should we do if we get a hw irq event on an illegal vector?
292 * Each architecture has to answer this themself. 292 * Each architecture has to answer this themself.
293 */ 293 */
294static void ack_bad(unsigned int irq) 294static void ack_bad(struct irq_data *data)
295{
296 struct irq_desc *desc = irq_data_to_desc(data);
297
298 print_irq_desc(data->irq, desc);
299 ack_bad_irq(data->irq);
300}
301
302static void compat_ack_bad(unsigned int irq)
295{ 303{
296 struct irq_desc *desc = irq_to_desc(irq); 304 struct irq_desc *desc = irq_to_desc(irq);
297 305
@@ -302,11 +310,16 @@ static void ack_bad(unsigned int irq)
302/* 310/*
303 * NOP functions 311 * NOP functions
304 */ 312 */
305static void noop(unsigned int irq) 313static void noop(struct irq_data *data) { }
314
315static unsigned int noop_ret(struct irq_data *data)
306{ 316{
317 return 0;
307} 318}
308 319
309static unsigned int noop_ret(unsigned int irq) 320static void compat_noop(unsigned int irq) { }
321
322static unsigned int compat_noop_ret(unsigned int irq)
310{ 323{
311 return 0; 324 return 0;
312} 325}
@@ -316,12 +329,17 @@ static unsigned int noop_ret(unsigned int irq)
316 */ 329 */
317struct irq_chip no_irq_chip = { 330struct irq_chip no_irq_chip = {
318 .name = "none", 331 .name = "none",
319 .startup = noop_ret, 332 .irq_startup = noop_ret,
320 .shutdown = noop, 333 .irq_shutdown = noop,
321 .enable = noop, 334 .irq_enable = noop,
322 .disable = noop, 335 .irq_disable = noop,
323 .ack = ack_bad, 336 .irq_ack = ack_bad,
324 .end = noop, 337 .startup = compat_noop_ret,
338 .shutdown = compat_noop,
339 .enable = compat_noop,
340 .disable = compat_noop,
341 .ack = compat_ack_bad,
342 .end = compat_noop,
325}; 343};
326 344
327/* 345/*
@@ -330,14 +348,21 @@ struct irq_chip no_irq_chip = {
330 */ 348 */
331struct irq_chip dummy_irq_chip = { 349struct irq_chip dummy_irq_chip = {
332 .name = "dummy", 350 .name = "dummy",
333 .startup = noop_ret, 351 .irq_startup = noop_ret,
334 .shutdown = noop, 352 .irq_shutdown = noop,
335 .enable = noop, 353 .irq_enable = noop,
336 .disable = noop, 354 .irq_disable = noop,
337 .ack = noop, 355 .irq_ack = noop,
338 .mask = noop, 356 .irq_mask = noop,
339 .unmask = noop, 357 .irq_unmask = noop,
340 .end = noop, 358 .startup = compat_noop_ret,
359 .shutdown = compat_noop,
360 .enable = compat_noop,
361 .disable = compat_noop,
362 .ack = compat_noop,
363 .mask = compat_noop,
364 .unmask = compat_noop,
365 .end = compat_noop,
341}; 366};
342 367
343/* 368/*
diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h
index a805a00cfd28..562fc7eeabec 100644
--- a/kernel/irq/internals.h
+++ b/kernel/irq/internals.h
@@ -4,6 +4,8 @@
4 4
5extern int noirqdebug; 5extern int noirqdebug;
6 6
7#define irq_data_to_desc(data) container_of(data, struct irq_desc, irq_data)
8
7/* Set default functions for irq_chip structures: */ 9/* Set default functions for irq_chip structures: */
8extern void irq_chip_set_defaults(struct irq_chip *chip); 10extern void irq_chip_set_defaults(struct irq_chip *chip);
9 11