diff options
Diffstat (limited to 'include/linux/freezer.h')
-rw-r--r-- | include/linux/freezer.h | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/include/linux/freezer.h b/include/linux/freezer.h index 1effc8b56b4e..3672f731f03a 100644 --- a/include/linux/freezer.h +++ b/include/linux/freezer.h | |||
@@ -134,10 +134,25 @@ static inline void set_freezable_with_signal(void) | |||
134 | } | 134 | } |
135 | 135 | ||
136 | /* | 136 | /* |
137 | * Freezer-friendly wrappers around wait_event_interruptible() and | 137 | * Freezer-friendly wrappers around wait_event_interruptible(), |
138 | * wait_event_interruptible_timeout(), originally defined in <linux/wait.h> | 138 | * wait_event_killable() and wait_event_interruptible_timeout(), originally |
139 | * defined in <linux/wait.h> | ||
139 | */ | 140 | */ |
140 | 141 | ||
142 | #define wait_event_freezekillable(wq, condition) \ | ||
143 | ({ \ | ||
144 | int __retval; \ | ||
145 | do { \ | ||
146 | __retval = wait_event_killable(wq, \ | ||
147 | (condition) || freezing(current)); \ | ||
148 | if (__retval && !freezing(current)) \ | ||
149 | break; \ | ||
150 | else if (!(condition)) \ | ||
151 | __retval = -ERESTARTSYS; \ | ||
152 | } while (try_to_freeze()); \ | ||
153 | __retval; \ | ||
154 | }) | ||
155 | |||
141 | #define wait_event_freezable(wq, condition) \ | 156 | #define wait_event_freezable(wq, condition) \ |
142 | ({ \ | 157 | ({ \ |
143 | int __retval; \ | 158 | int __retval; \ |