From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: [PATCH 3 of 3] xen: AMD IOMMU: Automatically enable per-device vector maps Date: Tue, 26 Jul 2011 17:33:34 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com Cc: wei.wang2@amd.com List-Id: xen-devel@lists.xenproject.org Automatically enable per-device vector maps when using IOMMU, unless disabled specifically by an IOMMU parameter. Signed-off-by: George Dunlap diff -r 362a881a79a4 -r fffeeea7afbb xen/arch/x86/irq.c --- a/xen/arch/x86/irq.c Tue Jul 26 17:21:23 2011 +0100 +++ b/xen/arch/x86/irq.c Tue Jul 26 17:21:23 2011 +0100 @@ -32,6 +32,7 @@ unsigned int __read_mostly nr_irqs_gsi = unsigned int __read_mostly nr_irqs; integer_param("nr_irqs", nr_irqs); +/* This default may be changed by the AMD IOMMU code */ bool_t __read_mostly opt_irq_perdev_vector_map = 0; boolean_param("irq-perdev-vector-map", opt_irq_perdev_vector_map); diff -r 362a881a79a4 -r fffeeea7afbb xen/drivers/passthrough/amd/pci_amd_iommu.c --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c Tue Jul 26 17:21:23 2011 +0100 +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c Tue Jul 26 17:21:23 2011 +0100 @@ -25,6 +25,9 @@ #include #include +extern bool_t __read_mostly opt_irq_perdev_vector_map; +extern bool_t __read_mostly iommu_amd_perdev_vector_map; + struct amd_iommu *find_iommu_for_device(int bdf) { BUG_ON ( bdf >= ivrs_bdf_entries ); @@ -148,6 +151,18 @@ int __init amd_iov_detect(void) return -ENODEV; } + /* Enable use of per-device vector map unless otherwise + * specified */ + if ( iommu_amd_perdev_vector_map ) + { + printk("AMD-Vi: Enabling per-device vector maps\n"); + opt_irq_perdev_vector_map=1; + } + else + { + printk("AMD-Vi: WARNING - not enabling per-device vector maps\n"); + } + return scan_pci_devices(); } diff -r 362a881a79a4 -r fffeeea7afbb xen/drivers/passthrough/iommu.c --- a/xen/drivers/passthrough/iommu.c Tue Jul 26 17:21:23 2011 +0100 +++ b/xen/drivers/passthrough/iommu.c Tue Jul 26 17:21:23 2011 +0100 @@ -49,6 +49,7 @@ bool_t __read_mostly iommu_qinval = 1; bool_t __read_mostly iommu_intremap = 1; bool_t __read_mostly iommu_hap_pt_share; bool_t __read_mostly iommu_debug; +bool_t __read_mostly iommu_amd_perdev_vector_map = 1; static void __init parse_iommu_param(char *s) { @@ -81,6 +82,8 @@ static void __init parse_iommu_param(cha iommu_dom0_strict = 1; else if ( !strcmp(s, "sharept") ) iommu_hap_pt_share = 1; + else if ( !strcmp(s, "no-perdev-vector-map") ) + iommu_amd_perdev_vector_map = 0; s = ss + 1; } while ( ss );