From: mdroth <mdroth@linux.vnet.ibm.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Anthony Liguori" <aliguori@us.ibm.com>,
qemu-devel@nongnu.org,
"KONRAD Frédéric" <fred.konrad@greensocs.com>
Subject: Re: [Qemu-devel] [ANNOUNCE] QEMU 1.5.0-rc2 is now available
Date: Thu, 16 May 2013 11:35:51 -0500 [thread overview]
Message-ID: <20130516163551.GA2441@vm> (raw)
In-Reply-To: <51950430.9030107@redhat.com>
On Thu, May 16, 2013 at 06:07:12PM +0200, Paolo Bonzini wrote:
> Il 16/05/2013 17:54, KONRAD Frédéric ha scritto:
> > I think this can do the job, any better idea?
> >
> > diff --git a/hw/pci/pci.c b/hw/pci/pci.c
> > index d5257ed..e033b53 100644
> > --- a/hw/pci/pci.c
> > +++ b/hw/pci/pci.c
> > @@ -43,7 +43,6 @@
> > #endif
> >
> > static void pcibus_dev_print(Monitor *mon, DeviceState *dev, int indent);
> > -static char *pcibus_get_dev_path(DeviceState *dev);
> > static char *pcibus_get_fw_dev_path(DeviceState *dev);
> > static int pcibus_reset(BusState *qbus);
> >
> > @@ -2129,7 +2128,7 @@ static char *pcibus_get_fw_dev_path(DeviceState *dev)
> > return g_strdup(path);
> > }
> >
> > -static char *pcibus_get_dev_path(DeviceState *dev)
> > +char *pcibus_get_dev_path(DeviceState *dev)
> > {
> > PCIDevice *d = container_of(dev, PCIDevice, qdev);
> > PCIDevice *t;
> > diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
> > index 70d2c6b..0241223 100644
> > --- a/hw/virtio/virtio-pci.c
> > +++ b/hw/virtio/virtio-pci.c
> > @@ -1514,11 +1514,19 @@ static void virtio_pci_bus_new(VirtioBusState
> > *bus, VirtIOPCIProxy *dev)
> > qbus->allow_hotplug = 1;
> > }
> >
> > +static char *virtio_pci_bus_get_dev_path(DeviceState *dev)
> > +{
> > + BusState *bus = qdev_get_parent_bus(dev);
> > + DeviceState *proxy = DEVICE(bus->parent);
> > + return g_strdup(pcibus_get_dev_path(proxy));
>
> You do not need to export pcibus_get_dev_path. This should just return
> qdev_get_dev_path(proxy) and should be in TYPE_VIRTIO_BUS, not in the
> PCI-specific subclass.
>
> (The g_strdup is not needed, either).
I've been testing the patch below and it seems to do the trick. If it seems
reasonable I'll submit it after a bit more testing.
diff --git a/hw/virtio/virtio-bus.c b/hw/virtio/virtio-bus.c
index aab72ff..91b7bad 100644
--- a/hw/virtio/virtio-bus.c
+++ b/hw/virtio/virtio-bus.c
@@ -154,12 +154,35 @@ void virtio_bus_set_vdev_config(VirtioBusState *bus, uint8_t *config)
}
}
+static char *virtio_bus_get_dev_path(DeviceState *dev)
+{
+ DeviceState *parent_dev = DEVICE(OBJECT(dev)->parent);
+ BusClass *parent_bus_klass = BUS_GET_CLASS(qdev_get_parent_bus(parent_dev));
+
+ /* pass this call up to the device's parent's bus to get at
+ * guest-visible hardware topology
+ */
+ if (parent_bus_klass->get_dev_path) {
+ return parent_bus_klass->get_dev_path(parent_dev);
+ }
+
+ return NULL;
+}
+
+static void virtio_bus_class_init(ObjectClass *klass, void *data)
+{
+ BusClass *k = BUS_CLASS(klass);
+
+ k->get_dev_path = virtio_bus_get_dev_path;
+}
+
static const TypeInfo virtio_bus_info = {
.name = TYPE_VIRTIO_BUS,
.parent = TYPE_BUS,
.instance_size = sizeof(VirtioBusState),
.abstract = true,
.class_size = sizeof(VirtioBusClass),
+ .class_init = virtio_bus_class_init,
};
>
> Paolo
>
> > +}
> > +
> > static void virtio_pci_bus_class_init(ObjectClass *klass, void *data)
> > {
> > BusClass *bus_class = BUS_CLASS(klass);
> > VirtioBusClass *k = VIRTIO_BUS_CLASS(klass);
> > bus_class->max_dev = 1;
> > + bus_class->get_dev_path = virtio_pci_bus_get_dev_path;
> > k->notify = virtio_pci_notify;
> > k->save_config = virtio_pci_save_config;
> > k->load_config = virtio_pci_load_config;
> > diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
> > index 8d075ab..fb5723c 100644
> > --- a/include/hw/pci/pci.h
> > +++ b/include/hw/pci/pci.h
> > @@ -708,6 +708,8 @@ static inline void pci_dma_sglist_init(QEMUSGList
> > *qsg, PCIDevice *dev,
> >
> > extern const VMStateDescription vmstate_pci_device;
> >
> > +char *pcibus_get_dev_path(DeviceState *dev);
> > +
> > #define VMSTATE_PCI_DEVICE(_field, _state) { \
> > .name = (stringify(_field)), \
> > .size = sizeof(PCIDevice), \
>
next prev parent reply other threads:[~2013-05-16 16:36 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-15 23:53 [Qemu-devel] [ANNOUNCE] QEMU 1.5.0-rc2 is now available Anthony Liguori
2013-05-16 3:56 ` Dongsheng Song
2013-05-16 14:21 ` mdroth
2013-05-16 14:51 ` Paolo Bonzini
2013-05-16 15:54 ` KONRAD Frédéric
2013-05-16 16:07 ` Paolo Bonzini
2013-05-16 16:34 ` KONRAD Frédéric
2013-05-16 16:49 ` mdroth
2013-05-16 16:53 ` KONRAD Frédéric
2013-05-16 16:52 ` Paolo Bonzini
2013-05-16 16:35 ` mdroth [this message]
2013-05-16 16:33 ` Anthony Liguori
2013-05-16 16:34 ` KONRAD Frédéric
2013-05-16 15:17 ` KONRAD Frédéric
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=20130516163551.GA2441@vm \
--to=mdroth@linux.vnet.ibm.com \
--cc=aliguori@us.ibm.com \
--cc=fred.konrad@greensocs.com \
--cc=pbonzini@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).