Fixes for wait event in the LinuxKPI. These are regression issues
after r319757. 1) Correct the return value from __wait_event_common() from 1 to 0 in case the timeout is specified as MAX_SCHEDULE_TIMEOUT. In the other case __ret is zero and will be substituted in the last part of the macro with the appropriate value before return. 2) Make sure the "timeout" argument is casted to "int" before evaluating negativity. Else the signedness of a "long" might be checked instead of the signedness of an integer. 3) The wait_event() function should not have a return value. Found by: KrishnamRaju ErapaRaju <Krishna2@chelsio.com> MFC after: 1 week Sponsored by: Mellanox Technologies
This commit is contained in:
parent
8ea4441598
commit
4ef8a6301f
@ -127,16 +127,14 @@ int linux_wait_event_common(wait_queue_head_t *, wait_queue_t *, int,
|
||||
*/
|
||||
#define __wait_event_common(wqh, cond, timeout, state, lock) ({ \
|
||||
DEFINE_WAIT(__wq); \
|
||||
const int __timeout = (timeout) < 1 ? 1 : (timeout); \
|
||||
const int __timeout = ((int)(timeout)) < 1 ? 1 : (timeout); \
|
||||
int __start = ticks; \
|
||||
int __ret = 0; \
|
||||
\
|
||||
for (;;) { \
|
||||
linux_prepare_to_wait(&(wqh), &__wq, state); \
|
||||
if (cond) { \
|
||||
__ret = 1; \
|
||||
if (cond) \
|
||||
break; \
|
||||
} \
|
||||
__ret = linux_wait_event_common(&(wqh), &__wq, \
|
||||
__timeout, state, lock); \
|
||||
if (__ret != 0) \
|
||||
@ -158,10 +156,10 @@ int linux_wait_event_common(wait_queue_head_t *, wait_queue_t *, int,
|
||||
__ret; \
|
||||
})
|
||||
|
||||
#define wait_event(wqh, cond) ({ \
|
||||
__wait_event_common(wqh, cond, MAX_SCHEDULE_TIMEOUT, \
|
||||
#define wait_event(wqh, cond) do { \
|
||||
(void) __wait_event_common(wqh, cond, MAX_SCHEDULE_TIMEOUT, \
|
||||
TASK_UNINTERRUPTIBLE, NULL); \
|
||||
})
|
||||
} while (0)
|
||||
|
||||
#define wait_event_timeout(wqh, cond, timeout) ({ \
|
||||
__wait_event_common(wqh, cond, timeout, TASK_UNINTERRUPTIBLE, \
|
||||
|
Loading…
x
Reference in New Issue
Block a user