diff options
author | David Dawes <dawes@xfree86.org> | 2003-04-17 18:41:28 +0000 |
---|---|---|
committer | David Dawes <dawes@xfree86.org> | 2003-04-17 18:41:28 +0000 |
commit | c2d7ff1bf98f92add98fb76b63d2bdb190f3cf2c (patch) | |
tree | 6afaad9978c0a555d27a441bd982eddbe197858d /linux/drm_agpsupport.h | |
parent | d1b7f551e6d582cd9c44d23883de1f6121907627 (diff) |
Bring some drm module changes over from the XFree86 trunk:
- Reset 'bound' flag for an agp entry after undbind succeeded in
drm_agpsupport.h (Egbert Eich).
- Ignore hw_lock for drm device if lock was set by a different instance (ie
Xserver) to prevent second server from spinning in driver release
function (currently only relevant for i8xx drm drivers) (David Dawes).
- Use the agpgart "key" for the unique handle for bindings rather than the
memory address (the key is guaranteed to be unique) (David Dawes).
Diffstat (limited to 'linux/drm_agpsupport.h')
-rw-r--r-- | linux/drm_agpsupport.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/linux/drm_agpsupport.h b/linux/drm_agpsupport.h index 35dd866f..22790900 100644 --- a/linux/drm_agpsupport.h +++ b/linux/drm_agpsupport.h @@ -147,7 +147,7 @@ int DRM(agp_alloc)(struct inode *inode, struct file *filp, return -ENOMEM; } - entry->handle = (unsigned long)memory->memory; + entry->handle = (unsigned long)memory->key; entry->memory = memory; entry->bound = 0; entry->pages = pages; @@ -187,6 +187,7 @@ int DRM(agp_unbind)(struct inode *inode, struct file *filp, drm_device_t *dev = priv->dev; drm_agp_binding_t request; drm_agp_mem_t *entry; + int ret; if (!dev->agp || !dev->agp->acquired) return -EINVAL; if (copy_from_user(&request, (drm_agp_binding_t *)arg, sizeof(request))) @@ -194,7 +195,10 @@ int DRM(agp_unbind)(struct inode *inode, struct file *filp, if (!(entry = DRM(agp_lookup_entry)(dev, request.handle))) return -EINVAL; if (!entry->bound) return -EINVAL; - return DRM(unbind_agp)(entry->memory); + ret = DRM(unbind_agp)(entry->memory); + if (ret == 0) + entry->bound = 0; + return ret; } int DRM(agp_bind)(struct inode *inode, struct file *filp, |