VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / drivers / char / drm / drm_bufs.h
index a0361c0..6fa8623 100644 (file)
@@ -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;