Guest User

Untitled

a guest
Mar 2nd, 2026
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 7.16 KB | None | 0 0
  1. From 7b279da44ac7f838876f0038a081e076eee4b751 Mon Sep 17 00:00:00 2001
  2. From: Leo Li <[email protected]>
  3. Date: Mon, 2 Mar 2026 16:47:05 -0500
  4. Subject: [PATCH] DEBUG: Add some trace events
  5.  
  6. ---
  7. .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  6 +++
  8.  .../amd/display/amdgpu_dm/amdgpu_dm_trace.h   | 23 ++++++++
  9.  drivers/gpu/drm/drm_atomic_helper.c           |  5 ++
  10.  drivers/gpu/drm/drm_atomic_uapi.c             |  3 ++
  11.  drivers/gpu/drm/drm_trace.h                   | 53 +++++++++++++++++--
  12.  drivers/gpu/drm/drm_vblank.c                  |  2 +-
  13.  6 files changed, 86 insertions(+), 6 deletions(-)
  14.  
  15. diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
  16. index 50a10b4fbb3ff..067245adccdae 100644
  17. --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
  18. +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
  19. @@ -9513,6 +9513,8 @@ static void prepare_flip_isr(struct amdgpu_crtc *acrtc)
  20.     drm_dbg_state(acrtc->base.dev,
  21.               "crtc:%d, pflip_stat:AMDGPU_FLIP_SUBMITTED\n",
  22.               acrtc->crtc_id);
  23. +
  24. +   trace_amdgpu_dm_event_arm(acrtc->event, acrtc->base.index, AMDGPU_FLIP_SUBMITTED, "flip");
  25.  }
  26.  
  27.  static void update_freesync_state_on_stream(
  28. @@ -10131,6 +10133,10 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
  29.             drm_crtc_vblank_get(pcrtc);
  30.             acrtc_attach->event = acrtc_attach->base.state->event;
  31.             acrtc_attach->base.state->event = NULL;
  32. +           trace_amdgpu_dm_event_arm(acrtc_attach->event,
  33. +                         acrtc_attach->base.index,
  34. +                         acrtc_attach->pflip_status,
  35. +                         "cursor");
  36.         }
  37.         spin_unlock_irqrestore(&pcrtc->dev->event_lock, flags);
  38.     }
  39. diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_trace.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_trace.h
  40. index aa56fd6d56c34..2984be24baa52 100644
  41. --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_trace.h
  42. +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_trace.h
  43. @@ -753,6 +753,29 @@ TRACE_EVENT(amdgpu_dm_brightness,
  44.     )
  45.  );
  46.  
  47. +TRACE_EVENT(amdgpu_dm_event_arm,
  48. +   TP_PROTO(struct drm_pending_vblank_event *e, int crtc_id, int pflip_status, const char *site),
  49. +   TP_ARGS(e, crtc_id, pflip_status, site),
  50. +   TP_STRUCT__entry(
  51. +       __field(struct drm_pending_vblank_event *, event)
  52. +       __field(int, crtc_id)
  53. +       __field(int, pflip_status)
  54. +       __string(site, site)
  55. +   ),
  56. +   TP_fast_assign(
  57. +       __entry->event = e;
  58. +       __entry->crtc_id = crtc_id;
  59. +       __entry->pflip_status = pflip_status;
  60. +       __assign_str(site);
  61. +   ),
  62. +   TP_printk("event=%p crtc_id=%d pflip_status=%d site=%s",
  63. +         __entry->event,
  64. +         __entry->crtc_id,
  65. +         __entry->pflip_status,
  66. +         __get_str(site)
  67. +   )
  68. +);
  69. +
  70.  #endif /* _AMDGPU_DM_TRACE_H_ */
  71.  
  72.  #undef TRACE_INCLUDE_PATH
  73. diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
  74. index e641fcf8c5683..a6503d0b97706 100644
  75. --- a/drivers/gpu/drm/drm_atomic_helper.c
  76. +++ b/drivers/gpu/drm/drm_atomic_helper.c
  77. @@ -47,6 +47,7 @@
  78.  
  79.  #include "drm_crtc_helper_internal.h"
  80.  #include "drm_crtc_internal.h"
  81. +#include "drm_trace.h"
  82.  
  83.  /**
  84.   * DOC: overview
  85. @@ -1879,7 +1880,10 @@ void drm_atomic_helper_wait_for_flip_done(struct drm_device *dev,
  86.         if (!crtc || !commit)
  87.             continue;
  88.  
  89. +       trace_drm_vblank_dbg_wait_flipdone_start(crtc->index);
  90.         ret = wait_for_completion_timeout(&commit->flip_done, 10 * HZ);
  91. +       trace_drm_vblank_dbg_wait_flipdone_end(crtc->index,
  92. +                              jiffies_to_msecs(ret));
  93.         if (ret == 0)
  94.             drm_err(dev, "[CRTC:%d:%s] flip_done timed out\n",
  95.                 crtc->base.id, crtc->name);
  96. @@ -2482,6 +2486,7 @@ int drm_atomic_helper_setup_commit(struct drm_atomic_state *state,
  97.                 return -ENOMEM;
  98.  
  99.             new_crtc_state->event = commit->event;
  100. +           trace_drm_vblank_dbg_event_created(new_crtc_state->event, crtc->index);
  101.         }
  102.  
  103.         new_crtc_state->event->base.completion = &commit->flip_done;
  104. diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
  105. index b2cb5ae5a1392..4e35d128828dc 100644
  106. --- a/drivers/gpu/drm/drm_atomic_uapi.c
  107. +++ b/drivers/gpu/drm/drm_atomic_uapi.c
  108. @@ -43,6 +43,7 @@
  109.  #include <linux/file.h>
  110.  
  111.  #include "drm_crtc_internal.h"
  112. +#include "drm_trace.h"
  113.  
  114.  /**
  115.   * DOC: overview
  116. @@ -941,6 +942,8 @@ static struct drm_pending_vblank_event *create_vblank_event(
  117.     e->event.vbl.crtc_id = crtc->base.id;
  118.     e->event.vbl.user_data = user_data;
  119.  
  120. +   trace_drm_vblank_dbg_event_created(e, crtc->index);
  121. +
  122.     return e;
  123.  }
  124.  
  125. diff --git a/drivers/gpu/drm/drm_trace.h b/drivers/gpu/drm/drm_trace.h
  126. index 11c6dd577e8ed..f0dca8a42ab10 100644
  127. --- a/drivers/gpu/drm/drm_trace.h
  128. +++ b/drivers/gpu/drm/drm_trace.h
  129. @@ -49,21 +49,64 @@ TRACE_EVENT(drm_vblank_event_queued,
  130.               __entry->seq)
  131.  );
  132.  
  133. -TRACE_EVENT(drm_vblank_event_delivered,
  134. -       TP_PROTO(struct drm_file *file, int crtc, unsigned int seq),
  135. -       TP_ARGS(file, crtc, seq),
  136. +TRACE_EVENT(drm_vblank_dbg_event_delivered,
  137. +       TP_PROTO(void *e, struct drm_file *file, int crtc, unsigned int seq),
  138. +       TP_ARGS(e, file, crtc, seq),
  139.         TP_STRUCT__entry(
  140. +           __field(void *, e)
  141.             __field(struct drm_file *, file)
  142.             __field(int, crtc)
  143.             __field(unsigned int, seq)
  144.             ),
  145.         TP_fast_assign(
  146. +           __entry->e = e;
  147.             __entry->file = file;
  148.             __entry->crtc = crtc;
  149.             __entry->seq = seq;
  150.             ),
  151. -       TP_printk("file=%p, crtc=%d, seq=%u", __entry->file, __entry->crtc, \
  152. -             __entry->seq)
  153. +       TP_printk("event=%p, file=%p, crtc=%d, seq=%u",
  154. +             __entry->e, __entry->file, __entry->crtc, __entry->seq)
  155. +);
  156. +
  157. +TRACE_EVENT(drm_vblank_dbg_event_created,
  158. +       TP_PROTO(void *e, int crtc),
  159. +       TP_ARGS(e, crtc),
  160. +       TP_STRUCT__entry(
  161. +           __field(void *, e)
  162. +           __field(int, crtc)
  163. +           ),
  164. +       TP_fast_assign(
  165. +           __entry->e = e;
  166. +           __entry->crtc = crtc;
  167. +           ),
  168. +       TP_printk("event=%p, crtc=%d", __entry->e, __entry->crtc)
  169. +);
  170. +
  171. +TRACE_EVENT(drm_vblank_dbg_wait_flipdone_start,
  172. +       TP_PROTO(int crtc),
  173. +       TP_ARGS(crtc),
  174. +       TP_STRUCT__entry(
  175. +           __field(int, crtc)
  176. +           ),
  177. +       TP_fast_assign(
  178. +           __entry->crtc = crtc;
  179. +           ),
  180. +       TP_printk("crtc=%d", __entry->crtc)
  181. +);
  182. +
  183. +TRACE_EVENT(drm_vblank_dbg_wait_flipdone_end,
  184. +       TP_PROTO(int crtc, unsigned int msecs),
  185. +       TP_ARGS(crtc, msecs),
  186. +       TP_STRUCT__entry(
  187. +           __field(int, crtc)
  188. +           __field(unsigned int, msecs)
  189. +           ),
  190. +       TP_fast_assign(
  191. +           __entry->crtc = crtc;
  192. +           __entry->msecs = msecs;
  193. +           ),
  194. +       TP_printk("crtc=%d, remaining_wait_ms=%u",
  195. +             __entry->crtc, __entry->msecs)
  196.  );
  197.  
  198.  #endif /* _DRM_TRACE_H_ */
  199. diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
  200. index 32d013c5c8fc6..940fab8c36775 100644
  201. --- a/drivers/gpu/drm/drm_vblank.c
  202. +++ b/drivers/gpu/drm/drm_vblank.c
  203. @@ -1059,7 +1059,7 @@ static void send_vblank_event(struct drm_device *dev,
  204.         e->event.seq.time_ns = ktime_to_ns(now);
  205.         break;
  206.     }
  207. -   trace_drm_vblank_event_delivered(e->base.file_priv, e->pipe, seq);
  208. +   trace_drm_vblank_dbg_event_delivered(e, e->base.file_priv, e->pipe, seq);
  209.     /*
  210.      * Use the same timestamp for any associated fence signal to avoid
  211.      * mismatch in timestamps for vsync & fence events triggered by the
  212. --
  213. 2.52.0
  214.  
  215.  
Advertisement
Add Comment
Please, Sign In to add comment