[PATCH v2 2/2] iommu/vt-d: use marco for dmar_domain's second level size and shift

From: Wei Yang
Date: Fri May 27 2016 - 18:24:32 EST


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 <richard.weiyang@xxxxxxxxx>
---
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