[Intel-gfx] [PATCH v13 03/21] drm/i915/guc: Add status checks to enable/disable_guc_interrupts

Sagar Arun Kamble sagar.a.kamble at intel.com
Fri Oct 13 08:09:45 UTC 2017



On 10/12/2017 11:47 AM, Sagar Arun Kamble wrote:
>
>
> On 10/12/2017 11:20 AM, Sagar Arun Kamble wrote:
>>
>>
>> On 10/11/2017 8:50 PM, Michal Wajdeczko wrote:
>>> On Wed, 11 Oct 2017 10:53:58 +0200, Sagar Arun Kamble 
>>> <sagar.a.kamble at intel.com> wrote:
>>>
>>>> GuC interrupts are currently enabled by Logging and disabled in 
>>>> different
>>>> scenarios. Make disabling check whether interrupts were already 
>>>> disabled
>>>> and similar for enable path. This will remove the state tracking 
>>>> for the
>>>> callers of these functions based on kernel parameters.
>>>>
>>>> Signed-off-by: Sagar Arun Kamble <sagar.a.kamble at intel.com>
>>>> Cc: Michal Wajdeczko <michal.wajdeczko at intel.com>
>>>> Cc: Michał Winiarski <michal.winiarski at intel.com>
>>>> Cc: Chris Wilson <chris at chris-wilson.co.uk>
>>>> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
>>>> ---
>>>>  drivers/gpu/drm/i915/i915_irq.c | 16 ++++++++++------
>>>>  1 file changed, 10 insertions(+), 6 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/i915/i915_irq.c 
>>>> b/drivers/gpu/drm/i915/i915_irq.c
>>>> index a3de408..6cf417c 100644
>>>> --- a/drivers/gpu/drm/i915/i915_irq.c
>>>> +++ b/drivers/gpu/drm/i915/i915_irq.c
>>>> @@ -455,18 +455,22 @@ void gen9_reset_guc_interrupts(struct 
>>>> drm_i915_private *dev_priv)
>>>> void gen9_enable_guc_interrupts(struct drm_i915_private *dev_priv)
>>>>  {
>>>> +    if (READ_ONCE(dev_priv->guc.interrupts_enabled))
>>>
>>> Hmm, I don't like that functions from irq.c read and modify guc 
>>> internal
>>> members directly. I would expect that functions here just do their job
>>> and any state is maintained by the helper function(s) in guc.c.
>> Sure will move to guc.c.
>>>
>>> Also note that this change will not help scenario where one client will
>>> try to disable irqs while other client still depends on them.
>>>
>> Will add refcounting then.
> realized that disable_guc_interrupts is currently happening twice 
> during unload and that can make
> refcounting asymmetrical. So will stay with bool state for now and 
> will revisit during interrupts related
> changes may be as precursor to GuC CT series.
Based on current interrupt mgmt - pm_ier/pm_imr are already handled by 
intel_runtime_pm_*_interrupts.
And these are being done across suspend/reset properly. Just need to 
order w.r.t GuC suspend/resume.
So gen9_*_guc_interrupts should not be called during fini. They will be 
taken care of based on interrupt clients like
Logging, CT Buffer.
>>> Michal
>>>
>>>> +        return;
>>>> +
>>>>      spin_lock_irq(&dev_priv->irq_lock);
>>>> -    if (!dev_priv->guc.interrupts_enabled) {
>>>> -        WARN_ON_ONCE(I915_READ(gen6_pm_iir(dev_priv)) &
>>>> -                       dev_priv->pm_guc_events);
>>>> -        dev_priv->guc.interrupts_enabled = true;
>>>> -        gen6_enable_pm_irq(dev_priv, dev_priv->pm_guc_events);
>>>> -    }
>>>> +    WARN_ON_ONCE(I915_READ(gen6_pm_iir(dev_priv)) &
>>>> +                   dev_priv->pm_guc_events);
>>>> +    dev_priv->guc.interrupts_enabled = true;
>>>> +    gen6_enable_pm_irq(dev_priv, dev_priv->pm_guc_events);
>>>>      spin_unlock_irq(&dev_priv->irq_lock);
>>>>  }
>>>> void gen9_disable_guc_interrupts(struct drm_i915_private *dev_priv)
>>>>  {
>>>> +    if (!READ_ONCE(dev_priv->guc.interrupts_enabled))
>>>> +        return;
>>>> +
>>>>      spin_lock_irq(&dev_priv->irq_lock);
>>>>      dev_priv->guc.interrupts_enabled = false;
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>



More information about the Intel-gfx mailing list