Message ID | 1420613385-13679-5-git-send-email-tangchen@cn.fujitsu.com |
---|---|
State | New |
Headers | show |
On Wed, 7 Jan 2015 14:49:44 +0800 Tang Chen <tangchen@cn.fujitsu.com> wrote: > Memory and CPU hot unplug are both asynchronize procedures. s/asynchronize/asynchronous/ > When the unplug operation happens, unplug request cb is called first. > And when ghest OS finished handling unplug, unplug cb will be called s/ghest/guest/ > to do the real removal of device. > > This patch adds hotunplug cb for ich9, and memory and CPU s/for/to/ s/and memory/which memory/ > hot unplug will base on it. s/base on it/use/ > --- > hw/acpi/ich9.c | 7 +++++++ > hw/isa/lpc_ich9.c | 9 +++++++++ > include/hw/acpi/ich9.h | 2 ++ > 3 files changed, 18 insertions(+) > > diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c > index 5ce3aaf..c48d176 100644 > --- a/hw/acpi/ich9.c > +++ b/hw/acpi/ich9.c > @@ -308,6 +308,13 @@ void ich9_pm_device_unplug_request_cb(ICH9LPCPMRegs *pm, DeviceState *dev, > " type: %s", object_get_typename(OBJECT(dev))); > } > > +void ich9_pm_device_unplug_cb(ICH9LPCPMRegs *pm, DeviceState *dev, > + Error **errp) > +{ > + error_setg(errp, "acpi: device unplug for not supported device" > + " type: %s", object_get_typename(OBJECT(dev))); > +} > + > void ich9_pm_ospm_status(AcpiDeviceIf *adev, ACPIOSTInfoList ***list) > { > ICH9LPCState *s = ICH9_LPC_DEVICE(adev); > diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c > index d00b223..16f5a0d 100644 > --- a/hw/isa/lpc_ich9.c > +++ b/hw/isa/lpc_ich9.c > @@ -615,6 +615,14 @@ static void ich9_device_unplug_request_cb(HotplugHandler *hotplug_dev, > ich9_pm_device_unplug_request_cb(&lpc->pm, dev, errp); > } > > +static void ich9_device_unplug_cb(HotplugHandler *hotplug_dev, > + DeviceState *dev, Error **errp) > +{ > + ICH9LPCState *lpc = ICH9_LPC_DEVICE(hotplug_dev); > + > + ich9_pm_device_unplug_cb(&lpc->pm, dev, errp); > +} > + > static bool ich9_rst_cnt_needed(void *opaque) > { > ICH9LPCState *lpc = opaque; > @@ -678,6 +686,7 @@ static void ich9_lpc_class_init(ObjectClass *klass, void *data) > dc->cannot_instantiate_with_device_add_yet = true; > hc->plug = ich9_device_plug_cb; > hc->unplug_request = ich9_device_unplug_request_cb; > + hc->unplug = ich9_device_unplug_cb; > adevc->ospm_status = ich9_pm_ospm_status; > } > > diff --git a/include/hw/acpi/ich9.h b/include/hw/acpi/ich9.h > index 86853c3..fc87dad 100644 > --- a/include/hw/acpi/ich9.h > +++ b/include/hw/acpi/ich9.h > @@ -61,6 +61,8 @@ void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm, Error **errp); > void ich9_pm_device_plug_cb(ICH9LPCPMRegs *pm, DeviceState *dev, Error **errp); > void ich9_pm_device_unplug_request_cb(ICH9LPCPMRegs *pm, DeviceState *dev, > Error **errp); > +void ich9_pm_device_unplug_cb(ICH9LPCPMRegs *pm, DeviceState *dev, > + Error **errp); > > void ich9_pm_ospm_status(AcpiDeviceIf *adev, ACPIOSTInfoList ***list); > #endif /* HW_ACPI_ICH9_H */
diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c index 5ce3aaf..c48d176 100644 --- a/hw/acpi/ich9.c +++ b/hw/acpi/ich9.c @@ -308,6 +308,13 @@ void ich9_pm_device_unplug_request_cb(ICH9LPCPMRegs *pm, DeviceState *dev, " type: %s", object_get_typename(OBJECT(dev))); } +void ich9_pm_device_unplug_cb(ICH9LPCPMRegs *pm, DeviceState *dev, + Error **errp) +{ + error_setg(errp, "acpi: device unplug for not supported device" + " type: %s", object_get_typename(OBJECT(dev))); +} + void ich9_pm_ospm_status(AcpiDeviceIf *adev, ACPIOSTInfoList ***list) { ICH9LPCState *s = ICH9_LPC_DEVICE(adev); diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c index d00b223..16f5a0d 100644 --- a/hw/isa/lpc_ich9.c +++ b/hw/isa/lpc_ich9.c @@ -615,6 +615,14 @@ static void ich9_device_unplug_request_cb(HotplugHandler *hotplug_dev, ich9_pm_device_unplug_request_cb(&lpc->pm, dev, errp); } +static void ich9_device_unplug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + ICH9LPCState *lpc = ICH9_LPC_DEVICE(hotplug_dev); + + ich9_pm_device_unplug_cb(&lpc->pm, dev, errp); +} + static bool ich9_rst_cnt_needed(void *opaque) { ICH9LPCState *lpc = opaque; @@ -678,6 +686,7 @@ static void ich9_lpc_class_init(ObjectClass *klass, void *data) dc->cannot_instantiate_with_device_add_yet = true; hc->plug = ich9_device_plug_cb; hc->unplug_request = ich9_device_unplug_request_cb; + hc->unplug = ich9_device_unplug_cb; adevc->ospm_status = ich9_pm_ospm_status; } diff --git a/include/hw/acpi/ich9.h b/include/hw/acpi/ich9.h index 86853c3..fc87dad 100644 --- a/include/hw/acpi/ich9.h +++ b/include/hw/acpi/ich9.h @@ -61,6 +61,8 @@ void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm, Error **errp); void ich9_pm_device_plug_cb(ICH9LPCPMRegs *pm, DeviceState *dev, Error **errp); void ich9_pm_device_unplug_request_cb(ICH9LPCPMRegs *pm, DeviceState *dev, Error **errp); +void ich9_pm_device_unplug_cb(ICH9LPCPMRegs *pm, DeviceState *dev, + Error **errp); void ich9_pm_ospm_status(AcpiDeviceIf *adev, ACPIOSTInfoList ***list); #endif /* HW_ACPI_ICH9_H */