Disable unsupported disassociate ucontext functionality in mlx5ib(4).
MFC after: 1 week Sponsored by: Mellanox Technologies
This commit is contained in:
parent
847a90f040
commit
13f5c3c4e7
@ -1241,62 +1241,6 @@ static int mlx5_ib_set_vma_data(struct vm_area_struct *vma,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void mlx5_ib_disassociate_ucontext(struct ib_ucontext *ibcontext)
|
||||
{
|
||||
int ret;
|
||||
struct vm_area_struct *vma;
|
||||
struct mlx5_ib_vma_private_data *vma_private, *n;
|
||||
struct mlx5_ib_ucontext *context = to_mucontext(ibcontext);
|
||||
struct task_struct *owning_process = NULL;
|
||||
struct mm_struct *owning_mm = NULL;
|
||||
|
||||
owning_process = get_pid_task(ibcontext->tgid, PIDTYPE_PID);
|
||||
if (!owning_process)
|
||||
return;
|
||||
|
||||
owning_mm = get_task_mm(owning_process);
|
||||
if (!owning_mm) {
|
||||
pr_info("no mm, disassociate ucontext is pending task termination\n");
|
||||
while (1) {
|
||||
put_task_struct(owning_process);
|
||||
usleep_range(1000, 2000);
|
||||
owning_process = get_pid_task(ibcontext->tgid,
|
||||
PIDTYPE_PID);
|
||||
if (!owning_process /* ||
|
||||
owning_process->state == TASK_DEAD */) {
|
||||
pr_info("disassociate ucontext done, task was terminated\n");
|
||||
/* in case task was dead need to release the
|
||||
* task struct.
|
||||
*/
|
||||
if (owning_process)
|
||||
put_task_struct(owning_process);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* need to protect from a race on closing the vma as part of
|
||||
* mlx5_ib_vma_close.
|
||||
*/
|
||||
down_read(&owning_mm->mmap_sem);
|
||||
list_for_each_entry_safe(vma_private, n, &context->vma_private_list,
|
||||
list) {
|
||||
vma = vma_private->vma;
|
||||
ret = zap_vma_ptes(vma, vma->vm_start,
|
||||
PAGE_SIZE);
|
||||
WARN_ONCE(ret, "%s: zap_vma_ptes failed", __func__);
|
||||
/* context going to be destroyed, should
|
||||
* not access ops any more.
|
||||
*/
|
||||
vma->vm_ops = NULL;
|
||||
list_del(&vma_private->list);
|
||||
kfree(vma_private);
|
||||
}
|
||||
up_read(&owning_mm->mmap_sem);
|
||||
mmput(owning_mm);
|
||||
put_task_struct(owning_process);
|
||||
}
|
||||
|
||||
static inline char *mmap_cmd2str(enum mlx5_ib_mmap_cmd cmd)
|
||||
{
|
||||
switch (cmd) {
|
||||
@ -3056,8 +3000,6 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
|
||||
dev->ib_dev.set_vf_guid = mlx5_ib_set_vf_guid;
|
||||
}
|
||||
|
||||
dev->ib_dev.disassociate_ucontext = mlx5_ib_disassociate_ucontext;
|
||||
|
||||
mlx5_ib_internal_fill_odp_caps(dev);
|
||||
|
||||
if (MLX5_CAP_GEN(mdev, imaicl)) {
|
||||
|
Loading…
Reference in New Issue
Block a user