Skip to content

Commit 708d174

Browse files
committed
genirq: Split out irq_startup() code
Split out the inner workings of irq_startup() so it can be reused to handle managed interrupts gracefully. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Jens Axboe <axboe@kernel.dk> Cc: Marc Zyngier <marc.zyngier@arm.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Keith Busch <keith.busch@intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Christoph Hellwig <hch@lst.de> Link: http://lkml.kernel.org/r/20170619235447.033235144@linutronix.de
1 parent 54fdf6a commit 708d174

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

kernel/irq/chip.c

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,23 @@ static void irq_state_set_started(struct irq_desc *desc)
195195
irqd_set(&desc->irq_data, IRQD_IRQ_STARTED);
196196
}
197197

198+
static int __irq_startup(struct irq_desc *desc)
199+
{
200+
struct irq_data *d = irq_desc_get_irq_data(desc);
201+
int ret = 0;
202+
203+
irq_domain_activate_irq(d);
204+
if (d->chip->irq_startup) {
205+
ret = d->chip->irq_startup(d);
206+
irq_state_clr_disabled(desc);
207+
irq_state_clr_masked(desc);
208+
} else {
209+
irq_enable(desc);
210+
}
211+
irq_state_set_started(desc);
212+
return ret;
213+
}
214+
198215
int irq_startup(struct irq_desc *desc, bool resend)
199216
{
200217
int ret = 0;
@@ -204,19 +221,9 @@ int irq_startup(struct irq_desc *desc, bool resend)
204221
if (irqd_is_started(&desc->irq_data)) {
205222
irq_enable(desc);
206223
} else {
207-
irq_domain_activate_irq(&desc->irq_data);
208-
if (desc->irq_data.chip->irq_startup) {
209-
ret = desc->irq_data.chip->irq_startup(&desc->irq_data);
210-
irq_state_clr_disabled(desc);
211-
irq_state_clr_masked(desc);
212-
} else {
213-
irq_enable(desc);
214-
}
215-
irq_state_set_started(desc);
216-
/* Set default affinity mask once everything is setup */
224+
ret = __irq_startup(desc);
217225
irq_setup_affinity(desc);
218226
}
219-
220227
if (resend)
221228
check_irq_resend(desc);
222229

0 commit comments

Comments
 (0)