]> Zhao Yanbai Git Server - minix.git/commitdiff
Kernel: statistical profiling fixes
authorDavid van Moolenbroek <david@minix3.org>
Thu, 16 Dec 2010 09:46:26 +0000 (09:46 +0000)
committerDavid van Moolenbroek <david@minix3.org>
Thu, 16 Dec 2010 09:46:26 +0000 (09:46 +0000)
- create name entries for forked processes as well;
- create name entries only for system processes.

kernel/profile.c
kernel/system/do_fork.c

index 73f79bd46eee5b5cf85c61a7fc20b6c20154078f..4eed04c24b4cba2188d2ab403b87bed7be84e0a0 100644 (file)
@@ -101,18 +101,19 @@ PRIVATE void profile_sample(struct proc * p, void * pc)
        return;
   }
 
-  if (!(p->p_misc_flags & MF_SPROF_SEEN)) {
-         p->p_misc_flags |= MF_SPROF_SEEN;
-         sprof_save_proc(p);
-  }
-
   /* Runnable system process? */
   if (p->p_endpoint == IDLE)
-         sprof_info.idle_samples++;
+       sprof_info.idle_samples++;
   else if (p->p_endpoint == KERNEL ||
-                 (priv(p)->s_flags & SYS_PROC && proc_is_runnable(p))) {
-         sprof_save_sample(p, pc);
-         sprof_info.system_samples++;
+               (priv(p)->s_flags & SYS_PROC && proc_is_runnable(p))) {
+
+       if (!(p->p_misc_flags & MF_SPROF_SEEN)) {
+               p->p_misc_flags |= MF_SPROF_SEEN;
+               sprof_save_proc(p);
+       }
+
+       sprof_save_sample(p, pc);
+       sprof_info.system_samples++;
   } else {
        /* User process. */
        sprof_info.user_samples++;
index 12c1610f9387ae784447813875f98ac907694947..631252a6bf218a57cedf930a3a5a817fe419be98 100644 (file)
@@ -79,7 +79,8 @@ PUBLIC int do_fork(struct proc * caller, message * m_ptr)
   rpc->p_sys_time = 0;
 
   rpc->p_reg.psw &= ~TRACEBIT;         /* clear trace bit */
-  rpc->p_misc_flags &= ~(MF_VIRT_TIMER | MF_PROF_TIMER | MF_SC_TRACE);
+  rpc->p_misc_flags &=
+       ~(MF_VIRT_TIMER | MF_PROF_TIMER | MF_SC_TRACE | MF_SPROF_SEEN);
   rpc->p_virt_left = 0;                /* disable, clear the process-virtual timers */
   rpc->p_prof_left = 0;