Add exclusive trace access

Signed-off-by: Alexey Skidanov <Alexey.Skidanov@amd.com>


[ROCm/ROCR-Runtime commit: 0ecaa96523]
This commit is contained in:
Alexey Skidanov
2014-12-08 17:05:56 +02:00
committed by Oded Gabbay
parent f16b449d51
commit cdfe250500
2 changed files with 35 additions and 2 deletions
+13
View File
@@ -33,6 +33,8 @@
#include "fmm.h" #include "fmm.h"
static const char kfd_device_name[] = "/dev/kfd"; static const char kfd_device_name[] = "/dev/kfd";
static const char tmp_file[] = "/var/lock/.amd_hsa_thunk_lock";
int amd_hsa_thunk_lock_fd = 0;
HSAKMT_STATUS HSAKMT_STATUS
HSAKMTAPI HSAKMTAPI
@@ -59,6 +61,11 @@ hsaKmtOpenKFD(void)
{ {
result = HSAKMT_STATUS_KERNEL_IO_CHANNEL_NOT_OPENED; result = HSAKMT_STATUS_KERNEL_IO_CHANNEL_NOT_OPENED;
} }
amd_hsa_thunk_lock_fd = open(tmp_file,
O_CREAT | //create the file if it's not present.
O_RDWR, //only need write access for the internal locking semantics.
S_IRUSR | S_IWUSR); //permissions on the file, 600 here.
} }
else else
{ {
@@ -84,6 +91,12 @@ hsaKmtCloseKFD(void)
if (--kfd_open_count == 0) if (--kfd_open_count == 0)
{ {
close(kfd_fd); close(kfd_fd);
if (amd_hsa_thunk_lock_fd > 0) {
close(amd_hsa_thunk_lock_fd);
unlink(tmp_file);
}
} }
result = HSAKMT_STATUS_SUCCESS; result = HSAKMT_STATUS_SUCCESS;
+22 -2
View File
@@ -27,6 +27,7 @@
#include "libhsakmt.h" #include "libhsakmt.h"
#include "pmc_table.h" #include "pmc_table.h"
#include "linux/kfd_ioctl.h" #include "linux/kfd_ioctl.h"
#include <unistd.h>
#define BITS_PER_BYTE CHAR_BIT #define BITS_PER_BYTE CHAR_BIT
@@ -43,6 +44,8 @@ struct perf_trace {
enum perf_trace_state state; enum perf_trace_state state;
}; };
extern int amd_hsa_thunk_lock_fd;
static HsaCounterProperties *counter_props[MAX_NODES] = {NULL}; static HsaCounterProperties *counter_props[MAX_NODES] = {NULL};
static int blockid2uuid(enum perf_block_id block_id, HSA_UUID *uuid) static int blockid2uuid(enum perf_block_id block_id, HSA_UUID *uuid)
@@ -248,7 +251,15 @@ hsaKmtPmcAcquireTraceAccess(
if (trace->magic4cc != HSA_PERF_MAGIC4CC) if (trace->magic4cc != HSA_PERF_MAGIC4CC)
return HSAKMT_STATUS_INVALID_HANDLE; return HSAKMT_STATUS_INVALID_HANDLE;
return HSAKMT_STATUS_SUCCESS; if (amd_hsa_thunk_lock_fd > 0) {
if (lockf( amd_hsa_thunk_lock_fd, F_TLOCK, 0 ) != 0)
return HSAKMT_STATUS_ERROR;
else
return HSAKMT_STATUS_SUCCESS;
}
else {
return HSAKMT_STATUS_ERROR;
}
} }
@@ -274,7 +285,16 @@ hsaKmtPmcReleaseTraceAccess(
if (trace->magic4cc != HSA_PERF_MAGIC4CC) if (trace->magic4cc != HSA_PERF_MAGIC4CC)
return HSAKMT_STATUS_INVALID_HANDLE; return HSAKMT_STATUS_INVALID_HANDLE;
return HSAKMT_STATUS_SUCCESS; if (amd_hsa_thunk_lock_fd > 0) {
if (lockf( amd_hsa_thunk_lock_fd, F_ULOCK, 0 ) != 0)
return HSAKMT_STATUS_ERROR;
else
return HSAKMT_STATUS_SUCCESS;
}
else {
return HSAKMT_STATUS_ERROR;
}
} }