Adding support to hsaKmtMapMemoryToGPUNodes

Change-Id: Iab6222402a43c3cd31b0efc5a316a6482986258e
Signed-off-by: Ben Goz <ben.goz@amd.com>


[ROCm/ROCR-Runtime commit: 7070f7ec5e]
This commit is contained in:
Ben Goz
2016-01-28 15:33:56 +02:00
parent 60bbf00fb1
commit 18aab410cc
6 ha cambiato i file con 76 aggiunte e 15 eliminazioni
+2
Vedi File
@@ -63,6 +63,8 @@ HSAKMT_STATUS validate_nodeid(uint32_t nodeid, uint32_t *gpu_id);
HSAKMT_STATUS gpuid_to_nodeid(uint32_t gpu_id, uint32_t* node_id);
uint16_t get_device_id_by_node(HSAuint32 node_id);
uint16_t get_device_id_by_gpu_id(HSAuint32 gpu_id);
HSAKMT_STATUS validate_nodeid_array(uint32_t **gpu_id_array,
uint32_t NumberOfNodes, uint32_t *NodeArray);
HSAKMT_STATUS topology_sysfs_get_gpu_id(uint32_t node_id, uint32_t *gpu_id);
HSAKMT_STATUS topology_sysfs_get_node_props(uint32_t node_id, HsaNodeProperties *props, uint32_t *gpu_id);
@@ -28,6 +28,7 @@ hsaKmtRegisterMemory;
hsaKmtRegisterMemoryToNodes;
hsaKmtDeregisterMemory;
hsaKmtMapMemoryToGPU;
hsaKmtMapMemoryToGPUNodes;
hsaKmtUnmapMemoryToGPU;
hsaKmtDbgRegister;
hsaKmtDbgUnregister;
+32 -13
Vedi File
@@ -212,21 +212,10 @@ hsaKmtRegisterMemoryToNodes(
{
CHECK_KFD_OPEN();
uint32_t *gpu_id_array;
unsigned i;
HSAKMT_STATUS ret = HSAKMT_STATUS_SUCCESS;
if (NumberOfNodes == 0 || NodeArray == NULL)
return HSAKMT_STATUS_INVALID_PARAMETER;
/* Translate Node IDs to gpu_ids */
gpu_id_array = malloc(NumberOfNodes * sizeof(uint32_t));
if (gpu_id_array == NULL)
return HSAKMT_STATUS_NO_MEMORY;
for (i = 0; i < NumberOfNodes; i++) {
ret = validate_nodeid(NodeArray[i], &gpu_id_array[i]);
if (ret != HSAKMT_STATUS_SUCCESS)
break;
}
ret = validate_nodeid_array(&gpu_id_array,
NumberOfNodes, NodeArray);
if (ret == HSAKMT_STATUS_SUCCESS)
ret = fmm_register_memory(MemoryAddress, MemorySizeInBytes,
@@ -269,6 +258,36 @@ hsaKmtMapMemoryToGPU(
return HSAKMT_STATUS_ERROR;
}
HSAKMT_STATUS
HSAKMTAPI
hsaKmtMapMemoryToGPUNodes(
void* MemoryAddress, //IN (page-aligned)
HSAuint64 MemorySizeInBytes, //IN (page-aligned)
HSAuint64* AlternateVAGPU, //OUT (page-aligned)
HsaMemMapFlags MemMapFlags, //IN
HSAuint64 NumberOfNodes, //IN
HSAuint32* NodeArray //IN
)
{
uint32_t *gpu_id_array;
HSAKMT_STATUS ret;
ret = validate_nodeid_array(&gpu_id_array,
NumberOfNodes, NodeArray);
if (ret != HSAKMT_STATUS_SUCCESS) {
free(gpu_id_array);
return ret;
}
ret = fmm_register_memory(MemoryAddress, MemorySizeInBytes,
gpu_id_array, NumberOfNodes);
if (ret != HSAKMT_STATUS_SUCCESS)
return ret;
return fmm_map_to_gpu(MemoryAddress,
MemorySizeInBytes, AlternateVAGPU);
}
HSAKMT_STATUS
HSAKMTAPI
hsaKmtUnmapMemoryToGPU(
+24
Vedi File
@@ -1317,6 +1317,30 @@ uint16_t get_device_id_by_gpu_id(HSAuint32 gpu_id)
return 0;
}
HSAKMT_STATUS validate_nodeid_array(uint32_t **gpu_id_array,
uint32_t NumberOfNodes, uint32_t *NodeArray)
{
HSAKMT_STATUS ret;
unsigned int i;
if (NumberOfNodes == 0 || NodeArray == NULL || gpu_id_array == NULL)
return HSAKMT_STATUS_INVALID_PARAMETER;
/* Translate Node IDs to gpu_ids */
*gpu_id_array = malloc(NumberOfNodes * sizeof(uint32_t));
if (*gpu_id_array == NULL)
return HSAKMT_STATUS_NO_MEMORY;
for (i = 0; i < NumberOfNodes; i++) {
ret = validate_nodeid(NodeArray[i], gpu_id_array[i]);
if (ret != HSAKMT_STATUS_SUCCESS) {
free(gpu_id_array);
break;
}
}
return ret;
}
#if 0
static int get_cpu_stepping(uint16_t* stepping)
{