summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOded Gabbay <oded.gabbay@amd.com>2014-12-29 15:37:42 +0200
committerOded Gabbay <oded.gabbay@amd.com>2014-12-29 15:37:42 +0200
commit94c0329fc4f37197a139fbd70cee621299f5036f (patch)
treefffc44564987ac21794266e5de6a240e870541e6
parent9f647b07ff9c355e7e9ff6fd82b82fb87187cfc6 (diff)
Move from direct call to kfd_ioctl to wrapping kmtIoctl
Signed-off-by: Oded Gabbay <oded.gabbay@amd.com>
-rw-r--r--src/Makefile3
-rw-r--r--src/fmm.c2
-rw-r--r--src/libhsakmt.c18
-rw-r--r--src/libhsakmt.h3
-rw-r--r--src/memory.c2
-rw-r--r--src/openclose.c5
-rw-r--r--src/queues.c6
-rw-r--r--src/time.c2
-rw-r--r--src/version.c2
9 files changed, 28 insertions, 15 deletions
diff --git a/src/Makefile b/src/Makefile
index b74312a..5608ab7 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -18,7 +18,8 @@ CFLAGS += -std=gnu99 -ggdb -pthread -fvisibility=hidden -O2
LDFLAGS += -lrt -pthread -Wl,--version-script=libhsakmt.ver -Wl,-soname=$(LIB_NAME).$(LIB_MAJOR_VER)
OBJS = debug.o globals.o memory.o perfctr.o time.o version.o \
- events.o openclose.o queues.o topology.o fmm.o pmc_table.o
+ events.o openclose.o queues.o topology.o fmm.o pmc_table.o \
+ libhsakmt.o
.PHONY: all lnx lnx64a clean
diff --git a/src/fmm.c b/src/fmm.c
index a274c32..a90fb95 100644
--- a/src/fmm.c
+++ b/src/fmm.c
@@ -446,7 +446,7 @@ HSAKMT_STATUS fmm_init_process_apertures(){
struct kfd_ioctl_get_process_apertures_args args;
uint8_t node_id;
- if (0 == kfd_ioctl(AMDKFD_IOC_GET_PROCESS_APERTURES, (void*)&args)){
+ if (0 == kmtIoctl(kfd_fd, AMDKFD_IOC_GET_PROCESS_APERTURES, (void*)&args)){
for(node_id = 0; node_id < args.num_of_nodes; node_id++){
gpu_mem[node_id].gpu_id = args.process_apertures[node_id].gpu_id;
gpu_mem[node_id].lds_aperture.base = PORT_UINT64_TO_VPTR(args.process_apertures[node_id].lds_base);
diff --git a/src/libhsakmt.c b/src/libhsakmt.c
new file mode 100644
index 0000000..d7f79d3
--- /dev/null
+++ b/src/libhsakmt.c
@@ -0,0 +1,18 @@
+#include <errno.h>
+#include <sys/ioctl.h>
+
+#include "libhsakmt.h"
+
+/**
+ * Call ioctl, restarting if it is interupted
+ */
+int
+kmtIoctl(int fd, unsigned long request, void *arg)
+{
+ int ret;
+
+ do {
+ ret = ioctl(fd, request, arg);
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+ return ret;
+}
diff --git a/src/libhsakmt.h b/src/libhsakmt.h
index 4d337e6..fa8dc0e 100644
--- a/src/libhsakmt.h
+++ b/src/libhsakmt.h
@@ -64,7 +64,7 @@ extern pthread_mutex_t hsakmt_mutex;
HSAKMT_STATUS validate_nodeid(uint32_t nodeid, uint32_t *gpu_id);
uint16_t get_device_id_by_node(HSAuint32 node_id);
-extern int kfd_ioctl(int cmdcode, void* data);
+extern int kmtIoctl(int fd, unsigned long request, void *arg);
/* Void pointer arithmetic (or remove -Wpointer-arith to allow void pointers arithmetic) */
#define VOID_PTR_ADD32(ptr,n) (void*)((uint32_t*)(ptr) + n)/*ptr + offset*/
@@ -72,5 +72,4 @@ extern int kfd_ioctl(int cmdcode, void* data);
#define VOID_PTR_SUB(ptr,n) (void*)((uint8_t*)(ptr) - n)/*ptr - offset*/
#define VOID_PTRS_SUB(ptr1,ptr2) (uint64_t)((uint8_t*)(ptr1) - (uint8_t*)(ptr2)) /*ptr1 - ptr2*/
-
#endif
diff --git a/src/memory.c b/src/memory.c
index 0b73b52..d65730a 100644
--- a/src/memory.c
+++ b/src/memory.c
@@ -68,7 +68,7 @@ hsaKmtSetMemoryPolicy(
args.alternate_aperture_base = (uintptr_t)MemoryAddressAlternate;
args.alternate_aperture_size = MemorySizeInBytes;
- int err = kfd_ioctl(AMDKFD_IOC_SET_MEMORY_POLICY, &args);
+ int err = kmtIoctl(kfd_fd, AMDKFD_IOC_SET_MEMORY_POLICY, &args);
return (err == -1) ? HSAKMT_STATUS_ERROR : HSAKMT_STATUS_SUCCESS;
}
diff --git a/src/openclose.c b/src/openclose.c
index 8290d00..d5b91e2 100644
--- a/src/openclose.c
+++ b/src/openclose.c
@@ -110,8 +110,3 @@ hsaKmtCloseKFD(void)
return result;
}
-
-extern int kfd_ioctl(int cmdcode, void* data)
-{
- return ioctl(kfd_fd, cmdcode, data);
-}
diff --git a/src/queues.c b/src/queues.c
index be250a2..1feb9ba 100644
--- a/src/queues.c
+++ b/src/queues.c
@@ -107,7 +107,7 @@ hsaKmtCreateQueue(
args.queue_percentage = QueuePercentage;
args.queue_priority = Priority;
- err = kfd_ioctl(AMDKFD_IOC_CREATE_QUEUE, &args);
+ err = kmtIoctl(kfd_fd, AMDKFD_IOC_CREATE_QUEUE, &args);
if (err == -1)
{
@@ -166,7 +166,7 @@ hsaKmtUpdateQueue(
arg.queue_percentage = QueuePercentage;
arg.queue_priority = Priority;
- int err = kfd_ioctl(AMDKFD_IOC_UPDATE_QUEUE, &arg);
+ int err = kmtIoctl(kfd_fd, AMDKFD_IOC_UPDATE_QUEUE, &arg);
if (err == -1)
{
return HSAKMT_STATUS_ERROR;
@@ -193,7 +193,7 @@ hsaKmtDestroyQueue(
args.queue_id = q->queue_id;
- int err = kfd_ioctl(AMDKFD_IOC_DESTROY_QUEUE, &args);
+ int err = kmtIoctl(kfd_fd, AMDKFD_IOC_DESTROY_QUEUE, &args);
if (err == -1)
{
diff --git a/src/time.c b/src/time.c
index 37e070d..45709f9 100644
--- a/src/time.c
+++ b/src/time.c
@@ -46,7 +46,7 @@ hsaKmtGetClockCounters(
args.gpu_id = gpu_id;
- err = kfd_ioctl(AMDKFD_IOC_GET_CLOCK_COUNTERS, &args);
+ err = kmtIoctl(kfd_fd, AMDKFD_IOC_GET_CLOCK_COUNTERS, &args);
if (err < 0) {
result = HSAKMT_STATUS_ERROR;
} else {
diff --git a/src/version.c b/src/version.c
index 8908b17..95bfec6 100644
--- a/src/version.c
+++ b/src/version.c
@@ -39,7 +39,7 @@ hsaKmtGetVersion(
struct kfd_ioctl_get_version_args args;
memset(&args, 0, sizeof(args));
- if (kfd_ioctl(AMDKFD_IOC_GET_VERSION, &args) == -1)
+ if (kmtIoctl(kfd_fd, AMDKFD_IOC_GET_VERSION, &args) == -1)
return HSAKMT_STATUS_ERROR;
VersionInfo->KernelInterfaceMajorVersion = args.major_version;