David Herrmann 08bec5b4ed drm: fix returning -EINVAL on setmaster if another master is active
We link every DRM "file_priv" to a "drm_master" structure. Currently, the
drmSetMaster() call returns 0 when there is _any_ active master associated
with the "drm_master" structure of the calling "file_priv". This means,
that after drmSetMaster() we are not guaranteed to be DRM-Master and might
not be able to perform mode-setting.

A way to reproduce this is by starting weston with the DRM backend from
within an X-console (eg., xterm). Because the xserver's "drm_master" is
currently active, weston is assigned to the same master but is inactive
because its VT is inactive and the xserver is still active. But when
"fake-activating" weston, it calls drmSetMaster(). With current behavior
this returns "0/success" and weston thinks that it is DRM-Master, even
though it is not (as the xserver is still DRM-Master).
Expected behavior would be drmSetMaster() to return -EINVAL, because the
xserver is still DRM-Master. This patch changes exactly that.

The only way this bogus behavior would be useful is for clients to check
whether their associated "drm_master" is currently the active DRM-Master.
But this logic fails if no DRM-Master is currently active at all. Because
then the client itself would become DRM-Master (if it is root) and this
makes this whole thing useles.

Also note that the second "if-condition":
  file_priv->minor->master != file_priv->master
is always true and can be skipped.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
2012-11-20 15:35:05 +10:00
..
2012-10-15 14:45:51 -04:00
2012-10-02 17:26:42 -07:00
2012-10-07 20:55:16 +09:00
2012-09-26 22:28:21 -04:00
2012-10-24 16:58:53 +02:00
2012-10-26 02:20:36 -04:00
2012-10-07 17:29:24 +09:00
2012-10-10 20:15:24 +09:00
2012-11-02 21:58:09 -04:00
2012-10-17 15:53:03 -05:00
2012-10-09 16:11:46 +09:00
2012-10-10 20:15:24 +09:00
2012-10-18 17:50:08 +02:00
2012-10-28 11:13:54 -07:00
2012-10-26 10:25:31 -07:00
2012-11-02 13:26:11 -07:00
2012-10-01 12:09:59 -07:00
2012-11-02 13:26:11 -07:00
2012-10-01 18:46:13 -07:00
2012-10-16 18:07:12 -07:00