* Daniel Wagner | 2016-03-08 16:59:13 [+0100]: >Hi, Hi, >As Peter correctly pointed out in [1] a simple conversion from >wait to swait in completion.c wont work. I played a bit around and >came up with this rather ugly idea. besides all the things I mentioned privatly, here is what I have currently in -RT: +void swake_up_all_locked(struct swait_queue_head *q) +{ + struct swait_queue *curr; + int wakes = 0; + + while (!list_empty(&q->task_list)) { + + curr = list_first_entry(&q->task_list, typeof(*curr), + task_list); + wake_up_process(curr->task); + list_del_init(&curr->task_list); + wakes++; + } + WARN_ON(wakes > 2); +} +EXPORT_SYMBOL(swake_up_all_locked); the remaining part is what you have. The only user so far is complete() and currently I see ony complete_all() with zero or one waiter. If none of my boxes die over the night, I intend to release this tomorrow in -RT and see if someone else triggers the limit. However I don't think if your DEFER flag solution is all that bad. I have also the block-mq in -RT using swait and they perform wakes with irqs-off. Not in -RT but mainline. So me might need something to make it work properly. But if we defer the wakeup they might come at us and complain about the latency… Sebastian -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html