X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Felog.c;h=a0e5712aaab8fbe6d1c2e29babf001bb9d2e60ff;hb=40f481037ef98442b061e310a04ee5e110120f72;hp=cd4d89583cb9396c70e558b01f000ef0a1ffb7aa;hpb=b08fe6617bdc57f7534fe4813cc34d328eb36ba0;p=vpp.git diff --git a/src/vppinfra/elog.c b/src/vppinfra/elog.c index cd4d89583cb..a0e5712aaab 100644 --- a/src/vppinfra/elog.c +++ b/src/vppinfra/elog.c @@ -61,7 +61,7 @@ elog_unlock (elog_main_t * em) } /* Non-inline version. */ -void * +__clib_export void * elog_event_data (elog_main_t * em, elog_event_type_t * type, elog_track_t * track, u64 cpu_time) { @@ -194,7 +194,7 @@ elog_event_type_register (elog_main_t * em, elog_event_type_t * t) return l; } -word +__clib_export word elog_track_register (elog_main_t * em, elog_track_t * t) { word l; @@ -292,7 +292,7 @@ done: return s; } -u8 * +__clib_export u8 * format_elog_event (u8 * s, va_list * va) { elog_main_t *em = va_arg (*va, elog_main_t *); @@ -395,8 +395,8 @@ format_elog_event (u8 * s, va_list * va) return s; } -u8 * -format_elog_track_name (u8 * s, va_list * va) +__clib_export u8 * +format_elog_track_name (u8 *s, va_list *va) { elog_main_t *em = va_arg (*va, elog_main_t *); elog_event_t *e = va_arg (*va, elog_event_t *); @@ -404,7 +404,7 @@ format_elog_track_name (u8 * s, va_list * va) return format (s, "%s", t->name); } -u8 * +__clib_export u8 * format_elog_track (u8 * s, va_list * args) { elog_main_t *em = va_arg (*args, elog_main_t *); @@ -427,7 +427,7 @@ format_elog_track (u8 * s, va_list * args) return s; } -char * +__clib_export char * format_one_elog_event (void *em_arg, void *ep_arg) { elog_main_t *em = (elog_main_t *) em_arg; @@ -484,21 +484,32 @@ elog_nsec_per_clock (elog_main_t * em) &em->init_time)); } -void -elog_alloc (elog_main_t * em, u32 n_events) +static void +elog_alloc_internal (elog_main_t * em, u32 n_events, int free_ring) { - if (em->event_ring) + if (free_ring && em->event_ring) vec_free (em->event_ring); /* Ring size must be a power of 2. */ em->event_ring_size = n_events = max_pow2 (n_events); - /* Leave an empty ievent at end so we can always speculatively write - and event there (possibly a long form event). */ - vec_resize_aligned (em->event_ring, n_events, CLIB_CACHE_LINE_BYTES); + vec_validate_aligned (em->event_ring, n_events, CLIB_CACHE_LINE_BYTES); + vec_set_len (em->event_ring, n_events); } -void +__clib_export void +elog_alloc (elog_main_t * em, u32 n_events) +{ + elog_alloc_internal (em, n_events, 1 /* free ring */ ); +} + +__clib_export void +elog_resize (elog_main_t * em, u32 n_events) +{ + elog_alloc_internal (em, n_events, 0 /* do not free ring */ ); +} + +__clib_export void elog_init (elog_main_t * em, u32 n_events) { clib_memset (em, 0, sizeof (em[0])); @@ -542,7 +553,7 @@ elog_event_range (elog_main_t * em, uword * lo) } } -elog_event_t * +__clib_export elog_event_t * elog_peek_events (elog_main_t * em) { elog_event_t *e, *f, *es = 0; @@ -567,7 +578,7 @@ elog_peek_events (elog_main_t * em) } /* Add a formatted string to the string table. */ -u32 +__clib_export u32 elog_string (elog_main_t * em, char *fmt, ...) { u32 offset; @@ -611,11 +622,11 @@ elog_string (elog_main_t * em, char *fmt, ...) return offset; } -elog_event_t * +__clib_export elog_event_t * elog_get_events (elog_main_t * em) { - if (!em->events) - em->events = elog_peek_events (em); + vec_free (em->events); + em->events = elog_peek_events (em); return em->events; } @@ -684,8 +695,8 @@ elog_cmp (void *a1, void *a2) /* * merge two event logs. Complicated and cranky. */ -void -elog_merge (elog_main_t * dst, u8 * dst_tag, elog_main_t * src, u8 * src_tag, +__clib_export void +elog_merge (elog_main_t *dst, u8 *dst_tag, elog_main_t *src, u8 *src_tag, f64 align_tweak) { elog_event_t *e; @@ -1098,7 +1109,7 @@ unserialize_elog_time_stamp (serialize_main_t * m, va_list * va) static char *elog_serialize_magic = "elog v0"; -void +__clib_export void serialize_elog_main (serialize_main_t * m, va_list * va) { elog_main_t *em = va_arg (*va, elog_main_t *); @@ -1132,8 +1143,8 @@ serialize_elog_main (serialize_main_t * m, va_list * va) vec_foreach (e, em->events) serialize (m, serialize_elog_event, em, e); } -void -unserialize_elog_main (serialize_main_t * m, va_list * va) +__clib_export void +unserialize_elog_main (serialize_main_t *m, va_list *va) { elog_main_t *em = va_arg (*va, elog_main_t *); uword i; @@ -1184,10 +1195,10 @@ elog_write_file_not_inline (elog_main_t * em, char *clib_file, int flush_ring) return error; } -clib_error_t * +__clib_export clib_error_t * elog_read_file_not_inline (elog_main_t * em, char *clib_file) { - serialize_main_t m; + serialize_main_t m = { 0 }; clib_error_t *error; error = unserialize_open_clib_file (&m, clib_file);