1
0
Fork 0

powerpc/xmon: Fix output of XIVE IPI

When dumping the XIVE state of an CPU IPI, xmon does not check if the
CPU is started or not which can cause an error. Add a check for that
and change the output to be on one line just as the XIVE interrupts of
the machine.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20190910081850.26038-3-clg@kaod.org
alistair/sunxi64-5.4-dsi
Cédric Le Goater 2019-09-10 10:18:50 +02:00 committed by Michael Ellerman
parent 5896163f7f
commit 855d9140a3
1 changed files with 16 additions and 11 deletions

View File

@ -237,25 +237,30 @@ static notrace void xive_dump_eq(const char *name, struct xive_q *q)
i0 = be32_to_cpup(q->qpage + idx);
idx = (idx + 1) & q->msk;
i1 = be32_to_cpup(q->qpage + idx);
xmon_printf(" %s Q T=%d %08x %08x ...\n", name,
q->toggle, i0, i1);
xmon_printf("%s idx=%d T=%d %08x %08x ...", name,
q->idx, q->toggle, i0, i1);
}
notrace void xmon_xive_do_dump(int cpu)
{
struct xive_cpu *xc = per_cpu(xive_cpu, cpu);
xmon_printf("XIVE state for CPU %d:\n", cpu);
xmon_printf(" pp=%02x cppr=%02x\n", xc->pending_prio, xc->cppr);
xive_dump_eq("IRQ", &xc->queue[xive_irq_priority]);
xmon_printf("CPU %d:", cpu);
if (xc) {
xmon_printf("pp=%02x CPPR=%02x ", xc->pending_prio, xc->cppr);
#ifdef CONFIG_SMP
{
u64 val = xive_esb_read(&xc->ipi_data, XIVE_ESB_GET);
xmon_printf(" IPI state: %x:%c%c\n", xc->hw_ipi,
val & XIVE_ESB_VAL_P ? 'P' : 'p',
val & XIVE_ESB_VAL_Q ? 'Q' : 'q');
}
{
u64 val = xive_esb_read(&xc->ipi_data, XIVE_ESB_GET);
xmon_printf("IPI=0x%08x PQ=%c%c ", xc->hw_ipi,
val & XIVE_ESB_VAL_P ? 'P' : '-',
val & XIVE_ESB_VAL_Q ? 'Q' : '-');
}
#endif
xive_dump_eq("EQ", &xc->queue[xive_irq_priority]);
}
xmon_printf("\n");
}
int xmon_xive_get_irq_config(u32 hw_irq, struct irq_data *d)