* [PATCH 0/1] sched/wait: wait_event*_timeout() needs ___wait_cond_timeout() too
@ 2013-10-07 18:30 Oleg Nesterov
2013-10-07 18:31 ` [PATCH 1/1] " Oleg Nesterov
0 siblings, 1 reply; 3+ messages in thread
From: Oleg Nesterov @ 2013-10-07 18:30 UTC (permalink / raw)
To: Ingo Molnar, Peter Zijlstra
Cc: Paul McKenney, Linus Torvalds, Thomas Gleixner, Andrew Morton,
linux-kernel
And another patch we already discussed.
wait_event_timeout(wq, true, 0) still returns 0, this doesn't look
right, and this doesn't match __wait_event_timeout(timeout => 0).
Sure, most probably nobody uses the constant timeout == 0, but this
can break the code which does something like
if (nonblock)
timeout = 0;
else
timeout = TIMEOUT;
success = wait_event_timeout(wq, CONDITION, timeout);
Oleg.
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 1/1] sched/wait: wait_event*_timeout() needs ___wait_cond_timeout() too
2013-10-07 18:30 [PATCH 0/1] sched/wait: wait_event*_timeout() needs ___wait_cond_timeout() too Oleg Nesterov
@ 2013-10-07 18:31 ` Oleg Nesterov
2013-10-17 16:49 ` [tip:sched/core] sched/wait: Add ___wait_cond_timeout() to wait_event*_timeout() too tip-bot for Oleg Nesterov
0 siblings, 1 reply; 3+ messages in thread
From: Oleg Nesterov @ 2013-10-07 18:31 UTC (permalink / raw)
To: Ingo Molnar, Peter Zijlstra
Cc: Paul McKenney, Linus Torvalds, Thomas Gleixner, Andrew Morton,
linux-kernel
Commit 4c663cfc ("wait: fix false timeouts when using
wait_event_timeout()") introduced the additional condition checks
after a timeout but only in the "slow" __wait*() paths.
wait_event_timeout(wq, CONDITION, 0) still returns 0 if CONDITION
is already true and we do not call __wait*().
Now that we have ___wait_cond_timeout() we can use it instead to
ensure that __ret will be properly updated.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
include/linux/wait.h | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/include/linux/wait.h b/include/linux/wait.h
index ff9e20f..ec099b0 100644
--- a/include/linux/wait.h
+++ b/include/linux/wait.h
@@ -273,7 +273,7 @@ do { \
#define wait_event_timeout(wq, condition, timeout) \
({ \
long __ret = timeout; \
- if (!(condition)) \
+ if (!___wait_cond_timeout(condition)) \
__ret = __wait_event_timeout(wq, condition, timeout); \
__ret; \
})
@@ -331,7 +331,7 @@ do { \
#define wait_event_interruptible_timeout(wq, condition, timeout) \
({ \
long __ret = timeout; \
- if (!(condition)) \
+ if (!___wait_cond_timeout(condition)) \
__ret = __wait_event_interruptible_timeout(wq, \
condition, timeout); \
__ret; \
@@ -772,7 +772,7 @@ do { \
timeout) \
({ \
long __ret = timeout; \
- if (!(condition)) \
+ if (!___wait_cond_timeout(condition)) \
__ret = __wait_event_interruptible_lock_irq_timeout( \
wq, condition, lock, timeout); \
__ret; \
--
1.5.5.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [tip:sched/core] sched/wait: Add ___wait_cond_timeout() to wait_event*_timeout() too
2013-10-07 18:31 ` [PATCH 1/1] " Oleg Nesterov
@ 2013-10-17 16:49 ` tip-bot for Oleg Nesterov
0 siblings, 0 replies; 3+ messages in thread
From: tip-bot for Oleg Nesterov @ 2013-10-17 16:49 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, peterz, oleg, tglx
Commit-ID: 8922915b38cd8b72f8e5af614b95be71d1d299d4
Gitweb: http://git.kernel.org/tip/8922915b38cd8b72f8e5af614b95be71d1d299d4
Author: Oleg Nesterov <oleg@redhat.com>
AuthorDate: Mon, 7 Oct 2013 20:31:06 +0200
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Wed, 16 Oct 2013 14:22:17 +0200
sched/wait: Add ___wait_cond_timeout() to wait_event*_timeout() too
Commit 4c663cfc ("wait: fix false timeouts when using
wait_event_timeout()") introduced the additional condition checks
after a timeout but only in the "slow" __wait*() paths.
wait_event_timeout(wq, CONDITION, 0) still returns 0 if CONDITION
is already true and we do not call __wait*().
Now that we have ___wait_cond_timeout() we can use it instead to
ensure that __ret will be properly updated.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20131007183106.GA10973@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
include/linux/wait.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/include/linux/wait.h b/include/linux/wait.h
index a2726c7..04c0260 100644
--- a/include/linux/wait.h
+++ b/include/linux/wait.h
@@ -270,7 +270,7 @@ do { \
#define wait_event_timeout(wq, condition, timeout) \
({ \
long __ret = timeout; \
- if (!(condition)) \
+ if (!___wait_cond_timeout(condition)) \
__ret = __wait_event_timeout(wq, condition, timeout); \
__ret; \
})
@@ -328,7 +328,7 @@ do { \
#define wait_event_interruptible_timeout(wq, condition, timeout) \
({ \
long __ret = timeout; \
- if (!(condition)) \
+ if (!___wait_cond_timeout(condition)) \
__ret = __wait_event_interruptible_timeout(wq, \
condition, timeout); \
__ret; \
@@ -769,7 +769,7 @@ do { \
timeout) \
({ \
long __ret = timeout; \
- if (!(condition)) \
+ if (!___wait_cond_timeout(condition)) \
__ret = __wait_event_interruptible_lock_irq_timeout( \
wq, condition, lock, timeout); \
__ret; \
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-10-17 16:50 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-07 18:30 [PATCH 0/1] sched/wait: wait_event*_timeout() needs ___wait_cond_timeout() too Oleg Nesterov
2013-10-07 18:31 ` [PATCH 1/1] " Oleg Nesterov
2013-10-17 16:49 ` [tip:sched/core] sched/wait: Add ___wait_cond_timeout() to wait_event*_timeout() too tip-bot for Oleg Nesterov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.