Date: Sat, 24 Dec 1994 20:32:21 +0900 From: hosokawa@mt.cs.keio.ac.jp (HOSOKAWA Tatsumi) To: bde@zeta.org.au Cc: freebsd-hackers@freebsd.org, hosokawa@mt.cs.keio.ac.jp Subject: Re: DX4/100 BUG Message-ID: <199412241132.UAA25497@nanbu.mt.cs.keio.ac.jp> In-Reply-To: Your message of Sat, 24 Dec 1994 21:39:33 %2B1100. <199412241039.VAA02440@godzilla.zeta.org.au>
next in thread | previous in thread | raw e-mail | index | archive | help
In article <199412241039.VAA02440@godzilla.zeta.org.au>
bde@zeta.org.au writes:
>> It's easy to ifdef the HLT instruction or to overwrite it with a NOP
>> in the kernel binary. Linux tests if HLT works and runs essentially
>>
>> if (hlt_works_ok)
>> __asm("hlt");
>>
>> in the idle loop.
Thank you. It's very simple solution. But I have more two questions.
(1) swtch.s executes HLT instruction from following code.
idle_loop:
cli
cmpl $0,_whichrtqs /* real-time queue */
jne sw1a
cmpl $0,_whichqs /* normal queue */
jne nortqr
cmpl $0,_whichidqs /* 'idle' queue */
jne idqr
#ifdef APM
call _apm_cpu_idle
call _apm_cpu_busy
#else
sti
hlt /* wait for interrupt */
#endif
jmp idle_loop
If the HLT is removed from here, almost all idle loop is executed
without accepting interrupts. The system will be down. What is
the most appropriate solution? I think these CMPL and JNE pairs
are atomic operations.
(2) How Linux probes this DX4 HLT bug?
Thank you very much.
---
-----------------------------------------------------------
HOSOKAWA, Tatsumi (hosokawa@mt.cs.keio.ac.jp)
Dept. of Computer Science, Keio University, Yokohama, Japan
-----------------------------------------------------------
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199412241132.UAA25497>
