Adding support for mmap events page from Thunk

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


[ROCm/ROCR-Runtime commit: b27de08442]
此提交包含在:
Ben Goz
2015-03-18 15:33:43 +02:00
父節點 21f01aaf02
當前提交 d8a1df836d
共有 2 個檔案被更改,包括 18 行新增3 行删除
+2 -2
查看文件
@@ -170,13 +170,13 @@ struct kfd_ioctl_dbg_wave_control_args {
#define KFD_IOC_WAIT_RESULT_FAIL 2
struct kfd_ioctl_create_event_args {
uint64_t event_trigger_address; /* from KFD - signal events only */
uint64_t event_page_offset; /* from KFD */
uint32_t event_trigger_data; /* from KFD - signal events only */
uint32_t event_type; /* to KFD */
uint32_t auto_reset; /* to KFD */
uint32_t node_id; /* to KFD - only valid for certain event types */
uint32_t event_id; /* from KFD */
uint32_t pad;
uint32_t event_slot_index; /* from KFD */
};
struct kfd_ioctl_destroy_event_args {
+16 -1
查看文件
@@ -29,8 +29,11 @@
#include <time.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mman.h>
#include "linux/kfd_ioctl.h"
static HSAuint64 *events_page = NULL;
static bool IsSystemEventType(HSA_EVENTTYPE type)
{
// Debug events behave as signal events.
@@ -73,10 +76,22 @@ hsaKmtCreateEvent(
return HSAKMT_STATUS_ERROR;
}
if (events_page == NULL && args.event_page_offset > 0) {
events_page = mmap(NULL, 4096, PROT_WRITE | PROT_READ,
MAP_SHARED, kfd_fd, args.event_page_offset);
if (events_page == NULL) {
hsaKmtDestroyEvent(e);
return HSAKMT_STATUS_ERROR;
}
}
if (args.event_page_offset > 0 && args.event_slot_index < 256)
e->EventData.HWData2 = (HSAuint64)&events_page[args.event_slot_index];
e->EventId = args.event_id;
e->EventData.EventType = EventDesc->EventType;
e->EventData.HWData1 = args.event_id;
e->EventData.HWData2 = args.event_trigger_address;
e->EventData.HWData3 = args.event_trigger_data;
if (IsSignaled && !IsSystemEventType(e->EventData.EventType)) {