diff options
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 216f52b744a6..c882ea94172c 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
| @@ -1824,6 +1824,16 @@ i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data, | |||
| 1824 | return 0; | 1824 | return 0; |
| 1825 | } | 1825 | } |
| 1826 | 1826 | ||
| 1827 | static inline bool | ||
| 1828 | __vma_matches(struct vm_area_struct *vma, struct file *filp, | ||
| 1829 | unsigned long addr, unsigned long size) | ||
| 1830 | { | ||
| 1831 | if (vma->vm_file != filp) | ||
| 1832 | return false; | ||
| 1833 | |||
| 1834 | return vma->vm_start == addr && (vma->vm_end - vma->vm_start) == size; | ||
| 1835 | } | ||
| 1836 | |||
| 1827 | /** | 1837 | /** |
| 1828 | * i915_gem_mmap_ioctl - Maps the contents of an object, returning the address | 1838 | * i915_gem_mmap_ioctl - Maps the contents of an object, returning the address |
| 1829 | * it is mapped to. | 1839 | * it is mapped to. |
| @@ -1882,7 +1892,7 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data, | |||
| 1882 | return -EINTR; | 1892 | return -EINTR; |
| 1883 | } | 1893 | } |
| 1884 | vma = find_vma(mm, addr); | 1894 | vma = find_vma(mm, addr); |
| 1885 | if (vma) | 1895 | if (vma && __vma_matches(vma, obj->base.filp, addr, args->size)) |
| 1886 | vma->vm_page_prot = | 1896 | vma->vm_page_prot = |
| 1887 | pgprot_writecombine(vm_get_page_prot(vma->vm_flags)); | 1897 | pgprot_writecombine(vm_get_page_prot(vma->vm_flags)); |
| 1888 | else | 1898 | else |
