drm_lock.c (145132) | drm_lock.c (152909) |
---|---|
1/* lock.c -- IOCTLs for locking -*- linux-c -*- 2 * Created: Tue Feb 2 08:37:54 1999 by faith@valinux.com 3 */ 4/*- 5 * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. 6 * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. 7 * All Rights Reserved. 8 * --- 15 unchanged lines hidden (view full) --- 24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 * OTHER DEALINGS IN THE SOFTWARE. 27 * 28 * Authors: 29 * Rickard E. (Rik) Faith <faith@valinux.com> 30 * Gareth Hughes <gareth@valinux.com> 31 * | 1/* lock.c -- IOCTLs for locking -*- linux-c -*- 2 * Created: Tue Feb 2 08:37:54 1999 by faith@valinux.com 3 */ 4/*- 5 * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. 6 * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. 7 * All Rights Reserved. 8 * --- 15 unchanged lines hidden (view full) --- 24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 * OTHER DEALINGS IN THE SOFTWARE. 27 * 28 * Authors: 29 * Rickard E. (Rik) Faith <faith@valinux.com> 30 * Gareth Hughes <gareth@valinux.com> 31 * |
32 * $FreeBSD: head/sys/dev/drm/drm_lock.c 145132 2005-04-16 03:44:47Z anholt $ | |
33 */ 34 | 32 */ 33 |
34#include <sys/cdefs.h> 35__FBSDID("$FreeBSD: head/sys/dev/drm/drm_lock.c 152909 2005-11-28 23:13:57Z anholt $"); 36 |
|
35#include "dev/drm/drmP.h" 36 37int drm_lock_take(__volatile__ unsigned int *lock, unsigned int context) 38{ 39 unsigned int old, new; 40 41 do { 42 old = *lock; --- 65 unchanged lines hidden (view full) --- 108 DRM_ERROR("Process %d using kernel context %d\n", 109 DRM_CURRENTPID, lock.context); 110 return EINVAL; 111 } 112 113 DRM_DEBUG("%d (pid %d) requests lock (0x%08x), flags = 0x%08x\n", 114 lock.context, DRM_CURRENTPID, dev->lock.hw_lock->lock, lock.flags); 115 | 37#include "dev/drm/drmP.h" 38 39int drm_lock_take(__volatile__ unsigned int *lock, unsigned int context) 40{ 41 unsigned int old, new; 42 43 do { 44 old = *lock; --- 65 unchanged lines hidden (view full) --- 110 DRM_ERROR("Process %d using kernel context %d\n", 111 DRM_CURRENTPID, lock.context); 112 return EINVAL; 113 } 114 115 DRM_DEBUG("%d (pid %d) requests lock (0x%08x), flags = 0x%08x\n", 116 lock.context, DRM_CURRENTPID, dev->lock.hw_lock->lock, lock.flags); 117 |
116 if (dev->use_dma_queue && lock.context < 0) | 118 if (dev->driver.use_dma_queue && lock.context < 0) |
117 return EINVAL; 118 119 DRM_LOCK(); 120 for (;;) { 121 if (drm_lock_take(&dev->lock.hw_lock->lock, lock.context)) { 122 dev->lock.filp = (void *)(uintptr_t)DRM_CURRENTPID; 123 dev->lock.lock_time = jiffies; 124 atomic_inc(&dev->counts[_DRM_STAT_LOCKS]); --- 14 unchanged lines hidden (view full) --- 139 DRM_UNLOCK(); 140 DRM_DEBUG("%d %s\n", lock.context, ret ? "interrupted" : "has lock"); 141 142 if (ret != 0) 143 return ret; 144 145 /* XXX: Add signal blocking here */ 146 | 119 return EINVAL; 120 121 DRM_LOCK(); 122 for (;;) { 123 if (drm_lock_take(&dev->lock.hw_lock->lock, lock.context)) { 124 dev->lock.filp = (void *)(uintptr_t)DRM_CURRENTPID; 125 dev->lock.lock_time = jiffies; 126 atomic_inc(&dev->counts[_DRM_STAT_LOCKS]); --- 14 unchanged lines hidden (view full) --- 141 DRM_UNLOCK(); 142 DRM_DEBUG("%d %s\n", lock.context, ret ? "interrupted" : "has lock"); 143 144 if (ret != 0) 145 return ret; 146 147 /* XXX: Add signal blocking here */ 148 |
147 if (dev->dma_quiescent != NULL && (lock.flags & _DRM_LOCK_QUIESCENT)) 148 dev->dma_quiescent(dev); | 149 if (dev->driver.dma_quiescent != NULL && 150 (lock.flags & _DRM_LOCK_QUIESCENT)) 151 dev->driver.dma_quiescent(dev); |
149 150 return 0; 151} 152 153int drm_unlock(DRM_IOCTL_ARGS) 154{ 155 DRM_DEVICE; 156 drm_lock_t lock; --- 21 unchanged lines hidden --- | 152 153 return 0; 154} 155 156int drm_unlock(DRM_IOCTL_ARGS) 157{ 158 DRM_DEVICE; 159 drm_lock_t lock; --- 21 unchanged lines hidden --- |