adviceLUNA / TRQer サポート

【異常動作】 システムマクロトレースに出力されるプロセス/スレッドの遷移情報が欠損する

【詳細】
kerne/sched.cソース中のcontext_switch()関数内のswitch_to()関数後に、OSスイッチ関数を
組み込んでいただいておりますが、プロセス/スレッドがforkした時にタスクスイッチ情報が
出力されない場合があります。
このため、関数トレース情報が実際と異なるプロセス/スレッドで実行された記録となる事があります。

【対象機種】
Ver.1.50までの下記のAPIライブラリ
TLU200 / TLU201 / TLU250 / TLU251 / TLX204 / TLX206 / TLX250 / TLX251

【原因】
Forkして起きたスレッドが初めて動作する際にswitch_to()関数後のシステムマクロトレースAPI関数が
実行されないため、欠損が発生します。

【対策】
OSスイッチ関数を組み込む場所をswitch_to()関数の直前に変更し、
これからスイッチするタスク情報を元にシステムマクロトレースへ出力します。

『デバイスドライバ構築ガイド』の「コンテキストスイッチ関数の挿入ポイント」に記載している
OSスイッチ関数の組み込み先を次のように変更してください。

-------------------------------
#ifndef __ARCH_WANT_UNLOCKED_CTXSW
spin_release(&rq->lock.dep_map, 1, _THIS_IP_);
#endif

#ifdef YDC_SMT_DEBUG
if( unlikely(!next->pid)) {
_SMT_OsSwitch_Idle();
}
else{
_SMT_OsSwitch_ThreadProcess_Name( (unsigned long)(next->pid), (unsigned long)(next->tgid), next->comm, next->group_leader->comm);
}
#endif /* YDC_SMT_DEBUG */

switch_to(prev, next, prev);

barrier();
-------------------------------

備考欄の【関連情報】より、ソースパッチがダウンロード可能です。
必要に応じてご使用ください。
備考
更新日:2017/04/07

 

アンケートにご協力お願いします

この解答はお客様のお役に立てましたでしょうか?

 

           

検索に戻る