Commit a4a3798f authored by Rajneesh Bhardwaj's avatar Rajneesh Bhardwaj Committed by Alex Deucher
Browse files

drm/amdkfd: Fix CRIU restore op due to doorbell offset



Recently introduced change to allocate doorbells only when the first
queue is created or mapped for CPU / GPU access, did not consider
Checkpoint Restore scenario completely. This fix allows the CRIU restore
operation by extending the doorbell optimization to CRIU restore
scenario.

Fixes: 16f00131 ("drm/amdkfd: Allocate doorbells only when needed")

Reviewed-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarRajneesh Bhardwaj <rajneesh.bhardwaj@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 542ab491
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -2153,6 +2153,12 @@ static int criu_restore_devices(struct kfd_process *p,
			ret = PTR_ERR(pdd);
			goto exit;
		}

		if (!pdd->doorbell_index &&
		    kfd_alloc_process_doorbells(pdd->dev, &pdd->doorbell_index) < 0) {
			ret = -ENOMEM;
			goto exit;
		}
	}

	/*
+3 −0
Original line number Diff line number Diff line
@@ -303,6 +303,9 @@ int kfd_alloc_process_doorbells(struct kfd_dev *kfd, unsigned int *doorbell_inde
	if (r > 0)
		*doorbell_index = r;

	if (r < 0)
		pr_err("Failed to allocate process doorbells\n");

	return r;
}

+7 −0
Original line number Diff line number Diff line
@@ -857,6 +857,13 @@ int kfd_criu_restore_queue(struct kfd_process *p,
		ret = -EINVAL;
		goto exit;
	}

	if (!pdd->doorbell_index &&
	    kfd_alloc_process_doorbells(pdd->dev, &pdd->doorbell_index) < 0) {
		ret = -ENOMEM;
		goto exit;
	}

	/* data stored in this order: mqd, ctl_stack */
	mqd = q_extra_data;
	ctl_stack = mqd + q_data->mqd_size;