X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fdpo%2Fload_balance_map.c;h=55249747e5da2282cccd3ce659ff0185456b0e2c;hb=06111a837d77323d253ecfd26557775fa0b03ca8;hp=70ce1bf7c39b0b17aca4f38929c226b1c07499d5;hpb=7cd468a3d7dee7d6c92f69a0bb7061ae208ec727;p=vpp.git diff --git a/src/vnet/dpo/load_balance_map.c b/src/vnet/dpo/load_balance_map.c index 70ce1bf7c39..55249747e5d 100644 --- a/src/vnet/dpo/load_balance_map.c +++ b/src/vnet/dpo/load_balance_map.c @@ -68,18 +68,20 @@ typedef struct load_balance_map_path_t_ { */ load_balance_map_t *load_balance_map_pool; +/** + * the logger + */ +vlib_log_class_t load_balance_map_logger; + /* * Debug macro */ -#ifdef FIB_DEBUG -#define LOAD_BALANCE_MAP_DBG(_pl, _fmt, _args...) \ - { \ - clib_warning("lbm: FIXME" _fmt, \ - ##_args); \ - } -#else -#define LOAD_BALANCE_MAP_DBG(_pl, _fmt, _args...) -#endif +#define LOAD_BALANCE_MAP_DBG(_pl, _fmt, _args...) \ +{ \ + vlib_log_debug(load_balance_map_logger, \ + "lbm:" _fmt, \ + ##_args); \ +} static index_t load_balance_map_get_index (load_balance_map_t *lbm) @@ -88,10 +90,10 @@ load_balance_map_get_index (load_balance_map_t *lbm) } u8* -format_load_balance_map (u8 *s, va_list ap) +format_load_balance_map (u8 *s, va_list * ap) { - index_t lbmi = va_arg(ap, index_t); - u32 indent = va_arg(ap, u32); + index_t lbmi = va_arg(*ap, index_t); + u32 indent = va_arg(*ap, u32); load_balance_map_t *lbm; u32 n_buckets, ii; @@ -272,7 +274,7 @@ load_balance_map_db_remove (load_balance_map_t *lbm) { p = hash_get(lb_maps_by_path_index, lbmp->lbmp_index); - ASSERT(NULL != p); + ALWAYS_ASSERT(NULL != p); fib_node_list_remove(p[0], lbmp->lbmp_sibling); } @@ -310,7 +312,7 @@ load_balance_map_fill (load_balance_map_t *lbm) tmp_buckets[jj++] = bucket++; } } - else + else { bucket += lbmp->lbmp_weight; } @@ -385,9 +387,14 @@ load_balance_map_alloc (const load_balance_path_t *paths) { load_balance_map_t *lbm; u32 ii; + vlib_main_t *vm; + u8 did_barrier_sync; + dpo_pool_barrier_sync (vm, load_balance_map_pool, did_barrier_sync); pool_get_aligned(load_balance_map_pool, lbm, CLIB_CACHE_LINE_BYTES); - memset(lbm, 0, sizeof(*lbm)); + dpo_pool_barrier_release (vm, did_barrier_sync); + + clib_memset(lbm, 0, sizeof(*lbm)); vec_validate(lbm->lbm_paths, vec_len(paths)-1); @@ -412,9 +419,20 @@ load_balance_map_init (load_balance_map_t *lbm, load_balance_map_fill(lbm); + load_balance_map_logger = + vlib_log_register_class ("dpo", "load-balance-map"); + return (lbm); } +static void +load_balance_map_destroy (load_balance_map_t *lbm) +{ + vec_free(lbm->lbm_paths); + vec_free(lbm->lbm_buckets); + pool_put(load_balance_map_pool, lbm); +} + index_t load_balance_map_add_or_lock (u32 n_buckets, u32 sum_of_weights, @@ -434,6 +452,7 @@ load_balance_map_add_or_lock (u32 n_buckets, else { lbm = load_balance_map_get(lbmi); + load_balance_map_destroy(tmp); } lbm->lbm_locks++; @@ -468,13 +487,11 @@ load_balance_map_unlock (index_t lbmi) if (0 == lbm->lbm_locks) { load_balance_map_db_remove(lbm); - vec_free(lbm->lbm_paths); - vec_free(lbm->lbm_buckets); - pool_put(load_balance_map_pool, lbm); + load_balance_map_destroy(lbm); } } -static int +static walk_rc_t load_balance_map_path_state_change_walk (fib_node_ptr_t *fptr, void *ctx) { @@ -484,7 +501,7 @@ load_balance_map_path_state_change_walk (fib_node_ptr_t *fptr, load_balance_map_fill(lbm); - return (!0); + return (WALK_CONTINUE); } /** @@ -558,11 +575,11 @@ load_balance_map_show (vlib_main_t * vm, { load_balance_map_t *lbm; - pool_foreach(lbm, load_balance_map_pool, - ({ + pool_foreach (lbm, load_balance_map_pool) + { vlib_cli_output (vm, "%U", format_load_balance_map, load_balance_map_get_index(lbm), 0); - })); + } } return 0;