fix unknown mode elapsed time
[lttv.git] / ltt / branches / poly / lttv / lttv / state.c
index 405f3d0214ccb9b590eadd0db98b5cd175da1dba..1be0ce21e270888206265d9c39bac94e54407b5e 100644 (file)
@@ -2153,6 +2153,7 @@ static gboolean schedchange(void *hook_data, void *call_data)
         process->state->t = LTTV_STATE_SYSCALL;
         process->state->s = LTTV_STATE_WAIT;
         process->state->change = s->parent.timestamp;
+        process->state->entry = s->parent.timestamp;
       }
     } else {
       if(unlikely(process->state->s == LTTV_STATE_EXIT)) {
@@ -2256,7 +2257,8 @@ static gboolean process_fork(void *hook_data, void *call_data)
   return FALSE;
 }
 
-/* We stamp a newly created process as kernel_thread */
+/* We stamp a newly created process as kernel_thread.
+ * The thread should not be running yet. */
 static gboolean process_kernel_thread(void *hook_data, void *call_data)
 {
   LttvTracefileState *s = (LttvTracefileState *)call_data;
@@ -2273,7 +2275,10 @@ static gboolean process_kernel_thread(void *hook_data, void *call_data)
   s->parent.target_pid = pid;
 
   process = lttv_state_find_process(ts, ANY_CPU, pid);
-  es = &g_array_index(process->execution_stack, LttvExecutionState, 0);
+  process->execution_stack = 
+    g_array_set_size(process->execution_stack, 1);
+  es = process->state =
+    &g_array_index(process->execution_stack, LttvExecutionState, 0);
   es->t = LTTV_STATE_SYSCALL;
   process->type = LTTV_STATE_KERNEL_THREAD;
 
@@ -2426,7 +2431,9 @@ static void fix_process(gpointer key, gpointer value,
         es->s = LTTV_STATE_RUN;
 
       if(process->execution_stack->len == 1) {
-        /* Still in user mode, means never scheduled */
+        /* Still in bottom unknown mode, means never did a system call
+        * May be either in user mode, syscall mode, running or waiting.*/
+       /* FIXME : we may be tagging syscall mode when being user mode */
         process->execution_stack =
           g_array_set_size(process->execution_stack, 2);
         es = process->state = &g_array_index(process->execution_stack, 
@@ -2437,7 +2444,7 @@ static void fix_process(gpointer key, gpointer value,
         //g_assert(timestamp->tv_sec != 0);
         es->change = *timestamp;
         es->cum_cpu_time = ltt_time_zero;
-        es->s = LTTV_STATE_WAIT;
+        //es->s = LTTV_STATE_WAIT;
       }
     }
   }
This page took 0.02328 seconds and 4 git commands to generate.