On Fri, Jun 26, 2020 at 3:46 PM Petr Machata <pe...@mellanox.com> wrote: > > A following patch introduces qevents, points in qdisc algorithm where > packet can be processed by user-defined filters. Should this processing > lead to a situation where a new packet is to be enqueued on the same port, > holding the root lock would lead to deadlocks. To solve the issue, qevent > handler needs to unlock and relock the root lock when necessary. > > To that end, add the root lock argument to the qdisc op enqueue, and > propagate throughout.
Hmm, but why do you pass root lock down to each ->enqueue()? You can find root lock with sch_tree_lock() (or qdisc_lock() if you don't care about hierarchy), and you already have qdisc as a parameter of tcf_qevent_handle(). Thanks.