Re: [PATCH 1/2] drm/amdkfd: Document and define SVM event tracing macro

2024-02-20 Thread Philip Yang

  


On 2024-02-16 15:16, Felix Kuehling
  wrote:


  
  On 2024-02-15 10:18, Philip Yang wrote:
  
  Document how to use SMI system management
interface to receive SVM

events.


Define SVM events message string format macro that could use by
user

mode for sscanf to parse the event. Add it to uAPI header file
to make

it obvious that is changing uAPI in future.


No functional changes.


Signed-off-by: Philip Yang 

---

  drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c | 51
+++---

  include/uapi/linux/kfd_ioctl.h  | 77
-

  2 files changed, 102 insertions(+), 26 deletions(-)


diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c

index d9953c2b2661..85465eb303a9 100644

--- a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c

+++ b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c

@@ -225,15 +225,16 @@ void kfd_smi_event_update_gpu_reset(struct
kfd_node *dev, bool post_reset)

  event = KFD_SMI_EVENT_GPU_PRE_RESET;

  ++(dev->reset_seq_num);

  }

-    kfd_smi_event_add(0, dev, event, "%x\n",
dev->reset_seq_num);

+    kfd_smi_event_add(0, dev, event,

+ 
KFD_EVENT_FMT_UPDATE_GPU_RESET(dev->reset_seq_num));

  }

    void kfd_smi_event_update_thermal_throttling(struct kfd_node
*dev,

   uint64_t throttle_bitmask)

  {

-    kfd_smi_event_add(0, dev, KFD_SMI_EVENT_THERMAL_THROTTLE,
"%llx:%llx\n",

-  throttle_bitmask,

- 
amdgpu_dpm_get_thermal_throttling_counter(dev->adev));

+    kfd_smi_event_add(0, dev, KFD_SMI_EVENT_THERMAL_THROTTLE,

+ 
KFD_EVENT_FMT_UPDATE_THERMAL_THROTTLING(throttle_bitmask,

+ 
amdgpu_dpm_get_thermal_throttling_counter(dev->adev)));

  }

    void kfd_smi_event_update_vmfault(struct kfd_node *dev,
uint16_t pasid)

@@ -246,8 +247,8 @@ void kfd_smi_event_update_vmfault(struct
kfd_node *dev, uint16_t pasid)

  if (!task_info.pid)

  return;

  -    kfd_smi_event_add(0, dev, KFD_SMI_EVENT_VMFAULT,
"%x:%s\n",

-  task_info.pid, task_info.task_name);

+    kfd_smi_event_add(0, dev, KFD_SMI_EVENT_VMFAULT,

+  KFD_EVENT_FMT_VMFAULT(task_info.pid,
task_info.task_name));

  }

    void kfd_smi_event_page_fault_start(struct kfd_node *node,
pid_t pid,

@@ -255,16 +256,16 @@ void kfd_smi_event_page_fault_start(struct
kfd_node *node, pid_t pid,

  ktime_t ts)

  {

  kfd_smi_event_add(pid, node,
KFD_SMI_EVENT_PAGE_FAULT_START,

-  "%lld -%d @%lx(%x) %c\n", ktime_to_ns(ts), pid,

-  address, node->id, write_fault ? 'W' : 'R');

+  KFD_EVENT_FMT_PAGEFAULT_START(ktime_to_ns(ts),
pid,

+  address, node->id, write_fault ? 'W' : 'R'));

  }

    void kfd_smi_event_page_fault_end(struct kfd_node *node,
pid_t pid,

    unsigned long address, bool migration)

  {

  kfd_smi_event_add(pid, node, KFD_SMI_EVENT_PAGE_FAULT_END,

-  "%lld -%d @%lx(%x) %c\n",
ktime_get_boottime_ns(),

-  pid, address, node->id, migration ? 'M' :
'U');

+ 
KFD_EVENT_FMT_PAGEFAULT_END(ktime_get_boottime_ns(),

+  pid, address, node->id, migration ? 'M' :
'U'));

  }

    void kfd_smi_event_migration_start(struct kfd_node *node,
pid_t pid,

@@ -274,9 +275,9 @@ void kfd_smi_event_migration_start(struct
kfd_node *node, pid_t pid,

 uint32_t trigger)

  {

  kfd_smi_event_add(pid, node, KFD_SMI_EVENT_MIGRATE_START,

-  "%lld -%d @%lx(%lx) %x->%x %x:%x %d\n",

-  

Re: [PATCH 1/2] drm/amdkfd: Document and define SVM event tracing macro

2024-02-16 Thread Felix Kuehling



On 2024-02-15 10:18, Philip Yang wrote:

Document how to use SMI system management interface to receive SVM
events.

Define SVM events message string format macro that could use by user
mode for sscanf to parse the event. Add it to uAPI header file to make
it obvious that is changing uAPI in future.

No functional changes.

Signed-off-by: Philip Yang 
---
  drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c | 51 +++---
  include/uapi/linux/kfd_ioctl.h  | 77 -
  2 files changed, 102 insertions(+), 26 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c 
b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
index d9953c2b2661..85465eb303a9 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
@@ -225,15 +225,16 @@ void kfd_smi_event_update_gpu_reset(struct kfd_node *dev, 
bool post_reset)
event = KFD_SMI_EVENT_GPU_PRE_RESET;
++(dev->reset_seq_num);
}
-   kfd_smi_event_add(0, dev, event, "%x\n", dev->reset_seq_num);
+   kfd_smi_event_add(0, dev, event,
+ KFD_EVENT_FMT_UPDATE_GPU_RESET(dev->reset_seq_num));
  }
  
  void kfd_smi_event_update_thermal_throttling(struct kfd_node *dev,

 uint64_t throttle_bitmask)
  {
-   kfd_smi_event_add(0, dev, KFD_SMI_EVENT_THERMAL_THROTTLE, "%llx:%llx\n",
- throttle_bitmask,
- amdgpu_dpm_get_thermal_throttling_counter(dev->adev));
+   kfd_smi_event_add(0, dev, KFD_SMI_EVENT_THERMAL_THROTTLE,
+ 
KFD_EVENT_FMT_UPDATE_THERMAL_THROTTLING(throttle_bitmask,
+ 
amdgpu_dpm_get_thermal_throttling_counter(dev->adev)));
  }
  
  void kfd_smi_event_update_vmfault(struct kfd_node *dev, uint16_t pasid)

@@ -246,8 +247,8 @@ void kfd_smi_event_update_vmfault(struct kfd_node *dev, 
uint16_t pasid)
if (!task_info.pid)
return;
  
-	kfd_smi_event_add(0, dev, KFD_SMI_EVENT_VMFAULT, "%x:%s\n",

- task_info.pid, task_info.task_name);
+   kfd_smi_event_add(0, dev, KFD_SMI_EVENT_VMFAULT,
+ KFD_EVENT_FMT_VMFAULT(task_info.pid, 
task_info.task_name));
  }
  
  void kfd_smi_event_page_fault_start(struct kfd_node *node, pid_t pid,

@@ -255,16 +256,16 @@ void kfd_smi_event_page_fault_start(struct kfd_node 
*node, pid_t pid,
ktime_t ts)
  {
kfd_smi_event_add(pid, node, KFD_SMI_EVENT_PAGE_FAULT_START,
- "%lld -%d @%lx(%x) %c\n", ktime_to_ns(ts), pid,
- address, node->id, write_fault ? 'W' : 'R');
+ KFD_EVENT_FMT_PAGEFAULT_START(ktime_to_ns(ts), pid,
+ address, node->id, write_fault ? 'W' : 'R'));
  }
  
  void kfd_smi_event_page_fault_end(struct kfd_node *node, pid_t pid,

  unsigned long address, bool migration)
  {
kfd_smi_event_add(pid, node, KFD_SMI_EVENT_PAGE_FAULT_END,
- "%lld -%d @%lx(%x) %c\n", ktime_get_boottime_ns(),
- pid, address, node->id, migration ? 'M' : 'U');
+ KFD_EVENT_FMT_PAGEFAULT_END(ktime_get_boottime_ns(),
+ pid, address, node->id, migration ? 'M' : 'U'));
  }
  
  void kfd_smi_event_migration_start(struct kfd_node *node, pid_t pid,

@@ -274,9 +275,9 @@ void kfd_smi_event_migration_start(struct kfd_node *node, 
pid_t pid,
   uint32_t trigger)
  {
kfd_smi_event_add(pid, node, KFD_SMI_EVENT_MIGRATE_START,
- "%lld -%d @%lx(%lx) %x->%x %x:%x %d\n",
- ktime_get_boottime_ns(), pid, start, end - start,
- from, to, prefetch_loc, preferred_loc, trigger);
+ KFD_EVENT_FMT_MIGRATE_START(ktime_get_boottime_ns(),
+ pid, start, end - start, from, to, prefetch_loc,
+ preferred_loc, trigger));
  }
  
  void kfd_smi_event_migration_end(struct kfd_node *node, pid_t pid,

@@ -284,24 +285,23 @@ void kfd_smi_event_migration_end(struct kfd_node *node, 
pid_t pid,
 uint32_t from, uint32_t to, uint32_t trigger)
  {
kfd_smi_event_add(pid, node, KFD_SMI_EVENT_MIGRATE_END,
- "%lld -%d @%lx(%lx) %x->%x %d\n",
- ktime_get_boottime_ns(), pid, start, end - start,
- from, to, trigger);
+ KFD_EVENT_FMT_MIGRATE_END(ktime_get_boottime_ns(), 
pid,
+ start, end - start, from, to, trigger));
  }
  
  void kfd_smi_event_queue_eviction(struct kfd_node *node, pid_t pid,

  uint32_t trigger)
  {
kfd_smi_event_add(pid, node, KFD_SMI_EVENT_QUEUE_EVICTION,
- "%lld -%d 

Re: [PATCH 1/2] drm/amdkfd: Document and define SVM event tracing macro

2024-02-15 Thread Philip Yang

  


On 2024-02-15 12:54, Chen, Xiaogang
  wrote:


  
  On 2/15/2024 9:18 AM, Philip Yang wrote:
  
  Caution: This message originated from an
External Source. Use proper caution when opening attachments,
clicking links, or responding.



Document how to use SMI system management interface to receive
SVM

events.


Define SVM events message string format macro that could use by
user

mode for sscanf to parse the event. Add it to uAPI header file
to make

it obvious that is changing uAPI in future.


No functional changes.


Signed-off-by: Philip Yang 

---

  drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c | 51
+++---

  include/uapi/linux/kfd_ioctl.h  | 77
-

  2 files changed, 102 insertions(+), 26 deletions(-)


diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c

index d9953c2b2661..85465eb303a9 100644

--- a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c

+++ b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c

@@ -225,15 +225,16 @@ void kfd_smi_event_update_gpu_reset(struct
kfd_node *dev, bool post_reset)

 event = KFD_SMI_EVENT_GPU_PRE_RESET;

 ++(dev->reset_seq_num);

 }

-   kfd_smi_event_add(0, dev, event, "%x\n",
dev->reset_seq_num);

+   kfd_smi_event_add(0, dev, event,

+
KFD_EVENT_FMT_UPDATE_GPU_RESET(dev->reset_seq_num));

  }


  void kfd_smi_event_update_thermal_throttling(struct kfd_node
*dev,

  uint64_t
throttle_bitmask)

  {

-   kfd_smi_event_add(0, dev,
KFD_SMI_EVENT_THERMAL_THROTTLE, "%llx:%llx\n",

- throttle_bitmask,

-
amdgpu_dpm_get_thermal_throttling_counter(dev->adev));

+   kfd_smi_event_add(0, dev,
KFD_SMI_EVENT_THERMAL_THROTTLE,

+
KFD_EVENT_FMT_UPDATE_THERMAL_THROTTLING(throttle_bitmask,

+
amdgpu_dpm_get_thermal_throttling_counter(dev->adev)));

  }


  void kfd_smi_event_update_vmfault(struct kfd_node *dev,
uint16_t pasid)

@@ -246,8 +247,8 @@ void kfd_smi_event_update_vmfault(struct
kfd_node *dev, uint16_t pasid)

 if (!task_info.pid)

 return;


-   kfd_smi_event_add(0, dev, KFD_SMI_EVENT_VMFAULT,
"%x:%s\n",

- task_info.pid, task_info.task_name);

+   kfd_smi_event_add(0, dev, KFD_SMI_EVENT_VMFAULT,

+ KFD_EVENT_FMT_VMFAULT(task_info.pid,
task_info.task_name));

  }


  void kfd_smi_event_page_fault_start(struct kfd_node *node,
pid_t pid,

@@ -255,16 +256,16 @@ void kfd_smi_event_page_fault_start(struct
kfd_node *node, pid_t pid,

 ktime_t ts)

  {

 kfd_smi_event_add(pid, node,
KFD_SMI_EVENT_PAGE_FAULT_START,

- "%lld -%d @%lx(%x) %c\n",
ktime_to_ns(ts), pid,

- address, node->id, write_fault ?
'W' : 'R');

+
KFD_EVENT_FMT_PAGEFAULT_START(ktime_to_ns(ts), pid,

+ address, node->id, write_fault ?
'W' : 'R'));

  }


  void kfd_smi_event_page_fault_end(struct kfd_node *node, pid_t
pid,

   unsigned long address, bool
migration)

  {

 kfd_smi_event_add(pid, node,
KFD_SMI_EVENT_PAGE_FAULT_END,

- "%lld -%d @%lx(%x) %c\n",
ktime_get_boottime_ns(),

- pid, address, node->id, migration ?
'M' : 'U');

+
KFD_EVENT_FMT_PAGEFAULT_END(ktime_get_boottime_ns(),

+ pid, address, node->id, 

Re: [PATCH 1/2] drm/amdkfd: Document and define SVM event tracing macro

2024-02-15 Thread Chen, Xiaogang



On 2/15/2024 9:18 AM, Philip Yang wrote:

Caution: This message originated from an External Source. Use proper caution 
when opening attachments, clicking links, or responding.


Document how to use SMI system management interface to receive SVM
events.

Define SVM events message string format macro that could use by user
mode for sscanf to parse the event. Add it to uAPI header file to make
it obvious that is changing uAPI in future.

No functional changes.

Signed-off-by: Philip Yang 
---
  drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c | 51 +++---
  include/uapi/linux/kfd_ioctl.h  | 77 -
  2 files changed, 102 insertions(+), 26 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c 
b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
index d9953c2b2661..85465eb303a9 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
@@ -225,15 +225,16 @@ void kfd_smi_event_update_gpu_reset(struct kfd_node *dev, 
bool post_reset)
 event = KFD_SMI_EVENT_GPU_PRE_RESET;
 ++(dev->reset_seq_num);
 }
-   kfd_smi_event_add(0, dev, event, "%x\n", dev->reset_seq_num);
+   kfd_smi_event_add(0, dev, event,
+ KFD_EVENT_FMT_UPDATE_GPU_RESET(dev->reset_seq_num));
  }

  void kfd_smi_event_update_thermal_throttling(struct kfd_node *dev,
  uint64_t throttle_bitmask)
  {
-   kfd_smi_event_add(0, dev, KFD_SMI_EVENT_THERMAL_THROTTLE, "%llx:%llx\n",
- throttle_bitmask,
- amdgpu_dpm_get_thermal_throttling_counter(dev->adev));
+   kfd_smi_event_add(0, dev, KFD_SMI_EVENT_THERMAL_THROTTLE,
+ 
KFD_EVENT_FMT_UPDATE_THERMAL_THROTTLING(throttle_bitmask,
+ 
amdgpu_dpm_get_thermal_throttling_counter(dev->adev)));
  }

  void kfd_smi_event_update_vmfault(struct kfd_node *dev, uint16_t pasid)
@@ -246,8 +247,8 @@ void kfd_smi_event_update_vmfault(struct kfd_node *dev, 
uint16_t pasid)
 if (!task_info.pid)
 return;

-   kfd_smi_event_add(0, dev, KFD_SMI_EVENT_VMFAULT, "%x:%s\n",
- task_info.pid, task_info.task_name);
+   kfd_smi_event_add(0, dev, KFD_SMI_EVENT_VMFAULT,
+ KFD_EVENT_FMT_VMFAULT(task_info.pid, 
task_info.task_name));
  }

  void kfd_smi_event_page_fault_start(struct kfd_node *node, pid_t pid,
@@ -255,16 +256,16 @@ void kfd_smi_event_page_fault_start(struct kfd_node 
*node, pid_t pid,
 ktime_t ts)
  {
 kfd_smi_event_add(pid, node, KFD_SMI_EVENT_PAGE_FAULT_START,
- "%lld -%d @%lx(%x) %c\n", ktime_to_ns(ts), pid,
- address, node->id, write_fault ? 'W' : 'R');
+ KFD_EVENT_FMT_PAGEFAULT_START(ktime_to_ns(ts), pid,
+ address, node->id, write_fault ? 'W' : 'R'));
  }

  void kfd_smi_event_page_fault_end(struct kfd_node *node, pid_t pid,
   unsigned long address, bool migration)
  {
 kfd_smi_event_add(pid, node, KFD_SMI_EVENT_PAGE_FAULT_END,
- "%lld -%d @%lx(%x) %c\n", ktime_get_boottime_ns(),
- pid, address, node->id, migration ? 'M' : 'U');
+ KFD_EVENT_FMT_PAGEFAULT_END(ktime_get_boottime_ns(),
+ pid, address, node->id, migration ? 'M' : 'U'));
  }

  void kfd_smi_event_migration_start(struct kfd_node *node, pid_t pid,
@@ -274,9 +275,9 @@ void kfd_smi_event_migration_start(struct kfd_node *node, 
pid_t pid,
uint32_t trigger)
  {
 kfd_smi_event_add(pid, node, KFD_SMI_EVENT_MIGRATE_START,
- "%lld -%d @%lx(%lx) %x->%x %x:%x %d\n",
- ktime_get_boottime_ns(), pid, start, end - start,
- from, to, prefetch_loc, preferred_loc, trigger);
+ KFD_EVENT_FMT_MIGRATE_START(ktime_get_boottime_ns(),
+ pid, start, end - start, from, to, prefetch_loc,
+ preferred_loc, trigger));
  }

  void kfd_smi_event_migration_end(struct kfd_node *node, pid_t pid,
@@ -284,24 +285,23 @@ void kfd_smi_event_migration_end(struct kfd_node *node, 
pid_t pid,
  uint32_t from, uint32_t to, uint32_t trigger)
  {
 kfd_smi_event_add(pid, node, KFD_SMI_EVENT_MIGRATE_END,
- "%lld -%d @%lx(%lx) %x->%x %d\n",
- ktime_get_boottime_ns(), pid, start, end - start,
- from, to, trigger);
+ KFD_EVENT_FMT_MIGRATE_END(ktime_get_boottime_ns(), 
pid,
+ start, end - start, from, to, trigger));
  }

  void kfd_smi_event_queue_eviction(struct kfd_node *node, pid_t pid,