mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2025-12-24 20:40:12 +01:00
Drop drm_drawable_list and add drm_drawable_info directly to the idr.
This commit is contained in:
parent
a27af4c4a6
commit
b323ab52aa
2 changed files with 21 additions and 24 deletions
|
|
@ -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"
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue