[libvirt] [PATCH v3 01/11] util: Introduce virHostGetDRMRenderNode helper
Daniel P. Berrangé
berrange at redhat.com
Mon Dec 3 15:18:47 UTC 2018
On Thu, Nov 29, 2018 at 03:20:11PM +0100, Erik Skultety wrote:
> This is the first step towards libvirt picking the first available
> render node instead of QEMU. It also makes sense for us to be able to do
> that, since we allow specifying the node directly for SPICE, so if
> there's no render node specified by the user, we should pick the first
> available one. The algorithm used for that is essentially the same as
> the one QEMU uses.
>
> Signed-off-by: Erik Skultety <eskultet at redhat.com>
> ---
> src/libvirt_private.syms | 1 +
> src/util/virutil.c | 53 ++++++++++++++++++++++++++++++++++++++++
> src/util/virutil.h | 2 ++
> 3 files changed, 56 insertions(+)
>
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 5018a13e9c..c7f08f9620 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -3151,6 +3151,7 @@ virGetUserName;
> virGetUserRuntimeDirectory;
> virGetUserShell;
> virHexToBin;
> +virHostGetDRMRenderNode;
> virHostHasIOMMU;
> virIndexToDiskName;
> virIsDevMapperDevice;
> diff --git a/src/util/virutil.c b/src/util/virutil.c
> index 974cffc2ee..da12a11e04 100644
> --- a/src/util/virutil.c
> +++ b/src/util/virutil.c
> @@ -2145,3 +2145,56 @@ virHostHasIOMMU(void)
> VIR_DIR_CLOSE(iommuDir);
> return ret;
> }
> +
> +
> +/**
> + * virHostGetDRMRenderNode:
> + *
> + * Picks the first DRM render node available. Missing DRI or missing DRM render
> + * nodes in the system results in an error.
> + *
> + * Returns an absolute path to the first render node available or NULL in case
> + * of an error with the error being reported.
> + * Caller is responsible for freeing the result string.
> + *
> + */
> +char *
> +virHostGetDRMRenderNode(void)
> +{
> + char *ret = NULL;
> + DIR *driDir = NULL;
> + const char *driPath = "/dev/dri";
> + struct dirent *ent = NULL;
> + int dirErr = 0;
> + bool have_rendernode = false;
> +
> + if (virDirOpen(&driDir, driPath) < 0)
> + return NULL;
> +
> + while ((dirErr = virDirRead(driDir, &ent, driPath)) > 0) {
> + if (ent->d_type != DT_CHR)
> + continue;
The 'd_type' field is a Linux-ism, so this has broken the build
Is it even needed ? ie are then any files in /dev/dri that have
a prefix of "renderD" but which are not character devices ?
> +
> + if (STRPREFIX(ent->d_name, "renderD")) {
> + have_rendernode = true;
> + break;
> + }
> + }
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
More information about the libvir-list
mailing list