提交 e085255e 编写于 作者: M Milton Miller 提交者: Benjamin Herrenschmidt

powerpc/xics: Cleanup xics_host_map and ipi

Since we already have a special case in map to set the ipi handler, use
the desired flow.

If we don't find an ics to handle the interrupt complain instead of
returning 0 without having set a chip or handler.
Signed-off-by: NMilton Miller <miltonm@bga.com>
Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
上级 71454272
...@@ -135,9 +135,8 @@ static void xics_request_ipi(void) ...@@ -135,9 +135,8 @@ static void xics_request_ipi(void)
/* /*
* IPIs are marked IRQF_DISABLED as they must run with irqs * IPIs are marked IRQF_DISABLED as they must run with irqs
* disabled * disabled, and PERCPU. The handler was set in map.
*/ */
irq_set_handler(ipi, handle_percpu_irq);
BUG_ON(request_irq(ipi, icp_ops->ipi_action, BUG_ON(request_irq(ipi, icp_ops->ipi_action,
IRQF_DISABLED|IRQF_PERCPU, "IPI", NULL)); IRQF_DISABLED|IRQF_PERCPU, "IPI", NULL));
} }
...@@ -341,15 +340,16 @@ static int xics_host_map(struct irq_host *h, unsigned int virq, ...@@ -341,15 +340,16 @@ static int xics_host_map(struct irq_host *h, unsigned int virq,
/* Don't call into ICS for IPIs */ /* Don't call into ICS for IPIs */
if (hw == XICS_IPI) { if (hw == XICS_IPI) {
irq_set_chip_and_handler(virq, &xics_ipi_chip, irq_set_chip_and_handler(virq, &xics_ipi_chip,
handle_fasteoi_irq); handle_percpu_irq);
return 0; return 0;
} }
/* Let the ICS setup the chip data */ /* Let the ICS setup the chip data */
list_for_each_entry(ics, &ics_list, link) list_for_each_entry(ics, &ics_list, link)
if (ics->map(ics, virq) == 0) if (ics->map(ics, virq) == 0)
break;
return 0; return 0;
return -EINVAL;
} }
static int xics_host_xlate(struct irq_host *h, struct device_node *ct, static int xics_host_xlate(struct irq_host *h, struct device_node *ct,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册