qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [RFC 06/15] qdev: Add device_type field to BusClass


From: Eduardo Habkost
Subject: Re: [Qemu-devel] [RFC 06/15] qdev: Add device_type field to BusClass
Date: Thu, 24 Nov 2016 15:37:11 -0200
User-agent: Mutt/1.7.1 (2016-10-04)

On Thu, Nov 24, 2016 at 05:48:20PM +0100, Cornelia Huck wrote:
> On Mon, 21 Nov 2016 23:12:04 -0200
> Eduardo Habkost <address@hidden> wrote:
> 
> <s390 glasses on>
> 
> > diff --git a/hw/pci/pci.c b/hw/pci/pci.c
> > index 24fae16..74b8fef 100644
> > --- a/hw/pci/pci.c
> > +++ b/hw/pci/pci.c
> > @@ -152,6 +152,7 @@ static void pci_bus_class_init(ObjectClass *klass, void 
> > *data)
> >      k->realize = pci_bus_realize;
> >      k->unrealize = pci_bus_unrealize;
> >      k->reset = pcibus_reset;
> > +    k->device_type = TYPE_PCI_DEVICE;
> 
> This covers pci-per-se...
> 
> > 
> >      pbc->is_root = pcibus_is_root;
> >      pbc->bus_num = pcibus_num;
> 
> > diff --git a/hw/s390x/css-bridge.c b/hw/s390x/css-bridge.c
> > index 9a7f7ee..8a6c1ae 100644
> > --- a/hw/s390x/css-bridge.c
> > +++ b/hw/s390x/css-bridge.c
> > @@ -17,6 +17,7 @@
> >  #include "hw/s390x/css.h"
> >  #include "ccw-device.h"
> >  #include "hw/s390x/css-bridge.h"
> > +#include "hw/s390x/virtio-ccw.h"
> > 
> >  /*
> >   * Invoke device-specific unplug handler, disable the subchannel
> > @@ -81,6 +82,7 @@ static void virtual_css_bus_class_init(ObjectClass 
> > *klass, void *data)
> > 
> >      k->reset = virtual_css_bus_reset;
> >      k->get_dev_path = virtual_css_bus_get_dev_path;
> > +    k->device_type = TYPE_VIRTIO_CCW_DEVICE;
> 
> ...this covers virtio-ccw... (notably _not_ generic css)
> 
> >  }
> > 
> >  static const TypeInfo virtual_css_bus_info = {
> 
> > diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
> > index 63f6248..7470fdd 100644
> > --- a/hw/s390x/s390-pci-bus.c
> > +++ b/hw/s390x/s390-pci-bus.c
> > @@ -783,10 +783,17 @@ static const TypeInfo s390_pcihost_info = {
> >      }
> >  };
> > 
> > +static void s390_pcibus_class_init(ObjectClass *oc, void *opaque)
> > +{
> > +    BusClass *bc = BUS_CLASS(oc);
> > +    bc->device_type = TYPE_S390_PCI_DEVICE;
> 
> ...this covers zpci, which is needed _in addition to_ normal pci to make pci 
> work on s390...
> 
> > +}
> > +
> >  static const TypeInfo s390_pcibus_info = {
> >      .name = TYPE_S390_PCI_BUS,
> >      .parent = TYPE_BUS,
> >      .instance_size = sizeof(S390PCIBus),
> > +    .class_init = s390_pcibus_class_init,
> >  };
> > 
> >  static uint16_t s390_pci_generate_uid(void)
> 
> > diff --git a/hw/virtio/virtio-bus.c b/hw/virtio/virtio-bus.c
> > index d6c0c72..815f3dd 100644
> > --- a/hw/virtio/virtio-bus.c
> > +++ b/hw/virtio/virtio-bus.c
> > @@ -293,6 +293,7 @@ static void virtio_bus_class_init(ObjectClass *klass, 
> > void *data)
> >      BusClass *bus_class = BUS_CLASS(klass);
> >      bus_class->get_dev_path = virtio_bus_get_dev_path;
> >      bus_class->get_fw_dev_path = virtio_bus_get_fw_dev_path;
> > +    bus_class->device_type = TYPE_VIRTIO_DEVICE;
> >  }
> > 
> >  static const TypeInfo virtio_bus_info = {
> 
> ...and this covers virtio, which is kind of a glue bus.
> 
> So on s390, we have the following:
> 
> - to get virtio-ccw, we need virtio-ccw _and_ virtio
> - to get virtio-pci, we need pci _and_ zpci _and_ virtio
> - to get virtio-per-se, we need one of the combinations above
> 
> Please stop me if I'm babbling, but there seem to be some
> interdependencies which are different on different architectures and
> I'm not sure how these should be modelled.

This series doesn't cover any of the interdependencies between
the multiple bus classes inside a machine. It just reports which
device types are available for usage with "-device" or
device_adde when running that machine-type.

If the user is not supposed to plug devices directly to some of
those buses, we can simply hide them on query-machines. (But we
should still set BusClass::device_type to allow internal
validation of the devices that are plugged on those bus objects).

-- 
Eduardo



reply via email to

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