linux-2.6.33/cpu_v6_switch_mm()(arm)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#ya0ae156]
#backlinks
*説明 [#a46985d8]
-パス: [[linux-2.6.33/arch/arm/mm/proc-v6.S]]
-指定されたページテーブルに切り替える。
--MMU が無効ならば何もしない。
-複数 CPU アーキテクチャに対応する場合、
この関数のポインタは processor 構造体の switch_mm メンバ...
--[[linux-2.6.33/processor]]
**引数 [#ud957ad4]
-pgd_phys
--おそらく unsigned long
--スイッチ先のページテーブルの物理アドレス
-struct mm_struct *tsk
--スイッチ先のコンテキスト
--[[linux-2.6.33/mm_struct]]
**返り値 [#r551b7ca]
-なし
**参考 [#jb48ff6e]
*実装 [#c4e174a6]
/*
* cpu_arm926_switch_mm(pgd_phys, tsk)
*
* Set the translation table base pointer to be pgd_phys
*
* - pgd_phys - physical address of new TTB
*
* It is assumed that:
* - we are not using split page tables
*/
ENTRY(cpu_v6_switch_mm)
-
--[[linux-2.6.33/ENTRY()]]
#ifdef CONFIG_MMU
-MMU が有効の場合
--[[linux-2.6.33/CONFIG_MMU]]
mov r2, #0
ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id
orr r0, r0, #TTB_FLAGS
-mov: r2 を 0 クリア
-ldr: r1(第二引数)は struct mm_struct へのポインタ、
(r1)->context.id の取得を行う。
--アドレス r1 + (MM_CONTEXT_ID = context.id へのオフセッ...
ロードしているだけ。
--[[linux-2.6.33/MM_CONTEXT_ID]]
-orr: ページテーブルのメモリ属性(キャッシュ可/不可、
ライトスルー/ライトバック)を指定する。
--[[linux-2.6.33/TTB_FLAGS]]
mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB
-mcr: CP15 c7(キャッシュ制御)に 0 を転送する。
-やりたいことは <crm, opcode_2> = <c5, 6> なので、
分岐先キャッシュ全体をフラッシュする。
--ARM DDI 0100HJ-00 ページ B6-21 にある、
表 B6-6「レジスタ7: キャッシュ制御と類似機能」を参照。
mcr p15, 0, r2, c7, c10, 4 @ drain write buffer
-mcr: CP15 c7(キャッシュ制御)に 0 を転送する。
-やりたいことは <crm, opcode_2> = <c10, 4> なので、
データ同期バリア。
以前はライトバッファドレインだった(コメントも古いままで...
--ARM DDI 0100HJ-00 ページ B6-22 にある、
表 B6-6「レジスタ7: キャッシュ制御と類似機能(続き)」を...
mcr p15, 0, r0, c2, c0, 0 @ set TTB 0
-mcr: CP15 c2(VMSAv6、仮想メモリシステム制御)変換テーブ...
スイッチ先のコンテキストを転送する。
-やりたいことは <crm(無視される), opcode_2> = <c0, 0> ...
変換テーブルベース 0(TTBR0)の設定。
--ARM DDI 0100HJ-00 ページ B4-41 にある、
B4.9.2「レジスタ2: 変換テーブルのベース」を参照。
mcr p15, 0, r1, c13, c0, 1 @ set context ID
-mcr: CP15 c13(VMSAv6、仮想メモリシステム制御)プロセス ...
スイッチ先のコンテキストを転送する。
--コンテキスト ID には mm_struct の context.id の値が指定...
--[[linux-2.6.33/mm_struct]]
-やりたいことは <crm(無視される), opcode_2> = <c0, 1> ...
コンテキスト ID の設定。
--ARM DDI 0100HJ-00 ページ B4-52 にある、
B4.9.10「レジスタ13: プロセス ID」を参照。
#endif
mov pc, lr
-呼び出し元に戻る。
*コメント [#pf2cb6aa]
終了行:
*参照元 [#ya0ae156]
#backlinks
*説明 [#a46985d8]
-パス: [[linux-2.6.33/arch/arm/mm/proc-v6.S]]
-指定されたページテーブルに切り替える。
--MMU が無効ならば何もしない。
-複数 CPU アーキテクチャに対応する場合、
この関数のポインタは processor 構造体の switch_mm メンバ...
--[[linux-2.6.33/processor]]
**引数 [#ud957ad4]
-pgd_phys
--おそらく unsigned long
--スイッチ先のページテーブルの物理アドレス
-struct mm_struct *tsk
--スイッチ先のコンテキスト
--[[linux-2.6.33/mm_struct]]
**返り値 [#r551b7ca]
-なし
**参考 [#jb48ff6e]
*実装 [#c4e174a6]
/*
* cpu_arm926_switch_mm(pgd_phys, tsk)
*
* Set the translation table base pointer to be pgd_phys
*
* - pgd_phys - physical address of new TTB
*
* It is assumed that:
* - we are not using split page tables
*/
ENTRY(cpu_v6_switch_mm)
-
--[[linux-2.6.33/ENTRY()]]
#ifdef CONFIG_MMU
-MMU が有効の場合
--[[linux-2.6.33/CONFIG_MMU]]
mov r2, #0
ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id
orr r0, r0, #TTB_FLAGS
-mov: r2 を 0 クリア
-ldr: r1(第二引数)は struct mm_struct へのポインタ、
(r1)->context.id の取得を行う。
--アドレス r1 + (MM_CONTEXT_ID = context.id へのオフセッ...
ロードしているだけ。
--[[linux-2.6.33/MM_CONTEXT_ID]]
-orr: ページテーブルのメモリ属性(キャッシュ可/不可、
ライトスルー/ライトバック)を指定する。
--[[linux-2.6.33/TTB_FLAGS]]
mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB
-mcr: CP15 c7(キャッシュ制御)に 0 を転送する。
-やりたいことは <crm, opcode_2> = <c5, 6> なので、
分岐先キャッシュ全体をフラッシュする。
--ARM DDI 0100HJ-00 ページ B6-21 にある、
表 B6-6「レジスタ7: キャッシュ制御と類似機能」を参照。
mcr p15, 0, r2, c7, c10, 4 @ drain write buffer
-mcr: CP15 c7(キャッシュ制御)に 0 を転送する。
-やりたいことは <crm, opcode_2> = <c10, 4> なので、
データ同期バリア。
以前はライトバッファドレインだった(コメントも古いままで...
--ARM DDI 0100HJ-00 ページ B6-22 にある、
表 B6-6「レジスタ7: キャッシュ制御と類似機能(続き)」を...
mcr p15, 0, r0, c2, c0, 0 @ set TTB 0
-mcr: CP15 c2(VMSAv6、仮想メモリシステム制御)変換テーブ...
スイッチ先のコンテキストを転送する。
-やりたいことは <crm(無視される), opcode_2> = <c0, 0> ...
変換テーブルベース 0(TTBR0)の設定。
--ARM DDI 0100HJ-00 ページ B4-41 にある、
B4.9.2「レジスタ2: 変換テーブルのベース」を参照。
mcr p15, 0, r1, c13, c0, 1 @ set context ID
-mcr: CP15 c13(VMSAv6、仮想メモリシステム制御)プロセス ...
スイッチ先のコンテキストを転送する。
--コンテキスト ID には mm_struct の context.id の値が指定...
--[[linux-2.6.33/mm_struct]]
-やりたいことは <crm(無視される), opcode_2> = <c0, 1> ...
コンテキスト ID の設定。
--ARM DDI 0100HJ-00 ページ B4-52 にある、
B4.9.10「レジスタ13: プロセス ID」を参照。
#endif
mov pc, lr
-呼び出し元に戻る。
*コメント [#pf2cb6aa]
ページ名: