[Intel-gfx] [PATCH] drm/i915: Initialize residency registers earlier

Teres Alexis, Alan Previn alan.previn.teres.alexis at intel.com
Mon Nov 13 23:20:25 UTC 2023


On Mon, 2023-10-30 at 16:45 -0700, Belgaumkar, Vinay wrote:
alan:skip
> +++ b/drivers/gpu/drm/i915/gt/intel_rc6.c
> @@ -608,11 +608,13 @@ void intel_rc6_init(struct intel_rc6 *rc6)
>  	/* Disable runtime-pm until we can save the GPU state with rc6 pctx */
>  	rpm_get(rc6);
>  
> -	if (!rc6_supported(rc6))
> -		return;
> -
>  	rc6_res_reg_init(rc6);
>  
> +	if (!rc6_supported(rc6)) {
> +		rpm_put(rc6);
> +		return;
> +	}
> +
>  	if (IS_CHERRYVIEW(i915))
>  		err = chv_rc6_init(rc6);
>  	else if (IS_VALLEYVIEW(i915))

alan: as far as the bug this patch is addressing  (i.e. ensuring that
intel_rc6_print_residency has valid rc6.res_reg values for correct dprc
debugfs output when rc6 is disabled) and release the rpm, this looks good
to me.

However, when looking at the other code flows around the intel_rc6_init/fini
and intel_rc6_enable/disable, i must point out that the calls to rpm_get
and rpm_put from these functions don't seem to be designed with proper
mirror-ing. For example during driver startup, intel_rc6_init (which is called
by intel_gt_pm_init) calls rpm_get at the start but doesn't call rpm_put
before it returns. But back up the callstack in intel_gt_init,
after intel_gt_pm_init, a couple of subsystems get intialized before intel_gt_resume
is called - which in turn calls intel_rc6_enable which does the rpm_put at its end.
However before that get and put, i see several error paths that trigger cleanups
(leading eventually to driver load failure), but i think some cases are completely
missing the put_rpm that intel_rc6_init took. Additionally, the function names of
rc6_init and __get_rc6 inside i915_pmu.c seems to be confusing although static.
I wish those were named pmu_rc6_init and __pmu_rc6_init and etc.

Anyways, as per offline conversation, we are not trying to solve every
bug and design gap in this patch but just one specific bug fix. So as
per the agreed condition that we create a separate internal issue
to address this "lack of a clean mirrored-function design of rpm_get/put
across the rc6 startup sequences", here is my rb:

Reviewed-by: Alan Previn <alan.previn.teres.alexis at intel.com>



More information about the Intel-gfx mailing list