Fri, Aug 25, 2017 at 02:29:57PM CEST, j...@mojatatu.com wrote: >On 17-08-24 07:51 PM, Cong Wang wrote: >> It is ugly to hide a u32-filter-specific pointer inside Qdisc, >> this breaks the TC layers: >> >> 1. Qdisc is a generic representation, should not have any specific >> data of any type >> >> 2. Qdisc layer is above filter layer, should only save filters in >> the list of struct tcf_proto. >> >> This pointer is used as the head of the chain of u32 hash tables, >> that is struct tc_u_hnode, because u32 filter is very special, >> it allows to create multiple hash tables within one qdisc and >> across multiple u32 filters. >> >> Instead of using this ugly pointer, we can just save it in a global >> hash table key'ed by (dev ifindex, qdisc handle), therefore we can >> still treat it as a per qdisc basis data structure conceptually. >> >> Of course, because of network namespaces, this key is not unique >> at all, but it is fine as we already have a pointer to Qdisc in >> struct tc_u_common, we can just compare the pointers when collision. >> >> And this only affects slow paths, has no impact to fast path, >> thanks to the pointer ->tp_c. >> >> Cc: Jamal Hadi Salim <j...@mojatatu.com> >> Cc: Jiri Pirko <j...@resnulli.us> >> Signed-off-by: Cong Wang <xiyou.wangc...@gmail.com> > >Nice work. should open the doors for Jiri now.
One of the doors, couple more left :) > >Acked-by: Jamal Hadi Salim <j...@mojatatu.com> > >cheers, >jamal