Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2311856pxb; Fri, 5 Feb 2021 14:43:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJwsBJeivaSQVZ+jh8Qkp4Y4NK8bEtJPldiil5SbCVBA7VYX3BO3p6BAcHER1F5jgdsuHI91 X-Received: by 2002:a17:907:170d:: with SMTP id le13mr6074282ejc.220.1612565020133; Fri, 05 Feb 2021 14:43:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612565020; cv=none; d=google.com; s=arc-20160816; b=YigO96QAY8ZE5yHYs9F5Mtm0YPMs2QmxFPYsV72xPHZ/U8mAcQfB1UbmLdiv6z0Osn qbZ+Atv2wV1v74OG8FhDKc0f+5miVfQjr5O5l1KCowYjIx0FmOfpQZ2K4oV4kUhM1/7i dcjRYWfO+f9xuShNsWdUkgWh0dhlj6JdU6aoQTZsgFHN3S8E3OSsHlSbujBH55pVIvVx bhI5Nj7QQcAr+Q0GdqlIBszmB3IYr3mSt/XSyTsu1uNm8+AhnbmSdDKdxJcoCMXLxhQ1 FdBflemulrSfx/99Y+5M+sTRy+kHlaCUsflKcsw1KKtbkG5K7dpqG564OrLvFlx07Fc6 GpJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=N8j1FTQRofYa4sSrszWRDlJhBg0AU0OSnQaUokBKQW8=; b=1J+5cUorG4lbMdPW/I4dIiApN5BkHsTNPxJUmAzm3xjuicA27Fe7UZeGxp3yzXdQOs QBt6XquhybE9hEdcp0DhjI0v71WYLTaJoQ6c1OgbRAZqHnOHbdZLrDYHDCJaLvdNyqyT f3xK+Gy53K2KOtl/yCosLOJ7NkfVV1xsWF6+gaKSKoBc0UeJoaUupKVe9KH8L63WDMbk kkDPAeEA6bUU9fhFvTzw8iWV/r3hOj7YnJJmdEWOrT9xQaa6OzgmHCQ6qceMcjm3WXF9 doc9x/mgt89OjQ8i3pg05JZo1CktjYcikz9qgfDNmPR8IZIGa6q+AM1z4pZSJW6C8gfM DETw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=aknQe9eZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i9si5981592ejf.666.2021.02.05.14.43.14; Fri, 05 Feb 2021 14:43:40 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=aknQe9eZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232830AbhBEWlA (ORCPT + 99 others); Fri, 5 Feb 2021 17:41:00 -0500 Received: from mail.kernel.org ([198.145.29.99]:44678 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232774AbhBEOwN (ORCPT ); Fri, 5 Feb 2021 09:52:13 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 0D71864FD7; Fri, 5 Feb 2021 14:09:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1612534176; bh=+kMVAiqh5RcRrY3CkWPq2kPCMaTRR9tH/SpIOwVqDWY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aknQe9eZ1priDbqduopmwrJkaANON8C/WNytgTidchVENj0GjVoXOWQyO+s83qBjM XVCEwJ/Cv06jgGOV3Yd2b/veVQs4wE61peBEFPmBw0Y6EGKZLhqugIAAkdArRB4yu0 RT6QSQ4wuhVV5T29vxdm0RuSUa/1Ro8iOlzxyDD0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Nadav Amit , David Woodhouse , Lu Baolu , Joerg Roedel , Will Deacon , Joerg Roedel Subject: [PATCH 5.10 17/57] iommu/vt-d: Do not use flush-queue when caching-mode is on Date: Fri, 5 Feb 2021 15:06:43 +0100 Message-Id: <20210205140656.717830135@linuxfoundation.org> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210205140655.982616732@linuxfoundation.org> References: <20210205140655.982616732@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Nadav Amit commit 29b32839725f8c89a41cb6ee054c85f3116ea8b5 upstream. When an Intel IOMMU is virtualized, and a physical device is passed-through to the VM, changes of the virtual IOMMU need to be propagated to the physical IOMMU. The hypervisor therefore needs to monitor PTE mappings in the IOMMU page-tables. Intel specifications provide "caching-mode" capability that a virtual IOMMU uses to report that the IOMMU is virtualized and a TLB flush is needed after mapping to allow the hypervisor to propagate virtual IOMMU mappings to the physical IOMMU. To the best of my knowledge no real physical IOMMU reports "caching-mode" as turned on. Synchronizing the virtual and the physical IOMMU tables is expensive if the hypervisor is unaware which PTEs have changed, as the hypervisor is required to walk all the virtualized tables and look for changes. Consequently, domain flushes are much more expensive than page-specific flushes on virtualized IOMMUs with passthrough devices. The kernel therefore exploited the "caching-mode" indication to avoid domain flushing and use page-specific flushing in virtualized environments. See commit 78d5f0f500e6 ("intel-iommu: Avoid global flushes with caching mode.") This behavior changed after commit 13cf01744608 ("iommu/vt-d: Make use of iova deferred flushing"). Now, when batched TLB flushing is used (the default), full TLB domain flushes are performed frequently, requiring the hypervisor to perform expensive synchronization between the virtual TLB and the physical one. Getting batched TLB flushes to use page-specific invalidations again in such circumstances is not easy, since the TLB invalidation scheme assumes that "full" domain TLB flushes are performed for scalability. Disable batched TLB flushes when caching-mode is on, as the performance benefit from using batched TLB invalidations is likely to be much smaller than the overhead of the virtual-to-physical IOMMU page-tables synchronization. Fixes: 13cf01744608 ("iommu/vt-d: Make use of iova deferred flushing") Signed-off-by: Nadav Amit Cc: David Woodhouse Cc: Lu Baolu Cc: Joerg Roedel Cc: Will Deacon Cc: stable@vger.kernel.org Acked-by: Lu Baolu Link: https://lore.kernel.org/r/20210127175317.1600473-1-namit@vmware.com Signed-off-by: Joerg Roedel Signed-off-by: Greg Kroah-Hartman --- drivers/iommu/intel/iommu.c | 5 +++++ 1 file changed, 5 insertions(+) --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -3350,6 +3350,11 @@ static int __init init_dmars(void) if (!ecap_pass_through(iommu->ecap)) hw_pass_through = 0; + + if (!intel_iommu_strict && cap_caching_mode(iommu->cap)) { + pr_warn("Disable batched IOTLB flush due to virtualization"); + intel_iommu_strict = 1; + } intel_svm_check(iommu); }