gfx: drv: Move NULL check outside spin lock
authorPauli Nieminen <pauli.nieminen@linux.intel.com>
Mon, 2 Jan 2012 14:24:31 +0000 (16:24 +0200)
committerMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Tue, 3 Jul 2012 09:29:22 +0000 (12:29 +0300)
pending_flip->event is owned by single kernel thread at a time so it can
be checked outside of the spin lock. Spin lock is only protecting the
linked list where the event is added.

Signed-off-by: Pauli Nieminen <pauli.nieminen@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
drivers/staging/mrst/drv/psb_page_flip.c

index 24f12a7..aa7a86a 100644 (file)
@@ -54,18 +54,19 @@ send_page_flip_event(struct drm_device *dev, int pipe,
        struct timeval now;
        unsigned long flags;
 
+       if (!pending_flip->event)
+               return;
+
        spin_lock_irqsave(&dev->event_lock, flags);
 
-       if (pending_flip->event) {
-               e = pending_flip->event;
-               do_gettimeofday(&now);
-               e->event.sequence = drm_vblank_count(dev, pipe);
-               e->event.tv_sec = now.tv_sec;
-               e->event.tv_usec = now.tv_usec;
-               list_add_tail(&e->base.link,
-                             &e->base.file_priv->event_list);
-               wake_up_interruptible(&e->base.file_priv->event_wait);
-       }
+       e = pending_flip->event;
+       do_gettimeofday(&now);
+       e->event.sequence = drm_vblank_count(dev, pipe);
+       e->event.tv_sec = now.tv_sec;
+       e->event.tv_usec = now.tv_usec;
+       list_add_tail(&e->base.link,
+                       &e->base.file_priv->event_list);
+       wake_up_interruptible(&e->base.file_priv->event_wait);
 
        spin_unlock_irqrestore(&dev->event_lock, flags);
 }