65 lines
1.7 KiB
C
65 lines
1.7 KiB
C
/*
|
|
* Utility macros of ISH
|
|
*
|
|
* Copyright (c) 2014-2016, Intel Corporation.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms and conditions of the GNU General Public License,
|
|
* version 2, as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*/
|
|
#ifndef UTILS__H
|
|
#define UTILS__H
|
|
|
|
#define WAIT_FOR_SEND_SLICE (HZ / 10)
|
|
#define WAIT_FOR_CONNECT_SLICE (HZ / 10)
|
|
|
|
/*
|
|
* Waits for specified event when a thread that triggers event can't signal
|
|
* Also, waits *at_least* `timeinc` after condition is satisfied
|
|
*/
|
|
#define timed_wait_for(timeinc, condition) \
|
|
do { \
|
|
int completed = 0; \
|
|
do { \
|
|
unsigned long j; \
|
|
int done = 0; \
|
|
\
|
|
completed = (condition); \
|
|
for (j = jiffies, done = 0; !done; ) { \
|
|
schedule_timeout(timeinc); \
|
|
if (time_is_before_eq_jiffies(j + timeinc)) \
|
|
done = 1; \
|
|
} \
|
|
} while (!(completed)); \
|
|
} while (0)
|
|
|
|
|
|
/*
|
|
* Waits for specified event when a thread that triggers event
|
|
* can't signal with timeout (use whenever we may hang)
|
|
*/
|
|
#define timed_wait_for_timeout(timeinc, condition, timeout) \
|
|
do { \
|
|
int t = timeout; \
|
|
do { \
|
|
unsigned long j; \
|
|
int done = 0; \
|
|
\
|
|
for (j = jiffies, done = 0; !done; ) { \
|
|
schedule_timeout(timeinc); \
|
|
if (time_is_before_eq_jiffies(j + timeinc)) \
|
|
done = 1; \
|
|
} \
|
|
t -= timeinc; \
|
|
if (t <= 0) \
|
|
break; \
|
|
} while (!(condition)); \
|
|
} while (0)
|
|
|
|
#endif /* UTILS__H */
|