* [Qemu-devel] [for 4.1 PATCH] Revert "hw: report invalid disable-legacy|modern usage for virtio-1-only devs"
@ 2019-07-29 15:59 Dr. David Alan Gilbert (git)
2019-07-29 16:03 ` Daniel P. Berrangé
2019-07-29 16:18 ` Cornelia Huck
0 siblings, 2 replies; 4+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2019-07-29 15:59 UTC (permalink / raw)
To: qemu-devel, berrange, cohuck, mst
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
This reverts commit f2784eed306449c3d04a71a05ed6463b8289aedf
since that accidentally removes the PCIe capabilities from virtio
devices because virtio_pci_dc_realize is called before the new 'mode'
flag is set.
I keep the expanded hw_compat entry because we've lost the ability to
do 'optional'.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
hw/display/virtio-gpu-pci.c | 4 +---
hw/display/virtio-vga.c | 4 +---
hw/virtio/virtio-crypto-pci.c | 4 +---
hw/virtio/virtio-input-pci.c | 4 +---
hw/virtio/virtio-pci.c | 26 ++++++++++----------------
hw/virtio/virtio-pci.h | 31 ++++++-------------------------
6 files changed, 20 insertions(+), 53 deletions(-)
diff --git a/hw/display/virtio-gpu-pci.c b/hw/display/virtio-gpu-pci.c
index d6f01b4a98..e4c7eb6193 100644
--- a/hw/display/virtio-gpu-pci.c
+++ b/hw/display/virtio-gpu-pci.c
@@ -33,9 +33,7 @@ static void virtio_gpu_pci_base_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
Error *local_error = NULL;
qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
- if (!virtio_pci_force_virtio_1(vpci_dev, errp)) {
- return;
- }
+ virtio_pci_force_virtio_1(vpci_dev);
object_property_set_bool(OBJECT(vdev), true, "realized", &local_error);
if (local_error) {
diff --git a/hw/display/virtio-vga.c b/hw/display/virtio-vga.c
index 416e7fec87..79a145e284 100644
--- a/hw/display/virtio-vga.c
+++ b/hw/display/virtio-vga.c
@@ -137,9 +137,7 @@ static void virtio_vga_base_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
/* init virtio bits */
qdev_set_parent_bus(DEVICE(g), BUS(&vpci_dev->bus));
- if (!virtio_pci_force_virtio_1(vpci_dev, errp)) {
- return;
- }
+ virtio_pci_force_virtio_1(vpci_dev);
object_property_set_bool(OBJECT(g), true, "realized", &err);
if (err) {
error_propagate(errp, err);
diff --git a/hw/virtio/virtio-crypto-pci.c b/hw/virtio/virtio-crypto-pci.c
index c8a2317a10..91d4446080 100644
--- a/hw/virtio/virtio-crypto-pci.c
+++ b/hw/virtio/virtio-crypto-pci.c
@@ -53,9 +53,7 @@ static void virtio_crypto_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
}
qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
- if (!virtio_pci_force_virtio_1(vpci_dev, errp)) {
- return;
- }
+ virtio_pci_force_virtio_1(vpci_dev);
object_property_set_bool(OBJECT(vdev), true, "realized", errp);
object_property_set_link(OBJECT(vcrypto),
OBJECT(vcrypto->vdev.conf.cryptodev), "cryptodev",
diff --git a/hw/virtio/virtio-input-pci.c b/hw/virtio/virtio-input-pci.c
index 1c40292abc..ad7774e93e 100644
--- a/hw/virtio/virtio-input-pci.c
+++ b/hw/virtio/virtio-input-pci.c
@@ -49,9 +49,7 @@ static void virtio_input_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
DeviceState *vdev = DEVICE(&vinput->vdev);
qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
- if (!virtio_pci_force_virtio_1(vpci_dev, errp)) {
- return;
- }
+ virtio_pci_force_virtio_1(vpci_dev);
object_property_set_bool(OBJECT(vdev), true, "realized", errp);
}
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index ce928f2429..f6d2223e78 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1723,22 +1723,16 @@ static void virtio_pci_realize(PCIDevice *pci_dev, Error **errp)
/* PCI BAR regions must be powers of 2 */
pow2ceil(proxy->notify.offset + proxy->notify.size));
- if ((proxy->disable_legacy == ON_OFF_AUTO_ON) ||
- ((proxy->disable_legacy == ON_OFF_AUTO_AUTO) && pcie_port)) {
- if (proxy->disable_modern) {
- error_setg(errp, "device cannot work as neither modern nor "
- "legacy mode is enabled");
- error_append_hint(errp, "Set either disable-modern or "
- "disable-legacy to off\n");
- return;
- }
- proxy->mode = VIRTIO_PCI_MODE_MODERN;
- } else {
- if (proxy->disable_modern) {
- proxy->mode = VIRTIO_PCI_MODE_LEGACY;
- } else {
- proxy->mode = VIRTIO_PCI_MODE_TRANSITIONAL;
- }
+ if (proxy->disable_legacy == ON_OFF_AUTO_AUTO) {
+ proxy->disable_legacy = pcie_port ? ON_OFF_AUTO_ON : ON_OFF_AUTO_OFF;
+ }
+
+ if (!virtio_pci_modern(proxy) && !virtio_pci_legacy(proxy)) {
+ error_setg(errp, "device cannot work as neither modern nor legacy mode"
+ " is enabled");
+ error_append_hint(errp, "Set either disable-modern or disable-legacy"
+ " to off\n");
+ return;
}
if (pcie_port && pci_is_express(pci_dev)) {
diff --git a/hw/virtio/virtio-pci.h b/hw/virtio/virtio-pci.h
index 619d9098c1..292275acb1 100644
--- a/hw/virtio/virtio-pci.h
+++ b/hw/virtio/virtio-pci.h
@@ -15,7 +15,6 @@
#ifndef QEMU_VIRTIO_PCI_H
#define QEMU_VIRTIO_PCI_H
-#include "qapi/error.h"
#include "hw/pci/msi.h"
#include "hw/virtio/virtio-bus.h"
@@ -119,12 +118,6 @@ typedef struct VirtIOPCIQueue {
uint32_t used[2];
} VirtIOPCIQueue;
-typedef enum {
- VIRTIO_PCI_MODE_LEGACY,
- VIRTIO_PCI_MODE_TRANSITIONAL,
- VIRTIO_PCI_MODE_MODERN,
-} VirtIOPCIMode;
-
struct VirtIOPCIProxy {
PCIDevice pci_dev;
MemoryRegion bar;
@@ -149,7 +142,6 @@ struct VirtIOPCIProxy {
bool disable_modern;
bool ignore_backend_features;
OnOffAuto disable_legacy;
- VirtIOPCIMode mode;
uint32_t class_code;
uint32_t nvectors;
uint32_t dfselect;
@@ -164,34 +156,23 @@ struct VirtIOPCIProxy {
static inline bool virtio_pci_modern(VirtIOPCIProxy *proxy)
{
- return proxy->mode != VIRTIO_PCI_MODE_LEGACY;
+ return !proxy->disable_modern;
}
static inline bool virtio_pci_legacy(VirtIOPCIProxy *proxy)
{
- return proxy->mode != VIRTIO_PCI_MODE_MODERN;
+ return proxy->disable_legacy == ON_OFF_AUTO_OFF;
}
-static inline bool virtio_pci_force_virtio_1(VirtIOPCIProxy *proxy,
- Error **errp)
+static inline void virtio_pci_force_virtio_1(VirtIOPCIProxy *proxy)
{
- if (proxy->disable_legacy == ON_OFF_AUTO_OFF) {
- error_setg(errp, "Unable to set disable-legacy=off on a virtio-1.0 "
- "only device");
- return false;
- }
- if (proxy->disable_modern == true) {
- error_setg(errp, "Unable to set disable-modern=on on a virtio-1.0 "
- "only device");
- return false;
- }
- proxy->mode = VIRTIO_PCI_MODE_MODERN;
- return true;
+ proxy->disable_modern = false;
+ proxy->disable_legacy = ON_OFF_AUTO_ON;
}
static inline void virtio_pci_disable_modern(VirtIOPCIProxy *proxy)
{
- proxy->mode = VIRTIO_PCI_MODE_LEGACY;
+ proxy->disable_modern = true;
}
/*
--
2.21.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [for 4.1 PATCH] Revert "hw: report invalid disable-legacy|modern usage for virtio-1-only devs"
2019-07-29 15:59 [Qemu-devel] [for 4.1 PATCH] Revert "hw: report invalid disable-legacy|modern usage for virtio-1-only devs" Dr. David Alan Gilbert (git)
@ 2019-07-29 16:03 ` Daniel P. Berrangé
2019-07-29 16:24 ` Dr. David Alan Gilbert
2019-07-29 16:18 ` Cornelia Huck
1 sibling, 1 reply; 4+ messages in thread
From: Daniel P. Berrangé @ 2019-07-29 16:03 UTC (permalink / raw)
To: Dr. David Alan Gilbert (git); +Cc: cohuck, qemu-devel, mst
On Mon, Jul 29, 2019 at 04:59:09PM +0100, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>
> This reverts commit f2784eed306449c3d04a71a05ed6463b8289aedf
> since that accidentally removes the PCIe capabilities from virtio
> devices because virtio_pci_dc_realize is called before the new 'mode'
> flag is set.
> I keep the expanded hw_compat entry because we've lost the ability to
> do 'optional'.
That was the commit immediately following. If you revert
8fa70dbd8bb478d9483c1da3e9976a2d86b3f9a0 first, then this
one would likely revert cleanly.
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [for 4.1 PATCH] Revert "hw: report invalid disable-legacy|modern usage for virtio-1-only devs"
2019-07-29 15:59 [Qemu-devel] [for 4.1 PATCH] Revert "hw: report invalid disable-legacy|modern usage for virtio-1-only devs" Dr. David Alan Gilbert (git)
2019-07-29 16:03 ` Daniel P. Berrangé
@ 2019-07-29 16:18 ` Cornelia Huck
1 sibling, 0 replies; 4+ messages in thread
From: Cornelia Huck @ 2019-07-29 16:18 UTC (permalink / raw)
To: Dr. David Alan Gilbert (git); +Cc: berrange, qemu-devel, mst
On Mon, 29 Jul 2019 16:59:09 +0100
"Dr. David Alan Gilbert (git)" <dgilbert@redhat.com> wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>
> This reverts commit f2784eed306449c3d04a71a05ed6463b8289aedf
> since that accidentally removes the PCIe capabilities from virtio
> devices because virtio_pci_dc_realize is called before the new 'mode'
> flag is set.
Yes, this is probably too hairy to fix for 4.1; but the change might be
worthwhile to revisit for 4.2.
> I keep the expanded hw_compat entry because we've lost the ability to
> do 'optional'.
>
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> hw/display/virtio-gpu-pci.c | 4 +---
> hw/display/virtio-vga.c | 4 +---
> hw/virtio/virtio-crypto-pci.c | 4 +---
> hw/virtio/virtio-input-pci.c | 4 +---
> hw/virtio/virtio-pci.c | 26 ++++++++++----------------
> hw/virtio/virtio-pci.h | 31 ++++++-------------------------
> 6 files changed, 20 insertions(+), 53 deletions(-)
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [for 4.1 PATCH] Revert "hw: report invalid disable-legacy|modern usage for virtio-1-only devs"
2019-07-29 16:03 ` Daniel P. Berrangé
@ 2019-07-29 16:24 ` Dr. David Alan Gilbert
0 siblings, 0 replies; 4+ messages in thread
From: Dr. David Alan Gilbert @ 2019-07-29 16:24 UTC (permalink / raw)
To: Daniel P. Berrangé; +Cc: cohuck, qemu-devel, mst
* Daniel P. Berrangé (berrange@redhat.com) wrote:
> On Mon, Jul 29, 2019 at 04:59:09PM +0100, Dr. David Alan Gilbert (git) wrote:
> > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> >
> > This reverts commit f2784eed306449c3d04a71a05ed6463b8289aedf
> > since that accidentally removes the PCIe capabilities from virtio
> > devices because virtio_pci_dc_realize is called before the new 'mode'
> > flag is set.
> > I keep the expanded hw_compat entry because we've lost the ability to
> > do 'optional'.
>
> That was the commit immediately following. If you revert
> 8fa70dbd8bb478d9483c1da3e9976a2d86b3f9a0 first, then this
> one would likely revert cleanly.
OK, double revert coming up.
Dave
>
> Regards,
> Daniel
> --
> |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
> |: https://libvirt.org -o- https://fstop138.berrange.com :|
> |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-07-29 16:24 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-29 15:59 [Qemu-devel] [for 4.1 PATCH] Revert "hw: report invalid disable-legacy|modern usage for virtio-1-only devs" Dr. David Alan Gilbert (git)
2019-07-29 16:03 ` Daniel P. Berrangé
2019-07-29 16:24 ` Dr. David Alan Gilbert
2019-07-29 16:18 ` Cornelia Huck
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.