qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 4/9] ide: Drop redundant IDEState member bs


From: Stefano Stabellini
Subject: Re: [Qemu-devel] [PATCH v3 4/9] ide: Drop redundant IDEState member bs
Date: Wed, 12 Feb 2014 13:48:51 +0000
User-agent: Alpine 2.02 (DEB 1266 2009-07-14)

On Wed, 12 Feb 2014, Markus Armbruster wrote:
> Markus Armbruster <address@hidden> writes:
> 
> > Stefano Stabellini <address@hidden> writes:
> >
> >> On Thu, 6 Feb 2014, Markus Armbruster wrote:
> >>> Stefano Stabellini <address@hidden> writes:
> >>> 
> >>> > On Wed, 5 Feb 2014, Markus Armbruster wrote:
> >>> >> [Note cc: Stefano]
> >>> >> 
> >>> >> Kevin Wolf <address@hidden> writes:
> >>> >> 
> >>> >> > Am 30.01.2014 um 13:16 hat Markus Armbruster geschrieben:
> >>> >> >> It's a copy of dev->conf.bs.  The copy was needed for non-qdevified
> >>> >> >> controllers, which lacked dev.
> >>> >> >> 
> >>> >> >> Note how pci_piix3_xen_ide_unplug() cleared the copy.  We'll get 
> >>> >> >> back
> >>> >> >> to that in the next few commits.
> >>> >> >> 
> >>> >> >> Signed-off-by: Markus Armbruster <address@hidden>
> >>> >> >
> >>> >> > So this pci_piix3_xen_ide_unplug() is what happens here:
> >>> >> >
> >>> >> >> --- a/hw/ide/piix.c
> >>> >> >> +++ b/hw/ide/piix.c
> >>> >> >> @@ -169,12 +169,9 @@ static int pci_piix_ide_initfn(PCIDevice *dev)
> >>> >> >>  
> >>> >> >>  static int pci_piix3_xen_ide_unplug(DeviceState *dev)
> >>> >> >>  {
> >>> >> >> -    PCIIDEState *pci_ide;
> >>> >> >>      DriveInfo *di;
> >>> >> >>      int i = 0;
> >>> >> >>  
> >>> >> >> -    pci_ide = PCI_IDE(dev);
> >>> >> >> -
> >>> >> >>      for (; i < 3; i++) {
> >>> >> >>          di = drive_get_by_index(IF_IDE, i);
> >>> >> >>          if (di != NULL && !di->media_cd) {
> >>> >> >> @@ -183,7 +180,6 @@ static int pci_piix3_xen_ide_unplug(DeviceState 
> >>> >> >> *dev)
> >>> >> >>                  bdrv_detach_dev(di->bdrv, ds);
> >>> >> >>              }
> >>> >> >>              bdrv_close(di->bdrv);
> >>> >> >> -            pci_ide->bus[di->bus].ifs[di->unit].bs = NULL;
> >>> >> >>              drive_put_ref(di);
> >>> >> >>          }
> >>> >> >>      }
> >>> >> >
> >>> >> > Probably I'm just missing the obvious, but it seems to me that the
> >>> >> > copy was cleared here, while the original was left around. This was
> >>> >> > no problem because the original was unused anyway after device
> >>> >> > initialisation.
> >>> >> >
> >>> >> > Now that the copy doesn't exist any more, we can't clear it, 
> >>> >> > obviously,
> >>> >> > but why don't we have to clear the original? Won't we still run the
> >>> >> > "device is attached" code branches even though the device is really
> >>> >> > unplugged?
> >>> >> 
> >>> >> It's been a while since I wrote this.  Almost 14 months, in fact.
> >>> >> 
> >>> >> No other IDE controller implements DeviceClass method unplug().  I 
> >>> >> can't
> >>> >> remember why the normal code to detach the backend (release_drive())
> >>> >> doesn't do here.  Stefano, can you help?
> >>> >
> >>> > Too long to be able to remember the exact details :-/
> >>> > However if you point me to a branch I can give it a try and tell you if
> >>> > the unplug still works as it used to.
> >>> 
> >>> Series trivially rebased to current master available at
> >>> git://repo.or.cz/qemu/armbru.git branch kill-non-qdev-ide
> >>
> >> Unfortunately it doesn't work: I can see both sda and xvda being present
> >> after the system has booted.
> >
> > Thank you for testing.  I'll try to clear the originals like Kevin
> > suggested.  Hopefully, that'll pass your test.
> 
> Stefano, I updated the branch, please retest it.


QEMU exists with:

hw/ide/piix.c:183:pci_piix3_xen_ide_unplug: Object 0x7f172045b050 is not an 
instance of type ide-device



reply via email to

[Prev in Thread] Current Thread [Next in Thread]