diff options
Diffstat (limited to 'linux-core/drm_vm.c')
-rw-r--r-- | linux-core/drm_vm.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/linux-core/drm_vm.c b/linux-core/drm_vm.c index 228ea6cd..d4d97a4d 100644 --- a/linux-core/drm_vm.c +++ b/linux-core/drm_vm.c | |||
@@ -715,9 +715,13 @@ static int drm_bo_vm_fault(struct vm_area_struct *vma, | |||
715 | unsigned long ret = VM_FAULT_NOPAGE; | 715 | unsigned long ret = VM_FAULT_NOPAGE; |
716 | 716 | ||
717 | dev = bo->dev; | 717 | dev = bo->dev; |
718 | err = drm_bo_read_lock(&dev->bm.bm_lock, 1); | ||
719 | if (err) | ||
720 | return VM_FAULT_NOPAGE; | ||
718 | 721 | ||
719 | err = mutex_lock_interruptible(&bo->mutex); | 722 | err = mutex_lock_interruptible(&bo->mutex); |
720 | if (err) { | 723 | if (err) { |
724 | drm_bo_read_unlock(&dev->bm.bm_lock); | ||
721 | return VM_FAULT_NOPAGE; | 725 | return VM_FAULT_NOPAGE; |
722 | } | 726 | } |
723 | 727 | ||
@@ -784,6 +788,7 @@ static int drm_bo_vm_fault(struct vm_area_struct *vma, | |||
784 | out_unlock: | 788 | out_unlock: |
785 | BUG_ON(bo->priv_flags & _DRM_BO_FLAG_UNLOCKED); | 789 | BUG_ON(bo->priv_flags & _DRM_BO_FLAG_UNLOCKED); |
786 | mutex_unlock(&bo->mutex); | 790 | mutex_unlock(&bo->mutex); |
791 | drm_bo_read_unlock(&dev->bm.bm_lock); | ||
787 | return ret; | 792 | return ret; |
788 | } | 793 | } |
789 | #endif | 794 | #endif |
@@ -792,10 +797,6 @@ static void drm_bo_vm_open_locked(struct vm_area_struct *vma) | |||
792 | { | 797 | { |
793 | struct drm_buffer_object *bo = (struct drm_buffer_object *) vma->vm_private_data; | 798 | struct drm_buffer_object *bo = (struct drm_buffer_object *) vma->vm_private_data; |
794 | 799 | ||
795 | /* clear the clean flags */ | ||
796 | bo->mem.flags &= ~DRM_BO_FLAG_CLEAN; | ||
797 | bo->mem.proposed_flags &= ~DRM_BO_FLAG_CLEAN; | ||
798 | |||
799 | drm_vm_open_locked(vma); | 800 | drm_vm_open_locked(vma); |
800 | atomic_inc(&bo->usage); | 801 | atomic_inc(&bo->usage); |
801 | #ifdef DRM_ODD_MM_COMPAT | 802 | #ifdef DRM_ODD_MM_COMPAT |