[Suzaku:01665] Re: Linuxフリーズ時の調査方法について
菊地 義和
email@hidden
2009年 10月 28日 (水) 17:40:07 JST
yashi さま
菊地です。御世話になります。
確認してみました。
コードは次のようにしました。
for(llpcnt=0; lpcnt<18; lpcnt++){
for( mscnt=0; mscnt<(18*9+1)*5; mscnt++ ) { ←ここが
tmp = ioread32( adr ); ←問題の
if( tmp == 0){ ←箇所
break; ←です。
} ←
udelay(192); ←この時間に注意
} ←
{
tmpとlpcntの関係による条件分析と表示
(if文とprintk文による状態3バイト表示)
}
条件ごとの実施したい処理
}
上記「←ここが」のfor文から抜けないように見えます。
コードイメージに「この時間に注意」と書きましたが
その設定時間が短いと停止してしまうように感じました。
「ioread32( adr )」は余り短い間隔で呼び出すことは
よくないのでしょうか。
アドバイス宜しくお願いします。
以上
----- Original Message -----
From: "菊地 義和" <email@hidden>
To: "Yasushi SHOJI" <email@hidden>
Cc: "SUZAKU general discussion list" <email@hidden>
Sent: Wednesday, October 28, 2009 9:56 AM
Subject: [Suzaku:01664] Re: Linuxフリーズ時の調査方法について
> 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 mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/suzaku
suzaku メーリングリストの案内