qemu-s390x
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] hw/s390x: Emit a warning if user tried to enable USB


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH] hw/s390x: Emit a warning if user tried to enable USB
Date: Thu, 17 Oct 2019 20:18:11 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.1.1

On 10/17/19 4:40 PM, Thomas Huth wrote:
On 17/10/2019 16.34, Cornelia Huck wrote:
On Thu, 17 Oct 2019 16:21:23 +0200
Thomas Huth <address@hidden> wrote:

There is no USB on s390x, so running qemu-system-s390x with
"-machine ...,usb=on" is certainly wrong. Emit a warning to make
the users aware of their misconfiguration.

Signed-off-by: Thomas Huth <address@hidden>
---
  After a year or two, we could finally turn this into a hard error,
  but I think we should give the users some time to fix their command
  lines first, so I'm initially only emitting a warning here.

  hw/s390x/s390-virtio-ccw.c | 4 ++++
  1 file changed, 4 insertions(+)

diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index d3edeef0ad..af8c4c0daf 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -243,6 +243,10 @@ static void ccw_init(MachineState *machine)
      VirtualCssBus *css_bus;
      DeviceState *dev;
+ if (machine->usb) {
+        warn_report("This machine does not support USB");

I'm wondering if this is the only machine type not supporting usb...
if not, how are others handling it?

I think most machines are silently ignoring it, like we did on s390x
until now, too.

The usb parsing code in machine.c does not care if usb is even
configured (CONFIG_USB).

machine.c is common code, so you can not use CONFIG_USB there.

We already have:

bool target_words_bigendian(void)
{
#if defined(TARGET_WORDS_BIGENDIAN)
    return true;
#else
    return false;
#endif
}

What about something such:

-- >8 --
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 1689ad3bf8..0c45ab042b 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -986,7 +986,7 @@ static void machine_finalize(Object *obj)

 bool machine_usb(MachineState *machine)
 {
-    return machine->usb;
+    return machine_has_usb() && machine->usb;
 }

 bool machine_kernel_irqchip_allowed(MachineState *machine)
diff --git a/hw/usb/Makefile.objs b/hw/usb/Makefile.objs
index 303ac084a0..ac545cdd2e 100644
--- a/hw/usb/Makefile.objs
+++ b/hw/usb/Makefile.objs
@@ -1,6 +1,7 @@
 # usb subsystem core
 common-obj-y += core.o combined-packet.o bus.o libhw.o
 common-obj-$(CONFIG_USB) += desc.o desc-msos.o
+obj-y += machine.o

 # usb host adapters
 common-obj-$(CONFIG_USB_UHCI) += hcd-uhci.o
diff --git a/hw/usb/machine.c b/hw/usb/machine.c
new file mode 100644
index 0000000000..5381928479
--- /dev/null
+++ b/hw/usb/machine.c
@@ -0,0 +1,12 @@
+#include "qemu/osdep.h"
+#include "hw/boards.h"
+#include "config-devices.h"
+
+bool machine_has_usb(void)
+{
+#if defined(CONFIG_USB)
+    return true;
+#else
+    return false;
+#endif
+}
diff --git a/include/hw/boards.h b/include/hw/boards.h
index be18a5c032..e4518b73b1 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -63,6 +63,7 @@ extern MachineState *current_machine;

 void machine_run_board_init(MachineState *machine);
 bool machine_usb(MachineState *machine);
+bool machine_has_usb(void); /* or target_has_usb()? */
 bool machine_kernel_irqchip_allowed(MachineState *machine);
 bool machine_kernel_irqchip_required(MachineState *machine);
 bool machine_kernel_irqchip_split(MachineState *machine);

---



reply via email to

[Prev in Thread] Current Thread [Next in Thread]