Thread (7 messages) 7 messages, 3 authors, 2010-04-04

Re: [PATCH v2] DA8XX/OMAP-L1XX: FB: Implement double buffering

From: Andrew Morton <akpm@linux-foundation.org>
Date: 2010-03-30 20:36:21

On Mon, 29 Mar 2010 08:16:51 -0500
"Ambrose, Martin" [off-list ref] wrote:
+/*
+ * Function to wait for vertical sync which for this LCD peripheral
+ * translates into waiting for the current raster frame to complete.
+ */
+static int fb_wait_for_vsync(struct fb_info *info)
+{
+       struct da8xx_fb_par *par = info->par;
+       wait_queue_t wq;
+       int ret;
+
+       init_waitqueue_entry(&wq, current);
DECLARE_WAITQUEUE() would be more conventional.
+       /*
+        * Set flag to 0 and wait for isr to set to 1. It would seem there is a
+        * race condition here where the ISR could have occured just before or
+        * just after this set. But since we are just coarsely waiting for
+        * a frame to complete then that's OK. i.e. if the frame completed
+        * just before this code executed then we have to wait another full
+        * frame time but there is no way to avoid such a situation. On the
+        * other hand if the frame completed just after then we don't need
+        * to wait long at all. Either way we are guaranteed to return to the
+        * user immediately after a frame completion which is all that is
+        * required.
+        */
+       par->vsync_flag = 0;
+       ret = wait_event_interruptible_timeout(par->vsync_wait,
+                                              par->vsync_flag != 0,
+                                              par->vsync_timeout);
If the calling process has signal_pending() (say, someone hit ^C) then
wait_event_interruptible_timeout() will fall straight through with
-ERESTARTSYS.  Will this cause the driver to malfunction at all?

+       if (ret < 0)
+               return ret;
+       if (ret = 0)
+               return -ETIMEDOUT;
+
+       return 0;
+}
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help