|
@@ -122,28 +122,30 @@ static inline int freezer_should_skip(struct task_struct *p)
|
|
|
#define wait_event_freezable(wq, condition) \
|
|
|
({ \
|
|
|
int __retval; \
|
|
|
- do { \
|
|
|
+ for (;;) { \
|
|
|
__retval = wait_event_interruptible(wq, \
|
|
|
(condition) || freezing(current)); \
|
|
|
- if (__retval && !freezing(current)) \
|
|
|
+ if (__retval || (condition)) \
|
|
|
break; \
|
|
|
- else if (!(condition)) \
|
|
|
- __retval = -ERESTARTSYS; \
|
|
|
- } while (try_to_freeze()); \
|
|
|
+ try_to_freeze(); \
|
|
|
+ } \
|
|
|
__retval; \
|
|
|
})
|
|
|
|
|
|
-
|
|
|
#define wait_event_freezable_timeout(wq, condition, timeout) \
|
|
|
({ \
|
|
|
long __retval = timeout; \
|
|
|
- do { \
|
|
|
+ for (;;) { \
|
|
|
__retval = wait_event_interruptible_timeout(wq, \
|
|
|
(condition) || freezing(current), \
|
|
|
__retval); \
|
|
|
- } while (try_to_freeze()); \
|
|
|
+ if (__retval <= 0 || (condition)) \
|
|
|
+ break; \
|
|
|
+ try_to_freeze(); \
|
|
|
+ } \
|
|
|
__retval; \
|
|
|
})
|
|
|
+
|
|
|
#else /* !CONFIG_FREEZER */
|
|
|
static inline bool frozen(struct task_struct *p) { return false; }
|
|
|
static inline bool freezing(struct task_struct *p) { return false; }
|