Message ID | 20230511145110.27707-3-yi.l.liu@intel.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp4436623vqo; Thu, 11 May 2023 07:55:22 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7DRxUPBZA+kzD3c5ZZtB0M1GfC5VTnEe5FrRXpzMTvHf/8SYbiM5aXwTIe4N7tb9YEVghp X-Received: by 2002:a17:903:230d:b0:1ad:164:74fc with SMTP id d13-20020a170903230d00b001ad016474fcmr6217848plh.20.1683816922314; Thu, 11 May 2023 07:55:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683816922; cv=none; d=google.com; s=arc-20160816; b=XkShqHvyOCFfjsI+BqMVuaYVZlnNhJRAHslfIi1uo/5Nh3/AraEB96Lj2OxkfqJVOw xPLYA4iyDm5Q5Z3rIQK+aIMghM7gmB6f5Ot6cIfyRpIGAMyXIVphrgyztHjsyWxFwEJA 5Y4jo3AdGWS4PZYli+FepgP5NNv0LWlFnFUxAVqh/w98PntlsBPWRU4+EoGIzzTMQRof fudbZNPFEITmzy/oD8DvDgfIo1MP542Fs6qYhejCmYGhxVjK/e+C1RuyYniRhAUUB37N kE6yTvjiR3yMZTTpRid4X8WNhb+mL9G5lb17qx2bVi/YwyXA9FPrjpRJLZe/Hgagptk7 gGxg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=R6A1IZRMXEOLRJ/widjC1fKeFcQfLwCpYu4BjpCMCMw=; b=TJaL/skO54WvIMycEYoytunyk34pZVba+xF5/3BYooSZE28cymP+PTho+2nWSUSBMc 04rpKt2Qr3CyythZTbgBZH2u5ZsVneRsRGuUisGRLHUvV2c0oR71xg63Wx1NMzaYT3XN 75HbaqWKuXU9CQl7yqclpLMf9B3l2MTRbLjo5sj0r+BjBmp1GThE27amDReOho/ya/Kh KlMqncz2DiDnyjBCK7tUnsGa2dLglaPvm0FD/htEiVZPxQpxon36K9yFrwZrt7r8oobm 3wvFcnnp5wb0XhaLsU/Z8YooXSB8MG3JZEZGlBn4yxcje7M0AdMPxjrSKzWEmemMEPmx sxGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=GhOu+72v; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q20-20020a170902bd9400b0019ceaf40d5esi6416774pls.107.2023.05.11.07.55.09; Thu, 11 May 2023 07:55:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=GhOu+72v; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238644AbjEKOwb (ORCPT <rfc822;peekingduck44@gmail.com> + 99 others); Thu, 11 May 2023 10:52:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42012 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238250AbjEKOwP (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Thu, 11 May 2023 10:52:15 -0400 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4496C106C5; Thu, 11 May 2023 07:51:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683816676; x=1715352676; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=hJ7ZgLoBzS93EqELSx3NuEeyF7SzKPDPM4Hq5dZ6YEY=; b=GhOu+72vNeKHzqw+wM4B1U+tb1VxGcsiYK0DkJlwd5QlvxUApqhVPN4o X+i4oPB+f3aEKonEPY/N+adu4A7Ml9m5PFvMxPjArBg+swQ26lghUOxVb 4g3nAUqzGIBXFtOBGPhqnZYFbPz+tHX/K87oE8w64nFfAR/SKJb+kd8dZ 7NblF2hjG2lPFSrAEeIZuVp1glBHMgZxFWXmrxNdiFAGIFx+luXRYWM6P +ZtdQlBhbxO3aBPBHvYnC2ZsfxLB3PQ8dXMOSVK/Gjr2Ue2a1hC4Kyd2g 3H8TKxKKErrdPKSM232s0cqM5ZByxH5TXn0GJrC5kxIyUkBg1/LLOV6x4 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10707"; a="335025441" X-IronPort-AV: E=Sophos;i="5.99,266,1677571200"; d="scan'208";a="335025441" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 May 2023 07:51:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10707"; a="769355157" X-IronPort-AV: E=Sophos;i="5.99,266,1677571200"; d="scan'208";a="769355157" Received: from 984fee00a4c6.jf.intel.com ([10.165.58.231]) by fmsmga004.fm.intel.com with ESMTP; 11 May 2023 07:51:15 -0700 From: Yi Liu <yi.l.liu@intel.com> To: joro@8bytes.org, alex.williamson@redhat.com, jgg@nvidia.com, kevin.tian@intel.com, robin.murphy@arm.com, baolu.lu@linux.intel.com Cc: cohuck@redhat.com, eric.auger@redhat.com, nicolinc@nvidia.com, kvm@vger.kernel.org, mjrosato@linux.ibm.com, chao.p.peng@linux.intel.com, yi.l.liu@intel.com, yi.y.sun@linux.intel.com, peterx@redhat.com, jasowang@redhat.com, shameerali.kolothum.thodi@huawei.com, lulu@redhat.com, suravee.suthikulpanit@amd.com, iommu@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, zhenzhong.duan@intel.com Subject: [PATCH v3 02/10] iommu/vt-d: Extend dmar_domain to support nested domain Date: Thu, 11 May 2023 07:51:02 -0700 Message-Id: <20230511145110.27707-3-yi.l.liu@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230511145110.27707-1-yi.l.liu@intel.com> References: <20230511145110.27707-1-yi.l.liu@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE, SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1765610013208969965?= X-GMAIL-MSGID: =?utf-8?q?1765610013208969965?= |
Series |
Add Intel VT-d nested translation
|
|
Commit Message
Yi Liu
May 11, 2023, 2:51 p.m. UTC
From: Lu Baolu <baolu.lu@linux.intel.com> The nested domain fields are exclusive to those that used for a DMA remapping domain. Use union to avoid memory waste. Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> Signed-off-by: Yi Liu <yi.l.liu@intel.com> --- drivers/iommu/intel/iommu.h | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-)
Comments
> From: Liu, Yi L <yi.l.liu@intel.com> > Sent: Thursday, May 11, 2023 10:51 PM > > From: Lu Baolu <baolu.lu@linux.intel.com> > > The nested domain fields are exclusive to those that used for a DMA > remapping domain. Use union to avoid memory waste. > > Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> > Signed-off-by: Yi Liu <yi.l.liu@intel.com> > --- > drivers/iommu/intel/iommu.h | 35 +++++++++++++++++++++++++++++------ > 1 file changed, 29 insertions(+), 6 deletions(-) > > diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h > index 1c5e1d88862b..e818520f4068 100644 > --- a/drivers/iommu/intel/iommu.h > +++ b/drivers/iommu/intel/iommu.h > @@ -596,15 +596,38 @@ struct dmar_domain { > spinlock_t lock; /* Protect device tracking lists */ > struct list_head devices; /* all devices' list */ > > - struct dma_pte *pgd; /* virtual address */ > - int gaw; /* max guest address width */ > - > - /* adjusted guest address width, 0 is level 2 30-bit */ > - int agaw; > int iommu_superpage;/* Level of superpages supported: > 0 == 4KiB (no superpages), 1 == > 2MiB, > 2 == 1GiB, 3 == 512GiB, 4 == 1TiB */ > - u64 max_addr; /* maximum mapped address */ > + union { > + /* DMA remapping domain */ > + struct { > + /* virtual address */ > + struct dma_pte *pgd; > + /* max guest address width */ > + int gaw; > + /* > + * adjusted guest address width: > + * 0: level 2 30-bit > + * 1: level 3 39-bit > + * 2: level 4 48-bit > + * 3: level 5 57-bit > + */ > + int agaw; > + /* maximum mapped address */ > + u64 max_addr; > + }; what about 'nid'? > + > + /* Nested user domain */ > + struct { > + /* 2-level page table the user domain nested */ /* parent page table which the user domain is nested on */ > + struct dmar_domain *s2_domain; > + /* user page table pointer (in GPA) */ > + unsigned long s1_pgtbl; > + /* page table attributes */ > + struct iommu_hwpt_intel_vtd s1_cfg; > + }; > + }; > > struct iommu_domain domain; /* generic domain data structure for > iommu core */ > -- > 2.34.1
On 5/24/23 3:02 PM, Tian, Kevin wrote: >> From: Liu, Yi L<yi.l.liu@intel.com> >> Sent: Thursday, May 11, 2023 10:51 PM >> >> From: Lu Baolu<baolu.lu@linux.intel.com> >> >> The nested domain fields are exclusive to those that used for a DMA >> remapping domain. Use union to avoid memory waste. >> >> Signed-off-by: Lu Baolu<baolu.lu@linux.intel.com> >> Signed-off-by: Yi Liu<yi.l.liu@intel.com> >> --- >> drivers/iommu/intel/iommu.h | 35 +++++++++++++++++++++++++++++------ >> 1 file changed, 29 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h >> index 1c5e1d88862b..e818520f4068 100644 >> --- a/drivers/iommu/intel/iommu.h >> +++ b/drivers/iommu/intel/iommu.h >> @@ -596,15 +596,38 @@ struct dmar_domain { >> spinlock_t lock; /* Protect device tracking lists */ >> struct list_head devices; /* all devices' list */ >> >> - struct dma_pte *pgd; /* virtual address */ >> - int gaw; /* max guest address width */ >> - >> - /* adjusted guest address width, 0 is level 2 30-bit */ >> - int agaw; >> int iommu_superpage;/* Level of superpages supported: >> 0 == 4KiB (no superpages), 1 == >> 2MiB, >> 2 == 1GiB, 3 == 512GiB, 4 == 1TiB */ >> - u64 max_addr; /* maximum mapped address */ >> + union { >> + /* DMA remapping domain */ >> + struct { >> + /* virtual address */ >> + struct dma_pte *pgd; >> + /* max guest address width */ >> + int gaw; >> + /* >> + * adjusted guest address width: >> + * 0: level 2 30-bit >> + * 1: level 3 39-bit >> + * 2: level 4 48-bit >> + * 3: level 5 57-bit >> + */ >> + int agaw; >> + /* maximum mapped address */ >> + u64 max_addr; >> + }; > what about 'nid'? "nid" represents which NUMA node should we allocate pages from for this domain. It's updated every time when a domain is attached/detached to/from a device or pasid. Generally speaking, "nid" is common for all types of domain. But in this case, only a DMA remapping domain has a need to allocate pages. I intend to keep it as it for now. There's more cleanup rooms if we limit it only for DMA remapping domain. Best regards, baolu
diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h index 1c5e1d88862b..e818520f4068 100644 --- a/drivers/iommu/intel/iommu.h +++ b/drivers/iommu/intel/iommu.h @@ -596,15 +596,38 @@ struct dmar_domain { spinlock_t lock; /* Protect device tracking lists */ struct list_head devices; /* all devices' list */ - struct dma_pte *pgd; /* virtual address */ - int gaw; /* max guest address width */ - - /* adjusted guest address width, 0 is level 2 30-bit */ - int agaw; int iommu_superpage;/* Level of superpages supported: 0 == 4KiB (no superpages), 1 == 2MiB, 2 == 1GiB, 3 == 512GiB, 4 == 1TiB */ - u64 max_addr; /* maximum mapped address */ + union { + /* DMA remapping domain */ + struct { + /* virtual address */ + struct dma_pte *pgd; + /* max guest address width */ + int gaw; + /* + * adjusted guest address width: + * 0: level 2 30-bit + * 1: level 3 39-bit + * 2: level 4 48-bit + * 3: level 5 57-bit + */ + int agaw; + /* maximum mapped address */ + u64 max_addr; + }; + + /* Nested user domain */ + struct { + /* 2-level page table the user domain nested */ + struct dmar_domain *s2_domain; + /* user page table pointer (in GPA) */ + unsigned long s1_pgtbl; + /* page table attributes */ + struct iommu_hwpt_intel_vtd s1_cfg; + }; + }; struct iommu_domain domain; /* generic domain data structure for iommu core */