diff --git a/xen/drivers/passthrough/vtd/intremap.c b/xen/drivers/passthrough/vtd/intremap.c index 1d19856091..c9927e4706 100644 --- a/xen/drivers/passthrough/vtd/intremap.c +++ b/xen/drivers/passthrough/vtd/intremap.c @@ -988,7 +988,8 @@ int pi_update_irte(const struct pi_desc *pi_desc, const struct pirq *pirq, spin_unlock_irq(&desc->lock); ASSERT(pcidevs_locked()); - return iommu_update_ire_from_msi(msi_desc, &msi_desc->msg); + + return msi_msg_write_remap_rte(msi_desc, &msi_desc->msg); unlock_out: spin_unlock_irq(&desc->lock); diff --git a/xen/drivers/passthrough/vtd/iommu.c b/xen/drivers/passthrough/vtd/iommu.c index 50a0e25224..1db1cd9f2d 100644 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2342,7 +2342,7 @@ int __init intel_vtd_setup(void) * not supported, since we count on this feature to * atomically update 16-byte IRTE in posted format. */ - if ( !cap_intr_post(iommu->cap) || !cpu_has_cx16 ) + if ( !cap_intr_post(iommu->cap) || !iommu_intremap || !cpu_has_cx16 ) iommu_intpost = 0; if ( !vtd_ept_page_compatible(iommu) )