mqd_manager_init_v9() looks up the node in topology to set
mm->ctl_stack_size, the bound for the control stack copy at CRIU
checkpoint. The device queue manager, and with it the MQD managers, is
created before kfd_topology_add_device() assigns the node its id, so the
lookup never finds the node and the bound stays 0. Every gfx9 checkpoint
then reports and copies an empty control stack.
Set the bound in kfd_topology_add_device(), right after topology
computes the control stack size.
Fixes: 575ebd79a819 ("drm/amdkfd: clamp v9 CRIU control stack checkpoint copy
to BO size")
Signed-off-by: William Palacek <[email protected]>
---
drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c | 10 ----------
drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 4 ++++
2 files changed, 4 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c
b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c
index c02dd9abc3ad..35c36b6dc212 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c
@@ -27,7 +27,6 @@
#include <linux/uaccess.h>
#include "kfd_priv.h"
#include "kfd_mqd_manager.h"
-#include "kfd_topology.h"
#include "v9_structs.h"
#include "gc/gc_9_0_offset.h"
#include "gc/gc_9_0_sh_mask.h"
@@ -1039,15 +1038,6 @@ struct mqd_manager *mqd_manager_init_v9(enum
KFD_MQD_TYPE type,
mqd->is_occupied = kfd_is_occupied_cp;
mqd->get_checkpoint_info = get_checkpoint_info;
mqd->mqd_size = sizeof(struct v9_mqd);
- if (dev->kfd->cwsr_enabled) {
- struct kfd_topology_device *topo_dev;
-
- topo_dev = kfd_topology_device_by_id(dev->id);
- if (topo_dev)
- mqd->ctl_stack_size =
-
ALIGN(topo_dev->node_props.ctl_stack_size,
- AMDGPU_GPU_PAGE_SIZE);
- }
mqd->mqd_stride = mqd_stride_v9;
#if defined(CONFIG_DEBUG_FS)
mqd->debugfs_show_mqd = debugfs_show_mqd;
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
index 35b3abe57b80..1fdec20a9609 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
@@ -2203,6 +2203,10 @@ int kfd_topology_add_device(struct kfd_node *gpu)
dev->node_props.capability |= HSA_CAP_FLAGS_COHERENTHOSTACCESS;
kfd_queue_ctx_save_restore_size(dev);
+ /* dqm is created before the node has an id to look up in topology */
+ if (gpu->kfd->cwsr_enabled)
+ gpu->dqm->mqd_mgrs[KFD_MQD_TYPE_CP]->ctl_stack_size =
+ dev->node_props.ctl_stack_size;
kfd_debug_print_topology();
--
2.43.0