summaryrefslogtreecommitdiffstats
path: root/src/plugins/lb/refcount.h
diff options
context:
space:
mode:
authorHongjun Ni <hongjun.ni@intel.com>2017-11-13 20:34:06 +0800
committerNeale Ranns <nranns@cisco.com>2017-12-06 13:22:51 +0000
commitbf4be5730557c4280f2f9f8b7ef1a194716c82bd (patch)
tree5e2297c4484902801cb3c04e316da4123a9bd3b3 /src/plugins/lb/refcount.h
parent22229864cb6e30c9b75a9c36e4ffa8500c0cdc5f (diff)
Restructure some files in LB to src/vnet to reuse
Change-Id: Ic8b193e93ce18ca82b294816aa7ee0ef31d64bc2 Signed-off-by: Pierre Pfister <ppfister@cisco.com> Signed-off-by: Hongjun Ni <hongjun.ni@intel.com>
Diffstat (limited to 'src/plugins/lb/refcount.h')
-rw-r--r--src/plugins/lb/refcount.h67
1 files changed, 0 insertions, 67 deletions
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);
-}
-
-