Messages in this thread | | | Date | Tue, 21 Mar 2017 08:13:54 +0900 | From | Byungchul Park <> | Subject | Re: [PATCH] sched: Wake up all non-exclusive waiters in __wake_up_common() |
| |
On Mon, Mar 20, 2017 at 11:41:47AM +0100, Peter Zijlstra wrote: > On Wed, Mar 08, 2017 at 09:21:52AM +0900, Byungchul Park wrote: > > __wake_up_common() should wake up all non-exclusive waiters and > > exclusive waiters as many as nr_exclusive, but currently it does not. > > > > Consider a wait queue like the following for example: > > > > A(exclusive) -> B(non-exclusive) -> C(non-exclusive) > > > > Current code will wake up only A when nr_exclusive = 1, but has to wake > > up A, B and C. Make it do as we expect. > > You have the list oredered the wrong way around. We add exclusive > waiters to the tail, therefore we'll have woken up all the !exclusive > waiters before we start decrementing nr_exclusive.
You're right. I proposed the patch because of __add_wait_queue_exclusive(), which queues an item at the head. But it was my mistake. Sorry.
| |