DragonFly BSD
DragonFly kernel List (threaded) for 2003-12
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: Laptop getting hot


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Mon, 29 Dec 2003 19:22:05 -0800 (PST)

:
:> 
:>     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



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]