From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756091AbcEETYA (ORCPT ); Thu, 5 May 2016 15:24:00 -0400 Received: from mail-by2on0084.outbound.protection.outlook.com ([207.46.100.84]:46848 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754992AbcEETX6 (ORCPT ); Thu, 5 May 2016 15:23:58 -0400 From: "Chalamarla, Tirumalesh" To: Eric Auger , "eric.auger@st.com" , "robin.murphy@arm.com" , "alex.williamson@redhat.com" , "will.deacon@arm.com" , "joro@8bytes.org" , "tglx@linutronix.de" , "jason@lakedaemon.net" , "marc.zyngier@arm.com" , "christoffer.dall@linaro.org" , "linux-arm-kernel@lists.infradead.org" CC: "julien.grall@arm.com" , "patches@linaro.org" , "Jean-Philippe.Brucker@arm.com" , "p.fedin@samsung.com" , "linux-kernel@vger.kernel.org" , "Bharat.Bhushan@freescale.com" , "iommu@lists.linux-foundation.org" , "pranav.sawargaonkar@gmail.com" , "yehuday@marvell.com" Subject: Re: [PATCH v9 5/7] vfio/type1: also check IRQ remapping capability at msi domain Thread-Topic: [PATCH v9 5/7] vfio/type1: also check IRQ remapping capability at msi domain Thread-Index: AQHRpfxH0RLKm5wZv0eqE+zEo1J6z5+qRgCA Date: Thu, 5 May 2016 19:23:55 +0000 Message-ID: References: <1462362858-2925-1-git-send-email-eric.auger@linaro.org> <1462362858-2925-6-git-send-email-eric.auger@linaro.org> In-Reply-To: <1462362858-2925-6-git-send-email-eric.auger@linaro.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Microsoft-MacOutlook/f.15.1.160411 authentication-results: linaro.org; dkim=none (message not signed) header.d=none;linaro.org; dmarc=none action=none header.from=caviumnetworks.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [2602:306:32e8:da10:c1af:ec9e:fccb:81e3] x-ms-office365-filtering-correlation-id: 5ebdc1ac-e9a8-4719-7ab7-08d3751acc99 x-microsoft-exchange-diagnostics: 1;BLUPR0701MB1779;5:3g5o/PFr2NJ1ZJd1n0oChWeIt5NkuZIKxbB58Ka6dKrMGVkHAGG+WNxF96BiZiI3EaJGI3lCSb94nR7wPKKqz5Xy+0NPuXAFAu8L+DMrQwzWtukWLOzdlU8v5ViGR/FnhjRwVaukVXHvgF00LKQbTQ==;24:8VmmvROtw02bJ3Nx5KUJRXImKT0eYeBLqf/QpZcIPbXXgjQHp03KyW1G3uf+i2UMogI0DW9r0kouN2F7u3jkTjIMndMgov3CDr0VoTJsUlY=;7:FBUexk6/trH6jfzwQtYzgYP5ey6rjJVyopI4vBx47+BpcaooN8qhsv8dvfUx2N2yBBYLz6jnvaCequvFSpMCzQpEuNTApFDpX18+Odi33CKmY72Y67YU2Nr05rS9UtYP+cKGB3vniH1OehqryUyZtLd7NbmpEMgrGLBttOJzHJx5WDJgCeL5M9uvTNbuLV1H x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0701MB1779; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(9101521098)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001);SRVR:BLUPR0701MB1779;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0701MB1779; x-forefront-prvs: 0933E9FD8D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(377454003)(24454002)(6116002)(92566002)(1220700001)(54356999)(76176999)(102836003)(81166005)(50986999)(586003)(10400500002)(11100500001)(5002640100001)(87936001)(5008740100001)(86362001)(83716003)(2201001)(2950100001)(2900100001)(8936002)(122556002)(1720100001)(15975445007)(77096005)(33656002)(99286002)(36756003)(3280700002)(4001350100001)(5004730100002)(19580405001)(2501003)(5001770100001)(5890100001)(189998001)(19580395003)(106116001)(83506001)(2906002)(3660700001)(82746002)(4326007)(7059030)(921003)(3826002)(104396002)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:BLUPR0701MB1779;H:BLUPR0701MB1780.namprd07.prod.outlook.com;FPR:;SPF:None;MLV:sfv;LANG:en; spamdiagnosticoutput: 1:23 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-ID: MIME-Version: 1.0 X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-originalarrivaltime: 05 May 2016 19:23:55.0331 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR0701MB1779 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id u45JO539012485 On 5/4/16, 4:54 AM, "linux-arm-kernel on behalf of Eric Auger" wrote: >On x86 IRQ remapping is abstracted by the IOMMU. On ARM this is abstracted >by the msi controller. vfio_safe_irq_domain allows to check whether >interrupts are "safe" for a given device. They are if the device does >not use MSI or if the device uses MSI and the msi-parent controller >supports IRQ remapping. > >Then we check at group level if all devices have safe interrupts: if not, >we only allow the group to be attached if allow_unsafe_interrupts is set. > >At this point ARM sMMU still advertises IOMMU_CAP_INTR_REMAP. This is >changed in next patch. Will this work in systems with multiple ITS? > >Signed-off-by: Eric Auger > >--- >v3 -> v4: >- rename vfio_msi_parent_irq_remapping_capable into vfio_safe_irq_domain > and irq_remapping into safe_irq_domains > >v2 -> v3: >- protect vfio_msi_parent_irq_remapping_capable with > CONFIG_GENERIC_MSI_IRQ_DOMAIN >--- > drivers/vfio/vfio_iommu_type1.c | 44 +++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 42 insertions(+), 2 deletions(-) > >diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c >index 4d3a6f1..2fc8197 100644 >--- a/drivers/vfio/vfio_iommu_type1.c >+++ b/drivers/vfio/vfio_iommu_type1.c >@@ -37,6 +37,8 @@ > #include > #include > #include >+#include >+#include > > #define DRIVER_VERSION "0.2" > #define DRIVER_AUTHOR "Alex Williamson " >@@ -777,6 +779,33 @@ static int vfio_bus_type(struct device *dev, void *data) > return 0; > } > >+/** >+ * vfio_safe_irq_domain: returns whether the irq domain >+ * the device is attached to is safe with respect to MSI isolation. >+ * If the irq domain is not an MSI domain, we return it is safe. >+ * >+ * @dev: device handle >+ * @data: unused >+ * returns 0 if the irq domain is safe, -1 if not. >+ */ >+static int vfio_safe_irq_domain(struct device *dev, void *data) >+{ >+#ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN >+ struct irq_domain *domain; >+ struct msi_domain_info *info; >+ >+ domain = dev_get_msi_domain(dev); >+ if (!domain) >+ return 0; >+ >+ info = msi_get_domain_info(domain); >+ >+ if (!(info->flags & MSI_FLAG_IRQ_REMAPPING)) >+ return -1; >+#endif >+ return 0; >+} >+ > static int vfio_iommu_replay(struct vfio_iommu *iommu, > struct vfio_domain *domain) > { >@@ -870,7 +899,7 @@ static int vfio_iommu_type1_attach_group(void *iommu_data, > struct vfio_group *group, *g; > struct vfio_domain *domain, *d; > struct bus_type *bus = NULL; >- int ret; >+ int ret, safe_irq_domains; > > mutex_lock(&iommu->lock); > >@@ -893,6 +922,13 @@ static int vfio_iommu_type1_attach_group(void *iommu_data, > > group->iommu_group = iommu_group; > >+ /* >+ * Determine if all the devices of the group have a safe irq domain >+ * with respect to MSI isolation >+ */ >+ safe_irq_domains = !iommu_group_for_each_dev(iommu_group, &bus, >+ vfio_safe_irq_domain); >+ > /* Determine bus_type in order to allocate a domain */ > ret = iommu_group_for_each_dev(iommu_group, &bus, vfio_bus_type); > if (ret) >@@ -920,8 +956,12 @@ static int vfio_iommu_type1_attach_group(void *iommu_data, > INIT_LIST_HEAD(&domain->group_list); > list_add(&group->next, &domain->group_list); > >+ /* >+ * to advertise safe interrupts either the IOMMU or the MSI controllers >+ * must support IRQ remapping/interrupt translation >+ */ > if (!allow_unsafe_interrupts && >- !iommu_capable(bus, IOMMU_CAP_INTR_REMAP)) { >+ (!iommu_capable(bus, IOMMU_CAP_INTR_REMAP) && !safe_irq_domains)) { > pr_warn("%s: No interrupt remapping support. Use the module param \"allow_unsafe_interrupts\" to enable VFIO IOMMU support on this platform\n", > __func__); > ret = -EPERM; >-- >1.9.1 > > >_______________________________________________ >linux-arm-kernel mailing list >linux-arm-kernel@lists.infradead.org >http://lists.infradead.org/mailman/listinfo/linux-arm-kernel