From d50eb8d57a3ecb4577b9e556d9e38bf80b408f77 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 10 Feb 2015 12:22:59 +0000 Subject: [PATCH] intel: Fix checking for compatible render node Signed-off-by: Chris Wilson --- src/intel_device.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/intel_device.c b/src/intel_device.c index 140e1536..c835a5d3 100644 --- a/src/intel_device.c +++ b/src/intel_device.c @@ -464,6 +464,7 @@ static char *find_render_node(int fd) #if defined(USE_RENDERNODE) struct stat master, render; char buf[128]; + int i; /* Are we a render-node ourselves? */ if (is_render_node(fd, &master)) @@ -472,8 +473,17 @@ static char *find_render_node(int fd) sprintf(buf, "/dev/dri/renderD%d", (int)((master.st_rdev | 0x80) & 0xbf)); if (stat(buf, &render) == 0 && master.st_mode == render.st_mode && - render.st_rdev == ((master.st_rdev | 0x80) & 0xbf)) + render.st_rdev == (master.st_rdev | 0x80)) return strdup(buf); + + /* Misaligned card <-> renderD, do a full search */ + for (i = 0; i < 16; i++) { + sprintf(buf, "/dev/dri/renderD%d", i + 128); + if (stat(buf, &render) == 0 && + master.st_mode == render.st_mode && + render.st_rdev == (master.st_rdev | 0x80)) + return strdup(buf); + } #endif return NULL;