aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2022-07-19 17:40:36 +0100
committerPeter Maydell <peter.maydell@linaro.org>2022-07-19 17:40:36 +0100
commitd48125de38f48a61d6423ef6a01156d6dff9ee2c (patch)
treef1555f3565dcb7f00a4ba7a6b581700516b720a6
parentda7da9d5e608200ecc0749ff37be246e9cd3314f (diff)
parentc34a933802071aae5288e0aa3792756312e3da34 (diff)
Merge tag 'kraxel-20220719-pull-request' of https://gitlab.com/kraxel/qemu into staging
ui: dbus-display fix, new gtk config options. usb: xhci fix, doc updates. microvm: no pcie io reservations. # gpg: Signature made Tue 19 Jul 2022 16:21:06 BST # gpg: using RSA key A0328CFFB93A17A79901FE7D4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full] # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" [full] # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full] # Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138 * tag 'kraxel-20220719-pull-request' of https://gitlab.com/kraxel/qemu: gtk: Add show_tabs=on|off command line option. usb: document pcap (aka usb traffic capture) usb: document guest-reset and guest-reset-all usb/hcd-xhci: check slotid in xhci_wakeup_endpoint() microvm: turn off io reservations for pcie root ports dbus-display: fix test race when initializing p2p connection Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--docs/system/devices/usb.rst41
-rw-r--r--hw/i386/microvm.c11
-rw-r--r--hw/usb/hcd-xhci.c3
-rw-r--r--qapi/ui.json7
-rw-r--r--qemu-options.hx6
-rw-r--r--ui/dbus.c4
-rw-r--r--ui/gtk.c4
7 files changed, 72 insertions, 4 deletions
diff --git a/docs/system/devices/usb.rst b/docs/system/devices/usb.rst
index 872d916758..f39a88f080 100644
--- a/docs/system/devices/usb.rst
+++ b/docs/system/devices/usb.rst
@@ -353,3 +353,44 @@ and also assign it to the correct USB bus in QEMU like this:
-device usb-ehci,id=ehci \\
-device usb-host,bus=usb-bus.0,hostbus=3,hostport=1 \\
-device usb-host,bus=ehci.0,hostbus=1,hostport=1
+
+``usb-host`` properties for reset behavior
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The ``guest-reset`` and ``guest-reset-all`` properties control
+whenever the guest is allowed to reset the physical usb device on the
+host. There are three cases:
+
+``guest-reset=false``
+ The guest is not allowed to reset the (physical) usb device.
+
+``guest-reset=true,guest-resets-all=false``
+ The guest is allowed to reset the device when it is not yet
+ initialized (aka no usb bus address assigned). Usually this results
+ in one guest reset being allowed. This is the default behavior.
+
+``guest-reset=true,guest-resets-all=true``
+ The guest is allowed to reset the device as it pleases.
+
+The reason for this existing are broken usb devices. In theory one
+should be able to reset (and re-initialize) usb devices at any time.
+In practice that may result in shitty usb device firmware crashing and
+the device not responding any more until you power-cycle (aka un-plug
+and re-plug) it.
+
+What works best pretty much depends on the behavior of the specific
+usb device at hand, so it's a trial-and-error game. If the default
+doesn't work, try another option and see whenever the situation
+improves.
+
+record usb transfers
+^^^^^^^^^^^^^^^^^^^^
+
+All usb devices have support for recording the usb traffic. This can
+be enabled using the ``pcap=<file>`` property, for example:
+
+``-device usb-mouse,pcap=mouse.pcap``
+
+The pcap files are compatible with the linux kernels usbmon. Many
+tools, including ``wireshark``, can decode and inspect these trace
+files.
diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index 754f1d0593..dc929727dc 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -631,6 +631,14 @@ static void microvm_machine_initfn(Object *obj)
qemu_register_powerdown_notifier(&mms->powerdown_req);
}
+GlobalProperty microvm_properties[] = {
+ /*
+ * pcie host bridge (gpex) on microvm has no io address window,
+ * so reserving io space is not going to work. Turn it off.
+ */
+ { "pcie-root-port", "io-reserve", "0" },
+};
+
static void microvm_class_init(ObjectClass *oc, void *data)
{
X86MachineClass *x86mc = X86_MACHINE_CLASS(oc);
@@ -707,6 +715,9 @@ static void microvm_class_init(ObjectClass *oc, void *data)
"Set off to disable adding virtio-mmio devices to the kernel cmdline");
machine_class_allow_dynamic_sysbus_dev(mc, TYPE_RAMFB_DEVICE);
+
+ compat_props_add(mc->compat_props, microvm_properties,
+ G_N_ELEMENTS(microvm_properties));
}
static const TypeInfo microvm_machine_info = {
diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
index 0cd0a5e540..296cc6c8e6 100644
--- a/hw/usb/hcd-xhci.c
+++ b/hw/usb/hcd-xhci.c
@@ -3269,7 +3269,8 @@ static void xhci_wakeup_endpoint(USBBus *bus, USBEndpoint *ep,
DPRINTF("%s\n", __func__);
slotid = ep->dev->addr;
- if (slotid == 0 || !xhci->slots[slotid-1].enabled) {
+ if (slotid == 0 || slotid > xhci->numslots ||
+ !xhci->slots[slotid - 1].enabled) {
DPRINTF("%s: oops, no slot for dev %d\n", __func__, ep->dev->addr);
return;
}
diff --git a/qapi/ui.json b/qapi/ui.json
index 413371d5e8..cf58ab4283 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -1195,12 +1195,17 @@
# assuming the guest will resize the display to match
# the window size then. Otherwise it defaults to "off".
# Since 3.1
+# @show-tabs: Display the tab bar for switching between the various graphical
+# interfaces (e.g. VGA and virtual console character devices)
+# by default.
+# Since 7.1
#
# Since: 2.12
##
{ 'struct' : 'DisplayGTK',
'data' : { '*grab-on-hover' : 'bool',
- '*zoom-to-fit' : 'bool' } }
+ '*zoom-to-fit' : 'bool',
+ '*show-tabs' : 'bool' } }
##
# @DisplayEGLHeadless:
diff --git a/qemu-options.hx b/qemu-options.hx
index 377d22fbd8..79e00916a1 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1938,7 +1938,7 @@ DEF("display", HAS_ARG, QEMU_OPTION_display,
#endif
#if defined(CONFIG_GTK)
"-display gtk[,full-screen=on|off][,gl=on|off][,grab-on-hover=on|off]\n"
- " [,show-cursor=on|off][,window-close=on|off]\n"
+ " [,show-tabs=on|off][,show-cursor=on|off][,window-close=on|off]\n"
#endif
#if defined(CONFIG_VNC)
"-display vnc=<display>[,<optargs>]\n"
@@ -2023,6 +2023,10 @@ SRST
``grab-on-hover=on|off`` : Grab keyboard input on mouse hover
+ ``show-tabs=on|off`` : Display the tab bar for switching between the
+ various graphical interfaces (e.g. VGA and
+ virtual console character devices) by default.
+
``show-cursor=on|off`` : Force showing the mouse cursor
``window-close=on|off`` : Allow to quit qemu with window close button
diff --git a/ui/dbus.c b/ui/dbus.c
index 7a87612379..32d88dc94a 100644
--- a/ui/dbus.c
+++ b/ui/dbus.c
@@ -268,6 +268,7 @@ dbus_display_add_client_ready(GObject *source_object,
}
g_dbus_object_manager_server_set_connection(dbus_display->server, conn);
+ g_dbus_connection_start_message_processing(conn);
}
@@ -300,7 +301,8 @@ dbus_display_add_client(int csock, Error **errp)
g_dbus_connection_new(G_IO_STREAM(conn),
guid,
- G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_SERVER,
+ G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_SERVER |
+ G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING,
NULL,
dbus_display->add_client_cancellable,
dbus_display_add_client_ready,
diff --git a/ui/gtk.c b/ui/gtk.c
index 2a791dd2aa..1467b8c7d7 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -2390,6 +2390,10 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
opts->u.gtk.grab_on_hover) {
gtk_menu_item_activate(GTK_MENU_ITEM(s->grab_on_hover_item));
}
+ if (opts->u.gtk.has_show_tabs &&
+ opts->u.gtk.show_tabs) {
+ gtk_menu_item_activate(GTK_MENU_ITEM(s->show_tabs_item));
+ }
gd_clipboard_init(s);
}