Thunk follows Linux kernel coding convention to use tabs instead of
spaces.

Change-Id: I4eddcfa9a0513f16c869d9cc63f9f1dae0c39f83
Signed-off-by: Amber Lin <Amber.Lin@amd.com>


[ROCm/ROCR-Runtime commit: d4dbf562a9]
Этот коммит содержится в:
Amber Lin
2017-02-03 09:59:21 -05:00
родитель 73c7c197af
Коммит 67049d7175
3 изменённых файлов: 344 добавлений и 343 удалений
+184 -186
Просмотреть файл
@@ -29,19 +29,19 @@
#include "linux/kfd_ioctl.h"
#include <unistd.h>
#define BITS_PER_BYTE CHAR_BIT
#define BITS_PER_BYTE CHAR_BIT
#define HSA_PERF_MAGIC4CC 0x54415348
#define HSA_PERF_MAGIC4CC 0x54415348
enum perf_trace_state {
PERF_TRACE_STATE__STOPPED = 0,
PERF_TRACE_STATE__STARTED
PERF_TRACE_STATE__STOPPED = 0,
PERF_TRACE_STATE__STARTED
};
struct perf_trace {
uint32_t magic4cc;
uint32_t gpu_id;
enum perf_trace_state state;
uint32_t magic4cc;
uint32_t gpu_id;
enum perf_trace_state state;
};
extern int amd_hsa_thunk_lock_fd;
@@ -77,94 +77,92 @@ void destroy_counter_props(void)
static int blockid2uuid(enum perf_block_id block_id, HSA_UUID *uuid)
{
int rc = 0;
switch (block_id) {
case PERFCOUNTER_BLOCKID__SQ:
*uuid = HSA_PROFILEBLOCK_AMD_SQ;
break;
default:
/* If we reach this point, it's a bug */
rc = -1;
}
int rc = 0;
switch (block_id) {
case PERFCOUNTER_BLOCKID__SQ:
*uuid = HSA_PROFILEBLOCK_AMD_SQ;
break;
default:
/* If we reach this point, it's a bug */
rc = -1;
}
return rc;
return rc;
}
HSAKMT_STATUS
HSAKMTAPI
hsaKmtPmcGetCounterProperties(
HSAuint32 NodeId, //IN
HsaCounterProperties** CounterProperties //OUT
)
HSAuint32 NodeId, //IN
HsaCounterProperties** CounterProperties //OUT
)
{
HSAKMT_STATUS rc = HSAKMT_STATUS_SUCCESS;
uint32_t gpu_id, i, block_id;
uint16_t dev_id;
uint32_t counter_props_size = 0;
uint32_t total_counters = 0;
uint32_t total_concurrent = 0;
struct perf_counter_block block = {0};
HSAKMT_STATUS rc = HSAKMT_STATUS_SUCCESS;
uint32_t gpu_id, i, block_id;
uint16_t dev_id;
uint32_t counter_props_size = 0;
uint32_t total_counters = 0;
uint32_t total_concurrent = 0;
struct perf_counter_block block = {0};
if (counter_props == NULL)
return HSAKMT_STATUS_NO_MEMORY;
if (CounterProperties == NULL)
return HSAKMT_STATUS_INVALID_PARAMETER;
if (CounterProperties == NULL)
return HSAKMT_STATUS_INVALID_PARAMETER;
if (validate_nodeid(NodeId, &gpu_id) != 0)
return HSAKMT_STATUS_INVALID_NODE_UNIT;
if (validate_nodeid(NodeId, &gpu_id) != 0)
return HSAKMT_STATUS_INVALID_NODE_UNIT;
if (counter_props[NodeId] == NULL) {
dev_id = get_device_id_by_node(NodeId);
for (i = 0; i < PERFCOUNTER_BLOCKID__MAX; i++) {
rc = get_block_properties(dev_id, i, &block);
if (rc != HSAKMT_STATUS_SUCCESS)
return rc;
total_concurrent += block.num_of_slots;
total_counters += block.num_of_counters;
}
counter_props_size = sizeof(HsaCounterProperties) +
sizeof(HsaCounterBlockProperties)*(PERFCOUNTER_BLOCKID__MAX-1) +
sizeof(HsaCounter)*(total_counters-1);
if (counter_props[NodeId] == NULL) {
dev_id = get_device_id_by_node(NodeId);
for (i = 0; i < PERFCOUNTER_BLOCKID__MAX; i++) {
rc = get_block_properties(dev_id, i, &block);
if (rc != HSAKMT_STATUS_SUCCESS)
return rc;
total_concurrent += block.num_of_slots;
total_counters += block.num_of_counters;
}
counter_props[NodeId] = malloc(counter_props_size);
counter_props_size = sizeof(HsaCounterProperties) +
sizeof(HsaCounterBlockProperties)*(PERFCOUNTER_BLOCKID__MAX-1) +
sizeof(HsaCounter)*(total_counters-1);
if (counter_props[NodeId] == NULL)
return HSAKMT_STATUS_NO_MEMORY;
counter_props[NodeId] = malloc(counter_props_size);
counter_props[NodeId]->NumBlocks = PERFCOUNTER_BLOCKID__MAX;
counter_props[NodeId]->NumConcurrent = total_concurrent;
if (counter_props[NodeId] == NULL)
return HSAKMT_STATUS_NO_MEMORY;
for (block_id = 0; block_id < PERFCOUNTER_BLOCKID__MAX; block_id++)
{
rc = get_block_properties(dev_id, block_id, &block);
if (rc != HSAKMT_STATUS_SUCCESS) {
free(counter_props[NodeId]);
return rc;
}
counter_props[NodeId]->NumBlocks = PERFCOUNTER_BLOCKID__MAX;
counter_props[NodeId]->NumConcurrent = total_concurrent;
/* Filling the SQ block */
blockid2uuid(block_id, &counter_props[NodeId]->Blocks[block_id].BlockId);
counter_props[NodeId]->Blocks[block_id].NumCounters = block.num_of_counters;
counter_props[NodeId]->Blocks[block_id].NumConcurrent = block.num_of_slots;
for (block_id = 0; block_id < PERFCOUNTER_BLOCKID__MAX; block_id++)
{
rc = get_block_properties(dev_id, block_id, &block);
if (rc != HSAKMT_STATUS_SUCCESS) {
free(counter_props[NodeId]);
return rc;
}
for (i = 0; i < block.num_of_counters; i++) {
counter_props[NodeId]->Blocks[block_id].Counters[i].BlockIndex = block_id;
counter_props[NodeId]->Blocks[block_id].Counters[i].CounterId = block.counter_ids[i];
counter_props[NodeId]->Blocks[block_id].Counters[i].CounterSizeInBits = block.counter_size_in_bits;
counter_props[NodeId]->Blocks[block_id].Counters[i].CounterMask = block.counter_mask;
counter_props[NodeId]->Blocks[block_id].Counters[i].Flags.ui32.Global = 1;
counter_props[NodeId]->Blocks[block_id].Counters[i].Type = HSA_PROFILE_TYPE_NONPRIV_IMMEDIATE;
}
}
}
/* Filling the SQ block */
blockid2uuid(block_id, &counter_props[NodeId]->Blocks[block_id].BlockId);
counter_props[NodeId]->Blocks[block_id].NumCounters = block.num_of_counters;
counter_props[NodeId]->Blocks[block_id].NumConcurrent = block.num_of_slots;
*CounterProperties = counter_props[NodeId];
for (i = 0; i < block.num_of_counters; i++) {
counter_props[NodeId]->Blocks[block_id].Counters[i].BlockIndex = block_id;
counter_props[NodeId]->Blocks[block_id].Counters[i].CounterId = block.counter_ids[i];
counter_props[NodeId]->Blocks[block_id].Counters[i].CounterSizeInBits = block.counter_size_in_bits;
counter_props[NodeId]->Blocks[block_id].Counters[i].CounterMask = block.counter_mask;
counter_props[NodeId]->Blocks[block_id].Counters[i].Flags.ui32.Global = 1;
counter_props[NodeId]->Blocks[block_id].Counters[i].Type = HSA_PROFILE_TYPE_NONPRIV_IMMEDIATE;
}
}
}
*CounterProperties = counter_props[NodeId];
return HSAKMT_STATUS_SUCCESS;
return HSAKMT_STATUS_SUCCESS;
}
/**
@@ -174,51 +172,51 @@ hsaKmtPmcGetCounterProperties(
HSAKMT_STATUS
HSAKMTAPI
hsaKmtPmcRegisterTrace(
HSAuint32 NodeId, //IN
HSAuint32 NumberOfCounters, //IN
HsaCounter* Counters, //IN
HsaPmcTraceRoot* TraceRoot //OUT
)
HSAuint32 NodeId, //IN
HSAuint32 NumberOfCounters, //IN
HsaCounter* Counters, //IN
HsaPmcTraceRoot* TraceRoot //OUT
)
{
uint32_t gpu_id, i;
uint64_t min_buf_size = 0;
uint32_t concurrent_counters[PERFCOUNTER_BLOCKID__MAX] = {0};
struct perf_trace *trace = NULL;
uint32_t gpu_id, i;
uint64_t min_buf_size = 0;
uint32_t concurrent_counters[PERFCOUNTER_BLOCKID__MAX] = {0};
struct perf_trace *trace = NULL;
if (counter_props == NULL)
return HSAKMT_STATUS_NO_MEMORY;
if (Counters == NULL || TraceRoot == NULL || NumberOfCounters == 0)
return HSAKMT_STATUS_INVALID_PARAMETER;
if (Counters == NULL || TraceRoot == NULL || NumberOfCounters == 0)
return HSAKMT_STATUS_INVALID_PARAMETER;
if (validate_nodeid(NodeId, &gpu_id) != 0)
return HSAKMT_STATUS_INVALID_NODE_UNIT;
if (validate_nodeid(NodeId, &gpu_id) != 0)
return HSAKMT_STATUS_INVALID_NODE_UNIT;
/* Calculating the minimum buffer size */
for (i = 0; i < NumberOfCounters; i++) {
if (Counters[i].BlockIndex >= PERFCOUNTER_BLOCKID__MAX)
return HSAKMT_STATUS_INVALID_PARAMETER;
min_buf_size += Counters[i].CounterSizeInBits/BITS_PER_BYTE;
concurrent_counters[Counters[i].BlockIndex]++;
}
/* Calculating the minimum buffer size */
for (i = 0; i < NumberOfCounters; i++) {
if (Counters[i].BlockIndex >= PERFCOUNTER_BLOCKID__MAX)
return HSAKMT_STATUS_INVALID_PARAMETER;
min_buf_size += Counters[i].CounterSizeInBits/BITS_PER_BYTE;
concurrent_counters[Counters[i].BlockIndex]++;
}
/* Verifying that the number of counters per block is not larger than the amount of slots */
if (concurrent_counters[PERFCOUNTER_BLOCKID__SQ] > counter_props[NodeId]->Blocks[PERFCOUNTER_BLOCKID__SQ].NumConcurrent)
return HSAKMT_STATUS_INVALID_PARAMETER;
/* Verifying that the number of counters per block is not larger than the amount of slots */
if (concurrent_counters[PERFCOUNTER_BLOCKID__SQ] > counter_props[NodeId]->Blocks[PERFCOUNTER_BLOCKID__SQ].NumConcurrent)
return HSAKMT_STATUS_INVALID_PARAMETER;
trace = malloc(sizeof(trace));
if (trace == NULL)
return HSAKMT_STATUS_NO_MEMORY;
trace = malloc(sizeof(trace));
if (trace == NULL)
return HSAKMT_STATUS_NO_MEMORY;
trace->magic4cc = HSA_PERF_MAGIC4CC;
trace->gpu_id = gpu_id;
trace->state = PERF_TRACE_STATE__STOPPED;
trace->magic4cc = HSA_PERF_MAGIC4CC;
trace->gpu_id = gpu_id;
trace->state = PERF_TRACE_STATE__STOPPED;
TraceRoot->NumberOfPasses = 1;
TraceRoot->TraceBufferMinSizeBytes = PAGE_ALIGN_UP(min_buf_size);
TraceRoot->TraceId = PORT_VPTR_TO_UINT64(trace);
TraceRoot->NumberOfPasses = 1;
TraceRoot->TraceBufferMinSizeBytes = PAGE_ALIGN_UP(min_buf_size);
TraceRoot->TraceId = PORT_VPTR_TO_UINT64(trace);
return HSAKMT_STATUS_SUCCESS;
return HSAKMT_STATUS_SUCCESS;
}
/**
@@ -228,37 +226,37 @@ hsaKmtPmcRegisterTrace(
HSAKMT_STATUS
HSAKMTAPI
hsaKmtPmcUnregisterTrace(
HSAuint32 NodeId, //IN
HSATraceId TraceId //IN
)
HSAuint32 NodeId, //IN
HSATraceId TraceId //IN
)
{
uint32_t gpu_id;
struct perf_trace *trace;
uint32_t gpu_id;
struct perf_trace *trace;
if (TraceId == 0)
return HSAKMT_STATUS_INVALID_PARAMETER;
if (TraceId == 0)
return HSAKMT_STATUS_INVALID_PARAMETER;
if (validate_nodeid(NodeId, &gpu_id) != 0)
return HSAKMT_STATUS_INVALID_NODE_UNIT;
if (validate_nodeid(NodeId, &gpu_id) != 0)
return HSAKMT_STATUS_INVALID_NODE_UNIT;
trace = (struct perf_trace *)PORT_UINT64_TO_VPTR(TraceId);
trace = (struct perf_trace *)PORT_UINT64_TO_VPTR(TraceId);
if (trace->magic4cc != HSA_PERF_MAGIC4CC)
return HSAKMT_STATUS_INVALID_HANDLE;
if (trace->magic4cc != HSA_PERF_MAGIC4CC)
return HSAKMT_STATUS_INVALID_HANDLE;
if (trace->gpu_id != gpu_id)
return HSAKMT_STATUS_INVALID_NODE_UNIT;
if (trace->gpu_id != gpu_id)
return HSAKMT_STATUS_INVALID_NODE_UNIT;
/* If the trace is in the running state, stop it */
if (trace->state == PERF_TRACE_STATE__STARTED) {
HSAKMT_STATUS status = hsaKmtPmcStopTrace(TraceId);
if (status != HSAKMT_STATUS_SUCCESS)
return status;
}
/* If the trace is in the running state, stop it */
if (trace->state == PERF_TRACE_STATE__STARTED) {
HSAKMT_STATUS status = hsaKmtPmcStopTrace(TraceId);
if (status != HSAKMT_STATUS_SUCCESS)
return status;
}
free(trace);
free(trace);
return HSAKMT_STATUS_SUCCESS;
return HSAKMT_STATUS_SUCCESS;
}
@@ -270,29 +268,29 @@ hsaKmtPmcUnregisterTrace(
HSAKMT_STATUS
HSAKMTAPI
hsaKmtPmcAcquireTraceAccess(
HSAuint32 NodeId, //IN
HSATraceId TraceId //IN
)
HSAuint32 NodeId, //IN
HSATraceId TraceId //IN
)
{
struct perf_trace *trace;
struct perf_trace *trace;
if (TraceId == 0)
return HSAKMT_STATUS_INVALID_PARAMETER;
if (TraceId == 0)
return HSAKMT_STATUS_INVALID_PARAMETER;
trace = (struct perf_trace *)PORT_UINT64_TO_VPTR(TraceId);
trace = (struct perf_trace *)PORT_UINT64_TO_VPTR(TraceId);
if (trace->magic4cc != HSA_PERF_MAGIC4CC)
return HSAKMT_STATUS_INVALID_HANDLE;
if (trace->magic4cc != HSA_PERF_MAGIC4CC)
return HSAKMT_STATUS_INVALID_HANDLE;
if (amd_hsa_thunk_lock_fd > 0) {
if (amd_hsa_thunk_lock_fd > 0) {
if (lockf( amd_hsa_thunk_lock_fd, F_TLOCK, 0 ) != 0)
return HSAKMT_STATUS_ERROR;
return HSAKMT_STATUS_ERROR;
else
return HSAKMT_STATUS_SUCCESS;
}
else {
return HSAKMT_STATUS_ERROR;
}
}
else {
return HSAKMT_STATUS_ERROR;
}
}
@@ -304,29 +302,29 @@ hsaKmtPmcAcquireTraceAccess(
HSAKMT_STATUS
HSAKMTAPI
hsaKmtPmcReleaseTraceAccess(
HSAuint32 NodeId, //IN
HSATraceId TraceId //IN
)
HSAuint32 NodeId, //IN
HSATraceId TraceId //IN
)
{
struct perf_trace *trace;
struct perf_trace *trace;
if (TraceId == 0)
return HSAKMT_STATUS_INVALID_PARAMETER;
if (TraceId == 0)
return HSAKMT_STATUS_INVALID_PARAMETER;
trace = (struct perf_trace *)PORT_UINT64_TO_VPTR(TraceId);
trace = (struct perf_trace *)PORT_UINT64_TO_VPTR(TraceId);
if (trace->magic4cc != HSA_PERF_MAGIC4CC)
return HSAKMT_STATUS_INVALID_HANDLE;
if (trace->magic4cc != HSA_PERF_MAGIC4CC)
return HSAKMT_STATUS_INVALID_HANDLE;
if (amd_hsa_thunk_lock_fd > 0) {
if (amd_hsa_thunk_lock_fd > 0) {
if (lockf( amd_hsa_thunk_lock_fd, F_ULOCK, 0 ) != 0)
return HSAKMT_STATUS_ERROR;
return HSAKMT_STATUS_ERROR;
else
return HSAKMT_STATUS_SUCCESS;
}
else {
return HSAKMT_STATUS_ERROR;
}
}
else {
return HSAKMT_STATUS_ERROR;
}
}
@@ -338,22 +336,22 @@ hsaKmtPmcReleaseTraceAccess(
HSAKMT_STATUS
HSAKMTAPI
hsaKmtPmcStartTrace(
HSATraceId TraceId, //IN
void* TraceBuffer, //IN (page aligned)
HSAuint64 TraceBufferSizeBytes //IN (page aligned)
)
HSATraceId TraceId, //IN
void* TraceBuffer, //IN (page aligned)
HSAuint64 TraceBufferSizeBytes //IN (page aligned)
)
{
struct perf_trace *trace = (struct perf_trace *)PORT_UINT64_TO_VPTR(TraceId);
struct perf_trace *trace = (struct perf_trace *)PORT_UINT64_TO_VPTR(TraceId);
if (TraceId == 0 || TraceBuffer == NULL || TraceBufferSizeBytes == 0)
return HSAKMT_STATUS_INVALID_PARAMETER;
if (TraceId == 0 || TraceBuffer == NULL || TraceBufferSizeBytes == 0)
return HSAKMT_STATUS_INVALID_PARAMETER;
if (trace->magic4cc != HSA_PERF_MAGIC4CC)
return HSAKMT_STATUS_INVALID_HANDLE;
if (trace->magic4cc != HSA_PERF_MAGIC4CC)
return HSAKMT_STATUS_INVALID_HANDLE;
trace->state = PERF_TRACE_STATE__STARTED;
trace->state = PERF_TRACE_STATE__STARTED;
return HSAKMT_STATUS_SUCCESS;
return HSAKMT_STATUS_SUCCESS;
}
@@ -364,18 +362,18 @@ hsaKmtPmcStartTrace(
HSAKMT_STATUS
HSAKMTAPI
hsaKmtPmcQueryTrace(
HSATraceId TraceId //IN
)
HSATraceId TraceId //IN
)
{
struct perf_trace *trace = (struct perf_trace *)PORT_UINT64_TO_VPTR(TraceId);
struct perf_trace *trace = (struct perf_trace *)PORT_UINT64_TO_VPTR(TraceId);
if (TraceId == 0)
return HSAKMT_STATUS_INVALID_PARAMETER;
if (TraceId == 0)
return HSAKMT_STATUS_INVALID_PARAMETER;
if (trace->magic4cc != HSA_PERF_MAGIC4CC)
return HSAKMT_STATUS_INVALID_HANDLE;
if (trace->magic4cc != HSA_PERF_MAGIC4CC)
return HSAKMT_STATUS_INVALID_HANDLE;
return HSAKMT_STATUS_SUCCESS;
return HSAKMT_STATUS_SUCCESS;
}
@@ -386,18 +384,18 @@ hsaKmtPmcQueryTrace(
HSAKMT_STATUS
HSAKMTAPI
hsaKmtPmcStopTrace(
HSATraceId TraceId //IN
)
HSATraceId TraceId //IN
)
{
struct perf_trace *trace = (struct perf_trace *)PORT_UINT64_TO_VPTR(TraceId);
struct perf_trace *trace = (struct perf_trace *)PORT_UINT64_TO_VPTR(TraceId);
if (TraceId == 0)
return HSAKMT_STATUS_INVALID_PARAMETER;
if (TraceId == 0)
return HSAKMT_STATUS_INVALID_PARAMETER;
if (trace->magic4cc != HSA_PERF_MAGIC4CC)
return HSAKMT_STATUS_INVALID_HANDLE;
if (trace->magic4cc != HSA_PERF_MAGIC4CC)
return HSAKMT_STATUS_INVALID_HANDLE;
trace->state = PERF_TRACE_STATE__STOPPED;
trace->state = PERF_TRACE_STATE__STOPPED;
return HSAKMT_STATUS_SUCCESS;
return HSAKMT_STATUS_SUCCESS;
}
+150 -147
Просмотреть файл
@@ -26,132 +26,134 @@
#include "libhsakmt.h"
#include "pmc_table.h"
static uint32_t kaveri_sq_counter_ids[] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 168, 169, 170,
171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 168, 169, 170,
171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250
};
/* Unused counters - 166, 292 - 297 */
static uint32_t carrizo_sq_counter_ids[] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 298
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 298
};
/* Unused counters - 166, 292 - 297 */
static uint32_t fiji_sq_counter_ids[] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 298
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 298
};
/* Unused counters - 163 - 166, 167 and 251 are *_DUMMY_LAST */
static uint32_t hawaii_sq_counter_ids[] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
158, 159, 160, 161, 162, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
158, 159, 160, 161, 162, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250
};
/* Polaris 10 and Polaris 11 have the same SQ cpunter IDs */
/* Unused counters - 167 and 275 are *_DUMMY_LAST */
static uint32_t polaris_sq_counter_ids[] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
158, 159, 160, 161, 162, 163, 164, 165, 168, 169, 170, 171, 172, 173, 174,
175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249,
250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 276, 277, 278, 279, 280,
281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
158, 159, 160, 161, 162, 163, 164, 165, 168, 169, 170, 171, 172, 173, 174,
175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249,
250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 276, 277, 278, 279, 280,
281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295
};
static struct perf_counter_block kaveri_blocks[PERFCOUNTER_BLOCKID__MAX] = {
[PERFCOUNTER_BLOCKID__SQ] = {
.num_of_slots = 8,
.num_of_counters = sizeof(kaveri_sq_counter_ids)/sizeof(*kaveri_sq_counter_ids),
.counter_ids = kaveri_sq_counter_ids,
.counter_size_in_bits = 64,
.counter_mask = BITMASK(64)
},
[PERFCOUNTER_BLOCKID__SQ] = {
.num_of_slots = 8,
.num_of_counters = sizeof(kaveri_sq_counter_ids) /
sizeof(*kaveri_sq_counter_ids),
.counter_ids = kaveri_sq_counter_ids,
.counter_size_in_bits = 64,
.counter_mask = BITMASK(64)
},
};
static struct perf_counter_block carrizo_blocks[PERFCOUNTER_BLOCKID__MAX] = {
[PERFCOUNTER_BLOCKID__SQ] = {
.num_of_slots = 8,
.num_of_counters = sizeof(carrizo_sq_counter_ids)/sizeof(*carrizo_sq_counter_ids),
.counter_ids = carrizo_sq_counter_ids,
.counter_size_in_bits = 64,
.counter_mask = BITMASK(64)
},
[PERFCOUNTER_BLOCKID__SQ] = {
.num_of_slots = 8,
.num_of_counters = sizeof(carrizo_sq_counter_ids) /
sizeof(*carrizo_sq_counter_ids),
.counter_ids = carrizo_sq_counter_ids,
.counter_size_in_bits = 64,
.counter_mask = BITMASK(64)
},
};
static struct perf_counter_block fiji_blocks[PERFCOUNTER_BLOCKID__MAX] = {
[PERFCOUNTER_BLOCKID__SQ] = {
.num_of_slots = 8,
.num_of_counters = sizeof(fiji_sq_counter_ids) / sizeof(*fiji_sq_counter_ids),
.num_of_counters = sizeof(fiji_sq_counter_ids) /
sizeof(*fiji_sq_counter_ids),
.counter_ids = fiji_sq_counter_ids,
.counter_size_in_bits = 64,
.counter_mask = BITMASK(64)
@@ -159,71 +161,72 @@ static struct perf_counter_block fiji_blocks[PERFCOUNTER_BLOCKID__MAX] = {
};
static struct perf_counter_block hawaii_blocks[PERFCOUNTER_BLOCKID__MAX] = {
[PERFCOUNTER_BLOCKID__SQ] = {
.num_of_slots = 8,
.num_of_counters =
sizeof(hawaii_sq_counter_ids) / sizeof(*hawaii_sq_counter_ids),
.counter_ids = hawaii_sq_counter_ids,
.counter_size_in_bits = 64,
.counter_mask = BITMASK(64)
},
[PERFCOUNTER_BLOCKID__SQ] = {
.num_of_slots = 8,
.num_of_counters = sizeof(hawaii_sq_counter_ids) /
sizeof(*hawaii_sq_counter_ids),
.counter_ids = hawaii_sq_counter_ids,
.counter_size_in_bits = 64,
.counter_mask = BITMASK(64)
},
};
static struct perf_counter_block polaris_blocks[PERFCOUNTER_BLOCKID__MAX] = {
[PERFCOUNTER_BLOCKID__SQ] = {
.num_of_slots = 8,
.num_of_counters = sizeof(polaris_sq_counter_ids) /
sizeof(*polaris_sq_counter_ids),
.counter_ids = polaris_sq_counter_ids,
.counter_size_in_bits = 64,
.counter_mask = BITMASK(64)
},
[PERFCOUNTER_BLOCKID__SQ] = {
.num_of_slots = 8,
.num_of_counters = sizeof(polaris_sq_counter_ids) /
sizeof(*polaris_sq_counter_ids),
.counter_ids = polaris_sq_counter_ids,
.counter_size_in_bits = 64,
.counter_mask = BITMASK(64)
},
};
HSAKMT_STATUS
get_block_properties(uint16_t dev_id,
enum perf_block_id block_id,
struct perf_counter_block *block)
enum perf_block_id block_id,
struct perf_counter_block *block)
{
HSAKMT_STATUS rc = HSAKMT_STATUS_SUCCESS;
if (block_id > PERFCOUNTER_BLOCKID__MAX || block_id < PERFCOUNTER_BLOCKID__FIRST)
return HSAKMT_STATUS_INVALID_PARAMETER;
HSAKMT_STATUS rc = HSAKMT_STATUS_SUCCESS;
if (block_id > PERFCOUNTER_BLOCKID__MAX || block_id < PERFCOUNTER_BLOCKID__FIRST)
return HSAKMT_STATUS_INVALID_PARAMETER;
/* To avoid the long list, we read the 12 most significant digits of DID
* to identify the GPU instead of listing the complete 16 bits. If one day
* 12-bits is not good enough to distinguish the GPU, change the code here.
*/
switch(dev_id >> 4) {
case 0x130:
case 0x131:
*block = kaveri_blocks[block_id];
break;
/* To avoid the long list, we read the 12 most significant digits of DID
* to identify the GPU instead of listing the complete 16 bits. If one
* day 12-bits is not good enough to distinguish the GPU, change the
* code here.
*/
switch(dev_id >> 4) {
case 0x130:
case 0x131:
*block = kaveri_blocks[block_id];
break;
case 0x987:
*block = carrizo_blocks[block_id];
break;
case 0x987:
*block = carrizo_blocks[block_id];
break;
case 0x730:
*block = fiji_blocks[block_id];
break;
case 0x730:
*block = fiji_blocks[block_id];
break;
case 0x67A:
case 0x67B:
*block = hawaii_blocks[block_id];
break;
case 0x67A:
case 0x67B:
*block = hawaii_blocks[block_id];
break;
case 0x67C:
case 0x67D:
case 0x67E:
case 0x67F:
*block = polaris_blocks[block_id];
break;
case 0x67C:
case 0x67D:
case 0x67E:
case 0x67F:
*block = polaris_blocks[block_id];
break;
default:
rc = HSAKMT_STATUS_INVALID_PARAMETER;
}
default:
rc = HSAKMT_STATUS_INVALID_PARAMETER;
}
return rc;
return rc;
}
+10 -10
Просмотреть файл
@@ -29,22 +29,22 @@
#include "libhsakmt.h"
enum perf_block_id {
PERFCOUNTER_BLOCKID__FIRST = 0,
PERFCOUNTER_BLOCKID__SQ = PERFCOUNTER_BLOCKID__FIRST,
PERFCOUNTER_BLOCKID__MAX
PERFCOUNTER_BLOCKID__FIRST = 0,
PERFCOUNTER_BLOCKID__SQ = PERFCOUNTER_BLOCKID__FIRST,
PERFCOUNTER_BLOCKID__MAX
};
struct perf_counter_block {
uint32_t num_of_slots;
uint32_t num_of_counters;
uint32_t *counter_ids;
uint32_t counter_size_in_bits;
uint64_t counter_mask;
uint32_t num_of_slots;
uint32_t num_of_counters;
uint32_t *counter_ids;
uint32_t counter_size_in_bits;
uint64_t counter_mask;
};
HSAKMT_STATUS
get_block_properties(uint16_t dev_id,
enum perf_block_id block_id,
struct perf_counter_block *block);
enum perf_block_id block_id,
struct perf_counter_block *block);
#endif // PMC_TABLE_H