ppc/pnv: Loop on the threads of the chip to find a matching NVT
CPU_FOREACH() loops on all the CPUs of the machine which is incorrect. Each XIVE Presenter should scan only the HW threads of the chip it belongs to. Signed-off-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: Greg Kurz <groug@kaod.org> Signed-off-by: Cédric Le Goater <clg@kaod.org> Message-Id: <20191125065820.927-5-clg@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
4fa28f2390
commit
feecc6a043
@ -377,19 +377,27 @@ static int pnv_xive_match_nvt(XivePresenter *xptr, uint8_t format,
|
|||||||
bool cam_ignore, uint8_t priority,
|
bool cam_ignore, uint8_t priority,
|
||||||
uint32_t logic_serv, XiveTCTXMatch *match)
|
uint32_t logic_serv, XiveTCTXMatch *match)
|
||||||
{
|
{
|
||||||
CPUState *cs;
|
PnvXive *xive = PNV_XIVE(xptr);
|
||||||
|
PnvChip *chip = xive->chip;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
int i, j;
|
||||||
|
|
||||||
CPU_FOREACH(cs) {
|
for (i = 0; i < chip->nr_cores; i++) {
|
||||||
PowerPCCPU *cpu = POWERPC_CPU(cs);
|
PnvCore *pc = chip->cores[i];
|
||||||
XiveTCTX *tctx = XIVE_TCTX(pnv_cpu_state(cpu)->intc);
|
CPUCore *cc = CPU_CORE(pc);
|
||||||
|
|
||||||
|
for (j = 0; j < cc->nr_threads; j++) {
|
||||||
|
PowerPCCPU *cpu = pc->threads[j];
|
||||||
|
XiveTCTX *tctx;
|
||||||
int ring;
|
int ring;
|
||||||
|
|
||||||
|
tctx = XIVE_TCTX(pnv_cpu_state(cpu)->intc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check the thread context CAM lines and record matches.
|
* Check the thread context CAM lines and record matches.
|
||||||
*/
|
*/
|
||||||
ring = xive_presenter_tctx_match(xptr, tctx, format, nvt_blk, nvt_idx,
|
ring = xive_presenter_tctx_match(xptr, tctx, format, nvt_blk,
|
||||||
cam_ignore, logic_serv);
|
nvt_idx, cam_ignore, logic_serv);
|
||||||
/*
|
/*
|
||||||
* Save the context and follow on to catch duplicates, that we
|
* Save the context and follow on to catch duplicates, that we
|
||||||
* don't support yet.
|
* don't support yet.
|
||||||
@ -407,6 +415,7 @@ static int pnv_xive_match_nvt(XivePresenter *xptr, uint8_t format,
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user