X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fchar%2Fdrm%2Fdrm_bufs.h;h=6fa862372a701cb1bd35a50ef71d094f224413c4;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=a0361c03b68be12a2f5e845f55fc340a4491e3cf;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/drivers/char/drm/drm_bufs.h b/drivers/char/drm/drm_bufs.h index a0361c03b..6fa862372 100644 --- a/drivers/char/drm/drm_bufs.h +++ b/drivers/char/drm/drm_bufs.h @@ -70,9 +70,10 @@ int DRM(order)( unsigned long size ) int order; unsigned long tmp; - for ( order = 0, tmp = size ; tmp >>= 1 ; ++order ); + for (order = 0, tmp = size >> 1; tmp; tmp >>= 1, order++) + ; - if ( size & ~(1 << order) ) + if (size & (size - 1)) ++order; return order; @@ -97,6 +98,7 @@ int DRM(addmap)( struct inode *inode, struct file *filp, drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; drm_map_t *map; + drm_map_t __user *argp = (void __user *)arg; drm_map_list_t *list; if ( !(filp->f_mode & 3) ) return -EACCES; /* Require read/write */ @@ -105,7 +107,7 @@ int DRM(addmap)( struct inode *inode, struct file *filp, if ( !map ) return -ENOMEM; - if ( copy_from_user( map, (drm_map_t *)arg, sizeof(*map) ) ) { + if ( copy_from_user( map, argp, sizeof(*map) ) ) { DRM(free)( map, sizeof(*map), DRM_MEM_MAPS ); return -EFAULT; } @@ -125,7 +127,7 @@ int DRM(addmap)( struct inode *inode, struct file *filp, return -EINVAL; } map->mtrr = -1; - map->handle = 0; + map->handle = NULL; switch ( map->type ) { case _DRM_REGISTERS: @@ -206,10 +208,10 @@ int DRM(addmap)( struct inode *inode, struct file *filp, list_add(&list->head, &dev->maplist->head); up(&dev->struct_sem); - if ( copy_to_user( (drm_map_t *)arg, map, sizeof(*map) ) ) + if ( copy_to_user( argp, map, sizeof(*map) ) ) return -EFAULT; if ( map->type != _DRM_SHM ) { - if ( copy_to_user( &((drm_map_t *)arg)->handle, + if ( copy_to_user( &argp->handle, &map->offset, sizeof(map->offset) ) ) return -EFAULT; @@ -246,7 +248,7 @@ int DRM(rmmap)(struct inode *inode, struct file *filp, drm_map_t request; int found_maps = 0; - if (copy_from_user(&request, (drm_map_t *)arg, + if (copy_from_user(&request, (drm_map_t __user *)arg, sizeof(request))) { return -EFAULT; } @@ -388,10 +390,11 @@ int DRM(addbufs_agp)( struct inode *inode, struct file *filp, int byte_count; int i; drm_buf_t **temp_buflist; + drm_buf_desc_t __user *argp = (void __user *)arg; if ( !dma ) return -EINVAL; - if ( copy_from_user( &request, (drm_buf_desc_t *)arg, + if ( copy_from_user( &request, argp, sizeof(request) ) ) return -EFAULT; @@ -468,7 +471,7 @@ int DRM(addbufs_agp)( struct inode *inode, struct file *filp, buf->waiting = 0; buf->pending = 0; init_waitqueue_head( &buf->dma_wait ); - buf->filp = 0; + buf->filp = NULL; buf->dev_priv_size = sizeof(DRIVER_BUF_PRIV_T); buf->dev_private = DRM(alloc)( sizeof(DRIVER_BUF_PRIV_T), @@ -528,7 +531,7 @@ int DRM(addbufs_agp)( struct inode *inode, struct file *filp, request.count = entry->buf_count; request.size = size; - if ( copy_to_user( (drm_buf_desc_t *)arg, &request, sizeof(request) ) ) + if ( copy_to_user( argp, &request, sizeof(request) ) ) return -EFAULT; dma->flags = _DRM_DMA_USE_AGP; @@ -561,11 +564,11 @@ int DRM(addbufs_pci)( struct inode *inode, struct file *filp, int page_count; unsigned long *temp_pagelist; drm_buf_t **temp_buflist; + drm_buf_desc_t __user *argp = (void __user *)arg; if ( !dma ) return -EINVAL; - if ( copy_from_user( &request, (drm_buf_desc_t *)arg, - sizeof(request) ) ) + if ( copy_from_user( &request, argp, sizeof(request) ) ) return -EFAULT; count = request.count; @@ -692,7 +695,7 @@ int DRM(addbufs_pci)( struct inode *inode, struct file *filp, buf->waiting = 0; buf->pending = 0; init_waitqueue_head( &buf->dma_wait ); - buf->filp = 0; + buf->filp = NULL; buf->dev_priv_size = sizeof(DRIVER_BUF_PRIV_T); buf->dev_private = DRM(alloc)( sizeof(DRIVER_BUF_PRIV_T), @@ -766,7 +769,7 @@ int DRM(addbufs_pci)( struct inode *inode, struct file *filp, request.count = entry->buf_count; request.size = size; - if ( copy_to_user( (drm_buf_desc_t *)arg, &request, sizeof(request) ) ) + if ( copy_to_user( argp, &request, sizeof(request) ) ) return -EFAULT; atomic_dec( &dev->buf_alloc ); @@ -782,6 +785,7 @@ int DRM(addbufs_sg)( struct inode *inode, struct file *filp, drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; drm_device_dma_t *dma = dev->dma; + drm_buf_desc_t __user *argp = (void __user *)arg; drm_buf_desc_t request; drm_buf_entry_t *entry; drm_buf_t *buf; @@ -799,8 +803,7 @@ int DRM(addbufs_sg)( struct inode *inode, struct file *filp, if ( !dma ) return -EINVAL; - if ( copy_from_user( &request, (drm_buf_desc_t *)arg, - sizeof(request) ) ) + if ( copy_from_user( &request, argp, sizeof(request) ) ) return -EFAULT; count = request.count; @@ -876,7 +879,7 @@ int DRM(addbufs_sg)( struct inode *inode, struct file *filp, buf->waiting = 0; buf->pending = 0; init_waitqueue_head( &buf->dma_wait ); - buf->filp = 0; + buf->filp = NULL; buf->dev_priv_size = sizeof(DRIVER_BUF_PRIV_T); buf->dev_private = DRM(alloc)( sizeof(DRIVER_BUF_PRIV_T), @@ -937,7 +940,7 @@ int DRM(addbufs_sg)( struct inode *inode, struct file *filp, request.count = entry->buf_count; request.size = size; - if ( copy_to_user( (drm_buf_desc_t *)arg, &request, sizeof(request) ) ) + if ( copy_to_user( argp, &request, sizeof(request) ) ) return -EFAULT; dma->flags = _DRM_DMA_USE_SG; @@ -966,7 +969,7 @@ int DRM(addbufs)( struct inode *inode, struct file *filp, { drm_buf_desc_t request; - if ( copy_from_user( &request, (drm_buf_desc_t *)arg, + if ( copy_from_user( &request, (drm_buf_desc_t __user *)arg, sizeof(request) ) ) return -EFAULT; @@ -1012,6 +1015,7 @@ int DRM(infobufs)( struct inode *inode, struct file *filp, drm_device_t *dev = priv->dev; drm_device_dma_t *dma = dev->dma; drm_buf_info_t request; + drm_buf_info_t __user *argp = (void __user *)arg; int i; int count; @@ -1025,9 +1029,7 @@ int DRM(infobufs)( struct inode *inode, struct file *filp, ++dev->buf_use; /* Can't allocate more after this call */ spin_unlock( &dev->count_lock ); - if ( copy_from_user( &request, - (drm_buf_info_t *)arg, - sizeof(request) ) ) + if ( copy_from_user( &request, argp, sizeof(request) ) ) return -EFAULT; for ( i = 0, count = 0 ; i < DRM_MAX_ORDER + 1 ; i++ ) { @@ -1039,7 +1041,7 @@ int DRM(infobufs)( struct inode *inode, struct file *filp, if ( request.count >= count ) { for ( i = 0, count = 0 ; i < DRM_MAX_ORDER + 1 ; i++ ) { if ( dma->bufs[i].buf_count ) { - drm_buf_desc_t *to = &request.list[count]; + drm_buf_desc_t __user *to = &request.list[count]; drm_buf_entry_t *from = &dma->bufs[i]; drm_freelist_t *list = &dma->bufs[i].freelist; if ( copy_to_user( &to->count, @@ -1068,9 +1070,7 @@ int DRM(infobufs)( struct inode *inode, struct file *filp, } request.count = count; - if ( copy_to_user( (drm_buf_info_t *)arg, - &request, - sizeof(request) ) ) + if ( copy_to_user( argp, &request, sizeof(request) ) ) return -EFAULT; return 0; @@ -1103,7 +1103,7 @@ int DRM(markbufs)( struct inode *inode, struct file *filp, if ( !dma ) return -EINVAL; if ( copy_from_user( &request, - (drm_buf_desc_t *)arg, + (drm_buf_desc_t __user *)arg, sizeof(request) ) ) return -EFAULT; @@ -1150,7 +1150,7 @@ int DRM(freebufs)( struct inode *inode, struct file *filp, if ( !dma ) return -EINVAL; if ( copy_from_user( &request, - (drm_buf_free_t *)arg, + (drm_buf_free_t __user *)arg, sizeof(request) ) ) return -EFAULT; @@ -1196,6 +1196,7 @@ int DRM(mapbufs)( struct inode *inode, struct file *filp, drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; drm_device_dma_t *dma = dev->dma; + drm_buf_map_t __user *argp = (void __user *)arg; int retcode = 0; const int zero = 0; unsigned long virtual; @@ -1213,8 +1214,7 @@ int DRM(mapbufs)( struct inode *inode, struct file *filp, dev->buf_use++; /* Can't allocate more after this call */ spin_unlock( &dev->count_lock ); - if ( copy_from_user( &request, (drm_buf_map_t *)arg, - sizeof(request) ) ) + if ( copy_from_user( &request, argp, sizeof(request) ) ) return -EFAULT; if ( request.count >= dma->buf_count ) { @@ -1261,7 +1261,7 @@ int DRM(mapbufs)( struct inode *inode, struct file *filp, retcode = (signed long)virtual; goto done; } - request.virtual = (void *)virtual; + request.virtual = (void __user *)virtual; for ( i = 0 ; i < dma->buf_count ; i++ ) { if ( copy_to_user( &request.list[i].idx, @@ -1295,7 +1295,7 @@ int DRM(mapbufs)( struct inode *inode, struct file *filp, request.count = dma->buf_count; DRM_DEBUG( "%d buffers, retcode = %d\n", request.count, retcode ); - if ( copy_to_user( (drm_buf_map_t *)arg, &request, sizeof(request) ) ) + if ( copy_to_user( argp, &request, sizeof(request) ) ) return -EFAULT; return retcode;