OMAPDSS: APPLY: print warning if wait_pending_extra_info_updates fails
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 23 Feb 2012 10:21:09 +0000 (12:21 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 6 Mar 2012 12:08:39 +0000 (14:08 +0200)
wait_pending_extra_info_updates() currently does a hacky second check
for extra_info_update_ongoing() at the end of the function to show a
warning if extra_info update is still ongoing. The call to
extra_info_update_ongoing() should really be inside spinlock, but that's
a bit heavy just for verification.

Rather than that, check the return value of the
wait_for_completion_timeout() and print an error if it has timeouted or
returned an error.

Even better would be to return the error value and act on it in the
callers of wait_pending_extra_info_updates. However, it's not clear what
the callers should do in case of an error, as the error should only
happen if there's a bug in the driver or the HW. So we'll just print the
warning for now.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/omap2/dss/apply.c

index f145e9c..267c3f4 100644 (file)
@@ -354,6 +354,7 @@ static void wait_pending_extra_info_updates(void)
        bool updating;
        unsigned long flags;
        unsigned long t;
+       int r;
 
        spin_lock_irqsave(&data_lock, flags);
 
@@ -369,11 +370,11 @@ static void wait_pending_extra_info_updates(void)
        spin_unlock_irqrestore(&data_lock, flags);
 
        t = msecs_to_jiffies(500);
-       wait_for_completion_timeout(&extra_updated_completion, t);
-
-       updating = extra_info_update_ongoing();
-
-       WARN_ON(updating);
+       r = wait_for_completion_timeout(&extra_updated_completion, t);
+       if (r == 0)
+               DSSWARN("timeout in wait_pending_extra_info_updates\n");
+       else if (r < 0)
+               DSSERR("wait_pending_extra_info_updates failed: %d\n", r);
 }
 
 int dss_mgr_wait_for_go(struct omap_overlay_manager *mgr)