On 12/7/25 13:39, Oleg Nesterov wrote: > Nowaday task->group_leader->mm != task->mm is only possible if > a) task is not a group leader and b) task->group_leader->mm == NULL > because task->group_leader has already exited using sys_exit().
Just for my understanding: That is because CLONE_THREAD can only be specified together with CLONE_SIGHAND and CLONE_VM, correct? > > I don't think that drm/amd tries to detect/nack this case. > > Signed-off-by: Oleg Nesterov <[email protected]> Seems to make sense of hand. Reviewed-by: Christian König <[email protected]> Should we pick that one up or do you want to merge it upstream somehow? Regards, Christian. > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 3 --- > drivers/gpu/drm/amd/amdkfd/kfd_process.c | 10 ---------- > 2 files changed, 13 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > index a0f8ba382b9e..e44f158a11f0 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > @@ -2551,9 +2551,6 @@ void amdgpu_vm_set_task_info(struct amdgpu_vm *vm) > vm->task_info->task.pid = current->pid; > get_task_comm(vm->task_info->task.comm, current); > > - if (current->group_leader->mm != current->mm) > - return; > - > vm->task_info->tgid = current->tgid; > get_task_comm(vm->task_info->process_name, current->group_leader); > } > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c > b/drivers/gpu/drm/amd/amdkfd/kfd_process.c > index a085faac9fe1..f8ef18a3aa71 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c > @@ -833,12 +833,6 @@ struct kfd_process *kfd_create_process(struct > task_struct *thread) > if (!(thread->mm && mmget_not_zero(thread->mm))) > return ERR_PTR(-EINVAL); > > - /* Only the pthreads threading model is supported. */ > - if (thread->group_leader->mm != thread->mm) { > - mmput(thread->mm); > - return ERR_PTR(-EINVAL); > - } > - > /* If the process just called exec(3), it is possible that the > * cleanup of the kfd_process (following the release of the mm > * of the old process image) is still in the cleanup work queue. > @@ -918,10 +912,6 @@ struct kfd_process *kfd_get_process(const struct > task_struct *thread) > if (!thread->mm) > return ERR_PTR(-EINVAL); > > - /* Only the pthreads threading model is supported. */ > - if (thread->group_leader->mm != thread->mm) > - return ERR_PTR(-EINVAL); > - > process = find_process(thread, false); > if (!process) > return ERR_PTR(-EINVAL);
