Re: [PATCH v8 02/10] irqchip/riscv-intc: Allow large non-standard interrupt number

From: Yu-Chien Peter Lin
Date: Wed Feb 21 2024 - 22:32:20 EST


Hi Thomas,

On Tue, Feb 13, 2024 at 11:04:53AM +0100, Thomas Gleixner wrote:
> On Mon, Jan 29 2024 at 17:25, Yu Chien Peter Lin wrote:
> > static asmlinkage void riscv_intc_irq(struct pt_regs *regs)
> > {
> > unsigned long cause = regs->cause & ~CAUSE_IRQ_FLAG;
> >
> > - if (unlikely(cause >= BITS_PER_LONG))
> > - panic("unexpected interrupt cause");
> > -
> > - generic_handle_domain_irq(intc_domain, cause);
> > + if (generic_handle_domain_irq(intc_domain, cause))
> > + pr_warn_ratelimited("Failed to handle interrupt (cause: %ld)\n",
> > + cause);
>
> Either let the cause stick out or you need brackets. See:
>
> https://www.kernel.org/doc/html/latest/process/maintainer-tip.html#bracket-rules
>
> > }
> >
> > /*
> > @@ -93,6 +95,14 @@ static int riscv_intc_domain_alloc(struct irq_domain *domain,
> > if (ret)
> > return ret;
> >
> > + /*
> > + * Only allow hwirq for which we have corresponding standard or
> > + * custom interrupt enable register.
> > + */
> > + if ((riscv_intc_nr_irqs <= hwirq && hwirq < riscv_intc_custom_base) ||
> > + (riscv_intc_custom_base + riscv_intc_custom_nr_irqs) <= hwirq)
> > + return -EINVAL;
>
> Duh. This mix of ordering required to read this 3 times. What's wrong
> with writing this consistently:
>
> if ((hwirq >= riscv_intc_nr_irqs && hwirq < riscv_intc_custom_base) ||
> (hwirq >= iscv_intc_custom_base + riscv_intc_custom_nr_irqs)
> return -EINVAL;
>
> Hmm?
>
> > - pr_info("%d local interrupts mapped\n", BITS_PER_LONG);
> > + pr_info("%d local interrupts mapped\n", riscv_intc_nr_irqs);
> > + if (riscv_intc_custom_nr_irqs)
> > + pr_info("%d custom local interrupts mapped\n",
> > + riscv_intc_custom_nr_irqs);
>
> See bracket rules.
>
> > return 0;
> > }
> > @@ -166,6 +178,10 @@ static int __init riscv_intc_init(struct device_node *node,
> > return 0;
> > }
> >
> > + riscv_intc_nr_irqs = BITS_PER_LONG;
> > + riscv_intc_custom_base = riscv_intc_nr_irqs;
>
> Why don't you initialize the static variables with constants right away?
>
> > + riscv_intc_custom_nr_irqs = 0;
>
> It's already 0, no?
>
> > return riscv_intc_init_common(of_node_to_fwnode(node));
> > }
>
> Thanks,
>
> tglx

Thanks for pointing these out, I'll fix them in PATCH v9.

Regards,
Peter Lin