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

yasuo kominami(gmail) email@hidden
2009年 10月 28日 (水) 20:25:03 JST


菊地様
皆様

こちらには初めて投稿します。
小南と申します。


以下のコードは、コンパイルが可能なソースコードからコピー
アンドペーストされたものでしょうか。

そうであるならば、明らかにおかしい点があります。

一番外側のfor文で0に初期化している変数と、それ以外で
使われている変数が異なっています。

0に初期化しているのは変数"llpnct"であり、それ以外では
変数"lpcnt"が使われています。

>  for(llpcnt=0; lpcnt<18; lpcnt++){

コンパイル可能であるならば、変数"lpcnt"は、このfor文
に来るまでに何らかの値が設定されているか、未初期化
のままではないかと思います。

また可能性だけでいうと、2番目のforループも、もし
変数"mscntの型がchar型(符号付き、符号なしのどちら
でも)ならば、判定条件がchar型であらわされる範囲
も大きい値と比較することになるため、常に真になり、
無限ループになります。

変数の型の宣言の部分も含めたコードを示してもら
えませんか。


2009/10/28 菊地 義和 <email@hidden>:
> 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 )」は余り短い間隔で呼び出すことは
> よくないのでしょうか。
>
> アドバイス宜しくお願いします。
>
> 以上
>



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