On Tue, 24 Dec 2024, Gustavo Sousa <gustavo.sousa@xxxxxxxxx> wrote: > Quoting Ville Syrjala (2024-12-19 10:08:25-03:00) >>From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> >> >>Include the standard "[CRTC:...]" information in the scaler debugs >>to make life easier. > > Drive-by comment (and going a bit off-topic): > > $ git grep '\[[A-Z]\+:%d:%s]' -- drivers/gpu/drm | wc -l > 600 > > Has someone already considered creating DRM_*_FMT and DRM_*_ARG() for > those? E.g. DRM_CRTC_FMT and CRM_CRTC_ARG(crtc->base), which, IMO, would > be easier to use and arguably more concise. Personally, I'm not in favour. I dislike having to concatenate the string constants all over the place. > I tried doing a quick search on lore.kernel.org/dri-devel, but I'm not > sure what would be good search terms to find previous attempts to see > possible arguments against it. We've gone through this a number of times, and some of the other options are: - Add allocated debug string to the objects, e.g. crtc->debug or crtc->id and print it with %s. It also works when you want to print the info of e.g. both the connector and the encoder. - Add function pointers for debug logging in the drm objects, and have the drm_dbg* family of functions use them based on the type passed to it with generics. You'd do drm_dbg_kms(connector, "foo\n"); and that would add the [CONNECTOR:...] prefix. Falls short when you want to print the info of multiple objects. - Object specific debug logging macros. connector_dbg() etc. I'm strongly against the proliferation of logging macros. All the variants (like once, ratelimited, etc.) get multiplied by the number of object types. (Yes, I also dislike the gt/guc macros, but I digress.) And this also doesn't solve the logging of multiple objects at once. - Add printk format specifiers. There's apparently no way to do this in a human readable way, as anything nice throws off compiler printf format checks. So you end up with stuff like %pXYZ where the XYZ are meaningless magic letters. And they'd need to be implemented in kernel core. BR, Jani. > > -- > Gustavo Sousa > >> >>Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> >>--- >> drivers/gpu/drm/i915/display/skl_scaler.c | 25 +++++++++++++++-------- >> 1 file changed, 16 insertions(+), 9 deletions(-) >> >>diff --git a/drivers/gpu/drm/i915/display/skl_scaler.c b/drivers/gpu/drm/i915/display/skl_scaler.c >>index cbc71e44fcbb..f6d76ef1a854 100644 >>--- a/drivers/gpu/drm/i915/display/skl_scaler.c >>+++ b/drivers/gpu/drm/i915/display/skl_scaler.c >>@@ -166,7 +166,8 @@ skl_update_scaler(struct intel_crtc_state *crtc_state, bool force_detach, >> if (DISPLAY_VER(display) >= 9 && crtc_state->hw.enable && >> need_scaler && adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) { >> drm_dbg_kms(display->drm, >>- "Pipe/Plane scaling not supported with IF-ID mode\n"); >>+ "[CRTC:%d:%s] scaling not supported with IF-ID mode\n", >>+ crtc->base.base.id, crtc->base.name); >> return -EINVAL; >> } >> >>@@ -186,8 +187,9 @@ skl_update_scaler(struct intel_crtc_state *crtc_state, bool force_detach, >> scaler_state->scalers[*scaler_id].in_use = false; >> >> drm_dbg_kms(display->drm, >>- "scaler_user index %u.%u: " >>+ "[CRTC:%d:%s] scaler_user index %u.%u: " >> "Staged freeing scaler id %d scaler_users = 0x%x\n", >>+ crtc->base.base.id, crtc->base.name, >> crtc->pipe, scaler_user, *scaler_id, >> scaler_state->scaler_users); >> *scaler_id = -1; >>@@ -207,8 +209,9 @@ skl_update_scaler(struct intel_crtc_state *crtc_state, bool force_detach, >> src_w > max_src_w || src_h > max_src_h || >> dst_w > max_dst_w || dst_h > max_dst_h) { >> drm_dbg_kms(display->drm, >>- "scaler_user index %u.%u: src %ux%u dst %ux%u " >>+ "[CRTC:%d:%s] scaler_user index %u.%u: src %ux%u dst %ux%u " >> "size is out of scaler range\n", >>+ crtc->base.base.id, crtc->base.name, >> crtc->pipe, scaler_user, src_w, src_h, >> dst_w, dst_h); >> return -EINVAL; >>@@ -224,16 +227,18 @@ skl_update_scaler(struct intel_crtc_state *crtc_state, bool force_detach, >> */ >> if (pipe_src_w > max_dst_w || pipe_src_h > max_dst_h) { >> drm_dbg_kms(display->drm, >>- "scaler_user index %u.%u: pipe src size %ux%u " >>+ "[CRTC:%d:%s] scaler_user index %u.%u: pipe src size %ux%u " >> "is out of scaler range\n", >>+ crtc->base.base.id, crtc->base.name, >> crtc->pipe, scaler_user, pipe_src_w, pipe_src_h); >> return -EINVAL; >> } >> >> /* mark this plane as a scaler user in crtc_state */ >> scaler_state->scaler_users |= (1 << scaler_user); >>- drm_dbg_kms(display->drm, "scaler_user index %u.%u: " >>+ drm_dbg_kms(display->drm, "[CRTC:%d:%s] scaler_user index %u.%u: " >> "staged scaling request for %ux%u->%ux%u scaler_users = 0x%x\n", >>+ crtc->base.base.id, crtc->base.name, >> crtc->pipe, scaler_user, src_w, src_h, dst_w, dst_h, >> scaler_state->scaler_users); >> >>@@ -421,8 +426,8 @@ static int intel_atomic_setup_scaler(struct intel_crtc_scaler_state *scaler_stat >> >> if (hscale < 0 || vscale < 0) { >> drm_dbg_kms(display->drm, >>- "Scaler %d doesn't support required plane scaling\n", >>- *scaler_id); >>+ "[CRTC:%d:%s] scaler %d doesn't support required plane scaling\n", >>+ crtc->base.base.id, crtc->base.name, *scaler_id); >> drm_rect_debug_print("src: ", src, true); >> drm_rect_debug_print("dst: ", dst, false); >> >>@@ -430,7 +435,8 @@ static int intel_atomic_setup_scaler(struct intel_crtc_scaler_state *scaler_stat >> } >> } >> >>- drm_dbg_kms(display->drm, "Attached scaler id %u.%u to %s:%d\n", >>+ drm_dbg_kms(display->drm, "[CRTC:%d:%s] attached scaler id %u.%u to %s:%d\n", >>+ crtc->base.base.id, crtc->base.name, >> crtc->pipe, *scaler_id, name, idx); >> scaler_state->scalers[*scaler_id].mode = mode; >> >>@@ -530,7 +536,8 @@ int intel_atomic_setup_scalers(struct intel_atomic_state *state, >> /* fail if required scalers > available scalers */ >> if (num_scalers_need > crtc->num_scalers) { >> drm_dbg_kms(display->drm, >>- "Too many scaling requests %d > %d\n", >>+ "[CRTC:%d:%s] too many scaling requests %d > %d\n", >>+ crtc->base.base.id, crtc->base.name, >> num_scalers_need, crtc->num_scalers); >> return -EINVAL; >> } >>-- >>2.45.2 >> -- Jani Nikula, Intel