Skip to content

Commit 2ef1cb7

Browse files
afzalmamMarc Zyngier
authored andcommitted
irqchip: Replace setup_irq() by request_irq()
request_irq() is preferred over setup_irq(). Invocations of setup_irq() occur after memory allocators are ready. Per tglx[1], setup_irq() existed in olden days when allocators were not ready by the time early interrupts were initialized. Hence replace setup_irq() by request_irq(). [1] https://lkml.kernel.org/r/alpine.DEB.2.20.1710191609480.1971@nanos Signed-off-by: afzal mohammed <[email protected]> Signed-off-by: Marc Zyngier <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent bc714c8 commit 2ef1cb7

File tree

2 files changed

+9
-16
lines changed

2 files changed

+9
-16
lines changed

drivers/irqchip/irq-i8259.c

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -268,15 +268,6 @@ static void init_8259A(int auto_eoi)
268268
raw_spin_unlock_irqrestore(&i8259A_lock, flags);
269269
}
270270

271-
/*
272-
* IRQ2 is cascade interrupt to second interrupt controller
273-
*/
274-
static struct irqaction irq2 = {
275-
.handler = no_action,
276-
.name = "cascade",
277-
.flags = IRQF_NO_THREAD,
278-
};
279-
280271
static struct resource pic1_io_resource = {
281272
.name = "pic1",
282273
.start = PIC_MASTER_CMD,
@@ -311,6 +302,10 @@ static const struct irq_domain_ops i8259A_ops = {
311302
*/
312303
struct irq_domain * __init __init_i8259_irqs(struct device_node *node)
313304
{
305+
/*
306+
* PIC_CASCADE_IR is cascade interrupt to second interrupt controller
307+
*/
308+
int irq = I8259A_IRQ_BASE + PIC_CASCADE_IR;
314309
struct irq_domain *domain;
315310

316311
insert_resource(&ioport_resource, &pic1_io_resource);
@@ -323,7 +318,8 @@ struct irq_domain * __init __init_i8259_irqs(struct device_node *node)
323318
if (!domain)
324319
panic("Failed to add i8259 IRQ domain");
325320

326-
setup_irq(I8259A_IRQ_BASE + PIC_CASCADE_IR, &irq2);
321+
if (request_irq(irq, no_action, IRQF_NO_THREAD, "cascade", NULL))
322+
pr_err("Failed to register cascade interrupt\n");
327323
register_syscore_ops(&i8259_syscore_ops);
328324
return domain;
329325
}

drivers/irqchip/irq-ingenic.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,6 @@ static irqreturn_t intc_cascade(int irq, void *data)
5858
return IRQ_HANDLED;
5959
}
6060

61-
static struct irqaction intc_cascade_action = {
62-
.handler = intc_cascade,
63-
.name = "SoC intc cascade interrupt",
64-
};
65-
6661
static int __init ingenic_intc_of_init(struct device_node *node,
6762
unsigned num_chips)
6863
{
@@ -130,7 +125,9 @@ static int __init ingenic_intc_of_init(struct device_node *node,
130125
irq_reg_writel(gc, IRQ_MSK(32), JZ_REG_INTC_SET_MASK);
131126
}
132127

133-
setup_irq(parent_irq, &intc_cascade_action);
128+
if (request_irq(parent_irq, intc_cascade, 0,
129+
"SoC intc cascade interrupt", NULL))
130+
pr_err("Failed to register SoC intc cascade interrupt\n");
134131
return 0;
135132

136133
out_domain_remove:

0 commit comments

Comments
 (0)