svn commit: r305368 - head/sys/kern

Mark Johnston markj at freebsd.org
Mon Sep 5 18:04:12 UTC 2016


On Mon, Sep 05, 2016 at 10:30:24AM -0700, John Baldwin wrote:
> On Sunday, September 04, 2016 12:29:49 AM Mark Johnston wrote:
> > Author: markj
> > Date: Sun Sep  4 00:29:48 2016
> > New Revision: 305368
> > URL: https://svnweb.freebsd.org/changeset/base/305368
> > 
> > Log:
> >   Micro-optimize sleepq_signal().
> >   
> >   Lift a comparison out of the loop that finds the highest-priority thread
> >   on the queue.
> >   
> >   MFC after:	1 week
> 
> Could this safely use TAILQ_FOREACH_FROM?

Are you suggesting something like this?

besttd = TAILQ_FIRST(&sq->sq_blocked[queue]);
td = TAILQ_NEXT(besttd, td_slpq);
TAILQ_FOREACH_FROM(td, &sq->sq_blocked[queue], td_slpq) {
...

I think that would work, and it avoids visiting the first element
unnecessarily when the queue contains more than one element. If the
queue contains one element, we'd visit it because of
TAILQ_FOREACH_FROM's surprising behaviour of iterating over the entire
queue when the listelem is NULL.


More information about the svn-src-head mailing list