On 01/07/16 02:24, Shawn Lin wrote: > This patch adds Rockchip PCIe controller support found > on RK3399 Soc platform. > > Signed-off-by: Shawn Lin <shawn.lin@xxxxxxxxxxxxxx> > > --- [...] > +static void rockchip_pcie_legacy_int_handler(struct irq_desc *desc) > +{ > + struct irq_chip *chip = irq_desc_get_chip(desc); > + struct rockchip_pcie_port *port; > + u32 reg; > + > + chained_irq_enter(chip, desc); > + port = irq_desc_get_handler_data(desc); > + > + reg = pcie_read(port, PCIE_CLIENT_INT_STATUS); > + reg = (reg & ROCKCHIP_PCIE_RPIFR1_INTR_MASK) >> > + ROCKCHIP_PCIE_RPIFR1_INTR_SHIFT; > + if (reg) > + generic_handle_irq(irq_find_mapping(port->irq_domain, > + ffs(reg))); Can't you get multiple pending interrupts at the same time? Here, you seem to only process one interrupt at a time, which is going to be pretty inefficient. How about something like: while (reg) { int hwirq = ffs(reg); int irq; reg &= ~BIT(hwirq); irq = irq_find_mapping(port->irq_domain, hwirq); if (irq) generic_handle_irq(irq); } > + chained_irq_exit(chip, desc); > +} > + Thanks, M. -- Jazz is not dead. It just smells funny... -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html