From: Julien Desfossez Date: Thu, 23 Feb 2012 01:58:17 +0000 (-0500) Subject: function to extract cpu_id X-Git-Tag: v0.2~62 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=d67167cde319ac9d257f5b59b5a4664e558f4cb4;p=lttngtop.git function to extract cpu_id Signed-off-by: Julien Desfossez --- diff --git a/src/common.c b/src/common.c index f0b7af0..f628ed5 100644 --- a/src/common.c +++ b/src/common.c @@ -20,6 +20,21 @@ #include #include "common.h" +uint64_t get_cpu_id(struct bt_ctf_event *event) +{ + struct definition *scope; + uint64_t cpu_id; + + scope = bt_ctf_get_top_level_scope(event, BT_STREAM_PACKET_CONTEXT); + cpu_id = bt_ctf_get_uint64(bt_ctf_get_field(event, scope, "cpu_id")); + if (bt_ctf_field_get_error()) { + fprintf(stderr, "[error] get cpu_id\n"); + return -1ULL; + } + + return cpu_id; +} + struct processtop *find_process_tid(struct lttngtop *ctx, int tid, char *comm) { gint i; diff --git a/src/common.h b/src/common.h index e81256c..8be30bb 100644 --- a/src/common.h +++ b/src/common.h @@ -52,4 +52,7 @@ struct perfcounter *add_perf_counter(GPtrArray *perf, GQuark quark, struct perfcounter *get_perf_counter(const char *name, struct processtop *proc, struct cputime *cpu); +/* common field access functions */ +uint64_t get_cpu_id(struct bt_ctf_event *event); + #endif /* _COMMON_H */ diff --git a/src/cputop.c b/src/cputop.c index 2ade0db..2cf1ea2 100644 --- a/src/cputop.c +++ b/src/cputop.c @@ -89,14 +89,7 @@ enum bt_cb_ret handle_sched_switch(struct bt_ctf_event *call_data, goto error; } - scope = bt_ctf_get_top_level_scope(call_data, - BT_STREAM_PACKET_CONTEXT); - cpu_id = bt_ctf_get_uint64(bt_ctf_get_field(call_data, - scope, "cpu_id")); - if (bt_ctf_field_get_error()) { - fprintf(stderr, "Missing cpu_id context info\n"); - goto error; - } + cpu_id = get_cpu_id(call_data); update_cputop_data(timestamp, cpu_id, prev_tid, next_tid, prev_comm, next_comm); diff --git a/src/iostreamtop.c b/src/iostreamtop.c index a1c78a9..dfffd1d 100644 --- a/src/iostreamtop.c +++ b/src/iostreamtop.c @@ -101,7 +101,7 @@ void show_table(GPtrArray *tab) } int update_iostream_ret(struct lttngtop *ctx, int tid, char *comm, - unsigned long timestamp, int cpu_id, int ret) + unsigned long timestamp, uint64_t cpu_id, int ret) { struct processtop *tmp; struct files *tmpfile; @@ -134,7 +134,7 @@ int update_iostream_ret(struct lttngtop *ctx, int tid, char *comm, return err; } -struct syscalls *create_syscall_info(unsigned int type, unsigned int cpu_id, +struct syscalls *create_syscall_info(unsigned int type, uint64_t cpu_id, unsigned int tid, int fd) { struct syscalls *syscall_info; @@ -171,7 +171,7 @@ enum bt_cb_ret handle_exit_syscall(struct bt_ctf_event *call_data, unsigned long timestamp; char *comm; uint64_t ret, tid; - int64_t cpu_id; + uint64_t cpu_id; timestamp = bt_ctf_get_timestamp(call_data); if (timestamp == -1ULL) @@ -202,14 +202,7 @@ enum bt_cb_ret handle_exit_syscall(struct bt_ctf_event *call_data, goto error; } - scope = bt_ctf_get_top_level_scope(call_data, - BT_STREAM_PACKET_CONTEXT); - cpu_id = bt_ctf_get_uint64(bt_ctf_get_field(call_data, - scope, "cpu_id")); - if (bt_ctf_field_get_error()) { - fprintf(stderr, "Missing cpu_id context info\n"); - goto error; - } + cpu_id = get_cpu_id(call_data); /* * if we encounter an exit_syscall and @@ -257,14 +250,7 @@ enum bt_cb_ret handle_sys_write(struct bt_ctf_event *call_data, goto error; } - scope = bt_ctf_get_top_level_scope(call_data, - BT_STREAM_PACKET_CONTEXT); - cpu_id = bt_ctf_get_uint64(bt_ctf_get_field(call_data, - scope, "cpu_id")); - if (bt_ctf_field_get_error()) { - fprintf(stderr, "Missing cpu_id context info\n"); - goto error; - } + cpu_id = get_cpu_id(call_data); scope = bt_ctf_get_top_level_scope(call_data, BT_EVENT_FIELDS); @@ -317,14 +303,7 @@ enum bt_cb_ret handle_sys_read(struct bt_ctf_event *call_data, goto error; } - scope = bt_ctf_get_top_level_scope(call_data, - BT_STREAM_PACKET_CONTEXT); - cpu_id = bt_ctf_get_uint64(bt_ctf_get_field(call_data, - scope, "cpu_id")); - if (bt_ctf_field_get_error()) { - fprintf(stderr, "Missing cpu_id context info\n"); - goto error; - } + cpu_id = get_cpu_id(call_data); scope = bt_ctf_get_top_level_scope(call_data, BT_EVENT_FIELDS); @@ -379,14 +358,7 @@ enum bt_cb_ret handle_sys_open(struct bt_ctf_event *call_data, goto error; } - scope = bt_ctf_get_top_level_scope(call_data, - BT_STREAM_PACKET_CONTEXT); - cpu_id = bt_ctf_get_uint64(bt_ctf_get_field(call_data, - scope, "cpu_id")); - if (bt_ctf_field_get_error()) { - fprintf(stderr, "Missing cpu_id context info\n"); - goto error; - } + cpu_id = get_cpu_id(call_data); scope = bt_ctf_get_top_level_scope(call_data, BT_EVENT_FIELDS); diff --git a/src/lttngtop.c b/src/lttngtop.c index 8dc96ae..6bb03ac 100644 --- a/src/lttngtop.c +++ b/src/lttngtop.c @@ -227,17 +227,10 @@ end: void update_perf_counter(struct processtop *proc, struct bt_ctf_event *event) { - struct definition *scope; - uint64_t cpu_id; struct cputime *cpu; + struct definition *scope; - scope = bt_ctf_get_top_level_scope(event, BT_STREAM_PACKET_CONTEXT); - cpu_id = bt_ctf_get_uint64(bt_ctf_get_field(event, scope, "cpu_id")); - if (bt_ctf_field_get_error()) { - fprintf(stderr, "[error] get cpu_id\n"); - goto end; - } - cpu = get_cpu(cpu_id); + cpu = get_cpu(get_cpu_id(event)); scope = bt_ctf_get_top_level_scope(event, BT_STREAM_EVENT_CONTEXT); extract_perf_counter_scope(event, scope, proc, cpu); @@ -247,9 +240,6 @@ void update_perf_counter(struct processtop *proc, struct bt_ctf_event *event) scope = bt_ctf_get_top_level_scope(event, BT_EVENT_CONTEXT); extract_perf_counter_scope(event, scope, proc, cpu); - -end: - return; } enum bt_cb_ret fix_process_table(struct bt_ctf_event *call_data, diff --git a/src/lttngtoptypes.h b/src/lttngtoptypes.h index 7e105f9..480d122 100644 --- a/src/lttngtoptypes.h +++ b/src/lttngtoptypes.h @@ -154,7 +154,7 @@ struct vmas { struct syscalls { unsigned int id; unsigned long count; - unsigned int cpu_id; + uint64_t cpu_id; unsigned int type; unsigned int tid; unsigned int fd;