]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdkfd: Enable per-process XNACK for GFX 12.1.0
authorMukul Joshi <mukul.joshi@amd.com>
Thu, 27 Mar 2025 02:16:21 +0000 (22:16 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 10 Dec 2025 22:39:06 +0000 (17:39 -0500)
GFX 12.1.0 will support enabling/disabling XNACK on a per-
process basis. This change enables the per process XNACK feature.

Signed-off-by: Mukul Joshi <mukul.joshi@amd.com>
Reviewed-by: Philip Yang <Philip.Yang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
drivers/gpu/drm/amd/amdgpu/mes_v12_1.c
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
drivers/gpu/drm/amd/amdkfd/kfd_priv.h
drivers/gpu/drm/amd/amdkfd/kfd_process.c

index d503127e45d5e33afc4388875c2d7e8ed849270c..f99de1592921c4706ae8fb45d969c3d21fdc59ad 100644 (file)
@@ -253,6 +253,7 @@ struct mes_add_queue_input {
        uint32_t        is_aql_queue;
        uint32_t        queue_size;
        uint32_t        exclusively_scheduled;
+       uint32_t        sh_mem_config_data;
 };
 
 struct mes_remove_queue_input {
index cc2a715f373fdcf6db0d76caa1ab6a3729295986..15b467b4aae40abddaa410e9bd82ad372f85694c 100644 (file)
@@ -339,6 +339,8 @@ static int mes_v12_1_add_hw_queue(struct amdgpu_mes *mes,
        mes_add_queue_pkt.is_aql_queue = input->is_aql_queue;
        mes_add_queue_pkt.gds_size = input->queue_size;
 
+       mes_add_queue_pkt.full_sh_mem_config_data = input->sh_mem_config_data;
+
        return mes_v12_1_submit_pkt_and_poll_completion(mes,
                        xcc_id, AMDGPU_MES_SCHED_PIPE,
                        &mes_add_queue_pkt, sizeof(mes_add_queue_pkt),
index 39800280543c46c307d362f32feca2826b3891c8..824d73ab5b283159799717f7cac34d8e00097dd6 100644 (file)
@@ -255,6 +255,7 @@ static int add_queue_mes(struct device_queue_manager *dqm, struct queue *q,
        queue_input.queue_type = (uint32_t)queue_type;
 
        queue_input.exclusively_scheduled = q->properties.is_gws;
+       queue_input.sh_mem_config_data = qpd->sh_mem_config;
 
        amdgpu_mes_lock(&adev->mes);
        r = adev->mes.funcs->add_hw_queue(&adev->mes, &queue_input);
index 12f640a9370ad403667578b0a7cd6c8e63953e80..7b70f794f3d0cd31148eb4aae8cc5a630dc66f33 100644 (file)
@@ -215,7 +215,8 @@ enum cache_policy {
        ((KFD_GC_VERSION(dev) == IP_VERSION(9, 4, 2)) ||        \
         (KFD_GC_VERSION(dev) == IP_VERSION(9, 4, 3)) ||        \
         (KFD_GC_VERSION(dev) == IP_VERSION(9, 4, 4)) ||        \
-        (KFD_GC_VERSION(dev) == IP_VERSION(9, 5, 0)))
+        (KFD_GC_VERSION(dev) == IP_VERSION(9, 5, 0)) ||        \
+        (KFD_GC_VERSION(dev) == IP_VERSION(12, 1, 0)))
 
 struct kfd_node;
 
index b4982da9234b23d80c0821c0d17d53c1e1e9092b..2f66ebb5b029801e4c6224fea115744c1b80a60f 100644 (file)
@@ -1557,7 +1557,8 @@ bool kfd_process_xnack_mode(struct kfd_process *p, bool supported)
                 * management and memory-manager-related preemptions or
                 * even deadlocks.
                 */
-               if (KFD_GC_VERSION(dev) >= IP_VERSION(10, 1, 1))
+               if (KFD_GC_VERSION(dev) >= IP_VERSION(10, 1, 1) &&
+                   KFD_GC_VERSION(dev) < IP_VERSION(12, 1, 0))
                        return false;
 
                if (dev->kfd->noretry)