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

菊地 義和 email@hidden
2009年 10月 29日 (木) 09:46:29 JST


小南様

菊地です。御世話になります。
ご指定くださいましてありがとうございます。

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

コードイメージをお伝えするため、抜き出しました。

> 0に初期化しているのは変数"llpnct"であり、それ以外では
> 変数"lpcnt"が使われています。
>
>>  for(llpcnt=0; lpcnt<18; lpcnt++){

大変申し訳ありません。
私のタイプミスです。
正しくは、次のとおりです。

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

>
> 変数の型の宣言の部分も含めたコードを示してもら
> えませんか。
>
次のようにしておりました。

   volatile int  lpcnt;
   volatile unsigned long  tmp ;

   int  mscnt;

  for(lpcnt=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バイト表示)
    }
    条件ごとの実施したい処理
  }

ご指摘の件、上記のように変数に対する型が不一致の箇所が
ありました。一度、初心に帰りコードを見直します。

その上で改めてご報告させてください。

以上

----- Original Message ----- 
From: "yasuo kominami(gmail)" <email@hidden>
To: "菊地 義和" <email@hidden>; "SUZAKU general discussion list" 
<email@hidden>
Sent: Wednesday, October 28, 2009 8:25 PM
Subject: Re: [Suzaku:01665] Re: Linuxフリーズ時の調査方法について


> 菊地様
> 皆様
>
> こちらには初めて投稿します。
> 小南と申します。
>
>
> 以下のコードは、コンパイルが可能なソースコードからコピー
> アンドペーストされたものでしょうか。
>
> そうであるならば、明らかにおかしい点があります。
>
> 一番外側の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 メーリングリストの案内