Introduce the microvm machine type
v2 cover Introduce the microvm machine type
Microvm is a machine type inspired by both NEMU and Firecracker, and constructed after the machine model implemented by the latter.
It's main purpose is providing users a KVM-only machine type with fast boot times, minimal attack surface (measured as the number of IO ports and MMIO regions exposed to the Guest) and small footprint (specially when combined with the ongoing QEMU modularization effort).
Normally, other than the device support provided by KVM itself, microvm only supports virtio-mmio devices. Microvm also includes a legacy mode, which adds an ISA bus with a 16550A serial port, useful for being able to see the early boot kernel messages.
Microvm only supports booting PVH-enabled Linux ELF images. Booting other PVH-enabled kernels may be possible, but due to the lack of ACPI and firmware, we're relying on the command line for specifying the location of the virtio-mmio transports. If there's an interest on using this machine type with other kernels, we'll try to find some kind of middle ground solution.
This is the list of the exposed IO ports and MMIO regions when running in non-legacy mode:
address-space: memory
00000000d0000000-00000000d00001ff (prio 0, i/o): virtio-mmio
00000000d0000200-00000000d00003ff (prio 0, i/o): virtio-mmio
00000000d0000400-00000000d00005ff (prio 0, i/o): virtio-mmio
00000000d0000600-00000000d00007ff (prio 0, i/o): virtio-mmio
00000000d0000800-00000000d00009ff (prio 0, i/o): virtio-mmio
00000000d0000a00-00000000d0000bff (prio 0, i/o): virtio-mmio
00000000d0000c00-00000000d0000dff (prio 0, i/o): virtio-mmio
00000000d0000e00-00000000d0000fff (prio 0, i/o): virtio-mmio
00000000fee00000-00000000feefffff (prio 4096, i/o): kvm-apic-msiaddress-space: I/O
0000000000000000-000000000000ffff (prio 0, i/o): io
0000000000000020-0000000000000021 (prio 0, i/o): kvm-pic
0000000000000040-0000000000000043 (prio 0, i/o): kvm-pit
000000000000007e-000000000000007f (prio 0, i/o): kvmvapic
00000000000000a0-00000000000000a1 (prio 0, i/o): kvm-pic
00000000000004d0-00000000000004d0 (prio 0, i/o): kvm-elcr
00000000000004d1-00000000000004d1 (prio 0, i/o): kvm-elcrA QEMU instance with the microvm machine type can be invoked this way:
- Normal mode:
qemu-system-x86_64 -M microvm -m 512m -smp 2 \
-kernel vmlinux -append "console=hvc0 root=/dev/vda" \
-nodefaults -no-user-config \
-chardev pty,id=virtiocon0,server \
-device virtio-serial-device \
-device virtconsole,chardev=virtiocon0 \
-drive id=test,file=test.img,format=raw,if=none \
-device virtio-blk-device,drive=test \
-netdev tap,id=tap0,script=no,downscript=no \
-device virtio-net-device,netdev=tap0
- Legacy mode:
qemu-system-x86_64 -M microvm,legacy -m 512m -smp 2 \
-kernel vmlinux -append "console=ttyS0 root=/dev/vda" \
-nodefaults -no-user-config \
-drive id=test,file=test.img,format=raw,if=none \
-device virtio-blk-device,drive=test \
-netdev tap,id=tap0,script=no,downscript=no \
-device virtio-net-device,netdev=tap0 \
-serial stdio
Changelog:
v2:
- Drop "[PATCH 1/4] hw/i386: Factorize CPU routine".
- Simplify machine definition (thanks Eduardo).
- Remove use of unneeded NUMA-related callbacks (thanks Eduardo).
- Add a patch to factorize PVH-related functions.
- Replace use of Linux's Zero Page with PVH (thanks Maran and Paolo).
Sergio Lopez (4):
hw/virtio: Factorize virtio-mmio headers
hw/i386: Add an Intel MPTable generator
hw/i386: Factorize PVH related functions
hw/i386: Introduce the microvm machine type
default-configs/i386-softmmu.mak | 1 + hw/i386/Kconfig | 4 + hw/i386/Makefile.objs | 2 + hw/i386/microvm.c | 500 ++++++++++++++++++++ hw/i386/mptable.c | 156 ++++++ hw/i386/pc.c | 120 +---- hw/i386/pvh.c | 113 +++++ hw/i386/pvh.h | 10 + hw/virtio/virtio-mmio.c | 35 +- hw/virtio/virtio-mmio.h | 60 +++ include/hw/i386/microvm.h | 77 +++ include/hw/i386/mptable.h | 36 ++ include/standard-headers/linux/mpspec_def.h | 182 +++++++ 13 files changed, 1154 insertions(+), 142 deletions(-) create mode 100644 hw/i386/microvm.c create mode 100644 hw/i386/mptable.c create mode 100644 hw/i386/pvh.c create mode 100644 hw/i386/pvh.h create mode 100644 hw/virtio/virtio-mmio.h create mode 100644 include/hw/i386/microvm.h create mode 100644 include/hw/i386/mptable.h create mode 100644 include/standard-headers/linux/mpspec_def.h
--
2.21.0
PATCH v2 1/4 hw/virtio: Factorize virtio-mmio headers
Put QOM and main struct definition in a separate header file, so it can be accesed from other components.
This is needed for the microvm machine type implementation.
--- hw/virtio/virtio-mmio.c | 35 +----------------------- hw/virtio/virtio-mmio.h | 60 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 34 deletions(-) create mode 100644 hw/virtio/virtio-mmio.h
hw/virtio/virtio-mmio.c +1 -34
@@ -26,44 +26,11 @@#include "qemu/host-utils.h" #include "qemu/module.h" #include "sysemu/kvm.h" -#include "hw/virtio/virtio-bus.h" +#include "virtio-mmio.h" #include "qemu/error-report.h" #include "qemu/log.h" #include "trace.h" -/* QOM macros */ -/* virtio-mmio-bus */ -#define TYPE_VIRTIO_MMIO_BUS "virtio-mmio-bus" -#define VIRTIO_MMIO_BUS (obj) \ - OBJECT_CHECK(VirtioBusState, (obj), TYPE_VIRTIO_MMIO_BUS) -#define VIRTIO_MMIO_BUS_GET_CLASS (obj) \ - OBJECT_GET_CLASS(VirtioBusClass, (obj), TYPE_VIRTIO_MMIO_BUS) -#define VIRTIO_MMIO_BUS_CLASS (klass) \ - OBJECT_CLASS_CHECK(VirtioBusClass, (klass), TYPE_VIRTIO_MMIO_BUS) - -/* virtio-mmio */ -#define TYPE_VIRTIO_MMIO "virtio-mmio" -#define VIRTIO_MMIO (obj) \ - OBJECT_CHECK(VirtIOMMIOProxy, (obj), TYPE_VIRTIO_MMIO) - -#define VIRT_MAGIC 0x74726976/* 'virt' */ -#define VIRT_VERSION 1 -#define VIRT_VENDOR 0x554D4551/* 'QEMU' */ - -typedef struct { -/* Generic */ -SysBusDevice parent_obj; -MemoryRegion iomem; -qemu_irq irq; -/* Guest accessible state needing migration and reset */ -uint32_t host_features_sel; -uint32_t guest_features_sel; -uint32_t guest_page_shift; -/* virtio-bus */ -VirtioBusState bus; -bool format_transport_address; -}VirtIOMMIOProxy ; -static bool virtio_mmio_ioeventfd_enabled (DeviceState *d) {return kvm_eventfds_enabled ();
hw/virtio/virtio-mmio.h new file +60 -0
60 lines not on this page · raw message
Signature · 1 line
2.21.0
PATCH v2 2/4 hw/i386: Add an Intel MPTable generator
In reply to Sergio LopezAdd a helper function (mptable_generate) for generating an Intel MPTable according to version 1.4 of the specification.
This is needed for the microvm machine type implementation.
--- hw/i386/mptable.c | 156 +++++++++++++++++ include/hw/i386/mptable.h | 36 ++++ include/standard-headers/linux/mpspec_def.h | 182 ++++++++++++++++++++ 3 files changed, 374 insertions(+) create mode 100644 hw/i386/mptable.c create mode 100644 include/hw/i386/mptable.h create mode 100644 include/standard-headers/linux/mpspec_def.h
hw/i386/mptable.c new file +156 -0
@@ -0,0 +1,156 @@ +/* +* Intel MPTable generator +* +* Copyright (C) 2019 Red Hat, Inc. +* +* Authors: +* Sergio Lopez <[email protected]> +* +* This work is licensed under the terms of the GNU GPL, version 2 or later. +* See the COPYING file in the top-level directory. +*/ + +#include "qemu/osdep.h" +#include "hw/i386/mptable.h" +#include "standard-headers/linux/mpspec_def.h" + +static int mptable_checksum (char *buf,int size) +{ +int i; +int checksum =0 ; + +for (i =0 ; i < size; i++) { + checksum += buf[i]; + } + +return checksum; +} + +/* +* Generate an MPTable for "ncpus". "apic_id" must be the next available +* APIC ID (last CPU apic_id + 1). "table_base" is the physical location +* in the Guest where the caller intends to write the table, needed to +* fill the "physptr" field from the "mpf_intel" structure. +* +* On success, return a newly allocated buffer, that must be freed by the +* caller using "g_free" when it's no longer needed, and update +* "mptable_size" with the size of the buffer. +*/ +char *mptable_generate (int ncpus,int table_base,int *mptable_size) +{ +struct mpf_intel *mpf; +struct mpc_table *table; +struct mpc_cpu *cpu; +struct mpc_bus *bus; +struct mpc_ioapic *ioapic; +struct mpc_intsrc *intsrc; +struct mpc_lintsrc *lintsrc; +const char mpc_signature[] =MPC_SIGNATURE ; +const char smp_magic_ident[] ="_MP_" ; +char *mptable; +int checksum =0 ; +int offset =0 ; +int ssize; +int i; + + ssize =sizeof (struct mpf_intel ); + mptable =g_malloc0 (ssize); + + mpf = (struct mpf_intel *) mptable; +memcpy (mpf->signature, smp_magic_ident,sizeof (smp_magic_ident) -1 ); + mpf->length =1 ; + mpf->specification =4 ; + mpf->physptr = table_base + ssize; + mpf->checksum -=mptable_checksum ((char *) mpf, ssize); + offset = ssize +sizeof (struct mpc_table ); + + ssize =sizeof (struct mpc_cpu ); +for (i =0 ; i < ncpus; i++) { + mptable =g_realloc (mptable, offset + ssize); + cpu = (struct mpc_cpu *) (mptable + offset); + cpu->type =MP_PROCESSOR ; + cpu->apicid = i; + cpu->apicver =APIC_VERSION ; + cpu->cpuflag =CPU_ENABLED ; +if (i ==0 ) { + cpu->cpuflag |=CPU_BOOTPROCESSOR ; + } + cpu->cpufeature =CPU_STEPPING ; + cpu->featureflag =CPU_FEATURE_APIC |CPU_FEATURE_FPU ; + checksum +=mptable_checksum ((char *) cpu, ssize); + offset += ssize; + } + + ssize =sizeof (struct mpc_bus ); + mptable =g_realloc (mptable, offset + ssize); + bus = (struct mpc_bus *) (mptable + offset); + bus->type =MP_BUS ; + bus->busid =0 ; +memcpy (bus->bustype,BUS_TYPE_ISA ,sizeof (BUS_TYPE_ISA ) -1 ); + checksum +=mptable_checksum ((char *) bus, ssize); + offset += ssize; + + ssize =sizeof (struct mpc_ioapic ); + mptable =g_realloc (mptable, offset + ssize); + ioapic = (struct mpc_ioapic *) (mptable + offset); + ioapic->type =MP_IOAPIC ; + ioapic->apicid = ncpus +1 ; + ioapic->apicver =APIC_VERSION ; + ioapic->flags =MPC_APIC_USABLE ; + ioapic->apicaddr =IO_APIC_DEFAULT_PHYS_BASE ; + checksum +=mptable_checksum ((char *) ioapic, ssize); + offset += ssize; + + ssize =sizeof (struct mpc_intsrc ); +for (i =0 ; i <16 ; i++) { + mptable =g_realloc (mptable, offset + ssize); + intsrc = (struct mpc_intsrc *) (mptable + offset); + intsrc->type =MP_INTSRC ; + intsrc->irqtype = mp_INT; + intsrc->irqflag =MP_IRQDIR_DEFAULT ; + intsrc->srcbus =0 ; + intsrc->srcbusirq = i; + intsrc->dstapic = ncpus +1 ; + intsrc->dstirq = i; + checksum +=mptable_checksum ((char *) intsrc, ssize); + offset += ssize; + } + + ssize =sizeof (struct mpc_lintsrc ); + mptable =g_realloc (mptable, offset + (ssize *2 )); + lintsrc = (struct mpc_lintsrc *) (mptable + offset); + lintsrc->type =MP_LINTSRC ; + lintsrc->irqtype = mp_ExtINT; + lintsrc->irqflag =MP_IRQDIR_DEFAULT ; + lintsrc->srcbusid =0 ; + lintsrc->srcbusirq =0 ; + lintsrc->destapic =0 ; + lintsrc->destapiclint =0 ; + checksum +=mptable_checksum ((char *) lintsrc, ssize); + offset += ssize; + + lintsrc = (struct mpc_lintsrc *) (mptable + offset); + lintsrc->type =MP_LINTSRC ; + lintsrc->irqtype = mp_NMI; + lintsrc->irqflag =MP_IRQDIR_DEFAULT ; + lintsrc->srcbusid =0 ; + lintsrc->srcbusirq =0 ; + lintsrc->destapic =0xFF ; + lintsrc->destapiclint =1 ; + checksum +=mptable_checksum ((char *) lintsrc, ssize); + offset += ssize; + + ssize =sizeof (struct mpc_table ); + table = (struct mpc_table *) (mptable +sizeof (struct mpf_intel )); +memcpy (table->signature, mpc_signature,sizeof (mpc_signature) -1 ); + table->length = offset -sizeof (struct mpf_intel ); + table->spec =MPC_SPEC ; +memcpy (table->oem,MPC_OEM ,sizeof (MPC_OEM ) -1 ); +memcpy (table->productid,MPC_PRODUCT_ID ,sizeof (MPC_PRODUCT_ID ) -1 ); + table->lapic =APIC_DEFAULT_PHYS_BASE ; + checksum +=mptable_checksum ((char *) table, ssize); + table->checksum -= checksum; + + *mptable_size = offset; +return mptable; +}
include/hw/i386/mptable.h new file +36 -0
@@ -0,0 +1,36 @@ +/* +* Intel MPTable generator +* +* Copyright (C) 2019 Red Hat, Inc. +* +* Authors: +* Sergio Lopez <[email protected]> +* +* This work is licensed under the terms of the GNU GPL, version 2 or later. +* See the COPYING file in the top-level directory. +*/ + +#ifndef HW_I386_MPTABLE_H +#define HW_I386_MPTABLE_H + +#define APIC_VERSION 0x14 +#define CPU_STEPPING 0x600 +#define CPU_FEATURE_APIC 0x200 +#define CPU_FEATURE_FPU 0x001 +#define MPC_SPEC 0x4 + +#define MP_IRQDIR_DEFAULT 0 +#define MP_IRQDIR_HIGH 1 +#define MP_IRQDIR_LOW 3 + +static const char MPC_OEM [] ="QEMU " ; +static const char MPC_PRODUCT_ID [] ="000000000000" ; +static const char BUS_TYPE_ISA [] ="ISA " ; + +#define IO_APIC_DEFAULT_PHYS_BASE 0xfec00000 +#define APIC_DEFAULT_PHYS_BASE 0xfee00000 +#define APIC_VERSION 0x14 + +char *mptable_generate (int ncpus,int table_base,int *mptable_size); + +#endif
include/standard-headers/linux/mpspec_def.h new file +182 -0
182 lines not on this page · raw message
Signature · 1 line
2.21.0
Re: [Qemu-devel] [PATCH v2 2/4] hw/i386: Add an Intel MPTable generator
Quoted 4 lines · Sergio Lopez
Add a helper function (
mptable_generate) for generating an Intel MPTable according to version 1.4 of the specification.This is needed for the microvm machine type implementation.
Firmware should do this IMHO (qboot or seabios).
cheers,
Gerd
Re: [Qemu-devel] [PATCH v2 2/4] hw/i386: Add an Intel MPTable generator
Quoted 7 lines · Gerd Hoffmann
Quoted 4 lines · Sergio Lopez
Add a helper function (
mptable_generate) for generating an Intel MPTable according to version 1.4 of the specification.This is needed for the microvm machine type implementation.
Firmware should do this IMHO (qboot or seabios).
Microvm does a number of things that are typically done by the firmware, as a way to reduce boot time. I'm not opposed to support qboot, as long it's optional. Otherwise microvm will break one of its three leitmotif.
Sergio.
Re: [Qemu-devel] [PATCH v2 2/4] hw/i386: Add an Intel MPTable generator
Quoted 7 lines · Sergio Lopez
Quoted 4 lines · Gerd Hoffmann
Quoted 3 lines · Sergio Lopez
Add a helper function (
mptable_generate) for generating an Intel MPTable according to version 1.4 of the specification.
Quoted 6 lines
Quoted 3 lines
Quoted 1 line
This is needed for the microvm machine type implementation.
Firmware should do this IMHO (qboot or seabios).
Microvm does a number of things that are typically done by the firmware, as a way to reduce boot time.
Whenever the firmware or qemu does the initialization shouldn't make that much of a difference. Firmware needs to fetch stuff from fw_cfg, which shouldn't be much overhead when using dma mode.
cheers,
Gerd
PATCH v2 3/4 hw/i386: Factorize PVH related functions
In reply to Sergio LopezExtract PVH related functions from pc.c, and put them in pvh.c, so they can be shared with other components.
--- hw/i386/Makefile.objs | 1 + hw/i386/pc.c | 120 +++++------------------------------------- hw/i386/pvh.c | 113 +++++++++++++++++++++++++++++++++++++++ hw/i386/pvh.h | 10 ++++ 4 files changed, 136 insertions(+), 108 deletions(-) create mode 100644 hw/i386/pvh.c create mode 100644 hw/i386/pvh.h
hw/i386/Makefile.objs +1 -0
@@ -1,5 +1,6 @@ obj-$(CONFIG_KVM) += kvm/ obj-y += multiboot.o +obj-y += pvh.o obj-y += pc.o obj-$(CONFIG_I440FX) += pc_piix.o obj-$(CONFIG_Q35) += pc_q35.o
hw/i386/pc.c +12 -108
152 lines not on this page · raw message
hw/i386/pvh.c new file +113 -0
113 lines not on this page · raw message
hw/i386/pvh.h new file +10 -0
@@ -0,0 +1,10 @@ +#ifndef HW_I386_PVH_H +#define HW_I386_PVH_H + +size_t pvh_get_start_addr (void ); + +bool pvh_load_elfboot (const char *kernel_filename, +uint32_t *mh_load_addr, +uint32_t *elf_kernel_size); + +#endif
Signature · 1 line
2.21.0
PATCH v2 4/4 hw/i386: Introduce the microvm machine type
In reply to Sergio LopezMicrovm is a machine type inspired by both NEMU and Firecracker, and constructed after the machine model implemented by the latter.
It's main purpose is providing users a KVM-only machine type with fast boot times, minimal attack surface (measured as the number of IO ports and MMIO regions exposed to the Guest) and small footprint (specially when combined with the ongoing QEMU modularization effort).
Normally, other than the device support provided by KVM itself, microvm only supports virtio-mmio devices. Microvm also includes a legacy mode, which adds an ISA bus with a 16550A serial port, useful for being able to see the early boot kernel messages.
Microvm only supports booting PVH-enabled Linux ELF images. Booting other PVH-enabled kernels may be possible, but due to the lack of ACPI and firmware, we're relying on the command line for specifying the location of the virtio-mmio transports. If there's an interest on using this machine type with other kernels, we'll try to find some kind of middle ground solution.
--- default-configs/i386-softmmu.mak | 1 + hw/i386/Kconfig | 4 + hw/i386/Makefile.objs | 1 + hw/i386/microvm.c | 500 +++++++++++++++++++++++++++++++ include/hw/i386/microvm.h | 77 +++++ 5 files changed, 583 insertions(+) create mode 100644 hw/i386/microvm.c create mode 100644 include/hw/i386/microvm.h
default-configs/i386-softmmu.mak +1 -0
@@ -26,3 +26,4 @@ CONFIG_ISAPC=y CONFIG_I440FX=y CONFIG_Q35=y CONFIG_ACPI_PCI=y +CONFIG_MICROVM=y
hw/i386/Kconfig +4 -0
@@ -87,6 +87,10 @@ config Q35 select VMMOUSE select FW_CFG_DMA +config MICROVM + bool + select VIRTIO_MMIO + config VTD bool
hw/i386/Makefile.objs +1 -0
@@ -4,6 +4,7 @@ obj-y += pvh.o obj-y += pc.o obj-$(CONFIG_I440FX) += pc_piix.o obj-$(CONFIG_Q35) += pc_q35.o +obj-$(CONFIG_MICROVM) += mptable.o microvm.o obj-y += fw_cfg.o pc_sysfw.o obj-y += x86-iommu.o obj-$(CONFIG_VTD) += intel_iommu.o
hw/i386/microvm.c new file +500 -0
500 lines not on this page · raw message
include/hw/i386/microvm.h new file +77 -0
77 lines not on this page · raw message
Signature · 1 line
2.21.0
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
Hi,
Quoted 6 lines
Microvm only supports booting PVH-enabled Linux ELF images. Booting other PVH-enabled kernels may be possible, but due to the lack of ACPI and firmware, we're relying on the command line for specifying the location of the virtio-mmio transports. If there's an interest on using this machine type with other kernels, we'll try to find some kind of middle ground solution.
Can we get rid of the kernel command line hacking please? The virtio-mmio devices should be discoverable somehow.
Device tree (as suggested by paolo) would work. Custom acpi device (simliar to fw_cfg) is another option. I'd tend to pick acpi, I wouldn't be surprised if we'll need acpi anyway at some point.
Maybe even do both, then switch at runtime depending on -no-acpi (simliar to arm/aarch64).
cheers,
Gerd
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
Quoted 12 lines · Gerd Hoffmann
Hi,
Quoted 6 lines
Microvm only supports booting PVH-enabled Linux ELF images. Booting other PVH-enabled kernels may be possible, but due to the lack of ACPI and firmware, we're relying on the command line for specifying the location of the virtio-mmio transports. If there's an interest on using this machine type with other kernels, we'll try to find some kind of middle ground solution.
Can we get rid of the kernel command line hacking please? The virtio-mmio devices should be discoverable somehow.
Quoted 7 lines
Device tree (as suggested by paolo) would work. Custom acpi device (simliar to
fw_cfg) is another option. I'd tend to pick acpi, I wouldn't be surprised if we'll need acpi anyway at some point.Maybe even do both, then switch at runtime depending on -no-acpi (simliar to arm/aarch64).
Microvm tries to do things in the cheapest possible way. As I said the other email, I'm not opposed to support qboot (which will probably imply ACPI and/or device tree), as long it's optional, and the "cheap" way is still present.
Otherwise, let's just drop microvm and stick with Q35 + qboot.
Sergio.
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
Hi,
Quoted 8 lines
Quoted 8 lines
Can we get rid of the kernel command line hacking please? The virtio-mmio devices should be discoverable somehow.
Device tree (as suggested by paolo) would work. Custom acpi device (simliar to
fw_cfg) is another option. I'd tend to pick acpi, I wouldn't be surprised if we'll need acpi anyway at some point.
Quoted 4 lines
Quoted 2 lines
Maybe even do both, then switch at runtime depending on -no-acpi (simliar to arm/aarch64).
Microvm tries to do things in the cheapest possible way.
But taking too many shortcuts tends to hurt in the long run. It also cuts off useful use cases.
I think microvm has more value than just the reduced boot time. Specifically the reduced attack surface is useful I think, even beyond container-style workloads. Being able to boot standard cloud images (with the cloud image kernel loaded via cloud image boot loader) in microvm would be useful for example.
So, yes, I want microvm being designed in a way that it can run firmware and have it handle the boot process. For starters just qboot for fast direct kernel boot, but longer term also seabios and/or ovmf.
Can look at the seabios side, but probably not before I'm back from my summer vacation in august. For seabios a simple & reliable time source would be quite useful. Direct kernel boot might be doable without that, but as soon as any I/O (read from cloud image disk) is involved a time source is needed. Right now seabios uses the acpi pm_timer. tsc should work too if seabios can figure the frequency without a calibration loop (invtsc should be enough). Maybe seabios needs kvmclock support ...
Is there any way to detect microvm from the guest? pc/q35 can be easily detected by looking at the pci host bridge.
Do you have boot time numbers for qboot vs. no-firmware boot? Is the difference big enough that it makes sense to maintain both?
cheers,
Gerd
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
Quoted 10 lines · Gerd Hoffmann
Hi,
Quoted 8 lines
Quoted 8 lines
Can we get rid of the kernel command line hacking please? The virtio-mmio devices should be discoverable somehow.
Device tree (as suggested by paolo) would work. Custom acpi device (simliar to
fw_cfg) is another option. I'd tend to pick acpi, I wouldn't be surprised if we'll need acpi anyway at some point.
Quoted 7 lines
Quoted 4 lines
Quoted 2 lines
Maybe even do both, then switch at runtime depending on -no-acpi (simliar to arm/aarch64).
Microvm tries to do things in the cheapest possible way.
But taking too many shortcuts tends to hurt in the long run. It also cuts off useful use cases.
Sure, but the consideration about whether there are too many shortcuts, or just enough of them, is quite subjective. Microvm's code base is small enough to keep its quirks in check without a becoming a significant maintenance burden, and doesn't invalidate how other, more conventional machine types work.
Quoted 5 lines
I think microvm has more value than just the reduced boot time. Specifically the reduced attack surface is useful I think, even beyond container-style workloads. Being able to boot standard cloud images (with the cloud image kernel loaded via cloud image boot loader) in microvm would be useful for example.
Agreed.
Quoted 4 lines
So, yes, I want microvm being designed in a way that it can run firmware and have it handle the boot process. For starters just qboot for fast direct kernel boot, but longer term also seabios and/or ovmf.
As I said, I'm also in favor of microvm supporting booting from firmware in the future, as long we keep the simple mode too.
Quoted 8 lines
Can look at the seabios side, but probably not before I'm back from my summer vacation in august. For seabios a simple & reliable time source would be quite useful. Direct kernel boot might be doable without that, but as soon as any I/O (read from cloud image disk) is involved a time source is needed. Right now seabios uses the acpi
pm_timer. tsc should work too if seabios can figure the frequency without a calibration loop (invtsc should be enough). Maybe seabios needs kvmclock support ...
My main concern about supporting SeaBIOS, in addition to boot times, is having to support ACPI, which due to its complexity and size, is a clear candidate to be stripped out from a minimalistic QEMU build.
Quoted 2 lines
Is there any way to detect microvm from the guest? pc/q35 can be easily detected by looking at the pci host bridge.
One option would be using the fields MPC_OEM and MPC_PRODUCT_ID from the MP Table to give a hint to the guest.
Quoted 2 lines
Do you have boot time numbers for qboot vs. no-firmware boot? Is the difference big enough that it makes sense to maintain both?
AFAIK, qboot can't boot a guest without both ACPI and PCI.
Sergio.
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
Quoted 18 lines · Sergio Lopez
Quoted 15 lines · Gerd Hoffmann
Hi,
Quoted 12 lines
Quoted 10 lines
Can we get rid of the kernel command line hacking please? The virtio-mmio devices should be discoverable somehow.
Device tree (as suggested by paolo) would work. Custom acpi device (simliar to
fw_cfg) is another option. I'd tend to pick acpi, I wouldn't be surprised if we'll need acpi anyway at some point.Maybe even do both, then switch at runtime depending on -no-acpi (simliar to arm/aarch64).
Microvm tries to do things in the cheapest possible way.
Quoted 8 lines
Quoted 2 lines
But taking too many shortcuts tends to hurt in the long run. It also cuts off useful use cases.
Sure, but the consideration about whether there are too many shortcuts, or just enough of them, is quite subjective. Microvm's code base is small enough to keep its quirks in check without a becoming a significant maintenance burden, and doesn't invalidate how other, more conventional machine types work.
Most projects starts small, but then tend to grow over time. And likewise the maintenance burden tends to grow over time ...
Quoted 9 lines
Quoted 8 lines
Can look at the seabios side, but probably not before I'm back from my summer vacation in august. For seabios a simple & reliable time source would be quite useful. Direct kernel boot might be doable without that, but as soon as any I/O (read from cloud image disk) is involved a time source is needed. Right now seabios uses the acpi
pm_timer. tsc should work too if seabios can figure the frequency without a calibration loop (invtsc should be enough). Maybe seabios needs kvmclock support ...
Quoted 3 lines
My main concern about supporting SeaBIOS, in addition to boot times, is having to support ACPI, which due to its complexity and size, is a clear candidate to be stripped out from a minimalistic QEMU build.
Not sure dropping apci will be much of a win. I think the aml generator hasn't any external dependencies (increasing load time due to shared libs). The guest interface is rather small too (only reading tables via fw_cfg). I'd also expect microvm doesn't need many tables due to the small feature set (no numa, no pci, ...).
On the other hand acpi tables plus some minimal apci registers would provide some useful features. apci poweroff, acpi power button, apci pm-timer. You also could describe the virtio-mmio devices.
Having said that I think it should be possible to change seabios that it'll work without acpi too. It would still need some way to discover virtio-mmio devices though if we want it load guest kernels from disk images.
Quoted 5 lines
Quoted 2 lines
Is there any way to detect microvm from the guest? pc/q35 can be easily detected by looking at the pci host bridge.
One option would be using the fields
MPC_OEMandMPC_PRODUCT_IDfrom the MP Table to give a hint to the guest.
Well, I mean for the firmware. When booting with firmware all those tables (mptable, e820, ...) should be created by the firmware not qemu.
It's not that critical though. We probably want a separate seabios build for microvm anyway, so a compile time option should work too.
Quoted 4 lines
Quoted 2 lines
Do you have boot time numbers for qboot vs. no-firmware boot? Is the difference big enough that it makes sense to maintain both?
AFAIK, qboot can't boot a guest without both ACPI and PCI.
Should be fixable I guess ...
cheers,
Gerd
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
In reply to Sergio LopezQuoted 2 lines · Sergio Lopez
As I said, I'm also in favor of microvm supporting booting from firmware in the future, as long we keep the simple mode too.
The simple mode adds code to QEMU's x86 target that only exists to support microvm. It should be motivated by a clear win in boot times.
Quoted 3 lines
My main concern about supporting SeaBIOS, in addition to boot times, is having to support ACPI, which due to its complexity and size, is a clear candidate to be stripped out from a minimalistic QEMU build.
SeaBIOS doesn't need ACPI. I agree that ACPI should be optional in microvm.
Quoted 1 line
AFAIK, qboot can't boot a guest without both ACPI and PCI.
It currently needs PCI, but that's a one-line change to avoid panicking.
ACPI is optional, on the other hand qboot doesn't support mptable so
that can be a problem when ACPI is disabled.
Paolo
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
Quoted 6 lines · Paolo Bonzini
Quoted 2 lines · Sergio Lopez
As I said, I'm also in favor of microvm supporting booting from firmware in the future, as long we keep the simple mode too.
The simple mode adds code to QEMU's x86 target that only exists to support microvm. It should be motivated by a clear win in boot times.
OK. When I'm back from my PTO, I'll work on adding the firmware support to microvm. I'll run and share some numbers to see whether the simple mode makes sense or we can just rely on qboot for lower boot times plus SeaBIOS for compatibility.
Cheers,
Sergio.
Quoted 13 lines
Quoted 3 lines
My main concern about supporting SeaBIOS, in addition to boot times, is having to support ACPI, which due to its complexity and size, is a clear candidate to be stripped out from a minimalistic QEMU build.
SeaBIOS doesn't need ACPI. I agree that ACPI should be optional in microvm.
Quoted 1 line
AFAIK, qboot can't boot a guest without both ACPI and PCI.
It currently needs PCI, but that's a one-line change to avoid panicking.
ACPI is optional, on the other hand qboot doesn't support mptable so
that can be a problem when ACPI is disabled.Paolo
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
Quoted 6 lines · Sergio Lopez
Quoted 4 lines · Paolo Bonzini
Quoted 2 lines · Sergio Lopez
As I said, I'm also in favor of microvm supporting booting from firmware in the future, as long we keep the simple mode too.
Quoted 7 lines
Quoted 2 lines
The simple mode adds code to QEMU's x86 target that only exists to support microvm. It should be motivated by a clear win in boot times.
OK. When I'm back from my PTO, I'll work on adding the firmware support to microvm. I'll run and share some numbers to see whether the simple mode makes sense or we can just rely on qboot for lower boot times plus SeaBIOS for compatibility.
I've just added support for starting the machine from SeaBIOS (Stefan Hajnoczi pointed in another thread that it can be as fast as qboot, and given that the latter doesn't support mptables, I just tested this one). I tried to keep it as minimalistic as possible, but it still required an RTC (mc146818), which dragged in an ISA BUS, and this one a KVM PIT.
I ran some numbers using Stefano Garzarella's qemu-boot-time scripts
[1] on a server with 2xIntel Xeon Silver 4114 2.20GHz, using the upstream QEMU (474f3938d79ab36b9231c9ad3b5a9314c2aeacde) built with minimal features [2]. The VM boots a minimal kernel [3] without initrd, using a kata container image as root via virtio-blk (though this isn't really relevant, as we're just taking measurements until the kernel is about to exec init).
---------------------
| QEMU with SeaBIOS |
---------------------
Command line:
./x86_64-softmmu/qemu-system-x86_64 -m 512m -enable-kvm -M microvm,legacy -kernel /root/src/images/vmlinux-5.2 -append "console=hvc0 reboot=k panic=1 root=/dev/vda quiet virtio_mmio.device=512@0xd0000600:15 virtio_mmio.device=512@0xd0000400:14" -smp 1 -nodefaults -no-user-config -chardev pty,id=virtiocon0,server -device virtio-serial-device -device virtconsole,chardev=virtiocon0 -drive id=test,file=/usr/share/kata-containers/kata-containers.img,format=raw,if=none -device virtio-blk-device,drive=test -monitor stdio
Average boot times after 10 consecutive runs:
qemu_init_end: 65.958714
linux_start_kernel: 77.735803 (+11.777089)
linux_start_user: 127.360739 (+49.624936)
Exposed I/O ports and MMIOs:
address-space: memory
0000000000000000-ffffffffffffffff (prio 0, i/o): system
0000000000000000-000000001fffffff (prio 0, i/o): alias ram-below-4g @microvm.ram 0000000000000000-000000001fffffff
00000000000e0000-00000000000fffff (prio 1, i/o): alias isa-bios @pc.bios 0000000000000000-000000000001ffff
00000000d0000000-00000000d00001ff (prio 0, i/o): virtio-mmio
00000000d0000200-00000000d00003ff (prio 0, i/o): virtio-mmio
00000000d0000400-00000000d00005ff (prio 0, i/o): virtio-mmio
00000000d0000600-00000000d00007ff (prio 0, i/o): virtio-mmio
00000000fee00000-00000000feefffff (prio 4096, i/o): kvm-apic-msi
00000000fffe0000-00000000ffffffff (prio 0, ram): pc.bios address-space: I/O
0000000000000000-000000000000ffff (prio 0, i/o): io
0000000000000020-0000000000000021 (prio 0, i/o): kvm-pic
0000000000000040-0000000000000043 (prio 0, i/o): kvm-pit
0000000000000070-0000000000000071 (prio 0, i/o): rtc
0000000000000070-0000000000000070 (prio 0, i/o): rtc-index
000000000000007e-000000000000007f (prio 0, i/o): kvmvapic
00000000000000a0-00000000000000a1 (prio 0, i/o): kvm-pic
00000000000004d0-00000000000004d0 (prio 0, i/o): kvm-elcr
00000000000004d1-00000000000004d1 (prio 0, i/o): kvm-elcr
0000000000000510-0000000000000511 (prio 0, i/o): fwcfg
0000000000000514-000000000000051b (prio 0, i/o): fwcfg.dma -------------------
| QEMU direct PVH |
-------------------
Command line:
./x86_64-softmmu/qemu-system-x86_64 -m 512m -enable-kvm -M microvm -kernel /root/src/images/vmlinux-5.2 -append "console=hvc0 reboot=k panic=1 root=/dev/vda quiet" -smp 1 -nodefaults -no-user-config -chardev pty,id=virtiocon0,server -device virtio-serial-device -device virtconsole,chardev=virtiocon0 -drive id=test,file=/usr/share/kata-containers/kata-containers.img,format=raw,if=none -device virtio-blk-device,drive=test -monitor stdio
Average boot times after 10 consecutive runs:
qemu_init_end: 64.043264
linux_start_kernel: 65.481782 (+1.438518)
linux_start_user: 114.938353 (+49.456571)
Exposed I/O ports and MMIOs:
address-space: memory
0000000000000000-ffffffffffffffff (prio 0, i/o): system
0000000000000000-000000001fffffff (prio 0, i/o): alias ram-below-4g @microvm.ram 0000000000000000-000000001fffffff
00000000d0000000-00000000d00001ff (prio 0, i/o): virtio-mmio
00000000d0000200-00000000d00003ff (prio 0, i/o): virtio-mmio
00000000d0000400-00000000d00005ff (prio 0, i/o): virtio-mmio
00000000d0000600-00000000d00007ff (prio 0, i/o): virtio-mmio
00000000fec00000-00000000fec00fff (prio 0, i/o): kvm-ioapic
00000000fee00000-00000000feefffff (prio 4096, i/o): kvm-apic-msi address-space: I/O
0000000000000000-000000000000ffff (prio 0, i/o): io
000000000000007e-000000000000007f (prio 0, i/o): kvmvapic
--------------
| Comparison |
--------------
Average boot time:
* Relying on SeaBIOS, when compared with direct PVH boot, as a total average overhead of ~12ms. The cost of initializing QEMU increases in ~2ms (probably due to need to instantiate more devices), while the other ~10ms is the SeaBIOS overhead.
Exposed I/O ports and MMIOs:
* The following 8 I/O ports are only present in the version relying on SeaBIOS:
0000000000000020-0000000000000021 (prio 0, i/o): kvm-pic
0000000000000040-0000000000000043 (prio 0, i/o): kvm-pit
0000000000000070-0000000000000071 (prio 0, i/o): rtc
0000000000000070-0000000000000070 (prio 0, i/o): rtc-index
00000000000000a0-00000000000000a1 (prio 0, i/o): kvm-pic
00000000000004d0-00000000000004d0 (prio 0, i/o): kvm-elcr
00000000000004d1-00000000000004d1 (prio 0, i/o): kvm-elcr
0000000000000510-0000000000000511 (prio 0, i/o): fwcfg
0000000000000514-000000000000051b (prio 0, i/o): fwcfg.dma* The following MMIO region is only present in the direct boot version:
00000000fec00000-00000000fec00fff (prio 0, i/o): kvm-ioapic
---------------
| Conclusions |
---------------
Objectively, the version that boots directly the kernel using PVH is 10% faster and has a slightly larger exposed surface. Whether this is enough to justify its existence is quite subjective.
In my opinion, not only I think it makes sense to have it, but I also think there's little reason to have the firmware reliant version, given the nature and purpose of microvm.
Sergio.
[1] https://github.com/stefano-garzarella/qemu-boot-time
[2] https://paste.fedoraproject.org/paste/YZ9Ok-dJtQrc0xxctFm-nw
[3] https://paste.fedoraproject.org/paste/sck0jfioAJdMq51HH6wkmA
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
Quoted 46 lines · Sergio Lopez
I've just added support for starting the machine from SeaBIOS (Stefan Hajnoczi pointed in another thread that it can be as fast as qboot, and given that the latter doesn't support mptables, I just tested this one). I tried to keep it as minimalistic as possible, but it still required an RTC (mc146818), which dragged in an ISA BUS, and this one a KVM PIT.
I ran some numbers using Stefano Garzarella's qemu-boot-time scripts
[1] on a server with 2xIntel Xeon Silver 4114 2.20GHz, using the upstream QEMU (474f3938d79ab36b9231c9ad3b5a9314c2aeacde) built with minimal features [2]. The VM boots a minimal kernel [3] without initrd, using a kata container image as root via virtio-blk (though this isn't really relevant, as we're just taking measurements until the kernel is about to exec init).---------------------
| QEMU with SeaBIOS |
---------------------
qemu_init_end: 65.958714
linux_start_kernel: 77.735803 (+11.777089)
linux_start_user: 127.360739 (+49.624936)-------------------
| QEMU direct PVH |
-------------------
qemu_init_end: 64.043264
linux_start_kernel: 65.481782 (+1.438518)
linux_start_user: 114.938353 (+49.456571)--------------
| Comparison |
--------------Average boot time:
* Relying on SeaBIOS, when compared with direct PVH boot, as a total average overhead of ~12ms. The cost of initializing QEMU increases in ~2ms (probably due to need to instantiate more devices), while the other ~10ms is the SeaBIOS overhead.
---------------
| Conclusions |
---------------
Quoted 7 lines
Objectively, the version that boots directly the kernel using PVH is 10% faster and has a slightly larger exposed surface. Whether this is enough to justify its existence is quite subjective.
In my opinion, not only I think it makes sense to have it, but I also think there's little reason to have the firmware reliant version, given the nature and purpose of microvm.
The advantage of firmware is support for vmlinuz and multiboot in addition to PVH, and removing code from QEMU. So I think it's still worth doing a comparison with qboot, and trying to understand where SeaBIOS is spending its time (qboot should not need additional devices other than fw_cfg, and since SeaBIOS has never been optimized for microvm I expect it's possible to shave quite a few of those 12 ms).
On the other hand I agree that microvm is showing great promise compared to PCI-based machine types.
Paolo
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
Quoted 55 lines · Paolo Bonzini
Quoted 46 lines · Sergio Lopez
I've just added support for starting the machine from SeaBIOS (Stefan Hajnoczi pointed in another thread that it can be as fast as qboot, and given that the latter doesn't support mptables, I just tested this one). I tried to keep it as minimalistic as possible, but it still required an RTC (mc146818), which dragged in an ISA BUS, and this one a KVM PIT.
I ran some numbers using Stefano Garzarella's qemu-boot-time scripts
[1] on a server with 2xIntel Xeon Silver 4114 2.20GHz, using the upstream QEMU (474f3938d79ab36b9231c9ad3b5a9314c2aeacde) built with minimal features [2]. The VM boots a minimal kernel [3] without initrd, using a kata container image as root via virtio-blk (though this isn't really relevant, as we're just taking measurements until the kernel is about to exec init).---------------------
| QEMU with SeaBIOS |
---------------------
qemu_init_end: 65.958714
linux_start_kernel: 77.735803 (+11.777089)
linux_start_user: 127.360739 (+49.624936)-------------------
| QEMU direct PVH |
-------------------
qemu_init_end: 64.043264
linux_start_kernel: 65.481782 (+1.438518)
linux_start_user: 114.938353 (+49.456571)--------------
| Comparison |
--------------Average boot time:
* Relying on SeaBIOS, when compared with direct PVH boot, as a total average overhead of ~12ms. The cost of initializing QEMU increases in ~2ms (probably due to need to instantiate more devices), while the other ~10ms is the SeaBIOS overhead.
---------------
| Conclusions |
---------------Quoted 7 lines
Objectively, the version that boots directly the kernel using PVH is 10% faster and has a slightly larger exposed surface. Whether this is enough to justify its existence is quite subjective.
In my opinion, not only I think it makes sense to have it, but I also think there's little reason to have the firmware reliant version, given the nature and purpose of microvm.
Quoted 6 lines
The advantage of firmware is support for vmlinuz and multiboot in addition to PVH, and removing code from QEMU. So I think it's still worth doing a comparison with qboot, and trying to understand where SeaBIOS is spending its time (qboot should not need additional devices other than
fw_cfg, and since SeaBIOS has never been optimized for microvm I expect it's possible to shave quite a few of those 12 ms).
I tweaked qboot a bit to make it work with microvm (basically, if it can't identify a PCI vendor, it assumes it's running in a microvm, and avoids PCI and ACPI initialization, writing an minimal mptable instead) and I've just got some numbers:
Average boot time:
qemu_init_end: 64.502199
linux_start_kernel: 66.644311 (+2.142112)
linux_start_user: 116.279127 (+49.634816)
To avoid having to scroll up, these are the numbers with the direct PVH boot version:
Average boot time:
qemu_init_end: 64.043264
linux_start_kernel: 65.481782 (+1.438518)
linux_start_user: 114.938353 (+49.456571)
So starting from qboot is just a bit over 1ms slower, which I think it's quite reasonable. And, as you said, the only additional device is fw_cfg:
address-space: I/O
0000000000000000-000000000000ffff (prio 0, i/o): io
000000000000007e-000000000000007f (prio 0, i/o): kvmvapic
0000000000000510-0000000000000511 (prio 0, i/o): fwcfg
0000000000000514-000000000000051b (prio 0, i/o): fwcfg.dmaIf people feel more comfortable keeping QEMU on x86_64 starting on Real Mode and having the firmware writing mptables, I'm fine with taking this approach.
That said, to avoid confusing users, I think it'd be better to drop the legacy mode for SeaBIOS, and support just qboot. That would mean having to add a binary from the latter to "pc-bios" with some descriptive name ("qboot-microvm.bin"?) and making microvm look for that one by default.
Does this sound like a reasonable plan?
Quoted 4 lines
On the other hand I agree that microvm is showing great promise compared to PCI-based machine types.
Paolo
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
Quoted 10 lines · Sergio Lopez
If people feel more comfortable keeping QEMU on
x86_64starting on Real Mode and having the firmware writing mptables, I'm fine with taking this approach.That said, to avoid confusing users, I think it'd be better to drop the legacy mode for SeaBIOS, and support just qboot. That would mean having to add a binary from the latter to "pc-bios" with some descriptive name ("qboot-microvm.bin"?) and making microvm look for that one by default.
Does this sound like a reasonable plan?
Yes, though I wouldn't call it qboot-microvm.bin but just bios-microvm.bin.
In the meanwhile, feel free to send a pull request to the qboot project.
The mptables can be written for all platforms, even those that have
ACPI (there is always -no-acpi, too).
Paolo
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
In reply to Sergio LopezQuoted 252 lines · Sergio Lopez
Microvm is a machine type inspired by both NEMU and Firecracker, and constructed after the machine model implemented by the latter.
It's main purpose is providing users a KVM-only machine type with fast boot times, minimal attack surface (measured as the number of IO ports and MMIO regions exposed to the Guest) and small footprint (specially when combined with the ongoing QEMU modularization effort).
Normally, other than the device support provided by KVM itself, microvm only supports virtio-mmio devices. Microvm also includes a legacy mode, which adds an ISA bus with a 16550A serial port, useful for being able to see the early boot kernel messages.
Microvm only supports booting PVH-enabled Linux ELF images. Booting other PVH-enabled kernels may be possible, but due to the lack of ACPI and firmware, we're relying on the command line for specifying the location of the virtio-mmio transports. If there's an interest on using this machine type with other kernels, we'll try to find some kind of middle ground solution.
Signed-off-by Sergio Lopez <[email protected]>--- default-configs/i386-softmmu.mak | 1 + hw/i386/Kconfig | 4 + hw/i386/Makefile.objs | 1 + hw/i386/microvm.c | 500 +++++++++++++++++++++++++++++++ include/hw/i386/microvm.h | 77 +++++ 5 files changed, 583 insertions(+) create mode 100644 hw/i386/microvm.c create mode 100644 include/hw/i386/microvm.hdefault-configs/i386-softmmu.mak +1
-0@@ -26,3 +26,4 @@ CONFIG_ISAPC=y CONFIG_I440FX=y CONFIG_Q35=y CONFIG_ACPI_PCI=y +CONFIG_MICROVM=yhw/i386/Kconfig +4
-0@@ -87,6 +87,10 @@ config Q35 select VMMOUSE select FW_CFG_DMA +config MICROVM + bool + select VIRTIO_MMIO + config VTD boolhw/i386/Makefile.objs +1
-0@@ -4,6 +4,7 @@ obj-y += pvh.o obj-y += pc.o obj-$(CONFIG_I440FX) += pc_piix.o obj-$(CONFIG_Q35) += pc_q35.o +obj-$(CONFIG_MICROVM) += mptable.o microvm.o obj-y += fw_cfg.o pc_sysfw.o obj-y += x86-iommu.o obj-$(CONFIG_VTD) += intel_iommu.ohw/i386/microvm.c new file +179
-0@@ -0,0 +1,500 @@ +/* +* Copyright (c) 2018 Intel Corporation +* Copyright (c) 2019 Red Hat, Inc. +* +* 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/error-report.h" +#include "qemu/cutils.h" +#include "qapi/error.h" +#include "qapi/visitor.h" +#include "sysemu/sysemu.h" +#include "sysemu/cpus.h" +#include "sysemu/numa.h" + +#include "hw/loader.h" +#include "hw/nmi.h" +#include "hw/kvm/clock.h" +#include "hw/i386/microvm.h" +#include "hw/i386/pc.h" +#include "target/i386/cpu.h" +#include "hw/timer/i8254.h" +#include "hw/char/serial.h" +#include "hw/i386/topology.h" +#include "hw/virtio/virtio-mmio.h" +#include "hw/i386/mptable.h" + +#include "cpu.h" +#include "elf.h" +#include "pvh.h" +#include "kvm_i386.h" +#include "hw/xen/start_info.h" + +static void microvm_gsi_handler (void *opaque,int n,int level) +{ +qemu_irq *ioapic_irq = opaque; + +qemu_set_irq (ioapic_irq[n], level); +} + +static void microvm_legacy_init (MicrovmMachineState *mms) +{ +ISABus *isa_bus; +GSIState *gsi_state; +qemu_irq *i8259; +int i; + +assert (kvm_irqchip_in_kernel ()); + gsi_state =g_malloc0 (sizeof (*gsi_state)); + mms->gsi =qemu_allocate_irqs (gsi_handler, gsi_state,GSI_NUM_PINS ); + + isa_bus =isa_bus_new (NULL ,get_system_memory (),get_system_io (), + &error_abort); +isa_bus_irqs (isa_bus, mms->gsi); + +assert (kvm_pic_in_kernel ()); + i8259 =kvm_i8259_init (isa_bus); + +for (i =0 ; i <ISA_NUM_IRQS ; i++) { + gsi_state->i8259_irq[i] = i8259[i]; + } + +kvm_pit_init (isa_bus,0x40 ); + +for (i =0 ; i <VIRTIO_NUM_TRANSPORTS ; i++) { +int nirq =VIRTIO_IRQ_BASE + i; +ISADevice *isadev =isa_create (isa_bus,TYPE_ISA_SERIAL ); +qemu_irq mmio_irq; + +isa_init_irq (isadev, &mmio_irq, nirq); +sysbus_create_simple ("virtio-mmio" , +VIRTIO_MMIO_BASE + i *512 , + mms->gsi[VIRTIO_IRQ_BASE + i]); + } + +g_free (i8259); + +serial_hds_isa_init (isa_bus,0 ,1 ); +} + +static void microvm_ioapic_init (MicrovmMachineState *mms) +{ +qemu_irq *ioapic_irq; +DeviceState *ioapic_dev; +SysBusDevice *d; +int i; + +assert (kvm_irqchip_in_kernel ()); + ioapic_irq =g_new0 (qemu_irq,IOAPIC_NUM_PINS ); +kvm_pc_setup_irq_routing (true); + +assert (kvm_ioapic_in_kernel ()); + ioapic_dev =qdev_create (NULL ,"kvm-ioapic" ); + +object_property_add_child (qdev_get_machine (), +"ioapic" ,OBJECT (ioapic_dev),NULL ); + +qdev_init_nofail (ioapic_dev); + d =SYS_BUS_DEVICE (ioapic_dev); +sysbus_mmio_map (d,0 ,IO_APIC_DEFAULT_ADDRESS ); + +for (i =0 ; i <IOAPIC_NUM_PINS ; i++) { + ioapic_irq[i] =qdev_get_gpio_in (ioapic_dev, i); + } + + mms->gsi =qemu_allocate_irqs (microvm_gsi_handler, + ioapic_irq,IOAPIC_NUM_PINS ); + +for (i =0 ; i <VIRTIO_NUM_TRANSPORTS ; i++) { +sysbus_create_simple ("virtio-mmio" , +VIRTIO_MMIO_BASE + i *512 , + mms->gsi[VIRTIO_IRQ_BASE + i]); + } +} + +static void microvm_memory_init (MicrovmMachineState *mms) +{ +MachineState *machine =MACHINE (mms); +MemoryRegion *ram, *ram_below_4g, *ram_above_4g; +MemoryRegion *system_memory =get_system_memory (); + +if (machine->ram_size >MICROVM_MAX_BELOW_4G ) { + mms->above_4g_mem_size = machine->ram_size -MICROVM_MAX_BELOW_4G ; + mms->below_4g_mem_size =MICROVM_MAX_BELOW_4G ; + }else { + mms->above_4g_mem_size =0 ; + mms->below_4g_mem_size = machine->ram_size; + } + + ram =g_malloc (sizeof (*ram)); +memory_region_allocate_system_memory (ram,NULL ,"microvm.ram" , + machine->ram_size); + + ram_below_4g =g_malloc (sizeof (*ram_below_4g)); +memory_region_init_alias (ram_below_4g,NULL ,"ram-below-4g" , ram, +0 , mms->below_4g_mem_size); +memory_region_add_subregion (system_memory,0 , ram_below_4g); + +e820_add_entry (0 , mms->below_4g_mem_size,E820_RAM ); + +if (mms->above_4g_mem_size >0 ) { + ram_above_4g =g_malloc (sizeof (*ram_above_4g)); +memory_region_init_alias (ram_above_4g,NULL ,"ram-above-4g" , ram, + mms->below_4g_mem_size, + mms->above_4g_mem_size); +memory_region_add_subregion (system_memory,0x100000000ULL , + ram_above_4g); +e820_add_entry (0x100000000ULL , mms->above_4g_mem_size,E820_RAM ); + } +} + +static void microvm_cpus_init (const char *typename,Error **errp) +{ +int i; + +for (i =0 ; i < smp_cpus; i++) { +Object *cpu =NULL ; +Error *local_err =NULL ; + + cpu =object_new (typename); + +object_property_set_uint (cpu, i,"apic-id" , &local_err); +object_property_set_bool (cpu, true,"realized" , &local_err); + +object_unref (cpu); +error_propagate (errp, local_err); + } +}
hw/i386/microvm.c line 189
Quoted 10 lines
hw/i386/microvm.c new file +10
-0+ +static void microvm_machine_state_init (MachineState *machine) +{ +MicrovmMachineState *mms =MICROVM_MACHINE (machine); +Error *local_err =NULL ; + +if (machine->kernel_filename ==NULL ) { +error_report ("missing kernel image file name, required by microvm" ); +exit (1 ); + }
Could it be useful to support initrd as well?
I'm thinking a possibility to a microvm to use only the initrd without a block device.
In this case, Linux expects the initrd address and size in the first element of the modlist in the 'struct hvm_start_info'.
See pc-bios/optionrom/pvh_main.c
Cheers,
Stefano
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
Quoted 266 lines · Stefano Garzarella
Quoted 252 lines · Sergio Lopez
Microvm is a machine type inspired by both NEMU and Firecracker, and constructed after the machine model implemented by the latter.
It's main purpose is providing users a KVM-only machine type with fast boot times, minimal attack surface (measured as the number of IO ports and MMIO regions exposed to the Guest) and small footprint (specially when combined with the ongoing QEMU modularization effort).
Normally, other than the device support provided by KVM itself, microvm only supports virtio-mmio devices. Microvm also includes a legacy mode, which adds an ISA bus with a 16550A serial port, useful for being able to see the early boot kernel messages.
Microvm only supports booting PVH-enabled Linux ELF images. Booting other PVH-enabled kernels may be possible, but due to the lack of ACPI and firmware, we're relying on the command line for specifying the location of the virtio-mmio transports. If there's an interest on using this machine type with other kernels, we'll try to find some kind of middle ground solution.
Signed-off-by Sergio Lopez <[email protected]>--- default-configs/i386-softmmu.mak | 1 + hw/i386/Kconfig | 4 + hw/i386/Makefile.objs | 1 + hw/i386/microvm.c | 500 +++++++++++++++++++++++++++++++ include/hw/i386/microvm.h | 77 +++++ 5 files changed, 583 insertions(+) create mode 100644 hw/i386/microvm.c create mode 100644 include/hw/i386/microvm.hdefault-configs/i386-softmmu.mak +1
-0@@ -26,3 +26,4 @@ CONFIG_ISAPC=y CONFIG_I440FX=y CONFIG_Q35=y CONFIG_ACPI_PCI=y +CONFIG_MICROVM=yhw/i386/Kconfig +4
-0@@ -87,6 +87,10 @@ config Q35 select VMMOUSE select FW_CFG_DMA +config MICROVM + bool + select VIRTIO_MMIO + config VTD boolhw/i386/Makefile.objs +1
-0@@ -4,6 +4,7 @@ obj-y += pvh.o obj-y += pc.o obj-$(CONFIG_I440FX) += pc_piix.o obj-$(CONFIG_Q35) += pc_q35.o +obj-$(CONFIG_MICROVM) += mptable.o microvm.o obj-y += fw_cfg.o pc_sysfw.o obj-y += x86-iommu.o obj-$(CONFIG_VTD) += intel_iommu.ohw/i386/microvm.c new file +179
-0@@ -0,0 +1,500 @@ +/* +* Copyright (c) 2018 Intel Corporation +* Copyright (c) 2019 Red Hat, Inc. +* +* 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/error-report.h" +#include "qemu/cutils.h" +#include "qapi/error.h" +#include "qapi/visitor.h" +#include "sysemu/sysemu.h" +#include "sysemu/cpus.h" +#include "sysemu/numa.h" + +#include "hw/loader.h" +#include "hw/nmi.h" +#include "hw/kvm/clock.h" +#include "hw/i386/microvm.h" +#include "hw/i386/pc.h" +#include "target/i386/cpu.h" +#include "hw/timer/i8254.h" +#include "hw/char/serial.h" +#include "hw/i386/topology.h" +#include "hw/virtio/virtio-mmio.h" +#include "hw/i386/mptable.h" + +#include "cpu.h" +#include "elf.h" +#include "pvh.h" +#include "kvm_i386.h" +#include "hw/xen/start_info.h" + +static void microvm_gsi_handler (void *opaque,int n,int level) +{ +qemu_irq *ioapic_irq = opaque; + +qemu_set_irq (ioapic_irq[n], level); +} + +static void microvm_legacy_init (MicrovmMachineState *mms) +{ +ISABus *isa_bus; +GSIState *gsi_state; +qemu_irq *i8259; +int i; + +assert (kvm_irqchip_in_kernel ()); + gsi_state =g_malloc0 (sizeof (*gsi_state)); + mms->gsi =qemu_allocate_irqs (gsi_handler, gsi_state,GSI_NUM_PINS ); + + isa_bus =isa_bus_new (NULL ,get_system_memory (),get_system_io (), + &error_abort); +isa_bus_irqs (isa_bus, mms->gsi); + +assert (kvm_pic_in_kernel ()); + i8259 =kvm_i8259_init (isa_bus); + +for (i =0 ; i <ISA_NUM_IRQS ; i++) { + gsi_state->i8259_irq[i] = i8259[i]; + } + +kvm_pit_init (isa_bus,0x40 ); + +for (i =0 ; i <VIRTIO_NUM_TRANSPORTS ; i++) { +int nirq =VIRTIO_IRQ_BASE + i; +ISADevice *isadev =isa_create (isa_bus,TYPE_ISA_SERIAL ); +qemu_irq mmio_irq; + +isa_init_irq (isadev, &mmio_irq, nirq); +sysbus_create_simple ("virtio-mmio" , +VIRTIO_MMIO_BASE + i *512 , + mms->gsi[VIRTIO_IRQ_BASE + i]); + } + +g_free (i8259); + +serial_hds_isa_init (isa_bus,0 ,1 ); +} + +static void microvm_ioapic_init (MicrovmMachineState *mms) +{ +qemu_irq *ioapic_irq; +DeviceState *ioapic_dev; +SysBusDevice *d; +int i; + +assert (kvm_irqchip_in_kernel ()); + ioapic_irq =g_new0 (qemu_irq,IOAPIC_NUM_PINS ); +kvm_pc_setup_irq_routing (true); + +assert (kvm_ioapic_in_kernel ()); + ioapic_dev =qdev_create (NULL ,"kvm-ioapic" ); + +object_property_add_child (qdev_get_machine (), +"ioapic" ,OBJECT (ioapic_dev),NULL ); + +qdev_init_nofail (ioapic_dev); + d =SYS_BUS_DEVICE (ioapic_dev); +sysbus_mmio_map (d,0 ,IO_APIC_DEFAULT_ADDRESS ); + +for (i =0 ; i <IOAPIC_NUM_PINS ; i++) { + ioapic_irq[i] =qdev_get_gpio_in (ioapic_dev, i); + } + + mms->gsi =qemu_allocate_irqs (microvm_gsi_handler, + ioapic_irq,IOAPIC_NUM_PINS ); + +for (i =0 ; i <VIRTIO_NUM_TRANSPORTS ; i++) { +sysbus_create_simple ("virtio-mmio" , +VIRTIO_MMIO_BASE + i *512 , + mms->gsi[VIRTIO_IRQ_BASE + i]); + } +} + +static void microvm_memory_init (MicrovmMachineState *mms) +{ +MachineState *machine =MACHINE (mms); +MemoryRegion *ram, *ram_below_4g, *ram_above_4g; +MemoryRegion *system_memory =get_system_memory (); + +if (machine->ram_size >MICROVM_MAX_BELOW_4G ) { + mms->above_4g_mem_size = machine->ram_size -MICROVM_MAX_BELOW_4G ; + mms->below_4g_mem_size =MICROVM_MAX_BELOW_4G ; + }else { + mms->above_4g_mem_size =0 ; + mms->below_4g_mem_size = machine->ram_size; + } + + ram =g_malloc (sizeof (*ram)); +memory_region_allocate_system_memory (ram,NULL ,"microvm.ram" , + machine->ram_size); + + ram_below_4g =g_malloc (sizeof (*ram_below_4g)); +memory_region_init_alias (ram_below_4g,NULL ,"ram-below-4g" , ram, +0 , mms->below_4g_mem_size); +memory_region_add_subregion (system_memory,0 , ram_below_4g); + +e820_add_entry (0 , mms->below_4g_mem_size,E820_RAM ); + +if (mms->above_4g_mem_size >0 ) { + ram_above_4g =g_malloc (sizeof (*ram_above_4g)); +memory_region_init_alias (ram_above_4g,NULL ,"ram-above-4g" , ram, + mms->below_4g_mem_size, + mms->above_4g_mem_size); +memory_region_add_subregion (system_memory,0x100000000ULL , + ram_above_4g); +e820_add_entry (0x100000000ULL , mms->above_4g_mem_size,E820_RAM ); + } +} + +static void microvm_cpus_init (const char *typename,Error **errp) +{ +int i; + +for (i =0 ; i < smp_cpus; i++) { +Object *cpu =NULL ; +Error *local_err =NULL ; + + cpu =object_new (typename); + +object_property_set_uint (cpu, i,"apic-id" , &local_err); +object_property_set_bool (cpu, true,"realized" , &local_err); + +object_unref (cpu); +error_propagate (errp, local_err); + } +}hw/i386/microvm.c line 189
Quoted 10 lines
hw/i386/microvm.c new file +10
-0+ +static void microvm_machine_state_init (MachineState *machine) +{ +MicrovmMachineState *mms =MICROVM_MACHINE (machine); +Error *local_err =NULL ; + +if (machine->kernel_filename ==NULL ) { +error_report ("missing kernel image file name, required by microvm" ); +exit (1 ); + }Could it be useful to support initrd as well?
Quoted 2 lines
I'm thinking a possibility to a microvm to use only the initrd without a block device.
I agree, thanks for the suggestion. I'll add support for it.
Sergio.
Quoted 7 lines
In this case, Linux expects the initrd address and size in the first element of the modlist in the 'struct
hvm_start_info'.See
pc-bios/optionrom/pvh_main.cCheers,
Stefano
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
Quoted 5 lines · Sergio Lopez
Quoted 4 lines
Could it be useful to support initrd as well?
I'm thinking a possibility to a microvm to use only the initrd without a block device.
I agree, thanks for the suggestion. I'll add support for it.
I'd like to take a look at adding firmware support too, so that we get linuxboot and multiboot for free. This would also allow boot time comparisons.
Paolo
Re: [Qemu-devel] [PATCH v2 4/4] hw/i386: Introduce the microvm machine type
Quoted 10 lines · Paolo Bonzini
Quoted 5 lines · Sergio Lopez
Quoted 4 lines
Could it be useful to support initrd as well?
I'm thinking a possibility to a microvm to use only the initrd without a block device.
I agree, thanks for the suggestion. I'll add support for it.
I'd like to take a look at adding firmware support too, so that we get linuxboot and multiboot for free. This would also allow boot time comparisons.
I agree, but I'd prefer doing that on another iteration. This way we can already introduce the machine type, with its basic set of features and characteristics (which work in the sense it was initially intended), so other projects can start experimenting with it.
Then we can add other options like ACPI and firmware support as knobs.
Sergio.
Patchew URL: https://patchew.org/QEMU/[email protected]/
Patchew URL: https://patchew.org/QEMU/[email protected]/
Hi,
This series failed the asan build test. Please find the testing commands and their output below. If you have Docker installed, you can probably reproduce it locally.
=== TEST SCRIPT BEGIN ===
#!/bin/bash
make docker-image-fedora V=1 NETWORK=1
time make docker-test-debug@fedora TARGET_LIST=x86_64-softmmu J=14 NETWORK=1 === TEST SCRIPT END ===
PASS 1 fdc-test /x86_64/fdc/cmos
PASS 2 fdc-test /x86_64/fdc/no_media_on_start
PASS 3 fdc-test /x86_64/fdc/read_without_media
==7813==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 fdc-test /x86_64/fdc/media_change
PASS 5 fdc-test /x86_64/fdc/sense_interrupt
PASS 6 fdc-test /x86_64/fdc/relative_seek
---
PASS 32 test-opts-visitor /visitor/opts/range/beyond
PASS 33 test-opts-visitor /visitor/opts/dict/unvisited
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-coroutine -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-coroutine"
==7861==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==7861==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffc3a2d3000; bottom 0x7f876eaf8000; size: 0x0074cb7db000 (501630218240)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 1 test-coroutine /basic/no-dangling-access
---
PASS 11 test-aio /aio/event/wait
PASS 12 test-aio /aio/event/flush
PASS 13 test-aio /aio/event/wait/no-flush-cb
==7876==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 14 test-aio /aio/timer/schedule
PASS 15 test-aio /aio/coroutine/queue-chaining
PASS 16 test-aio /aio-gsource/flush
---
PASS 12 fdc-test /x86_64/fdc/read_no_dma_19
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-aio-multithread -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-aio-multithread"
PASS 13 fdc-test /x86_64/fdc/fuzz-registers
==7882==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-aio-multithread /aio/multi/lifecycle
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/ide-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="ide-test" PASS 2 test-aio-multithread /aio/multi/schedule
==7900==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 ide-test /x86_64/ide/identify
PASS 3 test-aio-multithread /aio/multi/mutex/contended
==7911==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 ide-test /x86_64/ide/flush
==7922==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 ide-test /x86_64/ide/bmdma/simple_rw
PASS 4 test-aio-multithread /aio/multi/mutex/handoff
==7928==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 ide-test /x86_64/ide/bmdma/trim
PASS 5 test-aio-multithread /aio/multi/mutex/mcs
==7939==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 5 ide-test /x86_64/ide/bmdma/short_prdt
PASS 6 test-aio-multithread /aio/multi/mutex/pthread
==7950==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-throttle -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-throttle"
PASS 1 test-throttle /throttle/leak_bucket
PASS 2 test-throttle /throttle/compute_wait
---
PASS 6 test-throttle /throttle/detach_attach
PASS 7 test-throttle /throttle/config_functions
PASS 8 test-throttle /throttle/accounting
==7957==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 9 test-throttle /throttle/groups
PASS 10 test-throttle /throttle/config/enabled
PASS 11 test-throttle /throttle/config/conflicting
---
PASS 15 test-throttle /throttle/config/iops_size
PASS 6 ide-test /x86_64/ide/bmdma/one_sector_short_prdt
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-thread-pool -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-thread-pool"
==7962==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-thread-pool /thread-pool/submit
PASS 2 test-thread-pool /thread-pool/submit-aio
==7965==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 test-thread-pool /thread-pool/submit-co
PASS 4 test-thread-pool /thread-pool/submit-many
PASS 7 ide-test /x86_64/ide/bmdma/long_prdt
==8036==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8036==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffffa075000; bottom 0x7f303efaa000; size: 0x00cfbb0cb000 (892196401152)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 5 test-thread-pool /thread-pool/cancel
PASS 8 ide-test /x86_64/ide/bmdma/no_busmaster
PASS 9 ide-test /x86_64/ide/flush/nodev
PASS 6 test-thread-pool /thread-pool/cancel-async
==8047==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-hbitmap -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-hbitmap"
PASS 1 test-hbitmap /hbitmap/granularity
PASS 2 test-hbitmap /hbitmap/size/0
---
PASS 4 test-hbitmap /hbitmap/iter/empty
PASS 10 ide-test /x86_64/ide/flush/empty_drive
PASS 5 test-hbitmap /hbitmap/iter/partial
==8057==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 6 test-hbitmap /hbitmap/iter/granularity
PASS 7 test-hbitmap /hbitmap/iter/iter_and_reset
PASS 8 test-hbitmap /hbitmap/get/all
---
PASS 14 test-hbitmap /hbitmap/set/twice
PASS 15 test-hbitmap /hbitmap/set/overlap
PASS 16 test-hbitmap /hbitmap/reset/empty
==8064==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 17 test-hbitmap /hbitmap/reset/general
PASS 18 test-hbitmap /hbitmap/reset/all
PASS 19 test-hbitmap /hbitmap/truncate/nop
---
PASS 29 test-hbitmap /hbitmap/truncate/shrink/large
PASS 30 test-hbitmap /hbitmap/meta/zero
PASS 12 ide-test /x86_64/ide/flush/retry_isa
==8070==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 13 ide-test /x86_64/ide/cdrom/pio
==8076==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 14 ide-test /x86_64/ide/cdrom/pio_large
==8082==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 31 test-hbitmap /hbitmap/meta/one
PASS 32 test-hbitmap /hbitmap/meta/byte
PASS 33 test-hbitmap /hbitmap/meta/word
---
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/ahci-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="ahci-test" PASS 34 test-hbitmap /hbitmap/meta/sector
PASS 35 test-hbitmap /hbitmap/serialize/align
==8096==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 ahci-test /x86_64/ahci/sanity
==8102==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 ahci-test /x86_64/ahci/pci_spec
PASS 36 test-hbitmap /hbitmap/serialize/basic
PASS 37 test-hbitmap /hbitmap/serialize/part
---
PASS 42 test-hbitmap /hbitmap/next_dirty_area/next_dirty_area_1
PASS 43 test-hbitmap /hbitmap/next_dirty_area/next_dirty_area_4
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-bdrv-drain -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-bdrv-drain"
==8108==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8111==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-bdrv-drain /bdrv-drain/nested
PASS 2 test-bdrv-drain /bdrv-drain/multiparent
PASS 3 test-bdrv-drain /bdrv-drain/set_aio_context
---
PASS 39 test-bdrv-drain /bdrv-drain/attach/drain
PASS 3 ahci-test /x86_64/ahci/pci_enable
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-bdrv-graph-mod -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-bdrv-graph-mod"
==8157==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8155==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-bdrv-graph-mod /bdrv-graph-mod/update-perm-tree
PASS 2 test-bdrv-graph-mod /bdrv-graph-mod/should-update-child
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-blockjob -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-blockjob"
==8167==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-blockjob /blockjob/ids
PASS 2 test-blockjob /blockjob/cancel/created
PASS 3 test-blockjob /blockjob/cancel/running
---
PASS 8 test-blockjob /blockjob/cancel/concluded
PASS 4 ahci-test /x86_64/ahci/hba_spec
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-blockjob-txn -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-blockjob-txn"
==8173==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8171==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-blockjob-txn /single/success
PASS 2 test-blockjob-txn /single/failure
PASS 3 test-blockjob-txn /single/cancel
---
PASS 6 test-blockjob-txn /pair/cancel
PASS 7 test-blockjob-txn /pair/fail-cancel-race
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-block-backend -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-block-backend"
==8183==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 5 ahci-test /x86_64/ahci/hba_enable
PASS 1 test-block-backend /block-backend/drain_aio_error
PASS 2 test-block-backend /block-backend/drain_all_aio_error
==8187==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-block-iothread -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-block-iothread"
==8193==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-block-iothread /sync-op/pread
PASS 2 test-block-iothread /sync-op/pwrite
PASS 3 test-block-iothread /sync-op/load_vmstate
---
PASS 16 test-block-iothread /propagate/mirror
PASS 6 ahci-test /x86_64/ahci/identify
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-image-locking -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-image-locking"
==8216==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-image-locking /image-locking/basic
PASS 2 test-image-locking /image-locking/set-perm-abort
==8214==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-x86-cpuid -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-x86-cpuid"
PASS 1 test-x86-cpuid /cpuid/topology/basic
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-xbzrle -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-xbzrle"
---
PASS 3 test-xbzrle /xbzrle/encode_decode_unchanged
PASS 4 test-xbzrle /xbzrle/encode_decode_1_byte
PASS 5 test-xbzrle /xbzrle/encode_decode_overflow
==8232==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 6 test-xbzrle /xbzrle/encode_decode
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-vmstate -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-vmstate"
PASS 1 test-vmstate /vmstate/tmp_struct
---
PASS 9 test-int128 /int128/int128_gt
PASS 10 test-int128 /int128/int128_rshift
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/rcutorture -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="rcutorture"
==8260==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8260==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffd5d059000; bottom 0x7f28d8bfe000; size: 0x00d48445b000 (912752226304)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 1 rcutorture /rcu/torture/1reader
PASS 9 ahci-test /x86_64/ahci/io/pio/lba28/simple/zero
PASS 2 rcutorture /rcu/torture/10readers
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-rcu-list -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-rcu-list"
==8293==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8293==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffdd51ba000; bottom 0x7fac575fe000; size: 0x00517dbbc000 (350001807360)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 10 ahci-test /x86_64/ahci/io/pio/lba28/simple/low
PASS 1 test-rcu-list /rcu/qlist/single-threaded
==8306==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8306==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffc1b407000; bottom 0x7f2c001fe000; size: 0x00d01b209000 (893808316416)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 2 test-rcu-list /rcu/qlist/short-few
PASS 11 ahci-test /x86_64/ahci/io/pio/lba28/simple/high
==8339==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8339==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffd9e517000; bottom 0x7ff3551fe000; size: 0x000a49319000 (44177657856)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 12 ahci-test /x86_64/ahci/io/pio/lba28/double/zero
==8345==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 test-rcu-list /rcu/qlist/long-many
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-rcu-simpleq -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-rcu-simpleq"
==8345==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffd87676000; bottom 0x7fe3997fe000; size: 0x0019ede78000 (111365554176)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 13 ahci-test /x86_64/ahci/io/pio/lba28/double/low
==8358==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-rcu-simpleq /rcu/qsimpleq/single-threaded
==8358==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffca5409000; bottom 0x7f9b3b5fe000; size: 0x006169e0b000 (418388160512)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 14 ahci-test /x86_64/ahci/io/pio/lba28/double/high
PASS 2 test-rcu-simpleq /rcu/qsimpleq/short-few
==8370==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8370==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffe5b2b5000; bottom 0x7f9bd07fe000; size: 0x00628aab7000 (423233286144)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 15 ahci-test /x86_64/ahci/io/pio/lba28/long/zero
==8397==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 test-rcu-simpleq /rcu/qsimpleq/long-many
==8397==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffedfe32000; bottom 0x7f0fd9f24000; size: 0x00ef05f0e000 (1026596855808)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-rcu-tailq -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-rcu-tailq"
PASS 16 ahci-test /x86_64/ahci/io/pio/lba28/long/low
PASS 1 test-rcu-tailq /rcu/qtailq/single-threaded
==8410==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8410==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7fff1e306000; bottom 0x7ff90e7fe000; size: 0x00060fb08000 (26033029120)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 2 test-rcu-tailq /rcu/qtailq/short-few
PASS 17 ahci-test /x86_64/ahci/io/pio/lba28/long/high
==8443==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 18 ahci-test /x86_64/ahci/io/pio/lba28/short/zero
PASS 3 test-rcu-tailq /rcu/qtailq/long-many
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-qdist -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-qdist"
==8449==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-qdist /qdist/none
PASS 2 test-qdist /qdist/pr
PASS 3 test-qdist /qdist/single/empty
---
PASS 8 test-qdist /qdist/binning/shrink
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-qht -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-qht"
PASS 19 ahci-test /x86_64/ahci/io/pio/lba28/short/low
==8464==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 20 ahci-test /x86_64/ahci/io/pio/lba28/short/high
==8470==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8470==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffe48a1b000; bottom 0x7f280e3fe000; size: 0x00d63a61d000 (920102490112)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 21 ahci-test /x86_64/ahci/io/pio/lba48/simple/zero
==8476==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8476==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffead534000; bottom 0x7f77497fe000; size: 0x008763d36000 (581495382016)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 22 ahci-test /x86_64/ahci/io/pio/lba48/simple/low
==8482==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8482==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffff8947000; bottom 0x7f0b389fe000; size: 0x00f4bff49000 (1051192496128)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 23 ahci-test /x86_64/ahci/io/pio/lba48/simple/high
==8488==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8488==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffc1746e000; bottom 0x7f25c2ffe000; size: 0x00d654470000 (920536940544)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 24 ahci-test /x86_64/ahci/io/pio/lba48/double/zero
==8494==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8494==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7fff03cef000; bottom 0x7f6a13bfe000; size: 0x0094f00f1000 (639682678784)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 25 ahci-test /x86_64/ahci/io/pio/lba48/double/low
==8500==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8500==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffc8e5b9000; bottom 0x7f485c3fe000; size: 0x00b4321bb000 (773934788608)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 26 ahci-test /x86_64/ahci/io/pio/lba48/double/high
==8506==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8506==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7fff007b1000; bottom 0x7f876bf7c000; size: 0x007794835000 (513592741888)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 27 ahci-test /x86_64/ahci/io/pio/lba48/long/zero
==8512==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8512==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffdfe6a7000; bottom 0x7fdd0437c000; size: 0x0020fa32b000 (141636579328)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 28 ahci-test /x86_64/ahci/io/pio/lba48/long/low
PASS 1 test-qht /qht/mode/default
PASS 2 test-qht /qht/mode/resize
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-qht-par -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-qht-par"
==8518==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8518==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffe78af0000; bottom 0x7f9c963fe000; size: 0x0061e26f2000 (420410761216)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 1 test-qht-par /qht/parallel/2threads-0%updates-1s
PASS 29 ahci-test /x86_64/ahci/io/pio/lba48/long/high
==8541==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 test-qht-par /qht/parallel/2threads-20%updates-1s
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-bitops -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-bitops"
PASS 1 test-bitops /bitops/sextract32
---
PASS 4 test-bitcnt /bitcnt/ctpop64
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-qdev-global-props -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-qdev-global-props"
PASS 1 test-qdev-global-props /qdev/properties/static/default
==8557==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 test-qdev-global-props /qdev/properties/static/global
PASS 3 test-qdev-global-props /qdev/properties/dynamic/global
PASS 4 test-qdev-global-props /qdev/properties/global/subclass
---
PASS 2 test-write-threshold /write-threshold/set-get
PASS 3 test-write-threshold /write-threshold/multi-set-get
PASS 4 test-write-threshold /write-threshold/not-trigger
==8590==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 5 test-write-threshold /write-threshold/trigger
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-crypto-hash -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-crypto-hash"
PASS 1 test-crypto-hash /crypto/hash/iov
---
PASS 15 test-crypto-secret /crypto/secret/crypt/missingiv
PASS 16 test-crypto-secret /crypto/secret/crypt/badiv
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-crypto-tlscredsx509 -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-crypto-tlscredsx509"
==8615==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 33 ahci-test /x86_64/ahci/io/dma/lba28/fragmented
PASS 1 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/perfectserver
PASS 2 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/perfectclient
PASS 3 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodca1
==8631==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodca2
PASS 34 ahci-test /x86_64/ahci/io/dma/lba28/retry
==8637==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 35 ahci-test /x86_64/ahci/io/dma/lba28/simple/zero
==8643==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 5 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodca3
PASS 6 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/badca1
PASS 7 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/badca2
PASS 8 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/badca3
PASS 36 ahci-test /x86_64/ahci/io/dma/lba28/simple/low
==8649==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 37 ahci-test /x86_64/ahci/io/dma/lba28/simple/high
PASS 9 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodserver1
PASS 10 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodserver2
==8655==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 11 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodserver3
PASS 12 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodserver4
PASS 13 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodserver5
PASS 38 ahci-test /x86_64/ahci/io/dma/lba28/double/zero
==8661==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 14 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodserver6
PASS 15 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodserver7
PASS 16 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/badserver1
---
PASS 38 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/missingserver
PASS 39 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/missingclient
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-crypto-tlssession -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-crypto-tlssession"
==8667==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 40 ahci-test /x86_64/ahci/io/dma/lba28/double/high
==8678==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-crypto-tlssession /qcrypto/tlssession/psk
PASS 41 ahci-test /x86_64/ahci/io/dma/lba28/long/zero
==8684==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 test-crypto-tlssession /qcrypto/tlssession/basicca
PASS 3 test-crypto-tlssession /qcrypto/tlssession/differentca
PASS 42 ahci-test /x86_64/ahci/io/dma/lba28/long/low
==8690==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 test-crypto-tlssession /qcrypto/tlssession/altname1
PASS 5 test-crypto-tlssession /qcrypto/tlssession/altname2
PASS 43 ahci-test /x86_64/ahci/io/dma/lba28/long/high
PASS 6 test-crypto-tlssession /qcrypto/tlssession/altname3
==8696==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 7 test-crypto-tlssession /qcrypto/tlssession/altname4
PASS 44 ahci-test /x86_64/ahci/io/dma/lba28/short/zero
PASS 8 test-crypto-tlssession /qcrypto/tlssession/altname5
==8702==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 9 test-crypto-tlssession /qcrypto/tlssession/altname6
PASS 10 test-crypto-tlssession /qcrypto/tlssession/wildcard1
PASS 45 ahci-test /x86_64/ahci/io/dma/lba28/short/low
PASS 11 test-crypto-tlssession /qcrypto/tlssession/wildcard2
==8708==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 12 test-crypto-tlssession /qcrypto/tlssession/wildcard3
PASS 46 ahci-test /x86_64/ahci/io/dma/lba28/short/high
PASS 13 test-crypto-tlssession /qcrypto/tlssession/wildcard4
==8714==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 14 test-crypto-tlssession /qcrypto/tlssession/wildcard5
PASS 15 test-crypto-tlssession /qcrypto/tlssession/wildcard6
PASS 16 test-crypto-tlssession /qcrypto/tlssession/cachain
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-qga -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-qga"
PASS 47 ahci-test /x86_64/ahci/io/dma/lba48/simple/zero
==8726==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 48 ahci-test /x86_64/ahci/io/dma/lba48/simple/low
PASS 1 test-qga /qga/sync-delimited
PASS 2 test-qga /qga/sync
---
PASS 15 test-qga /qga/invalid-cmd
PASS 16 test-qga /qga/invalid-args
PASS 17 test-qga /qga/fsfreeze-status
==8732==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 18 test-qga /qga/blacklist
PASS 19 test-qga /qga/config
PASS 20 test-qga /qga/guest-exec
PASS 21 test-qga /qga/guest-exec-invalid
PASS 49 ahci-test /x86_64/ahci/io/dma/lba48/simple/high
==8746==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 22 test-qga /qga/guest-get-osinfo
PASS 23 test-qga /qga/guest-get-host-name
PASS 24 test-qga /qga/guest-get-timezone
---
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-util-filemonitor -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-util-filemonitor"
PASS 1 test-util-filemonitor /util/filemonitor
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-util-sockets -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-util-sockets"
==8760==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-util-sockets /util/socket/is-socket/bad
PASS 2 test-util-sockets /util/socket/is-socket/good
PASS 3 test-util-sockets /socket/fd-pass/name/good
---
PASS 4 test-io-channel-file /io/channel/pipe/sync
PASS 5 test-io-channel-file /io/channel/pipe/async
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-io-channel-tls -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-io-channel-tls"
==8798==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 52 ahci-test /x86_64/ahci/io/dma/lba48/double/high
==8858==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-io-channel-tls /qio/channel/tls/basic
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-io-channel-command -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-io-channel-command"
PASS 1 test-io-channel-command /io/channel/command/fifo/sync
---
PASS 17 test-crypto-pbkdf /crypto/pbkdf/nonrfc/sha384/iter1200
PASS 18 test-crypto-pbkdf /crypto/pbkdf/nonrfc/ripemd160/iter1200
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-crypto-ivgen -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-crypto-ivgen"
==8887==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-crypto-ivgen /crypto/ivgen/plain/1
PASS 2 test-crypto-ivgen /crypto/ivgen/plain/1f2e3d4c
PASS 3 test-crypto-ivgen /crypto/ivgen/plain/1f2e3d4c5b6a7988
---
PASS 1 test-logging /logging/parse_range
PASS 2 test-logging /logging/parse_path
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-replication -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-replication"
==8921==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8919==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-replication /replication/primary/read
PASS 2 test-replication /replication/primary/write
PASS 55 ahci-test /x86_64/ahci/io/dma/lba48/long/high
==8930==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 test-replication /replication/primary/start
PASS 4 test-replication /replication/primary/stop
PASS 5 test-replication /replication/primary/do_checkpoint
PASS 6 test-replication /replication/primary/get_error_all
PASS 56 ahci-test /x86_64/ahci/io/dma/lba48/short/zero
PASS 7 test-replication /replication/secondary/read
==8936==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 8 test-replication /replication/secondary/write
PASS 57 ahci-test /x86_64/ahci/io/dma/lba48/short/low
==8942==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==8921==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffdc0540000; bottom 0x7f53d1dfc000; size: 0x00a9ee744000 (729850068992)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 58 ahci-test /x86_64/ahci/io/dma/lba48/short/high
==8973==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 9 test-replication /replication/secondary/start
PASS 59 ahci-test /x86_64/ahci/io/ncq/simple
==8979==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 60 ahci-test /x86_64/ahci/io/ncq/retry
==8985==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 10 test-replication /replication/secondary/stop
PASS 61 ahci-test /x86_64/ahci/flush/simple
==8991==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 62 ahci-test /x86_64/ahci/flush/retry
==8997==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 11 test-replication /replication/secondary/do_checkpoint
==9002==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 12 test-replication /replication/secondary/get_error_all
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-bufferiszero -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-bufferiszero"
PASS 63 ahci-test /x86_64/ahci/flush/migrate
==9015==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==9020==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 64 ahci-test /x86_64/ahci/migrate/sanity
==9029==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==9035==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 65 ahci-test /x86_64/ahci/migrate/dma/simple
==9044==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==9049==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 66 ahci-test /x86_64/ahci/migrate/dma/halted
==9058==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==9063==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 67 ahci-test /x86_64/ahci/migrate/ncq/simple
==9072==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==9077==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 68 ahci-test /x86_64/ahci/migrate/ncq/halted
==9086==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 69 ahci-test /x86_64/ahci/cdrom/eject
==9091==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 70 ahci-test /x86_64/ahci/cdrom/dma/single
==9097==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 71 ahci-test /x86_64/ahci/cdrom/dma/multi
==9103==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 72 ahci-test /x86_64/ahci/cdrom/pio/single
==9109==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==9109==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffd02809000; bottom 0x7fa1ae3ba000; size: 0x005b5444f000 (392255827968)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 73 ahci-test /x86_64/ahci/cdrom/pio/multi
==9115==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 74 ahci-test /x86_64/ahci/cdrom/pio/bcl
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/hd-geo-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="hd-geo-test" PASS 1 hd-geo-test /x86_64/hd-geo/ide/none
==9129==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 hd-geo-test /x86_64/hd-geo/ide/drive/cd_0
==9135==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 hd-geo-test /x86_64/hd-geo/ide/drive/mbr/blank
==9141==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 hd-geo-test /x86_64/hd-geo/ide/drive/mbr/lba
==9147==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 5 hd-geo-test /x86_64/hd-geo/ide/drive/mbr/chs
PASS 1 test-bufferiszero /cutils/bufferiszero
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/test-uuid -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-uuid"
---
PASS 4 test-uuid /uuid/unparse
PASS 5 test-uuid /uuid/unparse_strdup
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} tests/ptimer-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="ptimer-test"
==9153==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 ptimer-test /ptimer/set_count policy=default
PASS 2 ptimer-test /ptimer/set_limit policy=default
PASS 3 ptimer-test /ptimer/oneshot policy=default
---
PASS 21 test-qgraph /qgraph/test_two_test_same_interface
PASS 22 test-qgraph /qgraph/test_test_in_path
PASS 23 test-qgraph /qgraph/test_double_edge
==9175==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 7 hd-geo-test /x86_64/hd-geo/ide/device/mbr/lba
==9182==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 8 hd-geo-test /x86_64/hd-geo/ide/device/mbr/chs
==9188==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 9 hd-geo-test /x86_64/hd-geo/ide/device/user/chs
==9193==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 10 hd-geo-test /x86_64/hd-geo/ide/device/user/chst
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/boot-order-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="boot-order-test" PASS 1 boot-order-test /x86_64/boot-order/pc
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9261==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 bios-tables-test /x86_64/acpi/piix4
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9267==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 bios-tables-test /x86_64/acpi/q35
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9273==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 bios-tables-test /x86_64/acpi/piix4/bridge
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9279==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 bios-tables-test /x86_64/acpi/piix4/ipmi
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9285==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 5 bios-tables-test /x86_64/acpi/piix4/cpuhp
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9292==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 6 bios-tables-test /x86_64/acpi/piix4/memhp
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9298==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 7 bios-tables-test /x86_64/acpi/piix4/numamem
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9304==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 8 bios-tables-test /x86_64/acpi/piix4/dimmpxm
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9313==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 9 bios-tables-test /x86_64/acpi/q35/bridge
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9319==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 10 bios-tables-test /x86_64/acpi/q35/mmio64
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9325==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 11 bios-tables-test /x86_64/acpi/q35/ipmi
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9331==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 12 bios-tables-test /x86_64/acpi/q35/cpuhp
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9338==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 13 bios-tables-test /x86_64/acpi/q35/memhp
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9344==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 14 bios-tables-test /x86_64/acpi/q35/numamem
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9350==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 15 bios-tables-test /x86_64/acpi/q35/dimmpxm
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/boot-serial-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="boot-serial-test" PASS 1 boot-serial-test /x86_64/boot-serial/isapc
---
PASS 1 i440fx-test /x86_64/i440fx/defaults
PASS 2 i440fx-test /x86_64/i440fx/pam
PASS 3 i440fx-test /x86_64/i440fx/firmware/bios
==9434==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 i440fx-test /x86_64/i440fx/firmware/pflash
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/fw_cfg-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="fw_cfg-test" PASS 1 fw_cfg-test /x86_64/fw_cfg/signature
---
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/drive_del-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="drive_del-test" PASS 1 drive_del-test /x86_64/drive_del/without-dev
PASS 2 drive_del-test /x86_64/drive_del/after_failed_device_add
==9522==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 drive_del-test /x86_64/blockdev/drive_del_device_del
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/wdt_ib700-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="wdt_ib700-test" PASS 1 wdt_ib700-test /x86_64/wdt_ib700/pause
---
PASS 1 usb-hcd-uhci-test /x86_64/uhci/pci/init
PASS 2 usb-hcd-uhci-test /x86_64/uhci/pci/port1
PASS 3 usb-hcd-uhci-test /x86_64/uhci/pci/hotplug
==9717==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 usb-hcd-uhci-test /x86_64/uhci/pci/hotplug/usb-storage
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/usb-hcd-xhci-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="usb-hcd-xhci-test" PASS 1 usb-hcd-xhci-test /x86_64/xhci/pci/init
PASS 2 usb-hcd-xhci-test /x86_64/xhci/pci/hotplug
==9726==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 usb-hcd-xhci-test /x86_64/xhci/pci/hotplug/usb-uas
PASS 4 usb-hcd-xhci-test /x86_64/xhci/pci/hotplug/usb-ccid
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/cpu-plug-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="cpu-plug-test"
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9832==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 vmgenid-test /x86_64/vmgenid/vmgenid/set-guid
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9838==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 vmgenid-test /x86_64/vmgenid/vmgenid/set-guid-auto
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9844==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 vmgenid-test /x86_64/vmgenid/vmgenid/query-monitor
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/tpm-crb-swtpm-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="tpm-crb-swtpm-test" SKIP 1 tpm-crb-swtpm-test /x86_64/tpm/crb-swtpm/test # SKIP swtpm not in PATH or missing --tpm2 support
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9949==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9954==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 migration-test /x86_64/migration/fd_proto
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9962==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9967==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 migration-test /x86_64/migration/postcopy/unix
PASS 5 migration-test /x86_64/migration/postcopy/recovery
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==9997==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==10002==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 6 migration-test /x86_64/migration/precopy/unix
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==10011==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==10016==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 7 migration-test /x86_64/migration/precopy/tcp
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==10025==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==10030==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 8 migration-test /x86_64/migration/xbzrle/unix
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/test-x86-cpuid-compat -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-x86-cpuid-compat" PASS 1 test-x86-cpuid-compat /x86/cpuid/parsing-plus-minus
---
PASS 6 numa-test /x86_64/numa/pc/dynamic/cpu
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))} QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/qmp-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="qmp-test" PASS 1 qmp-test /x86_64/qmp/protocol
==10359==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 qmp-test /x86_64/qmp/oob
PASS 3 qmp-test /x86_64/qmp/preconfig
PASS 4 qmp-test /x86_64/qmp/missing-any-arg
---
qemu-system-x86_64: missing kernel image file name, required by microvm
Broken pipe/tmp/qemu-test/src/tests/libqtest.c:137: kill_qemu() tried to terminate QEMU process but encountered exit status 1
ERROR - too few tests run (expected 7, got 5)
make: *** [/tmp/qemu-test/src/tests/Makefile.include:894: check-qtest-x86_64] Error 1
make: *** Waiting for unfinished jobs....
Traceback (most recent call last):
The full log is available at
http://patchew.org/logs/[email protected]/testing.asan/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to [email protected]
Patchew URL: https://patchew.org/QEMU/[email protected]/
Patchew URL: https://patchew.org/QEMU/[email protected]/
Hi,
This series seems to have some coding style problems. See output below for more information:
Type: series
Message-id: [email protected]
Subject: [Qemu-devel] [PATCH v2 0/4] Introduce the microvm machine type
=== TEST SCRIPT BEGIN ===
#!/bin/bash
git rev-parse base > /dev/null || exit 0
git config --local diff.renamelimit 0
git config --local diff.renames True
git config --local diff.algorithm histogram./scripts/checkpatch.pl --mailback base..
=== TEST SCRIPT END ===
From https://github.com/patchew-project/qemu
* [new tag] patchew/[email protected] -> patchew/[email protected]
Switched to a new branch 'test'
563a11b hw/i386: Introduce the microvm machine type 4f3368c hw/i386: Factorize PVH related functions 36509f1 hw/i386: Add an Intel MPTable generator 0b34207 hw/virtio: Factorize virtio-mmio headers
=== OUTPUT BEGIN ===
1/4 Checking commit 0b342075cead (hw/virtio: Factorize virtio-mmio headers)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating? #66:
new file mode 100644
total: 0 errors, 1 warnings, 105 lines checked
Patch 1/4 has style problems, please review. If any of these errors are false positives report them to the maintainer, see CHECKPATCH in MAINTAINERS.
2/4 Checking commit 36509f1817c3 (hw/i386: Add an Intel MPTable generator)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating? #16:
new file mode 100644
total: 0 errors, 1 warnings, 374 lines checked
Patch 2/4 has style problems, please review. If any of these errors are false positives report them to the maintainer, see CHECKPATCH in MAINTAINERS.
3/4 Checking commit 4f3368cc4a6f (hw/i386: Factorize PVH related functions)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating? #186:
new file mode 100644
ERROR: do not initialise statics to 0 or NULL
#210: FILE: hw/i386/pvh.c:20:
+static size_t pvh_start_addr = 0;
total: 1 errors, 1 warnings, 281 lines checked
Patch 3/4 has style problems, please review. If any of these errors are false positives report them to the maintainer, see CHECKPATCH in MAINTAINERS.
4/4 Checking commit 563a11bbc5bd (hw/i386: Introduce the microvm machine type)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating? #67:
new file mode 100644
total: 0 errors, 1 warnings, 598 lines checked
Patch 4/4 has style problems, please review. If any of these errors are false positives report them to the maintainer, see CHECKPATCH in MAINTAINERS.
=== OUTPUT END ===
Test command exited with code: 1
The full log is available at
http://patchew.org/logs/[email protected]/testing.checkpatch/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to [email protected]