> On Jul 26, 2014, at 5:53 PM, Pravin B Shelar <[email protected]> wrote: > > exact match cache lookup is always done under ovs lock. So > use ovsl_dereference() API for rcu access. >
This description makes it sound like exact match cache lookup would always be done under ovs lock, which just cannot be true. Do you mean that this specific function is always called under ovs lock? Jarno > Signed-off-by: Pravin B Shelar <[email protected]> > --- > datapath/flow_table.c | 17 +++++++---------- > 1 file changed, 7 insertions(+), 10 deletions(-) > > diff --git a/datapath/flow_table.c b/datapath/flow_table.c > index 21f67bf..cfd5a84 100644 > --- a/datapath/flow_table.c > +++ b/datapath/flow_table.c > @@ -666,23 +666,20 @@ struct sw_flow *ovs_flow_tbl_lookup(struct flow_table > *tbl, > struct sw_flow *ovs_flow_tbl_lookup_exact(struct flow_table *tbl, > struct sw_flow_match *match) > { > - struct table_instance *ti = rcu_dereference_ovsl(tbl->ti); > - struct mask_array *ma = rcu_dereference_ovsl(tbl->mask_array); > - struct sw_flow *flow; > - u32 __always_unused n_mask_hit; > + struct mask_array *ma = ovsl_dereference(tbl->mask_array); > int i; > > /* Always called under ovs-mutex. */ > for (i = 0; i < ma->count; i++) { > + struct table_instance *ti = ovsl_dereference(tbl->ti); > + u32 __always_unused n_mask_hit; > struct sw_flow_mask *mask; > + struct sw_flow *flow; > > mask = ovsl_dereference(ma->masks[i]); > - if (mask) { > - flow = masked_flow_lookup(ti, match->key, mask, &n_mask_hit); > - if (flow && ovs_flow_cmp_unmasked_key(flow, match)) { /* Found */ > - return flow; > - } > - } > + flow = masked_flow_lookup(ti, match->key, mask, &n_mask_hit); > + if (flow && ovs_flow_cmp_unmasked_key(flow, match)) > + return flow; > } > return NULL; > } > -- > 1.9.3 > > _______________________________________________ > dev mailing list > [email protected] > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
