aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/core/core/event.c
diff options
context:
space:
mode:
authorPeter Hurley <peter@hurleysoftware.com>2013-08-27 16:12:55 -0400
committerBen Skeggs <bskeggs@redhat.com>2013-11-08 15:36:03 +1000
commit019255797db627f729edbf3885ea4e248a75e0d5 (patch)
tree4de2dc36979b80daffc4f09f16aac4a10b174f9a /drivers/gpu/drm/nouveau/core/core/event.c
parentdrm/nouveau/core: Add priv field for event handlers (diff)
downloadlinux-dev-019255797db627f729edbf3885ea4e248a75e0d5.tar.xz
linux-dev-019255797db627f729edbf3885ea4e248a75e0d5.zip
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>
Diffstat (limited to 'drivers/gpu/drm/nouveau/core/core/event.c')
-rw-r--r--drivers/gpu/drm/nouveau/core/core/event.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/drivers/gpu/drm/nouveau/core/core/event.c b/drivers/gpu/drm/nouveau/core/core/event.c
index 7eb81c1b6fab..e69c463e66e2 100644
--- a/drivers/gpu/drm/nouveau/core/core/event.c
+++ b/drivers/gpu/drm/nouveau/core/core/event.c
@@ -40,9 +40,11 @@ nouveau_event_put(struct nouveau_event *event, int index,
{
unsigned long flags;
+ if (index >= event->index_nr)
+ return;
+
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);
}
@@ -52,13 +54,14 @@ nouveau_event_get(struct nouveau_event *event, int index,
{
unsigned long flags;
+ if (index >= event->index_nr)
+ return;
+
spin_lock_irqsave(&event->lock, flags);
- if (index < event->index_nr) {
- list_add(&handler->head, &event->index[index].list);
- if (!event->index[index].refs++) {
- if (event->enable)
- event->enable(event, index);
- }
+ list_add(&handler->head, &event->index[index].list);
+ if (!event->index[index].refs++) {
+ if (event->enable)
+ event->enable(event, index);
}
spin_unlock_irqrestore(&event->lock, flags);
}