aboutsummaryrefslogtreecommitdiff
path: root/hw/virtio/virtio-pci.c
diff options
context:
space:
mode:
authorDr. David Alan Gilbert <dgilbert@redhat.com>2019-07-29 17:29:03 +0100
committerMichael S. Tsirkin <mst@redhat.com>2019-07-29 16:57:27 -0400
commitdd56040d297a0c530e204e9f459b256e3ddd7e8f (patch)
tree0a4174482e923564cb2b89ea733dab9f15a5c674 /hw/virtio/virtio-pci.c
parent92fd453c6717acbeafcbbac39084a6f1c9ac6827 (diff)
Revert "hw: report invalid disable-legacy|modern usage for virtio-1-only devs"
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. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Message-Id: <20190729162903.4489-3-dgilbert@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Diffstat (limited to 'hw/virtio/virtio-pci.c')
-rw-r--r--hw/virtio/virtio-pci.c26
1 files changed, 10 insertions, 16 deletions
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)) {