[Nouveau] [PATCH 6/6] drm/nouveau: give pgraph a chance to idle before spinlock
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.
> 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)
>> - 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)
More information about the Nouveau