Lines Matching defs:ma

177 static void __mask_array_destroy(struct mask_array *ma)
179 free_percpu(ma->masks_usage_stats);
180 kfree(ma);
185 struct mask_array *ma = container_of(rcu, struct mask_array, rcu);
187 __mask_array_destroy(ma);
190 static void tbl_mask_array_reset_counters(struct mask_array *ma)
199 for (i = 0; i < ma->max; i++) {
200 ma->masks_usage_zero_cntr[i] = 0;
207 stats = per_cpu_ptr(ma->masks_usage_stats, cpu);
213 ma->masks_usage_zero_cntr[i] += counter;
273 struct mask_array *ma = ovsl_dereference(tbl->mask_array);
274 int err, ma_count = READ_ONCE(ma->count);
276 if (ma_count >= ma->max) {
277 err = tbl_mask_array_realloc(tbl, ma->max +
282 ma = ovsl_dereference(tbl->mask_array);
287 tbl_mask_array_reset_counters(ma);
290 BUG_ON(ovsl_dereference(ma->masks[ma_count]));
292 rcu_assign_pointer(ma->masks[ma_count], new);
293 WRITE_ONCE(ma->count, ma_count + 1);
301 struct mask_array *ma = ovsl_dereference(tbl->mask_array);
302 int i, ma_count = READ_ONCE(ma->count);
306 if (mask == ovsl_dereference(ma->masks[i]))
314 WRITE_ONCE(ma->count, ma_count - 1);
316 rcu_assign_pointer(ma->masks[i], ma->masks[ma_count - 1]);
317 RCU_INIT_POINTER(ma->masks[ma_count - 1], NULL);
322 if (ma->max >= (MASK_ARRAY_SIZE_MIN * 2) &&
323 ma_count <= (ma->max / 3))
324 tbl_mask_array_realloc(tbl, ma->max / 2);
326 tbl_mask_array_reset_counters(ma);
415 struct mask_array *ma;
421 ma = tbl_mask_array_alloc(MASK_ARRAY_SIZE_MIN);
422 if (!ma)
435 rcu_assign_pointer(table->mask_array, ma);
445 __mask_array_destroy(ma);
518 struct mask_array *ma = rcu_dereference_raw(table->mask_array);
521 call_rcu(&ma->rcu, mask_array_rcu_cb);
729 struct mask_array *ma,
735 struct mask_array_stats *stats = this_cpu_ptr(ma->masks_usage_stats);
740 if (likely(*index < ma->max)) {
741 mask = rcu_dereference_ovsl(ma->masks[*index]);
754 for (i = 0; i < ma->max; i++) {
759 mask = rcu_dereference_ovsl(ma->masks[i]);
790 struct mask_array *ma = rcu_dereference(tbl->mask_array);
803 return flow_lookup(tbl, ti, ma, key, n_mask_hit, &cache,
824 flow = flow_lookup(tbl, ti, ma, key, n_mask_hit,
838 flow = flow_lookup(tbl, ti, ma, key, n_mask_hit, n_cache_hit,
851 struct mask_array *ma = rcu_dereference_ovsl(tbl->mask_array);
862 flow = flow_lookup(tbl, ti, ma, key, &n_mask_hit, &n_cache_hit, &index);
870 struct mask_array *ma = ovsl_dereference(tbl->mask_array);
874 for (i = 0; i < ma->max; i++) {
880 mask = ovsl_dereference(ma->masks[i]);
938 struct mask_array *ma = rcu_dereference_ovsl(table->mask_array);
939 return READ_ONCE(ma->count);
990 struct mask_array *ma;
993 ma = ovsl_dereference(tbl->mask_array);
994 for (i = 0; i < ma->max; i++) {
996 t = ovsl_dereference(ma->masks[i]);
1107 struct mask_array *ma = rcu_dereference_ovsl(table->mask_array);
1114 masks_and_count = kmalloc_array(ma->max, sizeof(*masks_and_count),
1119 for (i = 0; i < ma->max; i++) {
1123 mask = rcu_dereference_ovsl(ma->masks[i]);
1135 stats = per_cpu_ptr(ma->masks_usage_stats, cpu);
1145 masks_and_count[i].counter -= ma->masks_usage_zero_cntr[i];
1150 ma->masks_usage_zero_cntr[i] += masks_and_count[i].counter;
1170 new = tbl_mask_array_alloc(ma->max);
1177 if (ovsl_dereference(ma->masks[index]))
1178 new->masks[new->count++] = ma->masks[index];
1182 call_rcu(&ma->rcu, mask_array_rcu_cb);