From: "Marc-André Lureau" <marcandre.lureau@redhat.com> To: qemu-devel@nongnu.org Cc: lvivier@redhat.com, "Marc-André Lureau" <marcandre.lureau@redhat.com>, qemu-stable@nongnu.org, ehabkost@redhat.com, mst@redhat.com Subject: [Qemu-devel] [PATCH] virtio-pci: fix missing device properties Date: Wed, 26 Jun 2019 01:23:33 +0200 [thread overview] Message-ID: <20190625232333.30752-1-marcandre.lureau@redhat.com> (raw) Since commit a4ee4c8baa37154 ("virtio: Helper for registering virtio device types"), virtio-gpu-pci, virtio-vga, and virtio-crypto-pci lost some properties: "ioeventfd" and "vectors". This may cause various issues, such as failing migration or invalid properties. Since those VirtioPCI devices do not have a base name, their class are initialized with virtio_pci_generic_base_class_init(). However, if the VirtioPCIDeviceTypeInfo provided a class_init which sets dc->props, the properties were overwritten by virtio_pci_generic_class_init(). Instead, introduce an intermediary base-type to register the generic properties. Fixes: a4ee4c8baa37154f42b4dc6a13fee79268d15238 Cc: qemu-stable@nongnu.org Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- hw/virtio/virtio-pci.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index e6d5467e54..62c4977332 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -1913,13 +1913,6 @@ static void virtio_pci_generic_class_init(ObjectClass *klass, void *data) dc->props = virtio_pci_generic_properties; } -/* Used when the generic type and the base type is the same */ -static void virtio_pci_generic_base_class_init(ObjectClass *klass, void *data) -{ - virtio_pci_base_class_init(klass, data); - virtio_pci_generic_class_init(klass, NULL); -} - static void virtio_pci_transitional_instance_init(Object *obj) { VirtIOPCIProxy *proxy = VIRTIO_PCI(obj); @@ -1938,14 +1931,13 @@ static void virtio_pci_non_transitional_instance_init(Object *obj) void virtio_pci_types_register(const VirtioPCIDeviceTypeInfo *t) { + char *base_name = NULL; TypeInfo base_type_info = { .name = t->base_name, .parent = t->parent ? t->parent : TYPE_VIRTIO_PCI, .instance_size = t->instance_size, .instance_init = t->instance_init, .class_size = t->class_size, - .class_init = virtio_pci_base_class_init, - .class_data = (void *)t, .abstract = true, }; TypeInfo generic_type_info = { @@ -1961,13 +1953,20 @@ void virtio_pci_types_register(const VirtioPCIDeviceTypeInfo *t) if (!base_type_info.name) { /* No base type -> register a single generic device type */ - base_type_info.name = t->generic_name; - base_type_info.class_init = virtio_pci_generic_base_class_init; - base_type_info.interfaces = generic_type_info.interfaces; - base_type_info.abstract = false; - generic_type_info.name = NULL; + /* use intermediate %s-base-type to add generic device props */ + base_name = g_strdup_printf("%s-base-type", t->generic_name); + base_type_info.name = base_name; + base_type_info.class_init = virtio_pci_generic_class_init; + + generic_type_info.parent = base_name; + generic_type_info.class_init = virtio_pci_base_class_init; + generic_type_info.class_data = (void *)t; + assert(!t->non_transitional_name); assert(!t->transitional_name); + } else { + base_type_info.class_init = virtio_pci_base_class_init; + base_type_info.class_data = (void *)t; } type_register(&base_type_info); @@ -2005,6 +2004,7 @@ void virtio_pci_types_register(const VirtioPCIDeviceTypeInfo *t) }; type_register(&transitional_type_info); } + g_free(base_name); } /* virtio-pci-bus */ -- 2.22.0.rc2.384.g1a9a72ea1d
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com> To: qemu-devel@nongnu.org Cc: "Peter Maydell" <peter.maydell@linaro.org>, qemu-stable@nongnu.org, "Marc-André Lureau" <marcandre.lureau@redhat.com> Subject: [Qemu-devel] [PULL 12/22] virtio-pci: fix missing device properties Date: Tue, 2 Jul 2019 11:07:47 -0400 [thread overview] Message-ID: <20190625232333.30752-1-marcandre.lureau@redhat.com> (raw) Message-ID: <20190702150747.a6AU0jeM4VY3xh1o8JpUyTrviYp4nxksXW10fI0Id38@z> (raw) In-Reply-To: <20190702150606.24851-1-mst@redhat.com> From: Marc-André Lureau <marcandre.lureau@redhat.com> Since commit a4ee4c8baa37154 ("virtio: Helper for registering virtio device types"), virtio-gpu-pci, virtio-vga, and virtio-crypto-pci lost some properties: "ioeventfd" and "vectors". This may cause various issues, such as failing migration or invalid properties. Since those VirtioPCI devices do not have a base name, their class are initialized with virtio_pci_generic_base_class_init(). However, if the VirtioPCIDeviceTypeInfo provided a class_init which sets dc->props, the properties were overwritten by virtio_pci_generic_class_init(). Instead, introduce an intermediary base-type to register the generic properties. Fixes: a4ee4c8baa37154f42b4dc6a13fee79268d15238 Cc: qemu-stable@nongnu.org Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20190625232333.30752-1-marcandre.lureau@redhat.com> --- hw/virtio/virtio-pci.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 62e78e98f5..ce928f2429 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -1913,13 +1913,6 @@ static void virtio_pci_generic_class_init(ObjectClass *klass, void *data) dc->props = virtio_pci_generic_properties; } -/* Used when the generic type and the base type is the same */ -static void virtio_pci_generic_base_class_init(ObjectClass *klass, void *data) -{ - virtio_pci_base_class_init(klass, data); - virtio_pci_generic_class_init(klass, NULL); -} - static void virtio_pci_transitional_instance_init(Object *obj) { VirtIOPCIProxy *proxy = VIRTIO_PCI(obj); @@ -1938,14 +1931,13 @@ static void virtio_pci_non_transitional_instance_init(Object *obj) void virtio_pci_types_register(const VirtioPCIDeviceTypeInfo *t) { + char *base_name = NULL; TypeInfo base_type_info = { .name = t->base_name, .parent = t->parent ? t->parent : TYPE_VIRTIO_PCI, .instance_size = t->instance_size, .instance_init = t->instance_init, .class_size = t->class_size, - .class_init = virtio_pci_base_class_init, - .class_data = (void *)t, .abstract = true, .interfaces = t->interfaces, }; @@ -1962,13 +1954,20 @@ void virtio_pci_types_register(const VirtioPCIDeviceTypeInfo *t) if (!base_type_info.name) { /* No base type -> register a single generic device type */ - base_type_info.name = t->generic_name; - base_type_info.class_init = virtio_pci_generic_base_class_init; - base_type_info.interfaces = generic_type_info.interfaces; - base_type_info.abstract = false; - generic_type_info.name = NULL; + /* use intermediate %s-base-type to add generic device props */ + base_name = g_strdup_printf("%s-base-type", t->generic_name); + base_type_info.name = base_name; + base_type_info.class_init = virtio_pci_generic_class_init; + + generic_type_info.parent = base_name; + generic_type_info.class_init = virtio_pci_base_class_init; + generic_type_info.class_data = (void *)t; + assert(!t->non_transitional_name); assert(!t->transitional_name); + } else { + base_type_info.class_init = virtio_pci_base_class_init; + base_type_info.class_data = (void *)t; } type_register(&base_type_info); @@ -2006,6 +2005,7 @@ void virtio_pci_types_register(const VirtioPCIDeviceTypeInfo *t) }; type_register(&transitional_type_info); } + g_free(base_name); } /* virtio-pci-bus */ -- MST
next reply other threads:[~2019-06-25 23:25 UTC|newest] Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-06-25 23:23 Marc-André Lureau [this message] 2019-07-02 15:07 ` [Qemu-devel] [PULL 12/22] virtio-pci: fix missing device properties Michael S. Tsirkin 2019-06-26 1:55 ` [Qemu-devel] [PATCH] " Eduardo Habkost 2019-06-26 9:48 ` Marc-André Lureau 2019-06-26 12:39 ` Eduardo Habkost -- strict thread matches above, loose matches on Subject: below -- 2019-07-02 15:06 [Qemu-devel] [PULL 00/22] virtio, pc, pci: features, fixes, cleanups Michael S. Tsirkin 2019-07-02 15:06 ` [Qemu-devel] [PULL 01/22] pcie: don't skip multi-mask events Michael S. Tsirkin 2019-07-02 15:06 ` [Qemu-devel] [PULL 02/22] pcie: check that slt ctrl changed before deleting Michael S. Tsirkin 2019-07-11 12:31 ` Peter Maydell 2019-07-02 15:06 ` [Qemu-devel] [PULL 03/22] pcie: work around for racy guest init Michael S. Tsirkin 2019-07-02 15:06 ` [Qemu-devel] [PULL 04/22] pcie: minor cleanups for slot control/status Michael S. Tsirkin 2019-07-02 15:56 ` [Qemu-devel] [PULL 00/22] virtio, pc, pci: features, fixes, cleanups Peter Maydell 2019-07-02 17:00 ` Michael S. Tsirkin 2019-07-02 17:20 ` Peter Maydell 2019-07-02 18:22 ` Michael S. Tsirkin 2019-07-02 18:27 ` Peter Maydell 2019-07-02 19:00 ` Michael S. Tsirkin 2019-07-26 12:39 ` Peter Maydell 2019-07-26 13:43 ` Michael S. Tsirkin 2019-07-04 9:25 ` Peter Maydell 2019-07-04 11:03 ` Pankaj Gupta 2019-07-04 21:24 ` Michael S. Tsirkin 2019-07-05 9:37 ` Pankaj Gupta 2019-07-04 21:29 ` Michael S. Tsirkin 2019-07-05 9:47 ` Peter Maydell 2019-06-28 20:02 [Qemu-devel] [PATCH] pc: Move compat_apic_id_mode variable to PCMachineClass Eduardo Habkost 2019-07-02 15:08 ` [Qemu-devel] [PULL 18/22] " Michael S. Tsirkin 2019-06-29 10:46 ` [Qemu-devel] [PATCH] " Philippe Mathieu-Daudé 2019-06-30 21:30 ` Michael S. Tsirkin 2019-06-26 7:48 [Qemu-devel] [PATCH v2 0/4] libvhost-user: VHOST_USER_PROTOCOL_F_MQ support Stefan Hajnoczi 2019-06-26 7:48 ` [Qemu-devel] [PATCH v2 1/4] libvhost-user: add vmsg_set_reply_u64() helper Stefan Hajnoczi 2019-07-02 15:08 ` [Qemu-devel] [PULL 19/22] " Michael S. Tsirkin 2019-06-26 7:48 ` [Qemu-devel] [PATCH v2 2/4] libvhost-user: support many virtqueues Stefan Hajnoczi 2019-07-02 15:08 ` [Qemu-devel] [PULL 20/22] " Michael S. Tsirkin 2019-06-26 7:48 ` [Qemu-devel] [PATCH v2 3/4] libvhost-user: implement VHOST_USER_PROTOCOL_F_MQ Stefan Hajnoczi 2019-07-02 15:08 ` [Qemu-devel] [PULL 21/22] " Michael S. Tsirkin 2019-06-26 7:48 ` [Qemu-devel] [PATCH v2 4/4] docs: avoid vhost-user-net specifics in multiqueue section Stefan Hajnoczi 2019-07-02 15:08 ` [Qemu-devel] [PULL 22/22] " Michael S. Tsirkin 2019-06-26 2:31 [Qemu-devel] [PATCH v4 0/5] virtio: fix some issues of "started" and "start_on_kick" flag elohimes 2019-06-26 2:31 ` [Qemu-devel] [PATCH v4 1/5] virtio: add "use-started" property elohimes 2019-07-02 15:07 ` [Qemu-devel] [PULL 13/22] " Michael S. Tsirkin 2019-06-26 10:17 ` [Qemu-devel] [PATCH v4 1/5] " Greg Kurz 2019-06-27 2:20 ` Yongji Xie 2019-06-26 2:31 ` [Qemu-devel] [PATCH v4 2/5] virtio: Set "start_on_kick" for legacy devices elohimes 2019-07-02 15:07 ` [Qemu-devel] [PULL 14/22] " Michael S. Tsirkin 2019-06-26 2:31 ` [Qemu-devel] [PATCH v4 3/5] virtio: Set "start_on_kick" on virtio_set_features() elohimes 2019-07-02 15:08 ` [Qemu-devel] [PULL 15/22] " Michael S. Tsirkin 2019-06-26 2:31 ` [Qemu-devel] [PATCH v4 4/5] virtio: Make sure we get correct state of device on handle_aio_output() elohimes 2019-07-02 15:08 ` [Qemu-devel] [PULL 16/22] " Michael S. Tsirkin 2019-06-26 2:31 ` [Qemu-devel] [PATCH v4 5/5] virtio: Don't change "started" flag on virtio_vmstate_change() elohimes 2019-07-02 15:08 ` [Qemu-devel] [PULL 17/22] " Michael S. Tsirkin 2019-06-26 10:43 ` [Qemu-devel] [PATCH v4 0/5] virtio: fix some issues of "started" and "start_on_kick" flag Laurent Vivier 2019-06-27 2:19 ` Yongji Xie 2019-06-19 9:49 [Qemu-devel] [PATCH v2 0/7] Qemu virtio pmem device Pankaj Gupta 2019-06-19 9:49 ` [Qemu-devel] [PATCH v2 1/7] virtio-pmem: add virtio device Pankaj Gupta 2019-07-02 15:07 ` [Qemu-devel] [PULL 05/22] " Michael S. Tsirkin 2019-07-02 11:46 ` [Qemu-devel] [PATCH v2 1/7] " Cornelia Huck 2019-07-11 12:57 ` [Qemu-devel] [PULL 05/22] " Peter Maydell 2019-07-11 14:05 ` Pankaj Gupta 2019-06-19 9:49 ` [Qemu-devel] [PATCH v2 2/7] virtio-pci: Allow to specify additional interfaces for the base type Pankaj Gupta 2019-07-02 15:07 ` [Qemu-devel] [PULL 06/22] " Michael S. Tsirkin 2019-06-19 9:49 ` [Qemu-devel] [PATCH v2 3/7] virtio-pmem: sync linux headers Pankaj Gupta 2019-07-02 15:07 ` [Qemu-devel] [PULL 07/22] " Michael S. Tsirkin 2019-07-02 11:50 ` [Qemu-devel] [PATCH v2 3/7] " Cornelia Huck 2019-07-02 11:59 ` Pankaj Gupta 2019-07-02 16:58 ` Michael S. Tsirkin 2019-07-02 17:09 ` Pankaj Gupta 2019-07-02 17:11 ` Michael S. Tsirkin 2019-07-02 17:21 ` Pankaj Gupta 2019-07-02 15:10 ` Michael S. Tsirkin 2019-06-19 9:49 ` [Qemu-devel] [PATCH v2 4/7] virtio-pci: Proxy for virtio-pmem Pankaj Gupta 2019-07-02 15:07 ` [Qemu-devel] [PULL 08/22] " Michael S. Tsirkin 2019-07-02 11:55 ` [Qemu-devel] [PATCH v2 4/7] " Cornelia Huck 2019-07-02 12:00 ` Pankaj Gupta 2019-07-02 17:09 ` Michael S. Tsirkin 2019-07-02 17:14 ` Pankaj Gupta 2019-07-11 12:59 ` [Qemu-devel] [PULL 08/22] " Peter Maydell 2019-07-11 13:27 ` Pankaj Gupta 2019-06-19 9:49 ` [Qemu-devel] [PATCH v2 5/7] hmp: Handle virtio-pmem when printing memory device infos Pankaj Gupta 2019-07-02 15:07 ` [Qemu-devel] [PULL 09/22] " Michael S. Tsirkin 2019-07-02 8:50 ` [Qemu-devel] [PATCH v2 5/7] " Wei Yang 2019-07-02 10:17 ` Pankaj Gupta 2019-06-19 9:49 ` [Qemu-devel] [PATCH v2 6/7] numa: Handle virtio-pmem in NUMA stats Pankaj Gupta 2019-07-02 15:07 ` [Qemu-devel] [PULL 10/22] " Michael S. Tsirkin 2019-06-19 9:49 ` [Qemu-devel] [PATCH v2 7/7] pc: Support for virtio-pmem-pci Pankaj Gupta 2019-07-02 15:07 ` [Qemu-devel] [PULL 11/22] " Michael S. Tsirkin 2019-07-01 3:53 ` [Qemu-devel] [PATCH v2 0/7] Qemu virtio pmem device Pankaj Gupta 2019-07-02 8:49 ` Wei Yang 2019-07-02 10:07 ` Pankaj Gupta 2019-07-03 0:58 ` Wei Yang 2019-07-03 1:31 ` Pankaj Gupta 2019-07-03 1:57 ` Wei Yang 2019-07-03 2:31 ` Pankaj Gupta 2019-07-03 2:42 ` Wei Yang 2019-07-03 3:21 ` Pankaj Gupta
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=20190625232333.30752-1-marcandre.lureau@redhat.com \ --to=marcandre.lureau@redhat.com \ --cc=ehabkost@redhat.com \ --cc=lvivier@redhat.com \ --cc=mst@redhat.com \ --cc=qemu-devel@nongnu.org \ --cc=qemu-stable@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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.