Commit 62b76563 authored by David Hildenbrand's avatar David Hildenbrand Committed by Michael S. Tsirkin
Browse files

pci: Reuse pci-bridge hotplug handler handlers for pcie-pci-bridge



These functions are essentially the same, we only have to use
object_get_typename() for reporting errors. So let's share the
implementation of hotplug handler callbacks.

Suggested-by: default avatarIgor Mammedov <imammedo@redhat.com>
Reviewed-by: default avatarIgor Mammedov <imammedo@redhat.com>
Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
Reviewed-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent a1952d01
Loading
Loading
Loading
Loading
+6 −6
Original line number Original line Diff line number Diff line
@@ -206,27 +206,27 @@ static const VMStateDescription pci_bridge_dev_vmstate = {
    }
    }
};
};


static void pci_bridge_dev_plug_cb(HotplugHandler *hotplug_dev,
void pci_bridge_dev_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
                                   DeviceState *dev, Error **errp)
                            Error **errp)
{
{
    PCIDevice *pci_hotplug_dev = PCI_DEVICE(hotplug_dev);
    PCIDevice *pci_hotplug_dev = PCI_DEVICE(hotplug_dev);


    if (!shpc_present(pci_hotplug_dev)) {
    if (!shpc_present(pci_hotplug_dev)) {
        error_setg(errp, "standard hotplug controller has been disabled for "
        error_setg(errp, "standard hotplug controller has been disabled for "
                   "this %s", TYPE_PCI_BRIDGE_DEV);
                   "this %s", object_get_typename(OBJECT(hotplug_dev)));
        return;
        return;
    }
    }
    shpc_device_plug_cb(hotplug_dev, dev, errp);
    shpc_device_plug_cb(hotplug_dev, dev, errp);
}
}


static void pci_bridge_dev_unplug_request_cb(HotplugHandler *hotplug_dev,
void pci_bridge_dev_unplug_request_cb(HotplugHandler *hotplug_dev,
                                      DeviceState *dev, Error **errp)
                                      DeviceState *dev, Error **errp)
{
{
    PCIDevice *pci_hotplug_dev = PCI_DEVICE(hotplug_dev);
    PCIDevice *pci_hotplug_dev = PCI_DEVICE(hotplug_dev);


    if (!shpc_present(pci_hotplug_dev)) {
    if (!shpc_present(pci_hotplug_dev)) {
        error_setg(errp, "standard hotplug controller has been disabled for "
        error_setg(errp, "standard hotplug controller has been disabled for "
                   "this %s", TYPE_PCI_BRIDGE_DEV);
                   "this %s", object_get_typename(OBJECT(hotplug_dev)));
        return;
        return;
    }
    }
    shpc_device_unplug_request_cb(hotplug_dev, dev, errp);
    shpc_device_unplug_request_cb(hotplug_dev, dev, errp);
+2 −28
Original line number Original line Diff line number Diff line
@@ -137,32 +137,6 @@ static const VMStateDescription pcie_pci_bridge_dev_vmstate = {
        }
        }
};
};


static void pcie_pci_bridge_plug_cb(HotplugHandler *hotplug_dev,
                                    DeviceState *dev, Error **errp)
{
    PCIDevice *pci_hotplug_dev = PCI_DEVICE(hotplug_dev);

    if (!shpc_present(pci_hotplug_dev)) {
        error_setg(errp, "standard hotplug controller has been disabled for "
                   "this %s", TYPE_PCIE_PCI_BRIDGE_DEV);
        return;
    }
    shpc_device_plug_cb(hotplug_dev, dev, errp);
}

static void pcie_pci_bridge_unplug_request_cb(HotplugHandler *hotplug_dev,
                                              DeviceState *dev, Error **errp)
{
    PCIDevice *pci_hotplug_dev = PCI_DEVICE(hotplug_dev);

    if (!shpc_present(pci_hotplug_dev)) {
        error_setg(errp, "standard hotplug controller has been disabled for "
                   "this %s", TYPE_PCIE_PCI_BRIDGE_DEV);
        return;
    }
    shpc_device_unplug_request_cb(hotplug_dev, dev, errp);
}

static void pcie_pci_bridge_class_init(ObjectClass *klass, void *data)
static void pcie_pci_bridge_class_init(ObjectClass *klass, void *data)
{
{
    PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
    PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
@@ -179,8 +153,8 @@ static void pcie_pci_bridge_class_init(ObjectClass *klass, void *data)
    dc->props = pcie_pci_bridge_dev_properties;
    dc->props = pcie_pci_bridge_dev_properties;
    dc->reset = &pcie_pci_bridge_reset;
    dc->reset = &pcie_pci_bridge_reset;
    set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
    set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
    hc->plug = pcie_pci_bridge_plug_cb;
    hc->plug = pci_bridge_dev_plug_cb;
    hc->unplug_request = pcie_pci_bridge_unplug_request_cb;
    hc->unplug_request = pci_bridge_dev_unplug_request_cb;
}
}


static const TypeInfo pcie_pci_bridge_info = {
static const TypeInfo pcie_pci_bridge_info = {
+4 −0
Original line number Original line Diff line number Diff line
@@ -99,6 +99,10 @@ void pci_bridge_reset(DeviceState *qdev);
void pci_bridge_initfn(PCIDevice *pci_dev, const char *typename);
void pci_bridge_initfn(PCIDevice *pci_dev, const char *typename);
void pci_bridge_exitfn(PCIDevice *pci_dev);
void pci_bridge_exitfn(PCIDevice *pci_dev);


void pci_bridge_dev_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
                            Error **errp);
void pci_bridge_dev_unplug_request_cb(HotplugHandler *hotplug_dev,
                                      DeviceState *dev, Error **errp);


/*
/*
 * before qdev initialization(qdev_init()), this function sets bus_name and
 * before qdev initialization(qdev_init()), this function sets bus_name and