Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp4095382pxb; Mon, 8 Feb 2021 07:51:02 -0800 (PST) X-Google-Smtp-Source: ABdhPJwaBODqQ5YW4dYiXqDWwoqdJh2LieUjpWfLiu6Pips4McvAyiW8QR+hPyKfjb44pX3C3KfJ X-Received: by 2002:a2e:9b52:: with SMTP id o18mr11107026ljj.173.1612799460805; Mon, 08 Feb 2021 07:51:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612799460; cv=none; d=google.com; s=arc-20160816; b=cLpb9b5nxVmf+c9gZ8D3QZV7ZL7b+vSKnBIzePCQhdHCCPVbZq7COM+HvB+93NGC8Z YzRGS3TmgnzzsHnQ+Z+1bL+wGpLtBgtXDyyEJ7xDvQY9tC2CcPNhNqu/pAXFbSNtr+YP GlEJK4KslygJpQ8TSHBuUhlKurzgRc45SmGWLSYKzJgBwdozDdv5e4ZbrYY+nieuJ9xU ZaEGj8zsqIIWPzHEnIJ7XO6LrJ1v/hD0cJJH0mbWcezMDrmrOK/tlV48qQkvxwhli89S bNY+0xi7Zdmf2HPr8vdTUzNKZ8v2em7ueziemEtOdvpOQqFYvMcXpuBPLFU1ZPKIecIe B5ng== 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=ckDJkjRPpQW+a5yIeSCDiMP/RKKwqgjJq9WgutmfkXg=; b=cjPA+BYipLJQPjqnUU8ctISgLsMuIup3trZAq8082D6rVjSJrxI2d+3p9oimE5IRmn LNt/eJs+4T8Lr5uuHoMTSY2je4BHyBtfazYrp12PHouacxgomsi7MkUL4bnFmAPq80fa BdPBVFnrLSeatWMa9/uE/b6yC7lcLnB+i7IQPssowCufkcyz1y7hjxkzYkJD5mglEnAi rvCySBvkKiOOkfgejyGK8+aOxq63Agm/fyNBZork+lUmzOb4t16BhOe9n97JTs7YVEC4 9G4LSYLSdiZgRG0pF6Q2ef48VpxOhnnQmGqxsnrITLvxF/BJ5+/LA8ShwDmrIlImkshn DksQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=h6oNIjvM; 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 b19si12787827edd.84.2021.02.08.07.50.36; Mon, 08 Feb 2021 07:51:00 -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=h6oNIjvM; 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 S234129AbhBHPt0 (ORCPT + 99 others); Mon, 8 Feb 2021 10:49:26 -0500 Received: from mail.kernel.org ([198.145.29.99]:52238 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233109AbhBHPG7 (ORCPT ); Mon, 8 Feb 2021 10:06:59 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 7F43264EE5; Mon, 8 Feb 2021 15:05:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1612796726; bh=8x0xXwb6d8bT4yeWb8qLdFWMtleAKvKaarZrqsnngz4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=h6oNIjvMAU+Pg8UnALW5Err8UckrJMed0ONfKrRN1hi/xCDxvuKKSYErnRTkp2wIQ miKtHONlfIHub5vXDSgKim6AJAw+5u/jW0wBDOmiqVzPR6cKA0+ycrX5saStS1Hmbf 7z0xdoB4nR38UDRJBH+1T+QDqe/vErk6lqL8CaPM= 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 4.9 42/43] iommu/vt-d: Do not use flush-queue when caching-mode is on Date: Mon, 8 Feb 2021 16:01:08 +0100 Message-Id: <20210208145808.008636403@linuxfoundation.org> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210208145806.281758651@linuxfoundation.org> References: <20210208145806.281758651@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: Nadav Amit Signed-off-by: Greg Kroah-Hartman --- drivers/iommu/intel-iommu.c | 6 ++++++ 1 file changed, 6 insertions(+) --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -3323,6 +3323,12 @@ 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_info("Disable batched IOTLB flush due to virtualization"); + intel_iommu_strict = 1; + } + #ifdef CONFIG_INTEL_IOMMU_SVM if (pasid_enabled(iommu)) intel_svm_alloc_pasid_tables(iommu);