A: Because it messes up the order in which people normally read text. Q: Why is top-posting such a bad thing? A: Top-posting. Q: What is the most annoying thing in e-mail? On Mon, Sep 23, 2019 at 07:37:46PM +0300, Pavel Begunkov wrote: > Just in case duplicating a mail from the cover-letter thread: Just because every patch should have a self contained and coherent Changelog. > It could be done with @cond indeed, that's how it works for now. > However, this addresses performance issues only. > > The problem with wait_event_*() is that, if we have a counter and are > trying to wake up tasks after each increment, it would schedule each > waiting task O(threshold) times just for it to spuriously check @cond > and go back to sleep. All that overhead (memory barriers, registers > save/load, accounting, etc) turned out to be enough for some workloads > to slow down the system. > > With this specialisation it still traverses a wait list and makes > indirect calls to the checker callback, but the list supposedly is > fairly small, so performance there shouldn't be a problem, at least for > now. > > Regarding semantics; It should wake a task when a value passed to > wake_up_threshold() is greater or equal then a task's threshold, that is > specified individually for each task in wait_threshold_*(). > > In pseudo code: > ``` > def wake_up_threshold(n, wait_queue): > for waiter in wait_queue: > waiter.wake_up_if(n >= waiter.threshold); > ``` > > Any thoughts how to do it better? Ideas are very welcome. > > BTW, this monster is mostly a copy-paste from wait_event_*(), > wait_bit_*(). We could try to extract some common parts from these > three, but that's another topic. I don't think that is another topic at all. It is a quality of implementation issue. We already have too many copies of all that (3). So basically you want to fudge the wake function to do the/a @cond test, not unlike what wait_bit already does, but differenly. I'm really rather annoyed with C for not having proper lambda functions; that would make all this so much easier. Anyway, let me have a poke at this in the morning, it's late already. Also, is anything actually using wait_queue_entry::private ? I'm not finding any in a hurry.