On 12/07/2018 07:02 PM, Richard Purdie wrote:
On Thu, 2018-12-06 at 14:30 +0800, Chen Qi wrote:
We want QEMU_USE_KVM to only set to some boolean value, with possible
MACHINE override. Drop the support of listing machines in this variable,
and give users error message if they still do so.

Error message below is an example.

ERROR: core-image-minimal-1.0-r0 do_testimage: Invalid boolean value 
'intel-corei7-64 intel-core2-32 qemux86 qemux86-64'
QEMU_USE_KVM needs to be set to a boolean value. It no longer supports 
accepting a list of machines.
   e.g.
   QEMU_USE_KVM_qemux86-64 = '1'
ERROR: core-image-minimal-1.0-r0 do_testimage: Function failed: do_testimage

QB_CPU_KVM is also checked to determine whether to enable kvm.

Signed-off-by: Chen Qi <qi.c...@windriver.com>
---
  meta/classes/testimage.bbclass | 12 +++++++-----
  meta/lib/oeqa/targetcontrol.py | 12 +++++++-----
  2 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/meta/classes/testimage.bbclass b/meta/classes/testimage.bbclass
index 82cbb06..3353d133 100644
--- a/meta/classes/testimage.bbclass
+++ b/meta/classes/testimage.bbclass
@@ -229,11 +229,13 @@ def testimage_main(d):
# Get use_kvm
      qemu_use_kvm = d.getVar("QEMU_USE_KVM")
-    if qemu_use_kvm and \
-       (d.getVar('MACHINE') in qemu_use_kvm.split() or \
-        oe.types.boolean(qemu_use_kvm) and 'x86' in machine):
-        kvm = True
-    else:
+    try:
+        kvm = oe.types.boolean(qemu_use_kvm)
+    except ValueError as e:
+        bb.fatal("%s\nQEMU_USE_KVM needs to be set to a boolean value. It no longer 
supports accepting a list of machines.\n"
+                 "  e.g.\n"
+                 "  QEMU_USE_KVM_qemux86-64 = '1'" % e)
+    if kvm and not d.getVar('QB_CPU_KVM'):
          kvm = False
slirp = False
diff --git a/meta/lib/oeqa/targetcontrol.py b/meta/lib/oeqa/targetcontrol.py
index 59a9c35..d21823b 100644
--- a/meta/lib/oeqa/targetcontrol.py
+++ b/meta/lib/oeqa/targetcontrol.py
@@ -108,11 +108,13 @@ class QemuTarget(BaseTarget):
          dump_host_cmds = d.getVar("testimage_dump_host")
          dump_dir = d.getVar("TESTIMAGE_DUMP_DIR")
          qemu_use_kvm = d.getVar("QEMU_USE_KVM")
-        if qemu_use_kvm and \
-           (oe.types.boolean(qemu_use_kvm) and "x86" in d.getVar("MACHINE") or 
\
-            d.getVar("MACHINE") in qemu_use_kvm.split()):
-            use_kvm = True
-        else:
+        try:
+            use_kvm = oe.types.boolean(qemu_use_kvm)
+        except ValueError as e:
+            bb.fatal("%s\nQEMU_USE_KVM needs to be set to a boolean value. It no 
longer supports accepting a list of machines.\n"
+                     "  e.g.\n"
+                     "  QEMU_USE_KVM_qemux86-64 = '1'" % e)
+        if use_kvm and not d.getVar('QB_CPU_KVM'):
              use_kvm = False
# Log QemuRunner log output to a file
Unfortunately this still isn't going to work quite as I mentioned.

We've about to add an aarch64 server to our autobuilder infrastructure.
We need that to use kvm for arm targets but not x86 ones yet have x86
targets use kvm on x86 hardware too.

I appreciate that isn't how the code works now but we may as well fix
this properly once and for all.

Cheers,

Richard




How about setting QB_CPU_KVM to something like ${@bb.utils.contains('BUILD_ARCH', 'x86_64', '-cpu core2duo', '', d)}? In this way, we are actually doing BUILD_ARCH and TARGET_ARCH match manually, as we are setting QB_CPU_KVM in different conf files like qemuboot-x86.inc, qemuboot-intel.inc, which contain target information in their names. When aarch64 server is supported, qemuarm and qemuarm64's configuration files could also be modified to add QB_CPU_KVM.

I'm thinking about a general matching function to check BUILD_ARCH and TARGET_ARCH, and getting rid of QB_CPU_KVM. But when checking qemuboot-intel.inc, I found the '-cpu' option is not the same when enabling and disabling kvm.
QB_CPU_intel-core2-32 = "-cpu coreduo"
QB_CPU_KVM_intel-core2-32 = "-cpu kvm32"

So it seems QB_CPU_KVM is still needed. One step further, if it's still needed, we could set it properly, doing arch matching manually.

Best Regards,
Chen Qi
--
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to