lkml.org 
[lkml]   [2023]   [May]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRE: [PATCH v3 02/10] iommu/vt-d: Extend dmar_domain to support nested domain
    Date
    > 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

    \
     
     \ /
      Last update: 2023-05-24 09:04    [W:2.863 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site