Loading kernel/irq/chip.c +10 −4 Original line number Diff line number Diff line Loading @@ -194,11 +194,14 @@ EXPORT_SYMBOL_GPL(set_irq_nested_thread); int irq_startup(struct irq_desc *desc) { desc->status &= ~(IRQ_MASKED | IRQ_DISABLED); desc->status &= ~IRQ_DISABLED; desc->depth = 0; if (desc->irq_data.chip->irq_startup) return desc->irq_data.chip->irq_startup(&desc->irq_data); if (desc->irq_data.chip->irq_startup) { int ret = desc->irq_data.chip->irq_startup(&desc->irq_data); desc->status &= ~IRQ_MASKED; return ret; } irq_enable(desc); return 0; Loading @@ -206,7 +209,7 @@ int irq_startup(struct irq_desc *desc) void irq_shutdown(struct irq_desc *desc) { desc->status |= IRQ_MASKED | IRQ_DISABLED; desc->status |= IRQ_DISABLED; desc->depth = 1; if (desc->irq_data.chip->irq_shutdown) desc->irq_data.chip->irq_shutdown(&desc->irq_data); Loading @@ -214,10 +217,12 @@ void irq_shutdown(struct irq_desc *desc) desc->irq_data.chip->irq_disable(&desc->irq_data); else desc->irq_data.chip->irq_mask(&desc->irq_data); desc->status |= IRQ_MASKED; } void irq_enable(struct irq_desc *desc) { desc->status &= ~IRQ_DISABLED; if (desc->irq_data.chip->irq_enable) desc->irq_data.chip->irq_enable(&desc->irq_data); else Loading @@ -227,6 +232,7 @@ void irq_enable(struct irq_desc *desc) void irq_disable(struct irq_desc *desc) { desc->status |= IRQ_DISABLED; if (desc->irq_data.chip->irq_disable) { desc->irq_data.chip->irq_disable(&desc->irq_data); desc->status |= IRQ_MASKED; Loading kernel/irq/manage.c +3 −6 Original line number Diff line number Diff line Loading @@ -329,11 +329,9 @@ void __disable_irq(struct irq_desc *desc, unsigned int irq, bool suspend) desc->status |= IRQ_SUSPENDED; } if (!desc->depth++) { desc->status |= IRQ_DISABLED; if (!desc->depth++) irq_disable(desc); } } /** * disable_irq_nosync - disable an irq without waiting Loading Loading @@ -407,12 +405,11 @@ void __enable_irq(struct irq_desc *desc, unsigned int irq, bool resume) WARN(1, KERN_WARNING "Unbalanced enable for IRQ %d\n", irq); break; case 1: { unsigned int status = desc->status & ~IRQ_DISABLED; if (desc->status & IRQ_SUSPENDED) goto err_out; /* Prevent probing on this irq: */ desc->status = status | IRQ_NOPROBE; desc->status |= IRQ_NOPROBE; irq_enable(desc); check_irq_resend(desc, irq); /* fall-through */ } Loading kernel/irq/resend.c +0 −5 Original line number Diff line number Diff line Loading @@ -55,11 +55,6 @@ static DECLARE_TASKLET(resend_tasklet, resend_irqs, 0); */ void check_irq_resend(struct irq_desc *desc, unsigned int irq) { /* * Make sure the interrupt is enabled, before resending it: */ irq_enable(desc); /* * We do not resend level type interrupts. Level type * interrupts are resent by hardware when they are still Loading kernel/irq/spurious.c +1 −1 Original line number Diff line number Diff line Loading @@ -301,7 +301,7 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc, * Now kill the IRQ */ printk(KERN_EMERG "Disabling IRQ #%d\n", irq); desc->status |= IRQ_DISABLED | IRQ_SPURIOUS_DISABLED; desc->status |= IRQ_SPURIOUS_DISABLED; desc->depth++; irq_disable(desc); Loading Loading
kernel/irq/chip.c +10 −4 Original line number Diff line number Diff line Loading @@ -194,11 +194,14 @@ EXPORT_SYMBOL_GPL(set_irq_nested_thread); int irq_startup(struct irq_desc *desc) { desc->status &= ~(IRQ_MASKED | IRQ_DISABLED); desc->status &= ~IRQ_DISABLED; desc->depth = 0; if (desc->irq_data.chip->irq_startup) return desc->irq_data.chip->irq_startup(&desc->irq_data); if (desc->irq_data.chip->irq_startup) { int ret = desc->irq_data.chip->irq_startup(&desc->irq_data); desc->status &= ~IRQ_MASKED; return ret; } irq_enable(desc); return 0; Loading @@ -206,7 +209,7 @@ int irq_startup(struct irq_desc *desc) void irq_shutdown(struct irq_desc *desc) { desc->status |= IRQ_MASKED | IRQ_DISABLED; desc->status |= IRQ_DISABLED; desc->depth = 1; if (desc->irq_data.chip->irq_shutdown) desc->irq_data.chip->irq_shutdown(&desc->irq_data); Loading @@ -214,10 +217,12 @@ void irq_shutdown(struct irq_desc *desc) desc->irq_data.chip->irq_disable(&desc->irq_data); else desc->irq_data.chip->irq_mask(&desc->irq_data); desc->status |= IRQ_MASKED; } void irq_enable(struct irq_desc *desc) { desc->status &= ~IRQ_DISABLED; if (desc->irq_data.chip->irq_enable) desc->irq_data.chip->irq_enable(&desc->irq_data); else Loading @@ -227,6 +232,7 @@ void irq_enable(struct irq_desc *desc) void irq_disable(struct irq_desc *desc) { desc->status |= IRQ_DISABLED; if (desc->irq_data.chip->irq_disable) { desc->irq_data.chip->irq_disable(&desc->irq_data); desc->status |= IRQ_MASKED; Loading
kernel/irq/manage.c +3 −6 Original line number Diff line number Diff line Loading @@ -329,11 +329,9 @@ void __disable_irq(struct irq_desc *desc, unsigned int irq, bool suspend) desc->status |= IRQ_SUSPENDED; } if (!desc->depth++) { desc->status |= IRQ_DISABLED; if (!desc->depth++) irq_disable(desc); } } /** * disable_irq_nosync - disable an irq without waiting Loading Loading @@ -407,12 +405,11 @@ void __enable_irq(struct irq_desc *desc, unsigned int irq, bool resume) WARN(1, KERN_WARNING "Unbalanced enable for IRQ %d\n", irq); break; case 1: { unsigned int status = desc->status & ~IRQ_DISABLED; if (desc->status & IRQ_SUSPENDED) goto err_out; /* Prevent probing on this irq: */ desc->status = status | IRQ_NOPROBE; desc->status |= IRQ_NOPROBE; irq_enable(desc); check_irq_resend(desc, irq); /* fall-through */ } Loading
kernel/irq/resend.c +0 −5 Original line number Diff line number Diff line Loading @@ -55,11 +55,6 @@ static DECLARE_TASKLET(resend_tasklet, resend_irqs, 0); */ void check_irq_resend(struct irq_desc *desc, unsigned int irq) { /* * Make sure the interrupt is enabled, before resending it: */ irq_enable(desc); /* * We do not resend level type interrupts. Level type * interrupts are resent by hardware when they are still Loading
kernel/irq/spurious.c +1 −1 Original line number Diff line number Diff line Loading @@ -301,7 +301,7 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc, * Now kill the IRQ */ printk(KERN_EMERG "Disabling IRQ #%d\n", irq); desc->status |= IRQ_DISABLED | IRQ_SPURIOUS_DISABLED; desc->status |= IRQ_SPURIOUS_DISABLED; desc->depth++; irq_disable(desc); Loading