Skip to content

Commit 929659a

Browse files
author
Peter Zijlstra
committed
sched/completion: Add wait_for_completion_state()
Allows waiting with a custom @State. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Ingo Molnar <mingo@kernel.org> Link: https://lore.kernel.org/r/20220822114648.922711674@infradead.org
1 parent f9fc8ca commit 929659a

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

include/linux/completion.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ extern void wait_for_completion(struct completion *);
103103
extern void wait_for_completion_io(struct completion *);
104104
extern int wait_for_completion_interruptible(struct completion *x);
105105
extern int wait_for_completion_killable(struct completion *x);
106+
extern int wait_for_completion_state(struct completion *x, unsigned int state);
106107
extern unsigned long wait_for_completion_timeout(struct completion *x,
107108
unsigned long timeout);
108109
extern unsigned long wait_for_completion_io_timeout(struct completion *x,

kernel/sched/completion.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ EXPORT_SYMBOL(wait_for_completion_io_timeout);
204204
int __sched wait_for_completion_interruptible(struct completion *x)
205205
{
206206
long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_INTERRUPTIBLE);
207+
207208
if (t == -ERESTARTSYS)
208209
return t;
209210
return 0;
@@ -241,12 +242,23 @@ EXPORT_SYMBOL(wait_for_completion_interruptible_timeout);
241242
int __sched wait_for_completion_killable(struct completion *x)
242243
{
243244
long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_KILLABLE);
245+
244246
if (t == -ERESTARTSYS)
245247
return t;
246248
return 0;
247249
}
248250
EXPORT_SYMBOL(wait_for_completion_killable);
249251

252+
int __sched wait_for_completion_state(struct completion *x, unsigned int state)
253+
{
254+
long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, state);
255+
256+
if (t == -ERESTARTSYS)
257+
return t;
258+
return 0;
259+
}
260+
EXPORT_SYMBOL(wait_for_completion_state);
261+
250262
/**
251263
* wait_for_completion_killable_timeout: - waits for completion of a task (w/(to,killable))
252264
* @x: holds the state of this particular completion

0 commit comments

Comments
 (0)