From: Benjamin Herrenschmidt <[email protected]> H_IPOLL takes the CPU# of the processor to poll as an argument, it doesn't operate on self.
Signed-off-by: Benjamin Herrenschmidt <[email protected]> Signed-off-by: Cédric Le Goater <[email protected]> --- hw/intc/xics_spapr.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index 607e1c167ba2..9d2b8adef7c5 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -95,8 +95,15 @@ static target_ulong h_eoi(PowerPCCPU *cpu, SpaprMachineState *spapr, static target_ulong h_ipoll(PowerPCCPU *cpu, SpaprMachineState *spapr, target_ulong opcode, target_ulong *args) { + ICPState *icp = xics_icp_get(XICS_FABRIC(spapr), args[0]); uint32_t mfrr; - uint32_t xirr = icp_ipoll(spapr_cpu_state(cpu)->icp, &mfrr); + uint32_t xirr; + + if (!icp) { + return H_PARAMETER; + } + + xirr = icp_ipoll(icp, &mfrr); args[0] = xirr; args[1] = mfrr; -- 2.20.1
