400165
From 167e74e56df055f419c960657eb66d73802a54f1 Mon Sep 17 00:00:00 2001
400165
From: Ray Strode <rstrode@redhat.com>
400165
Date: Mon, 20 Jun 2016 11:06:49 -0400
400165
Subject: [PATCH] drm: don't pick up drm master implicitly
400165
400165
If a client opens the drm device, they're given drm master
400165
implicitly. We already explicitly take DRM master when we need it,
400165
so that featuer is unneeded.
400165
400165
Furthermore, it's actively harmful, since fbdev won't let you change
400165
the color palette of the terminal if drm master is held.
400165
400165
This commit makes sure to drop master as soon as we get it from
400165
open().
400165
---
400165
 src/plugins/renderers/drm/plugin.c | 2 ++
400165
 1 file changed, 2 insertions(+)
400165
400165
diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c
400165
index 6677279..ebfe864 100644
400165
--- a/src/plugins/renderers/drm/plugin.c
400165
+++ b/src/plugins/renderers/drm/plugin.c
400165
@@ -462,60 +462,62 @@ load_driver (ply_renderer_backend_t *backend)
400165
   int device_fd;
400165
 
400165
   ply_trace ("Opening '%s'", backend->device_name);
400165
   device_fd = open (backend->device_name, O_RDWR);
400165
 
400165
   if (device_fd < 0)
400165
     {
400165
       ply_trace ("open failed: %m");
400165
       return false;
400165
     }
400165
 
400165
   backend->driver_interface = ply_renderer_generic_driver_get_interface (device_fd);
400165
   backend->driver_supports_mapping_console = false;
400165
 
400165
   if (backend->driver_interface == NULL)
400165
     {
400165
       close (device_fd);
400165
       return false;
400165
     }
400165
 
400165
   backend->driver = backend->driver_interface->create_driver (device_fd);
400165
 
400165
   if (backend->driver == NULL)
400165
     {
400165
       close (device_fd);
400165
       return false;
400165
     }
400165
 
400165
   backend->device_fd = device_fd;
400165
 
400165
+  drmDropMaster (device_fd);
400165
+
400165
   return true;
400165
 }
400165
 
400165
 static void
400165
 unload_driver (ply_renderer_backend_t *backend)
400165
 {
400165
   if (backend->driver == NULL)
400165
     return;
400165
 
400165
   ply_trace ("unloading driver");
400165
   assert (backend->driver_interface != NULL);
400165
 
400165
   backend->driver_interface->destroy_driver (backend->driver);
400165
   backend->driver = NULL;
400165
 
400165
   backend->driver_interface = NULL;
400165
 
400165
   if (backend->device_fd >= 0)
400165
     {
400165
       drmClose (backend->device_fd);
400165
       backend->device_fd = -1;
400165
     }
400165
 }
400165
 
400165
 static bool
400165
 open_device (ply_renderer_backend_t *backend)
400165
 {
400165
   assert (backend != NULL);
400165
   assert (backend->device_name != NULL);
400165
 
400165
-- 
400165
2.7.4
400165