diff options
Diffstat (limited to 'kernel/irq/chip.c')
-rw-r--r-- | kernel/irq/chip.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index b4c1bc7c9ca2..637389088b3f 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c | |||
@@ -820,6 +820,17 @@ __irq_do_set_handler(struct irq_desc *desc, irq_flow_handler_t handle, | |||
820 | desc->name = name; | 820 | desc->name = name; |
821 | 821 | ||
822 | if (handle != handle_bad_irq && is_chained) { | 822 | if (handle != handle_bad_irq && is_chained) { |
823 | /* | ||
824 | * We're about to start this interrupt immediately, | ||
825 | * hence the need to set the trigger configuration. | ||
826 | * But the .set_type callback may have overridden the | ||
827 | * flow handler, ignoring that we're dealing with a | ||
828 | * chained interrupt. Reset it immediately because we | ||
829 | * do know better. | ||
830 | */ | ||
831 | __irq_set_trigger(desc, irqd_get_trigger_type(&desc->irq_data)); | ||
832 | desc->handle_irq = handle; | ||
833 | |||
823 | irq_settings_set_noprobe(desc); | 834 | irq_settings_set_noprobe(desc); |
824 | irq_settings_set_norequest(desc); | 835 | irq_settings_set_norequest(desc); |
825 | irq_settings_set_nothread(desc); | 836 | irq_settings_set_nothread(desc); |