All of lore.kernel.org
 help / color / mirror / Atom feed
* [PULL 00/10] Misc 20211102 patches
@ 2021-11-02 16:26 Gerd Hoffmann
  2021-11-02 16:26 ` [PULL 01/10] MAINTAINERS: Add myself as a reviewer for SDL audio Gerd Hoffmann
                   ` (10 more replies)
  0 siblings, 11 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2021-11-02 16:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: Thomas Huth, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	libvir-list, Richard Henderson, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Willian Rampazzo, Gerd Hoffmann,
	Paolo Bonzini, Alex Bennée

The following changes since commit 8cb41fda78c7ebde0dd248c6afe1d336efb0de50:

  Merge remote-tracking branch 'remotes/philmd/tags/machine-20211101' into staging (2021-11-02 05:53:45 -0400)

are available in the Git repository at:

  git://git.kraxel.org/qemu tags/misc-20211102-pull-request

for you to fetch changes up to 58d7d4c7869cb3addb0714aa7b6bd88f2b6b7edf:

  usb-storage: tag usb_msd_csw as packed struct (2021-11-02 17:24:18 +0100)

----------------------------------------------------------------
MAINTAINERS: audio updates
microvm: device tree support
console: chardev fixes
misc: deprecate sga
usb: fix struct usb_msd_csw

----------------------------------------------------------------

Christian Schoenebeck (1):
  MAINTAINERS: add myself as partial audio reviewer

Daniel P. Berrangé (1):
  hw/misc: deprecate the 'sga' device

Dongwon Kim (1):
  ui/gtk: skip any extra draw of same guest scanout blob res

Gerd Hoffmann (2):
  microvm: add device tree support.
  usb-storage: tag usb_msd_csw as packed struct

Nikola Pavlica (1):
  ui/gtk: Update the refresh rate for gl-area too

Thomas Huth (1):
  MAINTAINERS: Add myself as a reviewer for SDL audio

Volker Rümelin (3):
  ui/console: replace QEMUFIFO with Fifo8
  ui/console: replace kbd_timer with chr_accept_input callback
  ui/console: remove chardev frontend connected test

 hw/i386/microvm-dt.h               |   8 +
 include/hw/i386/microvm.h          |   4 +
 include/hw/usb/msd.h               |   2 +-
 include/ui/console.h               |   1 +
 hw/display/virtio-gpu-udmabuf.c    |   2 +-
 hw/i386/microvm-dt.c               | 341 +++++++++++++++++++++++++++++
 hw/i386/microvm.c                  |   2 +
 hw/misc/sga.c                      |   2 +
 ui/console.c                       | 109 +++------
 ui/gtk-egl.c                       |  40 ++--
 ui/gtk-gl-area.c                   |  52 +++--
 .gitlab-ci.d/buildtest.yml         |   1 -
 MAINTAINERS                        |   4 +
 configs/targets/i386-softmmu.mak   |   1 +
 configs/targets/x86_64-softmmu.mak |   1 +
 docs/about/deprecated.rst          |  10 +
 hw/i386/meson.build                |   2 +-
 17 files changed, 466 insertions(+), 116 deletions(-)
 create mode 100644 hw/i386/microvm-dt.h
 create mode 100644 hw/i386/microvm-dt.c

-- 
2.31.1




^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PULL 01/10] MAINTAINERS: Add myself as a reviewer for SDL audio
  2021-11-02 16:26 [PULL 00/10] Misc 20211102 patches Gerd Hoffmann
@ 2021-11-02 16:26 ` Gerd Hoffmann
  2021-11-02 16:26 ` [PULL 02/10] MAINTAINERS: add myself as partial audio reviewer Gerd Hoffmann
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2021-11-02 16:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: Thomas Huth, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	libvir-list, Richard Henderson, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Willian Rampazzo, Thomas Huth,
	Gerd Hoffmann, Paolo Bonzini, Alex Bennée

From: Thomas Huth <huth@tuxfamily.org>

I've got some experience with the SDL library, so I can help
reviewing patches here.

Signed-off-by: Thomas Huth <huth@tuxfamily.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20211030062106.46024-1-huth@tuxfamily.org>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 MAINTAINERS | 1 +
 1 file changed, 1 insertion(+)

diff --git a/MAINTAINERS b/MAINTAINERS
index 310a9512ea18..99618e6d9906 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2315,6 +2315,7 @@ F: audio/paaudio.c
 
 SDL Audio backend
 M: Gerd Hoffmann <kraxel@redhat.com>
+R: Thomas Huth <huth@tuxfamily.org>
 S: Odd Fixes
 F: audio/sdlaudio.c
 
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 02/10] MAINTAINERS: add myself as partial audio reviewer
  2021-11-02 16:26 [PULL 00/10] Misc 20211102 patches Gerd Hoffmann
  2021-11-02 16:26 ` [PULL 01/10] MAINTAINERS: Add myself as a reviewer for SDL audio Gerd Hoffmann
@ 2021-11-02 16:26 ` Gerd Hoffmann
  2021-11-02 16:26 ` [PULL 03/10] microvm: add device tree support Gerd Hoffmann
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2021-11-02 16:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: Thomas Huth, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	libvir-list, Christian Schoenebeck, Richard Henderson,
	Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Willian Rampazzo, Gerd Hoffmann,
	Paolo Bonzini, Alex Bennée

From: Christian Schoenebeck <qemu_oss@crudebyte.com>

Volunteering as reviewer for some of the audio backends; namely
ALSA, CoreAudio and JACK.

Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <E1mMVca-0005ZJ-Lo@lizzy.crudebyte.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 MAINTAINERS | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/MAINTAINERS b/MAINTAINERS
index 99618e6d9906..9ddba68701b5 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2285,11 +2285,13 @@ F: qapi/audio.json
 
 ALSA Audio backend
 M: Gerd Hoffmann <kraxel@redhat.com>
+R: Christian Schoenebeck <qemu_oss@crudebyte.com>
 S: Odd Fixes
 F: audio/alsaaudio.c
 
 Core Audio framework backend
 M: Gerd Hoffmann <kraxel@redhat.com>
+R: Christian Schoenebeck <qemu_oss@crudebyte.com>
 S: Odd Fixes
 F: audio/coreaudio.c
 
@@ -2300,6 +2302,7 @@ F: audio/dsound*
 
 JACK Audio Connection Kit backend
 M: Gerd Hoffmann <kraxel@redhat.com>
+R: Christian Schoenebeck <qemu_oss@crudebyte.com>
 S: Odd Fixes
 F: audio/jackaudio.c
 
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 03/10] microvm: add device tree support.
  2021-11-02 16:26 [PULL 00/10] Misc 20211102 patches Gerd Hoffmann
  2021-11-02 16:26 ` [PULL 01/10] MAINTAINERS: Add myself as a reviewer for SDL audio Gerd Hoffmann
  2021-11-02 16:26 ` [PULL 02/10] MAINTAINERS: add myself as partial audio reviewer Gerd Hoffmann
@ 2021-11-02 16:26 ` Gerd Hoffmann
  2021-11-05 16:01   ` Peter Maydell
  2021-11-02 16:26 ` [PULL 04/10] ui/gtk: Update the refresh rate for gl-area too Gerd Hoffmann
                   ` (7 subsequent siblings)
  10 siblings, 1 reply; 13+ messages in thread
From: Gerd Hoffmann @ 2021-11-02 16:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: Thomas Huth, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	libvir-list, Richard Henderson, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Willian Rampazzo, Gerd Hoffmann,
	Paolo Bonzini, Alex Bennée

Allows edk2 detect virtio-mmio devices and pcie ecam.
See comment in hw/i386/microvm-dt.c for more details.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Sergio Lopez <slp@redhat.com>
Message-Id: <20211014193617.2475578-1-kraxel@redhat.com>
---
 hw/i386/microvm-dt.h               |   8 +
 include/hw/i386/microvm.h          |   4 +
 hw/i386/microvm-dt.c               | 341 +++++++++++++++++++++++++++++
 hw/i386/microvm.c                  |   2 +
 .gitlab-ci.d/buildtest.yml         |   1 -
 configs/targets/i386-softmmu.mak   |   1 +
 configs/targets/x86_64-softmmu.mak |   1 +
 hw/i386/meson.build                |   2 +-
 8 files changed, 358 insertions(+), 2 deletions(-)
 create mode 100644 hw/i386/microvm-dt.h
 create mode 100644 hw/i386/microvm-dt.c

diff --git a/hw/i386/microvm-dt.h b/hw/i386/microvm-dt.h
new file mode 100644
index 000000000000..77c79cbdd9fb
--- /dev/null
+++ b/hw/i386/microvm-dt.h
@@ -0,0 +1,8 @@
+#ifndef HW_I386_MICROVM_DT_H
+#define HW_I386_MICROVM_DT_H
+
+#include "hw/i386/microvm.h"
+
+void dt_setup_microvm(MicrovmMachineState *mms);
+
+#endif
diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h
index f25f8374413f..4d9c732d4b2b 100644
--- a/include/hw/i386/microvm.h
+++ b/include/hw/i386/microvm.h
@@ -104,6 +104,10 @@ struct MicrovmMachineState {
     Notifier machine_done;
     Notifier powerdown_req;
     struct GPEXConfig gpex;
+
+    /* device tree */
+    void *fdt;
+    uint32_t ioapic_phandle[2];
 };
 
 #define TYPE_MICROVM_MACHINE   MACHINE_TYPE_NAME("microvm")
diff --git a/hw/i386/microvm-dt.c b/hw/i386/microvm-dt.c
new file mode 100644
index 000000000000..875ba9196394
--- /dev/null
+++ b/hw/i386/microvm-dt.c
@@ -0,0 +1,341 @@
+/*
+ * microvm device tree support
+ *
+ * This generates an device tree for microvm and exports it via fw_cfg
+ * as "etc/fdt" to the firmware (edk2 specifically).
+ *
+ * The use case is to allow edk2 find the pcie ecam and the virtio
+ * devices, without adding an ACPI parser, reusing the fdt parser
+ * which is needed anyway for the arm platform.
+ *
+ * Note 1: The device tree is incomplete. CPUs and memory is missing
+ *         for example, those can be detected using other fw_cfg files.
+ *         Also pci ecam irq routing is not there, edk2 doesn't use
+ *         interrupts.
+ *
+ * Note 2: This is for firmware only. OSes should use the more
+ *         complete ACPI tables for hardware discovery.
+ *
+ * ----------------------------------------------------------------------
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2 or later, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "qemu/osdep.h"
+#include "qemu/cutils.h"
+#include "sysemu/device_tree.h"
+#include "hw/char/serial.h"
+#include "hw/i386/fw_cfg.h"
+#include "hw/rtc/mc146818rtc.h"
+#include "hw/sysbus.h"
+#include "hw/virtio/virtio-mmio.h"
+#include "hw/usb/xhci.h"
+
+#include "microvm-dt.h"
+
+static bool debug;
+
+static void dt_add_microvm_irq(MicrovmMachineState *mms,
+                               const char *nodename, uint32_t irq)
+{
+    int index = 0;
+
+    if (irq >= IO_APIC_SECONDARY_IRQBASE) {
+        irq -= IO_APIC_SECONDARY_IRQBASE;
+        index++;
+    }
+
+    qemu_fdt_setprop_cell(mms->fdt, nodename, "interrupt-parent",
+                          mms->ioapic_phandle[index]);
+    qemu_fdt_setprop_cells(mms->fdt, nodename, "interrupts", irq, 0);
+}
+
+static void dt_add_virtio(MicrovmMachineState *mms, VirtIOMMIOProxy *mmio)
+{
+    SysBusDevice *dev = SYS_BUS_DEVICE(mmio);
+    VirtioBusState *mmio_virtio_bus = &mmio->bus;
+    BusState *mmio_bus = &mmio_virtio_bus->parent_obj;
+    char *nodename;
+
+    if (QTAILQ_EMPTY(&mmio_bus->children)) {
+        return;
+    }
+
+    hwaddr base = dev->mmio[0].addr;
+    hwaddr size = 512;
+    unsigned index = (base - VIRTIO_MMIO_BASE) / size;
+    uint32_t irq = mms->virtio_irq_base + index;
+
+    nodename = g_strdup_printf("/virtio_mmio@%" PRIx64, base);
+    qemu_fdt_add_subnode(mms->fdt, nodename);
+    qemu_fdt_setprop_string(mms->fdt, nodename, "compatible", "virtio,mmio");
+    qemu_fdt_setprop_sized_cells(mms->fdt, nodename, "reg", 2, base, 2, size);
+    qemu_fdt_setprop(mms->fdt, nodename, "dma-coherent", NULL, 0);
+    dt_add_microvm_irq(mms, nodename, irq);
+    g_free(nodename);
+}
+
+static void dt_add_xhci(MicrovmMachineState *mms)
+{
+    const char compat[] = "generic-xhci";
+    uint32_t irq = MICROVM_XHCI_IRQ;
+    hwaddr base = MICROVM_XHCI_BASE;
+    hwaddr size = XHCI_LEN_REGS;
+    char *nodename;
+
+    nodename = g_strdup_printf("/usb@%" PRIx64, base);
+    qemu_fdt_add_subnode(mms->fdt, nodename);
+    qemu_fdt_setprop(mms->fdt, nodename, "compatible", compat, sizeof(compat));
+    qemu_fdt_setprop_sized_cells(mms->fdt, nodename, "reg", 2, base, 2, size);
+    qemu_fdt_setprop(mms->fdt, nodename, "dma-coherent", NULL, 0);
+    dt_add_microvm_irq(mms, nodename, irq);
+    g_free(nodename);
+}
+
+static void dt_add_pcie(MicrovmMachineState *mms)
+{
+    hwaddr base = PCIE_MMIO_BASE;
+    int nr_pcie_buses;
+    char *nodename;
+
+    nodename = g_strdup_printf("/pcie@%" PRIx64, base);
+    qemu_fdt_add_subnode(mms->fdt, nodename);
+    qemu_fdt_setprop_string(mms->fdt, nodename,
+                            "compatible", "pci-host-ecam-generic");
+    qemu_fdt_setprop_string(mms->fdt, nodename, "device_type", "pci");
+    qemu_fdt_setprop_cell(mms->fdt, nodename, "#address-cells", 3);
+    qemu_fdt_setprop_cell(mms->fdt, nodename, "#size-cells", 2);
+    qemu_fdt_setprop_cell(mms->fdt, nodename, "linux,pci-domain", 0);
+    qemu_fdt_setprop(mms->fdt, nodename, "dma-coherent", NULL, 0);
+
+    qemu_fdt_setprop_sized_cells(mms->fdt, nodename, "reg",
+                                 2, PCIE_ECAM_BASE, 2, PCIE_ECAM_SIZE);
+    if (mms->gpex.mmio64.size) {
+        qemu_fdt_setprop_sized_cells(mms->fdt, nodename, "ranges",
+
+                                     1, FDT_PCI_RANGE_MMIO,
+                                     2, mms->gpex.mmio32.base,
+                                     2, mms->gpex.mmio32.base,
+                                     2, mms->gpex.mmio32.size,
+
+                                     1, FDT_PCI_RANGE_MMIO_64BIT,
+                                     2, mms->gpex.mmio64.base,
+                                     2, mms->gpex.mmio64.base,
+                                     2, mms->gpex.mmio64.size);
+    } else {
+        qemu_fdt_setprop_sized_cells(mms->fdt, nodename, "ranges",
+
+                                     1, FDT_PCI_RANGE_MMIO,
+                                     2, mms->gpex.mmio32.base,
+                                     2, mms->gpex.mmio32.base,
+                                     2, mms->gpex.mmio32.size);
+    }
+
+    nr_pcie_buses = PCIE_ECAM_SIZE / PCIE_MMCFG_SIZE_MIN;
+    qemu_fdt_setprop_cells(mms->fdt, nodename, "bus-range", 0,
+                           nr_pcie_buses - 1);
+}
+
+static void dt_add_ioapic(MicrovmMachineState *mms, SysBusDevice *dev)
+{
+    hwaddr base = dev->mmio[0].addr;
+    char *nodename;
+    uint32_t ph;
+    int index;
+
+    switch (base) {
+    case IO_APIC_DEFAULT_ADDRESS:
+        index = 0;
+        break;
+    case IO_APIC_SECONDARY_ADDRESS:
+        index = 1;
+        break;
+    default:
+        fprintf(stderr, "unknown ioapic @ %" PRIx64 "\n", base);
+        return;
+    }
+
+    nodename = g_strdup_printf("/ioapic%d@%" PRIx64, index + 1, base);
+    qemu_fdt_add_subnode(mms->fdt, nodename);
+    qemu_fdt_setprop_string(mms->fdt, nodename,
+                            "compatible", "intel,ce4100-ioapic");
+    qemu_fdt_setprop(mms->fdt, nodename, "interrupt-controller", NULL, 0);
+    qemu_fdt_setprop_cell(mms->fdt, nodename, "#interrupt-cells", 0x2);
+    qemu_fdt_setprop_cell(mms->fdt, nodename, "#address-cells", 0x2);
+    qemu_fdt_setprop_sized_cells(mms->fdt, nodename, "reg",
+                                 2, base, 2, 0x1000);
+
+    ph = qemu_fdt_alloc_phandle(mms->fdt);
+    qemu_fdt_setprop_cell(mms->fdt, nodename, "phandle", ph);
+    qemu_fdt_setprop_cell(mms->fdt, nodename, "linux,phandle", ph);
+    mms->ioapic_phandle[index] = ph;
+
+    g_free(nodename);
+}
+
+static void dt_add_isa_serial(MicrovmMachineState *mms, ISADevice *dev)
+{
+    const char compat[] = "ns16550";
+    uint32_t irq = object_property_get_int(OBJECT(dev), "irq", NULL);
+    hwaddr base = object_property_get_int(OBJECT(dev), "iobase", NULL);
+    hwaddr size = 8;
+    char *nodename;
+
+    nodename = g_strdup_printf("/serial@%" PRIx64, base);
+    qemu_fdt_add_subnode(mms->fdt, nodename);
+    qemu_fdt_setprop(mms->fdt, nodename, "compatible", compat, sizeof(compat));
+    qemu_fdt_setprop_sized_cells(mms->fdt, nodename, "reg", 2, base, 2, size);
+    dt_add_microvm_irq(mms, nodename, irq);
+
+    if (base == 0x3f8 /* com1 */) {
+        qemu_fdt_setprop_string(mms->fdt, "/chosen", "stdout-path", nodename);
+    }
+
+    g_free(nodename);
+}
+
+static void dt_add_isa_rtc(MicrovmMachineState *mms, ISADevice *dev)
+{
+    const char compat[] = "motorola,mc146818";
+    uint32_t irq = RTC_ISA_IRQ;
+    hwaddr base = RTC_ISA_BASE;
+    hwaddr size = 8;
+    char *nodename;
+
+    nodename = g_strdup_printf("/rtc@%" PRIx64, base);
+    qemu_fdt_add_subnode(mms->fdt, nodename);
+    qemu_fdt_setprop(mms->fdt, nodename, "compatible", compat, sizeof(compat));
+    qemu_fdt_setprop_sized_cells(mms->fdt, nodename, "reg", 2, base, 2, size);
+    dt_add_microvm_irq(mms, nodename, irq);
+    g_free(nodename);
+}
+
+static void dt_setup_isa_bus(MicrovmMachineState *mms, DeviceState *bridge)
+{
+    BusState *bus = qdev_get_child_bus(bridge, "isa.0");
+    BusChild *kid;
+    Object *obj;
+
+    QTAILQ_FOREACH(kid, &bus->children, sibling) {
+        DeviceState *dev = kid->child;
+
+        /* serial */
+        obj = object_dynamic_cast(OBJECT(dev), TYPE_ISA_SERIAL);
+        if (obj) {
+            dt_add_isa_serial(mms, ISA_DEVICE(obj));
+            continue;
+        }
+
+        /* rtc */
+        obj = object_dynamic_cast(OBJECT(dev), TYPE_MC146818_RTC);
+        if (obj) {
+            dt_add_isa_rtc(mms, ISA_DEVICE(obj));
+            continue;
+        }
+
+        if (debug) {
+            fprintf(stderr, "%s: unhandled: %s\n", __func__,
+                    object_get_typename(OBJECT(dev)));
+        }
+    }
+}
+
+static void dt_setup_sys_bus(MicrovmMachineState *mms)
+{
+    BusState *bus;
+    BusChild *kid;
+    Object *obj;
+
+    /* sysbus devices */
+    bus = sysbus_get_default();
+    QTAILQ_FOREACH(kid, &bus->children, sibling) {
+        DeviceState *dev = kid->child;
+
+        /* ioapic */
+        obj = object_dynamic_cast(OBJECT(dev), TYPE_IOAPIC);
+        if (obj) {
+            dt_add_ioapic(mms, SYS_BUS_DEVICE(obj));
+            continue;
+        }
+    }
+
+    QTAILQ_FOREACH(kid, &bus->children, sibling) {
+        DeviceState *dev = kid->child;
+
+        /* virtio */
+        obj = object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MMIO);
+        if (obj) {
+            dt_add_virtio(mms, VIRTIO_MMIO(obj));
+            continue;
+        }
+
+        /* xhci */
+        obj = object_dynamic_cast(OBJECT(dev), TYPE_XHCI_SYSBUS);
+        if (obj) {
+            dt_add_xhci(mms);
+            continue;
+        }
+
+        /* pcie */
+        obj = object_dynamic_cast(OBJECT(dev), TYPE_GPEX_HOST);
+        if (obj) {
+            dt_add_pcie(mms);
+            continue;
+        }
+
+        /* isa */
+        obj = object_dynamic_cast(OBJECT(dev), "isabus-bridge");
+        if (obj) {
+            dt_setup_isa_bus(mms, DEVICE(obj));
+            continue;
+        }
+
+        if (debug) {
+            obj = object_dynamic_cast(OBJECT(dev), TYPE_IOAPIC);
+            if (obj) {
+                /* ioapic already added in first pass */
+                continue;
+            }
+            fprintf(stderr, "%s: unhandled: %s\n", __func__,
+                    object_get_typename(OBJECT(dev)));
+        }
+    }
+}
+
+void dt_setup_microvm(MicrovmMachineState *mms)
+{
+    X86MachineState *x86ms = X86_MACHINE(mms);
+    int size = 0;
+
+    mms->fdt = create_device_tree(&size);
+
+    /* root node */
+    qemu_fdt_setprop_string(mms->fdt, "/", "compatible", "linux,microvm");
+    qemu_fdt_setprop_cell(mms->fdt, "/", "#address-cells", 0x2);
+    qemu_fdt_setprop_cell(mms->fdt, "/", "#size-cells", 0x2);
+
+    qemu_fdt_add_subnode(mms->fdt, "/chosen");
+    dt_setup_sys_bus(mms);
+
+    /* add to fw_cfg */
+    fprintf(stderr, "%s: add etc/fdt to fw_cfg\n", __func__);
+    fw_cfg_add_file(x86ms->fw_cfg, "etc/fdt", mms->fdt, size);
+
+    if (debug) {
+        fprintf(stderr, "%s: writing microvm.fdt\n", __func__);
+        g_file_set_contents("microvm.fdt", mms->fdt, size, NULL);
+        int ret = system("dtc -I dtb -O dts microvm.fdt");
+        if (ret != 0) {
+            fprintf(stderr, "%s: oops, dtc not installed?\n", __func__);
+        }
+    }
+}
diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index f257ec5a0bc1..8d6ebea3414d 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -28,6 +28,7 @@
 #include "sysemu/reset.h"
 #include "sysemu/runstate.h"
 #include "acpi-microvm.h"
+#include "microvm-dt.h"
 
 #include "hw/loader.h"
 #include "hw/irq.h"
@@ -626,6 +627,7 @@ static void microvm_machine_done(Notifier *notifier, void *data)
                                             machine_done);
 
     acpi_setup_microvm(mms);
+    dt_setup_microvm(mms);
 }
 
 static void microvm_powerdown_req(Notifier *notifier, void *data)
diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
index 5c378e35f91f..6c1301e91287 100644
--- a/.gitlab-ci.d/buildtest.yml
+++ b/.gitlab-ci.d/buildtest.yml
@@ -575,7 +575,6 @@ build-without-default-features:
     CONFIGURE_ARGS:
       --without-default-features
       --disable-capstone
-      --disable-fdt
       --disable-pie
       --disable-qom-cast-debug
       --disable-slirp
diff --git a/configs/targets/i386-softmmu.mak b/configs/targets/i386-softmmu.mak
index 5babf71895db..6b3c99fc86c5 100644
--- a/configs/targets/i386-softmmu.mak
+++ b/configs/targets/i386-softmmu.mak
@@ -1,3 +1,4 @@
 TARGET_ARCH=i386
 TARGET_SUPPORTS_MTTCG=y
+TARGET_NEED_FDT=y
 TARGET_XML_FILES= gdb-xml/i386-32bit.xml
diff --git a/configs/targets/x86_64-softmmu.mak b/configs/targets/x86_64-softmmu.mak
index 75e42bc84047..197817c94346 100644
--- a/configs/targets/x86_64-softmmu.mak
+++ b/configs/targets/x86_64-softmmu.mak
@@ -1,4 +1,5 @@
 TARGET_ARCH=x86_64
 TARGET_BASE_ARCH=i386
 TARGET_SUPPORTS_MTTCG=y
+TARGET_NEED_FDT=y
 TARGET_XML_FILES= gdb-xml/i386-64bit.xml
diff --git a/hw/i386/meson.build b/hw/i386/meson.build
index c502965219d6..213e2e82b3d7 100644
--- a/hw/i386/meson.build
+++ b/hw/i386/meson.build
@@ -11,7 +11,7 @@ i386_ss.add(when: 'CONFIG_X86_IOMMU', if_true: files('x86-iommu.c'),
                                       if_false: files('x86-iommu-stub.c'))
 i386_ss.add(when: 'CONFIG_AMD_IOMMU', if_true: files('amd_iommu.c'))
 i386_ss.add(when: 'CONFIG_I440FX', if_true: files('pc_piix.c'))
-i386_ss.add(when: 'CONFIG_MICROVM', if_true: files('microvm.c', 'acpi-microvm.c'))
+i386_ss.add(when: 'CONFIG_MICROVM', if_true: files('microvm.c', 'acpi-microvm.c', 'microvm-dt.c'))
 i386_ss.add(when: 'CONFIG_Q35', if_true: files('pc_q35.c'))
 i386_ss.add(when: 'CONFIG_VMMOUSE', if_true: files('vmmouse.c'))
 i386_ss.add(when: 'CONFIG_VMPORT', if_true: files('vmport.c'))
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 04/10] ui/gtk: Update the refresh rate for gl-area too
  2021-11-02 16:26 [PULL 00/10] Misc 20211102 patches Gerd Hoffmann
                   ` (2 preceding siblings ...)
  2021-11-02 16:26 ` [PULL 03/10] microvm: add device tree support Gerd Hoffmann
@ 2021-11-02 16:26 ` Gerd Hoffmann
  2021-11-02 16:26 ` [PULL 05/10] ui/gtk: skip any extra draw of same guest scanout blob res Gerd Hoffmann
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2021-11-02 16:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: Thomas Huth, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	libvir-list, Richard Henderson, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Willian Rampazzo, Gerd Hoffmann,
	Paolo Bonzini, Alex Bennée, Nikola Pavlica

From: Nikola Pavlica <pavlica.nikola@gmail.com>

This is a bugfix that stretches all the way back to January 2020,
where I initially introduced this problem and potential solutions.

A quick recap of the issue: QEMU did not sync up with the monitors
refresh rate causing the VM to render frames that were NOT displayed
to the user. That "fix" allowed QEMU to obtain the screen refreshrate
information from the system using GDK API's and was for GTK only.

Well, I'm back with the same issue again. But this time on Wayland.

And I did NOT realize there was YET another screen refresh rate
function, this time for Wayland specifically. Thankfully the fix was
simple and without much hassle.

Thanks,
Nikola

PS: It seems that my patch has gone missing from the mailing list,
hence I'm sending it again. Sorry for any inconveniences.

Signed-off-by: Nikola Pavlica <pavlica.nikola@gmail.com>
Message-Id: <20211024143110.704296-1-pavlica.nikola@gmail.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/gtk-gl-area.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/ui/gtk-gl-area.c b/ui/gtk-gl-area.c
index b23523748e7f..afcb29f65823 100644
--- a/ui/gtk-gl-area.c
+++ b/ui/gtk-gl-area.c
@@ -112,6 +112,9 @@ void gd_gl_area_refresh(DisplayChangeListener *dcl)
 {
     VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl);
 
+    vc->gfx.dcl.update_interval = gd_monitor_update_interval(
+            vc->window ? vc->window : vc->gfx.drawing_area);
+
     if (!vc->gfx.gls) {
         if (!gtk_widget_get_realized(vc->gfx.drawing_area)) {
             return;
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 05/10] ui/gtk: skip any extra draw of same guest scanout blob res
  2021-11-02 16:26 [PULL 00/10] Misc 20211102 patches Gerd Hoffmann
                   ` (3 preceding siblings ...)
  2021-11-02 16:26 ` [PULL 04/10] ui/gtk: Update the refresh rate for gl-area too Gerd Hoffmann
@ 2021-11-02 16:26 ` Gerd Hoffmann
  2021-11-02 16:26 ` [PULL 06/10] ui/console: replace QEMUFIFO with Fifo8 Gerd Hoffmann
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2021-11-02 16:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: Thomas Huth, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	libvir-list, Richard Henderson, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Vivek Kasireddy, Willian Rampazzo,
	Gerd Hoffmann, Paolo Bonzini, Alex Bennée, Dongwon Kim

From: Dongwon Kim <dongwon.kim@intel.com>

Any extra draw call for the same blob resource representing guest scanout
before the previous drawing is not finished can break synchronous draw
sequence. To prevent this, drawing is now done only once for each draw
submission (when draw_submitted == true).

v2:
 - removed mutex
 - updated commit msg

Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Vivek Kasireddy <vivek.kasireddy@intel.com>
Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
Message-Id: <20210924225105.24930-1-dongwon.kim@intel.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/console.h            |  1 +
 hw/display/virtio-gpu-udmabuf.c |  2 +-
 ui/gtk-egl.c                    | 40 ++++++++++++++++++---------
 ui/gtk-gl-area.c                | 49 ++++++++++++++++++++-------------
 4 files changed, 59 insertions(+), 33 deletions(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index 244664d727a4..b6bedc5f4152 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -171,6 +171,7 @@ typedef struct QemuDmaBuf {
     void      *sync;
     int       fence_fd;
     bool      allow_fences;
+    bool      draw_submitted;
 } QemuDmaBuf;
 
 typedef struct DisplayState DisplayState;
diff --git a/hw/display/virtio-gpu-udmabuf.c b/hw/display/virtio-gpu-udmabuf.c
index c6f7f587847f..60ea7f8f4972 100644
--- a/hw/display/virtio-gpu-udmabuf.c
+++ b/hw/display/virtio-gpu-udmabuf.c
@@ -186,7 +186,7 @@ static VGPUDMABuf
     dmabuf->buf.fourcc = qemu_pixman_to_drm_format(fb->format);
     dmabuf->buf.fd = res->dmabuf_fd;
     dmabuf->buf.allow_fences = true;
-
+    dmabuf->buf.draw_submitted = false;
     dmabuf->scanout_id = scanout_id;
     QTAILQ_INSERT_HEAD(&g->dmabuf.bufs, dmabuf, next);
 
diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
index 72ce5e1f8f41..e912b200755a 100644
--- a/ui/gtk-egl.c
+++ b/ui/gtk-egl.c
@@ -63,6 +63,9 @@ void gd_egl_init(VirtualConsole *vc)
 void gd_egl_draw(VirtualConsole *vc)
 {
     GdkWindow *window;
+#ifdef CONFIG_GBM
+    QemuDmaBuf *dmabuf = vc->gfx.guest_fb.dmabuf;
+#endif
     int ww, wh;
 
     if (!vc->gfx.gls) {
@@ -74,10 +77,31 @@ void gd_egl_draw(VirtualConsole *vc)
     wh = gdk_window_get_height(window);
 
     if (vc->gfx.scanout_mode) {
+#ifdef CONFIG_GBM
+        if (dmabuf) {
+            if (!dmabuf->draw_submitted) {
+                return;
+            } else {
+                dmabuf->draw_submitted = false;
+            }
+        }
+#endif
         gd_egl_scanout_flush(&vc->gfx.dcl, 0, 0, vc->gfx.w, vc->gfx.h);
 
         vc->gfx.scale_x = (double)ww / vc->gfx.w;
         vc->gfx.scale_y = (double)wh / vc->gfx.h;
+
+        glFlush();
+#ifdef CONFIG_GBM
+        if (dmabuf) {
+            egl_dmabuf_create_fence(dmabuf);
+            if (dmabuf->fence_fd > 0) {
+                qemu_set_fd_handler(dmabuf->fence_fd, gd_hw_gl_flushed, NULL, vc);
+                return;
+            }
+            graphic_hw_gl_block(vc->gfx.dcl.con, false);
+        }
+#endif
     } else {
         if (!vc->gfx.ds) {
             return;
@@ -92,21 +116,10 @@ void gd_egl_draw(VirtualConsole *vc)
 
         vc->gfx.scale_x = (double)ww / surface_width(vc->gfx.ds);
         vc->gfx.scale_y = (double)wh / surface_height(vc->gfx.ds);
-    }
-
-    glFlush();
-#ifdef CONFIG_GBM
-    if (vc->gfx.guest_fb.dmabuf) {
-        QemuDmaBuf *dmabuf = vc->gfx.guest_fb.dmabuf;
 
-        egl_dmabuf_create_fence(dmabuf);
-        if (dmabuf->fence_fd > 0) {
-            qemu_set_fd_handler(dmabuf->fence_fd, gd_hw_gl_flushed, NULL, vc);
-            return;
-        }
-        graphic_hw_gl_block(vc->gfx.dcl.con, false);
+        glFlush();
     }
-#endif
+
     graphic_hw_gl_flushed(vc->gfx.dcl.con);
 }
 
@@ -317,6 +330,7 @@ void gd_egl_flush(DisplayChangeListener *dcl,
 
     if (vc->gfx.guest_fb.dmabuf) {
         graphic_hw_gl_block(vc->gfx.dcl.con, true);
+        vc->gfx.guest_fb.dmabuf->draw_submitted = true;
         gtk_widget_queue_draw_area(area, x, y, w, h);
         return;
     }
diff --git a/ui/gtk-gl-area.c b/ui/gtk-gl-area.c
index afcb29f65823..461da7712f4f 100644
--- a/ui/gtk-gl-area.c
+++ b/ui/gtk-gl-area.c
@@ -38,6 +38,9 @@ static void gtk_gl_area_set_scanout_mode(VirtualConsole *vc, bool scanout)
 
 void gd_gl_area_draw(VirtualConsole *vc)
 {
+#ifdef CONFIG_GBM
+    QemuDmaBuf *dmabuf = vc->gfx.guest_fb.dmabuf;
+#endif
     int ww, wh, y1, y2;
 
     if (!vc->gfx.gls) {
@@ -53,6 +56,16 @@ void gd_gl_area_draw(VirtualConsole *vc)
             return;
         }
 
+#ifdef CONFIG_GBM
+        if (dmabuf) {
+            if (!dmabuf->draw_submitted) {
+                return;
+            } else {
+                dmabuf->draw_submitted = false;
+            }
+        }
+#endif
+
         glBindFramebuffer(GL_READ_FRAMEBUFFER, vc->gfx.guest_fb.framebuffer);
         /* GtkGLArea sets GL_DRAW_FRAMEBUFFER for us */
 
@@ -62,6 +75,22 @@ void gd_gl_area_draw(VirtualConsole *vc)
         glBlitFramebuffer(0, y1, vc->gfx.w, y2,
                           0, 0, ww, wh,
                           GL_COLOR_BUFFER_BIT, GL_NEAREST);
+#ifdef CONFIG_GBM
+        if (dmabuf) {
+            egl_dmabuf_create_sync(dmabuf);
+        }
+#endif
+        glFlush();
+#ifdef CONFIG_GBM
+        if (dmabuf) {
+            egl_dmabuf_create_fence(dmabuf);
+            if (dmabuf->fence_fd > 0) {
+                qemu_set_fd_handler(dmabuf->fence_fd, gd_hw_gl_flushed, NULL, vc);
+                return;
+            }
+            graphic_hw_gl_block(vc->gfx.dcl.con, false);
+        }
+#endif
     } else {
         if (!vc->gfx.ds) {
             return;
@@ -72,25 +101,6 @@ void gd_gl_area_draw(VirtualConsole *vc)
         surface_gl_render_texture(vc->gfx.gls, vc->gfx.ds);
     }
 
-#ifdef CONFIG_GBM
-    if (vc->gfx.guest_fb.dmabuf) {
-        egl_dmabuf_create_sync(vc->gfx.guest_fb.dmabuf);
-    }
-#endif
-
-    glFlush();
-#ifdef CONFIG_GBM
-    if (vc->gfx.guest_fb.dmabuf) {
-        QemuDmaBuf *dmabuf = vc->gfx.guest_fb.dmabuf;
-
-        egl_dmabuf_create_fence(dmabuf);
-        if (dmabuf->fence_fd > 0) {
-            qemu_set_fd_handler(dmabuf->fence_fd, gd_hw_gl_flushed, NULL, vc);
-            return;
-        }
-        graphic_hw_gl_block(vc->gfx.dcl.con, false);
-    }
-#endif
     graphic_hw_gl_flushed(vc->gfx.dcl.con);
 }
 
@@ -237,6 +247,7 @@ void gd_gl_area_scanout_flush(DisplayChangeListener *dcl,
 
     if (vc->gfx.guest_fb.dmabuf) {
         graphic_hw_gl_block(vc->gfx.dcl.con, true);
+        vc->gfx.guest_fb.dmabuf->draw_submitted = true;
     }
     gtk_gl_area_queue_render(GTK_GL_AREA(vc->gfx.drawing_area));
 }
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 06/10] ui/console: replace QEMUFIFO with Fifo8
  2021-11-02 16:26 [PULL 00/10] Misc 20211102 patches Gerd Hoffmann
                   ` (4 preceding siblings ...)
  2021-11-02 16:26 ` [PULL 05/10] ui/gtk: skip any extra draw of same guest scanout blob res Gerd Hoffmann
@ 2021-11-02 16:26 ` Gerd Hoffmann
  2021-11-02 16:26 ` [PULL 07/10] ui/console: replace kbd_timer with chr_accept_input callback Gerd Hoffmann
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2021-11-02 16:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: Thomas Huth, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	libvir-list, Volker Rümelin, Richard Henderson,
	Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Willian Rampazzo, Gerd Hoffmann,
	Marc-André Lureau, Paolo Bonzini, Alex Bennée

From: Volker Rümelin <vr_qemu@t-online.de>

One of the two FIFO implementations QEMUFIFO and Fifo8 is
redundant. Replace QEMUFIFO with Fifo8.

Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20210916192239.18742-1-vr_qemu@t-online.de>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/console.c | 86 ++++++++++++----------------------------------------
 1 file changed, 20 insertions(+), 66 deletions(-)

diff --git a/ui/console.c b/ui/console.c
index eabbbc951c5f..d2433c0636d0 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -27,6 +27,7 @@
 #include "hw/qdev-core.h"
 #include "qapi/error.h"
 #include "qapi/qapi-commands-ui.h"
+#include "qemu/fifo8.h"
 #include "qemu/module.h"
 #include "qemu/option.h"
 #include "qemu/timer.h"
@@ -62,57 +63,6 @@ enum TTYState {
     TTY_STATE_CSI,
 };
 
-typedef struct QEMUFIFO {
-    uint8_t *buf;
-    int buf_size;
-    int count, wptr, rptr;
-} QEMUFIFO;
-
-static int qemu_fifo_write(QEMUFIFO *f, const uint8_t *buf, int len1)
-{
-    int l, len;
-
-    l = f->buf_size - f->count;
-    if (len1 > l)
-        len1 = l;
-    len = len1;
-    while (len > 0) {
-        l = f->buf_size - f->wptr;
-        if (l > len)
-            l = len;
-        memcpy(f->buf + f->wptr, buf, l);
-        f->wptr += l;
-        if (f->wptr >= f->buf_size)
-            f->wptr = 0;
-        buf += l;
-        len -= l;
-    }
-    f->count += len1;
-    return len1;
-}
-
-static int qemu_fifo_read(QEMUFIFO *f, uint8_t *buf, int len1)
-{
-    int l, len;
-
-    if (len1 > f->count)
-        len1 = f->count;
-    len = len1;
-    while (len > 0) {
-        l = f->buf_size - f->rptr;
-        if (l > len)
-            l = len;
-        memcpy(buf, f->buf + f->rptr, l);
-        f->rptr += l;
-        if (f->rptr >= f->buf_size)
-            f->rptr = 0;
-        buf += l;
-        len -= l;
-    }
-    f->count -= len1;
-    return len1;
-}
-
 typedef enum {
     GRAPHIC_CONSOLE,
     TEXT_CONSOLE,
@@ -165,8 +115,7 @@ struct QemuConsole {
 
     Chardev *chr;
     /* fifo for key pressed */
-    QEMUFIFO out_fifo;
-    uint8_t out_fifo_buf[16];
+    Fifo8 out_fifo;
     QEMUTimer *kbd_timer;
     CoQueue dump_queue;
 
@@ -1160,21 +1109,25 @@ static int vc_chr_write(Chardev *chr, const uint8_t *buf, int len)
 static void kbd_send_chars(void *opaque)
 {
     QemuConsole *s = opaque;
-    int len;
-    uint8_t buf[16];
+    uint32_t len, avail;
 
     len = qemu_chr_be_can_write(s->chr);
-    if (len > s->out_fifo.count)
-        len = s->out_fifo.count;
-    if (len > 0) {
-        if (len > sizeof(buf))
-            len = sizeof(buf);
-        qemu_fifo_read(&s->out_fifo, buf, len);
-        qemu_chr_be_write(s->chr, buf, len);
+    avail = fifo8_num_used(&s->out_fifo);
+    if (len > avail) {
+        len = avail;
+    }
+    while (len > 0) {
+        const uint8_t *buf;
+        uint32_t size;
+
+        buf = fifo8_pop_buf(&s->out_fifo, len, &size);
+        qemu_chr_be_write(s->chr, (uint8_t *)buf, size);
+        len -= size;
+        avail -= size;
     }
     /* characters are pending: we send them a bit later (XXX:
        horrible, should change char device API) */
-    if (s->out_fifo.count > 0) {
+    if (avail > 0) {
         timer_mod(s->kbd_timer, qemu_clock_get_ms(QEMU_CLOCK_REALTIME) + 1);
     }
 }
@@ -1185,6 +1138,7 @@ void kbd_put_keysym_console(QemuConsole *s, int keysym)
     uint8_t buf[16], *q;
     CharBackend *be;
     int c;
+    uint32_t num_free;
 
     if (!s || (s->console_type == GRAPHIC_CONSOLE))
         return;
@@ -1228,7 +1182,8 @@ void kbd_put_keysym_console(QemuConsole *s, int keysym)
         }
         be = s->chr->be;
         if (be && be->chr_read) {
-            qemu_fifo_write(&s->out_fifo, buf, q - buf);
+            num_free = fifo8_num_free(&s->out_fifo);
+            fifo8_push_all(&s->out_fifo, buf, MIN(num_free, q - buf));
             kbd_send_chars(s);
         }
         break;
@@ -2233,8 +2188,7 @@ static void text_console_do_init(Chardev *chr, DisplayState *ds)
     int g_width = 80 * FONT_WIDTH;
     int g_height = 24 * FONT_HEIGHT;
 
-    s->out_fifo.buf = s->out_fifo_buf;
-    s->out_fifo.buf_size = sizeof(s->out_fifo_buf);
+    fifo8_create(&s->out_fifo, 16);
     s->kbd_timer = timer_new_ms(QEMU_CLOCK_REALTIME, kbd_send_chars, s);
     s->ds = ds;
 
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 07/10] ui/console: replace kbd_timer with chr_accept_input callback
  2021-11-02 16:26 [PULL 00/10] Misc 20211102 patches Gerd Hoffmann
                   ` (5 preceding siblings ...)
  2021-11-02 16:26 ` [PULL 06/10] ui/console: replace QEMUFIFO with Fifo8 Gerd Hoffmann
@ 2021-11-02 16:26 ` Gerd Hoffmann
  2021-11-02 16:26 ` [PULL 08/10] ui/console: remove chardev frontend connected test Gerd Hoffmann
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2021-11-02 16:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: Thomas Huth, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	libvir-list, Volker Rümelin, Richard Henderson,
	Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Willian Rampazzo, Gerd Hoffmann,
	Marc-André Lureau, Paolo Bonzini, Alex Bennée

From: Volker Rümelin <vr_qemu@t-online.de>

There's a ChardevClass chr_accept_input() callback function that
can replace the write retry timer.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-Id: <20210916192239.18742-2-vr_qemu@t-online.de>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/console.c | 28 +++++++++++++---------------
 1 file changed, 13 insertions(+), 15 deletions(-)

diff --git a/ui/console.c b/ui/console.c
index d2433c0636d0..dda1e6861d6a 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -116,7 +116,6 @@ struct QemuConsole {
     Chardev *chr;
     /* fifo for key pressed */
     Fifo8 out_fifo;
-    QEMUTimer *kbd_timer;
     CoQueue dump_queue;
 
     QTAILQ_ENTRY(QemuConsole) next;
@@ -1106,30 +1105,21 @@ static int vc_chr_write(Chardev *chr, const uint8_t *buf, int len)
     return len;
 }
 
-static void kbd_send_chars(void *opaque)
+static void kbd_send_chars(QemuConsole *s)
 {
-    QemuConsole *s = opaque;
     uint32_t len, avail;
 
     len = qemu_chr_be_can_write(s->chr);
     avail = fifo8_num_used(&s->out_fifo);
-    if (len > avail) {
-        len = avail;
-    }
-    while (len > 0) {
+    while (len > 0 && avail > 0) {
         const uint8_t *buf;
         uint32_t size;
 
-        buf = fifo8_pop_buf(&s->out_fifo, len, &size);
+        buf = fifo8_pop_buf(&s->out_fifo, MIN(len, avail), &size);
         qemu_chr_be_write(s->chr, (uint8_t *)buf, size);
-        len -= size;
+        len = qemu_chr_be_can_write(s->chr);
         avail -= size;
     }
-    /* characters are pending: we send them a bit later (XXX:
-       horrible, should change char device API) */
-    if (avail > 0) {
-        timer_mod(s->kbd_timer, qemu_clock_get_ms(QEMU_CLOCK_REALTIME) + 1);
-    }
 }
 
 /* called when an ascii key is pressed */
@@ -2141,6 +2131,14 @@ int qemu_console_get_height(QemuConsole *con, int fallback)
     return con ? surface_height(con->surface) : fallback;
 }
 
+static void vc_chr_accept_input(Chardev *chr)
+{
+    VCChardev *drv = VC_CHARDEV(chr);
+    QemuConsole *s = drv->console;
+
+    kbd_send_chars(s);
+}
+
 static void vc_chr_set_echo(Chardev *chr, bool echo)
 {
     VCChardev *drv = VC_CHARDEV(chr);
@@ -2189,7 +2187,6 @@ static void text_console_do_init(Chardev *chr, DisplayState *ds)
     int g_height = 24 * FONT_HEIGHT;
 
     fifo8_create(&s->out_fifo, 16);
-    s->kbd_timer = timer_new_ms(QEMU_CLOCK_REALTIME, kbd_send_chars, s);
     s->ds = ds;
 
     s->y_displayed = 0;
@@ -2439,6 +2436,7 @@ static void char_vc_class_init(ObjectClass *oc, void *data)
     cc->parse = qemu_chr_parse_vc;
     cc->open = vc_chr_open;
     cc->chr_write = vc_chr_write;
+    cc->chr_accept_input = vc_chr_accept_input;
     cc->chr_set_echo = vc_chr_set_echo;
 }
 
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 08/10] ui/console: remove chardev frontend connected test
  2021-11-02 16:26 [PULL 00/10] Misc 20211102 patches Gerd Hoffmann
                   ` (6 preceding siblings ...)
  2021-11-02 16:26 ` [PULL 07/10] ui/console: replace kbd_timer with chr_accept_input callback Gerd Hoffmann
@ 2021-11-02 16:26 ` Gerd Hoffmann
  2021-11-02 16:26 ` [PULL 09/10] hw/misc: deprecate the 'sga' device Gerd Hoffmann
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2021-11-02 16:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: Thomas Huth, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	libvir-list, Volker Rümelin, Richard Henderson,
	Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Willian Rampazzo, Gerd Hoffmann,
	Marc-André Lureau, Paolo Bonzini, Alex Bennée

From: Volker Rümelin <vr_qemu@t-online.de>

The test if the chardev frontend is connected in
kbd_put_keysym_console() is redundant, because the call
to qemu_chr_be_can_write() in kbd_send_chars() tests
the connected condition again.

Remove the redundant test whether the chardev frontend
is connected.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-Id: <20210916192239.18742-3-vr_qemu@t-online.de>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/console.c | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/ui/console.c b/ui/console.c
index dda1e6861d6a..29a3e3f0f51c 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -28,10 +28,11 @@
 #include "qapi/error.h"
 #include "qapi/qapi-commands-ui.h"
 #include "qemu/fifo8.h"
+#include "qemu/main-loop.h"
 #include "qemu/module.h"
 #include "qemu/option.h"
 #include "qemu/timer.h"
-#include "chardev/char-fe.h"
+#include "chardev/char.h"
 #include "trace.h"
 #include "exec/memory.h"
 #include "io/channel-file.h"
@@ -1126,7 +1127,6 @@ static void kbd_send_chars(QemuConsole *s)
 void kbd_put_keysym_console(QemuConsole *s, int keysym)
 {
     uint8_t buf[16], *q;
-    CharBackend *be;
     int c;
     uint32_t num_free;
 
@@ -1170,12 +1170,9 @@ void kbd_put_keysym_console(QemuConsole *s, int keysym)
         if (s->echo) {
             vc_chr_write(s->chr, buf, q - buf);
         }
-        be = s->chr->be;
-        if (be && be->chr_read) {
-            num_free = fifo8_num_free(&s->out_fifo);
-            fifo8_push_all(&s->out_fifo, buf, MIN(num_free, q - buf));
-            kbd_send_chars(s);
-        }
+        num_free = fifo8_num_free(&s->out_fifo);
+        fifo8_push_all(&s->out_fifo, buf, MIN(num_free, q - buf));
+        kbd_send_chars(s);
         break;
     }
 }
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 09/10] hw/misc: deprecate the 'sga' device
  2021-11-02 16:26 [PULL 00/10] Misc 20211102 patches Gerd Hoffmann
                   ` (7 preceding siblings ...)
  2021-11-02 16:26 ` [PULL 08/10] ui/console: remove chardev frontend connected test Gerd Hoffmann
@ 2021-11-02 16:26 ` Gerd Hoffmann
  2021-11-02 16:26 ` [PULL 10/10] usb-storage: tag usb_msd_csw as packed struct Gerd Hoffmann
  2021-11-03 12:03 ` [PULL 00/10] Misc 20211102 patches Richard Henderson
  10 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2021-11-02 16:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: Thomas Huth, Daniel P. Berrangé,
	Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin, libvir-list,
	Richard Henderson, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Willian Rampazzo, Gerd Hoffmann,
	Paolo Bonzini, Alex Bennée

From: Daniel P. Berrangé <berrange@redhat.com>

This is obsolete since SeaBIOS 1.11.0 introduced native support for
sending messages to the serial console. The new support can be
activated using -machine graphics=off on x86 targets.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
Message-Id: <20210909123219.862652-1-berrange@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/misc/sga.c             |  2 ++
 docs/about/deprecated.rst | 10 ++++++++++
 2 files changed, 12 insertions(+)

diff --git a/hw/misc/sga.c b/hw/misc/sga.c
index 4dbe6d78f9e5..1d04672b013b 100644
--- a/hw/misc/sga.c
+++ b/hw/misc/sga.c
@@ -30,6 +30,7 @@
 #include "hw/loader.h"
 #include "qemu/module.h"
 #include "qom/object.h"
+#include "qemu/error-report.h"
 
 #define SGABIOS_FILENAME "sgabios.bin"
 
@@ -42,6 +43,7 @@ struct ISASGAState {
 
 static void sga_realizefn(DeviceState *dev, Error **errp)
 {
+    warn_report("-device sga is deprecated, use -machine graphics=off");
     rom_add_vga(SGABIOS_FILENAME);
 }
 
diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst
index be19317470a1..25b7ec8d92d9 100644
--- a/docs/about/deprecated.rst
+++ b/docs/about/deprecated.rst
@@ -313,6 +313,16 @@ full SCSI support.  Use virtio-scsi instead when SCSI passthrough is required.
 Note this also applies to ``-device virtio-blk-pci,scsi=on|off``, which is an
 alias.
 
+``-device sga`` (since 6.2)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The ``sga`` device loads an option ROM for x86 targets which enables
+SeaBIOS to send messages to the serial console. SeaBIOS 1.11.0 onwards
+contains native support for this feature and thus use of the option
+ROM approach is obsolete. The native SeaBIOS support can be activated
+by using ``-machine graphics=off``.
+
+
 Block device options
 ''''''''''''''''''''
 
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 10/10] usb-storage: tag usb_msd_csw as packed struct
  2021-11-02 16:26 [PULL 00/10] Misc 20211102 patches Gerd Hoffmann
                   ` (8 preceding siblings ...)
  2021-11-02 16:26 ` [PULL 09/10] hw/misc: deprecate the 'sga' device Gerd Hoffmann
@ 2021-11-02 16:26 ` Gerd Hoffmann
  2021-11-03 12:03 ` [PULL 00/10] Misc 20211102 patches Richard Henderson
  10 siblings, 0 replies; 13+ messages in thread
From: Gerd Hoffmann @ 2021-11-02 16:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: Thomas Huth, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	libvir-list, Philippe Mathieu-Daudé,
	vintagepc404, Richard Henderson, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Willian Rampazzo, Gerd Hoffmann,
	Paolo Bonzini, Alex Bennée

Without this the struct has the wrong size: sizeof() evaluates
to 16 instead of 13.  In most cases the bug is hidden by the
fact that guests submits a buffer which is exactly 13 bytes
long, so the padding added by the compiler is simply ignored.

But sometimes guests submit a larger buffer and expect a short
transfer, which does not work properly with the wrong struct
size.

Cc: vintagepc404@protonmail.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Fixes: a917d384ac0 ("SCSI TCQ support.")
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20210906045523.1259629-1-kraxel@redhat.com>
---
 include/hw/usb/msd.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/hw/usb/msd.h b/include/hw/usb/msd.h
index 7538c54569bf..54e9f38bda46 100644
--- a/include/hw/usb/msd.h
+++ b/include/hw/usb/msd.h
@@ -17,7 +17,7 @@ enum USBMSDMode {
     USB_MSDM_CSW /* Command Status.  */
 };
 
-struct usb_msd_csw {
+struct QEMU_PACKED usb_msd_csw {
     uint32_t sig;
     uint32_t tag;
     uint32_t residue;
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PULL 00/10] Misc 20211102 patches
  2021-11-02 16:26 [PULL 00/10] Misc 20211102 patches Gerd Hoffmann
                   ` (9 preceding siblings ...)
  2021-11-02 16:26 ` [PULL 10/10] usb-storage: tag usb_msd_csw as packed struct Gerd Hoffmann
@ 2021-11-03 12:03 ` Richard Henderson
  10 siblings, 0 replies; 13+ messages in thread
From: Richard Henderson @ 2021-11-03 12:03 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel
  Cc: Thomas Huth, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	libvir-list, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Willian Rampazzo, Paolo Bonzini,
	Alex Bennée

On 11/2/21 12:26 PM, Gerd Hoffmann wrote:
> The following changes since commit 8cb41fda78c7ebde0dd248c6afe1d336efb0de50:
> 
>    Merge remote-tracking branch 'remotes/philmd/tags/machine-20211101' into staging (2021-11-02 05:53:45 -0400)
> 
> are available in the Git repository at:
> 
>    git://git.kraxel.org/qemu tags/misc-20211102-pull-request
> 
> for you to fetch changes up to 58d7d4c7869cb3addb0714aa7b6bd88f2b6b7edf:
> 
>    usb-storage: tag usb_msd_csw as packed struct (2021-11-02 17:24:18 +0100)
> 
> ----------------------------------------------------------------
> MAINTAINERS: audio updates
> microvm: device tree support
> console: chardev fixes
> misc: deprecate sga
> usb: fix struct usb_msd_csw
> 
> ----------------------------------------------------------------
> 
> Christian Schoenebeck (1):
>    MAINTAINERS: add myself as partial audio reviewer
> 
> Daniel P. Berrangé (1):
>    hw/misc: deprecate the 'sga' device
> 
> Dongwon Kim (1):
>    ui/gtk: skip any extra draw of same guest scanout blob res
> 
> Gerd Hoffmann (2):
>    microvm: add device tree support.
>    usb-storage: tag usb_msd_csw as packed struct
> 
> Nikola Pavlica (1):
>    ui/gtk: Update the refresh rate for gl-area too
> 
> Thomas Huth (1):
>    MAINTAINERS: Add myself as a reviewer for SDL audio
> 
> Volker Rümelin (3):
>    ui/console: replace QEMUFIFO with Fifo8
>    ui/console: replace kbd_timer with chr_accept_input callback
>    ui/console: remove chardev frontend connected test
> 
>   hw/i386/microvm-dt.h               |   8 +
>   include/hw/i386/microvm.h          |   4 +
>   include/hw/usb/msd.h               |   2 +-
>   include/ui/console.h               |   1 +
>   hw/display/virtio-gpu-udmabuf.c    |   2 +-
>   hw/i386/microvm-dt.c               | 341 +++++++++++++++++++++++++++++
>   hw/i386/microvm.c                  |   2 +
>   hw/misc/sga.c                      |   2 +
>   ui/console.c                       | 109 +++------
>   ui/gtk-egl.c                       |  40 ++--
>   ui/gtk-gl-area.c                   |  52 +++--
>   .gitlab-ci.d/buildtest.yml         |   1 -
>   MAINTAINERS                        |   4 +
>   configs/targets/i386-softmmu.mak   |   1 +
>   configs/targets/x86_64-softmmu.mak |   1 +
>   docs/about/deprecated.rst          |  10 +
>   hw/i386/meson.build                |   2 +-
>   17 files changed, 466 insertions(+), 116 deletions(-)
>   create mode 100644 hw/i386/microvm-dt.h
>   create mode 100644 hw/i386/microvm-dt.c

Applied, thanks.

r~



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PULL 03/10] microvm: add device tree support.
  2021-11-02 16:26 ` [PULL 03/10] microvm: add device tree support Gerd Hoffmann
@ 2021-11-05 16:01   ` Peter Maydell
  0 siblings, 0 replies; 13+ messages in thread
From: Peter Maydell @ 2021-11-05 16:01 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Thomas Huth, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	libvir-list, Richard Henderson, qemu-devel,
	Wainer dos Santos Moschetta, Philippe Mathieu-Daudé,
	Willian Rampazzo, Paolo Bonzini, Alex Bennée

On Tue, 2 Nov 2021 at 16:48, Gerd Hoffmann <kraxel@redhat.com> wrote:
>
> Allows edk2 detect virtio-mmio devices and pcie ecam.
> See comment in hw/i386/microvm-dt.c for more details.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> Reviewed-by: Sergio Lopez <slp@redhat.com>
> Message-Id: <20211014193617.2475578-1-kraxel@redhat.com>


Hi; Coverity points out a couple of issues in this code.

> +static void dt_add_pcie(MicrovmMachineState *mms)
> +{
> +    hwaddr base = PCIE_MMIO_BASE;
> +    int nr_pcie_buses;
> +    char *nodename;
> +
> +    nodename = g_strdup_printf("/pcie@%" PRIx64, base);

Here we allocate 'nodename'...

> +    qemu_fdt_add_subnode(mms->fdt, nodename);
> +    qemu_fdt_setprop_string(mms->fdt, nodename,
> +                            "compatible", "pci-host-ecam-generic");
> +    qemu_fdt_setprop_string(mms->fdt, nodename, "device_type", "pci");
> +    qemu_fdt_setprop_cell(mms->fdt, nodename, "#address-cells", 3);
> +    qemu_fdt_setprop_cell(mms->fdt, nodename, "#size-cells", 2);
> +    qemu_fdt_setprop_cell(mms->fdt, nodename, "linux,pci-domain", 0);
> +    qemu_fdt_setprop(mms->fdt, nodename, "dma-coherent", NULL, 0);
> +
> +    qemu_fdt_setprop_sized_cells(mms->fdt, nodename, "reg",
> +                                 2, PCIE_ECAM_BASE, 2, PCIE_ECAM_SIZE);
> +    if (mms->gpex.mmio64.size) {
> +        qemu_fdt_setprop_sized_cells(mms->fdt, nodename, "ranges",
> +
> +                                     1, FDT_PCI_RANGE_MMIO,
> +                                     2, mms->gpex.mmio32.base,
> +                                     2, mms->gpex.mmio32.base,
> +                                     2, mms->gpex.mmio32.size,
> +
> +                                     1, FDT_PCI_RANGE_MMIO_64BIT,
> +                                     2, mms->gpex.mmio64.base,
> +                                     2, mms->gpex.mmio64.base,
> +                                     2, mms->gpex.mmio64.size);
> +    } else {
> +        qemu_fdt_setprop_sized_cells(mms->fdt, nodename, "ranges",
> +
> +                                     1, FDT_PCI_RANGE_MMIO,
> +                                     2, mms->gpex.mmio32.base,
> +                                     2, mms->gpex.mmio32.base,
> +                                     2, mms->gpex.mmio32.size);
> +    }
> +
> +    nr_pcie_buses = PCIE_ECAM_SIZE / PCIE_MMCFG_SIZE_MIN;
> +    qemu_fdt_setprop_cells(mms->fdt, nodename, "bus-range", 0,
> +                           nr_pcie_buses - 1);

...but unlike other functions in this file we forget to free it.
(CID 1465240)

Might be worth considering use of g_autofree.

> +}

> +void dt_setup_microvm(MicrovmMachineState *mms)
> +{
> +    X86MachineState *x86ms = X86_MACHINE(mms);
> +    int size = 0;
> +
> +    mms->fdt = create_device_tree(&size);
> +
> +    /* root node */
> +    qemu_fdt_setprop_string(mms->fdt, "/", "compatible", "linux,microvm");
> +    qemu_fdt_setprop_cell(mms->fdt, "/", "#address-cells", 0x2);
> +    qemu_fdt_setprop_cell(mms->fdt, "/", "#size-cells", 0x2);
> +
> +    qemu_fdt_add_subnode(mms->fdt, "/chosen");
> +    dt_setup_sys_bus(mms);
> +
> +    /* add to fw_cfg */
> +    fprintf(stderr, "%s: add etc/fdt to fw_cfg\n", __func__);
> +    fw_cfg_add_file(x86ms->fw_cfg, "etc/fdt", mms->fdt, size);
> +
> +    if (debug) {
> +        fprintf(stderr, "%s: writing microvm.fdt\n", __func__);
> +        g_file_set_contents("microvm.fdt", mms->fdt, size, NULL);

g_file_set_contents() returns a value to indicate success or
failure; we should check it.
(CID 1465239)

> +        int ret = system("dtc -I dtb -O dts microvm.fdt");
> +        if (ret != 0) {
> +            fprintf(stderr, "%s: oops, dtc not installed?\n", __func__);
> +        }
> +    }
> +}

thanks
-- PMM


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2021-11-05 16:10 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-02 16:26 [PULL 00/10] Misc 20211102 patches Gerd Hoffmann
2021-11-02 16:26 ` [PULL 01/10] MAINTAINERS: Add myself as a reviewer for SDL audio Gerd Hoffmann
2021-11-02 16:26 ` [PULL 02/10] MAINTAINERS: add myself as partial audio reviewer Gerd Hoffmann
2021-11-02 16:26 ` [PULL 03/10] microvm: add device tree support Gerd Hoffmann
2021-11-05 16:01   ` Peter Maydell
2021-11-02 16:26 ` [PULL 04/10] ui/gtk: Update the refresh rate for gl-area too Gerd Hoffmann
2021-11-02 16:26 ` [PULL 05/10] ui/gtk: skip any extra draw of same guest scanout blob res Gerd Hoffmann
2021-11-02 16:26 ` [PULL 06/10] ui/console: replace QEMUFIFO with Fifo8 Gerd Hoffmann
2021-11-02 16:26 ` [PULL 07/10] ui/console: replace kbd_timer with chr_accept_input callback Gerd Hoffmann
2021-11-02 16:26 ` [PULL 08/10] ui/console: remove chardev frontend connected test Gerd Hoffmann
2021-11-02 16:26 ` [PULL 09/10] hw/misc: deprecate the 'sga' device Gerd Hoffmann
2021-11-02 16:26 ` [PULL 10/10] usb-storage: tag usb_msd_csw as packed struct Gerd Hoffmann
2021-11-03 12:03 ` [PULL 00/10] Misc 20211102 patches Richard Henderson

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.