Fix for SPROFILE == 0

- contributed by Antoine Leca
This commit is contained in:
Tomas Hruby 2011-05-25 09:42:11 +02:00
parent 5582aae6d6
commit 423be1545c
3 changed files with 14 additions and 1 deletions

View File

@ -288,9 +288,10 @@ PUBLIC void context_stop_idle(void)
if (is_idle)
restart_local_timer();
#if SPROFILE
if (sprofiling)
get_cpulocal_var(idle_interrupted) = 1;
#endif
}
PUBLIC u64_t ms_2_cpu_time(unsigned ms)

View File

@ -222,6 +222,9 @@ PRIVATE void idle(void)
/* start accounting for the idle time */
context_stop(proc_addr(KERNEL));
#if !SPROFILE
halt_cpu();
#else
if (!sprofiling)
halt_cpu();
else {
@ -234,6 +237,7 @@ PRIVATE void idle(void)
interrupts_disable();
*v = 0;
}
#endif
/*
* end of accounting for the idle task does not happen here, the kernel
* is handling stuff for quite a while before it gets back here!

View File

@ -52,6 +52,7 @@ PRIVATE void lockup_check(struct nmi_frame * frame)
PUBLIC void nmi_watchdog_handler(struct nmi_frame * frame)
{
#if SPROFILE
/*
* Do not check for lockups while profiling, it is extremely likely that
* a false positive is detected if the frequency is high
@ -63,6 +64,13 @@ PUBLIC void nmi_watchdog_handler(struct nmi_frame * frame)
if ((watchdog_enabled || sprofiling) && watchdog->reinit)
watchdog->reinit(cpuid);
#else
if (watchdog_enabled) {
lockup_check(frame);
if (watchdog->reinit)
watchdog->reinit(cpuid);
}
#endif
}
int nmi_watchdog_start_profiling(const unsigned freq)