DragonFly kernel List (threaded) for 2003-12
Re: Laptop getting hot
:> 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 (gd->gd_reqflags)
: ntd->td_flags |= TDF_IDLE_NOHLT;
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).