X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Funix%2Fcj.c;h=7238dbfac38dc00e5fa0cdd1d705f2658cc91aa3;hb=b7b929931a07fbb27b43d5cd105f366c3e29807e;hp=33ba163abcaadbeec9cac3ee24e66f17012683a3;hpb=7cd468a3d7dee7d6c92f69a0bb7061ae208ec727;p=vpp.git diff --git a/src/vlib/unix/cj.c b/src/vlib/unix/cj.c index 33ba163abca..7238dbfac38 100644 --- a/src/vlib/unix/cj.c +++ b/src/vlib/unix/cj.c @@ -44,11 +44,11 @@ cj_log (u32 type, void *data0, void *data1) if (cjm->enable == 0) return; - new_tail = __sync_add_and_fetch (&cjm->tail, 1); + new_tail = clib_atomic_add_fetch (&cjm->tail, 1); r = (cj_record_t *) & (cjm->records[new_tail & (cjm->num_records - 1)]); r->time = vlib_time_now (cjm->vlib_main); - r->cpu = os_get_cpu_number (); + r->thread_index = vlib_get_thread_index (); r->type = type; r->data[0] = pointer_to_uword (data0); r->data[1] = pointer_to_uword (data1); @@ -97,7 +97,7 @@ cj_config (vlib_main_t * vm, unformat_input_t * input) cjm->num_records = max_pow2 (cjm->num_records); vec_validate (cjm->records, cjm->num_records - 1); - memset (cjm->records, 0xff, cjm->num_records * sizeof (cj_record_t)); + clib_memset (cjm->records, 0xff, cjm->num_records * sizeof (cj_record_t)); cjm->tail = ~0; cjm->enable = enable; @@ -133,7 +133,8 @@ static inline void cj_dump_one_record (cj_record_t * r) { fprintf (stderr, "[%d]: %10.6f T%02d %llx %llx\n", - r->cpu, r->time, r->type, (long long unsigned int) r->data[0], + r->thread_index, r->time, r->type, + (long long unsigned int) r->data[0], (long long unsigned int) r->data[1]); } @@ -161,7 +162,7 @@ cj_dump_internal (u8 filter0_enable, u64 filter0, index = (cjm->tail + 1) & (cjm->num_records - 1); r = &(cjm->records[index]); - if (r->cpu != (u32) ~ 0) + if (r->thread_index != (u32) ~ 0) { /* Yes, dump from tail + 1 to the end */ for (i = index; i < cjm->num_records; i++) @@ -219,18 +220,28 @@ cj_command_fn (vlib_main_t * vm, { int is_enable = -1; int is_dump = -1; + unformat_input_t _line_input, *line_input = &_line_input; + clib_error_t *error = NULL; - while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) + /* Get a line of input. */ + if (!unformat_user (input, unformat_line_input, line_input)) + return clib_error_return (0, "expected enable | disable | dump"); + + while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) { - if (unformat (input, "enable") || unformat (input, "on")) + if (unformat (line_input, "enable") || unformat (line_input, "on")) is_enable = 1; - else if (unformat (input, "disable") || unformat (input, "off")) + else if (unformat (line_input, "disable") + || unformat (line_input, "off")) is_enable = 0; - else if (unformat (input, "dump")) + else if (unformat (line_input, "dump")) is_dump = 1; else - return clib_error_return (0, "unknown input `%U'", - format_unformat_error, input); + { + error = clib_error_return (0, "unknown input `%U'", + format_unformat_error, line_input); + goto done; + } } if (is_enable >= 0) @@ -239,7 +250,9 @@ cj_command_fn (vlib_main_t * vm, if (is_dump > 0) cj_dump (); - return 0; +done: + unformat_free (line_input); + return error; } /*?