drm/nouveau/core: Move event index check from critical section

The index_nr field is constant for the lifetime of the event, so
serialized access is unnecessary.

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
Peter Hurley 2013-08-27 16:12:55 -04:00 committed by Ben Skeggs
parent a25f83ba89
commit 019255797d
1 changed files with 11 additions and 8 deletions

View File

@ -40,8 +40,10 @@ nouveau_event_put(struct nouveau_event *event, int index,
{ {
unsigned long flags; unsigned long flags;
if (index >= event->index_nr)
return;
spin_lock_irqsave(&event->lock, flags); spin_lock_irqsave(&event->lock, flags);
if (index < event->index_nr)
nouveau_event_put_locked(event, index, handler); nouveau_event_put_locked(event, index, handler);
spin_unlock_irqrestore(&event->lock, flags); spin_unlock_irqrestore(&event->lock, flags);
} }
@ -52,14 +54,15 @@ nouveau_event_get(struct nouveau_event *event, int index,
{ {
unsigned long flags; unsigned long flags;
if (index >= event->index_nr)
return;
spin_lock_irqsave(&event->lock, flags); spin_lock_irqsave(&event->lock, flags);
if (index < event->index_nr) {
list_add(&handler->head, &event->index[index].list); list_add(&handler->head, &event->index[index].list);
if (!event->index[index].refs++) { if (!event->index[index].refs++) {
if (event->enable) if (event->enable)
event->enable(event, index); event->enable(event, index);
} }
}
spin_unlock_irqrestore(&event->lock, flags); spin_unlock_irqrestore(&event->lock, flags);
} }