[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] iommu/amd-vi: fix checking for Invalidate All support in amd_iommu_resume()


  • To: xen-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Roger Pau Monne <roger.pau@xxxxxxxxxx>
  • Date: Tue, 13 Jun 2023 12:13:13 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ukpPL3ENiHNCM+TCw9anvfetqEyu8mpxdvdU3ftHPzc=; b=MWfkY1UW7x4dRx2rgTl8XxErJJI5WRtByUmUJrmEXeaVXs5c+G+CmVmqkL65TqMB90MltQ3obzcPJZnyCfr2OOeJPbzPgdktKyczPMWGEhfMVziz2hxNmfd+PjiDg3U8Hpl41JRQlg/2eeWo4kESJpRV189uKR8sg3l07t8hFbm0Qme5ubCFh8INsltq6BF6bsNTeKmT0lJjiFR4Njo6mC9Q3d6t4NyVJ6ucesf5zvqfEvXgSmN8E47hUi8QXnHvzQqQdbR681zjUSokcG5dvv0qq32PQMX0S0ustXe+yUrxzm+jqdHcWNg6HjYJKOjrz4YuutnVe2WSlO/0UjO+Ww==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TMzo/t1x3i7JJlWBBDQ35qUWMwiPbt9bmXyMENCV8u4nUBW13Y2BMQ9g6fV2vzIDFcg61yTDDw+7+mSjTIfRT9x9GR0advqVUuIi1EI7vxJCo9lMGLnCK7HxzMv+twLEDsfU/UV3zPDrKXk6pvnmewpZvI1KMgf6eEDGWzTnSPJfEYbgMbPG0Q+e91QElaw/LscpA4jzZtYO11r9iA2eQlrqgzt/DbcffxQLozd/DodfIRelUHLZqipNI6W5z6GhU+sYVzTL8VP7fVRcll0SChwsc/labQ/+XzS7G6ZaDFZHqBL9vifrvCQWy0SDDT1Bxi2877qq+QCd2EjRSrjiJw==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: Roger Pau Monne <roger.pau@xxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • Delivery-date: Tue, 13 Jun 2023 10:13:58 +0000
  • Ironport-data: A9a23:/Vhk4qxiQnXHF1iAf596t+ckxyrEfRIJ4+MujC+fZmUNrF6WrkUPy WEfXWmHPf2CMWGmeY0gb4ix8hxQvMXcxtJrTlRl+CAxQypGp/SeCIXCJC8cHc8wwu7rFxs7s ppEOrEsCOhuExcwcz/0auCJQUFUjP3OHfykTrafYEidfCc8IA85kxVvhuUltYBhhNm9Emult Mj75sbSIzdJ4RYtWo4vw/zF8EsHUMja4mtC5QRgPKsT5TcyqlFOZH4hDfDpR5fHatE88t6SH 47r0Ly/92XFyBYhYvvNfmHTKxBirhb6ZGBiu1IOM0SQqkEqSh8ai87XAME0e0ZP4whlqvgqo Dl7WT5cfi9yVkHEsLx1vxC1iEiSN4UekFPMCSDXXcB+UyQq2pYjqhljJBheAGEWxgp4KThg8 scXeBA8VTC4vM7r6YqwYedLmMt2eaEHPKtH0p1h5RfwKK58BLzmGODN79Ie2yosjMdTG/qYf 9AedTdkcBXHZVtIJ0sTD5U92uyvgxETcRUB8A7T+fVxvjaVkFAZPLvFabI5fvSQQspYhACAr 3/u9GXlGBAKcteYzFJp91r137SXxHugAtN6+LuQ+ddxjWGfm0MoM0MSVGOS8KG8m1bgRIcKQ 6AT0m90xUQoz2S7Q9+4UxCmrXqsuh8HR8EWA+A88BuKyKff/0CeHGdsZjxLZcEitcQ2bSc3z VLPlNTsbQGDq5WQQHOZs7uR9jW7PHBPKXdYPXNYCwwY/9PkvYc/yArVScpuG7K0iduzHizsx zeNr241gLB7YdM36phXNGvv21qEzqUlhCZsjukLdgpJNj9EWbM=
  • Ironport-hdrordr: A9a23:yhKID6sVVvWUHKe79E3Np0227skDu9V00zEX/kB9WHVpW+afkN 2jm+le8BPyhisRMUtQ4OxoWZPwJU80kKQf3WB/B9aftWXd2FdAT7sSiLcKoQeQeBEWn9Q1vc ldmupFebrN5DNB/KTHCXGDYrAd6ejCyoaOpc2b4lVMaUVRS49Ghj0SNi+rVndxQwlNQboVfa Dy2uN34wCnfnQcKuCVb0NoYwCWz+enqK7b
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

Do not rely on iommu local variable pointing to a valid amd_iommu
element after the call to for_each_amd_iommu().  Instead check whether
any IOMMU on the system doesn't support Invalidate All in order to
perform the per-domain and per-device flushes.

Fixes: 9c46139de889 ('amd iommu: Support INVALIDATE_IOMMU_ALL command.')
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
I don't have a way to test host suspend/resume, so the patch is only
build tested.
---
 xen/drivers/passthrough/amd/iommu_init.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/xen/drivers/passthrough/amd/iommu_init.c 
b/xen/drivers/passthrough/amd/iommu_init.c
index 9773ccfcb41f..4facff93d68b 100644
--- a/xen/drivers/passthrough/amd/iommu_init.c
+++ b/xen/drivers/passthrough/amd/iommu_init.c
@@ -1580,6 +1580,7 @@ void cf_check amd_iommu_crash_shutdown(void)
 void cf_check amd_iommu_resume(void)
 {
     struct amd_iommu *iommu;
+    bool invalidate_all = true;
 
     for_each_amd_iommu ( iommu )
     {
@@ -1589,10 +1590,12 @@ void cf_check amd_iommu_resume(void)
         */
         disable_iommu(iommu);
         enable_iommu(iommu);
+        if ( !iommu->features.flds.ia_sup && invalidate_all )
+            invalidate_all = false;
     }
 
     /* flush all cache entries after iommu re-enabled */
-    if ( !iommu->features.flds.ia_sup )
+    if ( !invalidate_all )
     {
         invalidate_all_devices();
         invalidate_all_domain_pages();
-- 
2.40.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.