参照元†
- フォールトステータスレジスタのフォールトステータス(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
返り値†
/*
* 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] を連結して返す。
}
コメント†