From: Jan Beulich Date: Wed, 15 May 2019 07:49:04 +0000 (+0200) Subject: VT-d: posted interrupts require interrupt remapping X-Git-Tag: archive/raspbian/4.11.3+24-g14b62ab3e5-1+rpi1~1^2~55^2~22 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=d85748bd106cad62d7594ce823118df9ecc19807;p=xen.git VT-d: posted interrupts require interrupt remapping 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 Acked-by: Kevin Tian Reviewed-by: Andrew Cooper master commit: 6c54663786d9f1ed04153867687c158675e7277d master date: 2019-04-09 15:12:07 +0200 --- diff --git a/xen/drivers/passthrough/vtd/intremap.c b/xen/drivers/passthrough/vtd/intremap.c index dfd39c22c1..5f620c3202 100644 --- a/xen/drivers/passthrough/vtd/intremap.c +++ b/xen/drivers/passthrough/vtd/intremap.c @@ -986,7 +986,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 e1838e8e7d..4c719d4ee7 100644 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2290,7 +2290,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) )