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);
 
 
        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);
        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);
 
 
        __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);
                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);
 
 
 #include <drm/drm.h>
 
+struct drm_device;
+
 /* Do *not* use outside of drm_print.[ch]! */
 extern unsigned long __drm_debug;
 
 }
 
 /**
- * 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;