diff options
Diffstat (limited to 'drivers/gpu/drm/msm/msm_gem.c')
| -rw-r--r-- | drivers/gpu/drm/msm/msm_gem.c | 33 | 
1 files changed, 10 insertions, 23 deletions
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index f583bb4222f9..f59ca27a4a35 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c @@ -219,7 +219,7 @@ int msm_gem_mmap(struct file *filp, struct vm_area_struct *vma)  	return msm_gem_mmap_obj(vma->vm_private_data, vma);  } -int msm_gem_fault(struct vm_fault *vmf) +vm_fault_t msm_gem_fault(struct vm_fault *vmf)  {  	struct vm_area_struct *vma = vmf->vma;  	struct drm_gem_object *obj = vma->vm_private_data; @@ -227,15 +227,18 @@ int msm_gem_fault(struct vm_fault *vmf)  	struct page **pages;  	unsigned long pfn;  	pgoff_t pgoff; -	int ret; +	int err; +	vm_fault_t ret;  	/*  	 * vm_ops.open/drm_gem_mmap_obj and close get and put  	 * a reference on obj. So, we dont need to hold one here.  	 */ -	ret = mutex_lock_interruptible(&msm_obj->lock); -	if (ret) +	err = mutex_lock_interruptible(&msm_obj->lock); +	if (err) { +		ret = VM_FAULT_NOPAGE;  		goto out; +	}  	if (WARN_ON(msm_obj->madv != MSM_MADV_WILLNEED)) {  		mutex_unlock(&msm_obj->lock); @@ -245,7 +248,7 @@ int msm_gem_fault(struct vm_fault *vmf)  	/* make sure we have pages attached now */  	pages = get_pages(obj);  	if (IS_ERR(pages)) { -		ret = PTR_ERR(pages); +		ret = vmf_error(PTR_ERR(pages));  		goto out_unlock;  	} @@ -257,27 +260,11 @@ int msm_gem_fault(struct vm_fault *vmf)  	VERB("Inserting %p pfn %lx, pa %lx", (void *)vmf->address,  			pfn, pfn << PAGE_SHIFT); -	ret = vm_insert_mixed(vma, vmf->address, __pfn_to_pfn_t(pfn, PFN_DEV)); - +	ret = vmf_insert_mixed(vma, vmf->address, __pfn_to_pfn_t(pfn, PFN_DEV));  out_unlock:  	mutex_unlock(&msm_obj->lock);  out: -	switch (ret) { -	case -EAGAIN: -	case 0: -	case -ERESTARTSYS: -	case -EINTR: -	case -EBUSY: -		/* -		 * EBUSY is ok: this just means that another thread -		 * already did the job. -		 */ -		return VM_FAULT_NOPAGE; -	case -ENOMEM: -		return VM_FAULT_OOM; -	default: -		return VM_FAULT_SIGBUS; -	} +	return ret;  }  /** get mmap offset */  |