]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
drm: simplify device open
authorDaniel Drake <drake@endlessm.com>
Mon, 25 Nov 2013 17:38:37 +0000 (11:38 -0600)
committerRay Strode <rstrode@redhat.com>
Tue, 3 Dec 2013 15:28:07 +0000 (10:28 -0500)
libdrm's open functions are just wrappers around open(), and our
detection of which parameter to pass to drmOpen() is not 100%
reliable.

Simplify the code and just call open() directly.

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=71590

src/plugins/renderers/drm/plugin.c

index a845fffd97d43f5c3d5b2936a379082d5905fd31..945f15e6640e84a9e57f838680795dd93ec83d85 100644 (file)
@@ -399,42 +399,6 @@ destroy_backend (ply_renderer_backend_t *backend)
   free (backend);
 }
 
-static char *
-find_driver_for_device (const char *device_name)
-{
-  char *driver;
-  int major_number, minor_number;
-  struct stat file_attributes;
-  char *device_path;
-  char device_link_path[PATH_MAX + 1] = "";
-
-  if (stat (device_name, &file_attributes) < 0)
-    return NULL;
-
-  if (!S_ISCHR (file_attributes.st_mode))
-    return NULL;
-
-  major_number = major (file_attributes.st_rdev);
-  minor_number = minor (file_attributes.st_rdev);
-
-  asprintf (&device_path, "/sys/dev/char/%d:%d/device/driver",
-            major_number, minor_number);
-
-  if (readlink (device_path, device_link_path, sizeof (device_link_path) - 1) < 0)
-    {
-      free (device_path);
-      return NULL;
-    }
-  free (device_path);
-
-  driver = strrchr (device_link_path, '/');
-
-  if (driver == NULL)
-    return NULL;
-
-  return strdup (driver + strlen ("/"));
-}
-
 static void
 activate (ply_renderer_backend_t *backend)
 {
@@ -495,25 +459,20 @@ on_active_vt_changed (ply_renderer_backend_t *backend)
 static bool
 load_driver (ply_renderer_backend_t *backend)
 {
-  char *driver_name;
   int device_fd;
 
-  driver_name = find_driver_for_device (backend->device_name);
-  ply_trace ("Attempting to load driver '%s'", driver_name);
-  device_fd = drmOpen (driver_name, NULL);
+  ply_trace ("Opening '%s'", backend->device_name);
+  device_fd = open (backend->device_name, O_RDWR);
 
   if (device_fd < 0)
     {
-      ply_trace ("drmOpen failed");
-      free (driver_name);
+      ply_trace ("open failed: %m");
       return false;
     }
 
   backend->driver_interface = ply_renderer_generic_driver_get_interface (device_fd);
   backend->driver_supports_mapping_console = false;
 
-  free (driver_name);
-
   if (backend->driver_interface == NULL)
     {
       close (device_fd);