From: Markus Armbruster <armbru@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 10/13] Implement scsi device destruction
Date: Thu, 24 Sep 2009 21:15:22 +0200 [thread overview]
Message-ID: <8763b8b1dh.fsf@pike.pond.sub.org> (raw)
In-Reply-To: <1253611767-6483-11-git-send-email-kraxel@redhat.com> (Gerd Hoffmann's message of "Tue\, 22 Sep 2009 11\:29\:24 +0200")
Gerd Hoffmann <kraxel@redhat.com> writes:
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> hw/scsi-bus.c | 24 +++++++++++++++++++++---
> hw/scsi-disk.c | 6 ------
> hw/scsi-generic.c | 2 --
> 3 files changed, 21 insertions(+), 11 deletions(-)
>
> diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c
> index 881e363..27defc4 100644
> --- a/hw/scsi-bus.c
> +++ b/hw/scsi-bus.c
> @@ -30,6 +30,7 @@ static int scsi_qdev_init(DeviceState *qdev, DeviceInfo *base)
> SCSIDevice *dev = DO_UPCAST(SCSIDevice, qdev, qdev);
> SCSIDeviceInfo *info = DO_UPCAST(SCSIDeviceInfo, qdev, base);
> SCSIBus *bus = DO_UPCAST(SCSIBus, qbus, dev->qdev.parent_bus);
> + int rc = -1;
>
> if (dev->id == -1) {
> for (dev->id = 0; dev->id < bus->ndev; dev->id++) {
> @@ -43,21 +44,38 @@ static int scsi_qdev_init(DeviceState *qdev, DeviceInfo *base)
> }
>
> if (bus->devs[dev->id]) {
> - bus->devs[dev->id]->info->destroy(bus->devs[dev->id]);
> + qdev_free(&bus->devs[dev->id]->qdev);
> }
If I understand this correctly, SCSI devices "overwrite": if you add a
new one with an existing SCSI ID, the old one gets disconnected
automatically. Isn't that inconsistent with other buses? PCI,
specifically. Question applies before your patch already.
> bus->devs[dev->id] = dev;
>
> dev->info = info;
> - return dev->info->init(dev);
> + rc = dev->info->init(dev);
> + if (rc != 0) {
> + bus->devs[dev->id] = NULL;
> + }
>
> err:
> - return -1;
> + return rc;
> +}
> +
> +static int scsi_qdev_exit(DeviceState *qdev)
> +{
> + SCSIDevice *dev = DO_UPCAST(SCSIDevice, qdev, qdev);
> + SCSIBus *bus = DO_UPCAST(SCSIBus, qbus, dev->qdev.parent_bus);
> +
> + assert(bus->devs[dev->id] != NULL);
> + if (bus->devs[dev->id]->info->destroy) {
> + bus->devs[dev->id]->info->destroy(bus->devs[dev->id]);
> + }
> + bus->devs[dev->id] = NULL;
> + return 0;
> }
You have scsi_qdev_exit() as qdev callback exit(). It does the generic
stuff, then runs the SCSIDevice callback destroy() for the specific
stuff. Shouldn't the two callbacks be named the same, to make their
relation more obvious?
>
> void scsi_qdev_register(SCSIDeviceInfo *info)
> {
> info->qdev.bus_info = &scsi_bus_info;
> info->qdev.init = scsi_qdev_init;
> + info->qdev.exit = scsi_qdev_exit;
> qdev_register(&info->qdev);
> }
>
[...]
next prev parent reply other threads:[~2009-09-24 19:15 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-22 9:29 [Qemu-devel] [PATCH 00/13] qdev: bus management updates Gerd Hoffmann
2009-09-22 9:29 ` [Qemu-devel] [PATCH 01/13] allow qdev busses allocations be inplace Gerd Hoffmann
2009-09-22 9:29 ` [Qemu-devel] [PATCH 02/13] switch scsi bus to inplace allocation Gerd Hoffmann
2009-09-22 9:29 ` [Qemu-devel] [PATCH 03/13] switch usb " Gerd Hoffmann
2009-09-22 9:29 ` [Qemu-devel] [PATCH 04/13] switch ide " Gerd Hoffmann
2009-09-22 9:29 ` [Qemu-devel] [PATCH 05/13] inplace allocation for pci, split irq init Gerd Hoffmann
2009-09-22 9:29 ` [Qemu-devel] [PATCH 06/13] convert pci bridge to qdev Gerd Hoffmann
2009-09-23 16:02 ` Michael S. Tsirkin
2009-09-24 18:29 ` Markus Armbruster
2009-09-24 18:51 ` Michael S. Tsirkin
2009-09-25 7:19 ` Gerd Hoffmann
2009-09-22 9:29 ` [Qemu-devel] [PATCH 07/13] piix_pci: kill PIIX3IrqState Gerd Hoffmann
2009-09-24 18:42 ` Markus Armbruster
2009-09-25 7:24 ` Gerd Hoffmann
2009-09-22 9:29 ` [Qemu-devel] [PATCH 08/13] qdev: device free fixups Gerd Hoffmann
2009-09-24 18:55 ` Markus Armbruster
2009-09-22 9:29 ` [Qemu-devel] [PATCH 09/13] Add exit callback to DeviceInfo Gerd Hoffmann
2009-09-22 10:06 ` Christoph Egger
2009-09-22 10:19 ` Gerd Hoffmann
2009-09-24 19:02 ` Markus Armbruster
2009-09-25 7:33 ` Gerd Hoffmann
2009-09-22 9:29 ` [Qemu-devel] [PATCH 10/13] Implement scsi device destruction Gerd Hoffmann
2009-09-24 19:15 ` Markus Armbruster [this message]
2009-09-25 7:45 ` Gerd Hoffmann
2009-09-25 13:10 ` Markus Armbruster
2009-09-25 14:54 ` Gerd Hoffmann
2009-09-25 15:59 ` Artyom Tarasenko
2009-09-25 16:31 ` Markus Armbruster
2009-09-22 9:29 ` [Qemu-devel] [PATCH 11/13] pci: use qdev for " Gerd Hoffmann
2009-09-22 9:29 ` [Qemu-devel] [PATCH 12/13] pci: move unregister from PCIDevice to PCIDeviceInfo Gerd Hoffmann
2009-09-23 15:58 ` Michael S. Tsirkin
2009-09-25 7:49 ` Gerd Hoffmann
2009-09-29 15:50 ` Michael S. Tsirkin
2009-09-29 18:16 ` Gerd Hoffmann
2009-09-22 9:29 ` [Qemu-devel] [PATCH 13/13] usb: hook unplug into qdev, cleanups + fixes Gerd Hoffmann
2009-09-24 19:18 ` [Qemu-devel] [PATCH 00/13] qdev: bus management updates Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8763b8b1dh.fsf@pike.pond.sub.org \
--to=armbru@redhat.com \
--cc=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.