今晩は、奥村です。
C600のACPIについて困っています。
家庭内LANのサーバーをDELL Latitude C600のMBにしようと頑張っているので
すが、CPUが高温になるまでFanが回らず、結局落ちてしまいます。
hw.acpi.thermal.tz0.*を色々いじったのですが、このマシンでは設定できな
いようです。色々webを探してもhotになるという報告は有っても解決策は見つ
けることは出来ませんでした。
そんな中、ファンをコントロールするプログラムを見つけ使おうと思ったので
すが、奇妙な現象でデッドロックに乗り上げています。それは、直接実行する
とbus wrrorで落ち、gdbからrunすると正常に動くというものです。
落ちたcoreをgdbに食わせると下記の所で落ちています。
-----------------------
static int d_io(DRegs *regs)
{
int rc;
int eax = regs->eax;
asm("pushl %%eax\n\t" \
"movl 0(%%eax),%%edx\n\t" \
"push %%edx\n\t" \
"movl 4(%%eax),%%ebx\n\t" \
"movl 8(%%eax),%%ecx\n\t" \
"movl 12(%%eax),%%edx\n\t" \
"movl 16(%%eax),%%esi\n\t" \
"movl 20(%%eax),%%edi\n\t" \
"popl %%eax\n\t" \
"out %%al,$0xb2\n\t" \
"out %%al,$0x84\n\t" \
"xchgl %%eax,(%%esp)\n\t"
"movl %%ebx,4(%%eax)\n\t" \
"movl %%ecx,8(%%eax)\n\t" \
"movl %%edx,12(%%eax)\n\t" \
"movl %%esi,16(%%eax)\n\t" \
"movl %%edi,20(%%eax)\n\t" \
"popl %%edx\n\t" \
"movl %%edx,0(%%eax)\n\t" \
"lahf\n\t" \
"shrl $8,%%eax\n\t" \
"andl $1,%%eax\n" \
: "=a" (rc)
: "a" (regs)
: "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");<<<<
--------------------------------
inline asmの部分で落ちていることが分かりましたが、何処をどう直せば良い
のかわかりません。
gdb上の動作は正常で、温度を見ながらファン回転数をちゃんとコントロール
できています。
示唆を頂けると幸いです。
----
[EMAIL PROTECTED] (奥村暢朗)