On Fri, 26 Jul 2019 21:34:06 +0800, wenxu@xxxxxxxxx wrote: > From: wenxu <wenxu@xxxxxxxxx> > > Because the new flow-indr-block can't get the tcf_block > directly. > It provide a callback to find the tcf block immediately > when the device register and contain a ingress block. > > Signed-off-by: wenxu <wenxu@xxxxxxxxx> Please CC people who gave you feedback on your subsequent submissions. > diff --git a/include/net/flow_offload.h b/include/net/flow_offload.h > index 66f89bc..3b2e848 100644 > --- a/include/net/flow_offload.h > +++ b/include/net/flow_offload.h > @@ -391,6 +391,10 @@ struct flow_indr_block_dev { > struct flow_block *flow_block; > }; > > +typedef void flow_indr_get_default_block_t(struct flow_indr_block_dev *indr_dev); > + > +void flow_indr_set_default_block_cb(flow_indr_get_default_block_t *cb); > + > struct flow_indr_block_dev *flow_indr_block_dev_lookup(struct net_device *dev); > > int __flow_indr_block_cb_register(struct net_device *dev, void *cb_priv, > diff --git a/net/core/flow_offload.c b/net/core/flow_offload.c > index 9f1ae67..db8469d 100644 > --- a/net/core/flow_offload.c > +++ b/net/core/flow_offload.c > @@ -298,6 +298,14 @@ struct flow_indr_block_dev * > } > EXPORT_SYMBOL(flow_indr_block_dev_lookup); > > +static flow_indr_get_default_block_t *flow_indr_get_default_block; This static variable which can only be set to the TC's callback really is not a great API design :/ > +void flow_indr_set_default_block_cb(flow_indr_get_default_block_t *cb) > +{ > + flow_indr_get_default_block = cb; > +} > +EXPORT_SYMBOL(flow_indr_set_default_block_cb); > + > static struct flow_indr_block_dev *flow_indr_block_dev_get(struct net_device *dev) > { > struct flow_indr_block_dev *indr_dev; > @@ -312,6 +320,10 @@ static struct flow_indr_block_dev *flow_indr_block_dev_get(struct net_device *de > > INIT_LIST_HEAD(&indr_dev->cb_list); > indr_dev->dev = dev; > + > + if (flow_indr_get_default_block) > + flow_indr_get_default_block(indr_dev); > + > if (rhashtable_insert_fast(&indr_setup_block_ht, &indr_dev->ht_node, > flow_indr_setup_block_ht_params)) { > kfree(indr_dev);