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@xxxxxxxxxx> > --- > 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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list