On 3/9/21 10:42 AM, Greg Kurz wrote: > On Tue, 9 Mar 2021 10:13:39 +0100 > Greg Kurz <gr...@kaod.org> wrote: > >> On Mon, 8 Mar 2021 19:11:11 +0100 >> Cédric Le Goater <c...@kaod.org> wrote: >> >>> On 3/8/21 7:07 PM, Greg Kurz wrote: >>>> On Wed, 3 Mar 2021 18:48:53 +0100 >>>> Cédric Le Goater <c...@kaod.org> wrote: >>>> >>>>> Now that the IPI interrupt has its own domain, the checks on the HW >>>>> interrupt number XIVE_IPI_HW_IRQ and on the chip can be replaced by a >>>>> check on the domain. >>>>> >>>>> Signed-off-by: Cédric Le Goater <c...@kaod.org> >>>>> --- >>>> >>>> Shouldn't this have the following tags ? >>>> >>>> Reported-by: kernel test robot <l...@intel.com> >>>> Reported-by: Dan Carpenter <dan.carpen...@oracle.com> >>>> Fixes: 930914b7d528 ("powerpc/xive: Add a debugfs file to dump internal >>>> XIVE state") >>> >>> The next patch has because it removes the useless check on irq_data. >>> >> >> Ok I get it. This report isn't about an actual crash. Just a false >> positive because of the not needed check in the caller. >> > > Hrm... I meant because of the check in xive_debug_show_irq(). On the > contrary, the check removed by this patch in xive_core_debug_show() > was rather an explicit hint that xive_debug_show_irq() couldn't be > called with d being NULL.
yes. irq_desc_get_irq_data() does not return a NULL value and xive_debug_show_irq() is only called from the for_each_irq_desc() loop. C. > >>> C. >>> >>>> >>>> Anyway, >>>> >>>> Reviewed-by: Greg Kurz <gr...@kaod.org> >>>> >>>>> arch/powerpc/sysdev/xive/common.c | 18 ++++-------------- >>>>> 1 file changed, 4 insertions(+), 14 deletions(-) >>>>> >>>>> diff --git a/arch/powerpc/sysdev/xive/common.c >>>>> b/arch/powerpc/sysdev/xive/common.c >>>>> index 678680531d26..7581cb12bb53 100644 >>>>> --- a/arch/powerpc/sysdev/xive/common.c >>>>> +++ b/arch/powerpc/sysdev/xive/common.c >>>>> @@ -1579,17 +1579,14 @@ static void xive_debug_show_cpu(struct seq_file >>>>> *m, int cpu) >>>>> seq_puts(m, "\n"); >>>>> } >>>>> >>>>> -static void xive_debug_show_irq(struct seq_file *m, u32 hw_irq, struct >>>>> irq_data *d) >>>>> +static void xive_debug_show_irq(struct seq_file *m, struct irq_data *d) >>>>> { >>>>> - struct irq_chip *chip = irq_data_get_irq_chip(d); >>>>> + unsigned int hw_irq = (unsigned int)irqd_to_hwirq(d); >>>>> int rc; >>>>> u32 target; >>>>> u8 prio; >>>>> u32 lirq; >>>>> >>>>> - if (!is_xive_irq(chip)) >>>>> - return; >>>>> - >>>>> rc = xive_ops->get_irq_config(hw_irq, &target, &prio, &lirq); >>>>> if (rc) { >>>>> seq_printf(m, "IRQ 0x%08x : no config rc=%d\n", hw_irq, rc); >>>>> @@ -1627,16 +1624,9 @@ static int xive_core_debug_show(struct seq_file >>>>> *m, void *private) >>>>> >>>>> for_each_irq_desc(i, desc) { >>>>> struct irq_data *d = irq_desc_get_irq_data(desc); >>>>> - unsigned int hw_irq; >>>>> - >>>>> - if (!d) >>>>> - continue; >>>>> - >>>>> - hw_irq = (unsigned int)irqd_to_hwirq(d); >>>>> >>>>> - /* IPIs are special (HW number 0) */ >>>>> - if (hw_irq != XIVE_IPI_HW_IRQ) >>>>> - xive_debug_show_irq(m, hw_irq, d); >>>>> + if (d->domain == xive_irq_domain) >>>>> + xive_debug_show_irq(m, d); >>>>> } >>>>> return 0; >>>>> } >>>> >>> >> >