]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
sched/wait: Add wait_event_state_exclusive()
authorSergey Senozhatsky <senozhatsky@chromium.org>
Tue, 10 Jun 2025 04:52:28 +0000 (13:52 +0900)
committerMiklos Szeredi <mszeredi@redhat.com>
Wed, 27 Aug 2025 12:29:43 +0000 (14:29 +0200)
Allows exclusive waits with a custom @state.

Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
include/linux/wait.h

index 09855d8194180e1848db857b2af95112df91128c..f648044466d5f55f2d65a3aa153b4dfe39f0b6dc 100644 (file)
@@ -965,6 +965,18 @@ extern int do_wait_intr_irq(wait_queue_head_t *, wait_queue_entry_t *);
        __ret;                                                                  \
 })
 
+#define __wait_event_state_exclusive(wq, condition, state)                     \
+       ___wait_event(wq, condition, state, 1, 0, schedule())
+
+#define wait_event_state_exclusive(wq, condition, state)                       \
+({                                                                             \
+       int __ret = 0;                                                          \
+       might_sleep();                                                          \
+       if (!(condition))                                                       \
+               __ret = __wait_event_state_exclusive(wq, condition, state);     \
+       __ret;                                                                  \
+})
+
 #define __wait_event_killable_timeout(wq_head, condition, timeout)             \
        ___wait_event(wq_head, ___wait_cond_timeout(condition),                 \
                      TASK_KILLABLE, 0, timeout,                                \