Folk periodically talk about evolving the "struct completion" support ... here's one: int wait_event (struct completion *x, signed long timeout_jiffies); Returns zero if the event happened, nonzero if it timed out. An example timeout action might be to cancel a request then use wait_for_completion(x) to synchronize with that. It's been behaving for me so far. Questions from me: - Is this appropriate to merge as-is? The tradeoff I'm thinking of is code duplication; this patch avoids it ("smaller==better" rule-of-thumb) but maybe someone has real tuning knowledge, or a "standard" lk policy applies. Or there might be bugs or api transgressions. - One routine was unavailable to modules; now exported. That seemed to just be an oversight. This doesn't add an "interruptible wait" api mode, which I'd expect some others might find a use for. This patch will let us clean up some dubious code in usbcore which is more or less trying to do a wait_event(). Thanks in advance for any comments. - Dave