ppc/pnv: make pnv_ics_get() use the chip8->phbs[] array
The function is working today by getting all the child objects of the chip, interacting with each of them to check whether the child is a PHB, and then doing what needs to be done. We have all the chip PHBs in the phbs[] array so interacting with all child objects is unneeded. Open code pnv_ics_get_phb_ics() into pnv_ics_get() and remove both pnv_ics_get_phb_ics() and the ForeachPhb3Args struct. Reviewed-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: Frederic Barrat <fbarrat@linux.ibm.com> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> Message-Id: <20220621173436.165912-5-danielhb413@gmail.com>
This commit is contained in:
parent
792e8bb629
commit
da6be50136
38
hw/ppc/pnv.c
38
hw/ppc/pnv.c
@ -1950,44 +1950,28 @@ PowerPCCPU *pnv_chip_find_cpu(PnvChip *chip, uint32_t pir)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
typedef struct ForeachPhb3Args {
|
||||
int irq;
|
||||
ICSState *ics;
|
||||
} ForeachPhb3Args;
|
||||
|
||||
static int pnv_ics_get_child(Object *child, void *opaque)
|
||||
{
|
||||
ForeachPhb3Args *args = opaque;
|
||||
PnvPHB3 *phb3 = (PnvPHB3 *) object_dynamic_cast(child, TYPE_PNV_PHB3);
|
||||
|
||||
if (phb3) {
|
||||
if (ics_valid_irq(&phb3->lsis, args->irq)) {
|
||||
args->ics = &phb3->lsis;
|
||||
}
|
||||
if (ics_valid_irq(ICS(&phb3->msis), args->irq)) {
|
||||
args->ics = ICS(&phb3->msis);
|
||||
}
|
||||
}
|
||||
return args->ics ? 1 : 0;
|
||||
}
|
||||
|
||||
static ICSState *pnv_ics_get(XICSFabric *xi, int irq)
|
||||
{
|
||||
PnvMachineState *pnv = PNV_MACHINE(xi);
|
||||
ForeachPhb3Args args = { irq, NULL };
|
||||
int i;
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < pnv->num_chips; i++) {
|
||||
PnvChip *chip = pnv->chips[i];
|
||||
Pnv8Chip *chip8 = PNV8_CHIP(pnv->chips[i]);
|
||||
|
||||
if (ics_valid_irq(&chip8->psi.ics, irq)) {
|
||||
return &chip8->psi.ics;
|
||||
}
|
||||
|
||||
object_child_foreach(OBJECT(chip), pnv_ics_get_child, &args);
|
||||
if (args.ics) {
|
||||
return args.ics;
|
||||
for (j = 0; j < chip8->num_phbs; j++) {
|
||||
PnvPHB3 *phb3 = &chip8->phbs[j];
|
||||
|
||||
if (ics_valid_irq(&phb3->lsis, irq)) {
|
||||
return &phb3->lsis;
|
||||
}
|
||||
|
||||
if (ics_valid_irq(ICS(&phb3->msis), irq)) {
|
||||
return ICS(&phb3->msis);
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user