[Suzaku:01956] Re: Kernel エラー

Nobuaki Sugishima email@hidden
2010年 9月 6日 (月) 19:19:32 JST


溝渕様

 何度も対応ありがとうございます。

 不能とは、ハードにPulseが出力されないことを言います。
 本件に関し大変なミスをしていました。
仔細に観測したところ__raw_writel(slvReg1[i], addrAut); がもたらすStrobeパルスは出ていました。ドライバには問題はありません。
 FPGA側の回路を修正して目的の動作が得られました。

 spin_lock_irqsavel()とspin_lock()の違い、理解していませんでした。前者を使用するようにします。
 これにより正体不明の割り込み(おそらくEthernetから)は防止できた感じです。

 どうもありがとうございました。


----- Original Message ----- 
From: "mizo" <email@hidden>
To: "SUZAKU general discussion list" <email@hidden>
Sent: Monday, September 06, 2010 10:23 AM
Subject: [Suzaku:01954] Re: Kernel エラー


> 溝渕です。
>
> Nobuaki Sugishima wrote:
>>  ハンドラを
>> spin_lock_irqsave(&spin_lock, slFlag);
>>
>> spin_lock_irqrestore(&spin_lock, slFlag);
>>
>> で挟んでみたのですが、現象は変わりません。
>>
>> これとは別にini_module()で
>> spin_lock_init(&spin_lock);
>>
>> my_open()で
>>
>> spin_lock(&spin_lock);
>> if ( access_num){
>>  spin_unlock(&spin_lock);
>>  return -EBUSY;
>> }
>> access_num ++;
>> spin_unlock(&spin_lock);
>>
>> をいれ、さらに割り込みハンドラを
>> spin_lock(&spin_lock);
>> spin_unlock(&spin_lock);
>> で挟んでも見たですが、変わりません。
>>
>> しかし全く変わらなかったわけではなく、前回報告したrunFlag=falseのところ
>> にブレークアウトする正体不明の割り込みはなくなったようです。
>> これがもたらすドライバエラーも出なくなりました。
>
> spin_lock_irqsavel()は、スピンロックの取得を試み、成功した場合は外部割り込みを
> 禁止します。そのため、外部割り込みが入ってこなくなります。
>
>> spin_lockの機能は__SMP__が実装されていないと効果がないそうですが、CPUが
>> 一つしかないSUZAKUでは必要なものなのでしょうか?。
>
> なぜspin_lock()を使用したいのでしょうか?外部割り込みを抑制したいとおっしゃって 
> 
> いたので、spin_lock_irqsavel()を紹介しましたが、spin_lock()はご指摘の通り、SMPで
> プリエンプト可能である場合に、スピンロックの取得を試みます。
>
> 外部割り込みの禁止を行ないたいのでしょうか?スピンロックを取得したいのでしょうか?
>
>> とにかく割り込みそのものは所定クロックをカウントして自身でOUT命令を発
>> 行、停止するメカニズムは問題なく動作しており、割り込みそのものの問題では
>> ないことは明らかです。
>>
>> 問題はすべて
>> __raw_writel(slvReg1[i], addrAut);
>> この1ステップに集約されました。
>>
>> これが1,000回ほどで突然不能になる何らかの理由を探らなければなりませ
>> ん。
>
> 「不能」とはどのような状況でしょうか?このステップを実行しても、HWからパルスが
> 認識できないということでしょうか?このステップを確実に通っていることは確認でき
> ていますか?
>
> ドライバ内で、open()時などに、この行を無限ループで実行してみてください。もし、 
> 
> それでHWからパルスが確認できない場合は、HWを疑った方が良いかもしれません。
>
>> 払出しクロックは100μsec、実測するとクロックIN後ジッターはありま
>> すが約10μsecでハードへの出力が始まり、4回のStrobeが発行されてい
>> る時間はトータルで1μsec弱、時間的にはCriticalではありません。
>>
>> どうも出力内容が変化したところでエラーが発生しているようにも思えますが、
>> 内容が間違えていても出力自体が行われなくなることは考えにくいところです。
>
> ここで言う「エラー」と、「__raw_writel(slvReg1[i], addrAut);が不能になる」のは
> 同じ現象でしょうか?
>
>> 何か示唆がありましたらお願いします。
>
> _______________________________________________
> suzaku mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/suzaku
> 




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