qemu-arm
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 15/22] microvm: make virtio irq base runtime configurable


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH v3 15/22] microvm: make virtio irq base runtime configurable
Date: Wed, 20 May 2020 15:29:57 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0

On 5/20/20 3:19 PM, Gerd Hoffmann wrote:
Signed-off-by: Gerd Hoffmann <address@hidden>
Reviewed-by: Sergio Lopez <address@hidden>
---
  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);





reply via email to

[Prev in Thread] Current Thread [Next in Thread]