commit 20c1856

Michael Forney  ·  2018-11-10 08:34:10 +0000 UTC
parent 600a874
drm: Use libdrm utility function to get render node device name

Fixes #46.
1 files changed,  +8, -22
+8, -22
 1@@ -47,7 +47,7 @@
 2 struct swc_drm swc_drm;
 3 
 4 static struct {
 5-	char path[128];
 6+	char *path;
 7 
 8 	uint32_t taken_ids;
 9 
10@@ -252,38 +252,23 @@ bind_drm(struct wl_client *client, void *data, uint32_t version, uint32_t id)
11 bool
12 drm_initialize(void)
13 {
14-	struct stat master, render;
15+	char primary[128];
16 
17-	if (!find_primary_drm_device(drm.path, sizeof(drm.path))) {
18+	if (!find_primary_drm_device(primary, sizeof(primary))) {
19 		ERROR("Could not find DRM device\n");
20 		goto error0;
21 	}
22 
23 	drm.taken_ids = 0;
24-	swc.drm->fd = launch_open_device(drm.path, O_RDWR | O_CLOEXEC);
25-
26+	swc.drm->fd = launch_open_device(primary, O_RDWR | O_CLOEXEC);
27 	if (swc.drm->fd == -1) {
28 		ERROR("Could not open DRM device at %s\n", drm.path);
29 		goto error0;
30 	}
31 
32-	if (fstat(swc.drm->fd, &master) != 0) {
33-		ERROR("Could not fstat DRM FD: %s\n", strerror(errno));
34-		goto error1;
35-	}
36-
37-	if (snprintf(drm.path, sizeof(drm.path), "/dev/dri/renderD%d", minor(master.st_rdev) + 0x80) >= sizeof(drm.path)) {
38-		ERROR("Render node path is too long");
39-		goto error1;
40-	}
41-
42-	if (stat(drm.path, &render) != 0) {
43-		ERROR("stat %s failed (does your kernel support render nodes?): %s\n", drm.path, strerror(errno));
44-		goto error1;
45-	}
46-
47-	if (master.st_mode != render.st_mode || minor(master.st_rdev) + 0x80 != minor(render.st_rdev)) {
48-		ERROR("Render node does not have expected mode or minor number\n");
49+	drm.path = drmGetRenderDeviceNameFromFd(swc.drm->fd);
50+	if (!drm.path) {
51+		ERROR("Could not determine render node path\n");
52 		goto error1;
53 	}
54 
55@@ -335,6 +320,7 @@ drm_finalize(void)
56 	wl_event_source_remove(drm.event_source);
57 	wld_destroy_renderer(swc.drm->renderer);
58 	wld_destroy_context(swc.drm->context);
59+	free(drm.path);
60 	close(swc.drm->fd);
61 }
62