Lines Matching refs:mask
59 bool full, const struct sw_flow_mask *mask) in ovs_flow_mask_key() argument
61 int start = full ? 0 : mask->range.start; in ovs_flow_mask_key()
62 int len = full ? sizeof *dst : range_n_bytes(&mask->range); in ovs_flow_mask_key()
63 const long *m = (const long *)((const u8 *)&mask->key + start); in ovs_flow_mask_key()
88 flow->mask = NULL; in ovs_flow_alloc()
471 const struct sw_flow_mask *mask) in masked_flow_lookup() argument
478 ovs_flow_mask_key(&masked_key, unmasked, false, mask); in masked_flow_lookup()
479 hash = flow_hash(&masked_key, &mask->range); in masked_flow_lookup()
482 if (flow->mask == mask && flow->flow_table.hash == hash && in masked_flow_lookup()
483 flow_cmp_masked_key(flow, &masked_key, &mask->range)) in masked_flow_lookup()
494 struct sw_flow_mask *mask; in ovs_flow_tbl_lookup_stats() local
498 list_for_each_entry_rcu(mask, &tbl->mask_list, list) { in ovs_flow_tbl_lookup_stats()
500 flow = masked_flow_lookup(ti, key, mask); in ovs_flow_tbl_lookup_stats()
519 struct sw_flow_mask *mask; in ovs_flow_tbl_lookup_exact() local
523 list_for_each_entry(mask, &tbl->mask_list, list) { in ovs_flow_tbl_lookup_exact()
524 flow = masked_flow_lookup(ti, match->key, mask); in ovs_flow_tbl_lookup_exact()
574 struct sw_flow_mask *mask; in ovs_flow_tbl_num_masks() local
577 list_for_each_entry(mask, &table->mask_list, list) in ovs_flow_tbl_num_masks()
590 static void flow_mask_remove(struct flow_table *tbl, struct sw_flow_mask *mask) in flow_mask_remove() argument
592 if (mask) { in flow_mask_remove()
597 BUG_ON(!mask->ref_count); in flow_mask_remove()
598 mask->ref_count--; in flow_mask_remove()
600 if (!mask->ref_count) { in flow_mask_remove()
601 list_del_rcu(&mask->list); in flow_mask_remove()
602 kfree_rcu(mask, rcu); in flow_mask_remove()
624 flow_mask_remove(table, flow->mask); in ovs_flow_tbl_remove()
629 struct sw_flow_mask *mask; in mask_alloc() local
631 mask = kmalloc(sizeof(*mask), GFP_KERNEL); in mask_alloc()
632 if (mask) in mask_alloc()
633 mask->ref_count = 1; in mask_alloc()
635 return mask; in mask_alloc()
650 const struct sw_flow_mask *mask) in flow_mask_find() argument
657 if (mask_equal(mask, m)) in flow_mask_find()
668 struct sw_flow_mask *mask; in flow_mask_insert() local
669 mask = flow_mask_find(tbl, new); in flow_mask_insert()
670 if (!mask) { in flow_mask_insert()
672 mask = mask_alloc(); in flow_mask_insert()
673 if (!mask) in flow_mask_insert()
675 mask->key = new->key; in flow_mask_insert()
676 mask->range = new->range; in flow_mask_insert()
677 list_add_rcu(&mask->list, &tbl->mask_list); in flow_mask_insert()
679 BUG_ON(!mask->ref_count); in flow_mask_insert()
680 mask->ref_count++; in flow_mask_insert()
683 flow->mask = mask; in flow_mask_insert()
693 flow->flow_table.hash = flow_hash(&flow->key, &flow->mask->range); in flow_key_insert()
735 const struct sw_flow_mask *mask) in ovs_flow_tbl_insert() argument
739 err = flow_mask_insert(table, flow, mask); in ovs_flow_tbl_insert()