Udo A. Steinberg 쓴 글:
On Wed, 15 Nov 2006 20:34:56 +0900 Jugwan Eom (JE) wrote:
JE> > I think it's operation is the same with my code and it reproduced the JE> > same result.
JE> + if (ts->_trapno == 2) { // NMI JE> +#if 0 JE> + printf ("%d: CS=%lx %x.%02x IP="L4_PTR_FMT" Trap=%02lx \n", JE> + __LINE__, ts->cs(), d_taskno(), d_threadno(), ts->ip (), ts->_trapno); JE> +#endif JE> + Watchdog::enable(); JE> + goto success; JE> + }
Why do you have a call to Watchdog::enable() in there?
Each time a NMI is raised, a sample that includes the instruction pointer, cpu mode (kernel/user), event type (in this case, GLOBAL_POWER_EVENTS) and etc. is collected before Watchdog::enable(). And Watchdog::enable () resets the counter values (Perf_cnt::touch_watchdog()) and clear the overflow flag (Perf_cnt::start_watchdog()) and eventually restarts a performance counter for the next sample.
Regards, -- Jugwan Eom