summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
diff options
context:
space:
mode:
authorDavid Yat Sin <david.yatsin@amd.com>2021-04-09 19:30:43 +0300
committerAlex Deucher <alexander.deucher@amd.com>2022-02-08 01:59:52 +0300
commitbef153b70c6e3594b849d44a23f806328b9c68d4 (patch)
treebd4c471638c399d6bd889c8579253d750c1b92d6 /drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
parent40e8a766a761f7fdc8530347527b344fddf6f1a8 (diff)
downloadlinux-bef153b70c6e3594b849d44a23f806328b9c68d4.tar.xz
drm/amdkfd: CRIU implement gpu_id remapping
When doing a restore on a different node, the gpu_id's on the restore node may be different. But the user space application will still refer use the original gpu_id's in the ioctl calls. Adding code to create a gpu id mapping so that kfd can determine actual gpu_id during the user ioctl's. Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: David Yat Sin <david.yatsin@amd.com> Signed-off-by: Rajneesh Bhardwaj <rajneesh.bhardwaj@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c')
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c18
1 files changed, 4 insertions, 14 deletions
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
index bd89dd0ca83e..70ea4849e6a2 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
@@ -610,7 +610,7 @@ static int criu_checkpoint_queue(struct kfd_process_device *pdd,
mqd = (void *)(q_data + 1);
ctl_stack = mqd + q_data->mqd_size;
- q_data->gpu_id = pdd->dev->id;
+ q_data->gpu_id = pdd->user_gpu_id;
q_data->type = q->properties.type;
q_data->format = q->properties.format;
q_data->q_id = q->properties.queue_id;
@@ -769,7 +769,6 @@ int kfd_criu_restore_queue(struct kfd_process *p,
uint64_t q_extra_data_size;
struct queue_properties qp;
unsigned int queue_id;
- struct kfd_dev *dev;
int ret = 0;
if (*priv_data_offset + sizeof(*q_data) > max_priv_data_size)
@@ -807,20 +806,11 @@ int kfd_criu_restore_queue(struct kfd_process *p,
*priv_data_offset += q_extra_data_size;
- dev = kfd_device_by_id(q_data->gpu_id);
- if (!dev) {
- pr_err("Could not get kfd_dev from gpu_id = 0x%x\n",
- q_data->gpu_id);
-
- ret = -EINVAL;
- goto exit;
- }
-
- pdd = kfd_get_process_device_data(dev, p);
+ pdd = kfd_process_device_data_by_id(p, q_data->gpu_id);
if (!pdd) {
pr_err("Failed to get pdd\n");
- ret = -EFAULT;
- return ret;
+ ret = -EINVAL;
+ goto exit;
}
/* data stored in this order: mqd, ctl_stack */
mqd = q_extra_data;