diff options
Diffstat (limited to 'drivers/infiniband/hw/mlx5/odp.c')
| -rw-r--r-- | drivers/infiniband/hw/mlx5/odp.c | 7 | 
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/mlx5/odp.c b/drivers/infiniband/hw/mlx5/odp.c index 5b642d81e617..81da82050d05 100644 --- a/drivers/infiniband/hw/mlx5/odp.c +++ b/drivers/infiniband/hw/mlx5/odp.c @@ -246,7 +246,7 @@ void mlx5_ib_invalidate_range(struct ib_umem_odp *umem_odp, unsigned long start,  	 * overwrite the same MTTs.  Concurent invalidations might race us,  	 * but they will write 0s as well, so no difference in the end result.  	 */ - +	mutex_lock(&umem_odp->umem_mutex);  	for (addr = start; addr < end; addr += BIT(umem_odp->page_shift)) {  		idx = (addr - ib_umem_start(umem_odp)) >> umem_odp->page_shift;  		/* @@ -278,6 +278,7 @@ void mlx5_ib_invalidate_range(struct ib_umem_odp *umem_odp, unsigned long start,  				   idx - blk_start_idx + 1, 0,  				   MLX5_IB_UPD_XLT_ZAP |  				   MLX5_IB_UPD_XLT_ATOMIC); +	mutex_unlock(&umem_odp->umem_mutex);  	/*  	 * We are now sure that the device will not access the  	 * memory. We can safely unmap it, and mark it as dirty if @@ -1771,7 +1772,7 @@ static void mlx5_ib_prefetch_mr_work(struct work_struct *work)  	num_pending_prefetch_dec(to_mdev(w->pd->device), w->sg_list,  				 w->num_sge, 0); -	kfree(w); +	kvfree(w);  }  int mlx5_ib_advise_mr_prefetch(struct ib_pd *pd, @@ -1813,7 +1814,7 @@ int mlx5_ib_advise_mr_prefetch(struct ib_pd *pd,  	if (valid_req)  		queue_work(system_unbound_wq, &work->work);  	else -		kfree(work); +		kvfree(work);  	srcu_read_unlock(&dev->mr_srcu, srcu_key);  | 
