diff mbox series

[1/4] microvm: make number of virtio transports runtime configurable

Message ID 20201016114328.18835-2-kraxel@redhat.com
State Superseded
Headers show
Series RfC: microvm: add second ioapic | expand

Commit Message

Gerd Hoffmann Oct. 16, 2020, 11:43 a.m. UTC
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(-)

Comments

Igor Mammedov Oct. 23, 2020, 7 p.m. UTC | #1
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]);
Gerd Hoffmann Oct. 26, 2020, 7:04 a.m. UTC | #2
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 mbox series

Patch

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]);