Commit b6ad4641 authored by Dave Airlie's avatar Dave Airlie

From Eric Anholt:

Return EBUSY when attempting to addmap a DRM_SHM area with a lock in it if
dev->lock.hw_lock is already set. This fixes the case of two X Servers running
on the same head on different VTs with interface 1.1, by making the 2nd head
fail to inizialize like before.
parent c25f5e81
...@@ -160,6 +160,12 @@ int DRM(addmap)( struct inode *inode, struct file *filp, ...@@ -160,6 +160,12 @@ int DRM(addmap)( struct inode *inode, struct file *filp,
} }
map->offset = (unsigned long)map->handle; map->offset = (unsigned long)map->handle;
if ( map->flags & _DRM_CONTAINS_LOCK ) { if ( map->flags & _DRM_CONTAINS_LOCK ) {
/* Prevent a 2nd X Server from creating a 2nd lock */
if (dev->lock.hw_lock != NULL) {
vfree( map->handle );
DRM(free)( map, sizeof(*map), DRM_MEM_MAPS );
return -EBUSY;
}
dev->sigdata.lock = dev->sigdata.lock =
dev->lock.hw_lock = map->handle; /* Pointer to lock */ dev->lock.hw_lock = map->handle; /* Pointer to lock */
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment