diff options
| author | Dan Williams <dan.j.williams@intel.com> | 2017-08-31 16:25:59 -0700 |
|---|---|---|
| committer | Dan Williams <dan.j.williams@intel.com> | 2017-08-31 16:25:59 -0700 |
| commit | 8f98ae0c9b90bb46097e4f28e81e9ae6148e5694 (patch) | |
| tree | c1d0f0d9b0733bf3271780e45d7a1c299fe2fc48 /kernel/irq/chip.c | |
| parent | 58738c495e15badd2015e19ff41f1f1ed55200bc (diff) | |
| parent | 5e405595e5bf4c09fab9ca1e7dbe5b62872757b5 (diff) | |
Merge branch 'for-4.14/fs' into libnvdimm-for-next
Diffstat (limited to 'kernel/irq/chip.c')
| -rw-r--r-- | kernel/irq/chip.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index a3cc37c0c85e..3675c6004f2a 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -1000,7 +1000,7 @@ EXPORT_SYMBOL_GPL(irq_set_chip_and_handler_name); void irq_modify_status(unsigned int irq, unsigned long clr, unsigned long set) { - unsigned long flags; + unsigned long flags, trigger, tmp; struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0); if (!desc) @@ -1014,6 +1014,8 @@ void irq_modify_status(unsigned int irq, unsigned long clr, unsigned long set) irq_settings_clr_and_set(desc, clr, set); + trigger = irqd_get_trigger_type(&desc->irq_data); + irqd_clear(&desc->irq_data, IRQD_NO_BALANCING | IRQD_PER_CPU | IRQD_TRIGGER_MASK | IRQD_LEVEL | IRQD_MOVE_PCNTXT); if (irq_settings_has_no_balance_set(desc)) @@ -1025,7 +1027,11 @@ void irq_modify_status(unsigned int irq, unsigned long clr, unsigned long set) if (irq_settings_is_level(desc)) irqd_set(&desc->irq_data, IRQD_LEVEL); - irqd_set(&desc->irq_data, irq_settings_get_trigger_mask(desc)); + tmp = irq_settings_get_trigger_mask(desc); + if (tmp != IRQ_TYPE_NONE) + trigger = tmp; + + irqd_set(&desc->irq_data, trigger); irq_put_desc_unlock(desc, flags); } |
