The qdisc pointer traverses to the softirq handler, which can be run
in a process context (via ksoftirqd), and this pointer gets there
via the per-cpu ->output_queue.
I didn't see it possible to keep scheduling the netdev_queues, as the
qdiscs can be shared with multiple queues.
Qdisc "are we running?" and other state pieces are now inside of the
Qdisc itself. And all of the qdisc_run() and netif_schedule logic is,
as a result, Qdisc centric.
The synchronization object is the qdisc. So we can't resample the
qdisc after scheduling it, because then the qdisc attached to the
netdev_queue can change and we'd be holding the root lock for
the wrong qdisc object.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html