All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 00/22] microvm: add acpi support
@ 2020-05-20 13:19 Gerd Hoffmann
  2020-05-20 13:19 ` [PATCH v3 01/22] microvm: name qboot binary qboot.bin Gerd Hoffmann
                   ` (25 more replies)
  0 siblings, 26 replies; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

I know that not supporting ACPI in microvm is intentional.  If you still
don't want ACPI this is perfectly fine, you can use the usual -no-acpi
switch to toggle ACPI support.

These are the advantages you are going to loose then:

  (1) virtio-mmio device discovery without command line hacks (tweaking
      the command line is a problem when not using direct kernel boot).
  (2) Better IO-APIC support, we can use IRQ lines 16-23.
  (3) ACPI power button (aka powerdown request) works.
  (4) machine poweroff (aka S5 state) works.

Together with seabios patches for virtio-mmio support this allows to
boot standard fedora images (cloud, coreos, workstation live) with the
microvm machine type.

git branch for testing (including updated seabios):
	https://git.kraxel.org/cgit/qemu/log/?h=sirius/microvm

changes in v2:
  * some acpi cleanups are an separate patch series now.
  * switched to hw reduced acpi & generic event device.
  * misc fixes here and there.

changes in v3:
  * depeds on "[PATCH v6 00/16] acpi: i386 tweaks" series.
  * renamed qboot to qboot.bin
  * updated seabios to master branch snapshot.
    - this version boots fine with rtc=off
  * generic event device tweaks (Igor's comments).
  * make SMP work.
  * add RfC patches to turn off acpi by default for microvm.
  * misc fixes here and there.

cheers,
  Gerd

Gerd Hoffmann (22):
  microvm: name qboot binary qboot.bin
  [testing] seabios: update submodule to master snapshot
  [testing] seabios: update config & build rules
  [testing] seabios: update binaries to master snapshot
  acpi: make build_madt() more generic.
  acpi: create acpi-common.c and move madt code
  acpi: madt: skip pci override on pci-less systems.
  acpi: fadt: add hw-reduced sleep register support
  acpi: ged: rename event memory region
  acpi: ged: add control regs
  acpi: ged: add x86 device variant.
  acpi: move acpi_dsdt_add_power_button() to ged
  x86: coldplug cpus
  microvm: use 2G split unconditionally
  microvm: make virtio irq base runtime configurable
  microvm/acpi: add minimal acpi support
  microvm/acpi: add acpi_dsdt_add_virtio() for x86
  microvm/acpi: use GSI 16-23 for virtio
  microvm/acpi: use seabios with acpi=on
  microvm/acpi: disable virtio-mmio cmdline hack
  [RfC] acpi: add per machine type acpi default
  [RfC] acpi: flip default to off for microvm

 hw/i386/acpi-common.h                  |  15 ++
 hw/i386/acpi-microvm.h                 |   6 +
 include/hw/acpi/acpi-defs.h            |   2 +
 include/hw/acpi/generic_event_device.h |  14 +-
 include/hw/i386/microvm.h              |  11 +-
 include/hw/i386/x86.h                  |   1 +
 hw/acpi/aml-build.c                    |   4 +-
 hw/acpi/generic_event_device.c         |  68 ++++++-
 hw/arm/virt-acpi-build.c               |   8 -
 hw/i386/acpi-build.c                   | 126 +------------
 hw/i386/acpi-common.c                  | 156 +++++++++++++++++
 hw/i386/acpi-microvm.c                 | 234 +++++++++++++++++++++++++
 hw/i386/generic_event_device_x86.c     |  36 ++++
 hw/i386/microvm.c                      |  78 ++++++---
 hw/i386/x86.c                          |  32 +++-
 hw/i386/Kconfig                        |   1 +
 hw/i386/Makefile.objs                  |   3 +
 pc-bios/bios-256k.bin                  | Bin 262144 -> 262144 bytes
 pc-bios/bios-microvm.bin               | Bin 65536 -> 131072 bytes
 pc-bios/bios.bin                       | Bin 131072 -> 131072 bytes
 pc-bios/qboot.bin                      | Bin 0 -> 65536 bytes
 roms/Makefile                          |  11 +-
 roms/config.seabios-128k               |   3 +
 roms/config.seabios-microvm            |  26 +++
 roms/seabios                           |   2 +-
 25 files changed, 664 insertions(+), 173 deletions(-)
 create mode 100644 hw/i386/acpi-common.h
 create mode 100644 hw/i386/acpi-microvm.h
 create mode 100644 hw/i386/acpi-common.c
 create mode 100644 hw/i386/acpi-microvm.c
 create mode 100644 hw/i386/generic_event_device_x86.c
 create mode 100644 pc-bios/qboot.bin
 create mode 100644 roms/config.seabios-microvm

-- 
2.18.4



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

* [PATCH v3 01/22] microvm: name qboot binary qboot.bin
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-20 13:25   ` Philippe Mathieu-Daudé
  2020-05-20 13:19 ` [PATCH v3 02/22] [testing] seabios: update submodule to master snapshot Gerd Hoffmann
                   ` (24 subsequent siblings)
  25 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

qboot isn't a bios and shouldnt be named that way.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/i386/microvm.c                       |   4 ++--
 pc-bios/{bios-microvm.bin => qboot.bin} | Bin
 roms/Makefile                           |   6 +++---
 3 files changed, 5 insertions(+), 5 deletions(-)
 rename pc-bios/{bios-microvm.bin => qboot.bin} (100%)

diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index 937db10ae6a5..867d3d652145 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -47,7 +47,7 @@
 #include "kvm_i386.h"
 #include "hw/xen/start_info.h"
 
-#define MICROVM_BIOS_FILENAME "bios-microvm.bin"
+#define MICROVM_QBOOT_FILENAME "qboot.bin"
 
 static void microvm_set_rtc(MicrovmMachineState *mms, ISADevice *s)
 {
@@ -158,7 +158,7 @@ static void microvm_devices_init(MicrovmMachineState *mms)
     }
 
     if (bios_name == NULL) {
-        bios_name = MICROVM_BIOS_FILENAME;
+        bios_name = MICROVM_QBOOT_FILENAME;
     }
     x86_bios_rom_init(get_system_memory(), true);
 }
diff --git a/pc-bios/bios-microvm.bin b/pc-bios/qboot.bin
similarity index 100%
rename from pc-bios/bios-microvm.bin
rename to pc-bios/qboot.bin
diff --git a/roms/Makefile b/roms/Makefile
index f9acf39954dc..d6d4948bfc31 100644
--- a/roms/Makefile
+++ b/roms/Makefile
@@ -68,7 +68,7 @@ default help:
 	@echo "  opensbi64-virt     -- update OpenSBI for 64-bit virt machine"
 	@echo "  opensbi32-sifive_u -- update OpenSBI for 32-bit sifive_u machine"
 	@echo "  opensbi64-sifive_u -- update OpenSBI for 64-bit sifive_u machine"
-	@echo "  bios-microvm       -- update bios-microvm.bin (qboot)"
+	@echo "  qboot              -- update qboot"
 	@echo "  clean              -- delete the files generated by the previous" \
 	                              "build targets"
 
@@ -194,9 +194,9 @@ opensbi64-sifive_u:
 		PLATFORM="sifive/fu540"
 	cp opensbi/build/platform/sifive/fu540/firmware/fw_jump.bin ../pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin
 
-bios-microvm:
+qboot:
 	$(MAKE) -C qboot
-	cp qboot/bios.bin ../pc-bios/bios-microvm.bin
+	cp qboot/bios.bin ../pc-bios/qboot.bin
 
 clean:
 	rm -rf seabios/.config seabios/out seabios/builds
-- 
2.18.4



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

* [PATCH v3 02/22] [testing] seabios: update submodule to master snapshot
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
  2020-05-20 13:19 ` [PATCH v3 01/22] microvm: name qboot binary qboot.bin Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-20 13:19 ` [PATCH v3 03/22] [testing] seabios: update config & build rules Gerd Hoffmann
                   ` (23 subsequent siblings)
  25 siblings, 0 replies; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 roms/seabios | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/roms/seabios b/roms/seabios
index f21b5a4aeb02..b8eda1319544 160000
--- a/roms/seabios
+++ b/roms/seabios
@@ -1 +1 @@
-Subproject commit f21b5a4aeb020f2a5e2c6503f906a9349dd2f069
+Subproject commit b8eda131954452bb5a236100a6572fe8f27d8021
-- 
2.18.4



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

* [PATCH v3 03/22] [testing] seabios: update config & build rules
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
  2020-05-20 13:19 ` [PATCH v3 01/22] microvm: name qboot binary qboot.bin Gerd Hoffmann
  2020-05-20 13:19 ` [PATCH v3 02/22] [testing] seabios: update submodule to master snapshot Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-20 13:19 ` [PATCH v3 04/22] [testing] seabios: update binaries to master snapshot Gerd Hoffmann
                   ` (22 subsequent siblings)
  25 siblings, 0 replies; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 roms/Makefile               |  5 ++++-
 roms/config.seabios-128k    |  3 +++
 roms/config.seabios-microvm | 26 ++++++++++++++++++++++++++
 3 files changed, 33 insertions(+), 1 deletion(-)
 create mode 100644 roms/config.seabios-microvm

diff --git a/roms/Makefile b/roms/Makefile
index d6d4948bfc31..f7cdad027374 100644
--- a/roms/Makefile
+++ b/roms/Makefile
@@ -72,9 +72,12 @@ default help:
 	@echo "  clean              -- delete the files generated by the previous" \
 	                              "build targets"
 
-bios: build-seabios-config-seabios-128k build-seabios-config-seabios-256k
+bios: build-seabios-config-seabios-128k \
+		build-seabios-config-seabios-256k \
+		build-seabios-config-seabios-microvm
 	cp seabios/builds/seabios-128k/bios.bin ../pc-bios/bios.bin
 	cp seabios/builds/seabios-256k/bios.bin ../pc-bios/bios-256k.bin
+	cp seabios/builds/seabios-microvm/bios.bin ../pc-bios/bios-microvm.bin
 
 vgabios seavgabios: $(patsubst %,seavgabios-%,$(vgabios_variants))
 
diff --git a/roms/config.seabios-128k b/roms/config.seabios-128k
index c43912bf9de4..d18c802c46e9 100644
--- a/roms/config.seabios-128k
+++ b/roms/config.seabios-128k
@@ -11,8 +11,11 @@ CONFIG_USB_UAS=n
 CONFIG_SDCARD=n
 CONFIG_TCGBIOS=n
 CONFIG_MPT_SCSI=n
+CONFIG_ESP_SCSI=n
+CONFIG_MEGASAS=n
 CONFIG_PVSCSI=n
 CONFIG_NVME=n
 CONFIG_USE_SMM=n
 CONFIG_VGAHOOKS=n
 CONFIG_HOST_BIOS_GEOMETRY=n
+CONFIG_ACPI_PARSE=n
diff --git a/roms/config.seabios-microvm b/roms/config.seabios-microvm
new file mode 100644
index 000000000000..a253e2edc6ec
--- /dev/null
+++ b/roms/config.seabios-microvm
@@ -0,0 +1,26 @@
+CONFIG_QEMU=y
+CONFIG_QEMU_HARDWARE=y
+CONFIG_PERMIT_UNALIGNED_PCIROM=y
+CONFIG_ROM_SIZE=128
+CONFIG_XEN=n
+CONFIG_BOOTSPLASH=n
+CONFIG_ATA=n
+CONFIG_AHCI=n
+CONFIG_SDCARD=n
+CONFIG_PVSCSI=n
+CONFIG_ESP_SCSI=n
+CONFIG_LSI_SCSI=n
+CONFIG_MEGASAS=n
+CONFIG_MPT_SCSI=n
+CONFIG_FLOPPY=n
+CONFIG_FLASH_FLOPPY=n
+CONFIG_NVME=n
+CONFIG_PS2PORT=n
+CONFIG_USB=n
+CONFIG_LPT=n
+CONFIG_RTC_TIMER=n
+CONFIG_USE_SMM=n
+CONFIG_PMTIMER=n
+CONFIG_TCGBIOS=n
+CONFIG_HARDWARE_IRQ=n
+CONFIG_ACPI_PARSE=y
-- 
2.18.4



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

* [PATCH v3 04/22] [testing] seabios: update binaries to master snapshot
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (2 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 03/22] [testing] seabios: update config & build rules Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-20 13:19 ` [PATCH v3 05/22] acpi: make build_madt() more generic Gerd Hoffmann
                   ` (21 subsequent siblings)
  25 siblings, 0 replies; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 pc-bios/bios-256k.bin    | Bin 262144 -> 262144 bytes
 pc-bios/bios-microvm.bin | Bin 0 -> 131072 bytes
 pc-bios/bios.bin         | Bin 131072 -> 131072 bytes
 3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 pc-bios/bios-microvm.bin

diff --git a/pc-bios/bios-256k.bin b/pc-bios/bios-256k.bin
index 4af7f7d5a91bcc19905e1742b0706e034e2a655c..f3471dafea16d7ce43deade009954afa2e60ab35 100644
GIT binary patch
delta 76435
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
R{qVkFJ$r@q>!)eZ{4Zqo(7ONt

delta 69079
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%0A1$0em
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
MYo}hlOjV};0*8^uZ~y=R

diff --git a/pc-bios/bios-microvm.bin b/pc-bios/bios-microvm.bin
new file mode 100644
index 0000000000000000000000000000000000000000..fff24bec590dbe9b882d6d4c0f8fd5b5c3086ce8
GIT binary patch
literal 131072
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
BpOpXr

literal 0
HcmV?d00001

diff --git a/pc-bios/bios.bin b/pc-bios/bios.bin
index 67874c31b8b0284eb292deb2c9ebc191fa2d73b6..e7ed9c9347333631fb59d125bad3017f5fae4af8 100644
GIT binary patch
delta 45947
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
AO8@`>

delta 46795
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

-- 
2.18.4



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

* [PATCH v3 05/22] acpi: make build_madt() more generic.
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (3 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 04/22] [testing] seabios: update binaries to master snapshot Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-20 13:19 ` [PATCH v3 06/22] acpi: create acpi-common.c and move madt code Gerd Hoffmann
                   ` (20 subsequent siblings)
  25 siblings, 0 replies; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Remove PCMachineState dependency from build_madt().
Pass AcpiDeviceIf as separate argument instead of
depending on PCMachineState->acpi_dev.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
 hw/i386/acpi-build.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index 1afb47b09ee9..4f6418d60b05 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -366,14 +366,13 @@ void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid,
 }
 
 static void
-build_madt(GArray *table_data, BIOSLinker *linker, PCMachineState *pcms)
+build_madt(GArray *table_data, BIOSLinker *linker,
+           X86MachineState *x86ms, AcpiDeviceIf *adev)
 {
-    MachineClass *mc = MACHINE_GET_CLASS(pcms);
-    X86MachineState *x86ms = X86_MACHINE(pcms);
-    const CPUArchIdList *apic_ids = mc->possible_cpu_arch_ids(MACHINE(pcms));
+    MachineClass *mc = MACHINE_GET_CLASS(x86ms);
+    const CPUArchIdList *apic_ids = mc->possible_cpu_arch_ids(MACHINE(x86ms));
     int madt_start = table_data->len;
-    AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(pcms->acpi_dev);
-    AcpiDeviceIf *adev = ACPI_DEVICE_IF(pcms->acpi_dev);
+    AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(adev);
     bool x2apic_mode = false;
 
     AcpiMultipleApicTable *madt;
@@ -2534,7 +2533,8 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine)
     aml_len += tables_blob->len - fadt;
 
     acpi_add_table(table_offsets, tables_blob);
-    build_madt(tables_blob, tables->linker, pcms);
+    build_madt(tables_blob, tables->linker, x86ms,
+               ACPI_DEVICE_IF(pcms->acpi_dev));
 
     vmgenid_dev = find_vmgenid_dev();
     if (vmgenid_dev) {
-- 
2.18.4



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

* [PATCH v3 06/22] acpi: create acpi-common.c and move madt code
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (4 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 05/22] acpi: make build_madt() more generic Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-20 13:31   ` Philippe Mathieu-Daudé
  2020-05-20 13:19 ` [PATCH v3 07/22] acpi: madt: skip pci override on pci-less systems Gerd Hoffmann
                   ` (19 subsequent siblings)
  25 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

We'll need madt support for microvm.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
 hw/i386/acpi-common.h |  14 ++++
 hw/i386/acpi-build.c  | 126 +---------------------------------
 hw/i386/acpi-common.c | 152 ++++++++++++++++++++++++++++++++++++++++++
 hw/i386/Makefile.objs |   1 +
 4 files changed, 170 insertions(+), 123 deletions(-)
 create mode 100644 hw/i386/acpi-common.h
 create mode 100644 hw/i386/acpi-common.c

diff --git a/hw/i386/acpi-common.h b/hw/i386/acpi-common.h
new file mode 100644
index 000000000000..c30e461f1854
--- /dev/null
+++ b/hw/i386/acpi-common.h
@@ -0,0 +1,14 @@
+#ifndef HW_I386_ACPI_COMMON_H
+#define HW_I386_ACPI_COMMON_H
+#include "include/hw/acpi/acpi_dev_interface.h"
+
+#include "include/hw/acpi/bios-linker-loader.h"
+#include "include/hw/i386/x86.h"
+
+/* Default IOAPIC ID */
+#define ACPI_BUILD_IOAPIC_ID 0x0
+
+void acpi_build_madt(GArray *table_data, BIOSLinker *linker,
+                     X86MachineState *x86ms, AcpiDeviceIf *adev);
+
+#endif
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index 4f6418d60b05..c0fdd539a640 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -24,6 +24,7 @@
 #include "qapi/error.h"
 #include "qapi/qmp/qnum.h"
 #include "acpi-build.h"
+#include "acpi-common.h"
 #include "qemu/bitmap.h"
 #include "qemu/error-report.h"
 #include "hw/pci/pci.h"
@@ -89,9 +90,6 @@
 #define ACPI_BUILD_DPRINTF(fmt, ...)
 #endif
 
-/* Default IOAPIC ID */
-#define ACPI_BUILD_IOAPIC_ID 0x0
-
 typedef struct AcpiPmInfo {
     bool s3_disabled;
     bool s4_disabled;
@@ -327,124 +325,6 @@ build_facs(GArray *table_data)
     facs->length = cpu_to_le32(sizeof(*facs));
 }
 
-void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid,
-                       const CPUArchIdList *apic_ids, GArray *entry)
-{
-    uint32_t apic_id = apic_ids->cpus[uid].arch_id;
-
-    /* ACPI spec says that LAPIC entry for non present
-     * CPU may be omitted from MADT or it must be marked
-     * as disabled. However omitting non present CPU from
-     * MADT breaks hotplug on linux. So possible CPUs
-     * should be put in MADT but kept disabled.
-     */
-    if (apic_id < 255) {
-        AcpiMadtProcessorApic *apic = acpi_data_push(entry, sizeof *apic);
-
-        apic->type = ACPI_APIC_PROCESSOR;
-        apic->length = sizeof(*apic);
-        apic->processor_id = uid;
-        apic->local_apic_id = apic_id;
-        if (apic_ids->cpus[uid].cpu != NULL) {
-            apic->flags = cpu_to_le32(1);
-        } else {
-            apic->flags = cpu_to_le32(0);
-        }
-    } else {
-        AcpiMadtProcessorX2Apic *apic = acpi_data_push(entry, sizeof *apic);
-
-        apic->type = ACPI_APIC_LOCAL_X2APIC;
-        apic->length = sizeof(*apic);
-        apic->uid = cpu_to_le32(uid);
-        apic->x2apic_id = cpu_to_le32(apic_id);
-        if (apic_ids->cpus[uid].cpu != NULL) {
-            apic->flags = cpu_to_le32(1);
-        } else {
-            apic->flags = cpu_to_le32(0);
-        }
-    }
-}
-
-static void
-build_madt(GArray *table_data, BIOSLinker *linker,
-           X86MachineState *x86ms, AcpiDeviceIf *adev)
-{
-    MachineClass *mc = MACHINE_GET_CLASS(x86ms);
-    const CPUArchIdList *apic_ids = mc->possible_cpu_arch_ids(MACHINE(x86ms));
-    int madt_start = table_data->len;
-    AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(adev);
-    bool x2apic_mode = false;
-
-    AcpiMultipleApicTable *madt;
-    AcpiMadtIoApic *io_apic;
-    AcpiMadtIntsrcovr *intsrcovr;
-    int i;
-
-    madt = acpi_data_push(table_data, sizeof *madt);
-    madt->local_apic_address = cpu_to_le32(APIC_DEFAULT_ADDRESS);
-    madt->flags = cpu_to_le32(1);
-
-    for (i = 0; i < apic_ids->len; i++) {
-        adevc->madt_cpu(adev, i, apic_ids, table_data);
-        if (apic_ids->cpus[i].arch_id > 254) {
-            x2apic_mode = true;
-        }
-    }
-
-    io_apic = acpi_data_push(table_data, sizeof *io_apic);
-    io_apic->type = ACPI_APIC_IO;
-    io_apic->length = sizeof(*io_apic);
-    io_apic->io_apic_id = ACPI_BUILD_IOAPIC_ID;
-    io_apic->address = cpu_to_le32(IO_APIC_DEFAULT_ADDRESS);
-    io_apic->interrupt = cpu_to_le32(0);
-
-    if (x86ms->apic_xrupt_override) {
-        intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr);
-        intsrcovr->type   = ACPI_APIC_XRUPT_OVERRIDE;
-        intsrcovr->length = sizeof(*intsrcovr);
-        intsrcovr->source = 0;
-        intsrcovr->gsi    = cpu_to_le32(2);
-        intsrcovr->flags  = cpu_to_le16(0); /* conforms to bus specifications */
-    }
-    for (i = 1; i < 16; i++) {
-#define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11))
-        if (!(ACPI_BUILD_PCI_IRQS & (1 << i))) {
-            /* No need for a INT source override structure. */
-            continue;
-        }
-        intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr);
-        intsrcovr->type   = ACPI_APIC_XRUPT_OVERRIDE;
-        intsrcovr->length = sizeof(*intsrcovr);
-        intsrcovr->source = i;
-        intsrcovr->gsi    = cpu_to_le32(i);
-        intsrcovr->flags  = cpu_to_le16(0xd); /* active high, level triggered */
-    }
-
-    if (x2apic_mode) {
-        AcpiMadtLocalX2ApicNmi *local_nmi;
-
-        local_nmi = acpi_data_push(table_data, sizeof *local_nmi);
-        local_nmi->type   = ACPI_APIC_LOCAL_X2APIC_NMI;
-        local_nmi->length = sizeof(*local_nmi);
-        local_nmi->uid    = 0xFFFFFFFF; /* all processors */
-        local_nmi->flags  = cpu_to_le16(0);
-        local_nmi->lint   = 1; /* ACPI_LINT1 */
-    } else {
-        AcpiMadtLocalNmi *local_nmi;
-
-        local_nmi = acpi_data_push(table_data, sizeof *local_nmi);
-        local_nmi->type         = ACPI_APIC_LOCAL_NMI;
-        local_nmi->length       = sizeof(*local_nmi);
-        local_nmi->processor_id = 0xff; /* all processors */
-        local_nmi->flags        = cpu_to_le16(0);
-        local_nmi->lint         = 1; /* ACPI_LINT1 */
-    }
-
-    build_header(linker, table_data,
-                 (void *)(table_data->data + madt_start), "APIC",
-                 table_data->len - madt_start, 1, NULL, NULL);
-}
-
 static void build_append_pcihp_notify_entry(Aml *method, int slot)
 {
     Aml *if_ctx;
@@ -2533,8 +2413,8 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine)
     aml_len += tables_blob->len - fadt;
 
     acpi_add_table(table_offsets, tables_blob);
-    build_madt(tables_blob, tables->linker, x86ms,
-               ACPI_DEVICE_IF(pcms->acpi_dev));
+    acpi_build_madt(tables_blob, tables->linker, x86ms,
+                    ACPI_DEVICE_IF(pcms->acpi_dev));
 
     vmgenid_dev = find_vmgenid_dev();
     if (vmgenid_dev) {
diff --git a/hw/i386/acpi-common.c b/hw/i386/acpi-common.c
new file mode 100644
index 000000000000..5caca16a0b59
--- /dev/null
+++ b/hw/i386/acpi-common.c
@@ -0,0 +1,152 @@
+/* Support for generating ACPI tables and passing them to Guests
+ *
+ * Copyright (C) 2008-2010  Kevin O'Connor <kevin@koconnor.net>
+ * Copyright (C) 2006 Fabrice Bellard
+ * Copyright (C) 2013 Red Hat Inc
+ *
+ * Author: Michael S. Tsirkin <mst@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * This program is distributed in the hope that 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 "qapi/error.h"
+
+#include "exec/memory.h"
+#include "hw/acpi/acpi.h"
+#include "hw/acpi/aml-build.h"
+#include "hw/acpi/utils.h"
+#include "hw/i386/pc.h"
+#include "target/i386/cpu.h"
+
+#include "acpi-build.h"
+#include "acpi-common.h"
+
+void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid,
+                       const CPUArchIdList *apic_ids, GArray *entry)
+{
+    uint32_t apic_id = apic_ids->cpus[uid].arch_id;
+
+    /* ACPI spec says that LAPIC entry for non present
+     * CPU may be omitted from MADT or it must be marked
+     * as disabled. However omitting non present CPU from
+     * MADT breaks hotplug on linux. So possible CPUs
+     * should be put in MADT but kept disabled.
+     */
+    if (apic_id < 255) {
+        AcpiMadtProcessorApic *apic = acpi_data_push(entry, sizeof *apic);
+
+        apic->type = ACPI_APIC_PROCESSOR;
+        apic->length = sizeof(*apic);
+        apic->processor_id = uid;
+        apic->local_apic_id = apic_id;
+        if (apic_ids->cpus[uid].cpu != NULL) {
+            apic->flags = cpu_to_le32(1);
+        } else {
+            apic->flags = cpu_to_le32(0);
+        }
+    } else {
+        AcpiMadtProcessorX2Apic *apic = acpi_data_push(entry, sizeof *apic);
+
+        apic->type = ACPI_APIC_LOCAL_X2APIC;
+        apic->length = sizeof(*apic);
+        apic->uid = cpu_to_le32(uid);
+        apic->x2apic_id = cpu_to_le32(apic_id);
+        if (apic_ids->cpus[uid].cpu != NULL) {
+            apic->flags = cpu_to_le32(1);
+        } else {
+            apic->flags = cpu_to_le32(0);
+        }
+    }
+}
+
+void acpi_build_madt(GArray *table_data, BIOSLinker *linker,
+                     X86MachineState *x86ms, AcpiDeviceIf *adev)
+{
+    MachineClass *mc = MACHINE_GET_CLASS(x86ms);
+    const CPUArchIdList *apic_ids = mc->possible_cpu_arch_ids(MACHINE(x86ms));
+    int madt_start = table_data->len;
+    AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(adev);
+    bool x2apic_mode = false;
+
+    AcpiMultipleApicTable *madt;
+    AcpiMadtIoApic *io_apic;
+    AcpiMadtIntsrcovr *intsrcovr;
+    int i;
+
+    madt = acpi_data_push(table_data, sizeof *madt);
+    madt->local_apic_address = cpu_to_le32(APIC_DEFAULT_ADDRESS);
+    madt->flags = cpu_to_le32(1);
+
+    for (i = 0; i < apic_ids->len; i++) {
+        adevc->madt_cpu(adev, i, apic_ids, table_data);
+        if (apic_ids->cpus[i].arch_id > 254) {
+            x2apic_mode = true;
+        }
+    }
+
+    io_apic = acpi_data_push(table_data, sizeof *io_apic);
+    io_apic->type = ACPI_APIC_IO;
+    io_apic->length = sizeof(*io_apic);
+    io_apic->io_apic_id = ACPI_BUILD_IOAPIC_ID;
+    io_apic->address = cpu_to_le32(IO_APIC_DEFAULT_ADDRESS);
+    io_apic->interrupt = cpu_to_le32(0);
+
+    if (x86ms->apic_xrupt_override) {
+        intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr);
+        intsrcovr->type   = ACPI_APIC_XRUPT_OVERRIDE;
+        intsrcovr->length = sizeof(*intsrcovr);
+        intsrcovr->source = 0;
+        intsrcovr->gsi    = cpu_to_le32(2);
+        intsrcovr->flags  = cpu_to_le16(0); /* conforms to bus specifications */
+    }
+    for (i = 1; i < 16; i++) {
+#define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11))
+        if (!(ACPI_BUILD_PCI_IRQS & (1 << i))) {
+            /* No need for a INT source override structure. */
+            continue;
+        }
+        intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr);
+        intsrcovr->type   = ACPI_APIC_XRUPT_OVERRIDE;
+        intsrcovr->length = sizeof(*intsrcovr);
+        intsrcovr->source = i;
+        intsrcovr->gsi    = cpu_to_le32(i);
+        intsrcovr->flags  = cpu_to_le16(0xd); /* active high, level triggered */
+    }
+
+    if (x2apic_mode) {
+        AcpiMadtLocalX2ApicNmi *local_nmi;
+
+        local_nmi = acpi_data_push(table_data, sizeof *local_nmi);
+        local_nmi->type   = ACPI_APIC_LOCAL_X2APIC_NMI;
+        local_nmi->length = sizeof(*local_nmi);
+        local_nmi->uid    = 0xFFFFFFFF; /* all processors */
+        local_nmi->flags  = cpu_to_le16(0);
+        local_nmi->lint   = 1; /* ACPI_LINT1 */
+    } else {
+        AcpiMadtLocalNmi *local_nmi;
+
+        local_nmi = acpi_data_push(table_data, sizeof *local_nmi);
+        local_nmi->type         = ACPI_APIC_LOCAL_NMI;
+        local_nmi->length       = sizeof(*local_nmi);
+        local_nmi->processor_id = 0xff; /* all processors */
+        local_nmi->flags        = cpu_to_le16(0);
+        local_nmi->lint         = 1; /* ACPI_LINT1 */
+    }
+
+    build_header(linker, table_data,
+                 (void *)(table_data->data + madt_start), "APIC",
+                 table_data->len - madt_start, 1, NULL, NULL);
+}
+
diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs
index 8ce1b265335b..6abc74551a72 100644
--- a/hw/i386/Makefile.objs
+++ b/hw/i386/Makefile.objs
@@ -16,4 +16,5 @@ obj-$(CONFIG_VMMOUSE) += vmmouse.o
 obj-$(CONFIG_PC) += port92.o
 
 obj-y += kvmvapic.o
+obj-$(CONFIG_ACPI) += acpi-common.o
 obj-$(CONFIG_PC) += acpi-build.o
-- 
2.18.4



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

* [PATCH v3 07/22] acpi: madt: skip pci override on pci-less systems.
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (5 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 06/22] acpi: create acpi-common.c and move madt code Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-20 13:19 ` [PATCH v3 08/22] acpi: fadt: add hw-reduced sleep register support Gerd Hoffmann
                   ` (18 subsequent siblings)
  25 siblings, 0 replies; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Needed for microvm.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
 hw/i386/acpi-common.h |  3 ++-
 hw/i386/acpi-build.c  |  2 +-
 hw/i386/acpi-common.c | 26 +++++++++++++++-----------
 3 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/hw/i386/acpi-common.h b/hw/i386/acpi-common.h
index c30e461f1854..9cac18dddf5b 100644
--- a/hw/i386/acpi-common.h
+++ b/hw/i386/acpi-common.h
@@ -9,6 +9,7 @@
 #define ACPI_BUILD_IOAPIC_ID 0x0
 
 void acpi_build_madt(GArray *table_data, BIOSLinker *linker,
-                     X86MachineState *x86ms, AcpiDeviceIf *adev);
+                     X86MachineState *x86ms, AcpiDeviceIf *adev,
+                     bool has_pci);
 
 #endif
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index c0fdd539a640..583bb58d6f0c 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -2414,7 +2414,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine)
 
     acpi_add_table(table_offsets, tables_blob);
     acpi_build_madt(tables_blob, tables->linker, x86ms,
-                    ACPI_DEVICE_IF(pcms->acpi_dev));
+                    ACPI_DEVICE_IF(pcms->acpi_dev), true);
 
     vmgenid_dev = find_vmgenid_dev();
     if (vmgenid_dev) {
diff --git a/hw/i386/acpi-common.c b/hw/i386/acpi-common.c
index 5caca16a0b59..ab9b00581a15 100644
--- a/hw/i386/acpi-common.c
+++ b/hw/i386/acpi-common.c
@@ -72,7 +72,8 @@ void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid,
 }
 
 void acpi_build_madt(GArray *table_data, BIOSLinker *linker,
-                     X86MachineState *x86ms, AcpiDeviceIf *adev)
+                     X86MachineState *x86ms, AcpiDeviceIf *adev,
+                     bool has_pci)
 {
     MachineClass *mc = MACHINE_GET_CLASS(x86ms);
     const CPUArchIdList *apic_ids = mc->possible_cpu_arch_ids(MACHINE(x86ms));
@@ -111,18 +112,21 @@ void acpi_build_madt(GArray *table_data, BIOSLinker *linker,
         intsrcovr->gsi    = cpu_to_le32(2);
         intsrcovr->flags  = cpu_to_le16(0); /* conforms to bus specifications */
     }
-    for (i = 1; i < 16; i++) {
+
+    if (has_pci) {
+        for (i = 1; i < 16; i++) {
 #define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11))
-        if (!(ACPI_BUILD_PCI_IRQS & (1 << i))) {
-            /* No need for a INT source override structure. */
-            continue;
+            if (!(ACPI_BUILD_PCI_IRQS & (1 << i))) {
+                /* No need for a INT source override structure. */
+                continue;
+            }
+            intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr);
+            intsrcovr->type   = ACPI_APIC_XRUPT_OVERRIDE;
+            intsrcovr->length = sizeof(*intsrcovr);
+            intsrcovr->source = i;
+            intsrcovr->gsi    = cpu_to_le32(i);
+            intsrcovr->flags  = cpu_to_le16(0xd); /* active high, level triggered */
         }
-        intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr);
-        intsrcovr->type   = ACPI_APIC_XRUPT_OVERRIDE;
-        intsrcovr->length = sizeof(*intsrcovr);
-        intsrcovr->source = i;
-        intsrcovr->gsi    = cpu_to_le32(i);
-        intsrcovr->flags  = cpu_to_le16(0xd); /* active high, level triggered */
     }
 
     if (x2apic_mode) {
-- 
2.18.4



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

* [PATCH v3 08/22] acpi: fadt: add hw-reduced sleep register support
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (6 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 07/22] acpi: madt: skip pci override on pci-less systems Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-20 13:19 ` [PATCH v3 09/22] acpi: ged: rename event memory region Gerd Hoffmann
                   ` (17 subsequent siblings)
  25 siblings, 0 replies; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Add fields to struct AcpiFadtData and update build_fadt() to properly
generate sleep register entries.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
 include/hw/acpi/acpi-defs.h | 2 ++
 hw/acpi/aml-build.c         | 4 ++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/include/hw/acpi/acpi-defs.h b/include/hw/acpi/acpi-defs.h
index c13327fa7867..3be9ab504968 100644
--- a/include/hw/acpi/acpi-defs.h
+++ b/include/hw/acpi/acpi-defs.h
@@ -88,6 +88,8 @@ typedef struct AcpiFadtData {
     struct AcpiGenericAddress pm_tmr;    /* PM_TMR_BLK */
     struct AcpiGenericAddress gpe0_blk;  /* GPE0_BLK */
     struct AcpiGenericAddress reset_reg; /* RESET_REG */
+    struct AcpiGenericAddress sleep_ctl; /* SLEEP_CONTROL_REG */
+    struct AcpiGenericAddress sleep_sts; /* SLEEP_STATUS_REG */
     uint8_t reset_val;         /* RESET_VALUE */
     uint8_t  rev;              /* Revision */
     uint32_t flags;            /* Flags */
diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
index 3681ec6e3d88..a894e2581fa2 100644
--- a/hw/acpi/aml-build.c
+++ b/hw/acpi/aml-build.c
@@ -1865,9 +1865,9 @@ void build_fadt(GArray *tbl, BIOSLinker *linker, const AcpiFadtData *f,
     }
 
     /* SLEEP_CONTROL_REG */
-    build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0);
+    build_append_gas_from_struct(tbl, &f->sleep_ctl);
     /* SLEEP_STATUS_REG */
-    build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0);
+    build_append_gas_from_struct(tbl, &f->sleep_sts);
 
     /* TODO: extra fields need to be added to support revisions above rev5 */
     assert(f->rev == 5);
-- 
2.18.4



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

* [PATCH v3 09/22] acpi: ged: rename event memory region
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (7 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 08/22] acpi: fadt: add hw-reduced sleep register support Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-20 13:33   ` Philippe Mathieu-Daudé
  2020-05-21  7:58   ` Igor Mammedow
  2020-05-20 13:19 ` [PATCH v3 10/22] acpi: ged: add control regs Gerd Hoffmann
                   ` (16 subsequent siblings)
  25 siblings, 2 replies; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Rename memory region and callbacks and ops to carry "evt" in the name
because a second region will be added shortly.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/hw/acpi/generic_event_device.h |  2 +-
 hw/acpi/generic_event_device.c         | 16 ++++++++--------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h
index 83917de02425..90a9180db572 100644
--- a/include/hw/acpi/generic_event_device.h
+++ b/include/hw/acpi/generic_event_device.h
@@ -86,7 +86,7 @@
 #define ACPI_GED_NVDIMM_HOTPLUG_EVT 0x4
 
 typedef struct GEDState {
-    MemoryRegion io;
+    MemoryRegion evt;
     uint32_t     sel;
 } GEDState;
 
diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c
index b1cbdd86b66c..1cb34111e59a 100644
--- a/hw/acpi/generic_event_device.c
+++ b/hw/acpi/generic_event_device.c
@@ -142,7 +142,7 @@ void build_ged_aml(Aml *table, const char *name, HotplugHandler *hotplug_dev,
 }
 
 /* Memory read by the GED _EVT AML dynamic method */
-static uint64_t ged_read(void *opaque, hwaddr addr, unsigned size)
+static uint64_t ged_evt_read(void *opaque, hwaddr addr, unsigned size)
 {
     uint64_t val = 0;
     GEDState *ged_st = opaque;
@@ -161,14 +161,14 @@ static uint64_t ged_read(void *opaque, hwaddr addr, unsigned size)
 }
 
 /* Nothing is expected to be written to the GED memory region */
-static void ged_write(void *opaque, hwaddr addr, uint64_t data,
-                      unsigned int size)
+static void ged_evt_write(void *opaque, hwaddr addr, uint64_t data,
+                          unsigned int size)
 {
 }
 
-static const MemoryRegionOps ged_ops = {
-    .read = ged_read,
-    .write = ged_write,
+static const MemoryRegionOps ged_evt_ops = {
+    .read = ged_evt_read,
+    .write = ged_evt_write,
     .endianness = DEVICE_LITTLE_ENDIAN,
     .valid = {
         .min_access_size = 4,
@@ -287,9 +287,9 @@ static void acpi_ged_initfn(Object *obj)
     SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
     GEDState *ged_st = &s->ged_state;
 
-    memory_region_init_io(&ged_st->io, obj, &ged_ops, ged_st,
+    memory_region_init_io(&ged_st->evt, obj, &ged_evt_ops, ged_st,
                           TYPE_ACPI_GED, ACPI_GED_EVT_SEL_LEN);
-    sysbus_init_mmio(sbd, &ged_st->io);
+    sysbus_init_mmio(sbd, &ged_st->evt);
 
     sysbus_init_irq(sbd, &s->irq);
 
-- 
2.18.4



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

* [PATCH v3 10/22] acpi: ged: add control regs
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (8 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 09/22] acpi: ged: rename event memory region Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-21  8:58   ` Igor Mammedov
  2020-05-20 13:19 ` [PATCH v3 11/22] acpi: ged: add x86 device variant Gerd Hoffmann
                   ` (15 subsequent siblings)
  25 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Add control regs (sleep, reset) for hw-reduced acpi.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/hw/acpi/generic_event_device.h |  7 ++++
 hw/acpi/generic_event_device.c         | 44 ++++++++++++++++++++++++++
 2 files changed, 51 insertions(+)

diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h
index 90a9180db572..474c92198080 100644
--- a/include/hw/acpi/generic_event_device.h
+++ b/include/hw/acpi/generic_event_device.h
@@ -72,6 +72,12 @@
 #define ACPI_GED_EVT_SEL_OFFSET    0x0
 #define ACPI_GED_EVT_SEL_LEN       0x4
 
+#define ACPI_GED_REG_SLEEP_CTL     0x00
+#define ACPI_GED_REG_SLEEP_STS     0x01
+#define ACPI_GED_REG_RESET         0x02
+#define   ACPI_GED_RESET_VALUE     0x42
+#define ACPI_GED_REG_COUNT         0x03
+
 #define GED_DEVICE      "GED"
 #define AML_GED_EVT_REG "EREG"
 #define AML_GED_EVT_SEL "ESEL"
@@ -87,6 +93,7 @@
 
 typedef struct GEDState {
     MemoryRegion evt;
+    MemoryRegion regs;
     uint32_t     sel;
 } GEDState;
 
diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c
index 1cb34111e59a..3072fb4ab32b 100644
--- a/hw/acpi/generic_event_device.c
+++ b/hw/acpi/generic_event_device.c
@@ -20,6 +20,7 @@
 #include "hw/qdev-properties.h"
 #include "migration/vmstate.h"
 #include "qemu/error-report.h"
+#include "sysemu/runstate.h"
 
 static const uint32_t ged_supported_events[] = {
     ACPI_GED_MEM_HOTPLUG_EVT,
@@ -176,6 +177,45 @@ static const MemoryRegionOps ged_evt_ops = {
     },
 };
 
+static uint64_t ged_regs_read(void *opaque, hwaddr addr, unsigned size)
+{
+    return 0;
+}
+
+static void ged_regs_write(void *opaque, hwaddr addr, uint64_t data,
+                           unsigned int size)
+{
+    bool slp_en;
+    int slp_typ;
+
+    switch (addr) {
+    case ACPI_GED_REG_SLEEP_CTL:
+        slp_typ = (data >> 2) & 0x07;
+        slp_en  = (data >> 5) & 0x01;
+        if (slp_en && slp_typ == 5) {
+            qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
+        }
+        return;
+    case ACPI_GED_REG_SLEEP_STS:
+        return;
+    case ACPI_GED_REG_RESET:
+        if (data == ACPI_GED_RESET_VALUE) {
+            qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
+        }
+        return;
+    }
+}
+
+static const MemoryRegionOps ged_regs_ops = {
+    .read = ged_regs_read,
+    .write = ged_regs_write,
+    .endianness = DEVICE_LITTLE_ENDIAN,
+    .valid = {
+        .min_access_size = 1,
+        .max_access_size = 1,
+    },
+};
+
 static void acpi_ged_device_plug_cb(HotplugHandler *hotplug_dev,
                                     DeviceState *dev, Error **errp)
 {
@@ -305,6 +345,10 @@ static void acpi_ged_initfn(Object *obj)
      sysbus_init_mmio(sbd, &s->container_memhp);
      acpi_memory_hotplug_init(&s->container_memhp, OBJECT(dev),
                               &s->memhp_state, 0);
+
+    memory_region_init_io(&ged_st->regs, obj, &ged_regs_ops, ged_st,
+                          TYPE_ACPI_GED "-regs", ACPI_GED_REG_COUNT);
+    sysbus_init_mmio(sbd, &ged_st->regs);
 }
 
 static void acpi_ged_class_init(ObjectClass *class, void *data)
-- 
2.18.4



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

* [PATCH v3 11/22] acpi: ged: add x86 device variant.
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (9 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 10/22] acpi: ged: add control regs Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-21  9:01   ` Igor Mammedov
  2020-05-20 13:19 ` [PATCH v3 12/22] acpi: move acpi_dsdt_add_power_button() to ged Gerd Hoffmann
                   ` (14 subsequent siblings)
  25 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Set AcpiDeviceIfClass->madt_cpu,
otherwise identical to TYPE_ACPI_GED.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/hw/acpi/generic_event_device.h |  4 +++
 hw/i386/generic_event_device_x86.c     | 36 ++++++++++++++++++++++++++
 hw/i386/Makefile.objs                  |  1 +
 3 files changed, 41 insertions(+)
 create mode 100644 hw/i386/generic_event_device_x86.c

diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h
index 474c92198080..9687cb524258 100644
--- a/include/hw/acpi/generic_event_device.h
+++ b/include/hw/acpi/generic_event_device.h
@@ -69,6 +69,10 @@
 #define ACPI_GED(obj) \
     OBJECT_CHECK(AcpiGedState, (obj), TYPE_ACPI_GED)
 
+#define TYPE_ACPI_GED_X86 "acpi-ged-x86"
+#define ACPI_GED_X86(obj) \
+    OBJECT_CHECK(AcpiGedX86State, (obj), TYPE_ACPI_GED_X86)
+
 #define ACPI_GED_EVT_SEL_OFFSET    0x0
 #define ACPI_GED_EVT_SEL_LEN       0x4
 
diff --git a/hw/i386/generic_event_device_x86.c b/hw/i386/generic_event_device_x86.c
new file mode 100644
index 000000000000..e26fb02a2ef6
--- /dev/null
+++ b/hw/i386/generic_event_device_x86.c
@@ -0,0 +1,36 @@
+/*
+ * x86 variant of the generic event device for hw reduced acpi
+ *
+ * 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.
+ */
+
+#include "qemu/osdep.h"
+#include "hw/acpi/generic_event_device.h"
+#include "hw/i386/pc.h"
+
+static void acpi_ged_x86_class_init(ObjectClass *class, void *data)
+{
+    AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_CLASS(class);
+
+    adevc->madt_cpu = pc_madt_cpu_entry;
+}
+
+static const TypeInfo acpi_ged_x86_info = {
+    .name          = TYPE_ACPI_GED_X86,
+    .parent        = TYPE_ACPI_GED,
+    .class_init    = acpi_ged_x86_class_init,
+    .interfaces = (InterfaceInfo[]) {
+        { TYPE_HOTPLUG_HANDLER },
+        { TYPE_ACPI_DEVICE_IF },
+        { }
+    }
+};
+
+static void acpi_ged_x86_register_types(void)
+{
+    type_register_static(&acpi_ged_x86_info);
+}
+
+type_init(acpi_ged_x86_register_types)
diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs
index 6abc74551a72..622739305882 100644
--- a/hw/i386/Makefile.objs
+++ b/hw/i386/Makefile.objs
@@ -17,4 +17,5 @@ obj-$(CONFIG_PC) += port92.o
 
 obj-y += kvmvapic.o
 obj-$(CONFIG_ACPI) += acpi-common.o
+obj-$(CONFIG_ACPI_HW_REDUCED) += generic_event_device_x86.o
 obj-$(CONFIG_PC) += acpi-build.o
-- 
2.18.4



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

* [PATCH v3 12/22] acpi: move acpi_dsdt_add_power_button() to ged
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (10 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 11/22] acpi: ged: add x86 device variant Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-20 13:32   ` Philippe Mathieu-Daudé
  2020-05-21  9:03   ` Igor Mammedov
  2020-05-20 13:19 ` [PATCH v3 13/22] x86: coldplug cpus Gerd Hoffmann
                   ` (13 subsequent siblings)
  25 siblings, 2 replies; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Allow reuse for microvm.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/hw/acpi/generic_event_device.h | 1 +
 hw/acpi/generic_event_device.c         | 8 ++++++++
 hw/arm/virt-acpi-build.c               | 8 --------
 3 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h
index 9687cb524258..ebed1ffe4231 100644
--- a/include/hw/acpi/generic_event_device.h
+++ b/include/hw/acpi/generic_event_device.h
@@ -113,5 +113,6 @@ typedef struct AcpiGedState {
 
 void build_ged_aml(Aml *table, const char* name, HotplugHandler *hotplug_dev,
                    uint32_t ged_irq, AmlRegionSpace rs, hwaddr ged_base);
+void acpi_dsdt_add_power_button(Aml *scope);
 
 #endif
diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c
index 3072fb4ab32b..cde50da5b3ca 100644
--- a/hw/acpi/generic_event_device.c
+++ b/hw/acpi/generic_event_device.c
@@ -142,6 +142,14 @@ void build_ged_aml(Aml *table, const char *name, HotplugHandler *hotplug_dev,
     aml_append(table, dev);
 }
 
+void acpi_dsdt_add_power_button(Aml *scope)
+{
+    Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE);
+    aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C")));
+    aml_append(dev, aml_name_decl("_UID", aml_int(0)));
+    aml_append(scope, dev);
+}
+
 /* Memory read by the GED _EVT AML dynamic method */
 static uint64_t ged_evt_read(void *opaque, hwaddr addr, unsigned size)
 {
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index 1b0a584c7b62..49eacc622219 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -354,14 +354,6 @@ static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry *gpio_memmap,
     aml_append(scope, dev);
 }
 
-static void acpi_dsdt_add_power_button(Aml *scope)
-{
-    Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE);
-    aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C")));
-    aml_append(dev, aml_name_decl("_UID", aml_int(0)));
-    aml_append(scope, dev);
-}
-
 static void
 build_iort(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
 {
-- 
2.18.4



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

* [PATCH v3 13/22] x86: coldplug cpus
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (11 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 12/22] acpi: move acpi_dsdt_add_power_button() to ged Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-20 14:07   ` Igor Mammedov
  2020-05-20 13:19 ` [PATCH v3 14/22] microvm: use 2G split unconditionally Gerd Hoffmann
                   ` (12 subsequent siblings)
  25 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

microvm needs this, for correct madt creation
(make sure enable bit is set).

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/i386/x86.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/hw/i386/x86.c b/hw/i386/x86.c
index 7a3bc7ab6639..ac7a0a958781 100644
--- a/hw/i386/x86.c
+++ b/hw/i386/x86.c
@@ -118,6 +118,7 @@ uint32_t x86_cpu_apic_id_from_index(X86MachineState *x86ms,
 
 void x86_cpu_new(X86MachineState *x86ms, int64_t apic_id, Error **errp)
 {
+    MachineClass *mc = MACHINE_GET_CLASS(x86ms);
     Object *cpu = NULL;
     Error *local_err = NULL;
 
@@ -126,6 +127,16 @@ void x86_cpu_new(X86MachineState *x86ms, int64_t apic_id, Error **errp)
     object_property_set_uint(cpu, apic_id, "apic-id", &local_err);
     object_property_set_bool(cpu, true, "realized", &local_err);
 
+    if (!mc->has_hotpluggable_cpus) {
+        /* coldplug cpu */
+        MachineState *ms = MACHINE(x86ms);
+        int i = 0;
+        while (ms->possible_cpus->cpus[i].arch_id != apic_id) {
+            i++;
+        }
+        ms->possible_cpus->cpus[i].cpu = cpu;
+    }
+
     object_unref(cpu);
     error_propagate(errp, local_err);
 }
-- 
2.18.4



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

* [PATCH v3 14/22] microvm: use 2G split unconditionally
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (12 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 13/22] x86: coldplug cpus Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-20 13:34   ` Philippe Mathieu-Daudé
                     ` (2 more replies)
  2020-05-20 13:19 ` [PATCH v3 15/22] microvm: make virtio irq base runtime configurable Gerd Hoffmann
                   ` (11 subsequent siblings)
  25 siblings, 3 replies; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Looks like the logiv was copied over from q35.

q35 does this for backward compatibility, there is no reason to do this
on microvm though.  So split @ 2G unconditionally.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/i386/microvm.c | 16 +---------------
 1 file changed, 1 insertion(+), 15 deletions(-)

diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index 867d3d652145..b8f0d3283758 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -170,23 +170,9 @@ static void microvm_memory_init(MicrovmMachineState *mms)
     MemoryRegion *ram_below_4g, *ram_above_4g;
     MemoryRegion *system_memory = get_system_memory();
     FWCfgState *fw_cfg;
-    ram_addr_t lowmem;
+    ram_addr_t lowmem = 0x80000000; /* 2G */
     int i;
 
-    /*
-     * Check whether RAM fits below 4G (leaving 1/2 GByte for IO memory
-     * and 256 Mbytes for PCI Express Enhanced Configuration Access Mapping
-     * also known as MMCFG).
-     * If it doesn't, we need to split it in chunks below and above 4G.
-     * In any case, try to make sure that guest addresses aligned at
-     * 1G boundaries get mapped to host addresses aligned at 1G boundaries.
-     */
-    if (machine->ram_size >= 0xb0000000) {
-        lowmem = 0x80000000;
-    } else {
-        lowmem = 0xb0000000;
-    }
-
     /*
      * Handle the machine opt max-ram-below-4g.  It is basically doing
      * min(qemu limit, user limit).
-- 
2.18.4



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

* [PATCH v3 15/22] microvm: make virtio irq base runtime configurable
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (13 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 14/22] microvm: use 2G split unconditionally Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-20 13:29   ` Philippe Mathieu-Daudé
  2020-05-20 13:19 ` [PATCH v3 16/22] microvm/acpi: add minimal acpi support Gerd Hoffmann
                   ` (10 subsequent siblings)
  25 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Sergio Lopez <slp@redhat.com>
---
 include/hw/i386/microvm.h |  2 +-
 hw/i386/microvm.c         | 11 +++++++----
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h
index ba68d1f22bb3..2709306c4016 100644
--- a/include/hw/i386/microvm.h
+++ b/include/hw/i386/microvm.h
@@ -27,7 +27,6 @@
 
 /* Platform virtio definitions */
 #define VIRTIO_MMIO_BASE      0xc0000000
-#define VIRTIO_IRQ_BASE       5
 #define VIRTIO_NUM_TRANSPORTS 8
 #define VIRTIO_CMDLINE_MAXLEN 64
 
@@ -57,6 +56,7 @@ typedef struct {
     bool auto_kernel_cmdline;
 
     /* Machine state */
+    uint32_t virtio_irq_base;
     bool kernel_cmdline_fixed;
 } MicrovmMachineState;
 
diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index b8f0d3283758..ea4460714a99 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -121,10 +121,11 @@ static void microvm_devices_init(MicrovmMachineState *mms)
 
     kvmclock_create();
 
+    mms->virtio_irq_base = 8;
     for (i = 0; i < VIRTIO_NUM_TRANSPORTS; i++) {
         sysbus_create_simple("virtio-mmio",
                              VIRTIO_MMIO_BASE + i * 512,
-                             x86ms->gsi[VIRTIO_IRQ_BASE + i]);
+                             x86ms->gsi[mms->virtio_irq_base + i]);
     }
 
     /* Optional and legacy devices */
@@ -246,7 +247,7 @@ static void microvm_memory_init(MicrovmMachineState *mms)
     x86ms->ioapic_as = &address_space_memory;
 }
 
-static gchar *microvm_get_mmio_cmdline(gchar *name)
+static gchar *microvm_get_mmio_cmdline(gchar *name, uint32_t virtio_irq_base)
 {
     gchar *cmdline;
     gchar *separator;
@@ -266,7 +267,7 @@ static gchar *microvm_get_mmio_cmdline(gchar *name)
     ret = g_snprintf(cmdline, VIRTIO_CMDLINE_MAXLEN,
                      " virtio_mmio.device=512@0x%lx:%ld",
                      VIRTIO_MMIO_BASE + index * 512,
-                     VIRTIO_IRQ_BASE + index);
+                     virtio_irq_base + index);
     if (ret < 0 || ret >= VIRTIO_CMDLINE_MAXLEN) {
         g_free(cmdline);
         return NULL;
@@ -278,6 +279,7 @@ static gchar *microvm_get_mmio_cmdline(gchar *name)
 static void microvm_fix_kernel_cmdline(MachineState *machine)
 {
     X86MachineState *x86ms = X86_MACHINE(machine);
+    MicrovmMachineState *mms = MICROVM_MACHINE(machine);
     BusState *bus;
     BusChild *kid;
     char *cmdline;
@@ -301,7 +303,8 @@ static void microvm_fix_kernel_cmdline(MachineState *machine)
             BusState *mmio_bus = &mmio_virtio_bus->parent_obj;
 
             if (!QTAILQ_EMPTY(&mmio_bus->children)) {
-                gchar *mmio_cmdline = microvm_get_mmio_cmdline(mmio_bus->name);
+                gchar *mmio_cmdline = microvm_get_mmio_cmdline
+                    (mmio_bus->name, mms->virtio_irq_base);
                 if (mmio_cmdline) {
                     char *newcmd = g_strjoin(NULL, cmdline, mmio_cmdline, NULL);
                     g_free(mmio_cmdline);
-- 
2.18.4



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

* [PATCH v3 16/22] microvm/acpi: add minimal acpi support
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (14 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 15/22] microvm: make virtio irq base runtime configurable Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-21 10:09   ` Igor Mammedov
  2020-05-20 13:19 ` [PATCH v3 17/22] microvm/acpi: add acpi_dsdt_add_virtio() for x86 Gerd Hoffmann
                   ` (9 subsequent siblings)
  25 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

$subject says all.  Can be controlled using -M microvm,acpi=on/off.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/i386/acpi-microvm.h    |   6 ++
 include/hw/i386/microvm.h |   9 ++
 hw/i386/acpi-microvm.c    | 182 ++++++++++++++++++++++++++++++++++++++
 hw/i386/microvm.c         |  37 ++++++++
 hw/i386/Kconfig           |   1 +
 hw/i386/Makefile.objs     |   1 +
 6 files changed, 236 insertions(+)
 create mode 100644 hw/i386/acpi-microvm.h
 create mode 100644 hw/i386/acpi-microvm.c

diff --git a/hw/i386/acpi-microvm.h b/hw/i386/acpi-microvm.h
new file mode 100644
index 000000000000..6a6c2967102b
--- /dev/null
+++ b/hw/i386/acpi-microvm.h
@@ -0,0 +1,6 @@
+#ifndef HW_I386_ACPI_MICROVM_H
+#define HW_I386_ACPI_MICROVM_H
+
+void acpi_setup_microvm(void);
+
+#endif
diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h
index 2709306c4016..ebd7f49d5de8 100644
--- a/include/hw/i386/microvm.h
+++ b/include/hw/i386/microvm.h
@@ -24,12 +24,18 @@
 
 #include "hw/boards.h"
 #include "hw/i386/x86.h"
+#include "hw/acpi/acpi_dev_interface.h"
 
 /* Platform virtio definitions */
 #define VIRTIO_MMIO_BASE      0xc0000000
 #define VIRTIO_NUM_TRANSPORTS 8
 #define VIRTIO_CMDLINE_MAXLEN 64
 
+#define GED_MMIO_BASE         0xc1000000
+#define GED_MMIO_BASE_MEMHP   (GED_MMIO_BASE + 0x100)
+#define GED_MMIO_BASE_REGS    (GED_MMIO_BASE + 0x200)
+#define GED_MMIO_IRQ          9
+
 /* Machine type options */
 #define MICROVM_MACHINE_PIT                 "pit"
 #define MICROVM_MACHINE_PIC                 "pic"
@@ -58,6 +64,9 @@ typedef struct {
     /* Machine state */
     uint32_t virtio_irq_base;
     bool kernel_cmdline_fixed;
+    Notifier machine_done;
+    Notifier powerdown_req;
+    AcpiDeviceIf *acpi_dev;
 } MicrovmMachineState;
 
 #define TYPE_MICROVM_MACHINE   MACHINE_TYPE_NAME("microvm")
diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c
new file mode 100644
index 000000000000..d2dd024909cc
--- /dev/null
+++ b/hw/i386/acpi-microvm.c
@@ -0,0 +1,182 @@
+/* Support for generating ACPI tables and passing them to Guests
+ *
+ * Copyright (C) 2008-2010  Kevin O'Connor <kevin@koconnor.net>
+ * Copyright (C) 2006 Fabrice Bellard
+ * Copyright (C) 2013 Red Hat Inc
+ *
+ * Author: Michael S. Tsirkin <mst@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * This program is distributed in the hope that 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 "qapi/error.h"
+
+#include "exec/memory.h"
+#include "hw/acpi/acpi.h"
+#include "hw/acpi/aml-build.h"
+#include "hw/acpi/bios-linker-loader.h"
+#include "hw/acpi/generic_event_device.h"
+#include "hw/acpi/utils.h"
+#include "hw/boards.h"
+#include "hw/i386/fw_cfg.h"
+#include "hw/i386/microvm.h"
+
+#include "acpi-common.h"
+#include "acpi-microvm.h"
+
+static void
+build_dsdt_microvm(GArray *table_data, BIOSLinker *linker,
+                   MicrovmMachineState *mms)
+{
+    X86MachineState *x86ms = X86_MACHINE(mms);
+    Aml *dsdt, *sb_scope, *scope, *pkg;
+    bool ambiguous;
+    Object *isabus;
+
+    isabus = object_resolve_path_type("", TYPE_ISA_BUS, &ambiguous);
+    assert(isabus);
+    assert(!ambiguous);
+
+    dsdt = init_aml_allocator();
+
+    /* Reserve space for header */
+    acpi_data_push(dsdt->buf, sizeof(AcpiTableHeader));
+
+    sb_scope = aml_scope("_SB");
+    fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg);
+    isa_build_aml(ISA_BUS(isabus), sb_scope);
+    build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev),
+                  GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE);
+    acpi_dsdt_add_power_button(sb_scope);
+    aml_append(dsdt, sb_scope);
+
+    scope = aml_scope("\\");
+    pkg = aml_package(4);
+    aml_append(pkg, aml_int(5)); /* SLEEP_CONTROL_REG.SLP_TYP */
+    aml_append(pkg, aml_int(0)); /* ignored */
+    aml_append(pkg, aml_int(0)); /* reserved */
+    aml_append(pkg, aml_int(0)); /* reserved */
+    aml_append(scope, aml_name_decl("_S5", pkg));
+    aml_append(dsdt, scope);
+
+    /* copy AML table into ACPI tables blob and patch header there */
+    g_array_append_vals(table_data, dsdt->buf->data, dsdt->buf->len);
+    build_header(linker, table_data,
+        (void *)(table_data->data + table_data->len - dsdt->buf->len),
+        "DSDT", dsdt->buf->len, 5, NULL, NULL);
+    free_aml_allocator();
+}
+
+static void acpi_build_microvm(AcpiBuildTables *tables,
+                               MicrovmMachineState *mms)
+{
+    MachineState *machine = MACHINE(mms);
+    GArray *table_offsets;
+    GArray *tables_blob = tables->table_data;
+    unsigned dsdt, xsdt;
+    AcpiFadtData pmfadt = {
+        .rev = 5,
+        .minor_ver = 1,
+        .flags = ((1 << ACPI_FADT_F_HW_REDUCED_ACPI) |
+                  (1 << ACPI_FADT_F_RESET_REG_SUP)),
+        .sleep_ctl = {
+            .space_id = AML_AS_SYSTEM_MEMORY,
+            .bit_width = 8,
+            .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_SLEEP_CTL,
+        },
+        .sleep_sts = {
+            .space_id = AML_AS_SYSTEM_MEMORY,
+            .bit_width = 8,
+            .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_SLEEP_STS,
+        },
+        .reset_reg = {
+            .space_id = AML_AS_SYSTEM_MEMORY,
+            .bit_width = 8,
+            .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_RESET,
+        },
+        .reset_val = ACPI_GED_RESET_VALUE,
+    };
+
+    table_offsets = g_array_new(false, true /* clear */,
+                                        sizeof(uint32_t));
+    bios_linker_loader_alloc(tables->linker,
+                             ACPI_BUILD_TABLE_FILE, tables_blob,
+                             64 /* Ensure FACS is aligned */,
+                             false /* high memory */);
+
+    dsdt = tables_blob->len;
+    build_dsdt_microvm(tables_blob, tables->linker, mms);
+
+    pmfadt.dsdt_tbl_offset = &dsdt;
+    pmfadt.xdsdt_tbl_offset = &dsdt;
+    acpi_add_table(table_offsets, tables_blob);
+    build_fadt(tables_blob, tables->linker, &pmfadt, NULL, NULL);
+
+    acpi_add_table(table_offsets, tables_blob);
+    acpi_build_madt(tables_blob, tables->linker, X86_MACHINE(machine),
+                    mms->acpi_dev, false);
+
+    xsdt = tables_blob->len;
+    build_xsdt(tables_blob, tables->linker, table_offsets, NULL, NULL);
+
+    /* RSDP is in FSEG memory, so allocate it separately */
+    {
+        AcpiRsdpData rsdp_data = {
+            .revision = 2,
+            .oem_id = ACPI_BUILD_APPNAME6,
+            .xsdt_tbl_offset = &xsdt,
+            .rsdt_tbl_offset = NULL,
+        };
+        build_rsdp(tables->rsdp, tables->linker, &rsdp_data);
+    }
+
+    /* Cleanup memory that's no longer used. */
+    g_array_free(table_offsets, true);
+}
+
+static void acpi_build_no_update(void *build_opaque)
+{
+    /* nothing, microvm tables don't change at runtime */
+}
+
+void acpi_setup_microvm(void)
+{
+    MicrovmMachineState *mms = MICROVM_MACHINE(qdev_get_machine());
+    X86MachineState *x86ms = X86_MACHINE(mms);
+    AcpiBuildTables tables;
+
+    assert(x86ms->fw_cfg);
+
+    if (!x86_machine_is_acpi_enabled(x86ms)) {
+        return;
+    }
+
+    acpi_build_tables_init(&tables);
+    acpi_build_microvm(&tables, mms);
+
+    /* Now expose it all to Guest */
+    acpi_add_rom_blob(acpi_build_no_update, NULL,
+                      tables.table_data,
+                      ACPI_BUILD_TABLE_FILE,
+                      ACPI_BUILD_TABLE_MAX_SIZE);
+    acpi_add_rom_blob(acpi_build_no_update, NULL,
+                      tables.linker->cmd_blob,
+                      "etc/table-loader", 0);
+    acpi_add_rom_blob(acpi_build_no_update, NULL,
+                      tables.rsdp,
+                      ACPI_BUILD_RSDP_FILE, 0);
+
+    acpi_build_tables_cleanup(&tables, false);
+}
diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index ea4460714a99..b38321112baa 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -26,6 +26,8 @@
 #include "sysemu/cpus.h"
 #include "sysemu/numa.h"
 #include "sysemu/reset.h"
+#include "sysemu/runstate.h"
+#include "acpi-microvm.h"
 
 #include "hw/loader.h"
 #include "hw/irq.h"
@@ -41,6 +43,8 @@
 #include "hw/i386/e820_memory_layout.h"
 #include "hw/i386/fw_cfg.h"
 #include "hw/virtio/virtio-mmio.h"
+#include "hw/acpi/acpi.h"
+#include "hw/acpi/generic_event_device.h"
 
 #include "cpu.h"
 #include "elf.h"
@@ -129,6 +133,17 @@ static void microvm_devices_init(MicrovmMachineState *mms)
     }
 
     /* Optional and legacy devices */
+    if (x86_machine_is_acpi_enabled(x86ms)) {
+        DeviceState *dev = qdev_create(NULL, TYPE_ACPI_GED_X86);
+        qdev_prop_set_uint32(dev, "ged-event", ACPI_GED_PWR_DOWN_EVT);
+        sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, GED_MMIO_BASE);
+        /* sysbus_mmio_map(SYS_BUS_DEVICE(dev), 1, GED_MMIO_BASE_MEMHP); */
+        sysbus_mmio_map(SYS_BUS_DEVICE(dev), 2, GED_MMIO_BASE_REGS);
+        sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
+                           x86ms->gsi[GED_MMIO_IRQ]);
+        qdev_init_nofail(dev);
+        mms->acpi_dev = ACPI_DEVICE_IF(dev);
+    }
 
     if (mms->pic == ON_OFF_AUTO_ON || mms->pic == ON_OFF_AUTO_AUTO) {
         qemu_irq *i8259;
@@ -457,6 +472,23 @@ static void microvm_machine_set_auto_kernel_cmdline(Object *obj, bool value,
     mms->auto_kernel_cmdline = value;
 }
 
+static void microvm_machine_done(Notifier *notifier, void *data)
+{
+    acpi_setup_microvm();
+}
+
+static void microvm_powerdown_req(Notifier *notifier, void *data)
+{
+    MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState,
+                                            powerdown_req);
+
+    if (mms->acpi_dev) {
+        Object *obj = OBJECT(mms->acpi_dev);
+        AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(obj);
+        adevc->send_event(mms->acpi_dev, ACPI_POWER_DOWN_STATUS);
+    }
+}
+
 static void microvm_machine_initfn(Object *obj)
 {
     MicrovmMachineState *mms = MICROVM_MACHINE(obj);
@@ -471,6 +503,11 @@ static void microvm_machine_initfn(Object *obj)
 
     /* State */
     mms->kernel_cmdline_fixed = false;
+
+    mms->machine_done.notify = microvm_machine_done;
+    qemu_add_machine_init_done_notifier(&mms->machine_done);
+    mms->powerdown_req.notify = microvm_powerdown_req;
+    qemu_register_powerdown_notifier(&mms->powerdown_req);
 }
 
 static void microvm_class_init(ObjectClass *oc, void *data)
diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig
index c93f32f6579d..be746bcb49eb 100644
--- a/hw/i386/Kconfig
+++ b/hw/i386/Kconfig
@@ -102,6 +102,7 @@ config MICROVM
     select I8259
     select MC146818RTC
     select VIRTIO_MMIO
+    select ACPI_HW_REDUCED
 
 config X86_IOMMU
     bool
diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs
index 622739305882..bbb2fe78f3cd 100644
--- a/hw/i386/Makefile.objs
+++ b/hw/i386/Makefile.objs
@@ -19,3 +19,4 @@ obj-y += kvmvapic.o
 obj-$(CONFIG_ACPI) += acpi-common.o
 obj-$(CONFIG_ACPI_HW_REDUCED) += generic_event_device_x86.o
 obj-$(CONFIG_PC) += acpi-build.o
+obj-$(CONFIG_MICROVM) += acpi-microvm.o
-- 
2.18.4



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

* [PATCH v3 17/22] microvm/acpi: add acpi_dsdt_add_virtio() for x86
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (15 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 16/22] microvm/acpi: add minimal acpi support Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-21 10:12   ` Igor Mammedov
  2020-05-20 13:19 ` [PATCH v3 18/22] microvm/acpi: use GSI 16-23 for virtio Gerd Hoffmann
                   ` (8 subsequent siblings)
  25 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Makes x86 linux kernel find virtio-mmio devices automatically.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Sergio Lopez <slp@redhat.com>
---
 hw/i386/acpi-microvm.c | 52 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c
index d2dd024909cc..12060939ff6c 100644
--- a/hw/i386/acpi-microvm.c
+++ b/hw/i386/acpi-microvm.c
@@ -21,6 +21,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "qemu/cutils.h"
 #include "qapi/error.h"
 
 #include "exec/memory.h"
@@ -32,10 +33,60 @@
 #include "hw/boards.h"
 #include "hw/i386/fw_cfg.h"
 #include "hw/i386/microvm.h"
+#include "hw/virtio/virtio-mmio.h"
 
 #include "acpi-common.h"
 #include "acpi-microvm.h"
 
+static void acpi_dsdt_add_virtio(Aml *scope,
+                                 MicrovmMachineState *mms)
+{
+    gchar *separator;
+    long int index;
+    BusState *bus;
+    BusChild *kid;
+
+    bus = sysbus_get_default();
+    QTAILQ_FOREACH(kid, &bus->children, sibling) {
+        DeviceState *dev = kid->child;
+        Object *obj = object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MMIO);
+
+        if (obj) {
+            VirtIOMMIOProxy *mmio = VIRTIO_MMIO(obj);
+            VirtioBusState *mmio_virtio_bus = &mmio->bus;
+            BusState *mmio_bus = &mmio_virtio_bus->parent_obj;
+
+            if (QTAILQ_EMPTY(&mmio_bus->children)) {
+                continue;
+            }
+            separator = g_strrstr(mmio_bus->name, ".");
+            if (!separator) {
+                continue;
+            }
+            if (qemu_strtol(separator + 1, NULL, 10, &index) != 0) {
+                continue;
+            }
+
+            uint32_t irq = mms->virtio_irq_base + index;
+            hwaddr base = VIRTIO_MMIO_BASE + index * 512;
+            hwaddr size = 512;
+
+            Aml *dev = aml_device("VR%02u", (unsigned)index);
+            aml_append(dev, aml_name_decl("_HID", aml_string("LNRO0005")));
+            aml_append(dev, aml_name_decl("_UID", aml_int(index)));
+            aml_append(dev, aml_name_decl("_CCA", aml_int(1)));
+
+            Aml *crs = aml_resource_template();
+            aml_append(crs, aml_memory32_fixed(base, size, AML_READ_WRITE));
+            aml_append(crs,
+                       aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH,
+                                     AML_EXCLUSIVE, &irq, 1));
+            aml_append(dev, aml_name_decl("_CRS", crs));
+            aml_append(scope, dev);
+        }
+    }
+}
+
 static void
 build_dsdt_microvm(GArray *table_data, BIOSLinker *linker,
                    MicrovmMachineState *mms)
@@ -60,6 +111,7 @@ build_dsdt_microvm(GArray *table_data, BIOSLinker *linker,
     build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev),
                   GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE);
     acpi_dsdt_add_power_button(sb_scope);
+    acpi_dsdt_add_virtio(sb_scope, mms);
     aml_append(dsdt, sb_scope);
 
     scope = aml_scope("\\");
-- 
2.18.4



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

* [PATCH v3 18/22] microvm/acpi: use GSI 16-23 for virtio
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (16 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 17/22] microvm/acpi: add acpi_dsdt_add_virtio() for x86 Gerd Hoffmann
@ 2020-05-20 13:19 ` Gerd Hoffmann
  2020-05-21 10:13   ` Igor Mammedov
  2020-05-20 13:20 ` [PATCH v3 19/22] microvm/acpi: use seabios with acpi=on Gerd Hoffmann
                   ` (7 subsequent siblings)
  25 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

With ACPI enabled and IO-APIC being properly declared in the ACPI tables
we can use interrupt lines 16-23 for virtio and avoid shared interrupts.

With acpi disabled we continue to use lines 8-15.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Sergio Lopez <slp@redhat.com>
---
 hw/i386/microvm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index b38321112baa..7d8174809ae1 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -125,7 +125,7 @@ static void microvm_devices_init(MicrovmMachineState *mms)
 
     kvmclock_create();
 
-    mms->virtio_irq_base = 8;
+    mms->virtio_irq_base = x86_machine_is_acpi_enabled(x86ms) ? 16 : 8;
     for (i = 0; i < VIRTIO_NUM_TRANSPORTS; i++) {
         sysbus_create_simple("virtio-mmio",
                              VIRTIO_MMIO_BASE + i * 512,
-- 
2.18.4



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

* [PATCH v3 19/22] microvm/acpi: use seabios with acpi=on
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (17 preceding siblings ...)
  2020-05-20 13:19 ` [PATCH v3 18/22] microvm/acpi: use GSI 16-23 for virtio Gerd Hoffmann
@ 2020-05-20 13:20 ` Gerd Hoffmann
  2020-05-21 10:14   ` Igor Mammedov
  2020-05-20 13:20 ` [PATCH v3 20/22] microvm/acpi: disable virtio-mmio cmdline hack Gerd Hoffmann
                   ` (6 subsequent siblings)
  25 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

With acpi=off continue to use qboot.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/i386/microvm.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index 7d8174809ae1..ddb8570a2915 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -52,6 +52,7 @@
 #include "hw/xen/start_info.h"
 
 #define MICROVM_QBOOT_FILENAME "qboot.bin"
+#define MICROVM_BIOS_FILENAME  "bios-microvm.bin"
 
 static void microvm_set_rtc(MicrovmMachineState *mms, ISADevice *s)
 {
@@ -174,7 +175,9 @@ static void microvm_devices_init(MicrovmMachineState *mms)
     }
 
     if (bios_name == NULL) {
-        bios_name = MICROVM_QBOOT_FILENAME;
+        bios_name = x86_machine_is_acpi_enabled(x86ms)
+            ? MICROVM_BIOS_FILENAME
+            : MICROVM_QBOOT_FILENAME;
     }
     x86_bios_rom_init(get_system_memory(), true);
 }
-- 
2.18.4



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

* [PATCH v3 20/22] microvm/acpi: disable virtio-mmio cmdline hack
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (18 preceding siblings ...)
  2020-05-20 13:20 ` [PATCH v3 19/22] microvm/acpi: use seabios with acpi=on Gerd Hoffmann
@ 2020-05-20 13:20 ` Gerd Hoffmann
  2020-05-20 13:20 ` [PATCH v3 21/22] [RfC] acpi: add per machine type acpi default Gerd Hoffmann
                   ` (5 subsequent siblings)
  25 siblings, 0 replies; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

... in case we are using ACPI.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
 hw/i386/microvm.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index ddb8570a2915..602c6a8f75f3 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -362,7 +362,8 @@ static void microvm_machine_reset(MachineState *machine)
     CPUState *cs;
     X86CPU *cpu;
 
-    if (machine->kernel_filename != NULL &&
+    if (!x86_machine_is_acpi_enabled(X86_MACHINE(machine)) &&
+        machine->kernel_filename != NULL &&
         mms->auto_kernel_cmdline && !mms->kernel_cmdline_fixed) {
         microvm_fix_kernel_cmdline(machine);
         mms->kernel_cmdline_fixed = true;
-- 
2.18.4



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

* [PATCH v3 21/22] [RfC] acpi: add per machine type acpi default
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (19 preceding siblings ...)
  2020-05-20 13:20 ` [PATCH v3 20/22] microvm/acpi: disable virtio-mmio cmdline hack Gerd Hoffmann
@ 2020-05-20 13:20 ` Gerd Hoffmann
  2020-05-21 10:26   ` Igor Mammedov
  2020-05-20 13:20 ` [PATCH v3 22/22] [RfC] acpi: flip default to off for microvm Gerd Hoffmann
                   ` (4 subsequent siblings)
  25 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Allow setting acpi default value for each machine type.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/hw/i386/x86.h |  1 +
 hw/i386/x86.c         | 21 ++++++++++++++++++---
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h
index b52285481687..d2fffa8252ff 100644
--- a/include/hw/i386/x86.h
+++ b/include/hw/i386/x86.h
@@ -37,6 +37,7 @@ typedef struct {
     bool save_tsc_khz;
     /* Enables contiguous-apic-ID mode */
     bool compat_apic_id_mode;
+    bool acpi_default;
 } X86MachineClass;
 
 typedef struct {
diff --git a/hw/i386/x86.c b/hw/i386/x86.c
index ac7a0a958781..3a56a157c5f0 100644
--- a/hw/i386/x86.c
+++ b/hw/i386/x86.c
@@ -940,10 +940,22 @@ static void x86_machine_set_smm(Object *obj, Visitor *v, const char *name,
 
 bool x86_machine_is_acpi_enabled(X86MachineState *x86ms)
 {
-    if (x86ms->acpi == ON_OFF_AUTO_OFF) {
-        return false;
+    X86MachineClass *x86mc = X86_MACHINE_GET_CLASS(x86ms);
+    bool enabled;
+
+    switch (x86ms->acpi) {
+    case ON_OFF_AUTO_ON:
+        enabled = true;
+        break;
+    case ON_OFF_AUTO_OFF:
+        enabled = false;
+        break;
+    case ON_OFF_AUTO_AUTO:
+    default:
+        enabled = x86mc->acpi_default;
+        break;
     }
-    return true;
+    return enabled;
 }
 
 static void x86_machine_get_acpi(Object *obj, Visitor *v, const char *name,
@@ -991,6 +1003,9 @@ static void x86_machine_class_init(ObjectClass *oc, void *data)
     x86mc->save_tsc_khz = true;
     nc->nmi_monitor_handler = x86_nmi;
 
+    /* acpi is on by default */
+    x86mc->acpi_default = true;
+
     object_class_property_add(oc, X86_MACHINE_MAX_RAM_BELOW_4G, "size",
         x86_machine_get_max_ram_below_4g, x86_machine_set_max_ram_below_4g,
         NULL, NULL);
-- 
2.18.4



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

* [PATCH v3 22/22] [RfC] acpi: flip default to off for microvm
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (20 preceding siblings ...)
  2020-05-20 13:20 ` [PATCH v3 21/22] [RfC] acpi: add per machine type acpi default Gerd Hoffmann
@ 2020-05-20 13:20 ` Gerd Hoffmann
  2020-05-21 10:36   ` Igor Mammedov
  2020-05-20 15:46 ` [PATCH v3 00/22] microvm: add acpi support no-reply
                   ` (3 subsequent siblings)
  25 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 13:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Gerd Hoffmann, Paolo Bonzini,
	Igor Mammedov, Richard Henderson

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/i386/microvm.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index 602c6a8f75f3..b5c445b5403b 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -517,6 +517,7 @@ static void microvm_machine_initfn(Object *obj)
 static void microvm_class_init(ObjectClass *oc, void *data)
 {
     MachineClass *mc = MACHINE_CLASS(oc);
+    X86MachineClass *x86mc = X86_MACHINE_CLASS(oc);
 
     mc->init = microvm_machine_state_init;
 
@@ -537,6 +538,9 @@ static void microvm_class_init(ObjectClass *oc, void *data)
     /* Machine class handlers */
     mc->reset = microvm_machine_reset;
 
+    /* acpi is off by default */
+    x86mc->acpi_default = false;
+
     object_class_property_add(oc, MICROVM_MACHINE_PIC, "OnOffAuto",
                               microvm_machine_get_pic,
                               microvm_machine_set_pic,
-- 
2.18.4



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

* Re: [PATCH v3 01/22] microvm: name qboot binary qboot.bin
  2020-05-20 13:19 ` [PATCH v3 01/22] microvm: name qboot binary qboot.bin Gerd Hoffmann
@ 2020-05-20 13:25   ` Philippe Mathieu-Daudé
  2020-05-25 11:02     ` Gerd Hoffmann
  0 siblings, 1 reply; 61+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-05-20 13:25 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Igor Mammedov, Paolo Bonzini,
	Richard Henderson

Hi Gerd,

On 5/20/20 3:19 PM, Gerd Hoffmann wrote:
> qboot isn't a bios and shouldnt be named that way.

Still it resides in a directory named pc-bios =)

It is used later in x86_bios_rom_init() as:

     bios = g_malloc(sizeof(*bios));
     memory_region_init_ram(bios, NULL, "pc.bios", bios_size, &error_fatal);
     if (!isapc_ram_fw) {
         memory_region_set_readonly(bios, true);
     }
     ret = rom_add_file_fixed(bios_name, (uint32_t)(-bios_size), -1);
     if (ret != 0) {
     bios_error:
         fprintf(stderr, "qemu: could not load PC BIOS '%s'\n", bios_name);
         exit(1);
     }
     g_free(filename);

Many 'bios' occurrences.

Should it be called 'qboot.rom' instead?

> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>   hw/i386/microvm.c                       |   4 ++--
>   pc-bios/{bios-microvm.bin => qboot.bin} | Bin
>   roms/Makefile                           |   6 +++---
>   3 files changed, 5 insertions(+), 5 deletions(-)
>   rename pc-bios/{bios-microvm.bin => qboot.bin} (100%)
> 
> diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
> index 937db10ae6a5..867d3d652145 100644
> --- a/hw/i386/microvm.c
> +++ b/hw/i386/microvm.c
> @@ -47,7 +47,7 @@
>   #include "kvm_i386.h"
>   #include "hw/xen/start_info.h"
>   
> -#define MICROVM_BIOS_FILENAME "bios-microvm.bin"
> +#define MICROVM_QBOOT_FILENAME "qboot.bin"
>   
>   static void microvm_set_rtc(MicrovmMachineState *mms, ISADevice *s)
>   {
> @@ -158,7 +158,7 @@ static void microvm_devices_init(MicrovmMachineState *mms)
>       }
>   
>       if (bios_name == NULL) {
> -        bios_name = MICROVM_BIOS_FILENAME;
> +        bios_name = MICROVM_QBOOT_FILENAME;
>       }
>       x86_bios_rom_init(get_system_memory(), true);
>   }
> diff --git a/pc-bios/bios-microvm.bin b/pc-bios/qboot.bin
> similarity index 100%
> rename from pc-bios/bios-microvm.bin
> rename to pc-bios/qboot.bin
> diff --git a/roms/Makefile b/roms/Makefile
> index f9acf39954dc..d6d4948bfc31 100644
> --- a/roms/Makefile
> +++ b/roms/Makefile
> @@ -68,7 +68,7 @@ default help:
>   	@echo "  opensbi64-virt     -- update OpenSBI for 64-bit virt machine"
>   	@echo "  opensbi32-sifive_u -- update OpenSBI for 32-bit sifive_u machine"
>   	@echo "  opensbi64-sifive_u -- update OpenSBI for 64-bit sifive_u machine"
> -	@echo "  bios-microvm       -- update bios-microvm.bin (qboot)"
> +	@echo "  qboot              -- update qboot"
>   	@echo "  clean              -- delete the files generated by the previous" \
>   	                              "build targets"
>   
> @@ -194,9 +194,9 @@ opensbi64-sifive_u:
>   		PLATFORM="sifive/fu540"
>   	cp opensbi/build/platform/sifive/fu540/firmware/fw_jump.bin ../pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin
>   
> -bios-microvm:
> +qboot:
>   	$(MAKE) -C qboot
> -	cp qboot/bios.bin ../pc-bios/bios-microvm.bin
> +	cp qboot/bios.bin ../pc-bios/qboot.bin
>   
>   clean:
>   	rm -rf seabios/.config seabios/out seabios/builds
> 



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

* Re: [PATCH v3 15/22] microvm: make virtio irq base runtime configurable
  2020-05-20 13:19 ` [PATCH v3 15/22] microvm: make virtio irq base runtime configurable Gerd Hoffmann
@ 2020-05-20 13:29   ` Philippe Mathieu-Daudé
  2020-05-25 11:49     ` Gerd Hoffmann
  0 siblings, 1 reply; 61+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-05-20 13:29 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Igor Mammedov, Paolo Bonzini,
	Richard Henderson

On 5/20/20 3:19 PM, Gerd Hoffmann wrote:
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> Reviewed-by: Sergio Lopez <slp@redhat.com>
> ---
>   include/hw/i386/microvm.h |  2 +-
>   hw/i386/microvm.c         | 11 +++++++----
>   2 files changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h
> index ba68d1f22bb3..2709306c4016 100644
> --- a/include/hw/i386/microvm.h
> +++ b/include/hw/i386/microvm.h
> @@ -27,7 +27,6 @@
>   
>   /* Platform virtio definitions */
>   #define VIRTIO_MMIO_BASE      0xc0000000
> -#define VIRTIO_IRQ_BASE       5
>   #define VIRTIO_NUM_TRANSPORTS 8
>   #define VIRTIO_CMDLINE_MAXLEN 64
>   
> @@ -57,6 +56,7 @@ typedef struct {
>       bool auto_kernel_cmdline;
>   
>       /* Machine state */
> +    uint32_t virtio_irq_base;
>       bool kernel_cmdline_fixed;
>   } MicrovmMachineState;
>   
> diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
> index b8f0d3283758..ea4460714a99 100644
> --- a/hw/i386/microvm.c
> +++ b/hw/i386/microvm.c
> @@ -121,10 +121,11 @@ static void microvm_devices_init(MicrovmMachineState *mms)
>   
>       kvmclock_create();
>   
> +    mms->virtio_irq_base = 8;

Hmm you made it runtime configurable indeed, but you also changed it 
from 5 to 8. Worth a different patch, or at least mentioning in commit 
description.

>       for (i = 0; i < VIRTIO_NUM_TRANSPORTS; i++) {
>           sysbus_create_simple("virtio-mmio",
>                                VIRTIO_MMIO_BASE + i * 512,
> -                             x86ms->gsi[VIRTIO_IRQ_BASE + i]);
> +                             x86ms->gsi[mms->virtio_irq_base + i]);
>       }
>   
>       /* Optional and legacy devices */
> @@ -246,7 +247,7 @@ static void microvm_memory_init(MicrovmMachineState *mms)
>       x86ms->ioapic_as = &address_space_memory;
>   }
>   
> -static gchar *microvm_get_mmio_cmdline(gchar *name)
> +static gchar *microvm_get_mmio_cmdline(gchar *name, uint32_t virtio_irq_base)
>   {
>       gchar *cmdline;
>       gchar *separator;
> @@ -266,7 +267,7 @@ static gchar *microvm_get_mmio_cmdline(gchar *name)
>       ret = g_snprintf(cmdline, VIRTIO_CMDLINE_MAXLEN,
>                        " virtio_mmio.device=512@0x%lx:%ld",
>                        VIRTIO_MMIO_BASE + index * 512,
> -                     VIRTIO_IRQ_BASE + index);
> +                     virtio_irq_base + index);
>       if (ret < 0 || ret >= VIRTIO_CMDLINE_MAXLEN) {
>           g_free(cmdline);
>           return NULL;
> @@ -278,6 +279,7 @@ static gchar *microvm_get_mmio_cmdline(gchar *name)
>   static void microvm_fix_kernel_cmdline(MachineState *machine)
>   {
>       X86MachineState *x86ms = X86_MACHINE(machine);
> +    MicrovmMachineState *mms = MICROVM_MACHINE(machine);
>       BusState *bus;
>       BusChild *kid;
>       char *cmdline;
> @@ -301,7 +303,8 @@ static void microvm_fix_kernel_cmdline(MachineState *machine)
>               BusState *mmio_bus = &mmio_virtio_bus->parent_obj;
>   
>               if (!QTAILQ_EMPTY(&mmio_bus->children)) {
> -                gchar *mmio_cmdline = microvm_get_mmio_cmdline(mmio_bus->name);
> +                gchar *mmio_cmdline = microvm_get_mmio_cmdline
> +                    (mmio_bus->name, mms->virtio_irq_base);
>                   if (mmio_cmdline) {
>                       char *newcmd = g_strjoin(NULL, cmdline, mmio_cmdline, NULL);
>                       g_free(mmio_cmdline);
> 



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

* Re: [PATCH v3 06/22] acpi: create acpi-common.c and move madt code
  2020-05-20 13:19 ` [PATCH v3 06/22] acpi: create acpi-common.c and move madt code Gerd Hoffmann
@ 2020-05-20 13:31   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 61+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-05-20 13:31 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Igor Mammedov, Paolo Bonzini,
	Richard Henderson

On 5/20/20 3:19 PM, Gerd Hoffmann wrote:
> We'll need madt support for microvm.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
>   hw/i386/acpi-common.h |  14 ++++
>   hw/i386/acpi-build.c  | 126 +---------------------------------
>   hw/i386/acpi-common.c | 152 ++++++++++++++++++++++++++++++++++++++++++
>   hw/i386/Makefile.objs |   1 +
>   4 files changed, 170 insertions(+), 123 deletions(-)
>   create mode 100644 hw/i386/acpi-common.h
>   create mode 100644 hw/i386/acpi-common.c
> 
> diff --git a/hw/i386/acpi-common.h b/hw/i386/acpi-common.h
> new file mode 100644
> index 000000000000..c30e461f1854
> --- /dev/null
> +++ b/hw/i386/acpi-common.h
> @@ -0,0 +1,14 @@
> +#ifndef HW_I386_ACPI_COMMON_H
> +#define HW_I386_ACPI_COMMON_H
> +#include "include/hw/acpi/acpi_dev_interface.h"
> +
> +#include "include/hw/acpi/bios-linker-loader.h"
> +#include "include/hw/i386/x86.h"
> +
> +/* Default IOAPIC ID */
> +#define ACPI_BUILD_IOAPIC_ID 0x0
> +
> +void acpi_build_madt(GArray *table_data, BIOSLinker *linker,
> +                     X86MachineState *x86ms, AcpiDeviceIf *adev);
> +
> +#endif
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index 4f6418d60b05..c0fdd539a640 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -24,6 +24,7 @@
>   #include "qapi/error.h"
>   #include "qapi/qmp/qnum.h"
>   #include "acpi-build.h"
> +#include "acpi-common.h"
>   #include "qemu/bitmap.h"
>   #include "qemu/error-report.h"
>   #include "hw/pci/pci.h"
> @@ -89,9 +90,6 @@
>   #define ACPI_BUILD_DPRINTF(fmt, ...)
>   #endif
>   
> -/* Default IOAPIC ID */
> -#define ACPI_BUILD_IOAPIC_ID 0x0
> -
>   typedef struct AcpiPmInfo {
>       bool s3_disabled;
>       bool s4_disabled;
> @@ -327,124 +325,6 @@ build_facs(GArray *table_data)
>       facs->length = cpu_to_le32(sizeof(*facs));
>   }
>   
> -void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid,
> -                       const CPUArchIdList *apic_ids, GArray *entry)
> -{
> -    uint32_t apic_id = apic_ids->cpus[uid].arch_id;
> -
> -    /* ACPI spec says that LAPIC entry for non present
> -     * CPU may be omitted from MADT or it must be marked
> -     * as disabled. However omitting non present CPU from
> -     * MADT breaks hotplug on linux. So possible CPUs
> -     * should be put in MADT but kept disabled.
> -     */
> -    if (apic_id < 255) {
> -        AcpiMadtProcessorApic *apic = acpi_data_push(entry, sizeof *apic);
> -
> -        apic->type = ACPI_APIC_PROCESSOR;
> -        apic->length = sizeof(*apic);
> -        apic->processor_id = uid;
> -        apic->local_apic_id = apic_id;
> -        if (apic_ids->cpus[uid].cpu != NULL) {
> -            apic->flags = cpu_to_le32(1);
> -        } else {
> -            apic->flags = cpu_to_le32(0);
> -        }
> -    } else {
> -        AcpiMadtProcessorX2Apic *apic = acpi_data_push(entry, sizeof *apic);
> -
> -        apic->type = ACPI_APIC_LOCAL_X2APIC;
> -        apic->length = sizeof(*apic);
> -        apic->uid = cpu_to_le32(uid);
> -        apic->x2apic_id = cpu_to_le32(apic_id);
> -        if (apic_ids->cpus[uid].cpu != NULL) {
> -            apic->flags = cpu_to_le32(1);
> -        } else {
> -            apic->flags = cpu_to_le32(0);
> -        }
> -    }
> -}
> -
> -static void
> -build_madt(GArray *table_data, BIOSLinker *linker,
> -           X86MachineState *x86ms, AcpiDeviceIf *adev)
> -{
> -    MachineClass *mc = MACHINE_GET_CLASS(x86ms);
> -    const CPUArchIdList *apic_ids = mc->possible_cpu_arch_ids(MACHINE(x86ms));
> -    int madt_start = table_data->len;
> -    AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(adev);
> -    bool x2apic_mode = false;
> -
> -    AcpiMultipleApicTable *madt;
> -    AcpiMadtIoApic *io_apic;
> -    AcpiMadtIntsrcovr *intsrcovr;
> -    int i;
> -
> -    madt = acpi_data_push(table_data, sizeof *madt);
> -    madt->local_apic_address = cpu_to_le32(APIC_DEFAULT_ADDRESS);
> -    madt->flags = cpu_to_le32(1);
> -
> -    for (i = 0; i < apic_ids->len; i++) {
> -        adevc->madt_cpu(adev, i, apic_ids, table_data);
> -        if (apic_ids->cpus[i].arch_id > 254) {
> -            x2apic_mode = true;
> -        }
> -    }
> -
> -    io_apic = acpi_data_push(table_data, sizeof *io_apic);
> -    io_apic->type = ACPI_APIC_IO;
> -    io_apic->length = sizeof(*io_apic);
> -    io_apic->io_apic_id = ACPI_BUILD_IOAPIC_ID;
> -    io_apic->address = cpu_to_le32(IO_APIC_DEFAULT_ADDRESS);
> -    io_apic->interrupt = cpu_to_le32(0);
> -
> -    if (x86ms->apic_xrupt_override) {
> -        intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr);
> -        intsrcovr->type   = ACPI_APIC_XRUPT_OVERRIDE;
> -        intsrcovr->length = sizeof(*intsrcovr);
> -        intsrcovr->source = 0;
> -        intsrcovr->gsi    = cpu_to_le32(2);
> -        intsrcovr->flags  = cpu_to_le16(0); /* conforms to bus specifications */
> -    }
> -    for (i = 1; i < 16; i++) {
> -#define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11))
> -        if (!(ACPI_BUILD_PCI_IRQS & (1 << i))) {
> -            /* No need for a INT source override structure. */
> -            continue;
> -        }
> -        intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr);
> -        intsrcovr->type   = ACPI_APIC_XRUPT_OVERRIDE;
> -        intsrcovr->length = sizeof(*intsrcovr);
> -        intsrcovr->source = i;
> -        intsrcovr->gsi    = cpu_to_le32(i);
> -        intsrcovr->flags  = cpu_to_le16(0xd); /* active high, level triggered */
> -    }
> -
> -    if (x2apic_mode) {
> -        AcpiMadtLocalX2ApicNmi *local_nmi;
> -
> -        local_nmi = acpi_data_push(table_data, sizeof *local_nmi);
> -        local_nmi->type   = ACPI_APIC_LOCAL_X2APIC_NMI;
> -        local_nmi->length = sizeof(*local_nmi);
> -        local_nmi->uid    = 0xFFFFFFFF; /* all processors */
> -        local_nmi->flags  = cpu_to_le16(0);
> -        local_nmi->lint   = 1; /* ACPI_LINT1 */
> -    } else {
> -        AcpiMadtLocalNmi *local_nmi;
> -
> -        local_nmi = acpi_data_push(table_data, sizeof *local_nmi);
> -        local_nmi->type         = ACPI_APIC_LOCAL_NMI;
> -        local_nmi->length       = sizeof(*local_nmi);
> -        local_nmi->processor_id = 0xff; /* all processors */
> -        local_nmi->flags        = cpu_to_le16(0);
> -        local_nmi->lint         = 1; /* ACPI_LINT1 */
> -    }
> -
> -    build_header(linker, table_data,
> -                 (void *)(table_data->data + madt_start), "APIC",
> -                 table_data->len - madt_start, 1, NULL, NULL);
> -}
> -
>   static void build_append_pcihp_notify_entry(Aml *method, int slot)
>   {
>       Aml *if_ctx;
> @@ -2533,8 +2413,8 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine)
>       aml_len += tables_blob->len - fadt;
>   
>       acpi_add_table(table_offsets, tables_blob);
> -    build_madt(tables_blob, tables->linker, x86ms,
> -               ACPI_DEVICE_IF(pcms->acpi_dev));
> +    acpi_build_madt(tables_blob, tables->linker, x86ms,
> +                    ACPI_DEVICE_IF(pcms->acpi_dev));
>   
>       vmgenid_dev = find_vmgenid_dev();
>       if (vmgenid_dev) {
> diff --git a/hw/i386/acpi-common.c b/hw/i386/acpi-common.c
> new file mode 100644
> index 000000000000..5caca16a0b59
> --- /dev/null
> +++ b/hw/i386/acpi-common.c
> @@ -0,0 +1,152 @@
> +/* Support for generating ACPI tables and passing them to Guests
> + *
> + * Copyright (C) 2008-2010  Kevin O'Connor <kevin@koconnor.net>
> + * Copyright (C) 2006 Fabrice Bellard
> + * Copyright (C) 2013 Red Hat Inc
> + *
> + * Author: Michael S. Tsirkin <mst@redhat.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> +
> + * This program is distributed in the hope that 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 "qapi/error.h"
> +
> +#include "exec/memory.h"
> +#include "hw/acpi/acpi.h"
> +#include "hw/acpi/aml-build.h"
> +#include "hw/acpi/utils.h"
> +#include "hw/i386/pc.h"
> +#include "target/i386/cpu.h"
> +
> +#include "acpi-build.h"
> +#include "acpi-common.h"
> +
> +void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid,
> +                       const CPUArchIdList *apic_ids, GArray *entry)
> +{
> +    uint32_t apic_id = apic_ids->cpus[uid].arch_id;
> +
> +    /* ACPI spec says that LAPIC entry for non present
> +     * CPU may be omitted from MADT or it must be marked
> +     * as disabled. However omitting non present CPU from
> +     * MADT breaks hotplug on linux. So possible CPUs
> +     * should be put in MADT but kept disabled.
> +     */
> +    if (apic_id < 255) {
> +        AcpiMadtProcessorApic *apic = acpi_data_push(entry, sizeof *apic);
> +
> +        apic->type = ACPI_APIC_PROCESSOR;
> +        apic->length = sizeof(*apic);
> +        apic->processor_id = uid;
> +        apic->local_apic_id = apic_id;
> +        if (apic_ids->cpus[uid].cpu != NULL) {
> +            apic->flags = cpu_to_le32(1);
> +        } else {
> +            apic->flags = cpu_to_le32(0);
> +        }
> +    } else {
> +        AcpiMadtProcessorX2Apic *apic = acpi_data_push(entry, sizeof *apic);
> +
> +        apic->type = ACPI_APIC_LOCAL_X2APIC;
> +        apic->length = sizeof(*apic);
> +        apic->uid = cpu_to_le32(uid);
> +        apic->x2apic_id = cpu_to_le32(apic_id);
> +        if (apic_ids->cpus[uid].cpu != NULL) {
> +            apic->flags = cpu_to_le32(1);
> +        } else {
> +            apic->flags = cpu_to_le32(0);
> +        }
> +    }
> +}
> +
> +void acpi_build_madt(GArray *table_data, BIOSLinker *linker,
> +                     X86MachineState *x86ms, AcpiDeviceIf *adev)
> +{
> +    MachineClass *mc = MACHINE_GET_CLASS(x86ms);
> +    const CPUArchIdList *apic_ids = mc->possible_cpu_arch_ids(MACHINE(x86ms));
> +    int madt_start = table_data->len;
> +    AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(adev);
> +    bool x2apic_mode = false;
> +
> +    AcpiMultipleApicTable *madt;
> +    AcpiMadtIoApic *io_apic;
> +    AcpiMadtIntsrcovr *intsrcovr;
> +    int i;
> +
> +    madt = acpi_data_push(table_data, sizeof *madt);
> +    madt->local_apic_address = cpu_to_le32(APIC_DEFAULT_ADDRESS);
> +    madt->flags = cpu_to_le32(1);
> +
> +    for (i = 0; i < apic_ids->len; i++) {
> +        adevc->madt_cpu(adev, i, apic_ids, table_data);
> +        if (apic_ids->cpus[i].arch_id > 254) {
> +            x2apic_mode = true;
> +        }
> +    }
> +
> +    io_apic = acpi_data_push(table_data, sizeof *io_apic);
> +    io_apic->type = ACPI_APIC_IO;
> +    io_apic->length = sizeof(*io_apic);
> +    io_apic->io_apic_id = ACPI_BUILD_IOAPIC_ID;
> +    io_apic->address = cpu_to_le32(IO_APIC_DEFAULT_ADDRESS);
> +    io_apic->interrupt = cpu_to_le32(0);
> +
> +    if (x86ms->apic_xrupt_override) {
> +        intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr);
> +        intsrcovr->type   = ACPI_APIC_XRUPT_OVERRIDE;
> +        intsrcovr->length = sizeof(*intsrcovr);
> +        intsrcovr->source = 0;
> +        intsrcovr->gsi    = cpu_to_le32(2);
> +        intsrcovr->flags  = cpu_to_le16(0); /* conforms to bus specifications */
> +    }
> +    for (i = 1; i < 16; i++) {
> +#define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11))
> +        if (!(ACPI_BUILD_PCI_IRQS & (1 << i))) {
> +            /* No need for a INT source override structure. */
> +            continue;
> +        }
> +        intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr);
> +        intsrcovr->type   = ACPI_APIC_XRUPT_OVERRIDE;
> +        intsrcovr->length = sizeof(*intsrcovr);
> +        intsrcovr->source = i;
> +        intsrcovr->gsi    = cpu_to_le32(i);
> +        intsrcovr->flags  = cpu_to_le16(0xd); /* active high, level triggered */
> +    }
> +
> +    if (x2apic_mode) {
> +        AcpiMadtLocalX2ApicNmi *local_nmi;
> +
> +        local_nmi = acpi_data_push(table_data, sizeof *local_nmi);
> +        local_nmi->type   = ACPI_APIC_LOCAL_X2APIC_NMI;
> +        local_nmi->length = sizeof(*local_nmi);
> +        local_nmi->uid    = 0xFFFFFFFF; /* all processors */
> +        local_nmi->flags  = cpu_to_le16(0);
> +        local_nmi->lint   = 1; /* ACPI_LINT1 */
> +    } else {
> +        AcpiMadtLocalNmi *local_nmi;
> +
> +        local_nmi = acpi_data_push(table_data, sizeof *local_nmi);
> +        local_nmi->type         = ACPI_APIC_LOCAL_NMI;
> +        local_nmi->length       = sizeof(*local_nmi);
> +        local_nmi->processor_id = 0xff; /* all processors */
> +        local_nmi->flags        = cpu_to_le16(0);
> +        local_nmi->lint         = 1; /* ACPI_LINT1 */
> +    }
> +
> +    build_header(linker, table_data,
> +                 (void *)(table_data->data + madt_start), "APIC",
> +                 table_data->len - madt_start, 1, NULL, NULL);
> +}
> +
> diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs
> index 8ce1b265335b..6abc74551a72 100644
> --- a/hw/i386/Makefile.objs
> +++ b/hw/i386/Makefile.objs
> @@ -16,4 +16,5 @@ obj-$(CONFIG_VMMOUSE) += vmmouse.o
>   obj-$(CONFIG_PC) += port92.o
>   
>   obj-y += kvmvapic.o
> +obj-$(CONFIG_ACPI) += acpi-common.o
>   obj-$(CONFIG_PC) += acpi-build.o
> 

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>



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

* Re: [PATCH v3 12/22] acpi: move acpi_dsdt_add_power_button() to ged
  2020-05-20 13:19 ` [PATCH v3 12/22] acpi: move acpi_dsdt_add_power_button() to ged Gerd Hoffmann
@ 2020-05-20 13:32   ` Philippe Mathieu-Daudé
  2020-05-21  9:03   ` Igor Mammedov
  1 sibling, 0 replies; 61+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-05-20 13:32 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Igor Mammedov, Paolo Bonzini,
	Richard Henderson

On 5/20/20 3:19 PM, Gerd Hoffmann wrote:
> Allow reuse for microvm.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>   include/hw/acpi/generic_event_device.h | 1 +
>   hw/acpi/generic_event_device.c         | 8 ++++++++
>   hw/arm/virt-acpi-build.c               | 8 --------
>   3 files changed, 9 insertions(+), 8 deletions(-)
> 
> diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h
> index 9687cb524258..ebed1ffe4231 100644
> --- a/include/hw/acpi/generic_event_device.h
> +++ b/include/hw/acpi/generic_event_device.h
> @@ -113,5 +113,6 @@ typedef struct AcpiGedState {
>   
>   void build_ged_aml(Aml *table, const char* name, HotplugHandler *hotplug_dev,
>                      uint32_t ged_irq, AmlRegionSpace rs, hwaddr ged_base);
> +void acpi_dsdt_add_power_button(Aml *scope);
>   
>   #endif
> diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c
> index 3072fb4ab32b..cde50da5b3ca 100644
> --- a/hw/acpi/generic_event_device.c
> +++ b/hw/acpi/generic_event_device.c
> @@ -142,6 +142,14 @@ void build_ged_aml(Aml *table, const char *name, HotplugHandler *hotplug_dev,
>       aml_append(table, dev);
>   }
>   
> +void acpi_dsdt_add_power_button(Aml *scope)
> +{
> +    Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE);
> +    aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C")));
> +    aml_append(dev, aml_name_decl("_UID", aml_int(0)));
> +    aml_append(scope, dev);
> +}
> +
>   /* Memory read by the GED _EVT AML dynamic method */
>   static uint64_t ged_evt_read(void *opaque, hwaddr addr, unsigned size)
>   {
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index 1b0a584c7b62..49eacc622219 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -354,14 +354,6 @@ static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry *gpio_memmap,
>       aml_append(scope, dev);
>   }
>   
> -static void acpi_dsdt_add_power_button(Aml *scope)
> -{
> -    Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE);
> -    aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C")));
> -    aml_append(dev, aml_name_decl("_UID", aml_int(0)));
> -    aml_append(scope, dev);
> -}
> -
>   static void
>   build_iort(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
>   {
> 

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>



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

* Re: [PATCH v3 09/22] acpi: ged: rename event memory region
  2020-05-20 13:19 ` [PATCH v3 09/22] acpi: ged: rename event memory region Gerd Hoffmann
@ 2020-05-20 13:33   ` Philippe Mathieu-Daudé
  2020-05-21  7:58   ` Igor Mammedow
  1 sibling, 0 replies; 61+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-05-20 13:33 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Igor Mammedov, Paolo Bonzini,
	Richard Henderson

On 5/20/20 3:19 PM, Gerd Hoffmann wrote:
> Rename memory region and callbacks and ops to carry "evt" in the name
> because a second region will be added shortly.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>   include/hw/acpi/generic_event_device.h |  2 +-
>   hw/acpi/generic_event_device.c         | 16 ++++++++--------
>   2 files changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h
> index 83917de02425..90a9180db572 100644
> --- a/include/hw/acpi/generic_event_device.h
> +++ b/include/hw/acpi/generic_event_device.h
> @@ -86,7 +86,7 @@
>   #define ACPI_GED_NVDIMM_HOTPLUG_EVT 0x4
>   
>   typedef struct GEDState {
> -    MemoryRegion io;
> +    MemoryRegion evt;
>       uint32_t     sel;
>   } GEDState;
>   
> diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c
> index b1cbdd86b66c..1cb34111e59a 100644
> --- a/hw/acpi/generic_event_device.c
> +++ b/hw/acpi/generic_event_device.c
> @@ -142,7 +142,7 @@ void build_ged_aml(Aml *table, const char *name, HotplugHandler *hotplug_dev,
>   }
>   
>   /* Memory read by the GED _EVT AML dynamic method */
> -static uint64_t ged_read(void *opaque, hwaddr addr, unsigned size)
> +static uint64_t ged_evt_read(void *opaque, hwaddr addr, unsigned size)
>   {
>       uint64_t val = 0;
>       GEDState *ged_st = opaque;
> @@ -161,14 +161,14 @@ static uint64_t ged_read(void *opaque, hwaddr addr, unsigned size)
>   }
>   
>   /* Nothing is expected to be written to the GED memory region */
> -static void ged_write(void *opaque, hwaddr addr, uint64_t data,
> -                      unsigned int size)
> +static void ged_evt_write(void *opaque, hwaddr addr, uint64_t data,
> +                          unsigned int size)
>   {
>   }
>   
> -static const MemoryRegionOps ged_ops = {
> -    .read = ged_read,
> -    .write = ged_write,
> +static const MemoryRegionOps ged_evt_ops = {
> +    .read = ged_evt_read,
> +    .write = ged_evt_write,
>       .endianness = DEVICE_LITTLE_ENDIAN,
>       .valid = {
>           .min_access_size = 4,
> @@ -287,9 +287,9 @@ static void acpi_ged_initfn(Object *obj)
>       SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
>       GEDState *ged_st = &s->ged_state;
>   
> -    memory_region_init_io(&ged_st->io, obj, &ged_ops, ged_st,
> +    memory_region_init_io(&ged_st->evt, obj, &ged_evt_ops, ged_st,
>                             TYPE_ACPI_GED, ACPI_GED_EVT_SEL_LEN);
> -    sysbus_init_mmio(sbd, &ged_st->io);
> +    sysbus_init_mmio(sbd, &ged_st->evt);
>   
>       sysbus_init_irq(sbd, &s->irq);
>   
> 

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>



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

* Re: [PATCH v3 14/22] microvm: use 2G split unconditionally
  2020-05-20 13:19 ` [PATCH v3 14/22] microvm: use 2G split unconditionally Gerd Hoffmann
@ 2020-05-20 13:34   ` Philippe Mathieu-Daudé
  2020-05-21  9:14   ` Igor Mammedov
  2020-05-21  9:29   ` Igor Mammedov
  2 siblings, 0 replies; 61+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-05-20 13:34 UTC (permalink / raw)
  To: Gerd Hoffmann, qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	Shannon Zhao, qemu-arm, Igor Mammedov, Paolo Bonzini,
	Richard Henderson

On 5/20/20 3:19 PM, Gerd Hoffmann wrote:
> Looks like the logiv was copied over from q35.

Typo 'logiv' -> 'logic'.

> 
> q35 does this for backward compatibility, there is no reason to do this
> on microvm though.  So split @ 2G unconditionally.

Yes please!

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>   hw/i386/microvm.c | 16 +---------------
>   1 file changed, 1 insertion(+), 15 deletions(-)
> 
> diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
> index 867d3d652145..b8f0d3283758 100644
> --- a/hw/i386/microvm.c
> +++ b/hw/i386/microvm.c
> @@ -170,23 +170,9 @@ static void microvm_memory_init(MicrovmMachineState *mms)
>       MemoryRegion *ram_below_4g, *ram_above_4g;
>       MemoryRegion *system_memory = get_system_memory();
>       FWCfgState *fw_cfg;
> -    ram_addr_t lowmem;
> +    ram_addr_t lowmem = 0x80000000; /* 2G */
>       int i;
>   
> -    /*
> -     * Check whether RAM fits below 4G (leaving 1/2 GByte for IO memory
> -     * and 256 Mbytes for PCI Express Enhanced Configuration Access Mapping
> -     * also known as MMCFG).
> -     * If it doesn't, we need to split it in chunks below and above 4G.
> -     * In any case, try to make sure that guest addresses aligned at
> -     * 1G boundaries get mapped to host addresses aligned at 1G boundaries.
> -     */
> -    if (machine->ram_size >= 0xb0000000) {
> -        lowmem = 0x80000000;
> -    } else {
> -        lowmem = 0xb0000000;
> -    }
> -
>       /*
>        * Handle the machine opt max-ram-below-4g.  It is basically doing
>        * min(qemu limit, user limit).
> 



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

* Re: [PATCH v3 13/22] x86: coldplug cpus
  2020-05-20 13:19 ` [PATCH v3 13/22] x86: coldplug cpus Gerd Hoffmann
@ 2020-05-20 14:07   ` Igor Mammedov
  0 siblings, 0 replies; 61+ messages in thread
From: Igor Mammedov @ 2020-05-20 14:07 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Wed, 20 May 2020 15:19:54 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> microvm needs this, for correct madt creation
> (make sure enable bit is set).
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  hw/i386/x86.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/hw/i386/x86.c b/hw/i386/x86.c
> index 7a3bc7ab6639..ac7a0a958781 100644
> --- a/hw/i386/x86.c
> +++ b/hw/i386/x86.c
> @@ -118,6 +118,7 @@ uint32_t x86_cpu_apic_id_from_index(X86MachineState *x86ms,
>  
>  void x86_cpu_new(X86MachineState *x86ms, int64_t apic_id, Error **errp)
>  {
> +    MachineClass *mc = MACHINE_GET_CLASS(x86ms);
>      Object *cpu = NULL;
>      Error *local_err = NULL;
>  
> @@ -126,6 +127,16 @@ void x86_cpu_new(X86MachineState *x86ms, int64_t apic_id, Error **errp)
>      object_property_set_uint(cpu, apic_id, "apic-id", &local_err);
>      object_property_set_bool(cpu, true, "realized", &local_err);
>  
> +    if (!mc->has_hotpluggable_cpus) {
> +        /* coldplug cpu */
> +        MachineState *ms = MACHINE(x86ms);
> +        int i = 0;
> +        while (ms->possible_cpus->cpus[i].arch_id != apic_id) {
> +            i++;
> +        }
> +        ms->possible_cpus->cpus[i].cpu = cpu;
> +    }

I'm thinking about removing x86_cpu_new alogether (in favor of device_add),
so I'd preffer avoid adding direct access to possible_cpus here.

that's the job of pc_cpu_plug (and possibly pc_cpu_pre_plug) in combination with
static const TypeInfo pc_machine_info = {
    .name = TYPE_PC_MACHINE,
...
    .interfaces = (InterfaceInfo[]) {
         { TYPE_HOTPLUG_HANDLER },
         { }
    },
};

I'd reuse common code if possible in microvm or make microvm specific simplified version of it
if it makes job easier.

>      object_unref(cpu);
>      error_propagate(errp, local_err);
>  }



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

* Re: [PATCH v3 00/22] microvm: add acpi support
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (21 preceding siblings ...)
  2020-05-20 13:20 ` [PATCH v3 22/22] [RfC] acpi: flip default to off for microvm Gerd Hoffmann
@ 2020-05-20 15:46 ` no-reply
  2020-05-20 15:50 ` no-reply
                   ` (2 subsequent siblings)
  25 siblings, 0 replies; 61+ messages in thread
From: no-reply @ 2020-05-20 15:46 UTC (permalink / raw)
  To: kraxel
  Cc: peter.maydell, ehabkost, slp, mst, qemu-devel, shannon.zhaosl,
	qemu-arm, kraxel, imammedo, pbonzini, rth

Patchew URL: https://patchew.org/QEMU/20200520132003.9492-1-kraxel@redhat.com/



Hi,

This series failed the docker-quick@centos7 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-centos7 V=1 NETWORK=1
time make docker-test-quick@centos7 SHOW_ENV=1 J=14 NETWORK=1
=== TEST SCRIPT END ===

  CC      aarch64-softmmu/hw/arm/integratorcp.o
  CC      x86_64-softmmu/hw/i386/kvm/i8254.o
/tmp/qemu-test/src/hw/i386/acpi-microvm.c: In function 'build_dsdt_microvm':
/tmp/qemu-test/src/hw/i386/acpi-microvm.c:109:5: error: implicit declaration of function 'fw_cfg_add_acpi_dsdt' [-Werror=implicit-function-declaration]
     fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg);
     ^
/tmp/qemu-test/src/hw/i386/acpi-microvm.c:109:5: error: nested extern declaration of 'fw_cfg_add_acpi_dsdt' [-Werror=nested-externs]
cc1: all warnings being treated as errors
make[1]: *** [hw/i386/acpi-microvm.o] Error 1
make[1]: *** Waiting for unfinished jobs....
  CC      aarch64-softmmu/hw/arm/mainstone.o
  CC      aarch64-softmmu/hw/arm/microbit.o
---
  CC      aarch64-softmmu/target/arm/gdbstub64.o
  CC      aarch64-softmmu/target/arm/machine.o
  CC      aarch64-softmmu/target/arm/arch_dump.o
make: *** [x86_64-softmmu/all] Error 2
make: *** Waiting for unfinished jobs....
  CC      aarch64-softmmu/target/arm/monitor.o
  CC      aarch64-softmmu/target/arm/arm-powerctl.o
---
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['sudo', '-n', 'docker', 'run', '--label', 'com.qemu.instance.uuid=5cfa0900fad74d3e96f029386896f751', '-u', '1001', '--security-opt', 'seccomp=unconfined', '--rm', '-e', 'TARGET_LIST=', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=14', '-e', 'DEBUG=', '-e', 'SHOW_ENV=1', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/home/patchew/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-612gx0r0/src/docker-src.2020-05-20-11.43.56.32095:/var/tmp/qemu:z,ro', 'qemu:centos7', '/var/tmp/qemu/run', 'test-quick']' returned non-zero exit status 2.
filter=--filter=label=com.qemu.instance.uuid=5cfa0900fad74d3e96f029386896f751
make[1]: *** [docker-run] Error 1
make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-612gx0r0/src'
make: *** [docker-run-test-quick@centos7] Error 2

real    2m31.578s
user    0m8.620s


The full log is available at
http://patchew.org/logs/20200520132003.9492-1-kraxel@redhat.com/testing.docker-quick@centos7/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com

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

* Re: [PATCH v3 00/22] microvm: add acpi support
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (22 preceding siblings ...)
  2020-05-20 15:46 ` [PATCH v3 00/22] microvm: add acpi support no-reply
@ 2020-05-20 15:50 ` no-reply
  2020-05-20 15:51 ` no-reply
  2020-05-20 15:53 ` no-reply
  25 siblings, 0 replies; 61+ messages in thread
From: no-reply @ 2020-05-20 15:50 UTC (permalink / raw)
  To: kraxel
  Cc: peter.maydell, ehabkost, slp, mst, qemu-devel, shannon.zhaosl,
	qemu-arm, kraxel, imammedo, pbonzini, rth

Patchew URL: https://patchew.org/QEMU/20200520132003.9492-1-kraxel@redhat.com/



Hi,

This series seems to have some coding style problems. See output below for
more information:

Message-id: 20200520132003.9492-1-kraxel@redhat.com
Subject: [PATCH v3 00/22] microvm: add acpi support
Type: series

=== 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/20200520132003.9492-1-kraxel@redhat.com -> patchew/20200520132003.9492-1-kraxel@redhat.com
Switched to a new branch 'test'
7280d50 acpi: flip default to off for microvm
0c46cb7 acpi: add per machine type acpi default
3932159 microvm/acpi: disable virtio-mmio cmdline hack
88c8990 microvm/acpi: use seabios with acpi=on
00de58b microvm/acpi: use GSI 16-23 for virtio
f442b20 microvm/acpi: add acpi_dsdt_add_virtio() for x86
50bd765 microvm/acpi: add minimal acpi support
b44d3ee2 microvm: make virtio irq base runtime configurable
8473717 microvm: use 2G split unconditionally
9a8690b x86: coldplug cpus
873496e acpi: move acpi_dsdt_add_power_button() to ged
570b71e acpi: ged: add x86 device variant.
42157e1 acpi: ged: add control regs
963229e acpi: ged: rename event memory region
ffcb835 acpi: fadt: add hw-reduced sleep register support
628859e acpi: madt: skip pci override on pci-less systems.
d7248a7 acpi: create acpi-common.c and move madt code
33254f5 acpi: make build_madt() more generic.
447375a seabios: update binaries to master snapshot
f474461 seabios: update config & build rules
583a45c seabios: update submodule to master snapshot
ce0b4a0 microvm: name qboot binary qboot.bin

=== OUTPUT BEGIN ===
1/22 Checking commit ce0b4a0ec4ce (microvm: name qboot binary qboot.bin)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#36: 
rename from pc-bios/bios-microvm.bin

total: 0 errors, 1 warnings, 35 lines checked

Patch 1/22 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
2/22 Checking commit 583a45cbd0ff (seabios: update submodule to master snapshot)
3/22 Checking commit f474461987ec (seabios: update config & build rules)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#45: 
new file mode 100644

total: 0 errors, 1 warnings, 50 lines checked

Patch 3/22 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
4/22 Checking commit 447375a74a06 (seabios: update binaries to master snapshot)
5/22 Checking commit 33254f57d62c (acpi: make build_madt() more generic.)
6/22 Checking commit d7248a7438fe (acpi: create acpi-common.c and move madt code)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#182: 
new file mode 100644

WARNING: Block comments use a leading /* on a separate line
#187: FILE: hw/i386/acpi-common.c:1:
+/* Support for generating ACPI tables and passing them to Guests

WARNING: Block comments use a leading /* on a separate line
#227: FILE: hw/i386/acpi-common.c:41:
+    /* ACPI spec says that LAPIC entry for non present

ERROR: spaces required around that '<<' (ctx:VxV)
#301: FILE: hw/i386/acpi-common.c:115:
+#define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11))
                                ^

ERROR: spaces required around that '<<' (ctx:VxV)
#301: FILE: hw/i386/acpi-common.c:115:
+#define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11))
                                         ^

ERROR: spaces required around that '<<' (ctx:VxV)
#301: FILE: hw/i386/acpi-common.c:115:
+#define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11))
                                                  ^

ERROR: spaces required around that '<<' (ctx:VxV)
#301: FILE: hw/i386/acpi-common.c:115:
+#define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11))
                                                            ^

total: 4 errors, 3 warnings, 321 lines checked

Patch 6/22 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

7/22 Checking commit 628859e5cd4e (acpi: madt: skip pci override on pci-less systems.)
WARNING: line over 80 characters
#62: FILE: hw/i386/acpi-common.c:128:
+            intsrcovr->flags  = cpu_to_le16(0xd); /* active high, level triggered */

total: 0 errors, 1 warnings, 56 lines checked

Patch 7/22 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
8/22 Checking commit ffcb8350661b (acpi: fadt: add hw-reduced sleep register support)
9/22 Checking commit 963229ef8a9a (acpi: ged: rename event memory region)
10/22 Checking commit 42157e12a08c (acpi: ged: add control regs)
11/22 Checking commit 570b71e5b8fa (acpi: ged: add x86 device variant.)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#24: 
new file mode 100644

total: 0 errors, 1 warnings, 51 lines checked

Patch 11/22 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
12/22 Checking commit 873496e2d411 (acpi: move acpi_dsdt_add_power_button() to ged)
13/22 Checking commit 9a8690b252cc (x86: coldplug cpus)
14/22 Checking commit 8473717fafed (microvm: use 2G split unconditionally)
15/22 Checking commit b44d3ee2c4d2 (microvm: make virtio irq base runtime configurable)
16/22 Checking commit 50bd7654bd78 (microvm/acpi: add minimal acpi support)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#34: 
new file mode 100644

WARNING: Block comments use a leading /* on a separate line
#39: FILE: hw/i386/acpi-microvm.c:1:
+/* Support for generating ACPI tables and passing them to Guests

WARNING: Block comments use a leading /* on a separate line
#150: FILE: hw/i386/acpi-microvm.c:112:
+    table_offsets = g_array_new(false, true /* clear */,

WARNING: Block comments use a leading /* on a separate line
#154: FILE: hw/i386/acpi-microvm.c:116:
+                             64 /* Ensure FACS is aligned */,

WARNING: Block comments use a leading /* on a separate line
#155: FILE: hw/i386/acpi-microvm.c:117:
+                             false /* high memory */);

total: 0 errors, 5 warnings, 293 lines checked

Patch 16/22 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
17/22 Checking commit f442b20044f3 (microvm/acpi: add acpi_dsdt_add_virtio() for x86)
18/22 Checking commit 00de58be2c9d (microvm/acpi: use GSI 16-23 for virtio)
19/22 Checking commit 88c8990ffa2f (microvm/acpi: use seabios with acpi=on)
20/22 Checking commit 3932159d5e0c (microvm/acpi: disable virtio-mmio cmdline hack)
21/22 Checking commit 0c46cb7b51d7 (acpi: add per machine type acpi default)
22/22 Checking commit 7280d5050ee8 (acpi: flip default to off for microvm)
=== OUTPUT END ===

Test command exited with code: 1


The full log is available at
http://patchew.org/logs/20200520132003.9492-1-kraxel@redhat.com/testing.checkpatch/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com

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

* Re: [PATCH v3 00/22] microvm: add acpi support
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (23 preceding siblings ...)
  2020-05-20 15:50 ` no-reply
@ 2020-05-20 15:51 ` no-reply
  2020-05-20 15:53 ` no-reply
  25 siblings, 0 replies; 61+ messages in thread
From: no-reply @ 2020-05-20 15:51 UTC (permalink / raw)
  To: kraxel
  Cc: peter.maydell, ehabkost, slp, mst, qemu-devel, shannon.zhaosl,
	qemu-arm, kraxel, imammedo, pbonzini, rth

Patchew URL: https://patchew.org/QEMU/20200520132003.9492-1-kraxel@redhat.com/



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
export ARCH=x86_64
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 ===

  CC      x86_64-softmmu/hw/i386/xen/xen_pvdevice.o
  CC      x86_64-softmmu/hw/i386/xen/xen-hvm.o
  CC      x86_64-softmmu/hw/i386/xen/xen-mapcache.o
/tmp/qemu-test/src/hw/i386/acpi-microvm.c:109:5: error: implicit declaration of function 'fw_cfg_add_acpi_dsdt' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg);
    ^
/tmp/qemu-test/src/hw/i386/acpi-microvm.c:109:5: error: this function declaration is not a prototype [-Werror,-Wstrict-prototypes]
2 errors generated.
make[1]: *** [/tmp/qemu-test/src/rules.mak:69: hw/i386/acpi-microvm.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:527: x86_64-softmmu/all] Error 2
Traceback (most recent call last):
  File "./tests/docker/docker.py", line 664, in <module>
    sys.exit(main())
---
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['sudo', '-n', 'docker', 'run', '--label', 'com.qemu.instance.uuid=3620f0cf6349445fb42a098ed6ef40c8', '-u', '1001', '--security-opt', 'seccomp=unconfined', '--rm', '-e', 'TARGET_LIST=x86_64-softmmu', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=14', '-e', 'DEBUG=', '-e', 'SHOW_ENV=', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/home/patchew/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-lc0gao83/src/docker-src.2020-05-20-11.47.05.9825:/var/tmp/qemu:z,ro', 'qemu:fedora', '/var/tmp/qemu/run', 'test-debug']' returned non-zero exit status 2.
filter=--filter=label=com.qemu.instance.uuid=3620f0cf6349445fb42a098ed6ef40c8
make[1]: *** [docker-run] Error 1
make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-lc0gao83/src'
make: *** [docker-run-test-debug@fedora] Error 2

real    3m56.264s
user    0m8.551s


The full log is available at
http://patchew.org/logs/20200520132003.9492-1-kraxel@redhat.com/testing.asan/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com

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

* Re: [PATCH v3 00/22] microvm: add acpi support
  2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
                   ` (24 preceding siblings ...)
  2020-05-20 15:51 ` no-reply
@ 2020-05-20 15:53 ` no-reply
  25 siblings, 0 replies; 61+ messages in thread
From: no-reply @ 2020-05-20 15:53 UTC (permalink / raw)
  To: kraxel
  Cc: peter.maydell, ehabkost, slp, mst, qemu-devel, shannon.zhaosl,
	qemu-arm, kraxel, imammedo, pbonzini, rth

Patchew URL: https://patchew.org/QEMU/20200520132003.9492-1-kraxel@redhat.com/



Hi,

This series failed the docker-mingw@fedora 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
export ARCH=x86_64
make docker-image-fedora V=1 NETWORK=1
time make docker-test-mingw@fedora J=14 NETWORK=1
=== TEST SCRIPT END ===

  CC      x86_64-softmmu/target/i386/mpx_helper.o
  CC      x86_64-softmmu/target/i386/seg_helper.o
/tmp/qemu-test/src/hw/i386/acpi-microvm.c: In function 'build_dsdt_microvm':
/tmp/qemu-test/src/hw/i386/acpi-microvm.c:109:5: error: implicit declaration of function 'fw_cfg_add_acpi_dsdt'; did you mean 'fw_cfg_add_file'? [-Werror=implicit-function-declaration]
     fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg);
     ^~~~~~~~~~~~~~~~~~~~
     fw_cfg_add_file
/tmp/qemu-test/src/hw/i386/acpi-microvm.c:109:5: error: nested extern declaration of 'fw_cfg_add_acpi_dsdt' [-Werror=nested-externs]
cc1: all warnings being treated as errors
  CC      x86_64-softmmu/target/i386/smm_helper.o
make[1]: *** [/tmp/qemu-test/src/rules.mak:69: hw/i386/acpi-microvm.o] Error 1
make[1]: *** Waiting for unfinished jobs....
  CC      aarch64-softmmu/hw/arm/digic_boards.o
  CC      aarch64-softmmu/hw/arm/exynos4_boards.o
---
  CC      aarch64-softmmu/hw/arm/vexpress.o
  CC      aarch64-softmmu/hw/arm/xilinx_zynq.o
  CC      aarch64-softmmu/hw/arm/sabrelite.o
make: *** [Makefile:527: x86_64-softmmu/all] Error 2
make: *** Waiting for unfinished jobs....
  CC      aarch64-softmmu/hw/arm/armv7m.o
  CC      aarch64-softmmu/hw/arm/exynos4210.o
---
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['sudo', '-n', 'docker', 'run', '--label', 'com.qemu.instance.uuid=87e79745f2ae42ae974eb9b247d4af76', '-u', '1003', '--security-opt', 'seccomp=unconfined', '--rm', '-e', 'TARGET_LIST=', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=14', '-e', 'DEBUG=', '-e', 'SHOW_ENV=', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/home/patchew2/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-43fhva9t/src/docker-src.2020-05-20-11.50.45.16713:/var/tmp/qemu:z,ro', 'qemu:fedora', '/var/tmp/qemu/run', 'test-mingw']' returned non-zero exit status 2.
filter=--filter=label=com.qemu.instance.uuid=87e79745f2ae42ae974eb9b247d4af76
make[1]: *** [docker-run] Error 1
make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-43fhva9t/src'
make: *** [docker-run-test-mingw@fedora] Error 2

real    3m1.622s
user    0m7.423s


The full log is available at
http://patchew.org/logs/20200520132003.9492-1-kraxel@redhat.com/testing.docker-mingw@fedora/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com

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

* Re: [PATCH v3 09/22] acpi: ged: rename event memory region
  2020-05-20 13:19 ` [PATCH v3 09/22] acpi: ged: rename event memory region Gerd Hoffmann
  2020-05-20 13:33   ` Philippe Mathieu-Daudé
@ 2020-05-21  7:58   ` Igor Mammedow
  1 sibling, 0 replies; 61+ messages in thread
From: Igor Mammedow @ 2020-05-21  7:58 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Wed, 20 May 2020 15:19:50 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> Rename memory region and callbacks and ops to carry "evt" in the name
> because a second region will be added shortly.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Reviewed-by: Igor Mammedow <imammedo@redhat.com>

> ---
>  include/hw/acpi/generic_event_device.h |  2 +-
>  hw/acpi/generic_event_device.c         | 16 ++++++++--------
>  2 files changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/include/hw/acpi/generic_event_device.h
> b/include/hw/acpi/generic_event_device.h index
> 83917de02425..90a9180db572 100644 ---
> a/include/hw/acpi/generic_event_device.h +++
> b/include/hw/acpi/generic_event_device.h @@ -86,7 +86,7 @@
>  #define ACPI_GED_NVDIMM_HOTPLUG_EVT 0x4
>  
>  typedef struct GEDState {
> -    MemoryRegion io;
> +    MemoryRegion evt;
>      uint32_t     sel;
>  } GEDState;
>  
> diff --git a/hw/acpi/generic_event_device.c
> b/hw/acpi/generic_event_device.c index b1cbdd86b66c..1cb34111e59a
> 100644 --- a/hw/acpi/generic_event_device.c
> +++ b/hw/acpi/generic_event_device.c
> @@ -142,7 +142,7 @@ void build_ged_aml(Aml *table, const char *name,
> HotplugHandler *hotplug_dev, }
>  
>  /* Memory read by the GED _EVT AML dynamic method */
> -static uint64_t ged_read(void *opaque, hwaddr addr, unsigned size)
> +static uint64_t ged_evt_read(void *opaque, hwaddr addr, unsigned
> size) {
>      uint64_t val = 0;
>      GEDState *ged_st = opaque;
> @@ -161,14 +161,14 @@ static uint64_t ged_read(void *opaque, hwaddr
> addr, unsigned size) }
>  
>  /* Nothing is expected to be written to the GED memory region */
> -static void ged_write(void *opaque, hwaddr addr, uint64_t data,
> -                      unsigned int size)
> +static void ged_evt_write(void *opaque, hwaddr addr, uint64_t data,
> +                          unsigned int size)
>  {
>  }
>  
> -static const MemoryRegionOps ged_ops = {
> -    .read = ged_read,
> -    .write = ged_write,
> +static const MemoryRegionOps ged_evt_ops = {
> +    .read = ged_evt_read,
> +    .write = ged_evt_write,
>      .endianness = DEVICE_LITTLE_ENDIAN,
>      .valid = {
>          .min_access_size = 4,
> @@ -287,9 +287,9 @@ static void acpi_ged_initfn(Object *obj)
>      SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
>      GEDState *ged_st = &s->ged_state;
>  
> -    memory_region_init_io(&ged_st->io, obj, &ged_ops, ged_st,
> +    memory_region_init_io(&ged_st->evt, obj, &ged_evt_ops, ged_st,
>                            TYPE_ACPI_GED, ACPI_GED_EVT_SEL_LEN);
> -    sysbus_init_mmio(sbd, &ged_st->io);
> +    sysbus_init_mmio(sbd, &ged_st->evt);
>  
>      sysbus_init_irq(sbd, &s->irq);
>  



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

* Re: [PATCH v3 10/22] acpi: ged: add control regs
  2020-05-20 13:19 ` [PATCH v3 10/22] acpi: ged: add control regs Gerd Hoffmann
@ 2020-05-21  8:58   ` Igor Mammedov
  0 siblings, 0 replies; 61+ messages in thread
From: Igor Mammedov @ 2020-05-21  8:58 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Wed, 20 May 2020 15:19:51 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> Add control regs (sleep, reset) for hw-reduced acpi.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

this should be acompanied by docs update
  docs/specs/acpi_hw_reduced_hotplug.rst
to document new registers and their semantics
and probaly rename file to something more appropriate

> ---
>  include/hw/acpi/generic_event_device.h |  7 ++++
>  hw/acpi/generic_event_device.c         | 44 ++++++++++++++++++++++++++
>  2 files changed, 51 insertions(+)
> 
> diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h
> index 90a9180db572..474c92198080 100644
> --- a/include/hw/acpi/generic_event_device.h
> +++ b/include/hw/acpi/generic_event_device.h
> @@ -72,6 +72,12 @@
>  #define ACPI_GED_EVT_SEL_OFFSET    0x0
>  #define ACPI_GED_EVT_SEL_LEN       0x4
>  
> +#define ACPI_GED_REG_SLEEP_CTL     0x00
> +#define ACPI_GED_REG_SLEEP_STS     0x01
> +#define ACPI_GED_REG_RESET         0x02
> +#define   ACPI_GED_RESET_VALUE     0x42
> +#define ACPI_GED_REG_COUNT         0x03
> +
>  #define GED_DEVICE      "GED"
>  #define AML_GED_EVT_REG "EREG"
>  #define AML_GED_EVT_SEL "ESEL"
> @@ -87,6 +93,7 @@
>  
>  typedef struct GEDState {
>      MemoryRegion evt;
> +    MemoryRegion regs;
>      uint32_t     sel;
>  } GEDState;
>  
> diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c
> index 1cb34111e59a..3072fb4ab32b 100644
> --- a/hw/acpi/generic_event_device.c
> +++ b/hw/acpi/generic_event_device.c
> @@ -20,6 +20,7 @@
>  #include "hw/qdev-properties.h"
>  #include "migration/vmstate.h"
>  #include "qemu/error-report.h"
> +#include "sysemu/runstate.h"
>  
>  static const uint32_t ged_supported_events[] = {
>      ACPI_GED_MEM_HOTPLUG_EVT,
> @@ -176,6 +177,45 @@ static const MemoryRegionOps ged_evt_ops = {
>      },
>  };
>  
> +static uint64_t ged_regs_read(void *opaque, hwaddr addr, unsigned size)
> +{
> +    return 0;
> +}
> +
> +static void ged_regs_write(void *opaque, hwaddr addr, uint64_t data,
> +                           unsigned int size)
> +{
> +    bool slp_en;
> +    int slp_typ;
> +
> +    switch (addr) {
> +    case ACPI_GED_REG_SLEEP_CTL:
> +        slp_typ = (data >> 2) & 0x07;
> +        slp_en  = (data >> 5) & 0x01;
> +        if (slp_en && slp_typ == 5) {
> +            qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
> +        }
> +        return;
> +    case ACPI_GED_REG_SLEEP_STS:
> +        return;
> +    case ACPI_GED_REG_RESET:
> +        if (data == ACPI_GED_RESET_VALUE) {
> +            qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
> +        }
> +        return;
> +    }
> +}
> +
> +static const MemoryRegionOps ged_regs_ops = {
> +    .read = ged_regs_read,
> +    .write = ged_regs_write,
> +    .endianness = DEVICE_LITTLE_ENDIAN,
> +    .valid = {
> +        .min_access_size = 1,
> +        .max_access_size = 1,
> +    },
> +};
> +
>  static void acpi_ged_device_plug_cb(HotplugHandler *hotplug_dev,
>                                      DeviceState *dev, Error **errp)
>  {
> @@ -305,6 +345,10 @@ static void acpi_ged_initfn(Object *obj)
>       sysbus_init_mmio(sbd, &s->container_memhp);
>       acpi_memory_hotplug_init(&s->container_memhp, OBJECT(dev),
>                                &s->memhp_state, 0);
> +
> +    memory_region_init_io(&ged_st->regs, obj, &ged_regs_ops, ged_st,
> +                          TYPE_ACPI_GED "-regs", ACPI_GED_REG_COUNT);
> +    sysbus_init_mmio(sbd, &ged_st->regs);
>  }
>  
>  static void acpi_ged_class_init(ObjectClass *class, void *data)



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

* Re: [PATCH v3 11/22] acpi: ged: add x86 device variant.
  2020-05-20 13:19 ` [PATCH v3 11/22] acpi: ged: add x86 device variant Gerd Hoffmann
@ 2020-05-21  9:01   ` Igor Mammedov
  0 siblings, 0 replies; 61+ messages in thread
From: Igor Mammedov @ 2020-05-21  9:01 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Wed, 20 May 2020 15:19:52 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> Set AcpiDeviceIfClass->madt_cpu,
> otherwise identical to TYPE_ACPI_GED.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/acpi/generic_event_device.h |  4 +++
>  hw/i386/generic_event_device_x86.c     | 36 ++++++++++++++++++++++++++
>  hw/i386/Makefile.objs                  |  1 +
>  3 files changed, 41 insertions(+)
>  create mode 100644 hw/i386/generic_event_device_x86.c
> 
> diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h
> index 474c92198080..9687cb524258 100644
> --- a/include/hw/acpi/generic_event_device.h
> +++ b/include/hw/acpi/generic_event_device.h
> @@ -69,6 +69,10 @@
>  #define ACPI_GED(obj) \
>      OBJECT_CHECK(AcpiGedState, (obj), TYPE_ACPI_GED)
>  
> +#define TYPE_ACPI_GED_X86 "acpi-ged-x86"
> +#define ACPI_GED_X86(obj) \
> +    OBJECT_CHECK(AcpiGedX86State, (obj), TYPE_ACPI_GED_X86)
> +
>  #define ACPI_GED_EVT_SEL_OFFSET    0x0
>  #define ACPI_GED_EVT_SEL_LEN       0x4
>  
> diff --git a/hw/i386/generic_event_device_x86.c b/hw/i386/generic_event_device_x86.c
> new file mode 100644
> index 000000000000..e26fb02a2ef6
> --- /dev/null
> +++ b/hw/i386/generic_event_device_x86.c
> @@ -0,0 +1,36 @@
> +/*
> + * x86 variant of the generic event device for hw reduced acpi
> + *
> + * 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.
> + */
> +
> +#include "qemu/osdep.h"
> +#include "hw/acpi/generic_event_device.h"
> +#include "hw/i386/pc.h"
> +
> +static void acpi_ged_x86_class_init(ObjectClass *class, void *data)
> +{
> +    AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_CLASS(class);
> +
> +    adevc->madt_cpu = pc_madt_cpu_entry;
> +}
> +
> +static const TypeInfo acpi_ged_x86_info = {
> +    .name          = TYPE_ACPI_GED_X86,
> +    .parent        = TYPE_ACPI_GED,
> +    .class_init    = acpi_ged_x86_class_init,
> +    .interfaces = (InterfaceInfo[]) {
> +        { TYPE_HOTPLUG_HANDLER },
> +        { TYPE_ACPI_DEVICE_IF },
> +        { }
> +    }
> +};
> +
> +static void acpi_ged_x86_register_types(void)
> +{
> +    type_register_static(&acpi_ged_x86_info);
> +}
> +
> +type_init(acpi_ged_x86_register_types)
> diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs
> index 6abc74551a72..622739305882 100644
> --- a/hw/i386/Makefile.objs
> +++ b/hw/i386/Makefile.objs
> @@ -17,4 +17,5 @@ obj-$(CONFIG_PC) += port92.o
>  
>  obj-y += kvmvapic.o
>  obj-$(CONFIG_ACPI) += acpi-common.o
> +obj-$(CONFIG_ACPI_HW_REDUCED) += generic_event_device_x86.o
>  obj-$(CONFIG_PC) += acpi-build.o



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

* Re: [PATCH v3 12/22] acpi: move acpi_dsdt_add_power_button() to ged
  2020-05-20 13:19 ` [PATCH v3 12/22] acpi: move acpi_dsdt_add_power_button() to ged Gerd Hoffmann
  2020-05-20 13:32   ` Philippe Mathieu-Daudé
@ 2020-05-21  9:03   ` Igor Mammedov
  1 sibling, 0 replies; 61+ messages in thread
From: Igor Mammedov @ 2020-05-21  9:03 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Wed, 20 May 2020 15:19:53 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> Allow reuse for microvm.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/acpi/generic_event_device.h | 1 +
>  hw/acpi/generic_event_device.c         | 8 ++++++++
>  hw/arm/virt-acpi-build.c               | 8 --------
>  3 files changed, 9 insertions(+), 8 deletions(-)
> 
> diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h
> index 9687cb524258..ebed1ffe4231 100644
> --- a/include/hw/acpi/generic_event_device.h
> +++ b/include/hw/acpi/generic_event_device.h
> @@ -113,5 +113,6 @@ typedef struct AcpiGedState {
>  
>  void build_ged_aml(Aml *table, const char* name, HotplugHandler *hotplug_dev,
>                     uint32_t ged_irq, AmlRegionSpace rs, hwaddr ged_base);
> +void acpi_dsdt_add_power_button(Aml *scope);
>  
>  #endif
> diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c
> index 3072fb4ab32b..cde50da5b3ca 100644
> --- a/hw/acpi/generic_event_device.c
> +++ b/hw/acpi/generic_event_device.c
> @@ -142,6 +142,14 @@ void build_ged_aml(Aml *table, const char *name, HotplugHandler *hotplug_dev,
>      aml_append(table, dev);
>  }
>  
> +void acpi_dsdt_add_power_button(Aml *scope)
> +{
> +    Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE);
> +    aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C")));
> +    aml_append(dev, aml_name_decl("_UID", aml_int(0)));
> +    aml_append(scope, dev);
> +}
> +
>  /* Memory read by the GED _EVT AML dynamic method */
>  static uint64_t ged_evt_read(void *opaque, hwaddr addr, unsigned size)
>  {
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index 1b0a584c7b62..49eacc622219 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -354,14 +354,6 @@ static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry *gpio_memmap,
>      aml_append(scope, dev);
>  }
>  
> -static void acpi_dsdt_add_power_button(Aml *scope)
> -{
> -    Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE);
> -    aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C")));
> -    aml_append(dev, aml_name_decl("_UID", aml_int(0)));
> -    aml_append(scope, dev);
> -}
> -
>  static void
>  build_iort(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
>  {



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

* Re: [PATCH v3 14/22] microvm: use 2G split unconditionally
  2020-05-20 13:19 ` [PATCH v3 14/22] microvm: use 2G split unconditionally Gerd Hoffmann
  2020-05-20 13:34   ` Philippe Mathieu-Daudé
@ 2020-05-21  9:14   ` Igor Mammedov
  2020-05-21  9:29   ` Igor Mammedov
  2 siblings, 0 replies; 61+ messages in thread
From: Igor Mammedov @ 2020-05-21  9:14 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Wed, 20 May 2020 15:19:55 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> Looks like the logiv was copied over from q35.
> 
> q35 does this for backward compatibility, there is no reason to do this
> on microvm though.  So split @ 2G unconditionally.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  hw/i386/microvm.c | 16 +---------------
>  1 file changed, 1 insertion(+), 15 deletions(-)
> 
> diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
> index 867d3d652145..b8f0d3283758 100644
> --- a/hw/i386/microvm.c
> +++ b/hw/i386/microvm.c
> @@ -170,23 +170,9 @@ static void microvm_memory_init(MicrovmMachineState *mms)
>      MemoryRegion *ram_below_4g, *ram_above_4g;
>      MemoryRegion *system_memory = get_system_memory();
>      FWCfgState *fw_cfg;
> -    ram_addr_t lowmem;
> +    ram_addr_t lowmem = 0x80000000; /* 2G */
>      int i;
>  
> -    /*
> -     * Check whether RAM fits below 4G (leaving 1/2 GByte for IO memory
> -     * and 256 Mbytes for PCI Express Enhanced Configuration Access Mapping
> -     * also known as MMCFG).
> -     * If it doesn't, we need to split it in chunks below and above 4G.
> -     * In any case, try to make sure that guest addresses aligned at
> -     * 1G boundaries get mapped to host addresses aligned at 1G boundaries.
> -     */
> -    if (machine->ram_size >= 0xb0000000) {
> -        lowmem = 0x80000000;
> -    } else {
> -        lowmem = 0xb0000000;
> -    }
> -
>      /*
>       * Handle the machine opt max-ram-below-4g.  It is basically doing
>       * min(qemu limit, user limit).



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

* Re: [PATCH v3 14/22] microvm: use 2G split unconditionally
  2020-05-20 13:19 ` [PATCH v3 14/22] microvm: use 2G split unconditionally Gerd Hoffmann
  2020-05-20 13:34   ` Philippe Mathieu-Daudé
  2020-05-21  9:14   ` Igor Mammedov
@ 2020-05-21  9:29   ` Igor Mammedov
  2020-05-25 11:45     ` Gerd Hoffmann
  2 siblings, 1 reply; 61+ messages in thread
From: Igor Mammedov @ 2020-05-21  9:29 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Wed, 20 May 2020 15:19:55 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> Looks like the logiv was copied over from q35.
> 
> q35 does this for backward compatibility, there is no reason to do this
> on microvm though.  So split @ 2G unconditionally.

not related to your ACPI rework, but just an idea for future of microvm

I wonder if we should carry over all this fixed RAM layout legacy from pc/q35
with a bunch of knobs to tweak it (along with complicated logic).

Can we just re-use pc-dimms for main RAM and let user specify RAM layout the way they wish?


> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  hw/i386/microvm.c | 16 +---------------
>  1 file changed, 1 insertion(+), 15 deletions(-)
> 
> diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
> index 867d3d652145..b8f0d3283758 100644
> --- a/hw/i386/microvm.c
> +++ b/hw/i386/microvm.c
> @@ -170,23 +170,9 @@ static void microvm_memory_init(MicrovmMachineState *mms)
>      MemoryRegion *ram_below_4g, *ram_above_4g;
>      MemoryRegion *system_memory = get_system_memory();
>      FWCfgState *fw_cfg;
> -    ram_addr_t lowmem;
> +    ram_addr_t lowmem = 0x80000000; /* 2G */
>      int i;
>  
> -    /*
> -     * Check whether RAM fits below 4G (leaving 1/2 GByte for IO memory
> -     * and 256 Mbytes for PCI Express Enhanced Configuration Access Mapping
> -     * also known as MMCFG).
> -     * If it doesn't, we need to split it in chunks below and above 4G.
> -     * In any case, try to make sure that guest addresses aligned at
> -     * 1G boundaries get mapped to host addresses aligned at 1G boundaries.
> -     */
> -    if (machine->ram_size >= 0xb0000000) {
> -        lowmem = 0x80000000;
> -    } else {
> -        lowmem = 0xb0000000;
> -    }
> -
>      /*
>       * Handle the machine opt max-ram-below-4g.  It is basically doing
>       * min(qemu limit, user limit).



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

* Re: [PATCH v3 16/22] microvm/acpi: add minimal acpi support
  2020-05-20 13:19 ` [PATCH v3 16/22] microvm/acpi: add minimal acpi support Gerd Hoffmann
@ 2020-05-21 10:09   ` Igor Mammedov
  0 siblings, 0 replies; 61+ messages in thread
From: Igor Mammedov @ 2020-05-21 10:09 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Wed, 20 May 2020 15:19:57 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> $subject says all.  Can be controlled using -M microvm,acpi=on/off.

thanks for really nice and clean impl.
There are a couple minor notes below, but otherwise

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  hw/i386/acpi-microvm.h    |   6 ++
>  include/hw/i386/microvm.h |   9 ++
>  hw/i386/acpi-microvm.c    | 182 ++++++++++++++++++++++++++++++++++++++
>  hw/i386/microvm.c         |  37 ++++++++
>  hw/i386/Kconfig           |   1 +
>  hw/i386/Makefile.objs     |   1 +
>  6 files changed, 236 insertions(+)
>  create mode 100644 hw/i386/acpi-microvm.h
>  create mode 100644 hw/i386/acpi-microvm.c
> 
> diff --git a/hw/i386/acpi-microvm.h b/hw/i386/acpi-microvm.h
> new file mode 100644
> index 000000000000..6a6c2967102b
> --- /dev/null
> +++ b/hw/i386/acpi-microvm.h
> @@ -0,0 +1,6 @@
> +#ifndef HW_I386_ACPI_MICROVM_H
> +#define HW_I386_ACPI_MICROVM_H
> +
> +void acpi_setup_microvm(void);
> +
> +#endif
> diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h
> index 2709306c4016..ebd7f49d5de8 100644
> --- a/include/hw/i386/microvm.h
> +++ b/include/hw/i386/microvm.h
> @@ -24,12 +24,18 @@
>  
>  #include "hw/boards.h"
>  #include "hw/i386/x86.h"
> +#include "hw/acpi/acpi_dev_interface.h"
>  
>  /* Platform virtio definitions */
>  #define VIRTIO_MMIO_BASE      0xc0000000
>  #define VIRTIO_NUM_TRANSPORTS 8
>  #define VIRTIO_CMDLINE_MAXLEN 64
>  
> +#define GED_MMIO_BASE         0xc1000000
> +#define GED_MMIO_BASE_MEMHP   (GED_MMIO_BASE + 0x100)
> +#define GED_MMIO_BASE_REGS    (GED_MMIO_BASE + 0x200)
> +#define GED_MMIO_IRQ          9
> +
>  /* Machine type options */
>  #define MICROVM_MACHINE_PIT                 "pit"
>  #define MICROVM_MACHINE_PIC                 "pic"
> @@ -58,6 +64,9 @@ typedef struct {
>      /* Machine state */
>      uint32_t virtio_irq_base;
>      bool kernel_cmdline_fixed;
> +    Notifier machine_done;
> +    Notifier powerdown_req;
> +    AcpiDeviceIf *acpi_dev;
>  } MicrovmMachineState;
>  
>  #define TYPE_MICROVM_MACHINE   MACHINE_TYPE_NAME("microvm")
> diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c
> new file mode 100644
> index 000000000000..d2dd024909cc
> --- /dev/null
> +++ b/hw/i386/acpi-microvm.c
> @@ -0,0 +1,182 @@
> +/* Support for generating ACPI tables and passing them to Guests
> + *
> + * Copyright (C) 2008-2010  Kevin O'Connor <kevin@koconnor.net>
> + * Copyright (C) 2006 Fabrice Bellard
> + * Copyright (C) 2013 Red Hat Inc
> + *
> + * Author: Michael S. Tsirkin <mst@redhat.com>
since you wrote it s/^^^/Gerd/

> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> +
> + * This program is distributed in the hope that 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 "qapi/error.h"
> +
> +#include "exec/memory.h"
> +#include "hw/acpi/acpi.h"
> +#include "hw/acpi/aml-build.h"
> +#include "hw/acpi/bios-linker-loader.h"
> +#include "hw/acpi/generic_event_device.h"
> +#include "hw/acpi/utils.h"
> +#include "hw/boards.h"
> +#include "hw/i386/fw_cfg.h"
> +#include "hw/i386/microvm.h"
> +
> +#include "acpi-common.h"
> +#include "acpi-microvm.h"
> +
> +static void
> +build_dsdt_microvm(GArray *table_data, BIOSLinker *linker,
> +                   MicrovmMachineState *mms)
> +{
> +    X86MachineState *x86ms = X86_MACHINE(mms);
> +    Aml *dsdt, *sb_scope, *scope, *pkg;
> +    bool ambiguous;
> +    Object *isabus;
> +
> +    isabus = object_resolve_path_type("", TYPE_ISA_BUS, &ambiguous);
> +    assert(isabus);
> +    assert(!ambiguous);
> +
> +    dsdt = init_aml_allocator();
> +
> +    /* Reserve space for header */
> +    acpi_data_push(dsdt->buf, sizeof(AcpiTableHeader));
> +
> +    sb_scope = aml_scope("_SB");
> +    fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg);
> +    isa_build_aml(ISA_BUS(isabus), sb_scope);
> +    build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev),
> +                  GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE);
> +    acpi_dsdt_add_power_button(sb_scope);
> +    aml_append(dsdt, sb_scope);
> +
> +    scope = aml_scope("\\");
> +    pkg = aml_package(4);
> +    aml_append(pkg, aml_int(5)); /* SLEEP_CONTROL_REG.SLP_TYP */
> +    aml_append(pkg, aml_int(0)); /* ignored */
> +    aml_append(pkg, aml_int(0)); /* reserved */
> +    aml_append(pkg, aml_int(0)); /* reserved */
> +    aml_append(scope, aml_name_decl("_S5", pkg));
> +    aml_append(dsdt, scope);
> +
> +    /* copy AML table into ACPI tables blob and patch header there */
> +    g_array_append_vals(table_data, dsdt->buf->data, dsdt->buf->len);
> +    build_header(linker, table_data,
> +        (void *)(table_data->data + table_data->len - dsdt->buf->len),
> +        "DSDT", dsdt->buf->len, 5, NULL, NULL);
> +    free_aml_allocator();
> +}
> +
> +static void acpi_build_microvm(AcpiBuildTables *tables,
> +                               MicrovmMachineState *mms)
> +{
> +    MachineState *machine = MACHINE(mms);
> +    GArray *table_offsets;
> +    GArray *tables_blob = tables->table_data;
> +    unsigned dsdt, xsdt;
> +    AcpiFadtData pmfadt = {
> +        .rev = 5,
> +        .minor_ver = 1,
> +        .flags = ((1 << ACPI_FADT_F_HW_REDUCED_ACPI) |
> +                  (1 << ACPI_FADT_F_RESET_REG_SUP)),
> +        .sleep_ctl = {
> +            .space_id = AML_AS_SYSTEM_MEMORY,
> +            .bit_width = 8,
> +            .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_SLEEP_CTL,
> +        },
> +        .sleep_sts = {
> +            .space_id = AML_AS_SYSTEM_MEMORY,
> +            .bit_width = 8,
> +            .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_SLEEP_STS,
> +        },
> +        .reset_reg = {
> +            .space_id = AML_AS_SYSTEM_MEMORY,
> +            .bit_width = 8,
> +            .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_RESET,
> +        },
> +        .reset_val = ACPI_GED_RESET_VALUE,
> +    };
> +
> +    table_offsets = g_array_new(false, true /* clear */,
> +                                        sizeof(uint32_t));
> +    bios_linker_loader_alloc(tables->linker,
> +                             ACPI_BUILD_TABLE_FILE, tables_blob,
> +                             64 /* Ensure FACS is aligned */,
> +                             false /* high memory */);
> +
> +    dsdt = tables_blob->len;
> +    build_dsdt_microvm(tables_blob, tables->linker, mms);
> +
> +    pmfadt.dsdt_tbl_offset = &dsdt;
> +    pmfadt.xdsdt_tbl_offset = &dsdt;
> +    acpi_add_table(table_offsets, tables_blob);
> +    build_fadt(tables_blob, tables->linker, &pmfadt, NULL, NULL);
> +
> +    acpi_add_table(table_offsets, tables_blob);
> +    acpi_build_madt(tables_blob, tables->linker, X86_MACHINE(machine),
> +                    mms->acpi_dev, false);
> +
> +    xsdt = tables_blob->len;
> +    build_xsdt(tables_blob, tables->linker, table_offsets, NULL, NULL);
> +
> +    /* RSDP is in FSEG memory, so allocate it separately */
> +    {
> +        AcpiRsdpData rsdp_data = {
> +            .revision = 2,
> +            .oem_id = ACPI_BUILD_APPNAME6,
> +            .xsdt_tbl_offset = &xsdt,
> +            .rsdt_tbl_offset = NULL,
> +        };
> +        build_rsdp(tables->rsdp, tables->linker, &rsdp_data);
> +    }
> +
> +    /* Cleanup memory that's no longer used. */
> +    g_array_free(table_offsets, true);
> +}
> +
> +static void acpi_build_no_update(void *build_opaque)
> +{
> +    /* nothing, microvm tables don't change at runtime */
> +}
> +
> +void acpi_setup_microvm(void)
> +{
> +    MicrovmMachineState *mms = MICROVM_MACHINE(qdev_get_machine());
> +    X86MachineState *x86ms = X86_MACHINE(mms);
> +    AcpiBuildTables tables;
> +
> +    assert(x86ms->fw_cfg);
> +
> +    if (!x86_machine_is_acpi_enabled(x86ms)) {
> +        return;
> +    }
> +
> +    acpi_build_tables_init(&tables);
> +    acpi_build_microvm(&tables, mms);
> +
> +    /* Now expose it all to Guest */
> +    acpi_add_rom_blob(acpi_build_no_update, NULL,
> +                      tables.table_data,
> +                      ACPI_BUILD_TABLE_FILE,
> +                      ACPI_BUILD_TABLE_MAX_SIZE);
> +    acpi_add_rom_blob(acpi_build_no_update, NULL,
> +                      tables.linker->cmd_blob,
> +                      "etc/table-loader", 0);
> +    acpi_add_rom_blob(acpi_build_no_update, NULL,
> +                      tables.rsdp,
> +                      ACPI_BUILD_RSDP_FILE, 0);
> +
> +    acpi_build_tables_cleanup(&tables, false);
> +}
> diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
> index ea4460714a99..b38321112baa 100644
> --- a/hw/i386/microvm.c
> +++ b/hw/i386/microvm.c
> @@ -26,6 +26,8 @@
>  #include "sysemu/cpus.h"
>  #include "sysemu/numa.h"
>  #include "sysemu/reset.h"
> +#include "sysemu/runstate.h"
> +#include "acpi-microvm.h"
>  
>  #include "hw/loader.h"
>  #include "hw/irq.h"
> @@ -41,6 +43,8 @@
>  #include "hw/i386/e820_memory_layout.h"
>  #include "hw/i386/fw_cfg.h"
>  #include "hw/virtio/virtio-mmio.h"
> +#include "hw/acpi/acpi.h"
> +#include "hw/acpi/generic_event_device.h"
>  
>  #include "cpu.h"
>  #include "elf.h"
> @@ -129,6 +133,17 @@ static void microvm_devices_init(MicrovmMachineState *mms)
>      }
>  
>      /* Optional and legacy devices */
> +    if (x86_machine_is_acpi_enabled(x86ms)) {
> +        DeviceState *dev = qdev_create(NULL, TYPE_ACPI_GED_X86);
> +        qdev_prop_set_uint32(dev, "ged-event", ACPI_GED_PWR_DOWN_EVT);
> +        sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, GED_MMIO_BASE);
> +        /* sysbus_mmio_map(SYS_BUS_DEVICE(dev), 1, GED_MMIO_BASE_MEMHP); */
> +        sysbus_mmio_map(SYS_BUS_DEVICE(dev), 2, GED_MMIO_BASE_REGS);
> +        sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
> +                           x86ms->gsi[GED_MMIO_IRQ]);
> +        qdev_init_nofail(dev);
> +        mms->acpi_dev = ACPI_DEVICE_IF(dev);
considering all x86 machines have it, maybe move acpi_dev field to parent type?

> +    }
>  
>      if (mms->pic == ON_OFF_AUTO_ON || mms->pic == ON_OFF_AUTO_AUTO) {
>          qemu_irq *i8259;
> @@ -457,6 +472,23 @@ static void microvm_machine_set_auto_kernel_cmdline(Object *obj, bool value,
>      mms->auto_kernel_cmdline = value;
>  }
>  
> +static void microvm_machine_done(Notifier *notifier, void *data)
> +{
> +    acpi_setup_microvm();
pass MicrovmMachineState down to acpi_setup_microvm() the same way you are doing below?
(and avoid qdev_get_machine() in acpi_setup_microvm())

> +}
> +
> +static void microvm_powerdown_req(Notifier *notifier, void *data)
> +{
> +    MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState,
> +                                            powerdown_req);
> +
> +    if (mms->acpi_dev) {
> +        Object *obj = OBJECT(mms->acpi_dev);
> +        AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(obj);
> +        adevc->send_event(mms->acpi_dev, ACPI_POWER_DOWN_STATUS);
> +    }
> +}
> +
>  static void microvm_machine_initfn(Object *obj)
>  {
>      MicrovmMachineState *mms = MICROVM_MACHINE(obj);
> @@ -471,6 +503,11 @@ static void microvm_machine_initfn(Object *obj)
>  
>      /* State */
>      mms->kernel_cmdline_fixed = false;
> +
> +    mms->machine_done.notify = microvm_machine_done;
> +    qemu_add_machine_init_done_notifier(&mms->machine_done);
> +    mms->powerdown_req.notify = microvm_powerdown_req;
> +    qemu_register_powerdown_notifier(&mms->powerdown_req);
>  }
>  
>  static void microvm_class_init(ObjectClass *oc, void *data)
> diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig
> index c93f32f6579d..be746bcb49eb 100644
> --- a/hw/i386/Kconfig
> +++ b/hw/i386/Kconfig
> @@ -102,6 +102,7 @@ config MICROVM
>      select I8259
>      select MC146818RTC
>      select VIRTIO_MMIO
> +    select ACPI_HW_REDUCED
>  
>  config X86_IOMMU
>      bool
> diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs
> index 622739305882..bbb2fe78f3cd 100644
> --- a/hw/i386/Makefile.objs
> +++ b/hw/i386/Makefile.objs
> @@ -19,3 +19,4 @@ obj-y += kvmvapic.o
>  obj-$(CONFIG_ACPI) += acpi-common.o
>  obj-$(CONFIG_ACPI_HW_REDUCED) += generic_event_device_x86.o
>  obj-$(CONFIG_PC) += acpi-build.o
> +obj-$(CONFIG_MICROVM) += acpi-microvm.o



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

* Re: [PATCH v3 17/22] microvm/acpi: add acpi_dsdt_add_virtio() for x86
  2020-05-20 13:19 ` [PATCH v3 17/22] microvm/acpi: add acpi_dsdt_add_virtio() for x86 Gerd Hoffmann
@ 2020-05-21 10:12   ` Igor Mammedov
  0 siblings, 0 replies; 61+ messages in thread
From: Igor Mammedov @ 2020-05-21 10:12 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Wed, 20 May 2020 15:19:58 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> Makes x86 linux kernel find virtio-mmio devices automatically.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> Reviewed-by: Sergio Lopez <slp@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  hw/i386/acpi-microvm.c | 52 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 52 insertions(+)
> 
> diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c
> index d2dd024909cc..12060939ff6c 100644
> --- a/hw/i386/acpi-microvm.c
> +++ b/hw/i386/acpi-microvm.c
> @@ -21,6 +21,7 @@
>   */
>  
>  #include "qemu/osdep.h"
> +#include "qemu/cutils.h"
>  #include "qapi/error.h"
>  
>  #include "exec/memory.h"
> @@ -32,10 +33,60 @@
>  #include "hw/boards.h"
>  #include "hw/i386/fw_cfg.h"
>  #include "hw/i386/microvm.h"
> +#include "hw/virtio/virtio-mmio.h"
>  
>  #include "acpi-common.h"
>  #include "acpi-microvm.h"
>  
> +static void acpi_dsdt_add_virtio(Aml *scope,
> +                                 MicrovmMachineState *mms)
> +{
> +    gchar *separator;
> +    long int index;
> +    BusState *bus;
> +    BusChild *kid;
> +
> +    bus = sysbus_get_default();
> +    QTAILQ_FOREACH(kid, &bus->children, sibling) {
> +        DeviceState *dev = kid->child;
> +        Object *obj = object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MMIO);
> +
> +        if (obj) {
> +            VirtIOMMIOProxy *mmio = VIRTIO_MMIO(obj);
> +            VirtioBusState *mmio_virtio_bus = &mmio->bus;
> +            BusState *mmio_bus = &mmio_virtio_bus->parent_obj;
> +
> +            if (QTAILQ_EMPTY(&mmio_bus->children)) {
> +                continue;
> +            }
> +            separator = g_strrstr(mmio_bus->name, ".");
> +            if (!separator) {
> +                continue;
> +            }
> +            if (qemu_strtol(separator + 1, NULL, 10, &index) != 0) {
> +                continue;
> +            }
> +
> +            uint32_t irq = mms->virtio_irq_base + index;
> +            hwaddr base = VIRTIO_MMIO_BASE + index * 512;
> +            hwaddr size = 512;
> +
> +            Aml *dev = aml_device("VR%02u", (unsigned)index);
> +            aml_append(dev, aml_name_decl("_HID", aml_string("LNRO0005")));
> +            aml_append(dev, aml_name_decl("_UID", aml_int(index)));
> +            aml_append(dev, aml_name_decl("_CCA", aml_int(1)));
> +
> +            Aml *crs = aml_resource_template();
> +            aml_append(crs, aml_memory32_fixed(base, size, AML_READ_WRITE));
> +            aml_append(crs,
> +                       aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH,
> +                                     AML_EXCLUSIVE, &irq, 1));
> +            aml_append(dev, aml_name_decl("_CRS", crs));
> +            aml_append(scope, dev);
> +        }
> +    }
> +}
> +
>  static void
>  build_dsdt_microvm(GArray *table_data, BIOSLinker *linker,
>                     MicrovmMachineState *mms)
> @@ -60,6 +111,7 @@ build_dsdt_microvm(GArray *table_data, BIOSLinker *linker,
>      build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev),
>                    GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE);
>      acpi_dsdt_add_power_button(sb_scope);
> +    acpi_dsdt_add_virtio(sb_scope, mms);
>      aml_append(dsdt, sb_scope);
>  
>      scope = aml_scope("\\");



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

* Re: [PATCH v3 18/22] microvm/acpi: use GSI 16-23 for virtio
  2020-05-20 13:19 ` [PATCH v3 18/22] microvm/acpi: use GSI 16-23 for virtio Gerd Hoffmann
@ 2020-05-21 10:13   ` Igor Mammedov
  0 siblings, 0 replies; 61+ messages in thread
From: Igor Mammedov @ 2020-05-21 10:13 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Wed, 20 May 2020 15:19:59 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> With ACPI enabled and IO-APIC being properly declared in the ACPI tables
> we can use interrupt lines 16-23 for virtio and avoid shared interrupts.
> 
> With acpi disabled we continue to use lines 8-15.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> Reviewed-by: Sergio Lopez <slp@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  hw/i386/microvm.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
> index b38321112baa..7d8174809ae1 100644
> --- a/hw/i386/microvm.c
> +++ b/hw/i386/microvm.c
> @@ -125,7 +125,7 @@ static void microvm_devices_init(MicrovmMachineState *mms)
>  
>      kvmclock_create();
>  
> -    mms->virtio_irq_base = 8;
> +    mms->virtio_irq_base = x86_machine_is_acpi_enabled(x86ms) ? 16 : 8;
>      for (i = 0; i < VIRTIO_NUM_TRANSPORTS; i++) {
>          sysbus_create_simple("virtio-mmio",
>                               VIRTIO_MMIO_BASE + i * 512,



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

* Re: [PATCH v3 19/22] microvm/acpi: use seabios with acpi=on
  2020-05-20 13:20 ` [PATCH v3 19/22] microvm/acpi: use seabios with acpi=on Gerd Hoffmann
@ 2020-05-21 10:14   ` Igor Mammedov
  0 siblings, 0 replies; 61+ messages in thread
From: Igor Mammedov @ 2020-05-21 10:14 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Wed, 20 May 2020 15:20:00 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> With acpi=off continue to use qboot.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  hw/i386/microvm.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
> index 7d8174809ae1..ddb8570a2915 100644
> --- a/hw/i386/microvm.c
> +++ b/hw/i386/microvm.c
> @@ -52,6 +52,7 @@
>  #include "hw/xen/start_info.h"
>  
>  #define MICROVM_QBOOT_FILENAME "qboot.bin"
> +#define MICROVM_BIOS_FILENAME  "bios-microvm.bin"
>  
>  static void microvm_set_rtc(MicrovmMachineState *mms, ISADevice *s)
>  {
> @@ -174,7 +175,9 @@ static void microvm_devices_init(MicrovmMachineState *mms)
>      }
>  
>      if (bios_name == NULL) {
> -        bios_name = MICROVM_QBOOT_FILENAME;
> +        bios_name = x86_machine_is_acpi_enabled(x86ms)
> +            ? MICROVM_BIOS_FILENAME
> +            : MICROVM_QBOOT_FILENAME;
>      }
>      x86_bios_rom_init(get_system_memory(), true);
>  }



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

* Re: [PATCH v3 21/22] [RfC] acpi: add per machine type acpi default
  2020-05-20 13:20 ` [PATCH v3 21/22] [RfC] acpi: add per machine type acpi default Gerd Hoffmann
@ 2020-05-21 10:26   ` Igor Mammedov
  0 siblings, 0 replies; 61+ messages in thread
From: Igor Mammedov @ 2020-05-21 10:26 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Wed, 20 May 2020 15:20:02 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> Allow setting acpi default value for each machine type.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  include/hw/i386/x86.h |  1 +
>  hw/i386/x86.c         | 21 ++++++++++++++++++---
>  2 files changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h
> index b52285481687..d2fffa8252ff 100644
> --- a/include/hw/i386/x86.h
> +++ b/include/hw/i386/x86.h
> @@ -37,6 +37,7 @@ typedef struct {
>      bool save_tsc_khz;
>      /* Enables contiguous-apic-ID mode */
>      bool compat_apic_id_mode;
> +    bool acpi_default;
>  } X86MachineClass;
>  
>  typedef struct {
> diff --git a/hw/i386/x86.c b/hw/i386/x86.c
> index ac7a0a958781..3a56a157c5f0 100644
> --- a/hw/i386/x86.c
> +++ b/hw/i386/x86.c
> @@ -940,10 +940,22 @@ static void x86_machine_set_smm(Object *obj, Visitor *v, const char *name,
>  
>  bool x86_machine_is_acpi_enabled(X86MachineState *x86ms)
>  {
> -    if (x86ms->acpi == ON_OFF_AUTO_OFF) {
> -        return false;
> +    X86MachineClass *x86mc = X86_MACHINE_GET_CLASS(x86ms);
> +    bool enabled;
> +
> +    switch (x86ms->acpi) {
> +    case ON_OFF_AUTO_ON:
> +        enabled = true;
> +        break;
> +    case ON_OFF_AUTO_OFF:
> +        enabled = false;
> +        break;
> +    case ON_OFF_AUTO_AUTO:
> +    default:
> +        enabled = x86mc->acpi_default;
> +        break;
>      }
> -    return true;
> +    return enabled;

why not make x86ms->acpi a boolean and move logic from here to x86_machine_[get|set]_acpi()
to avoid extra helper, the external users would use property acessesors and
internal (microvm  code) can just access  x86ms->acpi directly

>  }
>  
>  static void x86_machine_get_acpi(Object *obj, Visitor *v, const char *name,
> @@ -991,6 +1003,9 @@ static void x86_machine_class_init(ObjectClass *oc, void *data)
>      x86mc->save_tsc_khz = true;
>      nc->nmi_monitor_handler = x86_nmi;
>  
> +    /* acpi is on by default */
> +    x86mc->acpi_default = true;
> +
>      object_class_property_add(oc, X86_MACHINE_MAX_RAM_BELOW_4G, "size",
>          x86_machine_get_max_ram_below_4g, x86_machine_set_max_ram_below_4g,
>          NULL, NULL);



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

* Re: [PATCH v3 22/22] [RfC] acpi: flip default to off for microvm
  2020-05-20 13:20 ` [PATCH v3 22/22] [RfC] acpi: flip default to off for microvm Gerd Hoffmann
@ 2020-05-21 10:36   ` Igor Mammedov
  2020-05-25 12:11     ` Gerd Hoffmann
  0 siblings, 1 reply; 61+ messages in thread
From: Igor Mammedov @ 2020-05-21 10:36 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Wed, 20 May 2020 15:20:03 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  hw/i386/microvm.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
> index 602c6a8f75f3..b5c445b5403b 100644
> --- a/hw/i386/microvm.c
> +++ b/hw/i386/microvm.c
> @@ -517,6 +517,7 @@ static void microvm_machine_initfn(Object *obj)
>  static void microvm_class_init(ObjectClass *oc, void *data)
>  {
>      MachineClass *mc = MACHINE_CLASS(oc);
> +    X86MachineClass *x86mc = X86_MACHINE_CLASS(oc);
>  
>      mc->init = microvm_machine_state_init;
>  
> @@ -537,6 +538,9 @@ static void microvm_class_init(ObjectClass *oc, void *data)
>      /* Machine class handlers */
>      mc->reset = microvm_machine_reset;
>  
> +    /* acpi is off by default */
> +    x86mc->acpi_default = false;

Since we don't care about compat stuff for microvm yet,
I'd preffer default 'on', as in long run it allows to boot larger range of guests
without need for tuning QEMU and guest configuration
(i.e. it's the least troublesome case for ordinary user)

> +
>      object_class_property_add(oc, MICROVM_MACHINE_PIC, "OnOffAuto",
>                                microvm_machine_get_pic,
>                                microvm_machine_set_pic,



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

* Re: [PATCH v3 01/22] microvm: name qboot binary qboot.bin
  2020-05-20 13:25   ` Philippe Mathieu-Daudé
@ 2020-05-25 11:02     ` Gerd Hoffmann
  2020-05-25 12:26       ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-25 11:02 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Igor Mammedov, Paolo Bonzini,
	Richard Henderson

On Wed, May 20, 2020 at 03:25:53PM +0200, Philippe Mathieu-Daudé wrote:
> Hi Gerd,
> 
> On 5/20/20 3:19 PM, Gerd Hoffmann wrote:
> > qboot isn't a bios and shouldnt be named that way.
> 
> Still it resides in a directory named pc-bios =)

Yep, that should be named "firmware" but changing that is beyond the
scope of this patch ;)

> It is used later in x86_bios_rom_init() as:
> 
>     bios = g_malloc(sizeof(*bios));
>     memory_region_init_ram(bios, NULL, "pc.bios", bios_size, &error_fatal);
>     if (!isapc_ram_fw) {
>         memory_region_set_readonly(bios, true);
>     }
>     ret = rom_add_file_fixed(bios_name, (uint32_t)(-bios_size), -1);
>     if (ret != 0) {
>     bios_error:
>         fprintf(stderr, "qemu: could not load PC BIOS '%s'\n", bios_name);
>         exit(1);
>     }
>     g_free(filename);
> 
> Many 'bios' occurrences.
> 
> Should it be called 'qboot.rom' instead?

I don't care much, I only want bios*.bin for seabios which actually is a
complete bios implementation ...

take care,
  Gerd



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

* Re: [PATCH v3 14/22] microvm: use 2G split unconditionally
  2020-05-21  9:29   ` Igor Mammedov
@ 2020-05-25 11:45     ` Gerd Hoffmann
  2020-05-25 16:36       ` Igor Mammedov
  0 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-25 11:45 UTC (permalink / raw)
  To: Igor Mammedov
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Thu, May 21, 2020 at 11:29:21AM +0200, Igor Mammedov wrote:
> On Wed, 20 May 2020 15:19:55 +0200
> Gerd Hoffmann <kraxel@redhat.com> wrote:
> 
> > Looks like the logiv was copied over from q35.
> > 
> > q35 does this for backward compatibility, there is no reason to do this
> > on microvm though.  So split @ 2G unconditionally.
> 
> not related to your ACPI rework, but just an idea for future of microvm
> 
> I wonder if we should carry over all this fixed RAM layout legacy from pc/q35
> with a bunch of knobs to tweak it (along with complicated logic).

Well, I think we can (should) drop max-ram-below-4g too.  There is
no reason to use that with microvm, other that shooting yourself into
the foot (by making mmio overlap with ram).

With that being gone too there isn't much logic left ...

take care,
  Gerd



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

* Re: [PATCH v3 15/22] microvm: make virtio irq base runtime configurable
  2020-05-20 13:29   ` Philippe Mathieu-Daudé
@ 2020-05-25 11:49     ` Gerd Hoffmann
  2020-05-25 12:27       ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-25 11:49 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Igor Mammedov, Paolo Bonzini,
	Richard Henderson

  Hi,

> > -#define VIRTIO_IRQ_BASE       5

> > +    mms->virtio_irq_base = 8;
> 
> Hmm you made it runtime configurable indeed, but you also changed it from 5
> to 8. Worth a different patch, or at least mentioning in commit description.

Oops, that wasn't intentional.  I'll change it back to 5.

take care,
  Gerd



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

* Re: [PATCH v3 22/22] [RfC] acpi: flip default to off for microvm
  2020-05-21 10:36   ` Igor Mammedov
@ 2020-05-25 12:11     ` Gerd Hoffmann
  0 siblings, 0 replies; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-25 12:11 UTC (permalink / raw)
  To: Igor Mammedov
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Thu, May 21, 2020 at 12:36:24PM +0200, Igor Mammedov wrote:
> On Wed, 20 May 2020 15:20:03 +0200
> Gerd Hoffmann <kraxel@redhat.com> wrote:
> 
> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> > ---
> >  hw/i386/microvm.c | 4 ++++
> >  1 file changed, 4 insertions(+)
> > 
> > diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
> > index 602c6a8f75f3..b5c445b5403b 100644
> > --- a/hw/i386/microvm.c
> > +++ b/hw/i386/microvm.c
> > @@ -517,6 +517,7 @@ static void microvm_machine_initfn(Object *obj)
> >  static void microvm_class_init(ObjectClass *oc, void *data)
> >  {
> >      MachineClass *mc = MACHINE_CLASS(oc);
> > +    X86MachineClass *x86mc = X86_MACHINE_CLASS(oc);
> >  
> >      mc->init = microvm_machine_state_init;
> >  
> > @@ -537,6 +538,9 @@ static void microvm_class_init(ObjectClass *oc, void *data)
> >      /* Machine class handlers */
> >      mc->reset = microvm_machine_reset;
> >  
> > +    /* acpi is off by default */
> > +    x86mc->acpi_default = false;
> 
> Since we don't care about compat stuff for microvm yet,
> I'd preffer default 'on', as in long run it allows to boot larger range of guests
> without need for tuning QEMU and guest configuration
> (i.e. it's the least troublesome case for ordinary user)

I fully agree and I'll happily drop patches 21+22 and have microvm
default to acpi=on.  See also:
   https://lists.gnu.org/archive/html/qemu-devel/2020-05/msg01315.html

Older patch versions got multiple review comments asking for acpi=off by
default, so I've added these two patches as RfC to show how this could
be done.  RfC because (1) the topic is controversial and (2) these are
not final.  I'd move 21/22 up in the series and squash 22/22 into the
"add acpi to microvm" patch in case we decide for acpi=off as default.

take care,
  Gerd



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

* Re: [PATCH v3 01/22] microvm: name qboot binary qboot.bin
  2020-05-25 11:02     ` Gerd Hoffmann
@ 2020-05-25 12:26       ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 61+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-05-25 12:26 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Igor Mammedov, Paolo Bonzini,
	Richard Henderson

On 5/25/20 1:02 PM, Gerd Hoffmann wrote:
> On Wed, May 20, 2020 at 03:25:53PM +0200, Philippe Mathieu-Daudé wrote:
>> Hi Gerd,
>>
>> On 5/20/20 3:19 PM, Gerd Hoffmann wrote:
>>> qboot isn't a bios and shouldnt be named that way.
>>
>> Still it resides in a directory named pc-bios =)
> 
> Yep, that should be named "firmware" but changing that is beyond the
> scope of this patch ;)
> 
>> It is used later in x86_bios_rom_init() as:
>>
>>     bios = g_malloc(sizeof(*bios));
>>     memory_region_init_ram(bios, NULL, "pc.bios", bios_size, &error_fatal);
>>     if (!isapc_ram_fw) {
>>         memory_region_set_readonly(bios, true);
>>     }
>>     ret = rom_add_file_fixed(bios_name, (uint32_t)(-bios_size), -1);
>>     if (ret != 0) {
>>     bios_error:
>>         fprintf(stderr, "qemu: could not load PC BIOS '%s'\n", bios_name);
>>         exit(1);
>>     }
>>     g_free(filename);
>>
>> Many 'bios' occurrences.
>>
>> Should it be called 'qboot.rom' instead?
> 
> I don't care much, I only want bios*.bin for seabios which actually is a
> complete bios implementation ...

OK.

Preferably named 'qboot.rom':
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>



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

* Re: [PATCH v3 15/22] microvm: make virtio irq base runtime configurable
  2020-05-25 11:49     ` Gerd Hoffmann
@ 2020-05-25 12:27       ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 61+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-05-25 12:27 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Igor Mammedov, Paolo Bonzini,
	Richard Henderson

On 5/25/20 1:49 PM, Gerd Hoffmann wrote:
>   Hi,
> 
>>> -#define VIRTIO_IRQ_BASE       5
> 
>>> +    mms->virtio_irq_base = 8;
>>
>> Hmm you made it runtime configurable indeed, but you also changed it from 5
>> to 8. Worth a different patch, or at least mentioning in commit description.
> 
> Oops, that wasn't intentional.  I'll change it back to 5.

OK. Using 5:

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>



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

* Re: [PATCH v3 14/22] microvm: use 2G split unconditionally
  2020-05-25 11:45     ` Gerd Hoffmann
@ 2020-05-25 16:36       ` Igor Mammedov
  2020-05-26  4:48         ` Gerd Hoffmann
  0 siblings, 1 reply; 61+ messages in thread
From: Igor Mammedov @ 2020-05-25 16:36 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Mon, 25 May 2020 13:45:08 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> On Thu, May 21, 2020 at 11:29:21AM +0200, Igor Mammedov wrote:
> > On Wed, 20 May 2020 15:19:55 +0200
> > Gerd Hoffmann <kraxel@redhat.com> wrote:
> >   
> > > Looks like the logiv was copied over from q35.
> > > 
> > > q35 does this for backward compatibility, there is no reason to do this
> > > on microvm though.  So split @ 2G unconditionally.  
> > 
> > not related to your ACPI rework, but just an idea for future of microvm
> > 
> > I wonder if we should carry over all this fixed RAM layout legacy from pc/q35
> > with a bunch of knobs to tweak it (along with complicated logic).  
> 
> Well, I think we can (should) drop max-ram-below-4g too.  There is
> no reason to use that with microvm, other that shooting yourself into
> the foot (by making mmio overlap with ram).
> 
> With that being gone too there isn't much logic left ...

I wonder if we need 2G split for microvm at all?
Can we map 1 contiguous big blob from 0 GPA and overlay bios & other x86 TOLUD stuff?


> take care,
>   Gerd
> 



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

* Re: [PATCH v3 14/22] microvm: use 2G split unconditionally
  2020-05-25 16:36       ` Igor Mammedov
@ 2020-05-26  4:48         ` Gerd Hoffmann
  2020-05-27 12:25           ` Igor Mammedov
  0 siblings, 1 reply; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-26  4:48 UTC (permalink / raw)
  To: Igor Mammedov
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

> > Well, I think we can (should) drop max-ram-below-4g too.  There is
> > no reason to use that with microvm, other that shooting yourself into
> > the foot (by making mmio overlap with ram).
> > 
> > With that being gone too there isn't much logic left ...
> 
> I wonder if we need 2G split for microvm at all?
> Can we map 1 contiguous big blob from 0 GPA and overlay bios & other x86 TOLUD stuff?

I think it would work, but it has some drawbacks:

  (1) we loose a bit of memory.
  (2) we loose a gigabyte page.
  (3) we wouldn't have guard pages (unused address space) between
      between ram and mmio space.

take care,
  Gerd



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

* Re: [PATCH v3 14/22] microvm: use 2G split unconditionally
  2020-05-26  4:48         ` Gerd Hoffmann
@ 2020-05-27 12:25           ` Igor Mammedov
  2020-05-27 13:06             ` Paolo Bonzini
  2020-05-28  7:17             ` Gerd Hoffmann
  0 siblings, 2 replies; 61+ messages in thread
From: Igor Mammedov @ 2020-05-27 12:25 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

On Tue, 26 May 2020 06:48:39 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> > > Well, I think we can (should) drop max-ram-below-4g too.  There is
> > > no reason to use that with microvm, other that shooting yourself into
> > > the foot (by making mmio overlap with ram).
> > > 
> > > With that being gone too there isn't much logic left ...  
> > 
> > I wonder if we need 2G split for microvm at all?
> > Can we map 1 contiguous big blob from 0 GPA and overlay bios & other x86 TOLUD stuff?  
> 
> I think it would work, but it has some drawbacks:
> 
>   (1) we loose a bit of memory.
          it's probably not a big enough to care about, we do similar ovarlay mapping on pc/q35
          at the beginning of RAM
>   (2) we loose a gigabyte page.
          I'm not sure waht exactly we loose in this case.
          Lets assume we allocating guest 5G of continuous RAM using 1G huge pages,
          in this case I'd think that on host side MMIO overlay won't affect RAM blob
          on guest side pagetables will be fragmented due to MMIO holes, but guest still
          could use huge pages smaller ones in fragmented area and 1G where there is no fragmentation.

>   (3) we wouldn't have guard pages (unused address space) between
>       between ram and mmio space.
           if it's holes' mmio,then do we really need them (access is going to be terminated
           either in always valid RAM or in valid mmio hole)?
> 
> take care,
>   Gerd
> 
> 



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

* Re: [PATCH v3 14/22] microvm: use 2G split unconditionally
  2020-05-27 12:25           ` Igor Mammedov
@ 2020-05-27 13:06             ` Paolo Bonzini
  2020-05-27 14:26               ` Igor Mammedov
  2020-05-28  7:19               ` Gerd Hoffmann
  2020-05-28  7:17             ` Gerd Hoffmann
  1 sibling, 2 replies; 61+ messages in thread
From: Paolo Bonzini @ 2020-05-27 13:06 UTC (permalink / raw)
  To: Igor Mammedov, Gerd Hoffmann
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Richard Henderson

On 27/05/20 14:25, Igor Mammedov wrote:
>>   (2) we loose a gigabyte page.
>           I'm not sure waht exactly we loose in this case.
>           Lets assume we allocating guest 5G of continuous RAM using 1G huge pages,
>           in this case I'd think that on host side MMIO overlay won't affect RAM blob
>           on guest side pagetables will be fragmented due to MMIO holes, but guest still
>           could use huge pages smaller ones in fragmented area and 1G where there is no fragmentation.

Access to the 3G-4G area would not be able to use 1G EPT pages.

But why use 2G split instead of 3G?  There's only very little MMIO and
no PCI hole (including no huge MMCONFIG BAR) on microvm.

Paolo



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

* Re: [PATCH v3 14/22] microvm: use 2G split unconditionally
  2020-05-27 13:06             ` Paolo Bonzini
@ 2020-05-27 14:26               ` Igor Mammedov
  2020-05-27 14:35                 ` Igor Mammedov
  2020-05-27 14:54                 ` Paolo Bonzini
  2020-05-28  7:19               ` Gerd Hoffmann
  1 sibling, 2 replies; 61+ messages in thread
From: Igor Mammedov @ 2020-05-27 14:26 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Gerd Hoffmann,
	Richard Henderson

On Wed, 27 May 2020 15:06:28 +0200
Paolo Bonzini <pbonzini@redhat.com> wrote:

> On 27/05/20 14:25, Igor Mammedov wrote:
> >>   (2) we loose a gigabyte page.  
> >           I'm not sure waht exactly we loose in this case.
> >           Lets assume we allocating guest 5G of continuous RAM using 1G huge pages,
> >           in this case I'd think that on host side MMIO overlay won't affect RAM blob
> >           on guest side pagetables will be fragmented due to MMIO holes, but guest still
> >           could use huge pages smaller ones in fragmented area and 1G where there is no fragmentation.  
> 
> Access to the 3G-4G area would not be able to use 1G EPT pages.
Could it use 2Mb pages instead of 1Gb?
Do we really care about 1 gigabyte huge page in microvm intended usecase?
(fast starting VMs for microservices like FaaS, which unlikely would use much memory to begin with)

> But why use 2G split instead of 3G?  There's only very little MMIO and
> no PCI hole (including no huge MMCONFIG BAR) on microvm.
> 
> Paolo
> 



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

* Re: [PATCH v3 14/22] microvm: use 2G split unconditionally
  2020-05-27 14:26               ` Igor Mammedov
@ 2020-05-27 14:35                 ` Igor Mammedov
  2020-05-27 14:54                 ` Paolo Bonzini
  1 sibling, 0 replies; 61+ messages in thread
From: Igor Mammedov @ 2020-05-27 14:35 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Gerd Hoffmann,
	Richard Henderson

On Wed, 27 May 2020 16:26:46 +0200
Igor Mammedov <imammedo@redhat.com> wrote:

> On Wed, 27 May 2020 15:06:28 +0200
> Paolo Bonzini <pbonzini@redhat.com> wrote:
> 
> > On 27/05/20 14:25, Igor Mammedov wrote:  
> > >>   (2) we loose a gigabyte page.    
> > >           I'm not sure waht exactly we loose in this case.
> > >           Lets assume we allocating guest 5G of continuous RAM using 1G huge pages,
> > >           in this case I'd think that on host side MMIO overlay won't affect RAM blob
> > >           on guest side pagetables will be fragmented due to MMIO holes, but guest still
> > >           could use huge pages smaller ones in fragmented area and 1G where there is no fragmentation.    
> > 
> > Access to the 3G-4G area would not be able to use 1G EPT pages.  
> Could it use 2Mb pages instead of 1Gb?
> Do we really care about 1 gigabyte huge page in microvm intended usecase?
> (fast starting VMs for microservices like FaaS, which unlikely would use much memory to begin with)

my interest in having single memory region, is in possibility of drop in conversion to [nv|pc-dimm] later on
without breaking ABI. (I'm not sure that we actually need it though)


> > But why use 2G split instead of 3G?  There's only very little MMIO and
> > no PCI hole (including no huge MMCONFIG BAR) on microvm.
> > 
> > Paolo
> >   
> 
> 



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

* Re: [PATCH v3 14/22] microvm: use 2G split unconditionally
  2020-05-27 14:26               ` Igor Mammedov
  2020-05-27 14:35                 ` Igor Mammedov
@ 2020-05-27 14:54                 ` Paolo Bonzini
  1 sibling, 0 replies; 61+ messages in thread
From: Paolo Bonzini @ 2020-05-27 14:54 UTC (permalink / raw)
  To: Igor Mammedov
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Gerd Hoffmann,
	Richard Henderson

On 27/05/20 16:26, Igor Mammedov wrote:
> On Wed, 27 May 2020 15:06:28 +0200
> Paolo Bonzini <pbonzini@redhat.com> wrote:
> 
>> On 27/05/20 14:25, Igor Mammedov wrote:
>>>>   (2) we loose a gigabyte page.  
>>>           I'm not sure waht exactly we loose in this case.
>>>           Lets assume we allocating guest 5G of continuous RAM using 1G huge pages,
>>>           in this case I'd think that on host side MMIO overlay won't affect RAM blob
>>>           on guest side pagetables will be fragmented due to MMIO holes, but guest still
>>>           could use huge pages smaller ones in fragmented area and 1G where there is no fragmentation.  
>>
>> Access to the 3G-4G area would not be able to use 1G EPT pages.
> Could it use 2Mb pages instead of 1Gb?

Yes, probably a mix of 2 MiB pages and 4 KiB pages around the memslot
splits.

> Do we really care about 1 gigabyte huge page in microvm intended usecase?
> (fast starting VMs for microservices like FaaS, which unlikely would use much memory to begin with)

I honestly don't think it's measurable, but at least in theory we care
because such workloads could have more TLB misses (relative to the
execution time) than long-lasting VMs.

Paolo



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

* Re: [PATCH v3 14/22] microvm: use 2G split unconditionally
  2020-05-27 12:25           ` Igor Mammedov
  2020-05-27 13:06             ` Paolo Bonzini
@ 2020-05-28  7:17             ` Gerd Hoffmann
  1 sibling, 0 replies; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-28  7:17 UTC (permalink / raw)
  To: Igor Mammedov
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Paolo Bonzini,
	Richard Henderson

  Hi,

> >   (1) we loose a bit of memory.
>           it's probably not a big enough to care about, we do similar ovarlay mapping on pc/q35
>           at the beginning of RAM

Yes, shouldn't be too much.

> >   (2) we loose a gigabyte page.
>           I'm not sure waht exactly we loose in this case.

The 1G page for 0xc0000000 -> 0xffffffff (as explained by paolo).

> >   (3) we wouldn't have guard pages (unused address space) between
> >       between ram and mmio space.
>            if it's holes' mmio,then do we really need them (access is going to be terminated
>            either in always valid RAM or in valid mmio hole)?

Not required, but more robust.  Less likely that the guest touches mmio
by accident.

I'd expect it also requires some e820 hacks.

cheers,
  Gerd



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

* Re: [PATCH v3 14/22] microvm: use 2G split unconditionally
  2020-05-27 13:06             ` Paolo Bonzini
  2020-05-27 14:26               ` Igor Mammedov
@ 2020-05-28  7:19               ` Gerd Hoffmann
  1 sibling, 0 replies; 61+ messages in thread
From: Gerd Hoffmann @ 2020-05-28  7:19 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Peter Maydell, Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
	qemu-devel, Shannon Zhao, qemu-arm, Igor Mammedov,
	Richard Henderson

  Hi,

> But why use 2G split instead of 3G?  There's only very little MMIO and
> no PCI hole (including no huge MMCONFIG BAR) on microvm.

Yes, we can go for 3G, we are indeed not short on address space ;)

take care,
  Gerd



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

end of thread, other threads:[~2020-05-28  7:20 UTC | newest]

Thread overview: 61+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-20 13:19 [PATCH v3 00/22] microvm: add acpi support Gerd Hoffmann
2020-05-20 13:19 ` [PATCH v3 01/22] microvm: name qboot binary qboot.bin Gerd Hoffmann
2020-05-20 13:25   ` Philippe Mathieu-Daudé
2020-05-25 11:02     ` Gerd Hoffmann
2020-05-25 12:26       ` Philippe Mathieu-Daudé
2020-05-20 13:19 ` [PATCH v3 02/22] [testing] seabios: update submodule to master snapshot Gerd Hoffmann
2020-05-20 13:19 ` [PATCH v3 03/22] [testing] seabios: update config & build rules Gerd Hoffmann
2020-05-20 13:19 ` [PATCH v3 04/22] [testing] seabios: update binaries to master snapshot Gerd Hoffmann
2020-05-20 13:19 ` [PATCH v3 05/22] acpi: make build_madt() more generic Gerd Hoffmann
2020-05-20 13:19 ` [PATCH v3 06/22] acpi: create acpi-common.c and move madt code Gerd Hoffmann
2020-05-20 13:31   ` Philippe Mathieu-Daudé
2020-05-20 13:19 ` [PATCH v3 07/22] acpi: madt: skip pci override on pci-less systems Gerd Hoffmann
2020-05-20 13:19 ` [PATCH v3 08/22] acpi: fadt: add hw-reduced sleep register support Gerd Hoffmann
2020-05-20 13:19 ` [PATCH v3 09/22] acpi: ged: rename event memory region Gerd Hoffmann
2020-05-20 13:33   ` Philippe Mathieu-Daudé
2020-05-21  7:58   ` Igor Mammedow
2020-05-20 13:19 ` [PATCH v3 10/22] acpi: ged: add control regs Gerd Hoffmann
2020-05-21  8:58   ` Igor Mammedov
2020-05-20 13:19 ` [PATCH v3 11/22] acpi: ged: add x86 device variant Gerd Hoffmann
2020-05-21  9:01   ` Igor Mammedov
2020-05-20 13:19 ` [PATCH v3 12/22] acpi: move acpi_dsdt_add_power_button() to ged Gerd Hoffmann
2020-05-20 13:32   ` Philippe Mathieu-Daudé
2020-05-21  9:03   ` Igor Mammedov
2020-05-20 13:19 ` [PATCH v3 13/22] x86: coldplug cpus Gerd Hoffmann
2020-05-20 14:07   ` Igor Mammedov
2020-05-20 13:19 ` [PATCH v3 14/22] microvm: use 2G split unconditionally Gerd Hoffmann
2020-05-20 13:34   ` Philippe Mathieu-Daudé
2020-05-21  9:14   ` Igor Mammedov
2020-05-21  9:29   ` Igor Mammedov
2020-05-25 11:45     ` Gerd Hoffmann
2020-05-25 16:36       ` Igor Mammedov
2020-05-26  4:48         ` Gerd Hoffmann
2020-05-27 12:25           ` Igor Mammedov
2020-05-27 13:06             ` Paolo Bonzini
2020-05-27 14:26               ` Igor Mammedov
2020-05-27 14:35                 ` Igor Mammedov
2020-05-27 14:54                 ` Paolo Bonzini
2020-05-28  7:19               ` Gerd Hoffmann
2020-05-28  7:17             ` Gerd Hoffmann
2020-05-20 13:19 ` [PATCH v3 15/22] microvm: make virtio irq base runtime configurable Gerd Hoffmann
2020-05-20 13:29   ` Philippe Mathieu-Daudé
2020-05-25 11:49     ` Gerd Hoffmann
2020-05-25 12:27       ` Philippe Mathieu-Daudé
2020-05-20 13:19 ` [PATCH v3 16/22] microvm/acpi: add minimal acpi support Gerd Hoffmann
2020-05-21 10:09   ` Igor Mammedov
2020-05-20 13:19 ` [PATCH v3 17/22] microvm/acpi: add acpi_dsdt_add_virtio() for x86 Gerd Hoffmann
2020-05-21 10:12   ` Igor Mammedov
2020-05-20 13:19 ` [PATCH v3 18/22] microvm/acpi: use GSI 16-23 for virtio Gerd Hoffmann
2020-05-21 10:13   ` Igor Mammedov
2020-05-20 13:20 ` [PATCH v3 19/22] microvm/acpi: use seabios with acpi=on Gerd Hoffmann
2020-05-21 10:14   ` Igor Mammedov
2020-05-20 13:20 ` [PATCH v3 20/22] microvm/acpi: disable virtio-mmio cmdline hack Gerd Hoffmann
2020-05-20 13:20 ` [PATCH v3 21/22] [RfC] acpi: add per machine type acpi default Gerd Hoffmann
2020-05-21 10:26   ` Igor Mammedov
2020-05-20 13:20 ` [PATCH v3 22/22] [RfC] acpi: flip default to off for microvm Gerd Hoffmann
2020-05-21 10:36   ` Igor Mammedov
2020-05-25 12:11     ` Gerd Hoffmann
2020-05-20 15:46 ` [PATCH v3 00/22] microvm: add acpi support no-reply
2020-05-20 15:50 ` no-reply
2020-05-20 15:51 ` no-reply
2020-05-20 15:53 ` no-reply

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.