(toppers-users 4744) Re: [SafeG] NT-Linuxでの CPU hotplugについて

Hiromichi Matsumura matsumura.hiromichi @ meta.co.jp
2018年 3月 12日 (月) 11:18:45 JST


メタテクノの松村です。

本件、自己解決しました。

online処理時、リセット処理と同様のレジスタの初期化を追加することで
解決いたしました。

以上、よろしくお願いいたします。


On Thu, 08 Mar 2018 17:01:15 +0900
Hiromichi Matsumura <matsumura.hiromichi @ meta.co.jp> wrote:

> メタテクノの松村と申します。
> 
> SafeGの調査・検討をさせていただいております。
> 
> その中で、SafeG環境下で CPU hotplug動作時に例外が発生しており、
> その調査が難航しているため、こちらのメーリングリストに投稿させて
> いただきます。
> 
> 以下に詳細を記載しますが、『■現象』の箇所に、例外発生時のログを
> 記載します。
> 
> もしこちらのログから何か疑わしき箇所が判りますようでしたら、
> アドバイスをいただけると幸いです。
> 
> もしくは、本調査を継続するに当たり、どの辺りを見ると良い、などの
> アドバイスでもいただけると助かります。
> 
> なお、以下の『■修正』の箇所に、CPU hotplug対応として
> 修正した内容を記載いたします。
> 私が何か勘違いをしている可能性もございますので、問題がございましたら
> 御指摘いただけると助かります。
> 
> 参考までに、CPU hotplugについては、以下のURLを参照ください。
> https://www.kernel.org/doc/html/v4.11/core-api/cpu_hotplug.html
> 
> 
> ■確認環境
> 
> 基板: SABRESD(NXP社)
> SafeG: v1.2.4
> Trust: fmp 1.4.0
> NonTrust: Linux(3.10.53-r0)
> 
> 
> ■現象
> 
> CPU hotplugにて、offline後、online時に例外発生。
> 
> root @ imx6qsabresd:~# cd /sys/devices/system/cpu/
> root @ imx6qsabresd:/sys/devices/system/cpu# cat  cpu3/online
> 1
> root @ imx6qsabresd:/sys/devices/system/cpu# echo  0  >  cpu3/online
> CPU3: shutdown
> root @ imx6qsabresd:/sys/devices/system/cpu# echo  1  >  cpu3/online
> ---[ end trace 958f2be79573ff0c ]---
> Kernel panic - not syncing: Attempted to kill the idle task!
> CPU2: stopping
> CPU: 2 PID: 0 Comm: swapper/2 Tainted: G      D      3.10.53-1.1.0_ga+g496fbe0 #3
> [<80013b00>] (unwind_backtrace+0x0/0xf4) from [<80011524>] (show_stack+0x10/0x14)
> [<80011524>] (show_stack+0x10/0x14) from [<80012d28>] (handle_IPI+0x108/0x118)
> [<80012d28>] (handle_IPI+0x108/0x118) from [<80008584>] (gic_handle_irq+0x58/0x5c)
> [<80008584>] (gic_handle_irq+0x58/0x5c) from [<8000dc80>] (__irq_svc+0x40/0x70)
> Exception stack(0xa809ff50 to 0xa809ff98)
> ff40:                                     a809ff98 0000004c 056f347c 00000012
> ff60: 056b2806 00000012 815820e0 80cabd68 00000000 00000000 a809e000 a809e000
> ff80: 00000017 a809ff98 8005fe3c 80453cf8 600f0013 ffffffff
> [<8000dc80>] (__irq_svc+0x40/0x70) from [<80453cf8>] (cpuidle_enter_state+0x50/0xe0)
> [<80453cf8>] (cpuidle_enter_state+0x50/0xe0) from [<80453e38>] (cpuidle_idle_call+0xb0/0x148)
> [<80453e38>] (cpuidle_idle_call+0xb0/0x148) from [<8000ec68>] (arch_cpu_idle+0x10/0x54)
> [<8000ec68>] (arch_cpu_idle+0x10/0x54) from [<8005f710>] (cpu_startup_entry+0x104/0x150)
> [<8005f710>] (cpu_startup_entry+0x104/0x150) from [<10665124>] (0x10665124)
> CPU0: stopping
> CPU: 0 PID: 0 Comm: swapper/0 Tainted: G      D      3.10.53-1.1.0_ga+g496fbe0 #3
> [<80013b00>] (unwind_backtrace+0x0/0xf4) from [<80011524>] (show_stack+0x10/0x14)
> [<80011524>] (show_stack+0x10/0x14) from [<80012d28>] (handle_IPI+0x108/0x118)
> [<80012d28>] (handle_IPI+0x108/0x118) from [<80008584>] (gic_handle_irq+0x58/0x5c)
> [<80008584>] (gic_handle_irq+0x58/0x5c) from [<8000dc80>] (__irq_svc+0x40/0x70)
> Exception stack(0x80c9ff20 to 0x80c9ff68)
> ff20: 80c9ff68 0000004c 056f347c 00000012 056b92cc 00000012 815720e0 80cabd68
> ff40: 00000000 00000000 80c9e000 80c9e000 00000017 80c9ff68 8005fe3c 80453cf8
> ff60: 60000013 ffffffff
> [<8000dc80>] (__irq_svc+0x40/0x70) from [<80453cf8>] (cpuidle_enter_state+0x50/0xe0)
> [<80453cf8>] (cpuidle_enter_state+0x50/0xe0) from [<80453e38>] (cpuidle_idle_call+0xb0/0x148)
> [<80453e38>] (cpuidle_idle_call+0xb0/0x148) from [<8000ec68>] (arch_cpu_idle+0x10/0x54)
> [<8000ec68>] (arch_cpu_idle+0x10/0x54) from [<8005f710>] (cpu_startup_entry+0x104/0x150)
> [<8005f710>] (cpu_startup_entry+0x104/0x150) from [<80c52a9c>] (start_kernel+0x324/0x330)
> [<80013b00>] (unwind_backtrace+0x0/0xf4) from [<80011524>] (show_stack+0x10/0x14)
> [<80011524>] (show_stack+0x10/0x14) from [<80012d28>] (handle_IPI+0x108/0x118)
> [<80012d28>] (handle_IPI+0x108/0x118) from [<80008584>] (gic_handle_irq+0x58/0x5c)
> [<80008584>] (gic_handle_irq+0x58/0x5c) from [<8000dc80>] (__irq_svc+0x40/0x70)
> Exception stack(0xa809df50 to 0xa809df98)
> df40:                                     a809df98 0000004c 056f347c 00000012
> df60: 056b2806 00000012 8157a0e0 80cabd68 00000000 00000000 a809c000 a809c000
> df80: 00000017 a809df98 8005fe3c 80453cf8 60010013 ffffffff
> [<8000dc80>] (__irq_svc+0x40/0x70) from [<80453cf8>] (cpuidle_enter_state+0x50/0xe0)
> [<80453cf8>] (cpuidle_enter_state+0x50/0xe0) from [<80453e38>] (cpuidle_idle_call+0xb0/0x148)
> [<80453e38>] (cpuidle_idle_call+0xb0/0x148) from [<8000ec68>] (arch_cpu_idle+0x10/0x54)
> [<8000ec68>] (arch_cpu_idle+0x10/0x54) from [<8005f710>] (cpu_startup_entry+0x104/0x150)
> [<8005f710>] (cpu_startup_entry+0x104/0x150) from [<10665124>] (0x10665124)
> 
> 
> ■修正
> 
> (1) offline対応
> 
> 何も修正しない状態では、offline時に例外が発生します。
> 
> 以下の関数で、CP15レジスタによる命令キャッシュの無効化処理や電源モードをDORMANTに
> 移行する処理を行っていますが、Trust側が動作している状態であるため、この関数内の
> 処理を全てコメントアウトしました。
> 
> arch/arm/mach-imx/hotplug.c
>  cpu_enter_lowpower() 処理をコメントアウト
> 
> (2) online対応
> 
> online時に以下の処理を行われるように修正しました。
> 
> fmp_1.4.0/target/imx6_gcc/target_user.txt
> -------------------------------------------
> ●SafeG使用時
> <snip>
> 7.  S : コア1,2,3 : SRC_CPR3,5,7に有効な値が書き込まれるので,NSに遷移
> 8. NS : コア1,2,3 : SRC_CPR3,5,7で指定されたアドレスを実行
> -------------------------------------------
> 
> [NT-Linux]
> arch/arm/mach-imx/hotplug.c
>  imx_cpu_kill()  ジャンプアドレスを 0で初期化
> arch/arm/mach-imx/src.c
>  imx_set_cpu_jump()  ジャンプアドレスに 0を指定された場合、GPRnに 0を設定
> 
> [T-FMP]
> safeg-1.2.4/sample/fmp/sample1/sample1.c
>  btask()  GPRnが再設定されたら safeg_syscall_setntpc関数を再実行するように変更
> 
> 
> 以上、よろしくお願いいたします。
> 
> 
> --------------------------------------------------------
> 株式会社メタテクノ(静岡技術センター)
> 事業本部 コアテクノロジー部
> 松村浩道
> 〒411-0943 静岡県駿東郡長泉町下土狩30-1 山光ビルB棟1階
> Tel: 050-3535-0158  Fax: 055-980-1805
> E-mail: matsumura.hiromichi @ meta.co.jp
> --------------------------------------------------------

--------------------------------------------------------
株式会社メタテクノ(静岡技術センター)
事業本部 コアテクノロジー部
松村浩道
〒411-0943 静岡県駿東郡長泉町下土狩30-1 山光ビルB棟1階
Tel: 050-3535-0158  Fax: 055-980-1805
E-mail: matsumura.hiromichi @ meta.co.jp
--------------------------------------------------------