Message ID | 20200624121939.10282-1-jandryuk@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | xen: Fix xen-legacy-backend qdev types | expand |
> -----Original Message----- > From: Jason Andryuk <jandryuk@gmail.com> > Sent: 24 June 2020 13:20 > To: Stefano Stabellini <sstabellini@kernel.org>; Anthony Perard <anthony.perard@citrix.com>; Paul > Durrant <paul@xen.org>; xen-devel@lists.xenproject.org > Cc: Jason Andryuk <jandryuk@gmail.com>; qemu-devel@nongnu.org > Subject: [PATCH] xen: Fix xen-legacy-backend qdev types > > xen-sysdev is a TYPE_SYS_BUS_DEVICE. bus_type should not be changed so > that it can plug into the System bus. Otherwise this assert triggers: > 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. > > TYPE_XENBACKEND attaches to TYPE_XENSYSBUS, so its class_init needs to > be set accordingly to attach the qdev. Otherwise the following assert > triggers: > 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. > > TYPE_XENBACKEND is not a subclass of XEN_XENSYSDEV, so it's parent > is just TYPE_DEVICE. Change that. > > Signed-off-by: Jason Andryuk <jandryuk@gmail.com> Clearly we raced. This patch and my patch #1 are identical so I'm happy to give my ack to this. Paul > --- > 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 = { > -- > 2.25.1
On Wed, Jun 24, 2020 at 8:30 AM Paul Durrant <xadimgnik@gmail.com> wrote: > > > -----Original Message----- > > From: Jason Andryuk <jandryuk@gmail.com> > > Sent: 24 June 2020 13:20 > > To: Stefano Stabellini <sstabellini@kernel.org>; Anthony Perard <anthony.perard@citrix.com>; Paul > > Durrant <paul@xen.org>; xen-devel@lists.xenproject.org > > Cc: Jason Andryuk <jandryuk@gmail.com>; qemu-devel@nongnu.org > > Subject: [PATCH] xen: Fix xen-legacy-backend qdev types > > > > xen-sysdev is a TYPE_SYS_BUS_DEVICE. bus_type should not be changed so > > that it can plug into the System bus. Otherwise this assert triggers: > > 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. > > > > TYPE_XENBACKEND attaches to TYPE_XENSYSBUS, so its class_init needs to > > be set accordingly to attach the qdev. Otherwise the following assert > > triggers: > > 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. > > > > TYPE_XENBACKEND is not a subclass of XEN_XENSYSDEV, so it's parent > > is just TYPE_DEVICE. Change that. > > > > Signed-off-by: Jason Andryuk <jandryuk@gmail.com> > > Clearly we raced. This patch and my patch #1 are identical so I'm happy to give my ack to this. Yeah, looks like you beat me by a hair :) Either way it gets fixed is fine by me. Thanks, Jason
On Wed, Jun 24, 2020 at 08:52:44AM -0400, Jason Andryuk wrote: > On Wed, Jun 24, 2020 at 8:30 AM Paul Durrant <xadimgnik@gmail.com> wrote: > > > > > -----Original Message----- > > > From: Jason Andryuk <jandryuk@gmail.com> > > > Sent: 24 June 2020 13:20 > > > To: Stefano Stabellini <sstabellini@kernel.org>; Anthony Perard <anthony.perard@citrix.com>; Paul > > > Durrant <paul@xen.org>; xen-devel@lists.xenproject.org > > > Cc: Jason Andryuk <jandryuk@gmail.com>; qemu-devel@nongnu.org > > > Subject: [PATCH] xen: Fix xen-legacy-backend qdev types > > > > > > xen-sysdev is a TYPE_SYS_BUS_DEVICE. bus_type should not be changed so > > > that it can plug into the System bus. Otherwise this assert triggers: > > > 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. > > > > > > TYPE_XENBACKEND attaches to TYPE_XENSYSBUS, so its class_init needs to > > > be set accordingly to attach the qdev. Otherwise the following assert > > > triggers: > > > 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. > > > > > > TYPE_XENBACKEND is not a subclass of XEN_XENSYSDEV, so it's parent > > > is just TYPE_DEVICE. Change that. > > > > > > Signed-off-by: Jason Andryuk <jandryuk@gmail.com> > > > > Clearly we raced. This patch and my patch #1 are identical so I'm happy to give my ack to this. > > Yeah, looks like you beat me by a hair :) > > Either way it gets fixed is fine by me. Since there's a choice to make, I think I'll take this patch, but I will add: Fixes: 81cb05732efb ("qdev: Assert devices are plugged into a bus that can take them") Thanks,
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 = {
xen-sysdev is a TYPE_SYS_BUS_DEVICE. bus_type should not be changed so that it can plug into the System bus. Otherwise this assert triggers: 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. TYPE_XENBACKEND attaches to TYPE_XENSYSBUS, so its class_init needs to be set accordingly to attach the qdev. Otherwise the following assert triggers: 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. TYPE_XENBACKEND is not a subclass of XEN_XENSYSDEV, so it's parent is just TYPE_DEVICE. Change that. Signed-off-by: Jason Andryuk <jandryuk@gmail.com> --- hw/xen/xen-legacy-backend.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)