On Wed, Jun 26, 2019 at 02:12:56PM +0200, Jiri Pirko wrote: > Tue, Jun 25, 2019 at 10:31:54AM CEST, pablo@xxxxxxxxxxxxx wrote: > >On Fri, Jun 21, 2019 at 07:16:03PM +0200, Jiri Pirko wrote: > >> Thu, Jun 20, 2019 at 09:49:09PM CEST, pablo@xxxxxxxxxxxxx wrote: > >> > >> [...] > >> > >> > > >> >+static LIST_HEAD(tcf_block_cb_list); > >> > >> I still don't like the global list. Have to go throught the code more > >> carefully, but why you can't pass the priv/ctx from tc/netfilter. From > >> tc it would be tcf_block as it is now, from netfilter something else. > > > >This tcf_block_cb_list should go away at some point, once drivers know > >how to deal with multiple subsystems using the setup block > >infrastructure. As I said in my previous email, only one can set up > >the block at this stage, the ones coming later will hit busy. > > The driver should know if it can bind or is busy. Also, the bind cmd > should contain type of binder (tc/nft/whatever) or perhaps rather binder > priority (according to the hook order in rx/tx). OK, so I see two possible paths then: #1 Add global list and allow one single subsystem to bind by now. Then later, in a follow up patchset. Add binder type and priority once there is a driver that can handle the three subsystems, remove this global list and each driver deals/knows what to do from the binder path. #2 Remove the global list now, each driver maintains a list of flow blocks internally, allow one single flow block by now. This will need a bit more code, since there will be code in the driver to maintain the list of existing flow blocks, per driver, instead of global. So it will be a per-driver global local to check if there is a flow block with this [ cb, cb_ident ] already in place. #1 is almost ready - it's this batch :-) - then #2 may need more code - this batch is slightly large. I understand though that path #2 may make it easier for the first driver client allowing for the three subsystems to bind. Let me know what path your prefer. Thanks for reviewing.