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:
Hans Petter Selasky 2017-08-10 13:00:10 +00:00
parent 8ea4441598
commit 4ef8a6301f

View File

@ -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, \