Paolo Abeni 32f7b44d0f sched: manipulate __QDISC_STATE_RUNNING in qdisc_run_* helpers
Currently NOLOCK qdiscs pay a measurable overhead to atomically
manipulate the __QDISC_STATE_RUNNING. Such bit is flipped twice per
packet in the uncontended scenario with packet rate below the
line rate: on packed dequeue and on the next, failing dequeue attempt.

This changeset moves the bit manipulation into the qdisc_run_{begin,end}
helpers, so that the bit is now flipped only once per packet, with
measurable performance improvement in the uncontended scenario.

This also allows simplifying the qdisc teardown code path - since
qdisc_is_running() is now effective for each qdisc type - and avoid a
possible race between qdisc_run() and dev_deactivate_many(), as now
the some_qdisc_is_busy() can properly detect NOLOCK qdiscs being busy
dequeuing packets.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2018-05-16 12:26:25 -04:00
..
2018-05-04 12:52:47 -04:00
2018-03-27 13:18:09 -04:00
2018-05-03 15:14:57 -04:00
2018-04-23 10:21:24 -04:00
2018-05-11 12:03:06 -04:00
2018-03-27 13:18:09 -04:00
2018-05-08 00:11:40 -04:00
2018-03-27 13:18:09 -04:00
2018-04-17 13:50:58 -04:00
2018-05-04 12:54:38 -04:00
2018-03-27 13:18:09 -04:00
2018-05-14 23:15:27 -04:00
2018-05-03 15:55:25 -07:00