*参照元 [#zc06b65e] #backlinks *説明 [#ic6124fa] -パス: [[linux-2.6.33/]] -フォールトステータスレジスタのフォールトステータス(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]