Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> writes: > Keep track of our acquired wakeref for interacting with the guc, so that > we can cancel it upon release and so clearly identify leaks. > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: Jani Nikula <jani.nikula@xxxxxxxxx> Reviewed-by: Mika Kuoppala <mika.kuoppala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_guc_log.c | 15 +++++++++------ > drivers/gpu/drm/i915/intel_huc.c | 5 +++-- > 2 files changed, 12 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_guc_log.c b/drivers/gpu/drm/i915/intel_guc_log.c > index 1b1581a42aa1..20c0b36d748e 100644 > --- a/drivers/gpu/drm/i915/intel_guc_log.c > +++ b/drivers/gpu/drm/i915/intel_guc_log.c > @@ -436,6 +436,7 @@ static void guc_log_capture_logs(struct intel_guc_log *log) > { > struct intel_guc *guc = log_to_guc(log); > struct drm_i915_private *dev_priv = guc_to_i915(guc); > + intel_wakeref_t wakeref; > > guc_read_update_log_buffer(log); > > @@ -443,9 +444,9 @@ static void guc_log_capture_logs(struct intel_guc_log *log) > * Generally device is expected to be active only at this > * time, so get/put should be really quick. > */ > - intel_runtime_pm_get(dev_priv); > + wakeref = intel_runtime_pm_get(dev_priv); > guc_action_flush_log_complete(guc); > - intel_runtime_pm_put_unchecked(dev_priv); > + intel_runtime_pm_put(dev_priv, wakeref); > } > > int intel_guc_log_create(struct intel_guc_log *log) > @@ -505,6 +506,7 @@ int intel_guc_log_set_level(struct intel_guc_log *log, u32 level) > { > struct intel_guc *guc = log_to_guc(log); > struct drm_i915_private *dev_priv = guc_to_i915(guc); > + intel_wakeref_t wakeref; > int ret; > > BUILD_BUG_ON(GUC_LOG_VERBOSITY_MIN != 0); > @@ -524,11 +526,11 @@ int intel_guc_log_set_level(struct intel_guc_log *log, u32 level) > goto out_unlock; > } > > - intel_runtime_pm_get(dev_priv); > + wakeref = intel_runtime_pm_get(dev_priv); > ret = guc_action_control_log(guc, GUC_LOG_LEVEL_IS_VERBOSE(level), > GUC_LOG_LEVEL_IS_ENABLED(level), > GUC_LOG_LEVEL_TO_VERBOSITY(level)); > - intel_runtime_pm_put_unchecked(dev_priv); > + intel_runtime_pm_put(dev_priv, wakeref); > if (ret) { > DRM_DEBUG_DRIVER("guc_log_control action failed %d\n", ret); > goto out_unlock; > @@ -601,6 +603,7 @@ void intel_guc_log_relay_flush(struct intel_guc_log *log) > { > struct intel_guc *guc = log_to_guc(log); > struct drm_i915_private *i915 = guc_to_i915(guc); > + intel_wakeref_t wakeref; > > /* > * Before initiating the forceful flush, wait for any pending/ongoing > @@ -608,9 +611,9 @@ void intel_guc_log_relay_flush(struct intel_guc_log *log) > */ > flush_work(&log->relay.flush_work); > > - intel_runtime_pm_get(i915); > + wakeref = intel_runtime_pm_get(i915); > guc_action_flush_log(guc); > - intel_runtime_pm_put_unchecked(i915); > + intel_runtime_pm_put(i915, wakeref); > > /* GuC would have updated log buffer by now, so capture it */ > guc_log_capture_logs(log); > diff --git a/drivers/gpu/drm/i915/intel_huc.c b/drivers/gpu/drm/i915/intel_huc.c > index c2b076e9bada..3e8c18b6a42d 100644 > --- a/drivers/gpu/drm/i915/intel_huc.c > +++ b/drivers/gpu/drm/i915/intel_huc.c > @@ -115,14 +115,15 @@ int intel_huc_auth(struct intel_huc *huc) > int intel_huc_check_status(struct intel_huc *huc) > { > struct drm_i915_private *dev_priv = huc_to_i915(huc); > + intel_wakeref_t wakeref; > bool status; > > if (!HAS_HUC(dev_priv)) > return -ENODEV; > > - intel_runtime_pm_get(dev_priv); > + wakeref = intel_runtime_pm_get(dev_priv); > status = I915_READ(HUC_STATUS2) & HUC_FW_VERIFIED; > - intel_runtime_pm_put_unchecked(dev_priv); > + intel_runtime_pm_put(dev_priv, wakeref); > > return status; > } > -- > 2.20.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx