On Tue, 2024-01-16 at 15:07 +0200, Jani Nikula wrote: > With few users for drm_err_printer(), it's still feasible to convert it > to be device specific. Use drm_err() under the hood. > > While at it, make the prefix optional. > > Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx> > --- > drivers/gpu/drm/drm_print.c | 7 ++++++- > drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c | 4 ++-- > drivers/gpu/drm/i915/selftests/i915_active.c | 4 ++-- > include/drm/drm_print.h | 11 ++++++++--- > 4 files changed, 18 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c > index 5b93c11895bb..91dbcdeaad3f 100644 > --- a/drivers/gpu/drm/drm_print.c > +++ b/drivers/gpu/drm/drm_print.c > @@ -191,7 +191,12 @@ EXPORT_SYMBOL(__drm_printfn_debug); > > void __drm_printfn_err(struct drm_printer *p, struct va_format *vaf) > { > - pr_err("*ERROR* %s %pV", p->prefix, vaf); > + struct drm_device *drm = p->arg; > + > + if (p->prefix) > + drm_err(drm, "%s %pV", p->prefix, vaf); > + else > + drm_err(drm, "%pV", vaf); > } > EXPORT_SYMBOL(__drm_printfn_err); > > diff --git a/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c b/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c > index bc441ce7b380..be827318275c 100644 > --- a/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c > +++ b/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c > @@ -122,7 +122,7 @@ static int __live_idle_pulse(struct intel_engine_cs *engine, > GEM_BUG_ON(!llist_empty(&engine->barrier_tasks)); > > if (engine_sync_barrier(engine)) { > - struct drm_printer m = drm_err_printer("pulse"); > + struct drm_printer m = drm_err_printer(&engine->i915->drm, "pulse"); > > pr_err("%s: no heartbeat pulse?\n", engine->name); > intel_engine_dump(engine, &m, "%s", engine->name); > @@ -136,7 +136,7 @@ static int __live_idle_pulse(struct intel_engine_cs *engine, > pulse_unlock_wait(p); /* synchronize with the retirement callback */ > > if (!i915_active_is_idle(&p->active)) { > - struct drm_printer m = drm_err_printer("pulse"); > + struct drm_printer m = drm_err_printer(&engine->i915->drm, "pulse"); > > pr_err("%s: heartbeat pulse did not flush idle tasks\n", > engine->name); > diff --git a/drivers/gpu/drm/i915/selftests/i915_active.c b/drivers/gpu/drm/i915/selftests/i915_active.c > index b61fe850e924..8886752ade63 100644 > --- a/drivers/gpu/drm/i915/selftests/i915_active.c > +++ b/drivers/gpu/drm/i915/selftests/i915_active.c > @@ -156,7 +156,7 @@ static int live_active_wait(void *arg) > > __i915_active_wait(&active->base, TASK_UNINTERRUPTIBLE); > if (!READ_ONCE(active->retired)) { > - struct drm_printer p = drm_err_printer(__func__); > + struct drm_printer p = drm_err_printer(&i915->drm, __func__); > > pr_err("i915_active not retired after waiting!\n"); > i915_active_print(&active->base, &p); > @@ -189,7 +189,7 @@ static int live_active_retire(void *arg) > err = -EIO; > > if (!READ_ONCE(active->retired)) { > - struct drm_printer p = drm_err_printer(__func__); > + struct drm_printer p = drm_err_printer(&i915->drm, __func__); > > pr_err("i915_active not retired after flushing!\n"); > i915_active_print(&active->base, &p); > diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h > index 5ed26a702e3e..1040213d02a4 100644 > --- a/include/drm/drm_print.h > +++ b/include/drm/drm_print.h > @@ -35,6 +35,8 @@ > > #include <drm/drm.h> > > +struct drm_device; > + > /* Do *not* use outside of drm_print.[ch]! */ > extern unsigned long __drm_debug; > > @@ -235,16 +237,19 @@ static inline struct drm_printer drm_debug_printer(const char *prefix) > } > > /** > - * drm_err_printer - construct a &drm_printer that outputs to pr_err() > - * @prefix: debug output prefix > + * drm_err_printer - construct a &drm_printer that outputs to drm_err() > + * @drm: the &struct drm_device pointer > + * @prefix: debug output prefix, or NULL for no prefix > * > * RETURNS: > * The &drm_printer object > */ > -static inline struct drm_printer drm_err_printer(const char *prefix) > +static inline struct drm_printer drm_err_printer(struct drm_device *drm, > + const char *prefix) > { > struct drm_printer p = { > .printfn = __drm_printfn_err, > + .arg = drm, > .prefix = prefix > }; > return p; Reviewed-by: Luca Coelho <luciano.coelho@xxxxxxxxx> -- Cheers, Luca.