summaryrefslogtreecommitdiffstats
path: root/src/plugins/lb
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/lb')
-rw-r--r--src/plugins/lb/lb.h2
-rw-r--r--src/plugins/lb/refcount.c41
-rw-r--r--src/plugins/lb/refcount.h67
3 files changed, 1 insertions, 109 deletions
diff --git a/src/plugins/lb/lb.h b/src/plugins/lb/lb.h
index 882b9b30f7e..fa0b5d48b07 100644
--- a/src/plugins/lb/lb.h
+++ b/src/plugins/lb/lb.h
@@ -31,7 +31,7 @@
#define LB_PLUGIN_LB_LB_H_
#include <lb/util.h>
-#include <lb/refcount.h>
+#include <vnet/util/refcount.h>
#include <vnet/vnet.h>
#include <vnet/ip/ip.h>
diff --git a/src/plugins/lb/refcount.c b/src/plugins/lb/refcount.c
deleted file mode 100644
index 6f01ab5aaf7..00000000000
--- a/src/plugins/lb/refcount.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <lb/refcount.h>
-
-void __vlib_refcount_resize(vlib_refcount_per_cpu_t *per_cpu, u32 size)
-{
- u32 *new_counter = 0, *old_counter;
- vec_validate(new_counter, size);
- memcpy(new_counter, per_cpu->counters, per_cpu->length);
- old_counter = per_cpu->counters;
- per_cpu->counters = new_counter;
- CLIB_MEMORY_BARRIER();
- per_cpu->length = vec_len(new_counter);
- vec_free(old_counter);
-}
-
-u64 vlib_refcount_get(vlib_refcount_t *r, u32 index)
-{
- u64 count = 0;
- vlib_thread_main_t *tm = vlib_get_thread_main ();
- u32 thread_index;
- for (thread_index = 0; thread_index < tm->n_vlib_mains; thread_index++) {
- if (r->per_cpu[thread_index].length > index)
- count += r->per_cpu[thread_index].counters[index];
- }
- return count;
-}
-
diff --git a/src/plugins/lb/refcount.h b/src/plugins/lb/refcount.h
deleted file mode 100644
index dcfcb3fee58..00000000000
--- a/src/plugins/lb/refcount.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * vlib provides lock-free counters but those
- * - Have 16bits per-CPU counter, which may overflow.
- * - Would only increment.
- *
- * This is very similar to vlib counters, but may be used to count reference.
- * Such a counter includes an arbitrary number of counters. Each counter
- * is identified by its index. This is used to aggregate per-cpu memory.
- *
- * Warning:
- * This reference counter is lock-free but is not race-condition free.
- * The counting result is approximate and another mechanism needs to be used
- * in order to ensure that an object may be freed.
- *
- */
-
-#include <vnet/vnet.h>
-
-typedef struct {
- u32 *counters;
- u32 length;
- u32 *reader_lengths;
- CLIB_CACHE_LINE_ALIGN_MARK(o);
-} vlib_refcount_per_cpu_t;
-
-typedef struct {
- vlib_refcount_per_cpu_t *per_cpu;
-} vlib_refcount_t;
-
-void __vlib_refcount_resize(vlib_refcount_per_cpu_t *per_cpu, u32 size);
-
-static_always_inline
-void vlib_refcount_add(vlib_refcount_t *r, u32 thread_index, u32 counter_index, i32 v)
-{
- vlib_refcount_per_cpu_t *per_cpu = &r->per_cpu[thread_index];
- if (PREDICT_FALSE(counter_index >= per_cpu->length))
- __vlib_refcount_resize(per_cpu, clib_max(counter_index + 16, per_cpu->length * 2));
-
- per_cpu->counters[counter_index] += v;
-}
-
-u64 vlib_refcount_get(vlib_refcount_t *r, u32 index);
-
-static_always_inline
-void vlib_refcount_init(vlib_refcount_t *r)
-{
- vlib_thread_main_t *tm = vlib_get_thread_main ();
- r->per_cpu = 0;
- vec_validate (r->per_cpu, tm->n_vlib_mains - 1);
-}
-
-