Initial gfx9 debugger node suspend/resume

Change-Id: I2a5dac3d02265c11f5b6985ab457e2d1caa0a033
Signed-off-by: Philip Cox <Philip.Cox@amd.com>
This commit is contained in:
Philip Cox
2018-11-06 08:06:40 -05:00
parent b2e026fce3
commit 37858f2311
5 changed files with 113 additions and 19 deletions
+10 -14
View File
@@ -633,14 +633,11 @@ hsaKmtDbgAddressWatch(
- HSAKMT_STATUS_INVALID_HANDLE if any QueueId is invalid.
*/
HSAKMT_STATUS
HSAKMTAPI
hsaKmtQueueSuspend(
HSAuint32 NumQueues, //IN
HSA_QUEUEID QueueId[], //IN
bool NoGracePeriod, //IN
bool MemFence //IN
);
HSAKMTAPI
hsaKmtNodeSuspend(
HSAuint32 Pid,
HSAuint32 NodeId,
HSAuint32 Flags);
/**
Resume the execution of a set of queues. If a queue is not
suspended by hsaKmtDbgQueueSuspend() then it remains executing.
@@ -658,12 +655,11 @@ hsaKmtQueueSuspend(
- HSAKMT_STATUS_INVALID_HANDLE if any QueueId is invalid.
*/
HSAKMT_STATUS
HSAKMTAPI
hsaKmtQueueResume(
HSAuint32 NumQueues, //IN
HSA_QUEUEID QueueId[], //IN
bool MemFence //IN
);
HSAKMTAPI
hsaKmtNodeResume(
HSAuint32 Pid,
HSAuint32 NodeId,
HSAuint32 Flags);
/**
Enable debug trap for NodeId. If QueueId is INVALID_QUEUEID then
+13
View File
@@ -75,6 +75,12 @@ typedef HSAuint64 HSA_QUEUEID;
// An HSA_QUEUEID that is never a valid queue ID.
#define INVALID_QUEUEID 0xFFFFFFFFFFFFFFFFULL
// A PID that is never a valid process ID.
#define INVALID_PID 0xFFFFFFFF
// // A HSA_NODEID that is never a valid node ID.
#define INVALID_NODEID 0xFFFFFFFF
// This is included in order to force the alignments to be 4 bytes so that
// it avoids extra padding added by the compiler when a 64-bit binary is generated.
#pragma pack(push, hsakmttypes_h, 4)
@@ -785,6 +791,13 @@ typedef enum _HSA_DBG_WAVE_LAUNCH_MODE
HSA_DBG_WAVE_LAUNCH_MODE_NUM
} HSA_DBG_WAVE_LAUNCH_MODE;
typedef enum HSA_DBG_NODE_CONTROL {
HSA_DBG_NODE_CONTROL_NO_GRACE_PERIOD = 0x01,
HSA_DBG_NODE_CONTROL_MEMORY_FENCE = 0x02,
HSA_DBG_NODE_CONTROL_UPDATE_CONTEXT = 0x04,
} HSA_DBG_NODE_CONTROL;
//This structure is hardware specific and may change in the future
typedef struct _HsaDbgWaveMsgAMDGen2
{
+30
View File
@@ -193,32 +193,62 @@ struct kfd_ioctl_dbg_wave_control_args {
/* KFD_IOC_DBG_TRAP_ENABLE:
* data1: 0=disable, 1=enable
* data2: queue ID (for future use)
* data3: unused
* data4: unused
*/
#define KFD_IOC_DBG_TRAP_ENABLE 0
/* KFD_IOC_DBG_TRAP_SET_TRAP_DATA:
* data1: SPI_GDBG_TRAP_DATA0
* data2: SPI_GDBG_TRAP_DATA1
* data3: unused
* data4: unused
*/
#define KFD_IOC_DBG_TRAP_SET_TRAP_DATA 1
/* KFD_IOC_DBG_TRAP_SET_WAVE_LAUNCH_OVERRIDE:
* data1: override mode: 0=OR, 1=REPLACE
* data2: mask
* data3: unused
* data4: unused
*/
#define KFD_IOC_DBG_TRAP_SET_WAVE_LAUNCH_OVERRIDE 2
/* KFD_IOC_DBG_TRAP_SET_WAVE_LAUNCH_MODE:
* data1: 0=normal, 1=halt, 2=kill, 3=singlestep, 4=disable
* data2: unused
* data3: unused
* data4: unused
*/
#define KFD_IOC_DBG_TRAP_SET_WAVE_LAUNCH_MODE 3
#define KFD__DBG_NODE_SUSPEND_NO_GRACE 0x01
#define KFD__DBG_NODE_SUSPEND_MEMORY_FENCE 0x02
#define KFD__DBG_NODE_SUSPEND_UPDATE_CONTEXT 0x04
/* KFD_IOC_DBG_TRAP_NODE_SUSPEND:
* data1: pid
* data2: nodeid
* data3: flags no_grace=0x01 memory_fence=0x02 update_context=0x04
* data4: unused
*/
#define KFD_IOC_DBG_TRAP_NODE_SUSPEND 4
/* KFD_IOC_DBG_TRAP_NODE_RESUME:
* data1: pid
* data2: nodeid
* data3: flags no_grace=0x01 memory_fence=0x02 update_context=0x04
* data4: unused
*/
#define KFD_IOC_DBG_TRAP_NODE_RESUME 5
struct kfd_ioctl_dbg_trap_args {
__u32 gpu_id; /* to KFD */
__u32 op; /* to KFD */
__u32 data1; /* to KFD */
__u32 data2; /* to KFD */
__u32 data3; /* to KFD */
__u32 data4; /* to KFD */
};
/* Matching HSA_EVENTTYPE */