X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fchar%2Fdrm%2Fi830_dma.c;h=856dc81f8d8f9b3239594bf29e85af3a3698e418;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=86c4e4204f4ce4bd15784ce4e105dcce88842815;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/drivers/char/drm/i830_dma.c b/drivers/char/drm/i830_dma.c index 86c4e4204..856dc81f8 100644 --- a/drivers/char/drm/i830_dma.c +++ b/drivers/char/drm/i830_dma.c @@ -153,6 +153,7 @@ static int i830_map_buffer(drm_buf_t *buf, struct file *filp) drm_i830_buf_priv_t *buf_priv = buf->dev_private; drm_i830_private_t *dev_priv = dev->dev_private; struct file_operations *old_fops; + unsigned long virtual; int retcode = 0; if(buf_priv->currently_mapped == I830_BUF_MAPPED) return -EINVAL; @@ -161,17 +162,17 @@ static int i830_map_buffer(drm_buf_t *buf, struct file *filp) old_fops = filp->f_op; filp->f_op = &i830_buffer_fops; dev_priv->mmap_buffer = buf; - buf_priv->virtual = (void __user *)do_mmap(filp, 0, buf->total, - PROT_READ|PROT_WRITE, - MAP_SHARED, - buf->bus_address); + virtual = do_mmap(filp, 0, buf->total, PROT_READ|PROT_WRITE, + MAP_SHARED, buf->bus_address); dev_priv->mmap_buffer = NULL; filp->f_op = old_fops; - if (IS_ERR(buf_priv->virtual)) { + if (IS_ERR((void *)virtual)) { /* ugh */ /* Real error */ DRM_ERROR("mmap error\n"); - retcode = PTR_ERR(buf_priv->virtual); - buf_priv->virtual = 0; + retcode = virtual; + buf_priv->virtual = NULL; + } else { + buf_priv->virtual = (void __user *)virtual; } up_write( ¤t->mm->mmap_sem ); @@ -193,7 +194,7 @@ static int i830_unmap_buffer(drm_buf_t *buf) up_write(¤t->mm->mmap_sem); buf_priv->currently_mapped = I830_BUF_UNMAPPED; - buf_priv->virtual = 0; + buf_priv->virtual = NULL; return retcode; } @@ -463,7 +464,7 @@ static int i830_dma_initialize(drm_device_t *dev, } int i830_dma_init(struct inode *inode, struct file *filp, - unsigned int cmd, unsigned long __user arg) + unsigned int cmd, unsigned long arg) { drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; @@ -1165,7 +1166,7 @@ static void i830_dma_dispatch_vertex(drm_device_t *dev, DRM_DEBUG( "start + used - 4 : %ld\n", start + used - 4); if (buf_priv->currently_mapped == I830_BUF_MAPPED) { - u32 *vp = buf_priv->virtual; + u32 __user *vp = buf_priv->virtual; put_user( (GFX_OP_PRIMITIVE | sarea_priv->vertex_prim | @@ -1315,7 +1316,7 @@ void i830_reclaim_buffers( struct file *filp ) } int i830_flush_ioctl(struct inode *inode, struct file *filp, - unsigned int cmd, unsigned long __user arg) + unsigned int cmd, unsigned long arg) { drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; @@ -1330,7 +1331,7 @@ int i830_flush_ioctl(struct inode *inode, struct file *filp, } int i830_dma_vertex(struct inode *inode, struct file *filp, - unsigned int cmd, unsigned long __user arg) + unsigned int cmd, unsigned long arg) { drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; @@ -1365,7 +1366,7 @@ int i830_dma_vertex(struct inode *inode, struct file *filp, } int i830_clear_bufs(struct inode *inode, struct file *filp, - unsigned int cmd, unsigned long __user arg) + unsigned int cmd, unsigned long arg) { drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; @@ -1392,7 +1393,7 @@ int i830_clear_bufs(struct inode *inode, struct file *filp, } int i830_swap_bufs(struct inode *inode, struct file *filp, - unsigned int cmd, unsigned long __user arg) + unsigned int cmd, unsigned long arg) { drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; @@ -1435,7 +1436,7 @@ int i830_do_cleanup_pageflip( drm_device_t *dev ) } int i830_flip_bufs(struct inode *inode, struct file *filp, - unsigned int cmd, unsigned long __user arg) + unsigned int cmd, unsigned long arg) { drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; @@ -1456,7 +1457,7 @@ int i830_flip_bufs(struct inode *inode, struct file *filp, } int i830_getage(struct inode *inode, struct file *filp, unsigned int cmd, - unsigned long __user arg) + unsigned long arg) { drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; @@ -1470,7 +1471,7 @@ int i830_getage(struct inode *inode, struct file *filp, unsigned int cmd, } int i830_getbuf(struct inode *inode, struct file *filp, unsigned int cmd, - unsigned long __user arg) + unsigned long arg) { drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; @@ -1507,7 +1508,7 @@ int i830_getbuf(struct inode *inode, struct file *filp, unsigned int cmd, int i830_copybuf(struct inode *inode, struct file *filp, unsigned int cmd, - unsigned long __user arg) + unsigned long arg) { /* Never copy - 2.4.x doesn't need it */ return 0; @@ -1522,7 +1523,7 @@ int i830_docopy(struct inode *inode, struct file *filp, unsigned int cmd, int i830_getparam( struct inode *inode, struct file *filp, unsigned int cmd, - unsigned long __user arg ) + unsigned long arg ) { drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; @@ -1556,7 +1557,7 @@ int i830_getparam( struct inode *inode, struct file *filp, unsigned int cmd, int i830_setparam( struct inode *inode, struct file *filp, unsigned int cmd, - unsigned long __user arg ) + unsigned long arg ) { drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev;