aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/completion.h1
-rw-r--r--kernel/sched.c11
2 files changed, 12 insertions, 0 deletions
diff --git a/include/linux/completion.h b/include/linux/completion.h
index 4a6b604ef7e4..258bec13d424 100644
--- a/include/linux/completion.h
+++ b/include/linux/completion.h
@@ -88,6 +88,7 @@ extern bool completion_done(struct completion *x);
88 88
89extern void complete(struct completion *); 89extern void complete(struct completion *);
90extern void complete_all(struct completion *); 90extern void complete_all(struct completion *);
91extern void complete_n(struct completion *, int n);
91 92
92/** 93/**
93 * INIT_COMPLETION: - reinitialize a completion structure 94 * INIT_COMPLETION: - reinitialize a completion structure
diff --git a/kernel/sched.c b/kernel/sched.c
index fcaed6b96442..328a67c55287 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -5809,6 +5809,17 @@ void complete_all(struct completion *x)
5809} 5809}
5810EXPORT_SYMBOL(complete_all); 5810EXPORT_SYMBOL(complete_all);
5811 5811
5812void complete_n(struct completion *x, int n)
5813{
5814 unsigned long flags;
5815
5816 spin_lock_irqsave(&x->wait.lock, flags);
5817 x->done += n;
5818 __wake_up_common(&x->wait, TASK_NORMAL, n, 0, NULL);
5819 spin_unlock_irqrestore(&x->wait.lock, flags);
5820}
5821EXPORT_SYMBOL(complete_n);
5822
5812static inline long __sched 5823static inline long __sched
5813do_wait_for_common(struct completion *x, long timeout, int state) 5824do_wait_for_common(struct completion *x, long timeout, int state)
5814{ 5825{