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

