[Nouveau] [PATCH 6/6] drm/nouveau: give pgraph a chance to idle before spinlock

Maarten Maathuis madman2003 at gmail.com
Thu Feb 4 12:11:37 PST 2010


Pushed as announced, with a few minor style changes that checkpatch pointed out.

On Wed, Feb 3, 2010 at 7:02 PM, Maarten Maathuis <madman2003 at gmail.com> wrote:
> Patches 4-6 will be pushed tomorrow if there are no objections.
>
> Acks or comments appreciated as usual.
>
> Maarten.
>
> On Tue, Feb 2, 2010 at 10:36 PM, Maarten Maathuis <madman2003 at gmail.com> wrote:
>> - Under some rare conditions i've managed to get pgraph errors after the
>>  channel is closed, which has very undesirable effects.
>> - This is the only reason i can think off.
>>
>> Signed-off-by: Maarten Maathuis <madman2003 at gmail.com>
>> ---
>>  drivers/gpu/drm/nouveau/nouveau_channel.c |   13 ++++++++++---
>>  1 files changed, 10 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/nouveau/nouveau_channel.c b/drivers/gpu/drm/nouveau/nouveau_channel.c
>> index 86399f6..d25ed61 100644
>> --- a/drivers/gpu/drm/nouveau/nouveau_channel.c
>> +++ b/drivers/gpu/drm/nouveau/nouveau_channel.c
>> @@ -280,11 +280,18 @@ nouveau_channel_free(struct nouveau_channel *chan)
>>         */
>>        nouveau_fence_fini(chan);
>>
>> -       spin_lock_irqsave(&dev_priv->engine.lock, flags);
>> -
>> -       /* Ensure the channel is no longer active on the GPU */
>> +       /* This will prevent pfifo from switching channels. */
>>        pfifo->reassign(dev, false);
>>
>> +       /* We want to give pgraph a chance to idle and get rid of all potential
>> +        * errors. We need to do this before the lock, otherwise the irq handler
>> +        * is unable to process them.
>> +        */
>> +       if (pgraph->channel(dev) == chan)
>> +               nouveau_wait_for_idle(dev);
>> +
>> +       spin_lock_irqsave(&dev_priv->engine.lock, flags);
>> +
>>        pgraph->fifo_access(dev, false);
>>        if (pgraph->channel(dev) == chan)
>>                pgraph->unload_context(dev);
>> --
>> 1.6.6.1
>>
>>
>


More information about the Nouveau mailing list