On Mon, 2021-08-09 at 12:48 -0700, Lucas De Marchi wrote: > From: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > > Free all the DMC payloads, not just DMC_MAIN. > > unreferenced object 0xffff88ff32d4d800 (size 1024): > comm "kworker/1:5", pid 701, jiffies 4294904239 (age 109.736s) > hex dump (first 32 bytes): > 40 40 00 0c 03 00 00 00 00 00 00 00 00 00 00 00 @@.............. > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > backtrace: > [<00000000ba9d0d95>] dmc_load_work_fn+0x34d/0x510 [i915] > [<000000001049fcab>] process_one_work+0x261/0x550 > [<00000000eeb995ac>] worker_thread+0x49/0x3c0 > [<0000000021031dc3>] kthread+0x10b/0x140 > [<000000004a0f69ee>] ret_from_fork+0x1f/0x30 > unreferenced object 0xffff88ff0bde4000 (size 1024): > comm "kworker/0:3", pid 708, jiffies 4294904469 (age 108.816s) > hex dump (first 32 bytes): > 40 40 00 0c 01 00 00 00 00 00 00 00 00 00 00 00 @@.............. > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > backtrace: > [<00000000ba9d0d95>] dmc_load_work_fn+0x34d/0x510 [i915] > [<000000001049fcab>] process_one_work+0x261/0x550 > [<00000000eeb995ac>] worker_thread+0x49/0x3c0 > [<0000000021031dc3>] kthread+0x10b/0x140 > [<000000004a0f69ee>] ret_from_fork+0x1f/0x30 Reviewed-by: José Roberto de Souza <jose.souza@xxxxxxxxx> > > Fixes: 3d5928a168a9 ("drm/i915/xelpd: Pipe A DMC plugging") > Cc: Anusha Srivatsa <anusha.srivatsa@xxxxxxxxx> > Cc: José Roberto de Souza <jose.souza@xxxxxxxxx> > Signed-off-by: Chris Wilson <chris.p.wilson@xxxxxxxxx> > Signed-off-by: Lucas De Marchi <lucas.demarchi@xxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_dmc.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_dmc.c b/drivers/gpu/drm/i915/display/intel_dmc.c > index 3c3c6cb5c0df..b3c8e1c450ef 100644 > --- a/drivers/gpu/drm/i915/display/intel_dmc.c > +++ b/drivers/gpu/drm/i915/display/intel_dmc.c > @@ -805,11 +805,14 @@ void intel_dmc_ucode_resume(struct drm_i915_private *dev_priv) > */ > void intel_dmc_ucode_fini(struct drm_i915_private *dev_priv) > { > + int id; > + > if (!HAS_DMC(dev_priv)) > return; > > intel_dmc_ucode_suspend(dev_priv); > drm_WARN_ON(&dev_priv->drm, dev_priv->dmc.wakeref); > > - kfree(dev_priv->dmc.dmc_info[DMC_FW_MAIN].payload); > + for (id = 0; id < DMC_FW_MAX; id++) > + kfree(dev_priv->dmc.dmc_info[id].payload); > }