[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: [PATCH] pci hotplug: make pci hotplug return value to c
From: |
Isaku Yamahata |
Subject: |
[Qemu-devel] Re: [PATCH] pci hotplug: make pci hotplug return value to caller. |
Date: |
Mon, 21 Jun 2010 21:31:58 +0900 |
User-agent: |
Mutt/1.5.19 (2009-01-05) |
On Mon, Jun 21, 2010 at 02:40:06PM +0300, Michael S. Tsirkin wrote:
> On Tue, Jun 15, 2010 at 12:47:27PM +0900, Isaku Yamahata wrote:
> > Make pci hotplug callback return value to caller.
> > There is no reason to discard return value.
> >
> > Signed-off-by: Isaku Yamahata <address@hidden>
> > ---
> > hw/pci.c | 11 +++++++----
> > 1 files changed, 7 insertions(+), 4 deletions(-)
> >
> > diff --git a/hw/pci.c b/hw/pci.c
> > index 7787005..3777c1c 100644
> > --- a/hw/pci.c
> > +++ b/hw/pci.c
> > @@ -1623,8 +1623,12 @@ static int pci_qdev_init(DeviceState *qdev,
> > DeviceInfo *base)
> > pci_dev->romfile = qemu_strdup(info->romfile);
> > pci_add_option_rom(pci_dev);
> >
> > - if (qdev->hotplugged)
> > - bus->hotplug(bus->hotplug_qdev, pci_dev, 1);
> > + if (qdev->hotplugged) {
> > + rc = bus->hotplug(bus->hotplug_qdev, pci_dev, 1);
> > + if (rc != 0) {
> > + return rc;
>
> I think we need to unregister the device (and remove option rom?),
> otherwise there's a resource leak here.
Okay. I'll look into it.
> Can it really fail? If not we can just make it void.
The current pci hot plug(acpi_piix4.c) always successes.
But in the pcie native hot plug case it can fail because
a slot can have a electromechanical lock.
If the slot is locked, a card can't be inserted/removed.
There are also other pci hot plug controllers which have a lock.
Hot plug can fail with such a controller.
>
>
> > + }
> > + }
> > return 0;
> > }
> >
> > @@ -1632,8 +1636,7 @@ static int pci_unplug_device(DeviceState *qdev)
> > {
> > PCIDevice *dev = DO_UPCAST(PCIDevice, qdev, qdev);
> >
> > - dev->bus->hotplug(dev->bus->hotplug_qdev, dev, 0);
> > - return 0;
> > + return dev->bus->hotplug(dev->bus->hotplug_qdev, dev, 0);
> > }
> >
> > void pci_qdev_register(PCIDeviceInfo *info)
> > --
> > 1.6.6.1
> >
>
--
yamahata