Laptop getting hot

Matthew Dillon dillon at apollo.backplane.com
Mon Dec 29 19:23:40 PST 2003


:
:> 
:>     1.22?  That's 24 versions down from the current version.  Your kernel
:>     shouldn't compile with lwkt_thread.c out of sync that much :-).
:
:No, I didn't say that I reverted to 1.22. What I meant was
:`undo the change made in revision 1.22', or surround it by #ifdef SMP:
:
:...
:+#if SMP
: 	    if (gd->gd_reqflags)
: 		ntd->td_flags |= TDF_IDLE_NOHLT;
:+#endif

    Ok, the problem should now be fixed.  I added some additional fluff
    but the main fix is in kern/lwkt_thread.c and sys/globaldata.h. 
    Basically what was happening was that reschedule requests, from the
    clock interrupt, were setting the RQF_AST_RESCHED bit in gd_reqflags.
    This bit is only cleared when a process is trying to return to usermode,
    so if the machine was idle the bit was never getting cleared.

    This caused TDF_IDLE_NOHLT to always get set on the idle process, which
    disabled the use of the HLT instruction.

    Should be fixed now.  The new check just checks for non-process request
    flags (RQF_IPIQ and and RQF_INTPEND), plus I added some statistics 
    counters to make future debugging easier, and I also clear the reschedule
    request flag in chooseproc() (since there's no point leaving it set when
    choosing a new process to schedule).

						-Matt





More information about the Kernel mailing list