Lines Matching refs:mask
54 bool full, const struct sw_flow_mask *mask) in ovs_flow_mask_key() argument
56 int start = full ? 0 : mask->range.start; in ovs_flow_mask_key()
57 int len = full ? sizeof *dst : range_n_bytes(&mask->range); in ovs_flow_mask_key()
58 const long *m = (const long *)((const u8 *)&mask->key + start); in ovs_flow_mask_key()
301 struct sw_flow_mask *mask) in tbl_mask_array_del_mask() argument
308 if (mask == ovsl_dereference(ma->masks[i])) in tbl_mask_array_del_mask()
321 kfree_rcu(mask, rcu); in tbl_mask_array_del_mask()
333 static void flow_mask_remove(struct flow_table *tbl, struct sw_flow_mask *mask) in flow_mask_remove() argument
335 if (mask) { in flow_mask_remove()
340 BUG_ON(!mask->ref_count); in flow_mask_remove()
341 mask->ref_count--; in flow_mask_remove()
343 if (!mask->ref_count) in flow_mask_remove()
344 tbl_mask_array_del_mask(tbl, mask); in flow_mask_remove()
474 flow_mask_remove(table, flow->mask); in table_instance_flow_free()
702 const struct sw_flow_mask *mask, in masked_flow_lookup() argument
710 ovs_flow_mask_key(&masked_key, unmasked, false, mask); in masked_flow_lookup()
711 hash = flow_hash(&masked_key, &mask->range); in masked_flow_lookup()
717 if (flow->mask == mask && flow->flow_table.hash == hash && in masked_flow_lookup()
718 flow_cmp_masked_key(flow, &masked_key, &mask->range)) in masked_flow_lookup()
739 struct sw_flow_mask *mask; in flow_lookup() local
743 mask = rcu_dereference_ovsl(ma->masks[*index]); in flow_lookup()
744 if (mask) { in flow_lookup()
745 flow = masked_flow_lookup(ti, key, mask, n_mask_hit); in flow_lookup()
761 mask = rcu_dereference_ovsl(ma->masks[i]); in flow_lookup()
762 if (unlikely(!mask)) in flow_lookup()
765 flow = masked_flow_lookup(ti, key, mask, n_mask_hit); in flow_lookup()
879 struct sw_flow_mask *mask; in ovs_flow_tbl_lookup_exact() local
882 mask = ovsl_dereference(ma->masks[i]); in ovs_flow_tbl_lookup_exact()
883 if (!mask) in ovs_flow_tbl_lookup_exact()
886 flow = masked_flow_lookup(ti, match->key, mask, &n_mask_hit); in ovs_flow_tbl_lookup_exact()
969 struct sw_flow_mask *mask; in mask_alloc() local
971 mask = kmalloc(sizeof(*mask), GFP_KERNEL); in mask_alloc()
972 if (mask) in mask_alloc()
973 mask->ref_count = 1; in mask_alloc()
975 return mask; in mask_alloc()
990 const struct sw_flow_mask *mask) in flow_mask_find() argument
1000 if (t && mask_equal(mask, t)) in flow_mask_find()
1011 struct sw_flow_mask *mask; in flow_mask_insert() local
1013 mask = flow_mask_find(tbl, new); in flow_mask_insert()
1014 if (!mask) { in flow_mask_insert()
1016 mask = mask_alloc(); in flow_mask_insert()
1017 if (!mask) in flow_mask_insert()
1019 mask->key = new->key; in flow_mask_insert()
1020 mask->range = new->range; in flow_mask_insert()
1023 if (tbl_mask_array_add_mask(tbl, mask)) { in flow_mask_insert()
1024 kfree(mask); in flow_mask_insert()
1028 BUG_ON(!mask->ref_count); in flow_mask_insert()
1029 mask->ref_count++; in flow_mask_insert()
1032 flow->mask = mask; in flow_mask_insert()
1042 flow->flow_table.hash = flow_hash(&flow->key, &flow->mask->range); in flow_key_insert()
1084 const struct sw_flow_mask *mask) in ovs_flow_tbl_insert() argument
1088 err = flow_mask_insert(table, flow, mask); in ovs_flow_tbl_insert()
1122 struct sw_flow_mask *mask; in ovs_flow_masks_rebalance() local
1125 mask = rcu_dereference_ovsl(ma->masks[i]); in ovs_flow_masks_rebalance()
1126 if (unlikely(!mask)) in ovs_flow_masks_rebalance()