diff options
author | Thomas Hellstrom <thomas-at-shipmail-dot-org> | 2009-02-10 20:10:16 +0100 |
---|---|---|
committer | Thomas Hellstrom <thomas-at-shipmail-dot-org> | 2009-02-10 20:11:26 +0100 |
commit | 815856d5de70e941f54b865faa92bd38916880c3 (patch) | |
tree | 6b6389314b4d00a08a578ebffb92c2af9b2ae826 | |
parent | 97302ed5c76f1c1e3688f52ea8b75cdd74f392ff (diff) |
Fix openchrome backwards compat.
-rw-r--r-- | linux-core/openchrome/via_ttm_glue.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/linux-core/openchrome/via_ttm_glue.c b/linux-core/openchrome/via_ttm_glue.c index c0e6a43db..82dc8dd85 100644 --- a/linux-core/openchrome/via_ttm_glue.c +++ b/linux-core/openchrome/via_ttm_glue.c @@ -103,6 +103,7 @@ int via_pl_create_ioctl(struct drm_device *dev, void *data, * situations. */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)) static int via_ttm_fault(struct vm_area_struct *vma, struct vm_fault *vmf) { struct ttm_buffer_object *bo = (struct ttm_buffer_object *) @@ -122,6 +123,28 @@ static int via_ttm_fault(struct vm_area_struct *vma, struct vm_fault *vmf) return ret; } +#else + +static unsigned long via_ttm_nopfn(struct vm_area_struct *vma, unsigned long address) +{ + struct ttm_buffer_object *bo = (struct ttm_buffer_object *) + vma->vm_private_data; + struct drm_via_private *dev_priv = + container_of(bo->bdev, struct drm_via_private, bdev); + int ret; + + ret = ttm_read_lock(&dev_priv->ttm_lock, true); + if (unlikely(ret != 0)) + return NOPFN_REFAULT; + + ret = ttm_vm_ops->nopfn(vma, address); + + ttm_read_unlock(&dev_priv->ttm_lock); + + return ret; +} +#endif + int via_mmap(struct file *filp, struct vm_area_struct *vma) { struct drm_file *file_priv; @@ -141,7 +164,11 @@ int via_mmap(struct file *filp, struct vm_area_struct *vma) if (unlikely(ttm_vm_ops == NULL)) { ttm_vm_ops = vma->vm_ops; via_ttm_vm_ops = *ttm_vm_ops; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)) via_ttm_vm_ops.fault = &via_ttm_fault; +#else + via_ttm_vm_ops.nopfn = &via_ttm_nopfn; +#endif } vma->vm_ops = &via_ttm_vm_ops; |