drm: don't set the signal blocker on the master process.
authorDave Airlie <airlied@redhat.com>
Fri, 25 Jul 2008 03:30:08 +0000 (13:30 +1000)
committerDave Airlie <airlied@linux.ie>
Fri, 25 Jul 2008 22:46:09 +0000 (08:46 +1000)
this lets us debug the X server through xkb startup.

Not sure what the correct answer is, probably X needs to drop
the lock when execing stuff, with input hotplug it can get
xkb stuff at any time I believe.

linux-core/drm_lock.c

index 6bbf144..6e90e97 100644 (file)
@@ -107,14 +107,19 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv)
                  ret ? "interrupted" : "has lock");
        if (ret) return ret;
 
-       sigemptyset(&dev->sigmask);
-       sigaddset(&dev->sigmask, SIGSTOP);
-       sigaddset(&dev->sigmask, SIGTSTP);
-       sigaddset(&dev->sigmask, SIGTTIN);
-       sigaddset(&dev->sigmask, SIGTTOU);
-       dev->sigdata.context = lock->context;
-       dev->sigdata.lock = master->lock.hw_lock;
-       block_all_signals(drm_notifier, &dev->sigdata, &dev->sigmask);
+       /* don't set the block all signals on the master process for now 
+        * really probably not the correct answer but lets us debug xkb
+        * xserver for now */
+       if (!file_priv->is_master) {
+               sigemptyset(&dev->sigmask);
+               sigaddset(&dev->sigmask, SIGSTOP);
+               sigaddset(&dev->sigmask, SIGTSTP);
+               sigaddset(&dev->sigmask, SIGTTIN);
+               sigaddset(&dev->sigmask, SIGTTOU);
+               dev->sigdata.context = lock->context;
+               dev->sigdata.lock = master->lock.hw_lock;
+               block_all_signals(drm_notifier, &dev->sigdata, &dev->sigmask);
+       }
 
        if (dev->driver->dma_ready && (lock->flags & _DRM_LOCK_READY))
                dev->driver->dma_ready(dev);