]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - kernel/sched/completion.c
Merge branches 'pm-core', 'pm-qos', 'pm-domains' and 'pm-opp'
[linux.git] / kernel / sched / completion.c
index 8d0f35debf35657689908a4b37df7230ba7d6710..f063a25d44493fd79dfb52aece2cc3ca2f907a07 100644 (file)
@@ -31,7 +31,8 @@ void complete(struct completion *x)
        unsigned long flags;
 
        spin_lock_irqsave(&x->wait.lock, flags);
-       x->done++;
+       if (x->done != UINT_MAX)
+               x->done++;
        __wake_up_locked(&x->wait, TASK_NORMAL, 1);
        spin_unlock_irqrestore(&x->wait.lock, flags);
 }
@@ -51,7 +52,7 @@ void complete_all(struct completion *x)
        unsigned long flags;
 
        spin_lock_irqsave(&x->wait.lock, flags);
-       x->done += UINT_MAX/2;
+       x->done = UINT_MAX;
        __wake_up_locked(&x->wait, TASK_NORMAL, 0);
        spin_unlock_irqrestore(&x->wait.lock, flags);
 }
@@ -79,7 +80,8 @@ do_wait_for_common(struct completion *x,
                if (!x->done)
                        return timeout;
        }
-       x->done--;
+       if (x->done != UINT_MAX)
+               x->done--;
        return timeout ?: 1;
 }
 
@@ -280,7 +282,7 @@ bool try_wait_for_completion(struct completion *x)
        spin_lock_irqsave(&x->wait.lock, flags);
        if (!x->done)
                ret = 0;
-       else
+       else if (x->done != UINT_MAX)
                x->done--;
        spin_unlock_irqrestore(&x->wait.lock, flags);
        return ret;