Enable mtrace_call_entrys at the right points.

上级 59539e87
...@@ -264,6 +264,8 @@ scheduler(void) ...@@ -264,6 +264,8 @@ scheduler(void)
pid = nextpid++; pid = nextpid++;
release(&ptable.lock); release(&ptable.lock);
// Enabling mtrace calls in scheduler generates many mtrace_call_entrys.
// mtrace_call_set(1, cpunum());
mtrace_fcall_register(pid, (unsigned long)scheduler, 0, mtrace_start); mtrace_fcall_register(pid, (unsigned long)scheduler, 0, mtrace_start);
for(;;){ for(;;){
...@@ -285,8 +287,10 @@ scheduler(void) ...@@ -285,8 +287,10 @@ scheduler(void)
mtrace_fcall_register(pid, 0, 0, mtrace_pause); mtrace_fcall_register(pid, 0, 0, mtrace_pause);
mtrace_fcall_register(proc->pid, 0, 0, mtrace_resume); mtrace_fcall_register(proc->pid, 0, 0, mtrace_resume);
mtrace_call_set(1, cpunum());
swtch(&cpu->scheduler, proc->context); swtch(&cpu->scheduler, proc->context);
mtrace_fcall_register(pid, 0, 0, mtrace_resume); mtrace_fcall_register(pid, 0, 0, mtrace_resume);
mtrace_call_set(0, cpunum());
switchkvm(); switchkvm();
// Process is done running for now. // Process is done running for now.
...@@ -316,6 +320,7 @@ sched(void) ...@@ -316,6 +320,7 @@ sched(void)
intena = cpu->intena; intena = cpu->intena;
mtrace_fcall_register(proc->pid, 0, 0, mtrace_pause); mtrace_fcall_register(proc->pid, 0, 0, mtrace_pause);
mtrace_call_set(0, cpunum());
swtch(&proc->context, cpu->scheduler); swtch(&proc->context, cpu->scheduler);
cpu->intena = intena; cpu->intena = intena;
} }
......
...@@ -133,10 +133,12 @@ syscall(void) ...@@ -133,10 +133,12 @@ syscall(void)
mtrace_fcall_register(proc->pid, (unsigned long)syscalls[num], mtrace_fcall_register(proc->pid, (unsigned long)syscalls[num],
0, 0,
mtrace_start); mtrace_start);
mtrace_call_set(1, cpunum());
proc->tf->eax = syscalls[num](); proc->tf->eax = syscalls[num]();
mtrace_fcall_register(proc->pid, (unsigned long)syscalls[num], mtrace_fcall_register(proc->pid, (unsigned long)syscalls[num],
0, 0,
mtrace_done); mtrace_done);
mtrace_call_set(0, cpunum());
} else { } else {
cprintf("%d %s: unknown sys call %d\n", cprintf("%d %s: unknown sys call %d\n",
proc->pid, proc->name, num); proc->pid, proc->name, num);
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论