diff options
Diffstat (limited to 'drivers/infiniband/hw/mlx4/mr.c')
| -rw-r--r-- | drivers/infiniband/hw/mlx4/mr.c | 7 | 
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/mlx4/mr.c b/drivers/infiniband/hw/mlx4/mr.c index 753479285ce9..6ae503cfc526 100644 --- a/drivers/infiniband/hw/mlx4/mr.c +++ b/drivers/infiniband/hw/mlx4/mr.c @@ -377,6 +377,7 @@ static struct ib_umem *mlx4_get_umem_mr(struct ib_udata *udata, u64 start,  	 * again  	 */  	if (!ib_access_writable(access_flags)) { +		unsigned long untagged_start = untagged_addr(start);  		struct vm_area_struct *vma;  		down_read(¤t->mm->mmap_sem); @@ -385,9 +386,9 @@ static struct ib_umem *mlx4_get_umem_mr(struct ib_udata *udata, u64 start,  		 * cover the memory, but for now it requires a single vma to  		 * entirely cover the MR to support RO mappings.  		 */ -		vma = find_vma(current->mm, start); -		if (vma && vma->vm_end >= start + length && -		    vma->vm_start <= start) { +		vma = find_vma(current->mm, untagged_start); +		if (vma && vma->vm_end >= untagged_start + length && +		    vma->vm_start <= untagged_start) {  			if (vma->vm_flags & VM_WRITE)  				access_flags |= IB_ACCESS_LOCAL_WRITE;  		} else {  |