context_switch() 手続き
から呼び出される switch_mm() 手続きから呼び出される cpu_arm926_switch_mm() 手続きについて。マニュアルが引きにくい上に CP15 なシステム制御コプロセッサの主な機能は以下とゆーのは分かった。
- システム全体の制御と構成
- MMUの構成と管理
- キャッシュの構成と管理
- システムパフォーマンスの監視
がしかし以下な命令列と照らし合わせて何を意図しているのか、ということが調べきれてませんorz
ENTRY(cpu_arm926_switch_mm) #ifdef CONFIG_MMU mov ip, #0 #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH mcr p15, 0, ip, c7, c6, 0 @ invalidate D cache #else @ && 'Clean & Invalidate whole DCache' 1: mrc p15, 0, r15, c7, c14, 3 @ test,clean,invalidate bne 1b #endif mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache mcr p15, 0, ip, c7, c10, 4 @ drain WB mcr p15, 0, r0, c2, c0, 0 @ load page table pointer mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs #endif mov pc, lr
CONFIG_MMU が define されてない (memory management unit が無い) 場合は非常に簡単な処理になってますが lr って何だ。
というか、何とかして上記命令列がコメント通りの意図なのかを確認したい。
とりあえず
中途半端なエントリなのですが、なんとかして上記命令列は解読して別エントリにて補足予定ッス。