From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1762192AbdKQVMU (ORCPT ); Fri, 17 Nov 2017 16:12:20 -0500 Received: from mail-bl2nam02on0089.outbound.protection.outlook.com ([104.47.38.89]:20274 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1762155AbdKQVLu (ORCPT ); Fri, 17 Nov 2017 16:11:50 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Suravee.Suthikulpanit@amd.com; From: Suravee Suthikulpanit To: linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org Cc: joro@8bytes.org, jroedel@suse.de, alex.williamson@redhat.com, Suravee Suthikulpanit Subject: [PATCH 1/2] vfio/type1: Adopt fast IOTLB flush interface when unmap IOVAs Date: Fri, 17 Nov 2017 15:11:19 -0600 Message-Id: <1510953080-5619-2-git-send-email-Suravee.Suthikulpanit@amd.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1510953080-5619-1-git-send-email-Suravee.Suthikulpanit@amd.com> References: <1510953080-5619-1-git-send-email-Suravee.Suthikulpanit@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: SN4PR0501CA0100.namprd05.prod.outlook.com (10.167.128.17) To MWHPR12MB1742.namprd12.prod.outlook.com (10.175.55.13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3c96c3b5-bf0b-430a-2f16-08d52dffcf39 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603258);SRVR:MWHPR12MB1742; X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1742;3:GBmHWvCgkwxYNy24/uLhEYeSfir9vui3JmfDDcmFiuIXsUDNe6uXkcL+Y4iImSJ6Y2YIgt76B4y0CpeHOQbWxwKMlOEWbZwV6jcCz1sqK2vsJqaas9rv4DCFcIDrnZwvxV49N6gPB0NfFjjGM5IbT25qN/Kqgt/BO1cJat+Jz/t88VKiE6ajDLtvfAKkTuPQvkVU9RLrCgyb4zETayu0KZSqVzXnjFISedRJ2arLSUyw9OUZJCUnn2y11aYqOfwa;25:h0WacVBI6/1gEiBBKUE14/zosei+xdXM3ZkaHTOU0NcCDswOIv/QX0sosRe10IC/w44wsbIiH99mvHOb9H5BHjfEcrXDeDityF31V8s/Vvu4O0Wog2d0UFK9hEIq9mTy1n3ozFE3XjAdY6lHRteLKKZbGVwpxcLKArMJedhwOU21lASR8jT8i37XBl0WqHc3EG4nUUfYW1KVADyI5khJC2f2JBxbZomFcxgxGv9XV5wi0VAPTKsW3LfnmjlmAZ1ejVFqO/Wi4YqxzgIKXDfEWsO/wStNAdrgyX4++ZQc8a86Q49nXz9SslhSgXernZydA7CGXFipOCgDQZvN3HiqmQ==;31:beblAlB2knse/lG1JI8F8GKGt2+uDx8/YuxExgq9KHtPWkY5hjI3/dAxw80zyGCMAOcbw5fdlEYTQPoooWE+czLshDxwu8nz+5CgCGmmF+UWBprQ47sfJJ1N8w5qintDExkBFXlv+f624nIU1IVFDtDaYoiFAjtvAoULvvPt5w7on+tkL7BlInzeW8de40lWwGw3xR1JhuCLtodyjJh3Ok+qzSUXRRUwVZfTN9Iw2fY= X-MS-TrafficTypeDiagnostic: MWHPR12MB1742: X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1742;20:NH5RUsYRl0CarCWQhKYZrVIIntbVds4p0YRnNxGoQ31mMpo4gsbYyM3quzCyr+8C6B11GRR1phuafqyMTwpL7I8eqKihSJ2dFa2DCKc00qNY31ELhRvPziIICn7I193JaohzT9MWd1lZnKIMAZNMYwa3lS3EfTPOw8hrIhylRqHA1bqcXy4Ts/UP3ToHKBYZTMi7i0t+e9s/7fOovN/n3LaQoiMfFX3AT0HyrNEgM3iZktm8tLLeXV4CYH8tybMfIYoyUMsJRKtnN3MjDX6KQra89SNITs6uMyoZpr7WWLo4tbUoGWZssewALyrkQoNgnT6YiGehYLPZAxkbudCYgoMunkhMuB2YKh85JQ2+I4p2kP8/iDNQrfyQO8EfLQrKfZV1s/YZMsKZX66YF/NHxPFKDJQfCncOUqaYLul/y4rYgZUb8yhJWV6ffsnS36sGuSdfBeiyRZRndTWdiH3iZi18Yso0OAhlqUmAzcWF4ltlfD2A/fR4gJkAAP+VW7HQ;4:ypr0OWslydMu7XB6ylRx0tNG/j9vtIGp532B3OGkOgkIJNt2mY47PzaUFRs6II84YjqEo1pDfIGSk3/G1sygpX3F4PqCi/p8wR9jaQej6Yi9hNS7L8g1rS5F97O/4N/rz51XhnT/gFYv/PCwRDx+bgdCCl9hEPFT7XrhuatXPriOZZF6gq88K5cAcH1+Sj+Ev792QZLrWOvfjXmGwBgCx8n+KZ0yYS6tBTbyllFzuUnrivudU1Y/xHwBTjjXttC3w6NGQTvCNzGL23uPadnFdTOGVrZlZpCdOvimkgmgPWxZDsj/xMhLHwwzOPH8EitL X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(10201501046)(100000703101)(100105400095)(3231022)(93006095)(93001095)(3002001)(6055026)(6041248)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123560025)(20161123558100)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:MWHPR12MB1742;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:MWHPR12MB1742; X-Forefront-PRVS: 049486C505 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(346002)(39860400002)(376002)(199003)(189002)(36756003)(48376002)(50986999)(478600001)(6116002)(101416001)(3846002)(81156014)(8676002)(81166006)(16526018)(76176999)(4720700003)(189998001)(16586007)(305945005)(2906002)(2950100002)(7736002)(6666003)(72206003)(86362001)(316002)(50226002)(47776003)(5003940100001)(6486002)(50466002)(97736004)(53416004)(68736007)(105586002)(53936002)(8936002)(66066001)(106356001)(25786009)(4326008)(5660300001);DIR:OUT;SFP:1101;SCL:1;SRVR:MWHPR12MB1742;H:ssuthiku-rhel73-zp.amd.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;MWHPR12MB1742;23:HKZm4wYKbrIHVxQLS3bVq3YNk3dxcsBUJBF89/t0l?= =?us-ascii?Q?SNPqi8zYqtG9GspPiZunLPWXDx3mq78FHCaCLWdgOMZ4JmUp/d9vX3SlMMEv?= =?us-ascii?Q?tb6vutfG3QJ2Y/+7J4I+KDRslXAIK5T7bl4w3xQTT83YjRIaqe0xPwtjwMDZ?= =?us-ascii?Q?XPSj2MAtefyUbyyuLnkziO+HOsrD1XANLPPBma8KnljakRDEpP9MMycuQ1dI?= =?us-ascii?Q?Ru6NtHuGqNOsQ7JFL+McLFKWFzqGIJ1zT0/W4jFUdlOjajnkIqUM06jmp+Ac?= =?us-ascii?Q?J4Q58jpUdWmMze7nBWpTb6bfrvU9E/NG+9KnTDTbyuvfrT2K9Q81crwEJhkD?= =?us-ascii?Q?Spk6udlYSK/EC9hjWVmBRHcg6tUBdxYhegU02xUxB9eUJEek8Zx24nPwvdEP?= =?us-ascii?Q?j3gt5tldkY5HolgV0FK2KweMhG5aHPS8GUMqDPmtpou+Paez0XaK1ox2zzl6?= =?us-ascii?Q?SjUXnhERWpm/pGd4y3HaLqrXFcWf/J56W5yXj8K7JCrHB6Ty4kzrhyF3tROR?= =?us-ascii?Q?rIPZpN+nLQoVQFFayZwmYYlr/Hu0MdIMBpqNtccl8FT3ECUUNtuDYHmYa6/l?= =?us-ascii?Q?ynuSx4E1JRE8kG+dHMm59QJ6BBAlkinmxPSNcONCM8UBMQ9dt4fzE+it3VRt?= =?us-ascii?Q?QjnIdETPjXhyV6ImIzq9UaqnCo06GV7gFbcvQN3UUNeKXaeax98SJVIKUT7E?= =?us-ascii?Q?j9FSEiRcE97s1bYs9QPx5R3+YhsXnrx/GFvqyH65tXcmeEDeHTAPrYZN1B2Z?= =?us-ascii?Q?uHU+P0wjjKlcqVMkM0AusJrnSPl+tIqmIxmh1bC3ckv7hnlR4NbtGbQdGh7L?= =?us-ascii?Q?bfUvCzJ/2wVLwlXaja7ngVmw6lA+3xJg1nGLUx3w9dboWNR2bxnqSVMOHhzu?= =?us-ascii?Q?BHSPkuTGCNckLW0cwGTjnF3JMcYUV5/64zYP7vwG+ekE55zYrOMWoFj0Z5VL?= =?us-ascii?Q?Cnozex2njSjpFtKjPzskZkrlwzzfD0hH/uE0CIHuI/6jK+01fSUrhkLSRDaw?= =?us-ascii?Q?RKtd3vjNACiEoB8csQapaI8Wu6QibRjljbbW9fDW+g/GCWAXfrmry4Pv/uZF?= =?us-ascii?Q?FNoQrF2ZbNOPlH1jpTcYihmrDKX?= X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1742;6:Em23zfXA/15BoWigUnGVM2YQRoDTOC9DmAWd3w8dRv2ix1iDxBEUxyFlSB0pBNVMC3vAVsD4zLOa/m/Oyr8QL1sEk5kQj6yLlGJ3qOBVsqcuDFpNDRzDLOkG17UOFbb/dich4qE/sQ7kz/GRTEb5kGnjUpnVyfBsigy9QVR0ObguOZFx61zHRBZZlwqQry6bfwbYSeTMOWVmVQiIvVX19ux5PoHTcBOXXsmqulMImXDEMPN81zo9Rb23arZF7wsTJ5z2Nn62wBox8tTsAXuZQqs9LI/rAYjYEuGedashtFqLKYTmC5oB0CaLEGAYemu1EPJipwzs/tRoKD5CEtfCRhp5TcOBCl5JXcGwP8HukU8=;5:aErPUqqr6Az7M/Y6S0XtW8x/Ax80TZkJeDZhUy8ub94LSy2DazyewFLoMw3L/F/pkHrBrwlQmidlolZySyDzjDE4ZX3pho/SDDPo5JCr+8jefcU77nNaD0z2D7TbLgFiLT36JscfG3d3qhkUGT+cLH00SsVCB3TxF+aTkNsByvg=;24:K/FUte8sGYo6J5m2kMpGmHlUK3xIBvlcSMi5WXJNla8dIKxB5Evjm7BHrrzyNcR9VJrnaCd7JO64i8LzH5nHuuG0GfZQ/leTIduBM4Yvl8U=;7:YqsrSwKywCg7QUSt0fI4yRJII+5yHyNBf+tF8Fh/Aa/ZzfpQOtfJEl/jjpgw1giKpeZNYhscuuq2Jcwv0+JKwhIxPo6nbzaTwLegFW/NIfmq07dYWkeMTKjH/IAf3DqWGayG2Iy7dx57srvQWrty23GuHDQeh6WfBWoc7wT1eJ57h/xP8dE7w/WN/tMipzzgt/tIm0UvI7m9VoJrphLJMgDIREJ8JsnC5PVvbK8WGcTZof34rPV2PRBXgXqFzt6m SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1742;20:d4QhMP3ras9CI1JaYVjU4cuNVP/kBcuVYm38wIijZWl3/Ie+R95BQK0RgDeOJGCau3ZkDT7L80UR+g0GNb3vfqGN4BvAM3hEd48U+EUmOSF4KB5G8jZXQMqD6M2f7rcklNltbLpgDoLgozfjhpGH+Pmk3rapQeuHVChSRFstaGFY6A2GbAtAUhEFRl7UxA+kcD5lWuqhNuRvgiYx+F4GTDec/iFDZdnJN64CKUVhLNO9DwHHnkcbeMDZXuLNaBAE X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Nov 2017 21:11:45.4022 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3c96c3b5-bf0b-430a-2f16-08d52dffcf39 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR12MB1742 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Suravee Suthikulpanit VFIO IOMMU type1 currently upmaps IOVA pages synchronously, which requires IOTLB flushing for every unmapping. This results in large IOTLB flushing overhead when handling pass-through devices with a large number of mapped IOVAs (e.g. GPUs). This can be avoided by using the new IOTLB flushing interface. Cc: Alex Williamson Cc: Joerg Roedel Signed-off-by: Suravee Suthikulpanit --- drivers/vfio/vfio_iommu_type1.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c index 92155cc..28a7ab6 100644 --- a/drivers/vfio/vfio_iommu_type1.c +++ b/drivers/vfio/vfio_iommu_type1.c @@ -698,10 +698,12 @@ static long vfio_unmap_unpin(struct vfio_iommu *iommu, struct vfio_dma *dma, break; } - unmapped = iommu_unmap(domain->domain, iova, len); + unmapped = iommu_unmap_fast(domain->domain, iova, len); if (WARN_ON(!unmapped)) break; + iommu_tlb_range_add(domain->domain, iova, len); + unlocked += vfio_unpin_pages_remote(dma, iova, phys >> PAGE_SHIFT, unmapped >> PAGE_SHIFT, @@ -710,6 +712,7 @@ static long vfio_unmap_unpin(struct vfio_iommu *iommu, struct vfio_dma *dma, cond_resched(); } + iommu_tlb_sync(domain->domain); dma->iommu_mapped = false; if (do_accounting) { @@ -884,8 +887,11 @@ static int map_try_harder(struct vfio_domain *domain, dma_addr_t iova, break; } - for (; i < npage && i > 0; i--, iova -= PAGE_SIZE) - iommu_unmap(domain->domain, iova, PAGE_SIZE); + for (; i < npage && i > 0; i--, iova -= PAGE_SIZE) { + iommu_unmap_fast(domain->domain, iova, PAGE_SIZE); + iommu_tlb_range_add(domain->domain, iova, PAGE_SIZE); + } + iommu_tlb_sync(domain->domain); return ret; } -- 1.8.3.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Suravee Suthikulpanit Subject: [PATCH 1/2] vfio/type1: Adopt fast IOTLB flush interface when unmap IOVAs Date: Fri, 17 Nov 2017 15:11:19 -0600 Message-ID: <1510953080-5619-2-git-send-email-Suravee.Suthikulpanit@amd.com> References: <1510953080-5619-1-git-send-email-Suravee.Suthikulpanit@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1510953080-5619-1-git-send-email-Suravee.Suthikulpanit-5C7GfCeVMHo@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Cc: jroedel-l3A5Bk7waGM@public.gmane.org List-Id: iommu@lists.linux-foundation.org From: Suravee Suthikulpanit VFIO IOMMU type1 currently upmaps IOVA pages synchronously, which requires IOTLB flushing for every unmapping. This results in large IOTLB flushing overhead when handling pass-through devices with a large number of mapped IOVAs (e.g. GPUs). This can be avoided by using the new IOTLB flushing interface. Cc: Alex Williamson Cc: Joerg Roedel Signed-off-by: Suravee Suthikulpanit --- drivers/vfio/vfio_iommu_type1.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c index 92155cc..28a7ab6 100644 --- a/drivers/vfio/vfio_iommu_type1.c +++ b/drivers/vfio/vfio_iommu_type1.c @@ -698,10 +698,12 @@ static long vfio_unmap_unpin(struct vfio_iommu *iommu, struct vfio_dma *dma, break; } - unmapped = iommu_unmap(domain->domain, iova, len); + unmapped = iommu_unmap_fast(domain->domain, iova, len); if (WARN_ON(!unmapped)) break; + iommu_tlb_range_add(domain->domain, iova, len); + unlocked += vfio_unpin_pages_remote(dma, iova, phys >> PAGE_SHIFT, unmapped >> PAGE_SHIFT, @@ -710,6 +712,7 @@ static long vfio_unmap_unpin(struct vfio_iommu *iommu, struct vfio_dma *dma, cond_resched(); } + iommu_tlb_sync(domain->domain); dma->iommu_mapped = false; if (do_accounting) { @@ -884,8 +887,11 @@ static int map_try_harder(struct vfio_domain *domain, dma_addr_t iova, break; } - for (; i < npage && i > 0; i--, iova -= PAGE_SIZE) - iommu_unmap(domain->domain, iova, PAGE_SIZE); + for (; i < npage && i > 0; i--, iova -= PAGE_SIZE) { + iommu_unmap_fast(domain->domain, iova, PAGE_SIZE); + iommu_tlb_range_add(domain->domain, iova, PAGE_SIZE); + } + iommu_tlb_sync(domain->domain); return ret; } -- 1.8.3.1