diff options
Diffstat (limited to 'kernel/irq')
-rw-r--r-- | kernel/irq/Kconfig | 3 | ||||
-rw-r--r-- | kernel/irq/chip.c | 11 |
2 files changed, 14 insertions, 0 deletions
diff --git a/kernel/irq/Kconfig b/kernel/irq/Kconfig index 48ad25f5fa59..9149be729e45 100644 --- a/kernel/irq/Kconfig +++ b/kernel/irq/Kconfig | |||
@@ -35,6 +35,9 @@ config AUTO_IRQ_AFFINITY | |||
35 | config HARDIRQS_SW_RESEND | 35 | config HARDIRQS_SW_RESEND |
36 | def_bool n | 36 | def_bool n |
37 | 37 | ||
38 | config IRQ_PREFLOW_FASTEOI | ||
39 | def_bool n | ||
40 | |||
38 | config SPARSE_IRQ | 41 | config SPARSE_IRQ |
39 | bool "Support sparse irq numbering" | 42 | bool "Support sparse irq numbering" |
40 | depends on HAVE_SPARSE_IRQ | 43 | depends on HAVE_SPARSE_IRQ |
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 2a36038b8f59..08be5d182be3 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c | |||
@@ -471,6 +471,16 @@ out_unlock: | |||
471 | } | 471 | } |
472 | EXPORT_SYMBOL_GPL(handle_level_irq); | 472 | EXPORT_SYMBOL_GPL(handle_level_irq); |
473 | 473 | ||
474 | #ifdef CONFIG_IRQ_PREFLOW_FASTEOI | ||
475 | static inline void preflow_handler(struct irq_desc *desc) | ||
476 | { | ||
477 | if (desc->preflow_handler) | ||
478 | desc->preflow_handler(&desc->irq_data); | ||
479 | } | ||
480 | #else | ||
481 | static inline void preflow_handler(struct irq_desc *desc) { } | ||
482 | #endif | ||
483 | |||
474 | /** | 484 | /** |
475 | * handle_fasteoi_irq - irq handler for transparent controllers | 485 | * handle_fasteoi_irq - irq handler for transparent controllers |
476 | * @irq: the interrupt number | 486 | * @irq: the interrupt number |
@@ -503,6 +513,7 @@ handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc) | |||
503 | mask_irq(desc); | 513 | mask_irq(desc); |
504 | goto out; | 514 | goto out; |
505 | } | 515 | } |
516 | preflow_handler(desc); | ||
506 | handle_irq_event(desc); | 517 | handle_irq_event(desc); |
507 | out: | 518 | out: |
508 | desc->irq_data.chip->irq_eoi(&desc->irq_data); | 519 | desc->irq_data.chip->irq_eoi(&desc->irq_data); |