On Thu, Jun 29, 2017 at 09:40:15PM +0200, Luis R. Rodriguez wrote: > On Thu, Jun 29, 2017 at 11:59:29AM -0700, Linus Torvalds wrote: > > On Thu, Jun 29, 2017 at 11:33 AM, Davidlohr Bueso <dave@xxxxxxxxxxxx> wrote: > > > On Thu, 29 Jun 2017, Linus Torvalds wrote: > > > > > >> I actually think swait is pure garbage. Most users only wake up one > > >> process anyway, and using swait for that is stupid. If you only wake > > >> up one, you might as well just have a single process pointer, not a > > >> wait list at all, and then use "wake_up_process()". > > > > > > But you still need the notion of a queue, even if you wake one task > > > at a time... I'm probably missing your point here. > > > > The *reason* they wake up only one seems to be that there really is > > just one. It's some per-cpu idle thread for kvm, and for RCU it's the > > RCU workqueue thread. > > > > So the queue literally looks suspiciously pointless. > > > > But I might be wrong, and there can actually be multiple entries. > > Since this swake_up() --> swake_up_all() reportedly *fixed* the one wake up > issue it would seem this does queue [0]. That said, I don't see any simple tests > tools/testing/selftests/swait but then again we don't have test for regular > waits either... > > [0] https://bugzilla.kernel.org/show_bug.cgi?id=195477 I should also note that the swake_up_all() should have only helped in cases where 3 cards were used, as if only 2 were used that should have been covered by just the swake_up(). Unless of course I hear otherwise by the reporter, Nicolas or from Jakub. Luis