aboutsummaryrefslogtreecommitdiff
path: root/linux-core/drm_drawable.c
diff options
context:
space:
mode:
authorMichel Dänzer <michel@tungstengraphics.com>2007-07-03 12:15:15 +0200
committerMichel Dänzer <michel@tungstengraphics.com>2007-07-03 12:15:15 +0200
commitea832a8e555c9e1f90830b55cbd970d0eca0e2cf (patch)
tree81f7c190fc52c76bc6411f6a41ad61e916cde47c /linux-core/drm_drawable.c
parent8d96ba9805316b29e948d7594344feebb17042f7 (diff)
Simplification for previous commit.
Dave Airlie pointed out on IRC that idr_replace lets us know if the ID hasn't been allocated, so we don't need a special pointer value for allocated IDs that don't have valid information yet.
Diffstat (limited to 'linux-core/drm_drawable.c')
-rw-r--r--linux-core/drm_drawable.c34
1 files changed, 9 insertions, 25 deletions
diff --git a/linux-core/drm_drawable.c b/linux-core/drm_drawable.c
index 7657e954..57b62ca4 100644
--- a/linux-core/drm_drawable.c
+++ b/linux-core/drm_drawable.c
@@ -37,8 +37,6 @@
#include "drmP.h"
-#define NO_DRW_INFO (void*)1
-
/**
* Allocate drawable ID and memory to store information about it.
*/
@@ -57,7 +55,7 @@ again:
}
spin_lock_irqsave(&dev->drw_lock, irqflags);
- ret = idr_get_new_above(&dev->drw_idr, NO_DRW_INFO, 1, &new_id);
+ ret = idr_get_new_above(&dev->drw_idr, NULL, 1, &new_id);
if (ret == -EAGAIN) {
spin_unlock_irqrestore(&dev->drw_lock, irqflags);
goto again;
@@ -112,15 +110,15 @@ int drm_update_drawable_info(DRM_IOCTL_ARGS)
info = idr_find(&dev->drw_idr, update.handle);
if (!info) {
- DRM_ERROR("No such drawable %d\n", update.handle);
- return DRM_ERR(EINVAL);
- }
-
- if (info == NO_DRW_INFO) {
info = drm_calloc(1, sizeof(*info), DRM_MEM_BUFS);
if (!info)
return -ENOMEM;
- idr_replace(&dev->drw_idr, info, update.handle);
+ if (idr_replace(&dev->drw_idr, info, update.handle) ==
+ (void*)-ENOENT) {
+ DRM_ERROR("No such drawable %d\n", update.handle);
+ drm_free(info, sizeof(*info), DRM_MEM_BUFS);
+ return -EINVAL;
+ }
}
switch (update.type) {
@@ -182,21 +180,7 @@ error:
*/
drm_drawable_info_t *drm_get_drawable_info(drm_device_t *dev, drm_drawable_t id)
{
- struct drm_drawable_info *info;
-
- info = idr_find(&dev->drw_idr, id);
-
- if (!info) {
- DRM_DEBUG("No such drawable %d\n", id);
- return NULL;
- }
-
- if (info == NO_DRW_INFO) {
- DRM_DEBUG("No information for drawable %d\n", id);
- return NULL;
- }
-
- return info;
+ return idr_find(&dev->drw_idr, id);
}
EXPORT_SYMBOL(drm_get_drawable_info);
@@ -204,7 +188,7 @@ static int drm_drawable_free(int idr, void *p, void *data)
{
struct drm_drawable_info *info = p;
- if (info != NO_DRW_INFO) {
+ if (info) {
drm_free(info->rects, info->num_rects *
sizeof(drm_clip_rect_t), DRM_MEM_BUFS);
drm_free(info, sizeof(*info), DRM_MEM_BUFS);