From 8574756fb52c5feff4c552bdae6c2d8dfab4a0ba Mon Sep 17 00:00:00 2001 From: "Bjoern B. Brandenburg" Date: Sun, 28 Oct 2007 22:06:43 -0400 Subject: sched_trace: update format Update to new format and fix a couple of bugs. --- include/sched_trace.h | 4 ++++ src/sched_trace.c | 19 +++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/include/sched_trace.h b/include/sched_trace.h index 235dc3d..1427107 100644 --- a/include/sched_trace.h +++ b/include/sched_trace.h @@ -80,6 +80,7 @@ typedef struct { u16 period; u16 wcet; int tardiness; + unsigned int job_no; } completion_record_t; typedef struct { @@ -98,7 +99,10 @@ typedef struct { typedef struct { trace_header_t header; task_info_t task; + unsigned int from:16; + unsigned int to:16; service_level_t new_level; + service_level_t old_level; } service_level_change_record_t; typedef struct { diff --git a/src/sched_trace.c b/src/sched_trace.c index 5dfbba4..18969bd 100644 --- a/src/sched_trace.c +++ b/src/sched_trace.c @@ -16,7 +16,7 @@ int walk_sched_trace(void* start, void* end, record_callback_t *cb) { void* pos = start; trace_header_t* header; - int ret; + int ret = 0; while (pos < end) { header = (trace_header_t*) pos; @@ -36,7 +36,7 @@ int walk_sched_traces_ordered(void** start, void** end, unsigned int count, { void** pos; trace_header_t* header; - int ret, i, adv; + int ret = 0, i, adv; pos = malloc(sizeof(void*) * count); @@ -51,9 +51,12 @@ int walk_sched_traces_ordered(void** start, void** end, unsigned int count, ((trace_header_t*) pos[i])->timestamp)) { header = (trace_header_t*) pos[i]; adv = i; - } + } if (header) { - pos[i] += header->size; + pos[adv] += header->size; +/* printf("header id: %d pos=%p adv=%d\n", + header->trace, pos[adv], adv); +*/ if (header->trace >= ST_MAX) return INVALID_HEADER; if (cb->handler[header->trace]) @@ -124,16 +127,20 @@ int walk_sched_trace_files_ordered(const char** names, unsigned int count, void **start, **end; size_t *size; int i; - int ret; + int ret = 0; +/* printf("count=%d\n", count); */ + start = malloc(sizeof(void*) * count); end = malloc(sizeof(void*) * count); size = malloc(sizeof(size_t) * count); for (i = 0; i < count; i++) size[i] = 0; - for (i = 0; i < count && !ret; i++) + for (i = 0; i < count && !ret; i++) { +/* printf("mapping %s\n", names[i]); */ ret = map_trace(names[i], start + i, end + i, size + i); + } if (!ret) /* everything mapped, now walk it */ -- cgit v1.2.2