> From: Wei Liu <[email protected]> > > On a nested root partition the vPCI MSI/MSI-X interrupts of vmbus > devices (e.g. the MANA NIC) are mapped in the hypervisor with a > MAP_DEVICE_INTERRUPT hypercall. This is done from hv_arch_irq_unmask() > -> hv_map_msi_interrupt() because the nested hypervisor performs the > interrupt remapping and a RETARGET_INTERRUPT is not usable there. > > The mapping was never removed: hv_arch_irq_unmask() called > hv_map_msi_interrupt(data, NULL), so the returned hv_interrupt_entry was > discarded, and hv_msi_free() tears the interrupt down with a vmbus > PCI_DELETE_INTERRUPT message (hv_int_desc_free()) without issuing > UNMAP_DEVICE_INTERRUPT. > > This has led to MSHV rejecting already-mapped (vp, vector) pair from > being used. When this happens during early boot, the system hangs. > > Keep the hypervisor mapping in sync with the kernel's interrupt > lifecycle. > > The mapping is only created on x86 (hv_arch_irq_unmask() is a stub on > arm64), so the unmap hypercall is guarded accordingly. > > Signed-off-by: Wei Liu <[email protected]>
Sashiko has reviewed this patch and found no issues. It looks great! -- Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=2
