Skip to content

Unify surrogate/no-surrogate mapping behind a single abstraction #1581

Open

Description

@danbugs

Context

PR #1578 adds a no-surrogate mode (HYPERLIGHT_MAX_SURROGATES=0) that uses WHvMapGpaRange instead of WHvMapGpaRange2. Currently whp.rs branches on Option<SurrogateProcess> 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.

Activity

  1. added
    kind/enhancementFor PRs adding features, improving functionality, docs, tests, etc.
    kind/refactorFor PRs that restructure or remove code without adding new functionality.
    on Jun 26, 2026
  2. added
    lifecycle/confirmedBug is verified or proposal seems reasonable
    and removed on Jun 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/enhancementFor PRs adding features, improving functionality, docs, tests, etc.kind/refactorFor PRs that restructure or remove code without adding new functionality.lifecycle/confirmedBug is verified or proposal seems reasonable

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions