[Suzaku:01664] Re: Linuxフリーズ時の調査方法について

菊地 義和 email@hidden
2009年 10月 28日 (水) 09:56:41 JST


yashi さま

菊地です。おはようございます。
夜遅くにお返事をくださいまして、ありがとうございます。

> おぉ!! じゃぁ、確定じゃないですか?

というと、「置き換えたところがよくない」ということですか。
症状はよくなった気がしますが、フリーズしている
(While文から抜けない)ことは変わらない様に見えます。

コードは次のようにしております。
  for(llpcnt=0; lpcnt<18; lpcnt++){
      tmp = ioread32( adr );     ←ここが
      while( tmp < lpcnt ){      ←問題の
      tmp = ioread32( adr );   ←箇所
      }                  ←です。
        {
     tmpとlpcntの関係による条件分析と表示
      (if文とprintk文による状態3バイト表示)
        }
    条件ごとの実施したい処理
     }

この「tmp = ioread32( adr );」がよくない、
と思ってしまいました。
これで「どうして」、と思ってます。

>> for (i=0; i<10; i++) {
>>     if (registor_changed) {
>>         break;
>>         gotit = 1;
>>     }
>>     mdelay(1);
>> }
>
> にしてみるとか。

条件が変化するのが約9msec毎、18回です。
それに合わせて実装してみます。

また、報告いたします。

以上

----- Original Message ----- 
From: "Yasushi SHOJI" <email@hidden>
To: "菊地 義和" <email@hidden>
Cc: "SUZAKU general discussion list" <email@hidden>
Sent: Tuesday, October 27, 2009 10:46 PM
Subject: Re: [Suzaku:01658] Re: Linuxフリーズ時の調査方法について


> At Tue, 27 Oct 2009 21:04:48 +0900,
> 菊地 義和 wrote:
>>
>> > IPのレジスタが memory map されているってことですよね? これ cache され
>> > るってことはないですか?
>>
>> ioremap_nocache()で取得したアドレスを
>> ioread32()を使って読取ればキャッシュはされない、
>> と思っていますが、よいでしょうか。
>
> たぶん。(^^;
>
>> > 1 秒毎に、FPGAへの readが 発生しているのは確認されていますか?
>>
>> 確認しておりません。
>> 1秒毎といっているのは、時簡に1secを設定しているためでしょうか。
>> また、確認の方法を教えていただけると助かります。
>
> あ、ごめんなさい。time out が 1秒でしたね。wait...は、scheduleされるたびに
> 調べるはずなので、何度か見にいくはずです。
>
>> >> なるほど。wait_event_interruptible_timeout()ですとそういう可能性がある 
>> >> 
>> >> わけですね。
>> >> そうすると、これを使わない方法も考えられますので、試してみます。
>> >
>> > いや、そういう訳ではなく、sleepするってそういう事です。
>>
>> いや、なんとも。。。そうですね、「可能性」ではないですよね。
>>
>> ここの待ち時間は9msec程度です。
>>
>> ためしに、while文での処理に置き換えてみましたが、
>> wait_eventと同じような現象が発生し、while文から抜けて
>> こないように見えます。
>
> おぉ!! じゃぁ、確定じゃないですか?
>
>> for (i=0; i<10; i++) {
>>     if (registor_changed) {
>>         break;
>>         gotit = 1;
>>     }
>>     mdelay(1);
>> }
>
> にしてみるとか。
> -- 
>           yashi 




suzaku メーリングリストの案内