Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp4111622pxb; Mon, 8 Feb 2021 08:12:47 -0800 (PST) X-Google-Smtp-Source: ABdhPJyru6ZGndoKgtmDKFvRihSNSayiUSqTKOCfK3Jk+/PcuUeRfrZJXyjsxma1lFWNrEOB8jEd X-Received: by 2002:a50:b5c5:: with SMTP id a63mr17760113ede.227.1612800767086; Mon, 08 Feb 2021 08:12:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612800767; cv=none; d=google.com; s=arc-20160816; b=rWdRuN7fOCGO114ZB6nOZwNaQuf5tSMFSTBhdn5NRcrSn9ozcWRSy+UtTjPAgtQ4Wb 5X2h3ad8Q6ZbSWwlRSgFA9Q3LdsY4lx9KIU7KlEZqww7b1KUL4QLi7Bqbw9vxHfjfK7/ rtOplpg4UHz3xNgONCwL6MGLqdbpHxmZkR9+NqxrotW+T6lADNVsrBcmHHYh1Id6IFZM hoM8z0idw9OWnk+1/OER2rg+yZmft6oaiMRU7HDjcX8CA4s8QMxipD5Q7R4KAk48WO2Z oYahFdLHMYCiZaM+Lw01dLASWVvXH1UJkh38qHwI8t1VoHZT1oa6ZYb1hQZQMtYYyXVo 1OWg== 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=NQQLAXSR6+pGT5WCLqFAwJ4uVTKCnCBaLkuKm9wHKBw=; b=lV8oZBEkk0J1GSsrWn4sqiKySISxWWdtaAXsrGud7IoQJJWmtVPti2q6nZePqSFa0t 908aw4EePxKv2r+oSSrxIasfPOiv08EMENG2LlJz7QzS7rVlJ0Rni+NUFfmMtFNWKi0o CQP6Lt43sSuF7flkmGhchHIasmfHeJyrLZ6Py11t9BqQ584JAJ7PSAHjnrfwM+DuK6XR sYgUvzuPAvpG5l4kdpeXK5Ld+HBA2IMLQqWfVWIQCwBRcHQYMk0Ak9fm56K5vIRnsdzA Gd+8E4OF76EoRaRlNFWq8BxOXamuQSm4aq5WOdV+lKGkEW38n5YRv2grzV+ZU/c5iMTO kZMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=CI2H7VqY; 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 dq21si9709357ejc.102.2021.02.08.08.12.20; Mon, 08 Feb 2021 08:12:47 -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=CI2H7VqY; 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 S232066AbhBHQJb (ORCPT + 99 others); Mon, 8 Feb 2021 11:09:31 -0500 Received: from mail.kernel.org ([198.145.29.99]:56488 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232824AbhBHPKA (ORCPT ); Mon, 8 Feb 2021 10:10:00 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id EA1F264ED9; Mon, 8 Feb 2021 15:06:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1612796815; bh=/0vmvTyqyQLYYl28kytAgxlDqrUtpPoNNuM/KZX1vQA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CI2H7VqYvwfej3HzXUdBwMtJvrSRowk/voK+X/UVZBckMdTrmn+hXoN3urdoyg2lA UAJlHf2s8slEhve0TImKr8khGi5jUbdRB7rgWFYUsyPO/6GE7ahzXQqQRxHziC1urG ddFm4wptN6NQgQJUMw7FQfZDp6HULOmPqXaDa+nA= 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.14 29/30] iommu/vt-d: Do not use flush-queue when caching-mode is on Date: Mon, 8 Feb 2021 16:01:15 +0100 Message-Id: <20210208145806.407716534@linuxfoundation.org> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210208145805.239714726@linuxfoundation.org> References: <20210208145805.239714726@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 @@ -3338,6 +3338,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);