svm: minimal initial fifo
[vpp.git] / src / vppinfra / elog.h
index 359868d..3cd067c 100644 (file)
@@ -53,6 +53,7 @@
 #include <vppinfra/error.h>    /* for ASSERT */
 #include <vppinfra/serialize.h>
 #include <vppinfra/time.h>     /* for clib_cpu_time_now */
+#include <vppinfra/hash.h>
 #include <vppinfra/mhash.h>
 
 typedef struct
@@ -155,6 +156,8 @@ typedef struct
 
   /** Events may refer to strings in string table. */
   char *string_table;
+  uword *string_table_hash;
+  u8 *string_table_tmp;
 
   /** Vector of tracks. */
   elog_track_t *tracks;
@@ -309,12 +312,11 @@ elog_event_data_inline (elog_main_t * em,
        track_index = elog_track_register (em, track);
     }
 
-  ASSERT (type_index < vec_len (em->event_types));
   ASSERT (track_index < vec_len (em->tracks));
   ASSERT (is_pow2 (vec_len (em->event_ring)));
 
   if (em->lock)
-    ei = clib_smp_atomic_add (&em->n_total_events, 1);
+    ei = clib_atomic_fetch_add (&em->n_total_events, 1);
   else
     ei = em->n_total_events++;
 
@@ -516,7 +518,8 @@ void elog_merge (elog_main_t * dst, u8 * dst_tag,
 
 /* 2 arguments elog_main_t and elog_event_t to format event or track name. */
 u8 *format_elog_event (u8 * s, va_list * va);
-u8 *format_elog_track (u8 * s, va_list * va);
+u8 *format_elog_track_name (u8 * s, va_list * va);
+u8 *format_elog_track (u8 * s, va_list * args);
 
 void serialize_elog_main (serialize_main_t * m, va_list * va);
 void unserialize_elog_main (serialize_main_t * m, va_list * va);
@@ -526,12 +529,12 @@ void elog_alloc (elog_main_t * em, u32 n_events);
 
 #ifdef CLIB_UNIX
 always_inline clib_error_t *
-elog_write_file (elog_main_t * em, char *unix_file, int flush_ring)
+elog_write_file (elog_main_t * em, char *clib_file, int flush_ring)
 {
   serialize_main_t m;
   clib_error_t *error;
 
-  error = serialize_open_unix_file (&m, unix_file);
+  error = serialize_open_clib_file (&m, clib_file);
   if (error)
     return error;
   error = serialize (&m, serialize_elog_main, em, flush_ring);
@@ -541,12 +544,12 @@ elog_write_file (elog_main_t * em, char *unix_file, int flush_ring)
 }
 
 always_inline clib_error_t *
-elog_read_file (elog_main_t * em, char *unix_file)
+elog_read_file (elog_main_t * em, char *clib_file)
 {
   serialize_main_t m;
   clib_error_t *error;
 
-  error = unserialize_open_unix_file (&m, unix_file);
+  error = unserialize_open_clib_file (&m, clib_file);
   if (error)
     return error;
   error = unserialize (&m, unserialize_elog_main, em);