Message ID | 20200624121841.17971-2-paul@xen.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | fix assertion failures when using Xen | expand |
On 6/24/20 2:18 PM, Paul Durrant wrote: > From: Paul Durrant <pdurrant@amazon.com> > > 'xen-sysdev' plugs into the 'System' bus type, not 'xen-sysbus. That bus type > is what 'xen-backend' plugs into. > 'xen-sysdev' is drived form 'sys-bus-device' so the bus type need not be > overridden. 'xen-backend' is derived from 'device', which plugs into the > generic 'bus' type, so its bus type should be overridden to 'xen-sysbus'. > > Without this patch, the following assertion will fail: > > qemu-system-i386: hw/core/qdev.c:102: qdev_set_parent_bus: Assertion > `dc->bus_type && object_dynamic_cast(OBJECT(bus), dc->bus_type)' > failed. > > Reported-by: Jason Andryuk <jandryuk@gmail.com> > Fixes: 81cb05732efb ("qdev: Assert devices are plugged into a bus that can take them") > Signed-off-by: Paul Durrant <pdurrant@amazon.com> > --- > Cc: Stefano Stabellini <sstabellini@kernel.org> > Cc: Anthony Perard <anthony.perard@citrix.com> > --- > hw/xen/xen-legacy-backend.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/hw/xen/xen-legacy-backend.c b/hw/xen/xen-legacy-backend.c > index 2335ee2e65..c5c75c0064 100644 > --- a/hw/xen/xen-legacy-backend.c > +++ b/hw/xen/xen-legacy-backend.c > @@ -789,11 +789,12 @@ static void xendev_class_init(ObjectClass *klass, void *data) > set_bit(DEVICE_CATEGORY_MISC, dc->categories); > /* xen-backend devices can be plugged/unplugged dynamically */ > dc->user_creatable = true; > + dc->bus_type = TYPE_XENSYSBUS; > } > > static const TypeInfo xendev_type_info = { > .name = TYPE_XENBACKEND, > - .parent = TYPE_XENSYSDEV, > + .parent = TYPE_DEVICE, > .class_init = xendev_class_init, > .instance_size = sizeof(struct XenLegacyDevice), > }; > @@ -824,7 +825,6 @@ static void xen_sysdev_class_init(ObjectClass *klass, void *data) > DeviceClass *dc = DEVICE_CLASS(klass); > > device_class_set_props(dc, xen_sysdev_properties); > - dc->bus_type = TYPE_XENSYSBUS; > } > > static const TypeInfo xensysdev_info = { > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
diff --git a/hw/xen/xen-legacy-backend.c b/hw/xen/xen-legacy-backend.c index 2335ee2e65..c5c75c0064 100644 --- a/hw/xen/xen-legacy-backend.c +++ b/hw/xen/xen-legacy-backend.c @@ -789,11 +789,12 @@ static void xendev_class_init(ObjectClass *klass, void *data) set_bit(DEVICE_CATEGORY_MISC, dc->categories); /* xen-backend devices can be plugged/unplugged dynamically */ dc->user_creatable = true; + dc->bus_type = TYPE_XENSYSBUS; } static const TypeInfo xendev_type_info = { .name = TYPE_XENBACKEND, - .parent = TYPE_XENSYSDEV, + .parent = TYPE_DEVICE, .class_init = xendev_class_init, .instance_size = sizeof(struct XenLegacyDevice), }; @@ -824,7 +825,6 @@ static void xen_sysdev_class_init(ObjectClass *klass, void *data) DeviceClass *dc = DEVICE_CLASS(klass); device_class_set_props(dc, xen_sysdev_properties); - dc->bus_type = TYPE_XENSYSBUS; } static const TypeInfo xensysdev_info = {