On Mon, Jul 28, 2014 at 12:38 PM, Pravin Shelar <pshe...@nicira.com> wrote: > On Mon, Jul 28, 2014 at 11:46 AM, Andy Zhou <az...@nicira.com> wrote: >> Does unmasked_key also not memset to zero, like key? if yes, is there >> a possibility of mismatch when calling >> ovs_flow_cmp_unmasked_key? >> > unmasked_key is always memset to zero before building the key from > netlink attributes.
Right, It calls ovs_match_init() to make sure unmasked keys are set to zero. Acked-by: Andy Zhou <az...@nicira.com> > >> On Sun, Jul 27, 2014 at 11:55 AM, Pravin B Shelar <pshe...@nicira.com> wrote: >>> Exact match flow lookup is always done under ovs lock. So use >>> ovsl_dereference() API for rcu access. >>> >>> Signed-off-by: Pravin B Shelar <pshe...@nicira.com> >>> --- >>> 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 >>> dev@openvswitch.org >>> http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev