[PATCH 7/8] hw/acpi/ged: 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 generic event device (ged). This enables forced removal for ACPI PCI hotplug on arm64 virt machines while rejecting non-PCI devices. Signed-off-by: Dongli Zhang <[email protected]> --- hw/acpi/generic_event_device.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index 9e9416d406..3c041f5c26 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -314,6 +314,20 @@ static void acpi_ged_unplug_cb(HotplugHandler *hotplug_dev, } } +static void acpi_ged_force_unplug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + AcpiGedState *s = ACPI_GED(hotplug_dev); + + if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) { + acpi_pcihp_device_force_unplug_cb(hotplug_dev, &s->pcihp_state, + dev, errp); + } else { + error_setg(errp, "acpi: forced device unplug for unsupported device" + " type: %s", object_get_typename(OBJECT(dev))); + } +} + static void acpi_ged_ospm_status(AcpiDeviceIf *adev, ACPIOSTInfoList ***list) { AcpiGedState *s = ACPI_GED(adev); @@ -603,6 +617,7 @@ static void acpi_ged_class_init(ObjectClass *class, const void *data) hc->plug = acpi_ged_device_plug_cb; hc->unplug_request = acpi_ged_unplug_request_cb; hc->unplug = acpi_ged_unplug_cb; + hc->force_unplug = acpi_ged_force_unplug_cb; resettable_class_set_parent_phases(rc, NULL, ged_reset_hold, NULL, &gedc->parent_phases); -- 2.43.5