diff mbox

[v3] virtio-pci: error out when both legacy and modern modes are disabled

Message ID 146912266605.14450.16219526000301775326.stgit@bahia.lan
State New
Headers show

Commit Message

Greg Kurz July 21, 2016, 5:43 p.m. UTC
From: Greg Kurz <gkurz@linux.vnet.ibm.com>

Without presuming if we got there because of a user mistake or some
more subtle bug in the tooling, it really does not make sense to
implement a non-functional device.

Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
Signed-off-by: Greg Kurz <groug@kaod.org>
---
v3: - rebased on top of:
    https://lists.gnu.org/archive/html/qemu-devel/2016-07/msg04744.html
    - use virtio_pci_legacy/modern helpers
    - rephrased error message to be shorter and use the on/off logic

Marcel, this still results in > 80 char line in the code but I'd rather not
split it to ease grepping, nor shorten the message even more to keep it
meaningful.
---
 hw/virtio/virtio-pci.c |    5 +++++
 1 file changed, 5 insertions(+)

Comments

Marcel Apfelbaum July 21, 2016, 6:11 p.m. UTC | #1
On 07/21/2016 08:43 PM, Greg Kurz wrote:
> From: Greg Kurz <gkurz@linux.vnet.ibm.com>
>
> Without presuming if we got there because of a user mistake or some
> more subtle bug in the tooling, it really does not make sense to
> implement a non-functional device.
>
> Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
> Signed-off-by: Greg Kurz <groug@kaod.org>
> ---
> v3: - rebased on top of:
>      https://lists.gnu.org/archive/html/qemu-devel/2016-07/msg04744.html
>      - use virtio_pci_legacy/modern helpers
>      - rephrased error message to be shorter and use the on/off logic
>
> Marcel, this still results in > 80 char line in the code but I'd rather not
> split it to ease grepping, nor shorten the message even more to keep it
> meaningful.
> ---
>   hw/virtio/virtio-pci.c |    5 +++++
>   1 file changed, 5 insertions(+)
>
> diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
> index 755f9218b77d..1f5f00a50a0b 100644
> --- a/hw/virtio/virtio-pci.c
> +++ b/hw/virtio/virtio-pci.c
> @@ -1842,6 +1842,11 @@ static void virtio_pci_dc_realize(DeviceState *qdev, Error **errp)
>       VirtIOPCIProxy *proxy = VIRTIO_PCI(qdev);
>       PCIDevice *pci_dev = &proxy->pci_dev;
>
> +    if (!(virtio_pci_modern(proxy) || virtio_pci_legacy(proxy))) {

Hi Greg,
Thanks for rebasing it.

A minor thing, disable-legacy is now auto/on/off.
If the user sets [disable-legacy=auto, disable-modern=on]
will not pass this test, but is possible that later on
will be enabled:
See virtio_pci_realize:
        if (proxy->disable_legacy == ON_OFF_AUTO_AUTO) {
           proxy->disable_legacy = pcie_port ? ON_OFF_AUTO_ON : ON_OFF_AUTO_OFF;
        }

On the the other hand, if the user sets disable-modern=on, is reasonable to ask
him to set disable-legacy to off.


Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>

Thanks,
Marcel



> +        error_setg(errp, "device cannot work when both disable-modern and disable-legacy are set to on.");
> +        return;
> +    }
> +
>       if (!(proxy->flags & VIRTIO_PCI_FLAG_DISABLE_PCIE) &&
>           virtio_pci_modern(proxy)) {
>           pci_dev->cap_present |= QEMU_PCI_CAP_EXPRESS;
>
Eric Blake July 21, 2016, 8:07 p.m. UTC | #2
On 07/21/2016 11:43 AM, Greg Kurz wrote:
> From: Greg Kurz <gkurz@linux.vnet.ibm.com>
> 
> Without presuming if we got there because of a user mistake or some
> more subtle bug in the tooling, it really does not make sense to
> implement a non-functional device.
> 
> Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
> Signed-off-by: Greg Kurz <groug@kaod.org>
> ---
> v3: - rebased on top of:
>     https://lists.gnu.org/archive/html/qemu-devel/2016-07/msg04744.html
>     - use virtio_pci_legacy/modern helpers
>     - rephrased error message to be shorter and use the on/off logic
> 
> Marcel, this still results in > 80 char line in the code but I'd rather not
> split it to ease grepping, nor shorten the message even more to keep it
> meaningful.
> ---
>  hw/virtio/virtio-pci.c |    5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
> index 755f9218b77d..1f5f00a50a0b 100644
> --- a/hw/virtio/virtio-pci.c
> +++ b/hw/virtio/virtio-pci.c
> @@ -1842,6 +1842,11 @@ static void virtio_pci_dc_realize(DeviceState *qdev, Error **errp)
>      VirtIOPCIProxy *proxy = VIRTIO_PCI(qdev);
>      PCIDevice *pci_dev = &proxy->pci_dev;
>  
> +    if (!(virtio_pci_modern(proxy) || virtio_pci_legacy(proxy))) {
> +        error_setg(errp, "device cannot work when both disable-modern and disable-legacy are set to on.");

The phrase passed to error_setg() should not end in '.'

You can also split the string literal, to keep the line length of the
source under 80 (the long error message is less problematic).
diff mbox

Patch

diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index 755f9218b77d..1f5f00a50a0b 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1842,6 +1842,11 @@  static void virtio_pci_dc_realize(DeviceState *qdev, Error **errp)
     VirtIOPCIProxy *proxy = VIRTIO_PCI(qdev);
     PCIDevice *pci_dev = &proxy->pci_dev;
 
+    if (!(virtio_pci_modern(proxy) || virtio_pci_legacy(proxy))) {
+        error_setg(errp, "device cannot work when both disable-modern and disable-legacy are set to on.");
+        return;
+    }
+
     if (!(proxy->flags & VIRTIO_PCI_FLAG_DISABLE_PCIE) &&
         virtio_pci_modern(proxy)) {
         pci_dev->cap_present |= QEMU_PCI_CAP_EXPRESS;