[BitVisor-devel:43] BitVisor 1.4 released
Hideki EIRAKU
hdk @ igel.co.jp
2014年 5月 15日 (木) 10:47:49 JST
こんにちは。
BitVisor 1.4 のリリースをお知らせできることをうれしく思います。
http://sourceforge.net/projects/bitvisor/files/
BitVisor 1.4 と BitVisor 1.3 との違いは以下の通りです。
1. UEFI 対応
UEFI に対応した。ただし、以下のような制約がある。
- 32 ビットの UEFI 環境未対応
- Login-simple などの認証プログラム未対応
- デバイスドライバーの動作未確認
- TCG BIOS 呼び出し未対応
UEFI で起動するには、まず、boot/uefi-loader/ ディレクトリに含まれる
プログラム (bitvisor.elf を読み込む UEFI アプリケーション) をビルド
する。次に、生成されたバイナリ (loadvmm.efi) と bitvisor.elf を
UEFI からアクセスできるファイルシステムの同一のディレクトリに置く。
そして、EFI Shell または UEFI ファームウェアの機能を用いて OS のロー
ダーの前に loadvmm.efi が実行されるようにする。
2. バグ fix と機能改善
- Core
- bss section を data section に含めないようにすることで、バ
イナリが小さくなるようにした。
- NMI メッセージを出力しないようにした。
- acpi: RSDT と XSDT でそれぞれ異なる FACP および FACS が存在
する PC での Suspend-to-RAM (S3) に対応した。いくつかの
AMD PC においてこの修正が必要なことが確認されている。
- acpi: DSDT に加えて SSDT も解釈するようにした。
- acpi: ゲスト OS が IOMMU を使用できないようにするため、DMAR
をクリアするようにした。
- acpi: 一部 BIOS の持つ ACPI DSDT の解釈に失敗する問題の
回避策を実装した。この修正は最近の Intel NUC PC において
必要である。
- ap: INIT-SIPI-SIPI をプロセッサーマニュアルに従ってエッジト
リガーとした。
- cache: Suspend-to-RAM (S3) から復帰した時に MTRR を再設定す
るようにした。以前は、4GiB RAM を搭載した Lenovo ThinkPad
X200 において、復帰後キャッシュが適切に行われなくなっていた。
- cache: CONFIG_CPU_MMU_SPT_DISABLE=1 の時にはキャッシュ設定
がパススルーになるようにした。
- cache: AMD-V 環境では、UEFI ファームウェアが使用する拡張属
性に対応するため、fixed range MTRR がパススルーになるように
した。
- cpuid: VMM のページング実装において未対応の機能 PCID を隠蔽
するようにした。
- cpuid: もし VMM が 32bit ならば 64bit を隠蔽するようにした。
- exint_pass: config.vmm.no_intr_intercept=0 の場合のみ外部割
り込みを横取りするようにした。
- main: VMM が起動された時に Shift キーが押されていると
dbgsh を実行する機能を、CONFIG_SHIFT_KEY_DEBUG によって有効
にしたり無効にしたりできるようにした。
- mm: ゲスト OS が VMM 領域の大部分に直接アクセスできていたバ
グを修正した。
- mm: 物理アドレスによるメモリアクセスを高速化した。
- mm: CR4.PGE を変更し適切に TLB フラッシュを行うようにした。
- mmio: アドレスマッチングのバグを修正した。
- mmio: アドレスマッチングを高速化した。
- process: cr3 が指すメモリを解放することがあるバグを修正した。
- reboot: config.vmm.auto_reboot=1 であれば、再起動時にメッセー
ジを表示せずにすぐに再起動するようにした。
- svm: vmload 命令が実行されてから vmrun 命令が実行されるまで
の間に NMI が発生すると、不正なメモリアクセスが行われるバグ
を修正した。
- time: get_cpu_time() のスピンロックをなくした。
- time: get_cpu_time() が Suspend-to-RAM の後不正な値を返す
バグを修正した。
- time: config.vmm.ignore_tsc_invariant=0 かつ TSC invariant
であれば ACPI PM Timer よりも TSC を優先するようにした。
- timer: タイマースレッドを必要になった時に開始するようにした。
- vmmcall: 指定された番号が未登録の場合に NULL ポインターへア
クセスするバグを修正した。
- vt: EFER のセーブ/ロード機能があれば使うようにした。これに
よって、VMware 製品の仮想マシン上で VMM が動作するようになっ
た。
- vt: VMCS の中の 64 ビットフィールドに対するアクセスを関数に
まとめた。
- vt: CONFIG_CPU_MMU_SPT_DISABLE=1 で、かつ、ゲスト OS がペー
ジングをオフにしている時、EPT と unrestricted guest が利用
可能であれば使うようにした。
- vt, cpuid: XCR0.AVX に対応した。
- PCI
- Memory-mapped configuration に対応した。
- ATA
- WRITE DMA FUA EXT コマンドに対応した。
- AHCI driver: 最初に PxCI レジスターへの書き込みが行われると
panic する問題を修正した。
- AHCI driver: 4MiB 転送に対応した。
- NIC
- PRO/1000 driver: I210, I217-V, I350 等の新しいデバイスに
対応した。
- PRO/1000 driver: Suspend-to-RAM の後に通信できなくなるバグ
を修正した。
- PRO/1000 driver: VPN モジュールの初期化失敗後の NULL
ポインターアクセスを修正した。
- USB
- EHCI driver: qTD のシャドウ生成中にゲスト OS が qTD を変更
すると、VMM がシャドウを更新しなくなることがあるバグを修正
した。
- EHCI driver: Current qTD pointer を正しく更新するように
した。
- EHCI driver: 64-bit addressing capability を隠蔽するよう
にした。
- EHCI driver: レジスターアクセスのバッファー長をチェックするよう
にした。
- Crypto
- OpenSSL: バージョン 1.0.0l に更新した。
- VPN
- Main mode に対応した (Scentific Technical Center
"Altras" の Mikael S さんからのコントリビュート)。
- Boot
- boot/loader: インストール時に bss section のサイズの分のス
ペースを確保するようにした。
- boot/loader: bitvisor.elf 側に 16 ビットコードを含めること
により、bootloader をよりシンプルにした。
- Tools
- common: call_vmm.h のマクロが展開されるアドレスによって正し
く動作しなかったバグを修正した。
- common: 64 ビットバイナリが正しく動作しなかった問題を修正し
た。
- iccard: エラー処理が機能しなかった問題を修正した。
- iccard: AMD-V 環境でプログラムが正しく動作しなかった問題を
修正した。
- dbgsh: NUL の入出力に対応した。
- dbgsh: exit コマンドで終了するようにした。
- dbgsh: config.vmm.dbgsh=0 の時、エラーメッセージを出力する
ようにした。
- dbgsh: VMM 呼び出しに失敗した時にエラーメッセージを出力する
ようにした。
- その他
- 使われていないファイルを削除した。
- MacPorts に含まれる x86_64-elf-gcc を使用すると発生する
コンパイルエラーを修正した。
- インラインアセンブリの不適切な memory operand constraint を
修正した。
楽しんで下さい!
--
Hideki EIRAKU <hdk @ igel.co.jp>
BitVisor-devel メーリングリストの案内