Drop drm_drawable_list and add drm_drawable_info directly to the idr.
authorKristian Høgsberg <krh@redhat.com>
Thu, 28 Jun 2007 18:45:26 +0000 (14:45 -0400)
committerKristian Høgsberg <krh@redhat.com>
Mon, 2 Jul 2007 19:07:02 +0000 (15:07 -0400)
linux-core/drmP.h
linux-core/drm_drawable.c

index dd3a69d..7bcd095 100644 (file)
@@ -598,10 +598,6 @@ typedef struct ati_pcigart_info {
        int table_size;
 } drm_ati_pcigart_info;
 
-struct drm_drawable_list {
-       drm_drawable_info_t info;
-};
-
 #include "drm_objects.h"
 
 /**
index eb44a18..74f0bb5 100644 (file)
@@ -44,19 +44,19 @@ int drm_adddraw(DRM_IOCTL_ARGS)
 {
        DRM_DEVICE;
        unsigned long irqflags;
-       struct drm_drawable_list *draw_info;
+       struct drm_drawable_info *draw_info;
        drm_draw_t draw;
        int new_id = 0;
        int ret;
 
-       draw_info = drm_calloc(1, sizeof(struct drm_drawable_list), DRM_MEM_BUFS);
+       draw_info = drm_calloc(1, sizeof(*draw_info), DRM_MEM_BUFS);
        if (!draw_info)
                return -ENOMEM;
 
 again:
        if (idr_pre_get(&dev->drw_idr, GFP_KERNEL) == 0) {
                DRM_ERROR("Out of memory expanding drawable idr\n");
-               drm_free(draw_info, sizeof(struct drm_drawable_list), DRM_MEM_BUFS);
+               drm_free(draw_info, sizeof(struct drm_drawable_info), DRM_MEM_BUFS);
                return -ENOMEM;
        }
 
@@ -86,7 +86,7 @@ int drm_rmdraw(DRM_IOCTL_ARGS)
        DRM_DEVICE;
        drm_draw_t draw;
        unsigned long irqflags;
-       struct drm_drawable_list *draw_info;
+       struct drm_drawable_info *draw_info;
 
        DRM_COPY_FROM_USER_IOCTL(draw, (drm_draw_t __user *) data,
                                 sizeof(draw));
@@ -100,33 +100,31 @@ int drm_rmdraw(DRM_IOCTL_ARGS)
        spin_lock_irqsave(&dev->drw_lock, irqflags);
 
        idr_remove(&dev->drw_idr, draw.handle);
-       drm_free(draw_info, sizeof(struct drm_drawable_list), DRM_MEM_BUFS);
+       drm_free(draw_info, sizeof(struct drm_drawable_info), DRM_MEM_BUFS);
 
        spin_unlock_irqrestore(&dev->drw_lock, irqflags);
        DRM_DEBUG("%d\n", draw.handle);
        return 0;
 }
 
-int drm_update_drawable_info(DRM_IOCTL_ARGS) {
+int drm_update_drawable_info(DRM_IOCTL_ARGS)
+{
        DRM_DEVICE;
        drm_update_draw_t update;
        unsigned long irqflags;
-       drm_drawable_info_t *info;
        drm_clip_rect_t *rects;
-       struct drm_drawable_list *draw_info;
+       struct drm_drawable_info *info;
        int err;
 
        DRM_COPY_FROM_USER_IOCTL(update, (drm_update_draw_t __user *) data,
                                 sizeof(update));
 
-       draw_info = idr_find(&dev->drw_idr, update.handle);
-       if (!draw_info) {
+       info = idr_find(&dev->drw_idr, update.handle);
+       if (!info) {
                DRM_ERROR("No such drawable %d\n", update.handle);
                return DRM_ERR(EINVAL);
        }
 
-       info = &draw_info->info;
-
        switch (update.type) {
        case DRM_DRAWABLE_CLIPRECTS:
                if (update.num != info->num_rects) {
@@ -184,24 +182,27 @@ error:
 /**
  * Caller must hold the drawable spinlock!
  */
-drm_drawable_info_t *drm_get_drawable_info(drm_device_t *dev, drm_drawable_t id) {
-       struct drm_drawable_list *draw_info;
-       draw_info = idr_find(&dev->drw_idr, id);
-       if (!draw_info) {
+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;
        }
 
-       return &draw_info->info;
+       return info;
 }
 EXPORT_SYMBOL(drm_get_drawable_info);
 
 static int drm_drawable_free(int idr, void *p, void *data)
 {
-       struct drm_drawable_list *drw_entry = p;
-       drm_free(drw_entry->info.rects, drw_entry->info.num_rects *
+       struct drm_drawable_info *info = p;
+
+       drm_free(info->rects, info->num_rects *
                 sizeof(drm_clip_rect_t), DRM_MEM_BUFS);
-       drm_free(drw_entry, sizeof(struct drm_drawable_list), DRM_MEM_BUFS);
+       drm_free(info, sizeof(struct drm_drawable_info), DRM_MEM_BUFS);
        return 0;
 }