Skip to content

Commit

Permalink
drm/amdkfd: Add SMI add event helper
Browse files Browse the repository at this point in the history
To remove duplicate code, unify event message format and simplify new
event add in the following patches.

Use KFD_SMI_EVENT_MSG_SIZE to define msg size, the same size will be
used in user space to alloc the msg receive buffer.

Signed-off-by: Philip Yang <Philip.Yang@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
  • Loading branch information
Philip Yang authored and Alex Deucher committed Mar 2, 2022
1 parent 38abd56 commit d58b8a9
Showing 2 changed files with 23 additions and 46 deletions.
68 changes: 22 additions & 46 deletions drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
Original file line number Diff line number Diff line change
@@ -176,82 +176,58 @@ static void add_event_to_kfifo(struct kfd_dev *dev, unsigned int smi_event,
rcu_read_unlock();
}

void kfd_smi_event_update_gpu_reset(struct kfd_dev *dev, bool post_reset)
static void kfd_smi_event_add(struct kfd_dev *dev, unsigned int event,
char *fmt, ...)
{
/*
* GpuReset msg = Reset seq number (incremented for
* every reset message sent before GPU reset).
* 1 byte event + 1 byte space + 8 bytes seq num +
* 1 byte \n + 1 byte \0 = 12
*/
char fifo_in[12];
char fifo_in[KFD_SMI_EVENT_MSG_SIZE];
int len;
unsigned int event;
va_list args;

if (list_empty(&dev->smi_clients))
return;

memset(fifo_in, 0x0, sizeof(fifo_in));
len = snprintf(fifo_in, sizeof(fifo_in), "%x ", event);

va_start(args, fmt);
len += vsnprintf(fifo_in + len, sizeof(fifo_in) - len, fmt, args);
va_end(args);

add_event_to_kfifo(dev, event, fifo_in, len);
}

void kfd_smi_event_update_gpu_reset(struct kfd_dev *dev, bool post_reset)
{
unsigned int event;

if (post_reset) {
event = KFD_SMI_EVENT_GPU_POST_RESET;
} else {
event = KFD_SMI_EVENT_GPU_PRE_RESET;
++(dev->reset_seq_num);
}

len = snprintf(fifo_in, sizeof(fifo_in), "%x %x\n", event,
dev->reset_seq_num);

add_event_to_kfifo(dev, event, fifo_in, len);
kfd_smi_event_add(dev, event, "%x\n", dev->reset_seq_num);
}

void kfd_smi_event_update_thermal_throttling(struct kfd_dev *dev,
uint64_t throttle_bitmask)
{
/*
* ThermalThrottle msg = throttle_bitmask(8):
* thermal_interrupt_count(16):
* 1 byte event + 1 byte space + 16 byte throttle_bitmask +
* 1 byte : + 16 byte thermal_interupt_counter + 1 byte \n +
* 1 byte \0 = 37
*/
char fifo_in[37];
int len;

if (list_empty(&dev->smi_clients))
return;

len = snprintf(fifo_in, sizeof(fifo_in), "%x %llx:%llx\n",
KFD_SMI_EVENT_THERMAL_THROTTLE, throttle_bitmask,
amdgpu_dpm_get_thermal_throttling_counter(dev->adev));

add_event_to_kfifo(dev, KFD_SMI_EVENT_THERMAL_THROTTLE, fifo_in, len);
kfd_smi_event_add(dev, KFD_SMI_EVENT_THERMAL_THROTTLE, "%llx:%llx\n",
throttle_bitmask,
amdgpu_dpm_get_thermal_throttling_counter(dev->adev));
}

void kfd_smi_event_update_vmfault(struct kfd_dev *dev, uint16_t pasid)
{
struct amdgpu_task_info task_info;
/* VmFault msg = (hex)uint32_pid(8) + :(1) + task name(16) = 25 */
/* 1 byte event + 1 byte space + 25 bytes msg + 1 byte \n +
* 1 byte \0 = 29
*/
char fifo_in[29];
int len;

if (list_empty(&dev->smi_clients))
return;

memset(&task_info, 0, sizeof(struct amdgpu_task_info));
amdgpu_vm_get_task_info(dev->adev, pasid, &task_info);
/* Report VM faults from user applications, not retry from kernel */
if (!task_info.pid)
return;

len = snprintf(fifo_in, sizeof(fifo_in), "%x %x:%s\n", KFD_SMI_EVENT_VMFAULT,
task_info.pid, task_info.task_name);

add_event_to_kfifo(dev, KFD_SMI_EVENT_VMFAULT, fifo_in, len);
kfd_smi_event_add(dev, KFD_SMI_EVENT_VMFAULT, "%x:%s\n",
task_info.pid, task_info.task_name);
}

int kfd_smi_event_open(struct kfd_dev *dev, uint32_t *fd)
1 change: 1 addition & 0 deletions include/uapi/linux/kfd_ioctl.h
Original file line number Diff line number Diff line change
@@ -463,6 +463,7 @@ enum kfd_smi_event {
};

#define KFD_SMI_EVENT_MASK_FROM_INDEX(i) (1ULL << ((i) - 1))
#define KFD_SMI_EVENT_MSG_SIZE 96

struct kfd_ioctl_smi_events_args {
__u32 gpuid; /* to KFD */

0 comments on commit d58b8a9

Please sign in to comment.