From cc2162d8e95a47ab4f31a26e8872fb607b09982c Mon Sep 17 00:00:00 2001 From: Huang Rui Date: Mon, 16 Dec 2019 11:43:33 +0800 Subject: [PATCH] libhsakmt: add NumCpQueues and NumSdmaQueuesPerEngine data field (v3) NumCpQueues and NumSdmaQueuesPerEngine should be got by kfd driver not hardcode. So add two data fields in HsaNodeProperties then thunk is able to get it from sysfs that exposed by kfd. v2: change NumCpQueues/NumSdmaQueuesPerEngine to one byte. v3: merge two commits as one to avoid ABI update two times. Change-Id: Ie386e4685f13493e22db6e207a399db6a4c5b9dc Signed-off-by: Huang Rui [ROCm/ROCR-Runtime commit: 06464b917d93015f8a1ff32746784683c424b38d] --- projects/rocr-runtime/include/hsakmttypes.h | 7 ++++++- projects/rocr-runtime/src/topology.c | 4 ++++ .../rocr-runtime/tests/kfdtest/src/KFDTestUtil.cpp | 14 ++------------ 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/projects/rocr-runtime/include/hsakmttypes.h b/projects/rocr-runtime/include/hsakmttypes.h index 5ac51c2208..ab55047739 100644 --- a/projects/rocr-runtime/include/hsakmttypes.h +++ b/projects/rocr-runtime/include/hsakmttypes.h @@ -301,7 +301,12 @@ typedef struct _HsaNodeProperties // number hash created by the PSP HSAuint32 NumSdmaEngines; // number of PCIe optimized SDMA engines HSAuint32 NumSdmaXgmiEngines;// number of XGMI optimized SDMA engines - HSAuint32 NumGws; // number of GWS barriers + + HSAuint8 NumSdmaQueuesPerEngine;// number of SDMA queue per one engine + HSAuint8 NumCpQueues; // number of Compute queues + HSAuint8 NumGws; // number of GWS barriers + HSAuint8 Reserved2; + HSAuint32 Domain; // PCI domain of the GPU HSAuint8 Reserved[28]; } HsaNodeProperties; diff --git a/projects/rocr-runtime/src/topology.c b/projects/rocr-runtime/src/topology.c index 6aab6323d5..9bcf0ad243 100644 --- a/projects/rocr-runtime/src/topology.c +++ b/projects/rocr-runtime/src/topology.c @@ -1026,6 +1026,10 @@ HSAKMT_STATUS topology_sysfs_get_node_props(uint32_t node_id, props->NumSdmaXgmiEngines = prop_val; else if (strcmp(prop_name, "num_gws") == 0) props->NumGws = prop_val; + else if (strcmp(prop_name, "num_sdma_queues_per_engine") == 0) + props->NumSdmaQueuesPerEngine = prop_val; + else if (strcmp(prop_name, "num_cp_queues") == 0) + props->NumCpQueues = prop_val; } hsa_gfxip = find_hsa_gfxip_device(props->DeviceId); diff --git a/projects/rocr-runtime/tests/kfdtest/src/KFDTestUtil.cpp b/projects/rocr-runtime/tests/kfdtest/src/KFDTestUtil.cpp index 327d4f6702..f8743cb020 100644 --- a/projects/rocr-runtime/tests/kfdtest/src/KFDTestUtil.cpp +++ b/projects/rocr-runtime/tests/kfdtest/src/KFDTestUtil.cpp @@ -145,16 +145,6 @@ void GetHwQueueInfo(const HsaNodeProperties *props, unsigned int *p_num_sdma_engines, unsigned int *p_num_sdma_xgmi_engines, unsigned int *p_num_sdma_queues_per_engine) { - int num_cp_queues = 24; - int num_sdma_queues_per_engine = 2; - - if (props->EngineId.ui32.Major == 9) { - if (props->EngineId.ui32.Stepping == 6) // VEGA20 - num_sdma_queues_per_engine = 8; - } else if (props->EngineId.ui32.Major == 10) { // NAVI - num_sdma_queues_per_engine = 8; - } - if (p_num_sdma_engines) *p_num_sdma_engines = props->NumSdmaEngines; @@ -162,10 +152,10 @@ void GetHwQueueInfo(const HsaNodeProperties *props, *p_num_sdma_xgmi_engines = props->NumSdmaXgmiEngines; if (p_num_sdma_queues_per_engine) - *p_num_sdma_queues_per_engine = num_sdma_queues_per_engine; + *p_num_sdma_queues_per_engine = props->NumSdmaQueuesPerEngine; if (p_num_cp_queues) - *p_num_cp_queues = num_cp_queues; + *p_num_cp_queues = props->NumCpQueues; } bool isTonga(const HsaNodeProperties *props) {