drm/nouveau: Avoid potential race between nouveau_fence_update() and context takedown.
Signed-off-by: Francisco Jerez <currojerez@riseup.net> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
a8b214f007
commit
937c3471cc
1 changed files with 10 additions and 7 deletions
|
@ -77,14 +77,17 @@ nouveau_fence_update(struct nouveau_channel *chan)
|
|||
|
||||
spin_lock(&chan->fence.lock);
|
||||
|
||||
if (USE_REFCNT(dev))
|
||||
sequence = nvchan_rd32(chan, 0x48);
|
||||
else
|
||||
sequence = atomic_read(&chan->fence.last_sequence_irq);
|
||||
/* Fetch the last sequence if the channel is still up and running */
|
||||
if (likely(!list_empty(&chan->fence.pending))) {
|
||||
if (USE_REFCNT(dev))
|
||||
sequence = nvchan_rd32(chan, 0x48);
|
||||
else
|
||||
sequence = atomic_read(&chan->fence.last_sequence_irq);
|
||||
|
||||
if (chan->fence.sequence_ack == sequence)
|
||||
goto out;
|
||||
chan->fence.sequence_ack = sequence;
|
||||
if (chan->fence.sequence_ack == sequence)
|
||||
goto out;
|
||||
chan->fence.sequence_ack = sequence;
|
||||
}
|
||||
|
||||
list_for_each_entry_safe(fence, tmp, &chan->fence.pending, entry) {
|
||||
sequence = fence->sequence;
|
||||
|
|
Loading…
Reference in a new issue