Lines Matching refs:mask
60 bool full, const struct sw_flow_mask *mask) in ovs_flow_mask_key() argument
62 int start = full ? 0 : mask->range.start; in ovs_flow_mask_key()
63 int len = full ? sizeof *dst : range_n_bytes(&mask->range); in ovs_flow_mask_key()
64 const long *m = (const long *)((const u8 *)&mask->key + start); in ovs_flow_mask_key()
89 flow->mask = NULL; in ovs_flow_alloc()
473 const struct sw_flow_mask *mask) in masked_flow_lookup() argument
480 ovs_flow_mask_key(&masked_key, unmasked, false, mask); in masked_flow_lookup()
481 hash = flow_hash(&masked_key, &mask->range); in masked_flow_lookup()
484 if (flow->mask == mask && flow->flow_table.hash == hash && in masked_flow_lookup()
485 flow_cmp_masked_key(flow, &masked_key, &mask->range)) in masked_flow_lookup()
496 struct sw_flow_mask *mask; in ovs_flow_tbl_lookup_stats() local
500 list_for_each_entry_rcu(mask, &tbl->mask_list, list) { in ovs_flow_tbl_lookup_stats()
502 flow = masked_flow_lookup(ti, key, mask); in ovs_flow_tbl_lookup_stats()
521 struct sw_flow_mask *mask; in ovs_flow_tbl_lookup_exact() local
525 list_for_each_entry(mask, &tbl->mask_list, list) { in ovs_flow_tbl_lookup_exact()
526 flow = masked_flow_lookup(ti, match->key, mask); in ovs_flow_tbl_lookup_exact()
576 struct sw_flow_mask *mask; in ovs_flow_tbl_num_masks() local
579 list_for_each_entry(mask, &table->mask_list, list) in ovs_flow_tbl_num_masks()
592 static void flow_mask_remove(struct flow_table *tbl, struct sw_flow_mask *mask) in flow_mask_remove() argument
594 if (mask) { in flow_mask_remove()
599 BUG_ON(!mask->ref_count); in flow_mask_remove()
600 mask->ref_count--; in flow_mask_remove()
602 if (!mask->ref_count) { in flow_mask_remove()
603 list_del_rcu(&mask->list); in flow_mask_remove()
604 kfree_rcu(mask, rcu); in flow_mask_remove()
626 flow_mask_remove(table, flow->mask); in ovs_flow_tbl_remove()
631 struct sw_flow_mask *mask; in mask_alloc() local
633 mask = kmalloc(sizeof(*mask), GFP_KERNEL); in mask_alloc()
634 if (mask) in mask_alloc()
635 mask->ref_count = 1; in mask_alloc()
637 return mask; in mask_alloc()
652 const struct sw_flow_mask *mask) in flow_mask_find() argument
659 if (mask_equal(mask, m)) in flow_mask_find()
670 struct sw_flow_mask *mask; in flow_mask_insert() local
671 mask = flow_mask_find(tbl, new); in flow_mask_insert()
672 if (!mask) { in flow_mask_insert()
674 mask = mask_alloc(); in flow_mask_insert()
675 if (!mask) in flow_mask_insert()
677 mask->key = new->key; in flow_mask_insert()
678 mask->range = new->range; in flow_mask_insert()
679 list_add_rcu(&mask->list, &tbl->mask_list); in flow_mask_insert()
681 BUG_ON(!mask->ref_count); in flow_mask_insert()
682 mask->ref_count++; in flow_mask_insert()
685 flow->mask = mask; in flow_mask_insert()
695 flow->flow_table.hash = flow_hash(&flow->key, &flow->mask->range); in flow_key_insert()
737 const struct sw_flow_mask *mask) in ovs_flow_tbl_insert() argument
741 err = flow_mask_insert(table, flow, mask); in ovs_flow_tbl_insert()