On Tue, May 05, 2020 at 03:43:04PM +0200, Gerd Hoffmann wrote: > Signed-off-by: Gerd Hoffmann > --- > include/hw/i386/microvm.h | 2 +- > hw/i386/acpi-microvm.c | 6 +++--- > hw/i386/microvm.c | 11 +++++++---- > 3 files changed, 11 insertions(+), 8 deletions(-) Reviewed-by: Sergio Lopez > diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h > index 55f5984cfaa1..878d2a8011f4 100644 > --- a/include/hw/i386/microvm.h > +++ b/include/hw/i386/microvm.h > @@ -28,7 +28,6 @@ > > /* Platform virtio definitions */ > #define VIRTIO_MMIO_BASE 0xc0000000 > -#define VIRTIO_IRQ_BASE 5 > #define VIRTIO_NUM_TRANSPORTS 8 > #define VIRTIO_CMDLINE_MAXLEN 64 > > @@ -63,6 +62,7 @@ typedef struct { > bool auto_kernel_cmdline; > > /* Machine state */ > + uint32_t virtio_irq_base; > bool kernel_cmdline_fixed; > Notifier machine_done; > AcpiDeviceIf *acpi_dev; > diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c > index 4d91ac9360ce..1230080c45cd 100644 > --- a/hw/i386/acpi-microvm.c > +++ b/hw/i386/acpi-microvm.c > @@ -47,7 +47,7 @@ static void acpi_dsdt_add_power_button(Aml *scope) > aml_append(scope, dev); > } > > -static void acpi_dsdt_add_virtio(Aml *scope) > +static void acpi_dsdt_add_virtio(Aml *scope, MicrovmMachineState *mms) > { > gchar *separator; > long int index; > @@ -75,7 +75,7 @@ static void acpi_dsdt_add_virtio(Aml *scope) > continue; > } > > - uint32_t irq = VIRTIO_IRQ_BASE + index; > + uint32_t irq = mms->virtio_irq_base + index; > hwaddr base = VIRTIO_MMIO_BASE + index * 512; > hwaddr size = 512; > > @@ -119,7 +119,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); > + acpi_dsdt_add_virtio(sb_scope, mms); > aml_append(dsdt, sb_scope); > > scope = aml_scope("\\"); > diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c > index a3708fdf1e39..2aa2804e4ca0 100644 > --- a/hw/i386/microvm.c > +++ b/hw/i386/microvm.c > @@ -124,10 +124,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 */ > @@ -274,7 +275,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; > @@ -294,7 +295,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; > @@ -306,6 +307,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; > @@ -329,7 +331,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 >