Commit 8b32201de1f87878ace971bfdc2846a4f3a5bb2b
Committed by
Linus Torvalds
1 parent
9cc236827f
Exists in
master
and in
13 other branches
wait: explain the shadowing and type inconsistencies
Stick in a comment before someone else tries to fix the sparse warning this generates. Suggested-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/n/tip-o2ro6f3vkxklni0bc8f7m68s@git.kernel.org Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 1 changed file with 13 additions and 1 deletions Side-by-side Diff
include/linux/wait.h
... | ... | @@ -191,11 +191,23 @@ |
191 | 191 | (!__builtin_constant_p(state) || \ |
192 | 192 | state == TASK_INTERRUPTIBLE || state == TASK_KILLABLE) \ |
193 | 193 | |
194 | +/* | |
195 | + * The below macro ___wait_event() has an explicit shadow of the __ret | |
196 | + * variable when used from the wait_event_*() macros. | |
197 | + * | |
198 | + * This is so that both can use the ___wait_cond_timeout() construct | |
199 | + * to wrap the condition. | |
200 | + * | |
201 | + * The type inconsistency of the wait_event_*() __ret variable is also | |
202 | + * on purpose; we use long where we can return timeout values and int | |
203 | + * otherwise. | |
204 | + */ | |
205 | + | |
194 | 206 | #define ___wait_event(wq, condition, state, exclusive, ret, cmd) \ |
195 | 207 | ({ \ |
196 | 208 | __label__ __out; \ |
197 | 209 | wait_queue_t __wait; \ |
198 | - long __ret = ret; \ | |
210 | + long __ret = ret; /* explicit shadow */ \ | |
199 | 211 | \ |
200 | 212 | INIT_LIST_HEAD(&__wait.task_list); \ |
201 | 213 | if (exclusive) \ |