[PATCH RFC 1/2] qemu: use "-accel" option to specify accelerator instead of "-machine"

Ján Tomko jtomko at redhat.com
Mon Jan 11 08:35:54 UTC 2021


On a Monday in 2021, Paolo Bonzini wrote:
>On 09/01/21 19:58, huangy81 at chinatelecom.cn wrote:
>>diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>>index 6f970a3..9a64473 100644
>>--- a/src/qemu/qemu_command.c
>>+++ b/src/qemu/qemu_command.c
>>@@ -6711,40 +6711,6 @@ qemuBuildMachineCommandLine(virCommandPtr cmd,
>>      virCommandAddArg(cmd, "-machine");
>>      virBufferAdd(&buf, def->os.machine, -1);
>>-    switch ((virDomainVirtType)def->virtType) {
>>-    case VIR_DOMAIN_VIRT_QEMU:
>>-        virBufferAddLit(&buf, ",accel=tcg");
>>-        break;
>>-
>>-    case VIR_DOMAIN_VIRT_KVM:
>>-        virBufferAddLit(&buf, ",accel=kvm");
>>-        break;
>>-
>>-    case VIR_DOMAIN_VIRT_KQEMU:
>>-    case VIR_DOMAIN_VIRT_XEN:
>>-    case VIR_DOMAIN_VIRT_LXC:
>>-    case VIR_DOMAIN_VIRT_UML:
>>-    case VIR_DOMAIN_VIRT_OPENVZ:
>>-    case VIR_DOMAIN_VIRT_TEST:
>>-    case VIR_DOMAIN_VIRT_VMWARE:
>>-    case VIR_DOMAIN_VIRT_HYPERV:
>>-    case VIR_DOMAIN_VIRT_VBOX:
>>-    case VIR_DOMAIN_VIRT_PHYP:
>>-    case VIR_DOMAIN_VIRT_PARALLELS:
>>-    case VIR_DOMAIN_VIRT_BHYVE:
>>-    case VIR_DOMAIN_VIRT_VZ:
>>-    case VIR_DOMAIN_VIRT_NONE:
>>-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>>-                       _("the QEMU binary does not support %s"),
>>-                       virDomainVirtTypeToString(def->virtType));
>>-        return -1;
>>-
>>-    case VIR_DOMAIN_VIRT_LAST:
>>-    default:
>>-        virReportEnumRangeError(virDomainVirtType, def->virtType);
>>-        return -1;
>>-    }
>>-
>>      /* To avoid the collision of creating USB controllers when calling
>>       * machine->init in QEMU, it needs to set usb=off
>>       */
>>@@ -6945,6 +6911,52 @@ qemuBuildMachineCommandLine(virCommandPtr cmd,
>>      return 0;
>>  }
>>+static int
>>+qemuBuildAccelCommandLine(virCommandPtr cmd,
>>+                          const virDomainDef *def)
>>+{

Is this a patch sent to libvir-list that I'm not seeing yet because of
moderation?

Either way, please split the qemuBuildAccelCommandLine function
separation from the actual functional changes to make it easier to see
what's going on.

>>+    /* the '-machine' options for accelerator are legacy,
>>+     * using the '-accel' options by default */
>>+    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
>>+    virCommandAddArg(cmd, "-accel");
>>+
>>+    switch ((virDomainVirtType)def->virtType) {
>>+    case VIR_DOMAIN_VIRT_QEMU:
>>+        virBufferAddLit(&buf, "tcg");
>>+        break;
>>+
>>+    case VIR_DOMAIN_VIRT_KVM:
>>+        virBufferAddLit(&buf, "kvm");
>>+        break;
>>+
>>+    case VIR_DOMAIN_VIRT_KQEMU:
>>+    case VIR_DOMAIN_VIRT_XEN:
>>+    case VIR_DOMAIN_VIRT_LXC:
>>+    case VIR_DOMAIN_VIRT_UML:
>>+    case VIR_DOMAIN_VIRT_OPENVZ:
>>+    case VIR_DOMAIN_VIRT_TEST:
>>+    case VIR_DOMAIN_VIRT_VMWARE:
>>+    case VIR_DOMAIN_VIRT_HYPERV:
>>+    case VIR_DOMAIN_VIRT_VBOX:
>>+    case VIR_DOMAIN_VIRT_PHYP:
>>+    case VIR_DOMAIN_VIRT_PARALLELS:
>>+    case VIR_DOMAIN_VIRT_BHYVE:
>>+    case VIR_DOMAIN_VIRT_VZ:
>>+    case VIR_DOMAIN_VIRT_NONE:
>>+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>>+                       _("the QEMU binary does not support %s"),
>>+                       virDomainVirtTypeToString(def->virtType));
>>+        return -1;
>>+
>>+    case VIR_DOMAIN_VIRT_LAST:
>>+    default:
>>+        virReportEnumRangeError(virDomainVirtType, def->virtType);
>>+        return -1;
>>+    }
>>+
>>+    virCommandAddArgBuffer(cmd, &buf);
>>+    return 0;
>>+}
>>  static void
>>  qemuBuildTSEGCommandLine(virCommandPtr cmd,
>>@@ -9840,6 +9852,9 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
>>      if (qemuBuildMachineCommandLine(cmd, cfg, def, qemuCaps, priv) < 0)
>>          return NULL;
>>+    if (qemuBuildAccelCommandLine(cmd, def) < 0)
>>+        return NULL;
>>+
>>      qemuBuildTSEGCommandLine(cmd, def);
>
>This unfortunately cannot be done unconditionally.  You need to probe 
>for the availability of -accel, using something like
>

What are we probing for?

The minimal QEMU version supported by libvirt is 1.5.3 and I'm seeing
some test cases using -machine pc-i440fx-1.5,accel=tcg in our test
suite.

And I don't see any explicit use of -accel in this patch.

Jano

>diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
>index 4d132defbd..23efaccbad 100644
>--- a/src/qemu/qemu_capabilities.c
>+++ b/src/qemu/qemu_capabilities.c
>@@ -609,6 +609,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
>               "ncr53c90",
>               "dc390",
>               "am53c974",
>+              "accel",
>     );
>
>
>@@ -3220,6 +3221,7 @@ static struct virQEMUCapsCommandLineProps 
>virQEMUCapsCommandLine[] = {
>     { "fsdev", "multidevs", QEMU_CAPS_FSDEV_MULTIDEVS },
>     { "fw_cfg", "file", QEMU_CAPS_FW_CFG },
>     { "fsdev", "fmode", QEMU_CAPS_FSDEV_CREATEMODE }, /* Could have 
>also checked fsdev->dmode */
>+    { "accel", "accel", QEMU_CAPS_ACCEL },
> };
>
> static int
>
>Then you can choose between the two code paths using 
>virQEMUCapsGet(qemuCaps, QEMU_CAPS_ACCEL).
>
>Thanks,
>
>Paolo
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20210111/6ff26a23/attachment-0001.sig>


More information about the libvir-list mailing list