Initially I had just noticed the unnecessary indirection in the call from pi_update_irte(). The generic wrapper having an iommu_intremap conditional made me look at the setup code though. So first of all enforce the necessary dependency.
Signed-off-by: Jan Beulich <jbeul...@suse.com> --- a/xen/drivers/passthrough/vtd/intremap.c +++ b/xen/drivers/passthrough/vtd/intremap.c @@ -993,7 +993,8 @@ int pi_update_irte(const struct pi_desc 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); --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2342,7 +2342,7 @@ static int __init 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) ) _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel