cpu_arm926_switch_mm 手続き

CONFIG_MMU が undef だった場合、戻り番地が格納されてるナニを pc に格納しているのみ。mmu が無い場合はページ変換テーブルだの何だのは気にするまでも無い、という事なのでしょうか。
CONFIG_MMU が define されてる場合、順番としては

  • データキャッシュを無効化
  • 命令キャッシュを無効化
  • Write Buffer を drain
  • 第一引数のページグローバルディレクトリ属性を Translation Table Base Register に load
  • TLB (Transfer Lookaside Buffer) を無効化

した後に戻り番地を pc に格納されております。
手続きの定義を以下に引用。proc-arm926.S です。

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

命令については ココ の CP15 の命令なナニを参照したら全部出てます。

ちなみに

上記 r0 レジスタには mm_struct 構造体の pgd 属性の値が格納されてるはずなのですが、その根拠は mmu_context.h の switch_mm 手続きの定義の中で記述されている以下に依ります。

		cpu_switch_mm(next->pgd, next);

mm_struct 構造体の pgd 属性は「ページグローバルディレクトリ」という記述があるんですが、pgd_t * という型なのでアドレスが格納されているはずですね。
何を指してるのか、は別途確認必要ですね。