diff options
Diffstat (limited to 'drivers/gpu/drm/msm/msm_gem.c')
| -rw-r--r-- | drivers/gpu/drm/msm/msm_gem.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index 6cd4af443139..85f3047e05ae 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c | |||
| @@ -196,11 +196,20 @@ int msm_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
| 196 | { | 196 | { |
| 197 | struct drm_gem_object *obj = vma->vm_private_data; | 197 | struct drm_gem_object *obj = vma->vm_private_data; |
| 198 | struct drm_device *dev = obj->dev; | 198 | struct drm_device *dev = obj->dev; |
| 199 | struct msm_drm_private *priv = dev->dev_private; | ||
| 199 | struct page **pages; | 200 | struct page **pages; |
| 200 | unsigned long pfn; | 201 | unsigned long pfn; |
| 201 | pgoff_t pgoff; | 202 | pgoff_t pgoff; |
| 202 | int ret; | 203 | int ret; |
| 203 | 204 | ||
| 205 | /* This should only happen if userspace tries to pass a mmap'd | ||
| 206 | * but unfaulted gem bo vaddr into submit ioctl, triggering | ||
| 207 | * a page fault while struct_mutex is already held. This is | ||
| 208 | * not a valid use-case so just bail. | ||
| 209 | */ | ||
| 210 | if (priv->struct_mutex_task == current) | ||
| 211 | return VM_FAULT_SIGBUS; | ||
| 212 | |||
| 204 | /* Make sure we don't parallel update on a fault, nor move or remove | 213 | /* Make sure we don't parallel update on a fault, nor move or remove |
| 205 | * something from beneath our feet | 214 | * something from beneath our feet |
| 206 | */ | 215 | */ |
