Skip to content

fix(vmbus_relay): enable interrupt relay by default for message redirection#3747

Open
moor-coding wants to merge 1 commit into
microsoft:mainfrom
moor-coding:fix-vmbus-relay-interrupt-forwarding
Open

fix(vmbus_relay): enable interrupt relay by default for message redirection#3747
moor-coding wants to merge 1 commit into
microsoft:mainfrom
moor-coding:fix-vmbus-relay-interrupt-forwarding

Conversation

@moor-coding

@moor-coding moor-coding commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

When VMBus message redirection is active, host-to-guest interrupts target VTL2 instead of VTL0. The relay must forward these interrupts to VTL0, but use_interrupt_relay defaulted to false and was only set to true when the guest sent a ModifyConnection with use_interrupt_page=true.

Modern guests (VMBus Copper version) negotiate with all feature flags false, so the interrupt page is never set, leaving relay channels without interrupt forwarding.

This caused RNDIS timeout failures on the NIC: the host wrote data to the ring buffer and signaled the guest, but the signal went to VTL2 and was never forwarded to VTL0.

The relay only exists when message redirection is active, so interrupt forwarding is always required. Default use_interrupt_relay to true.

…ection

When VMBus message redirection is active, host-to-guest interrupts
target VTL2 instead of VTL0. The relay must forward these interrupts
to VTL0, but use_interrupt_relay defaulted to false and was only set
to true when the guest sent a ModifyConnection with
use_interrupt_page=true. Modern guests (VMBus Copper version)
negotiate with all feature flags false, so the interrupt page is never
set, leaving relay channels without interrupt forwarding.

This caused RNDIS timeout failures on the NIC: the host wrote data to
the ring buffer and signaled the guest, but the signal went to VTL2
and was never forwarded to VTL0.

Default use_interrupt_relay to true since the relay only exists when
message redirection is active, making interrupt forwarding always
required.
Copilot AI review requested due to automatic review settings June 15, 2026 19:40
@moor-coding moor-coding requested review from a team as code owners June 15, 2026 19:40

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the VMBus relay (used under VMBus message redirection) to ensure host-to-guest interrupts targeting VTL2 are forwarded to VTL0 by default, addressing failures seen with modern (Copper) guests that negotiate with feature flags disabled.

Changes:

  • Updates the relay’s open-channel logic comment to reflect that interrupts must be relayed under message redirection.
  • Changes the relay task’s use_interrupt_relay default from false to true.

Comment on lines +274 to 276
// With VMBus message redirection, host interrupts target VTL2 and must
// be relayed to VTL0. This is always the case when a relay is active.
let redirect_interrupt = self.channel.use_interrupt_relay.load(Ordering::SeqCst);
channel_workers: FuturesUnordered::new(),
intercept_channels: HashMap::new(),
use_interrupt_relay: Arc::new(AtomicBool::new(false)),
use_interrupt_relay: Arc::new(AtomicBool::new(true)),
@github-actions

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants