[OE-core] [PATCH 1/2] oeqa: Fix for QEMU_USE_KVM

Richard Purdie richard.purdie at linuxfoundation.org
Thu Jan 3 22:33:16 UTC 2019


On Thu, 2019-01-03 at 16:04 +0800, Robert Yang wrote:
> Fixed:
> MACHINE = "qemux86"
> QEMU_USE_KVM = "qemux86"
> IMAGE_CLASSES += "testimage"
> 
> $ oe-selftest -r runqemu.RunqemuTests.test_boot_rootfs
> 
> [snip]
>   File "/buildarea1/lyang1/poky/meta/lib/oe/types.py", line 122, in
> boolean
>     raise ValueError("Invalid boolean value '%s'" % value)
> ValueError: Invalid boolean value 'qemux86'
> 
> Signed-off-by: Robert Yang <liezhi.yang at windriver.com>
> ---
>  meta/classes/testimage.bbclass |  8 +-------
>  meta/lib/oe/types.py           | 18 ++++++++++++++++++
>  meta/lib/oeqa/targetcontrol.py |  8 +-------
>  3 files changed, 20 insertions(+), 14 deletions(-)
> 
> diff --git a/meta/classes/testimage.bbclass
> b/meta/classes/testimage.bbclass
> index e8fa4a3..82aef9f 100644
> --- a/meta/classes/testimage.bbclass
> +++ b/meta/classes/testimage.bbclass
> @@ -230,13 +230,7 @@ def testimage_main(d):
>      boottime = int(d.getVar("TEST_QEMUBOOT_TIMEOUT"))
>  
>      # 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:
> -        kvm = False
> +    kvm = oe.types.qemu_use_kvm(d.getVar('QEMU_USE_KVM'),
> d.getVar('MACHINE'))
>  
>      slirp = False
>      if d.getVar("QEMU_USE_SLIRP"):
> diff --git a/meta/lib/oe/types.py b/meta/lib/oe/types.py
> index f401713..a153f2c 100644
> --- a/meta/lib/oe/types.py
> +++ b/meta/lib/oe/types.py
> @@ -156,3 +156,21 @@ def path(value, relativeto='', normalize='true',
> mustexist='false'):
>                  raise ValueError("{0}: {1}".format(value,
> os.strerror(errno.ENOENT)))
>  
>      return value
> +
> +def qemu_use_kvm(kvm, machine):
> +    """
> +    kvm can be:
> +    - bool: 0, yes, ...
> +    - MACHINEs: qemux86 qemux86-64 ...
> +    """
> +    use_kvm = False
> +    if kvm:
> +        kvm_boolean = False
> +        try:
> +            kvm_boolean = boolean(kvm)
> +        except ValueError:
> +            pass
> +        if (kvm_boolean and "x86" in machine) or (machine in
> kvm.split()):
> +            use_kvm = True
> +    return use_kvm
> +
> diff --git a/meta/lib/oeqa/targetcontrol.py
> b/meta/lib/oeqa/targetcontrol.py
> index 59a9c35..980d6a2 100644
> --- a/meta/lib/oeqa/targetcontrol.py
> +++ b/meta/lib/oeqa/targetcontrol.py
> @@ -107,13 +107,7 @@ class QemuTarget(BaseTarget):
>          dump_target_cmds = d.getVar("testimage_dump_target")
>          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:
> -            use_kvm = False
> +        use_kvm = oe.types.qemu_use_kvm(d.getVar('QEMU_USE_KVM'),
> d.getVar('MACHINE'))
>  
>          # Log QemuRunner log output to a file
>          import oe.path


There have been a few patches related to this floating around. I'd like
to fix this once and for all but we don't have a patch which quite gets
this to where it needs to be.

I'd suggest we:

a) drop the approach of having MACHINE in the variable and simply have
it either set to enabled or disabled

b) only enable KVM if the target arch matches the host arch


For b) I'd like to cover the case where qemuarm64 is being run on an
aarch64 server.

This way we'd automatically enable KVM where the arch matches rather
than needing to code it for each MACHINE.

Does that make sense?

Cheers,

Richard





More information about the Openembedded-core mailing list