Wed, Nov 01, 2017 at 05:11:14PM CET, alexei.starovoi...@gmail.com wrote: >On Wed, Nov 01, 2017 at 09:18:03AM +0100, Jiri Pirko wrote: >> Wed, Nov 01, 2017 at 03:12:50AM CET, alexei.starovoi...@gmail.com wrote: >> >On Tue, Oct 31, 2017 at 04:12:22PM +0100, Jiri Pirko wrote: >> >> From: Jiri Pirko <j...@mellanox.com> >> >> >> >> In sch_handle_egress and sch_handle_ingress tp->q is used only in order >> >> to update stats. So stats and filter list are the only things that are >> >> needed in clsact qdisc fastpath processing. Introduce new mini_Qdisc >> >> struct to hold those items. Also, introduce a helper to swap the >> >> mini_Qdisc structures in case filter list head changes. >> >> >> >> This removes need for tp->q usage without added overhead. >> >> >> >> Signed-off-by: Jiri Pirko <j...@mellanox.com> >> >> --- >> >> v2->v3: >> >> - Using head change callback to replace miniq pointer every time tp head >> >> changes. This eliminates one rcu dereference and makes the claim >> >> "without >> >> added overhead" valid. >> > >> >you kidding, right? >> >It's still two loads. >> >> I'm not. >> I replace: >> >> one rcu_dereference_bh(dev->egress_cl_list) >> by one rcu_dereference_bh(dev->miniq_egress) >> >> one dereference cl->q >> by one dereference miniq->filter_list >> >> What do I miss? > >that in assembler code they are the same when debug is off ?
Pardon my ignorance, but I don't get your point :( Could you please elaborate a bit more? Thanks!