All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wei Yang <richard.weiyang@gmail.com>
To: Wei Yang <richard.weiyang@gmail.com>
Cc: joro@8bytes.org, dwmw2@infradead.org,
	iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] iommu/vt-d: reduce extra first level entry in iommu->domains
Date: Tue, 24 May 2016 23:06:55 +0000	[thread overview]
Message-ID: <20160524230655.GA28550@vultr.guest> (raw)
In-Reply-To: <1463798511-4015-1-git-send-email-richard.weiyang@gmail.com>

Hi, Joerg

Not sure whether you think this calculation is correct.

If I missed something for this " + 1" in your formula, I am glad to hear your
explanation. So that I could learn something from you :-)

Have a good day~

On Sat, May 21, 2016 at 02:41:51AM +0000, Wei Yang wrote:
>In commit <8bf478163e69> ("iommu/vt-d: Split up iommu->domains array"), it
>it splits iommu->domains in two levels. Each first level contains 256
>entries of second level. In case of the ndomains is exact a multiple of
>256, it would have one more extra first level entry for current
>implementation.
>
>This patch refines this calculation to reduce the extra first level entry.
>
>Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
>---
> drivers/iommu/intel-iommu.c |    4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
>index e3061d3..2204ca4 100644
>--- a/drivers/iommu/intel-iommu.c
>+++ b/drivers/iommu/intel-iommu.c
>@@ -1634,7 +1634,7 @@ static int iommu_init_domains(struct intel_iommu *iommu)
> 		return -ENOMEM;
> 	}
> 
>-	size = ((ndomains >> 8) + 1) * sizeof(struct dmar_domain **);
>+	size = (ALIGN(ndomains, 256) >> 8) * sizeof(struct dmar_domain **);
> 	iommu->domains = kzalloc(size, GFP_KERNEL);
> 
> 	if (iommu->domains) {
>@@ -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 = (cap_ndoms(iommu->cap) >> 8) + 1;
>+		int elems = ALIGN(cap_ndoms(iommu->cap), 256) >> 8;
> 		int i;
> 
> 		for (i = 0; i < elems; i++)
>-- 
>1.7.9.5

-- 
Wei Yang
Help you, Help me

WARNING: multiple messages have this Message-ID (diff)
From: Wei Yang <richard.weiyang-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Wei Yang <richard.weiyang-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org,
	iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH] iommu/vt-d: reduce extra first level entry in iommu->domains
Date: Tue, 24 May 2016 23:06:55 +0000	[thread overview]
Message-ID: <20160524230655.GA28550@vultr.guest> (raw)
In-Reply-To: <1463798511-4015-1-git-send-email-richard.weiyang-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

Hi, Joerg

Not sure whether you think this calculation is correct.

If I missed something for this " + 1" in your formula, I am glad to hear your
explanation. So that I could learn something from you :-)

Have a good day~

On Sat, May 21, 2016 at 02:41:51AM +0000, Wei Yang wrote:
>In commit <8bf478163e69> ("iommu/vt-d: Split up iommu->domains array"), it
>it splits iommu->domains in two levels. Each first level contains 256
>entries of second level. In case of the ndomains is exact a multiple of
>256, it would have one more extra first level entry for current
>implementation.
>
>This patch refines this calculation to reduce the extra first level entry.
>
>Signed-off-by: Wei Yang <richard.weiyang-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>---
> drivers/iommu/intel-iommu.c |    4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
>index e3061d3..2204ca4 100644
>--- a/drivers/iommu/intel-iommu.c
>+++ b/drivers/iommu/intel-iommu.c
>@@ -1634,7 +1634,7 @@ static int iommu_init_domains(struct intel_iommu *iommu)
> 		return -ENOMEM;
> 	}
> 
>-	size = ((ndomains >> 8) + 1) * sizeof(struct dmar_domain **);
>+	size = (ALIGN(ndomains, 256) >> 8) * sizeof(struct dmar_domain **);
> 	iommu->domains = kzalloc(size, GFP_KERNEL);
> 
> 	if (iommu->domains) {
>@@ -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 = (cap_ndoms(iommu->cap) >> 8) + 1;
>+		int elems = ALIGN(cap_ndoms(iommu->cap), 256) >> 8;
> 		int i;
> 
> 		for (i = 0; i < elems; i++)
>-- 
>1.7.9.5

-- 
Wei Yang
Help you, Help me

  reply	other threads:[~2016-05-24 23:07 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-21  2:41 [PATCH] iommu/vt-d: reduce extra first level entry in iommu->domains Wei Yang
2016-05-21  2:41 ` Wei Yang
2016-05-24 23:06 ` Wei Yang [this message]
2016-05-24 23:06   ` Wei Yang
2016-05-25 10:17   ` Robin Murphy
2016-05-25 21:43     ` Wei Yang
2016-05-25 21:43       ` Wei Yang
2016-05-26 10:11       ` Robin Murphy
2016-05-26 22:34         ` Wei Yang
2016-06-15 11:39   ` Joerg Roedel
2016-06-15 11:39     ` Joerg Roedel
2016-06-16 22:51     ` Wei Yang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160524230655.GA28550@vultr.guest \
    --to=richard.weiyang@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=iommu@lists.linux-foundation.org \
    --cc=joro@8bytes.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.