Lines Matching refs:ti
41 static u32 meter_hash(struct dp_meter_instance *ti, u32 id)
43 return id % ti->n_meters;
58 struct dp_meter_instance *ti = rcu_dereference_ovsl(tbl->ti);
59 u32 hash = meter_hash(ti, meter_id);
62 meter = rcu_dereference_ovsl(ti->dp_meters[hash]);
71 struct dp_meter_instance *ti;
73 ti = kvzalloc(sizeof(*ti) +
76 if (!ti)
79 ti->n_meters = size;
81 return ti;
84 static void dp_meter_instance_free(struct dp_meter_instance *ti)
86 kvfree(ti);
91 struct dp_meter_instance *ti;
93 ti = container_of(rcu, struct dp_meter_instance, rcu);
94 kvfree(ti);
100 struct dp_meter_instance *ti = rcu_dereference_ovsl(tbl->ti);
101 int n_meters = min(size, ti->n_meters);
110 if (rcu_dereference_ovsl(ti->dp_meters[i]))
111 new_ti->dp_meters[i] = ti->dp_meters[i];
113 rcu_assign_pointer(tbl->ti, new_ti);
114 call_rcu(&ti->rcu, dp_meter_instance_free_rcu);
119 static void dp_meter_instance_insert(struct dp_meter_instance *ti,
124 hash = meter_hash(ti, meter->id);
125 rcu_assign_pointer(ti->dp_meters[hash], meter);
128 static void dp_meter_instance_remove(struct dp_meter_instance *ti,
133 hash = meter_hash(ti, meter->id);
134 RCU_INIT_POINTER(ti->dp_meters[hash], NULL);
139 struct dp_meter_instance *ti = rcu_dereference_ovsl(tbl->ti);
140 u32 hash = meter_hash(ti, meter->id);
146 if (unlikely(rcu_dereference_ovsl(ti->dp_meters[hash])))
149 dp_meter_instance_insert(ti, meter);
158 if (tbl->count >= ti->n_meters &&
159 dp_meter_instance_realloc(tbl, ti->n_meters * 2)) {
167 dp_meter_instance_remove(ti, meter);
174 struct dp_meter_instance *ti;
180 ti = rcu_dereference_ovsl(tbl->ti);
181 dp_meter_instance_remove(ti, meter);
186 if (ti->n_meters > DP_METER_ARRAY_SIZE_MIN &&
187 tbl->count <= (ti->n_meters / 4)) {
188 int half_size = ti->n_meters / 2;
195 for (i = half_size; i < ti->n_meters; i++)
196 if (rcu_dereference_ovsl(ti->dp_meters[i]))
207 dp_meter_instance_insert(ti, meter);
734 struct dp_meter_instance *ti;
737 ti = dp_meter_instance_alloc(DP_METER_ARRAY_SIZE_MIN);
738 if (!ti)
748 rcu_assign_pointer(tbl->ti, ti);
754 dp_meter_instance_free(ti);
761 struct dp_meter_instance *ti = rcu_dereference_raw(tbl->ti);
764 for (i = 0; i < ti->n_meters; i++)
765 ovs_meter_free(rcu_dereference_raw(ti->dp_meters[i]));
767 dp_meter_instance_free(ti);