diff options
author | Dave Airlie <airlied@linux.ie> | 2005-01-01 12:07:51 +0000 |
---|---|---|
committer | Dave Airlie <airlied@linux.ie> | 2005-01-01 12:07:51 +0000 |
commit | fe4ade81bb7a1242b18b84e012c1a293eea0420b (patch) | |
tree | ab155f82d7bd2342154ce8c570aa6851d7c6ca34 /linux-core/i830_dma.c | |
parent | e19fa7ada122a68d6bedf3d678e96545ed41a39f (diff) |
i810/i830 bug with Jon's file operations changes
Diffstat (limited to 'linux-core/i830_dma.c')
-rw-r--r-- | linux-core/i830_dma.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/linux-core/i830_dma.c b/linux-core/i830_dma.c index 1ff1b5a2..454d82a3 100644 --- a/linux-core/i830_dma.c +++ b/linux-core/i830_dma.c @@ -111,7 +111,8 @@ static int i830_freelist_put(drm_device_t * dev, drm_buf_t * buf) return 0; } -int i830_mmap_buffers(struct file *filp, struct vm_area_struct *vma) + +static int i830_mmap_buffers(struct file *filp, struct vm_area_struct *vma) { drm_file_t *priv = filp->private_data; drm_device_t *dev; @@ -139,12 +140,21 @@ int i830_mmap_buffers(struct file *filp, struct vm_area_struct *vma) return 0; } +static struct file_operations i830_buffer_fops = { + .open = drm_open, + .release = drm_release, + .ioctl = drm_ioctl, + .mmap = i830_mmap_buffers, + .fasync = drm_fasync, +}; + static int i830_map_buffer(drm_buf_t * buf, struct file *filp) { drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->head->dev; 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; @@ -152,11 +162,13 @@ static int i830_map_buffer(drm_buf_t * buf, struct file *filp) return -EINVAL; down_write(¤t->mm->mmap_sem); + old_fops = filp->f_op; + filp->f_op = &i830_buffer_fops; dev_priv->mmap_buffer = buf; 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((void *)virtual)) { /* ugh */ /* Real error */ DRM_ERROR("mmap error\n"); |