5.2.2 ハイパーバイザーTrap移譲レジスタ (hedeleg / hideleg)
hedeleg
とhideleg
はHSXLENビットの読み書き可能なレジスタで、図5.3と図5.4にそれぞれレジスタのフォーマットを示す。デフォルトでは、すべての特権レベルのすべてのトラップはM-Modeで処理されるが、通常はmedeleg
とmideleg
CSRレジスタを使用しtえいくつかのトラップをHS-Modeに移譲する。hedeleg
とhideleg
CSRはこれらのトラップをさらにVS-Modeゲストに移譲することができる; これらのレジスタのレイアウトはmedeleg
とmideleg
のレイアウトと同一である。
ビット | 属性 | 該当する例外 |
---|---|---|
0 | (本文を参照のこと) | 命令アドレスミスアライン |
1 | 書き込み可能 | 命令アクセスフォルト |
2 | 書き込み可能 | 不正命令例外 |
3 | 書き込み可能 | ブレークポイント |
4 | 書き込み可能 | ロードアドレスミスアライン |
5 | 書き込み可能 | ロードアクセスフォルト |
6 | 書き込み可能 | ストア/AMOアドレスミスアライン |
7 | 書き込み可能 | ストア/AMOアクセスフォルト |
8 | 書き込み可能 | Environment Call from U-Mode or VU-Mode |
9 | 読み込み専用 0 | Environment Call from HS-Mode |
11 | 読み込み専用 0 | Environment Call from M-Mode |
12 | 書き込み可能 | 命令ページフォルト |
13 | 書き込み可能 | ロードページフォルト |
15 | 書き込み可能 | ストア/AMOページフォルト |
20 | 読み込み専用 0 | 命令ゲストページフォルト |
21 | 読み込み専用 0 | ロードゲストページフォルト |
22 | 読み込み専用 0 | 仮想命令 |
23 | 読み込み専用 0 | ストア/AMOゲストページフォルト |
medeleg
を使用してHS-Modeに移譲される同期トラップは、V=1の場合にhedeleg
ビットがセットされている場合にさらにVS-Modeまで移譲される。hedeleg
は書き込み可能なビットと、0に固定されているビットがある。hedeleg
の多くのビットは書き込み可能もしくはゼロ固定であり、表5.2それらをまとめている。命令アドレスミスアラインに相当するビット0についてはIALIGN=32の場合にのみ書き込み可能としなければならない。
hedeleg
の特定のビットが書き込み可能であることを要求することにより、実装のバリエーションを処理するためのハイパーバイザーの負担が軽減される。
mideleg
を使用してHS-Modeに移譲される例外は、hideleg
のビットが設定されている場合にさらにVS-Modeまで移譲される。hideleg
の15:0ビットのうち10ビット、6ビット、2ビットのみ書き込み可能である(これらは標準VSレベル割り込みに相当する)、それ以外のビットはゼロに固定されている。
仮想スーパバイザ―外部例外(要因コード10)がVS-Modeに乗されると、例外は自動的にVS-Modeのためにスーパーバイザー外部割込み(要因コード9)に移譲される。例外要因コードは同時にvscause
にも書き込まれる。同様に、仮想スーパーバイザータイマー割り込み(要因コード6)はVS-Modeにてスーパーバイザータイマー割り込み(要因コード5)に変換され、仮想スーパーバイザーソフトウェア割り込み(要因コード2)はVS-Modeにてスーパーバイザーソフトウェア割り込み(要因コード1)に変換される。同様の変換はプラットフォームかカスタム割り込み要因(要因コード16以上)にも適用される可能性がある。
5.2.3 ハイパーバイザー割り込みレジスタ (hvip, hip, hie)
hvip
はHSXELNビットの読み書き可能なレジスタであり、ハイパーバイザーが該当する仮想割り込みをVS-Modeのために書き込むことができるかどうかを示す。hideleg
における書き込み可能なビットは、hvip
においても同様に書き込み可能であり、そうでないビットは同様に0に固定されている。
hvip
の標準的なビット位置(ビット15:0)のフォーマットを図5.6に示す。hvip
のVSEIP=1に設定することにより、VSレベルの外部割込みがアサートされる; VSTIPを設定することにより、VSレベルのタイマー割り込みがアサートされる; VSSIP=1に設定することによりVSレベルのソフトウェア割り込みがアサートされる。
hip
およびhie
レジスタはHSXELNビットの読み書き可能なレジスタであり、HSレベルのsip
およびsie
レジスタをそれぞれ補完するものである。hip
レジスタはVSレベルおよびハイパーバイザー固有の割り込みがペンディングしていることを示すレジスタであり、一方でhie
は割り込みが許可されているかどうかを示している。sip
とsie
は、割り込みi
はhip
とhie
の同じビットi
が設定され、かつスーパーバイザレベルの割り込みがグローバルに有効化されている場合にはHS-Modeでトラップされる。
sie
における書き込み可能なビットは、hip
およびhie
においてゼロに固定されている。したがって、sie
およびhie
のゼロでないビットは常に排他的であり、sip
およびhip
も同様である。
hip
およびhie
の有効なビットはHSレベルのsip
およびsie
には配置することができない。なぜならば、そのようにするとソフトウェアがハイパーバイザー拡張が実装されていないハードウェアにおいてハイパーバイザーをソフトウェアがエミュレートすることができないからである。
sie
のi
ビットがゼロに固定されている場合、hip
の同じビットは書き込み可能であるか、読み込み専用である。もしhip
のビットi
が書き込み可能である場合、当該ビットに0を書き込むことにより、そのペンディングビットをクリアすることができる。もし割り込みi
がhip
のビットを設定することができるものの、hip
の当該ビットが読み込み専用である場合、hvip
の当該ビットをクリアするか、Execution Environmentコールを含む割り込みペンディングをクリアするためのいくつかのメカニズムを提供することが必要である。
hip
においてペンディングすることのできるビットは、hie
においても同じビットは書き込むことができる。hie
の書き込みできないビットはゼロに固定されている。
hip.SGEIP
およびhip.SGEIE
はスーパーバイザーレベル(HSレベル)のゲスト外部割込み向けの割り込みペンディングビットおよび割り込み許可ビットである。SGEIPはhip
においては読み込み専用で、hgeip
CSRおよびhgeie
CSRの任意のビットがゼロでない場合の論理積が1である場合にのみ1が設定される。
hip.SSEIP
およびhie.VSEIE
はVSレベルでの外部割込み向けの割り込みペンディングビットおよび割り込み許可ビットである。VSEIPはhip
において読み込み専用であり、以下の割り込み要因の論理ORである:
hvip.VSEIP
ビットhstatus.VGEIN
により選択されたhgeip
ビット; および- VSレベルで指定される任意のプラッタフォーム独自の外部割込み信号
hip.VSTIP
およびhie.VSTIE
ビットはVSレベルのタイマー割り込みの割り込みペンディングビットおよび割り込み許可ビットである。VSTIPはhip
において読み込み専用であり、hvip
の論理ORである。VSTIPはhip
において読み込み専用であり、hvip
の論理ORである。VSTIPおよび他の任意のプラットフォーム固有のタイマー割り込み信号はVSレベルに送信される。
hip.VSSIP
およびhie.VSSIE
ビットはVSレベルのソフトウェア割込みの割り込みペンディングビットおよび割り込み許可ビットである。hip
のVSSIPビットはhvip
の当該ビットの(書き込み可能な)エイリアスである。
HSモードにおける複数同時の割り込みが発生した場合、以下の降順の優先度によって処理される:SEI, SSI, STI, SGEI, VSEI, VSSI, VSTI。