Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4689369pxj; Wed, 12 May 2021 10:57:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzpX2W0awXehJO3FXBKoWe1ysrQQiBIa3Tg4zC4nu2m03eHH+7N9+wDQBBsazk37JioQqAi X-Received: by 2002:a17:907:3f08:: with SMTP id hq8mr38690856ejc.240.1620842239933; Wed, 12 May 2021 10:57:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620842239; cv=none; d=google.com; s=arc-20160816; b=XCaP8jM/6UHlLP6sBJReOTLZX08/NKLEpp23xTWUVxdCAj2sXWBjQ6AnEi1CqbmwmZ vs5EPIaB5KdZJZVJChiXfQkHi98NLT4FMinTO1RIuHUiGIOQB9aTnDu+61WMKYSW0FUM yN08X8KVR0CVYi921wbllFXI98vq3eIgadAYUmenuAYqkOcXJE70d+xDKvNM7p4PAMBI N9pXo4TUnmxP0+fi9Ah0sv8HvhQT+NxYsbdPRPo1nWLtsCzR0YKv9XhVm5F/oH4U/92x gnWwkSs37vuWXJn5U01Tus9oyEsH2PmPL7rlu1LQIEpcsi0+AlE1smKWpOda3Nm2zbz9 ARcQ== 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=/HiJP0HJ7qHL14UmN/vCpfy9xxZb65LnqE9BYtsQA98=; b=ajMyMCH1ltn9iqeLwbRiWEyvXdk+OAS1/rBPAmMvL+8bhvUXCr6xSTJiulIbuSjw+j 38N05uQyzrxgtTd8RVHIo7/bf4ZS8mfRYzAOVhtUSiYnx8MJJN+6o1Eq7GUZOV1dN91+ GeRXSpgeFlBzXmE+InwlZOkoUTUQbARVI+NmrE3WuxIghHGP/KwxojWQWvjNyr6o/zkP h/O+uvpWEY8bNiwpx32O/L+psIDpe/WJVRgq4RUf7jnJVOllzl6n8c3/QHlSoZp7BxO2 rkfejRbfuRHr0I05vBT5PnsfsVfc4tngFkGeq8ws3PhacFMQD9qht6W/sYd1DhPOjZtu qf9A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=SqYVwHbY; 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 ca23si352384edb.150.2021.05.12.10.56.55; Wed, 12 May 2021 10:57:19 -0700 (PDT) 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=SqYVwHbY; 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 S1350097AbhELRrY (ORCPT + 99 others); Wed, 12 May 2021 13:47:24 -0400 Received: from mail.kernel.org ([198.145.29.99]:49768 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239984AbhELQQr (ORCPT ); Wed, 12 May 2021 12:16:47 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 7A39A61D65; Wed, 12 May 2021 15:43:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620834183; bh=sqRBd/9UoIEbMUY3yxnYTDXVWq70N1hfpzQCIZQepBk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SqYVwHbYqvU2hqQ2f+3DrWuQ70q6HTYToKGPUnJw/y3GneT8tRIeSqFhz2WOw+QjA UacO/OCKRyi+BoQIZ2p7nP6j36mvUqV+eLd0pRQBuWlFexwIyvcnBXQge9aCLBH0Ky +lNk9bmoxQHNYpjdRH8/D8o4VV1yY9CJCGZNNgJE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ashok Raj , Lu Baolu , Joerg Roedel , Sasha Levin Subject: [PATCH 5.11 440/601] iommu/vt-d: Preset Access/Dirty bits for IOVA over FL Date: Wed, 12 May 2021 16:48:37 +0200 Message-Id: <20210512144842.331046728@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210512144827.811958675@linuxfoundation.org> References: <20210512144827.811958675@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: Lu Baolu [ Upstream commit a8ce9ebbecdfda3322bbcece6b3b25888217f8e3 ] The Access/Dirty bits in the first level page table entry will be set whenever a page table entry was used for address translation or write permission was successfully translated. This is always true when using the first-level page table for kernel IOVA. Instead of wasting hardware cycles to update the certain bits, it's better to set them up at the beginning. Suggested-by: Ashok Raj Signed-off-by: Lu Baolu Link: https://lore.kernel.org/r/20210115004202.953965-1-baolu.lu@linux.intel.com Signed-off-by: Joerg Roedel Signed-off-by: Sasha Levin --- drivers/iommu/intel/iommu.c | 14 ++++++++++++-- include/linux/intel-iommu.h | 2 ++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 026041308409..2f5d12cdb298 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -1023,8 +1023,11 @@ static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain, domain_flush_cache(domain, tmp_page, VTD_PAGE_SIZE); pteval = ((uint64_t)virt_to_dma_pfn(tmp_page) << VTD_PAGE_SHIFT) | DMA_PTE_READ | DMA_PTE_WRITE; - if (domain_use_first_level(domain)) + if (domain_use_first_level(domain)) { pteval |= DMA_FL_PTE_XD | DMA_FL_PTE_US; + if (domain->domain.type == IOMMU_DOMAIN_DMA) + pteval |= DMA_FL_PTE_ACCESS; + } if (cmpxchg64(&pte->val, 0ULL, pteval)) /* Someone else set it while we were thinking; use theirs. */ free_pgtable_page(tmp_page); @@ -2351,9 +2354,16 @@ __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn, return -EINVAL; attr = prot & (DMA_PTE_READ | DMA_PTE_WRITE | DMA_PTE_SNP); - if (domain_use_first_level(domain)) + if (domain_use_first_level(domain)) { attr |= DMA_FL_PTE_PRESENT | DMA_FL_PTE_XD | DMA_FL_PTE_US; + if (domain->domain.type == IOMMU_DOMAIN_DMA) { + attr |= DMA_FL_PTE_ACCESS; + if (prot & DMA_PTE_WRITE) + attr |= DMA_FL_PTE_DIRTY; + } + } + pteval = ((phys_addr_t)phys_pfn << VTD_PAGE_SHIFT) | attr; while (nr_pages > 0) { diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h index 09c6a0bf3892..ecb35fdff03e 100644 --- a/include/linux/intel-iommu.h +++ b/include/linux/intel-iommu.h @@ -42,6 +42,8 @@ #define DMA_FL_PTE_PRESENT BIT_ULL(0) #define DMA_FL_PTE_US BIT_ULL(2) +#define DMA_FL_PTE_ACCESS BIT_ULL(5) +#define DMA_FL_PTE_DIRTY BIT_ULL(6) #define DMA_FL_PTE_XD BIT_ULL(63) #define ADDR_WIDTH_5LEVEL (57) -- 2.30.2