[Intel-gfx] drm/i915/display: Fix warning callstack for imbalance wakeref
Imre Deak
imre.deak at intel.com
Tue Aug 30 15:43:48 UTC 2022
On Mon, 29 Aug 2022 14:01:24 +0530, Mitul Golani wrote:
> While executing i915_selftest, wakeref imbalance warning is seen
> with i915_selftest failure.
>
> Currently when Driver is suspended, while doing unregister
> it is taking wakeref without resuming the device.
> This patch is resuming the device, if driver is already suspended
> and doing unregister process. It will check the suspend state and
> if driver is not resumed before taking wakeref then resume before
> it.
>
> Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani at intel.com>
> ---
> drivers/gpu/drm/i915/i915_driver.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
> index 1332c70370a6..281bf6cd5e4c 100644
> --- a/drivers/gpu/drm/i915/i915_driver.c
> +++ b/drivers/gpu/drm/i915/i915_driver.c
> @@ -953,7 +953,11 @@ int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>
> void i915_driver_remove(struct drm_i915_private *i915)
> {
> - disable_rpm_wakeref_asserts(&i915->runtime_pm);
> + intel_wakeref_t wakeref = 0;
Initing wakeref right before assigning to it is redundant.
> + /*
> + * Resuming Device if already suspended to complete driver unregistration
> + */
No need for the above comment, which the function name makes clear
already.
> + wakeref = intel_runtime_pm_get(&i915->runtime_pm);
>
> i915_driver_unregister(i915);
>
> @@ -977,18 +981,20 @@ void i915_driver_remove(struct drm_i915_private *i915)
>
> i915_driver_hw_remove(i915);
>
> - enable_rpm_wakeref_asserts(&i915->runtime_pm);
> + if (wakeref)
> + intel_runtime_pm_put(&i915->runtime_pm, wakeref);
wakeref can't be 0, so the call can be unconditional.
> }
>
> static void i915_driver_release(struct drm_device *dev)
> {
> struct drm_i915_private *dev_priv = to_i915(dev);
> struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
> + intel_wakeref_t wakeref = 0;
>
> if (!dev_priv->do_release)
> return;
>
> - disable_rpm_wakeref_asserts(rpm);
> + wakeref = intel_runtime_pm_get(rpm);
>
> i915_gem_driver_release(dev_priv);
>
> @@ -999,7 +1005,9 @@ static void i915_driver_release(struct drm_device *dev)
>
> i915_driver_mmio_release(dev_priv);
>
> - enable_rpm_wakeref_asserts(rpm);
> + if (wakeref)
> + intel_runtime_pm_put(rpm, wakeref);
> +
> intel_runtime_pm_driver_release(rpm);
>
> i915_driver_late_release(dev_priv);
More information about the Intel-gfx
mailing list