[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] VT-d Posted-Interrupts feature detection
commit 1d028f7f2bce751b457d5551eb5fa17d4ad79600 Author: Feng Wu <feng.wu@xxxxxxxxx> AuthorDate: Tue Nov 24 12:10:10 2015 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Nov 24 12:10:10 2015 +0100 VT-d Posted-Interrupts feature detection VT-d Posted-Interrupts is an enhancement to CPU side Posted-Interrupt. With VT-d Posted-Interrupts enabled, external interrupts from direct-assigned devices can be delivered to guests without VMM intervention when guest is running in non-root mode. Signed-off-by: Feng Wu <feng.wu@xxxxxxxxx> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Kevin Tian <kevin.tian@xxxxxxxxx> --- xen/drivers/passthrough/vtd/iommu.c | 14 ++++++++++++-- xen/drivers/passthrough/vtd/iommu.h | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/xen/drivers/passthrough/vtd/iommu.c b/xen/drivers/passthrough/vtd/iommu.c index d95f4d4..1d17769 100644 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2156,8 +2156,8 @@ int __init intel_vtd_setup(void) } /* We enable the following features only if they are supported by all VT-d - * engines: Snoop Control, DMA passthrough, Queued Invalidation and - * Interrupt Remapping. + * engines: Snoop Control, DMA passthrough, Queued Invalidation, Interrupt + * Remapping, and Posted Interrupt */ for_each_drhd_unit ( drhd ) { @@ -2185,6 +2185,14 @@ int __init intel_vtd_setup(void) if ( iommu_intremap && !ecap_intr_remap(iommu->ecap) ) iommu_intremap = 0; + /* + * We cannot use posted interrupt if X86_FEATURE_CX16 is + * 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 ) + iommu_intpost = 0; + if ( !vtd_ept_page_compatible(iommu) ) iommu_hap_pt_share = 0; @@ -2210,6 +2218,7 @@ int __init intel_vtd_setup(void) P(iommu_passthrough, "Dom0 DMA Passthrough"); P(iommu_qinval, "Queued Invalidation"); P(iommu_intremap, "Interrupt Remapping"); + P(iommu_intpost, "Posted Interrupt"); P(iommu_hap_pt_share, "Shared EPT tables"); #undef P @@ -2229,6 +2238,7 @@ int __init intel_vtd_setup(void) iommu_passthrough = 0; iommu_qinval = 0; iommu_intremap = 0; + iommu_intpost = 0; return ret; } diff --git a/xen/drivers/passthrough/vtd/iommu.h b/xen/drivers/passthrough/vtd/iommu.h index ac71ed1..22abefe 100644 --- a/xen/drivers/passthrough/vtd/iommu.h +++ b/xen/drivers/passthrough/vtd/iommu.h @@ -61,6 +61,7 @@ /* * Decoding Capability Register */ +#define cap_intr_post(c) (((c) >> 59) & 1) #define cap_read_drain(c) (((c) >> 55) & 1) #define cap_write_drain(c) (((c) >> 54) & 1) #define cap_max_amask_val(c) (((c) >> 48) & 0x3f) -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |