*参照元 [#zc06b65e]
#backlinks
*説明 [#ic6124fa]
-パス: [[linux-2.6.33/arch/arm/mm/fault.c]]
-フォールトステータスレジスタのフォールトステータス(FS)フィールドを返す。
--説明
IFSR と DFSR
------------
仮想メモリシステムアーキテクチャ(VMSA)にて、
アドレス変換に失敗したときなどにセットされる。
VMSA のコプロセッサ名は CP15
| CRn opc1 CRm opc2 | 読み出し例
-----+----------------------+--------------------------
IFSR | c5 0 c0 0 | mrc p15, 0, r0, c5, c0, 0
DFSR | c5 0 c0 1 | mrc p15, 0, r0, c5, c0, 0
-----+----------------------+--------------------------
IFSR
----
31 13 12 11 10 9 8 7 6 5 4 3 2 1 0
| | | | | | |
------------------------+--+--+--+-----------------+------------
| | | | | `- FS[3:0]
| | | | `- UNK/SBZP
| | | `- FS[4]
| | `- 0 固定
| `- ExT
`- UNK/SBZP
DFSR
----
31 13 12 11 10 9 8 7 6 5 4 3 2 1 0
| | | | | | | |
------------------------+--+--+--+-----+-----------+------------
| | | | | | `- FS[3:0]
| | | | | `- ドメイン
| | | | `- UNK/SBZP
| | | `- FS[4]
| | `- WnR
| `- ExT
`- UNK/SBZP
**引数 [#p80ba5bb]
-unsigned int fsr
--フォールトステータスレジスタの値
**返り値 [#d2685f02]
-フォールトステータス(FS)フィールドの値
**参考 [#m91da7c0]
*実装 [#ze82ed1c]
/*
* Fault status register encodings. We steal bit 31 for our own purposes.
*/
#define FSR_LNX_PF (1 << 31)
#define FSR_WRITE (1 << 11)
#define FSR_FS4 (1 << 10)
#define FSR_FS3_0 (15)
static inline int fsr_fs(unsigned int fsr)
{
return (fsr & FSR_FS3_0) | (fsr & FSR_FS4) >> 6;
-フォルトステータスビット(4ビット)は飛び地になっているため、
IFSR[10]/DFSR[10] と IFSR[3:0]/DFSR[3:0] を連結して返す。
}
*コメント [#ce991490]