[systemd-devel] [PATCH 3/3] ARM: detect-virt: detect QEMU/KVM

Lennart Poettering lennart at poettering.net
Tue Mar 31 00:18:08 PDT 2015


On Mon, 30.03.15 21:15, Andrew Jones (drjones at redhat.com) wrote:

> QEMU/KVM guests do not have hypervisor nodes, but they do have
> fw-cfg nodes (since qemu v2.3.0-rc0). fw-cfg nodes are documented,
> see kernel doc Documentation/devicetree/bindings/arm/fw-cfg.txt,
> and therefore we should be able to rely on it in this detection.
> 
> Unfortunately, we currently don't have enough information in the
> DT, or elsewhere, to determine if we're using KVM acceleration
> with QEMU or not, so we can only report 'qemu' at this time, even
> if KVM is in use. This shouldn't really matter in practice though,
> because if detect-virt is used interactively it will be clear to
> the user whether or not KVM acceleration is present by the overall
> speed of the guest. If used by a script, then the script's behavior
> should not change whether it's 'qemu' or 'kvm'. QEMU emulated
> guests and QEMU/KVM guests of the same type should behave
> identically, only the speed at which they run should differ.
> 
> ---
>  src/shared/virt.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/src/shared/virt.c b/src/shared/virt.c
> index 712523210d720..ddb76687975ba 100644
> --- a/src/shared/virt.c
> +++ b/src/shared/virt.c
> @@ -115,6 +115,20 @@ static int detect_vm_devicetree(const char **_id) {
>                          *_id = "xen";
>                          return 1;
>                  }
> +        } else if (r == -ENOENT) {
> +                _cleanup_closedir_ DIR *dir = NULL;
> +                struct dirent *dent;
> +
> +                dir = opendir("/proc/device-tree");
> +                if (!dir)
> +                        return 0;

It's probably a good idea to return an error if this fails unless
errno is ENOENT?

> +
> +                for (dent = readdir(dir); dent != NULL; dent =
> readdir(dir)) {

Please use the FOREACH_DIRENT macro for this!

Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list