spapr_drc: add unrealize method to physical DRC class
When hot-unplugging a PHB, all its PCI DRC connectors get unrealized. This patch adds an unrealize method to the physical DRC class, in order to undo registrations performed in realize_physical(). Signed-off-by: Greg Kurz <groug@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
dba95ebbf8
commit
379ae096f7
@ -630,12 +630,28 @@ static void realize_physical(DeviceState *d, Error **errp)
|
|||||||
qemu_register_reset(drc_physical_reset, drcp);
|
qemu_register_reset(drc_physical_reset, drcp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void unrealize_physical(DeviceState *d, Error **errp)
|
||||||
|
{
|
||||||
|
sPAPRDRCPhysical *drcp = SPAPR_DRC_PHYSICAL(d);
|
||||||
|
Error *local_err = NULL;
|
||||||
|
|
||||||
|
unrealize(d, &local_err);
|
||||||
|
if (local_err) {
|
||||||
|
error_propagate(errp, local_err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vmstate_unregister(DEVICE(drcp), &vmstate_spapr_drc_physical, drcp);
|
||||||
|
qemu_unregister_reset(drc_physical_reset, drcp);
|
||||||
|
}
|
||||||
|
|
||||||
static void spapr_drc_physical_class_init(ObjectClass *k, void *data)
|
static void spapr_drc_physical_class_init(ObjectClass *k, void *data)
|
||||||
{
|
{
|
||||||
DeviceClass *dk = DEVICE_CLASS(k);
|
DeviceClass *dk = DEVICE_CLASS(k);
|
||||||
sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_CLASS(k);
|
sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_CLASS(k);
|
||||||
|
|
||||||
dk->realize = realize_physical;
|
dk->realize = realize_physical;
|
||||||
|
dk->unrealize = unrealize_physical;
|
||||||
drck->dr_entity_sense = physical_entity_sense;
|
drck->dr_entity_sense = physical_entity_sense;
|
||||||
drck->isolate = drc_isolate_physical;
|
drck->isolate = drc_isolate_physical;
|
||||||
drck->unisolate = drc_unisolate_physical;
|
drck->unisolate = drc_unisolate_physical;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user