From hdk @ igel.co.jp Tue Aug 20 18:30:11 2024 From: hdk @ igel.co.jp (Hideki EIRAKU) Date: Tue, 20 Aug 2024 18:30:11 +0900 (JST) Subject: [BitVisor-users:20] BitVisor 3.0 released Message-ID: <20240820.183011.321311441654980497.hdk@igel.co.jp> こんにちは。 BitVisor 3.0 のリリースをお知らせできることをうれしく思います。 https://sourceforge.net/projects/bitvisor/files/bitvisor/3.0/ BitVisor 3.0 と BitVisor 2.0 との違いは以下の通りです。 ============================================================ 大きな変更 - AArch64 support - Switch to Kconfig - Refactoring for AArch64 support - VT-d DMA remapping pass-through support - Improve UEFI code ------------------------------------------------------------ AArch64 support AArch64に対応しました。使い方についてはdocs/getting_started.mdを、実装 についてはdocs/aarch64/overview.mdを参照してください。 ------------------------------------------------------------ Switch to Kconfig make configがKconfigに切り替わりました。.configファイルにfoo=0, foo=1 形式で書かれていた従来の内容を引き継ぐには、foo=n, foo=y形式に置換する 必要があります。 従来のmake configとは異なり、Kconfigは依存関係の情報を持つことができま す。例えば、CONFIG_DISABLE_SLEEPはCONFIG_ACPI_DSDTに依存します。この情 報によって、正しくない選択を防ぐことができます。 ------------------------------------------------------------ Refactoring for AArch64 support アーキテクチャー依存部分を分離するためのリファクタリングを行いました。 ------------------------------------------------------------ VT-d DMA remapping pass-through support VT-d DMA remappingパススルーに対応しました。make configで CONFIG_DMAR_PASS_THROUGH=yにすると有効になります。有効にすると、ゲスト オペレーティングシステムがVT-dを使うことができます。VMMの領域を、RMRR に追加することで、VMMの領域に対するDMAが使えるようにします。また、パラ パススルードライバーがゲストオペレーティングシステムのDMA領域にアクセ スする時に、仮想アドレスからの変換を行います。 本機能のため、アドレス空間"as"が導入されました。"as"に関連する変更を以 下に示します: - 従来のmapmem_gphysは廃止され、代わりにアドレス空間を指定する mapmem_asが導入されました。 - パススルーの仮想マシンに対するアドレス空間として、グローバル変数 as_passvmが追加されました。 - struct vcpuには仮想マシンのアドレス空間として"as"が追加されました。 しかし、現在はパススルーの仮想マシンしかないため、as_passvmと同一で す。 - struct pci_deviceに、DMAのためのアドレス空間としてas_dmaが追加されま した。as_dmaは、本機能が有効でない場合はas_passvmと同一となり、有効 の場合はそのデバイスに対応するアドレス空間を示します。 as_dmaはDMAのためのものであることに注意してください。デバイスのレジス ターにアクセスするにはas_passvmを使用します。 ------------------------------------------------------------ Improve UEFI code - UEFI対応に使用していたEDKをEDK2に変更しました。 - UEFIアプリケーションのビルドに使用していたMinGWをClangに変更しました。 - UEFIアプリケーションのビルド用にMakefile.uefi.commonを追加しました。 ============================================================ 新しいデバイス対応 - NVMe - Marvell (Aquantia) AQC107 - Realtek RTL8168 ------------------------------------------------------------ NVMe NVMeに対応しました。vmm.driver.pciに、driver=nvmeと指定することで有効 になります。ataおよびahciと比べてより拡張性が高い実装となっています。 以下のパラメーターがあります: - storage_io: 1にすると、storage_ioが有効になります。 - ext: encryptにすると、ストレージ暗号化が有効になります。その他の拡張 を実装して追加することもできます。 - filter_msi: 1にすると、MSIフィルターが有効になります。ゲストオペレー ティングシステムがMSIを有効にしている時に、割り込みマスクがセットさ れた状態で発生した割り込みを破棄します。ゲストオペレーティングシステ ムがコントローラーリセットをして正常に起動しない場合に使用します。 また、ANS2にも対応しています。vmm.driver.pciに、driver=nvme_appleと指 定することで有効になります。上のパラメーターに加え、ans2_wrapperパラメー ターがあります。本パラメーターを1にすると、ANS2のハードウェア暗号化が 隠蔽されます。 ------------------------------------------------------------ Marvell (Aquantia) AQC107 Marvell (Aquantia) AQC107に対応しました。make configでCONFIG_NET_AQ=y とし、vmm.driver.pciに、driver=aq,virtio=1と指定することで有効になりま す。virtio-netのみの対応です。 ------------------------------------------------------------ Realtek RTL8168 Realtek GbE NICに対応しました。FreeBSDのコードを取り込んでいます。make configでCONFIG_NET_RE=yとし、vmm.driver.pciに、driver=reと指定すること で有効になります。デバイス隠蔽モード (net=ipのような) か、または、 virtio-netのみの対応です。 ============================================================ 仮想デバイス対応 - 仮想virtio-net ------------------------------------------------------------ 仮想virtio-net 仮想virtio-netデバイスに対応しました。以下のように指定することで、仮想 virtio-netデバイスがVMMのTCP/IPスタックとつながります: vmm.driver.pci_virtual="driver=virtio-net, net=ip" 既存のnetインターフェイスを流用していますが、netインターフェイスの仮想 デバイス側は使用せず、物理デバイス側が仮想マシンにつながります。そのた め、tty=1を指定してVMMログを仮想マシンに送ることもできます。 ============================================================ ネットワーク改良・機能追加 - Add WireGuard - Add WireGuard Guest OS - Add TLS - Update lwIP - Virtio 1.1 support (virtio-net) / VT-d pass-through support - Improve TCP/IP performance - bnx: add hotplugpass option ------------------------------------------------------------ Add WireGuard WireGuardに対応しました。ip/wireguard/wireguard-lwip/ディレクトリに wireguard-lwipを取り込んでいます。make configでCONFIG_WIREGUARD=yにす ると有効になります。VMMのTCP/IPスタックを使用する際、WireGuard VPNトン ネルが使用できます。詳しくはdocs/wireguard.mdを参照してください。 ------------------------------------------------------------ Add WireGuard Guest OS ゲストオペレーティングシステムの通信をWireGuard VPNトンネルに流す機能 を追加しました。既存のIPsec VPNとは異なり、TCP/IPスタックを用いていま す。そのため、VMMもトンネルを通して通信できます。詳しくは docs/wireguard_guest_os.mdを参照してください。 ------------------------------------------------------------ Add TLS TLSに対応しました。ip/mbedtls/mbedtls-2.28.6/ディレクトリにMbed TLSを 取り込んでいます。make configでCONFIG_TLS=yにすると有効になります。詳 しくはdocs/Mbed-TLS.mdを参照してください。 ------------------------------------------------------------ Update lwIP lwIPを2.1.3にアップデートしました。 ------------------------------------------------------------ Virtio 1.1 support (virtio-net) / VT-d pass-through support virtio-netについて、virtio 1.1に対応しました。VT-d DMA remappingパスス ルーのため、virtio 1.1で定義されているVIRTIO_F_ACCESS_PLATFORMに対応し ました。 ------------------------------------------------------------ Improve TCP/IP performance VMMでTCP/IPスタックを使用し、ゲストオペレーティングシステムの通信がパ ススルーとなるnet=ippassについて、不必要な受信パケットをフィルタリング するnet=ippassfilterとnet=ippassfilter2が追加されました。VMMおよびゲス トオペレーティングシステムのそれぞれで不必要と考えられるパケットを受信 直後に破棄することで、それぞれのTCP/IPスタックの負荷を減らします。 net=ippassfilterは完全にフィルタリングし、net=ippassfilter2はゲストオ ペレーティングシステムのフィルタリングが100パケット連続にならないよう にします。net=ippassfilter2はLinuxのnobody caredエラーを回避するために 追加されました。 その他の改善: - virtio-net: try to submit packets in a batch to the device driver - ip: avoid using ntohs() in ip_main_input() - ip: reduce lwip_htons and lwip_htonl overhead - ip: reduce number of alloc/free/memcpy when a packet has been received ------------------------------------------------------------ bnx: add hotplugpass option bnx driverにhotplugpassオプションが追加されました。hotplugpass=1が指定 されると、VMM起動後にホットプラグされたbnxデバイスはパススルーになりま す。 ============================================================ コア改良・機能追加 - dres_reg - VT-x unsafe nested virtualization - Nested Virtualizationの改良 - VT-x性能改善 - 大容量メモリー・多数CPUコア対応 - Improve heap allocation - Improve process features - 新CPU対応 - New machines support - QEMU+Linux KVM対応 - Improve handling INIT - Improve debug features - Improve panic routine - Improve string routines - Introduce MAPMEM_CANFAIL and MAPMEM_UC flag - PKRU state pass-through - Conceal SMX ------------------------------------------------------------ dres_reg デバイスレジスターのアクセスと、デバイスレジスターアクセスのトラップに 関する処理を共通化するdres_regを導入しました。 ------------------------------------------------------------ VT-x unsafe nested virtualization VT-xのunsafe nested virtualizationに対応しました。 ------------------------------------------------------------ Nested Virtualizationの改良 Partially safe modeに対応しました。Partially safe modeでは、RAMをパス スルーとした仮想マシンを用いた攻撃を防止します。VT-xでは、EPTのシャドー を作成して、SVMでは、RVIを隠蔽してVMMのRVIを適用することにより実現しま す。 詳しくはdocs/nested_virtualization.mdを参照してください。 ------------------------------------------------------------ VT-x性能改善 - INVEPT命令の使い方を改善し、必要な時のみ使うようにしました。 - Unrestricted guestが有効な場合、CR0のPEビットおよびCR4のPGEビットの 変更のVM exitをしないようにしました。 - PCIDに対応しました。 ------------------------------------------------------------ 大容量メモリー・多数CPUコア対応 近年のRAM容量増加とCPUコア数増加に伴うVMMのメモリ不足問題に対応するた め、以下の変更を行いました: - EPTおよびRVIで、1GiBページが使用可能であれば使用するようにしました。 - EPTおよびRVIのために、各論理プロセッサごとに1024ページを確保していた のを大きく削減し、16ページから始め、必要に応じて256ページまで増やす ようにしました。 さらに、次項のヒープアロケーションの改善も、CPUコア数増加に対応するも のとなっています。 ------------------------------------------------------------ Improve heap allocation ヒープアロケーションを改善し、使われていない領域を減らしました。例えば、 VMMが、x86 64ビット用のstruct vcpu、0x80630バイトをアロケートする時、 従来は内部で0x100000バイトをアロケートしていましたが、現在は0x81000バ イトとなります。struct vcpuは論理プロセッサごとにアロケートされる構造 体であるため、この0x7f000バイトの差は、コア数が多いほど大きくなります。 さらに、ページサイズより小さなアロケーションにおいて、線形探索を避ける ことにより、性能を改善しました。128バイトから2048バイトまでの"small"ア ロケーションは、struct pageに追加された最大32ビットのビットマップとリ ストを使用して管理されます。16, 32および64バイトの"tiny"アロケーション は、32倍のサイズの"small"アロケーションに、追加の32ビットのビットマッ プとリストを使用して管理されます。 ------------------------------------------------------------ Improve process features プロセス機能を以下のように改善しました。 - プロセスの読み取り専用セグメントが共有マップになりました。大きなtext セクションを持つプロセスを実行した時に、textセクションがヒープにコピー されないため、ヒープの使用量が削減されます。 - 名前無しのmsgregisterとmsgsenddescに対応しました。msgregister()に名 前NULLを指定して、名前無しの関数ポインターを登録できます。返されたディ スクリプターにMSGSENDDESC_MYFUNCフラグをORしてmsgsenddesc()を呼び出 すことで、他のプロセスへ転送できます。従来は名前を使用してどのプロセ スからもmsgopen()できていましたが、名前無しの関数ポインターは msgopen()ができないため、特定のプロセスからのみ呼び出し可能なコール バックに使用できます。 ------------------------------------------------------------ 新CPU対応 新しいCPUに対応しました。 - LA57 (5-level paging) を隠蔽するようにしました。 - WAITPKG (TPAUSE, UMONITORおよびUMWAIT命令) に対応しました。 - AVX512に対応しました。 - Memory Protection Extension (MPX)のパススルーに対応しました。 - Hardware Feedback Interfaceに対応しました。 - Processor Traceに対応しました。vmm.allow_ptにより、パススルーにする か隠蔽にするかを以下のように選択します: - 0: Processor Traceは隠蔽されます。 - 1: Processor Traceはアドレス変換ありのパススルーとなるか、または、 CPUがアドレス変換に対応していない場合は隠蔽されます。 - 2: Processor Traceはアドレス変換なしのパススルーとなります。 ------------------------------------------------------------ New machines support 新しいマシンで発生する問題を修正しました。 - 新しいMacファームウェアとmacOSで発生する問題を修正しました。 - NVMeのdisconnectionが失敗しないようにする回避策が追加されました。 - ファームウェアが特権レベル3を使用できるようにしました。 - ファームウェアがCR4.SMEP=1 and EFER.NXE=1を使っている場合にも動作 するようにしました。 - virtio-netのVIRTIO_NET_F_CTRL_VQとVIRTIO_NET_F_CTRL_RXに対応しまし た。 - 新しい富士通PCファームウェアで発生する問題を修正しました。 - InstallConfigurationTableが使用された場合にもACPIのテーブルの変更 が適用されるようにしました。 ------------------------------------------------------------ QEMU+Linux KVM対応 BitVisorをQEMU+Linux KVM上で動作させるための修正: - CPUIDの0x40000000から0x4FFFFFFFの範囲を隠蔽するようにしました。この 範囲はLinux KVMなどのVMMで使用されており、パススルーとしているとそれ らのVMMの機能が使用され、BitVisorは対応していないためエラーが発生す る場合がありました。 - Blocking by STIビットがセットされた状態で外部割り込みによるVM exitが 発生するとpanicしていた問題を修正しました。 - DMAを使用せずATAのストレージ読み取りを行うBIOSにおいて、INS命令のメ モリ書き込みでVM exitが発生することによるデータ破損を避けるため、RAM の先頭1MiBを最初にマップするようにしました。 - Linux KVMのAPICVが有効だとlocal APICのパススルーにより問題が発生する ことがあります。その問題はvmm.localapic_intercept=1とすることで回避 できるようにしました。 QEMU+Linux KVMがBIOS環境の場合、CONFIG_TCG_BIOS=yだとQEMUが異常終了し てしまうことがあります。 ------------------------------------------------------------ Improve handling INIT - VT-x環境におけるwait-for-SIPIエミュレーションに対応: wait-for-SIPI stateに対応していないプロセッサ、または、vmm.localapic_intercept=1で 有効化されます。 - ゲストオペレーティングシステムから送られたSIPIが失われる問題の回避策: INITによるVM exitからなるべく早くwait-for-SIPIに遷移するようにしまし た。 - Wait-for-SIPIとpending割り込みのpanicの修正: Pending割り込みが残った ままwait-for-SIPI stateになった時のpanicを修正しました。 - Wait-for-SIPIとNMIの問題の修正: Wait-for-SIPIのエミュレーションの間の NMIを破棄していなかった問題を修正しました。 - VMRUN命令直前のINIT処理の修正: VMRUN命令実行直前にINITがNMIと同様に チェックされるようにしました。 ------------------------------------------------------------ Improve debug features - debugコマンドのdump memoryコマンドに長さオプションを追加しました。 - CONFIG_DEBUG_SERIALを追加しました。x86ビルドでは、これをyにすると、 仮想シリアルデバイスがI/Oポート0x400に追加されます。Linuxのパラメー ターに "earlyprintk=serial,0x400,keep" を指定することで、Linuxの early console出力をVMMのログとして得られます。 - デバッグ用telnetサーバーを追加しました。vmm.telnet_dbgsh=1にすると、 TCP/IPスタックを利用して、telnetポートでdbgshにアクセスできます。 Panicした時は、TCP/IPスタックとネットワークデバイスドライバーの動作 に支障がない場合に限りアクセスできます。vmm.telnet_dbgsh=1の場合、 panic時のキーボードやシリアルポートによるシェルアクセスは無効になり ます。 ------------------------------------------------------------ Improve panic routine - プロセッサ数が6より多い場合でもレジスターダンプをすべて出力するよう にしました。 - panic処理中にpanicが発生した時に、無限ループを回避しながらできるだけ 情報を出力するようにしました。 ------------------------------------------------------------ Improve string routines - 性能を改善しました。 - 必要のないコードがオブジェクトに残らないようにしました。 ------------------------------------------------------------ Introduce MAPMEM_CANFAIL and MAPMEM_UC flag mapmem_hphysおよびmapmem_as関数のフラグにMAPMEM_CANFAILとMAPMEM_UCが追 加されました。 MAPMEM_CANFAILフラグがあると、マップに失敗した時にNULLを返します。この フラグがないと、マップに失敗した時にpanicします。ドライバーでNULLチェッ クがされていない部分が多かったことと、NULLの時に動作を継続できる処理が coreの一部のみだったため、このフラグを導入しました。 MAPMEM_UCフラグは、uncacheableを意味します。MAPMEM_PCD, MAPMEM_PWTおよ びMAPMEM_PATはx86専用ですが、MAPMEM_UCはx86とAArch64のどちらでも使用で きます。 ------------------------------------------------------------ PKRU state pass-through PKRU stateをパススルーとしました。これはnested virtualizationを使う BitVisor上でVMware Workstationが動作しない問題を回避します。 ------------------------------------------------------------ Conceal SMX SMXを隠蔽しました。これはWindows 10 Fall Creators UpdateにおいてGETSEC VM exitを原因とするpanicを回避します。 ============================================================ その他の機能追加 - SQLite - Add UEFI Graphics Output Protocol VGA driver - シンプルな追加機能 (コード以外) - シンプルな追加機能 (コード) ------------------------------------------------------------ SQLite SQLite RDBMSが追加されました。process/sqlite/sqlite3.cにamalgamation版 のSQLiteを取り込んでいます。make configでCONFIG_SQLITE=yにすると有効に なります。process/sqlite/ディレクトリ上の保護ドメインで使用することが できます。sqliteexampleという名前の使用例が入っています。有効にすると、 dbgshからsqliteexampleを実行して試すことができます。現在のところ64ビッ ト環境のみの対応です。 ------------------------------------------------------------ Add UEFI Graphics Output Protocol VGA driver UEFI Graphics Output Protocol VGA driverが追加されました。make config でCONFIG_VGA_UEFI=yにすると有効になります。CONFIG_TTY_VGAと組み合わせ て画面へのログ出力に使用できます。その他の画面出力に使用するコードを追 加できます。ただし、UEFIファームウェアのGraphics Output Protocolがフレー ムバッファーの情報を提供している場合に限り動作します。また、ゲストオペ レーティングシステムのグラフィックスデバイスドライバーのロード後は正し く表示されない場合があります。 ------------------------------------------------------------ シンプルな追加機能 (コード以外) 開発および使用に便利なファイルおよび機能が追加されました: - .clang-formatファイルが追加されました。clang-formatバージョン15以降 で使用できます。コード全体に適用するのではなく、追加部分に適用し、適 用後に必要に応じて手で修正を加える使い方が想定されています。 - compile_commands.jsonファイルを生成するMakefileルールが追加されまし た。 - ドキュメントを置くためのdocs/ディレクトリが追加されました。いくつか はすでにドキュメントが追加されています。 ------------------------------------------------------------ シンプルな追加機能 (コード) 以下の関数およびマクロが追加されました: - MAX, MINマクロが追加されました。ストレージ実装にあったmin関数は削除 されました。 - 乱数を得るrandom_num_hw関数とrandom_num_sw関数が追加されました。 - クイックソートを行うqsort関数が追加されました。 - Unix epoch timeを得るget_epoch_time関数が追加されました。起動時に取 得した時刻とget_time関数の返り値から計算するので、正確ではありません。 ============================================================ 様々な修正 virtio-netの様々な問題を修正しました: - virtio_net: fix buffer overflow in case of sending too large packet - virtio_net: add MAPMEM_WRITE to mapmem_as() in do_net_ctrl() for correctness - virtio_net: restore unconditional vnet->intr_clear() behavior - virtio_net: make virtio_net_msix() fill data properly for read-only address - virtio_net: avoid hardcoding queue size - virtio_net: expose PCI_COMMAND_MEMENABLE - virtio_net: use MAPMEM_WRITE when mapping buffer in do_net_send() - virtio_net: do not clear legacy interrupt when triggering MSI - virtio_net: suppress interrupts while receive ring buffer is full bnx driverの様々な問題を修正しました: - bnx: rework on bnx_reset() - bnx: clean up bnx_intr_disable()/bnx_intr_enable() - bnx: use MAC address provided by firmware if available - bnx: clear status word before proceeding to read producer/consumer index - bnx: refer producer/consumer indexes directly instead of copying them - bnx: receive all packets in the buffer at once - bnx: fix unexpected delay of received packets - bnx: ignore firmware's MAC address for Thunderbolt to Ethernet devices - bnx: replace 0x0204 offset with BNXREG_HMBOX_INTR_CLR pro1000 driverの様々な問題を修正しました: - pro1000: improve TX initialization for QEMU e1000e - pro1000: set ITR to improve RX throughput on old models - pro1000: add 8086:15e3 I219-LM - pro1000: add 8086:156f I219-LM - pro1000: add 8086:15be I219-V - pro1000: add 8086:15bd I219-LM - pro1000: map registers with MAPMEM_UC as well - pro1000: send only if the link is up - pro1000: ICS register is write-only - pro1000: take care of 64-bit address in write_mydesc() - pro1000: clean up magic numbers - pro1000: generate virtio interrupts properly on recent Linux guest xhci driverの様々な問題を修正しました: - drivers/usb/xhci: force the compiler to access registers with the correct size - drivers/usb/xhci: fix "ERDP out of bounds" error when running on QEMU - xhci: always write host value to the controller when guest writes to ERDP - xhci: introduce host controller states and check them - xhci: read capability registers using 32-bit aligned access - xhci: trigger a panic on data inconsistency in the driver - xhci: update VMM state upon detecting a controller error - xhci: optimize struct xhci_guest_data - xhci: release guest's ERST data just before changing the controller state to RUNNING - xhci: reallocate the VMM's event ring if the size of the ring changes - xhci: initialize the event ring and related data just before ERSTBA writing - xhci: process the current state of the event ring properly - xhci: allow variable size access to the capability registers - xhci: switch to a big lock during xHCI register access - xhci: remove "state_saved" member and panic when CRS bit is set - xhci: rename "xhci_hc_reset()" and call it at the proper time - xhci: support UEFI xHCI driver - xhci: xHCI Local Memory Capability reports size in 1KB block - xhci: rename 'offset' to 'field_offset' for naming consistency - xhci: support USB_HOOK_DISCARD プロセスの様々な問題を修正しました: - process: msgsenddesc is only allowed with desc returned by newprocess - process: add some sanity checks of system call arguments - msg, process: copy strings until NUL - process: check array index limit - Makefile: strip process elf files - process: clear TF on syscall - process: disable syscall/sysret by default TCP/IPスタックのechoクライアントの問題を修正しました: - ip/echoctl: move the assignment of 'echo_client_pcb' into connected - ip/echoctl: fix the memory leaking issue in echo-client - ip/echoctl: add an optional parameter for client connect to assign netif - ip/echoctl: recycle the pcb after disconnected from remote server boot/uefi-loader-loginの問題を修正しました: - boot/uefi-loader-login: extend maximum module2.bin size to 1MiB - boot/uefi-loader-login: print error when module2.bin is too large coreの様々な問題を修正しました: - vmmcall_boot, thread: make vmmcall_boot_thread run on CPU0 to avoid errors - main: fix panic when booting with minios - entry: clear %rbp before calling vmm_main - cpuid_pass: apply correct value to OSXSAVE and PKE - svm: conceal SVM-Lock feature - svm: check unsafe_nested_virtualization in svm_msr.c - sync all processors when resume from suspend-to-RAM - cpu_interpreter: fix rep string behavior in case of exception or IOACT_RERUN - cpu_interpreter: fix movabs instruction with 64bit offset support - xsetbv_pass: fix panic if an exception occurs during xsetbv - spt: remove incorrect fast path - vt, svm: fix task switch updating instruction pointer properly - vt: clear XSS-exiting bitmap properly - msr_pass: workaround for processor stall during microcode update - msr_pass: workaround for operating system panic during microcode update - nmi: set %gs in the #NMI handler - nmi: refactor NMI handler - vt_main: use NMI-window exiting instead of skipping NMI check if other event injection exists - vt, nmi: handle NMI around vmlaunch/vmresume properly - vt_main: handle multiple NMIs properly - svm_main: handle NMI better if other event injection exists when NMI comes - svm: handle NMI around vmrun properly - svm_main: handle multiple NMIs properly - vt_main: do not clear first flag in NMI case - vt, svm, cpu_interpreter: handle unblocking NMIs by IRET instruction properly - vt, svm: initialize debug registers in vmctl.reset() - vt: clear states in vt_reset() - svm, vt: reset LDTR, TR, GDTR and IDTR properly - msr_pass: handle IA32_TSC_ADJUST MSR properly - mm: unlock mapmem_lock when mapmem fails - mm: increase mapmem space to avoid panic in pci_init.c on 32bit environment - mm: flush TLBs properly in the unmap_user_area() function - ap: add eoi function - ap: print AP message after loading segment and interrupt descriptor tables - ap: map local APIC registers on start instead of on every use - acpi: look at another RSDT if UEFI firmware provides ACPIv1 table at different address from ACPIv2 table - acpi: disable VT-d by default - acpi: check RESET_REG_SUP bit before reading RESET_REG - acpi: check whether DSDT address is available before using - calluefi: CR4.VMXE=0 for a VM - uefi: check NULL pointer at the end of boot_options array - time: initialize timediff properly for APs on UEFI environment - time: update timediff properly on wakeup - time: use clock information in CPUID if available 些細な問題や記述を修正しました: - cpu_interpreter: fix default segment - uefi: fix trivial sizeof incorrect variable name - bnx: fix some trivial log mistakes in bnx_rx_ring_set() and bnx_tx_ring_set() - constants: add comment "32-Bit Read-Only Data Fields" for VMCS definitions - access EFER with 64bit width - entry: minor fixes in uefi64_entry - vt: check whether 2MiB page is supported for EPT - cache: use proper constant name instead of + 1 - ieee1394: remove -DIEEE1394_CONCEALER and compile the driver if necessary - move size_t definition from share/vmm_types.h to core/types.h - boot: update login-simple to use config.h and vmm_types.h in include/share - bitvisor.lds: replace spaces with tabs for indentation - mm: use mapmem_hphys/mapmem_gphys instead of mapmem function - crypto: fix LONG_MIN, LONG_MAX and ULONG_MAX - ipchecksum: treat zero as described in RFC 1071 コンパイル・リンク時の警告を減らしました: - Makefile: add -Wno-address-of-packed-member - boot/login-simple: add -static option to suppress warnings - tty: fix unused variable warnings when building with CONFIG_TTY_SERIAL=1 pciのルーチンを改良しました: - pci_core: introduce pci_enable_device() - pci: improve initialization loop to avoid unexpected result - pci: introduce pci_find_cap_offset() - pci: PCI PMIO is only relevant to x86 - pci: rename pci_save_config_addr() to pci_pmio_save_config_addr() - pci: initial support for multiple PCI segments - pci: avoid hard-coding maximum number of virtual devices - pci: don't use memcpy() for accessing registers 不要なコードを削除しました: - x86: remove unused code related to the legacy PIC - Makefile.config: remove SELECT_AES_GLADMAN - Makefile.config: remove SPINLOCK_DEBUG - vt_ept, svm_np, mm, gmm_pass, Makefile: remove MAP_UEFI_MMIO and related funcs - gmm_pass: make some functions static and remove unnecessary header - uhci, ehci: remove unused variables - core: remove vpn_ve code - driver/core: remove unneeded header 新しいバージョンのコンパイラーとリンカーに対応しました: - fix "cannot represent relocation type BFD_RELOC_X86_64_32S" error when compiling 32bit - cpu_interpreter: 32bit compilation error workaround - Makefile: add -Wa,--noexecstack option その他の改良を行いました: - LICENSE: remove unnecessary running number - uhci, ehci, xhci: disconnection process to avoid bitvisor and firmware conflicts - timer: clean up timer_thread() - tools/log: newer Linux support - storage: reorganize storage-related files - drivers: ensure drivers can access devices by calling pci_enable_device() 楽しんで下さい! -- Hideki EIRAKU