IB/mlx4: Take write semaphore when changing the vma struct
When the driver disassociate user context, it changes the vma to
anonymous by setting the vm_ops to null and zap the vma ptes.
In order to avoid race in the kernel, we need to take write lock
before we change the vma entries.
Fixes: ae184ddeca ('IB/mlx4_ib: Disassociate support')
Signed-off-by: Maor Gottlieb <maorg@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
committed by
Doug Ledford
parent
fb7a91746a
commit
22c3653d04
@@ -1173,7 +1173,7 @@ static void mlx4_ib_disassociate_ucontext(struct ib_ucontext *ibcontext)
|
|||||||
/* need to protect from a race on closing the vma as part of
|
/* need to protect from a race on closing the vma as part of
|
||||||
* mlx4_ib_vma_close().
|
* mlx4_ib_vma_close().
|
||||||
*/
|
*/
|
||||||
down_read(&owning_mm->mmap_sem);
|
down_write(&owning_mm->mmap_sem);
|
||||||
for (i = 0; i < HW_BAR_COUNT; i++) {
|
for (i = 0; i < HW_BAR_COUNT; i++) {
|
||||||
vma = context->hw_bar_info[i].vma;
|
vma = context->hw_bar_info[i].vma;
|
||||||
if (!vma)
|
if (!vma)
|
||||||
@@ -1191,7 +1191,7 @@ static void mlx4_ib_disassociate_ucontext(struct ib_ucontext *ibcontext)
|
|||||||
context->hw_bar_info[i].vma->vm_ops = NULL;
|
context->hw_bar_info[i].vma->vm_ops = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
up_read(&owning_mm->mmap_sem);
|
up_write(&owning_mm->mmap_sem);
|
||||||
mmput(owning_mm);
|
mmput(owning_mm);
|
||||||
put_task_struct(owning_process);
|
put_task_struct(owning_process);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user