Message ID | 20201016114328.18835-2-kraxel@redhat.com |
---|---|
State | Superseded |
Headers | show |
Series | RfC: microvm: add second ioapic | expand |
On Fri, 16 Oct 2020 13:43:25 +0200 Gerd Hoffmann <kraxel@redhat.com> wrote: > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> > --- > include/hw/i386/microvm.h | 2 +- > hw/i386/microvm.c | 9 +++++++-- > 2 files changed, 8 insertions(+), 3 deletions(-) > > diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h > index 91b064575d55..0154ad5bd707 100644 > --- a/include/hw/i386/microvm.h > +++ b/include/hw/i386/microvm.h > @@ -52,7 +52,6 @@ > > /* Platform virtio definitions */ > #define VIRTIO_MMIO_BASE 0xfeb00000 > -#define VIRTIO_NUM_TRANSPORTS 8 > #define VIRTIO_CMDLINE_MAXLEN 64 > > #define GED_MMIO_BASE 0xfea00000 > @@ -95,6 +94,7 @@ struct MicrovmMachineState { > > /* Machine state */ > uint32_t virtio_irq_base; > + uint32_t virtio_num_transports; > bool kernel_cmdline_fixed; > Notifier machine_done; > Notifier powerdown_req; > diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c > index 9dd74458aca4..eaf5da31f7e1 100644 > --- a/hw/i386/microvm.c > +++ b/hw/i386/microvm.c > @@ -177,8 +177,13 @@ static void microvm_devices_init(MicrovmMachineState *mms) > > kvmclock_create(true); > > - mms->virtio_irq_base = x86_machine_is_acpi_enabled(x86ms) ? 16 : 5; > - for (i = 0; i < VIRTIO_NUM_TRANSPORTS; i++) { > + mms->virtio_irq_base = 5; > + mms->virtio_num_transports = 8; > + if (x86_machine_is_acpi_enabled(x86ms)) { > + mms->virtio_irq_base = 16; > + } can we unify and use the same base in both cases? > + > + for (i = 0; i < mms->virtio_num_transports; i++) { > sysbus_create_simple("virtio-mmio", > VIRTIO_MMIO_BASE + i * 512, > x86ms->gsi[mms->virtio_irq_base + i]);
Hi, > > + mms->virtio_irq_base = 5; > > + mms->virtio_num_transports = 8; > > + if (x86_machine_is_acpi_enabled(x86ms)) { > > + mms->virtio_irq_base = 16; > > + } > > can we unify and use the same base in both cases? Well, without ACPI the IO-APIC detection seems to not work reliable, which in turn makes using IRQs 16+ problematic because the classic PIC can't handle those ... take care, Gerd
diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h index 91b064575d55..0154ad5bd707 100644 --- a/include/hw/i386/microvm.h +++ b/include/hw/i386/microvm.h @@ -52,7 +52,6 @@ /* Platform virtio definitions */ #define VIRTIO_MMIO_BASE 0xfeb00000 -#define VIRTIO_NUM_TRANSPORTS 8 #define VIRTIO_CMDLINE_MAXLEN 64 #define GED_MMIO_BASE 0xfea00000 @@ -95,6 +94,7 @@ struct MicrovmMachineState { /* Machine state */ uint32_t virtio_irq_base; + uint32_t virtio_num_transports; bool kernel_cmdline_fixed; Notifier machine_done; Notifier powerdown_req; diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 9dd74458aca4..eaf5da31f7e1 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -177,8 +177,13 @@ static void microvm_devices_init(MicrovmMachineState *mms) kvmclock_create(true); - mms->virtio_irq_base = x86_machine_is_acpi_enabled(x86ms) ? 16 : 5; - for (i = 0; i < VIRTIO_NUM_TRANSPORTS; i++) { + mms->virtio_irq_base = 5; + mms->virtio_num_transports = 8; + if (x86_machine_is_acpi_enabled(x86ms)) { + mms->virtio_irq_base = 16; + } + + for (i = 0; i < mms->virtio_num_transports; i++) { sysbus_create_simple("virtio-mmio", VIRTIO_MMIO_BASE + i * 512, x86ms->gsi[mms->virtio_irq_base + i]);
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- include/hw/i386/microvm.h | 2 +- hw/i386/microvm.c | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-)