hyperlight-dev / hyperlight-dev/hyperlight

Unify surrogate/no-surrogate mapping behind a single abstraction

オープン
#1,581 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
kind/enhancement kind/refactor lifecycle/confirmed
主要言語
Rust
スター
4.7k
フォーク
208
平均マージ
1日 7時間
マージ済み PR(30日)
47

説明

## Context

PR #1578 adds a no-surrogate mode (`HYPERLIGHT_MAX_SURROGATES=0`) that uses `WHvMapGpaRange` instead of `WHvMapGpaRange2`. Currently `whp.rs` branches on `Option` to choose the mapping path.

## Proposal

Unify the surrogate and no-surrogate paths so `whp.rs` doesn't need to know or care which mode is active. Two possible approaches:

1. **Enum / trait abstraction**: Make `SurrogateProcess` an enum (or `dyn Trait`) with two variants — one backed by a real surrogate process (`WHvMapGpaRange2`) and one that maps from the host process directly (`WHvMapGpaRange`). The `NoSurrogateGuard` could be folded into the no-surrogate variant.

2. **Always use `WHvMapGpaRange2`**: Use the current process handle as the source when surrogates are disabled, eliminating the branch entirely. This needs validation — it's unclear whether `WHvMapGpaRange2` with `GetCurrentProcess()` is a supported pattern.

Either way, the mapping call would move into the surrogate module so `whp.rs` just calls a single `map(...)` method.

## Origin

Suggestion from @syntactically in [PR #1578 review](https://github.com/hyperlight-dev/hyperlight/pull/1578).

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

Start by reading the current surrogate handling in whp.rs and the surrogate module, then inspect PR #1578 and its review discussion. Define a single mapping abstraction covering both SurrogateProcess and no-surrogate mode, validate whether WHvMapGpaRange2 supports GetCurrentProcess(), and ensure whp.rs calls one map(...) method without mode-specific branching.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
rust
領域
operating-systems
issue の種類
リファクタリング
難易度
5/5
見積もり時間
1週間以上
活発さ
静か
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。