ppc/xics: move the ICP array under the sPAPR machine

This is the last step to remove the XICSState abstraction and have the
machine hold all the objects related to interrupts : ICSs and ICPs.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
Cédric Le Goater 2017-02-27 15:29:28 +01:00 committed by David Gibson
parent 20147f2fce
commit 852ad27e14
3 changed files with 11 additions and 11 deletions

View File

@ -124,15 +124,15 @@ static XICSState *try_create_xics(sPAPRMachineState *spapr,
goto error; goto error;
} }
xics->ss = g_malloc0(nr_servers * sizeof(ICPState)); spapr->icps = g_malloc0(nr_servers * sizeof(ICPState));
xics->nr_servers = nr_servers; spapr->nr_servers = nr_servers;
for (i = 0; i < nr_servers; i++) { for (i = 0; i < nr_servers; i++) {
ICPState *icp = &xics->ss[i]; ICPState *icp = &spapr->icps[i];
object_initialize(icp, sizeof(*icp), type_icp); object_initialize(icp, sizeof(*icp), type_icp);
qdev_set_parent_bus(DEVICE(icp), sysbus_get_default()); qdev_set_parent_bus(DEVICE(icp), sysbus_get_default());
object_property_add_child(OBJECT(xics), "icp[*]", OBJECT(icp), NULL); object_property_add_child(OBJECT(spapr), "icp[*]", OBJECT(icp), NULL);
object_property_add_const_link(OBJECT(icp), "xics", OBJECT(xi), NULL); object_property_add_const_link(OBJECT(icp), "xics", OBJECT(xi), NULL);
object_property_set_bool(OBJECT(icp), true, "realized", &err); object_property_set_bool(OBJECT(icp), true, "realized", &err);
if (err) { if (err) {
@ -967,7 +967,7 @@ static void *spapr_build_fdt(sPAPRMachineState *spapr,
_FDT(fdt_setprop_cell(fdt, 0, "#size-cells", 2)); _FDT(fdt_setprop_cell(fdt, 0, "#size-cells", 2));
/* /interrupt controller */ /* /interrupt controller */
spapr_dt_xics(spapr->xics->nr_servers, fdt, PHANDLE_XICP); spapr_dt_xics(spapr->nr_servers, fdt, PHANDLE_XICP);
ret = spapr_populate_memory(spapr, fdt); ret = spapr_populate_memory(spapr, fdt);
if (ret < 0) { if (ret < 0) {
@ -2989,8 +2989,7 @@ static ICPState *spapr_icp_get(XICSFabric *xi, int server)
{ {
sPAPRMachineState *spapr = SPAPR_MACHINE(xi); sPAPRMachineState *spapr = SPAPR_MACHINE(xi);
return (server < spapr->xics->nr_servers) ? &spapr->xics->ss[server] : return (server < spapr->nr_servers) ? &spapr->icps[server] : NULL;
NULL;
} }
static void spapr_icp_resend(XICSFabric *xi) static void spapr_icp_resend(XICSFabric *xi)
@ -2998,8 +2997,8 @@ static void spapr_icp_resend(XICSFabric *xi)
sPAPRMachineState *spapr = SPAPR_MACHINE(xi); sPAPRMachineState *spapr = SPAPR_MACHINE(xi);
int i; int i;
for (i = 0; i < spapr->xics->nr_servers; i++) { for (i = 0; i < spapr->nr_servers; i++) {
icp_resend(&spapr->xics->ss[i]); icp_resend(&spapr->icps[i]);
} }
} }

View File

@ -95,6 +95,9 @@ struct sPAPRMachineState {
/*< public >*/ /*< public >*/
char *kvm_type; char *kvm_type;
MemoryHotplugState hotplug_memory; MemoryHotplugState hotplug_memory;
uint32_t nr_servers;
ICPState *icps;
}; };
#define H_SUCCESS 0 #define H_SUCCESS 0

View File

@ -79,8 +79,6 @@ struct XICSState {
/*< private >*/ /*< private >*/
DeviceState parent_obj; DeviceState parent_obj;
/*< public >*/ /*< public >*/
uint32_t nr_servers;
ICPState *ss;
}; };
#define TYPE_ICP "icp" #define TYPE_ICP "icp"