[PATCH 5/8] hw/acpi/piix4: Support forced PCI unplug
Dongli Zhang <[email protected]>
| Newsgroups | org.xenproject.lists.xen-devel,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
Support forced PCI unplug for PIIX4. This enables forced removal for ACPI PCI hotplug on i440fx machines while rejecting non-PCI devices. Signed-off-by: Dongli Zhang <[email protected]> --- hw/acpi/piix4.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c index 9b7f50c7af..7cfdcb7935 100644 --- a/hw/acpi/piix4.c +++ b/hw/acpi/piix4.c @@ -383,6 +383,20 @@ static void piix4_device_unplug_cb(HotplugHandler *hotplug_dev, } } +static void piix4_device_force_unplug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + PIIX4PMState *s = PIIX4_PM(hotplug_dev); + + if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) { + acpi_pcihp_device_force_unplug_cb(hotplug_dev, &s->acpi_pci_hotplug, + dev, errp); + } else { + error_setg(errp, "acpi: forced device unplug for not supported device" + " type: %s", object_get_typename(OBJECT(dev))); + } +} + static bool piix4_is_hotpluggable_bus(HotplugHandler *hotplug_dev, BusState *bus) { @@ -604,6 +618,7 @@ static void piix4_pm_class_init(ObjectClass *klass, const void *data) hc->plug = piix4_device_plug_cb; hc->unplug_request = piix4_device_unplug_request_cb; hc->unplug = piix4_device_unplug_cb; + hc->force_unplug = piix4_device_force_unplug_cb; hc->is_hotpluggable_bus = piix4_is_hotpluggable_bus; adevc->ospm_status = piix4_ospm_status; adevc->send_event = piix4_send_gpe; -- 2.43.5