[Intel-gfx] [PATCH v10 1/9] drm/i915: Create GEM runtime resume helper and handle GEM suspend/resume errors

Sagar Arun Kamble sagar.a.kamble at intel.com
Thu Sep 28 13:27:52 UTC 2017



On 9/28/2017 5:07 PM, Chris Wilson wrote:
> Quoting Sagar Arun Kamble (2017-09-27 10:30:31)
>> These changes are preparation to handle GuC suspend/resume. Prepared
>> helper i915_gem_runtime_resume to reinitialize suspended gem setup.
>> Returning status from i915_gem_runtime_suspend and i915_gem_resume.
>> This will be placeholder for handling any errors from uC suspend/resume
>> in upcoming patches. Restructured the suspend/resume routines w.r.t setup
>> creation and rollback order.
>> This also fixes issue of ordering of i915_gem_runtime_resume with
>> intel_runtime_pm_enable_interrupts.
>>
>> v2: Fixed return from intel_runtime_resume. (Michał Winiarski)
>>
>> v3: Not returning status from gem_runtime_resume. (Chris)
>>
>> Signed-off-by: Sagar Arun Kamble <sagar.a.kamble at intel.com>
>> Cc: Chris Wilson <chris at chris-wilson.co.uk>
>> Cc: Imre Deak <imre.deak at intel.com>
>> Cc: Paulo Zanoni <paulo.r.zanoni at intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
>> Cc: Michal Wajdeczko <michal.wajdeczko at intel.com>
>> Cc: Michał Winiarski <michal.winiarski at intel.com>
>> ---
>>   drivers/gpu/drm/i915/i915_drv.c | 22 +++++++++++++---------
>>   drivers/gpu/drm/i915/i915_drv.h |  5 +++--
>>   drivers/gpu/drm/i915/i915_gem.c | 18 ++++++++++++++++--
>>   3 files changed, 32 insertions(+), 13 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
>> index 7056bb2..d0a710d 100644
>> --- a/drivers/gpu/drm/i915/i915_drv.c
>> +++ b/drivers/gpu/drm/i915/i915_drv.c
>> @@ -1655,6 +1655,7 @@ static int i915_suspend_switcheroo(struct drm_device *dev, pm_message_t state)
>>   static int i915_drm_resume(struct drm_device *dev)
>>   {
>>          struct drm_i915_private *dev_priv = to_i915(dev);
>> +       struct pci_dev *pdev = dev_priv->drm.pdev;
>>          int ret;
>>   
>>          disable_rpm_wakeref_asserts(dev_priv);
>> @@ -1666,7 +1667,9 @@ static int i915_drm_resume(struct drm_device *dev)
>>   
>>          intel_csr_ucode_resume(dev_priv);
>>   
>> -       i915_gem_resume(dev_priv);
>> +       ret = i915_gem_resume(dev_priv);
>> +       if (ret)
>> +               dev_err(&pdev->dev, "GEM resume failed\n");
> I am still uneasy about this. Later on in the resume we try to reinit
> the hw under the assumption that this earlier step succeeded.
>
> Previously we have tried to make sure that if GEM fails, we do not leave
> the display in an unusable state. Is that still true?
As part of gem_resume we are resuming GuC and if that fails we are 
declaring gem wedged.
Will that be okay or we ignore the GuC resume failure and go ahead with 
reinit?
>>   
>>          i915_restore_state(dev_priv);
>>          intel_pps_unlock_regs_wa(dev_priv);
>> @@ -2495,7 +2498,11 @@ static int intel_runtime_suspend(struct device *kdev)
>>           * We are safe here against re-faults, since the fault handler takes
>>           * an RPM reference.
>>           */
>> -       i915_gem_runtime_suspend(dev_priv);
>> +       ret = i915_gem_runtime_suspend(dev_priv);
>> +       if (ret) {
>> +               enable_rpm_wakeref_asserts(dev_priv);
>> +               return ret;
>> +       }
>>   
>>          intel_guc_suspend(dev_priv);
>>   
>> @@ -2515,6 +2522,8 @@ static int intel_runtime_suspend(struct device *kdev)
>>                  DRM_ERROR("Runtime suspend failed, disabling it (%d)\n", ret);
>>                  intel_runtime_pm_enable_interrupts(dev_priv);
>>   
>> +               intel_guc_resume(dev_priv);
>> +               i915_gem_runtime_resume(dev_priv);
>>                  enable_rpm_wakeref_asserts(dev_priv);
>>   
>>                  return ret;
>> @@ -2596,13 +2605,6 @@ static int intel_runtime_resume(struct device *kdev)
>>                  ret = vlv_resume_prepare(dev_priv, true);
>>          }
>>   
>> -       /*
>> -        * No point of rolling back things in case of an error, as the best
>> -        * we can do is to hope that things will still work (and disable RPM).
>> -        */
> This comment shouldn't be attached to the following gem init operations
> as they cannot fail. If they could, we should be throwing a warning here
> as this may result in a change of swizzling/fencing state as seen by
> userspace and therefore graphical corruption.
> -Chris
Ok. Will remove this comment.


More information about the Intel-gfx mailing list