From c3f022822bb3dfe3dbb05f6d37a885c6ee9c3ae3 Mon Sep 17 00:00:00 2001 From: Flora Cui Date: Thu, 31 Jul 2025 16:54:48 +0800 Subject: [PATCH] wsl/libhsakmt: add !atomic handling for vender specific packet Signed-off-by: Flora Cui Reviewed-by: Longlong Yao q Part-of: --- wddm/queue.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/wddm/queue.cpp b/wddm/queue.cpp index 8225a19c2a..971656e949 100644 --- a/wddm/queue.cpp +++ b/wddm/queue.cpp @@ -857,7 +857,10 @@ hsa_status_t ComputeQueue::VendorSpecificAqlToPm4(char *cpu, amd_aql_pm4_ib *pac // flush cache i += cmd_util.BuildAcquireMem(major, cpu + i); - i += cmd_util.BuildAtomicMem(signal_addr, TC_OP_ATOMIC_ADD_RTN_64, cpu + i, cache_policy__mec_atomic_mem__bypass, -1); + if (platform_atomic_support_) + i += cmd_util.BuildAtomicMem(signal_addr, TC_OP_ATOMIC_ADD_RTN_64, cpu + i, cache_policy__mec_atomic_mem__bypass, -1); + else + signal_addr_ = signal_addr; } } else { if (packet->completion_signal.handle != 0) { @@ -868,10 +871,12 @@ hsa_status_t ComputeQueue::VendorSpecificAqlToPm4(char *cpu, amd_aql_pm4_ib *pac // The ring_rptr is used to record pm4 queue rptr value, // dispatch readptr position, this is used to share rptr with // aql queue. - i += cmd_util.BuildAtomicMem((uint64_t *)ring_rptr, TC_OP_ATOMIC_ADD_RTN_64, cpu + i); + if (platform_atomic_support_) + i += cmd_util.BuildAtomicMem((uint64_t *)ring_rptr, TC_OP_ATOMIC_ADD_RTN_64, cpu + i); + else + i += cmd_util.BuildWriteData64Command(cpu + i, (uint64_t *)ring_rptr, cmdbuf_aql_frame_write_index + 1); ib_size = i; - cmdbuf_aql_frame_write_index++; packet->header = HSA_PACKET_TYPE_INVALID; return HSA_STATUS_SUCCESS;