[libvirt] [PATCH v2 2/3] qemu : Add loadparm to qemu command line string

Farhan Ali alifm at linux.vnet.ibm.com
Fri May 19 16:56:46 UTC 2017


Introduce a new QEMU capability for loadparm and if the capability is
supported by QEMU then append the loadparm value to "-machine" string
of qemu command line.

Signed-off-by: Farhan Ali <alifm at linux.vnet.ibm.com>
Reviewed-by: Bjoern Walk <bwalk at linux.vnet.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy at linux.vnet.ibm.com>
Reviewed-by: Marc Hartmayer <mhartmay at linux.vnet.ibm.com>
---
 src/qemu/qemu_capabilities.c |  2 ++
 src/qemu/qemu_capabilities.h |  1 +
 src/qemu/qemu_command.c      | 37 +++++++++++++++++++++++++++++++++++++
 3 files changed, 40 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 546dfd7..e3bd445 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -371,6 +371,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
               "kernel-irqchip.split",
               "intel-iommu.intremap",
               "intel-iommu.caching-mode",
+              "loadparm",
     );
 
 
@@ -3144,6 +3145,7 @@ static struct virQEMUCapsCommandLineProps virQEMUCapsCommandLine[] = {
     { "drive", "throttling.group", QEMU_CAPS_DRIVE_IOTUNE_GROUP },
     { "spice", "rendernode", QEMU_CAPS_SPICE_RENDERNODE },
     { "machine", "kernel_irqchip", QEMU_CAPS_MACHINE_KERNEL_IRQCHIP },
+    { "machine", "loadparm", QEMU_CAPS_LOADPARM },
 };
 
 static int
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index aa99fda..a18c61c 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -409,6 +409,7 @@ typedef enum {
     QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT, /* -machine kernel_irqchip=split */
     QEMU_CAPS_INTEL_IOMMU_INTREMAP, /* intel-iommu.intremap */
     QEMU_CAPS_INTEL_IOMMU_CACHING_MODE, /* intel-iommu.caching-mode */
+    QEMU_CAPS_LOADPARM, /* -machine loadparm */
 
     QEMU_CAPS_LAST /* this must always be the last item */
 } virQEMUCapsFlags;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 4c1a266..6ae07dc 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -7237,6 +7237,41 @@ qemuAppendKeyWrapMachineParms(virBuffer *buf, virQEMUCapsPtr qemuCaps,
     return true;
 }
 
+static void
+qemuAppendLoadparmMachineParm(virBuffer *buf,
+                              const virDomainDef *def,
+                              virQEMUCapsPtr qemuCaps)
+{
+    size_t i = 0;
+
+    if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX) ||
+        !virQEMUCapsGet(qemuCaps, QEMU_CAPS_LOADPARM))
+        return;
+
+    for (i = 0; i < def->ndisks; i++) {
+        virDomainDiskDefPtr disk = def->disks[i];
+
+        if (disk->info.bootIndex == 1) {
+            if (disk->info.loadparm)
+                virBufferAsprintf(buf, ",loadparm=%s", disk->info.loadparm);
+
+            return;
+        }
+    }
+
+    /* Network boot device*/
+    for (i = 0; i < def->nnets; i++) {
+        virDomainNetDefPtr net = def->nets[i];
+
+        if (net->info.bootIndex == 1) {
+            if (net->info.loadparm)
+                virBufferAsprintf(buf, ",loadparm=%s", net->info.loadparm);
+
+            return;
+        }
+    }
+}
+
 static int
 qemuBuildNameCommandLine(virCommandPtr cmd,
                          virQEMUDriverConfigPtr cfg,
@@ -7326,6 +7361,8 @@ qemuBuildMachineCommandLine(virCommandPtr cmd,
         virCommandAddArg(cmd, "-machine");
         virBufferAdd(&buf, def->os.machine, -1);
 
+        qemuAppendLoadparmMachineParm(&buf, def, qemuCaps);
+
         if (def->virtType == VIR_DOMAIN_VIRT_QEMU)
             virBufferAddLit(&buf, ",accel=tcg");
         else if (def->virtType == VIR_DOMAIN_VIRT_KVM)
-- 
1.9.1




More information about the libvir-list mailing list