On Tue, 29 Nov 2016 12:18:19 -0200 Eduardo Habkost <ehabk...@redhat.com> wrote:
> On Tue, Nov 29, 2016 at 02:57:07PM +0100, Cornelia Huck wrote: > > On Fri, 25 Nov 2016 20:05:42 -0200 > > Eduardo Habkost <ehabk...@redhat.com> wrote: > > > > > Each bus class will now be aware of the specific device types > > > that can be plugged on it. That will be useful for: > > > > > > * Runtime check for which devices types can be plugged to the > > > machine; > > > * Validation of query-machines output by automated tests. > > > > > > By default, a single type name is used on all bus instances (set > > > at BusClass::device_type), but bus instances can override it and > > > return a different type list. > > > > > > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> > > > > I've read (well, more skimmed through) the whole patchset and I think > > we have different cases of "multiple device types for one bus": > > > > - the q35 root bus case later in this patchset, where just a certain > > instance of the bus can accept multiple types > > - the case where every instance of a bus may accept multiple types > > (none currently; but this will be the case for e.g. virtual-css once we > > have other derivates of CCW_DEVICE than virtio-ccw) > > Are all going to be subclasses of TYPE_CCW_DEVICE, and are all > TYPE_CCW_DEVICE subclasses going to be accepted by virtual-css? That's what we plan to do, yes. > In this case, you could just set BusClass::device_type to > TYPE_CCW_DEVICE on virtual-css-bus. Sounds reasonable. > > > > > For the second case, a static initializer for multiple types in the > > class makes sense; > > If necessary, we can change BusClass::device_type to a > BusClass::device_types list. I didn't do that because it didn't > seem necessary (and I would like to encourage buses to encode > compatiblity using a single type/interface name whenever > possible). Most busses will probably allow a single (parent) device type anyway, so that's fine, I guess. > > > > but the first case is a bit hackish. Should there be > > a generic way to pass a list of types to the individual bus instance's > > initializers (that could fall back to a static list in the class)? > > Sound good, but I don't know how that generic mechanism could > look like. Would a: > void bus_add_accepted_device_type(BusState *bus, const char *devtype) > function be enough? Would we need a remove helper as well (i.e. "this bus normally supports types a and b, but this instance accepts only a")? It is probably enough to add it should the need arise some day.