]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdkfd: Don't acquire buffers during CRIU queue restore.
authorDavid Francis <David.Francis@amd.com>
Tue, 30 Jun 2026 13:58:18 +0000 (09:58 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 8 Jul 2026 20:44:14 +0000 (16:44 -0400)
kfd_criu_restore_queue's call of kfd_queue_acquire_buffers was
failing for multiple reasons
- The ctl_stack_size set by the CRIU plugin doesn't match
what is expected by acquire_buffers
- The svm buffer cannot be acquired at this point because
CRIU may not have restored it, or may have restored it
to a different address.

The only reason acquire_buffers was necessary here was to
avoid a null ptr dereference in init_user_queue.

Just put in a check for that dereference; it doesn't appear to
come up in real use cases right now. That is, there is no
usage of CRIU with shared MES.

This is a partial revert of
commit 20a5e7ffdfec ("drm/amdkfd: Properly acquire queue buffers in CRIU restore")

Fixes: 20a5e7ffdfec ("drm/amdkfd: Properly acquire queue buffers in CRIU restore")
Reviewed-by: David Yat Sin <david.yatsin@amd.com>
Signed-off-by: David Francis <David.Francis@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 1cafa8b29e029eac3ddf64604f891b35dbf6262b)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c

index 0ac35789b239943d1cc7136c43b813d657a92abc..b8c36907d53650ed5610abb58e698690e7fa0730 100644 (file)
@@ -265,6 +265,11 @@ static int init_user_queue(struct process_queue_manager *pqm,
        (*q)->process = pqm->process;
 
        if (dev->kfd->shared_resources.enable_mes) {
+               if (!q_properties->wptr_bo) {
+                       pr_debug("Queue initialization with shared MES requires queue buffers to be initialized\n");
+                       return -EINVAL;
+               }
+
                retval = amdgpu_amdkfd_alloc_kernel_mem(dev->adev,
                                                AMDGPU_MES_GANG_CTX_SIZE,
                                                AMDGPU_GEM_DOMAIN_GTT,
@@ -1042,18 +1047,10 @@ int kfd_criu_restore_queue(struct kfd_process *p,
        memset(&qp, 0, sizeof(qp));
        set_queue_properties_from_criu(&qp, q_data, NUM_XCC(pdd->dev->adev->gfx.xcc_mask));
 
-       ret = kfd_queue_acquire_buffers(pdd, &qp);
-       if (ret) {
-               pr_debug("failed to acquire user queue buffers for CRIU\n");
-               goto exit;
-       }
-
        print_queue_properties(&qp);
 
        ret = pqm_create_queue(&p->pqm, pdd->dev, &qp, &queue_id, q_data, mqd, ctl_stack, NULL);
        if (ret) {
-               kfd_queue_unref_bo_vas(pdd, &qp);
-               kfd_queue_release_buffers(pdd, &qp);
                pr_err("Failed to create new queue err:%d\n", ret);
                goto exit;
        }