In the origin commit, the size of the second level is hard coded to an
integer, 256.

This patch defines two marco for the second level size and shift.

Signed-off-by: Wei Yang <[email protected]>
---
 drivers/iommu/intel-iommu.c | 12 ++++++------
 include/linux/intel-iommu.h |  2 ++
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 1c8b587..dd050d7 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -616,7 +616,7 @@ static struct kmem_cache *iommu_devinfo_cache;
 static struct dmar_domain* get_iommu_domain(struct intel_iommu *iommu, u16 did)
 {
        struct dmar_domain **domains;
-       int idx = did >> 8;
+       int idx = did >> DMAR_DOMS_SHIFT;
 
        domains = iommu->domains[idx];
        if (!domains)
@@ -629,10 +629,10 @@ static void set_iommu_domain(struct intel_iommu *iommu, 
u16 did,
                             struct dmar_domain *domain)
 {
        struct dmar_domain **domains;
-       int idx = did >> 8;
+       int idx = did >> DMAR_DOMS_SHIFT;
 
        if (!iommu->domains[idx]) {
-               size_t size = 256 * sizeof(struct dmar_domain *);
+               size_t size = DMAR_DOMS_SIZE * sizeof(struct dmar_domain *);
                iommu->domains[idx] = kzalloc(size, GFP_ATOMIC);
        }
 
@@ -1634,11 +1634,11 @@ static int iommu_init_domains(struct intel_iommu *iommu)
                return -ENOMEM;
        }
 
-       size = DIV_ROUND_UP(ndomains, 256) * sizeof(struct dmar_domain **);
+       size = DIV_ROUND_UP(ndomains, DMAR_DOMS_SIZE) * sizeof(struct 
dmar_domain **);
        iommu->domains = kzalloc(size, GFP_KERNEL);
 
        if (iommu->domains) {
-               size = 256 * sizeof(struct dmar_domain *);
+               size = DMAR_DOMS_SIZE * sizeof(struct dmar_domain *);
                iommu->domains[0] = kzalloc(size, GFP_KERNEL);
        }
 
@@ -1699,7 +1699,7 @@ static void disable_dmar_iommu(struct intel_iommu *iommu)
 static void free_dmar_iommu(struct intel_iommu *iommu)
 {
        if ((iommu->domains) && (iommu->domain_ids)) {
-               int elems = DIV_ROUND_UP(cap_ndoms(iommu->cap), 256);
+               int elems = DIV_ROUND_UP(cap_ndoms(iommu->cap), DMAR_DOMS_SIZE);
                int i;
 
                for (i = 0; i < elems; i++)
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h
index 2d9b650..afcb7bf 100644
--- a/include/linux/intel-iommu.h
+++ b/include/linux/intel-iommu.h
@@ -412,6 +412,8 @@ struct intel_iommu {
 
 #ifdef CONFIG_INTEL_IOMMU
        unsigned long   *domain_ids; /* bitmap of domains */
+#define DMAR_DOMS_SHIFT 8
+#define DMAR_DOMS_SIZE (1 << DMAR_DOMS_SHIFT )
        struct dmar_domain ***domains; /* ptr to domains */
        spinlock_t      lock; /* protect context, domain ids */
        struct root_entry *root_entry; /* virtual address */
-- 
2.5.0

Reply via email to