Linux IOMMU Development
 help / color / mirror / Atom feed
From: David Woodhouse <dwmw2@infradead.org>
To: Joerg Roedel <jroedel@suse.de>
Cc: Joerg Roedel <joro@8bytes.org>,
	iommu@lists.linux-foundation.org, zhen-hual@hp.com,
	bhe@redhat.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/4] iommu/vt-d: Don't consider copied context entries as present
Date: Thu, 11 Jun 2015 15:44:56 +0100	[thread overview]
Message-ID: <1434033896.3907.61.camel@infradead.org> (raw)
In-Reply-To: <20150611142554.GG16345@suse.de>

[-- Attachment #1: Type: text/plain, Size: 3362 bytes --]

On Thu, 2015-06-11 at 16:25 +0200, Joerg Roedel wrote:
> On Thu, Jun 11, 2015 at 03:07:02PM +0100, David Woodhouse wrote:
> > On Thu, 2015-06-11 at 15:47 +0200, Joerg Roedel wrote:
> > > From: Joerg Roedel <jroedel@suse.de>
> > > 
> > > Hide the copied context entries from the IOMMU driver by
> > > considering them as non-present. This is implemented by
> > > setting the first AVL bit (bit 67) in the context entry to
> > > one. If this bit is set, the context_present() function
> > > returns false.
> > > 
> > > Signed-off-by: Joerg Roedel <jroedel@suse.de>
> > 
> > In the extended context entry, bit 67 is the PGE bit. There are no bits
> > which are available to software, to my knowledge.
> 
> Okay, reading the VT-d spec again, the extended context-entry table seem
> to exist in parallel to the current context-entry table, right? So this
> patch should still work, even with extended entries present.

No, the extended context-entry exists *instead* of the legacy
context-entry. Note that all the bits in the legacy context-entry are
present in precisely the same place in the extended context-entry. It's
just that the extended context-entry defines meanings for more of them.

When you enable the DMA_RTADDR_RTT bit in the Root Table Address
register, the context-entries magically double in size.

It used to look like this:


Root Table Address Register
       |
       V

Root Table (struct root_entry)     Context Table (struct context_entry)
------------------------------     ------------------------------------
0x00: Context-table pointer  ----->  Context entry for 00:00.0
0x08: unused                         Context entry for 00:00.1 
0x10: unused                         Context entry for 00:00.2
...   ...                            ...
0xff8:...                            Context entry for ff:1f.7


Now it looks like this

Root Table Address Register
       |
       V

Root Table (struct root_entry)     Context Table (struct context_entry)
------------------------------     ------------------------------------
0x00: Context-table ptr #1  ----->  Context entry for 00:00.0: lo
0x08: Context-table ptr #2  --,     Context entry for 00:00.0: hi
0x10: unused                  |     Context entry for 00:00.1: lo
...   ...                     |     ...
0xff8:...                     |     Context entry for 7f:1f.7: hi
                              |
                              |
                              |    Context Table (struct context_entry)
                               --> ------------------------------------
0x00:                               Context entry for 80:00.0: lo
0x08:                               Context entry for 80:00.1: hi
...                                 ...
0xff8:                              Context entry for ff:1f.7: hi


This was implemented in http://git.kernel.org/linus/03ecc32c52 but
*all* that patch did was allocate the second page of context-table,
fill in the appropriate new pointer in the root table, and adjust the
way we calculate the *location* of a context-entry. In 4.1 we're still
only using the same old bits of the context-entry, which as noted are
in the same place in both cases. Even the mapping from the old 2-bit T
field to the new 3-bit TT field works out that way, for now.

-- 
dwmw2

[-- Attachment #2: smime.p7s --]
[-- Type: application/x-pkcs7-signature, Size: 5691 bytes --]

  reply	other threads:[~2015-06-11 14:44 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-11 13:47 [PATCH 0/4] More cleanups and fixes for Intel VT-d Joerg Roedel
     [not found] ` <1434030463-942-1-git-send-email-joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2015-06-11 13:47   ` [PATCH 1/4] iommu/vt-d: Remove iommu_attach_domain_with_id() Joerg Roedel
2015-06-11 13:47   ` [PATCH 2/4] iommu/vt-d: Don't consider copied context entries as present Joerg Roedel
     [not found]     ` <1434030463-942-3-git-send-email-joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2015-06-11 14:07       ` David Woodhouse
     [not found]         ` <1434031622.3907.40.camel-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2015-06-11 14:12           ` Joerg Roedel
     [not found]             ` <20150611141256.GF16345-l3A5Bk7waGM@public.gmane.org>
2015-06-11 14:19               ` David Woodhouse
2015-06-11 14:25           ` Joerg Roedel
2015-06-11 14:44             ` David Woodhouse [this message]
2015-06-11 15:12               ` David Woodhouse
     [not found]             ` <20150611142554.GG16345-l3A5Bk7waGM@public.gmane.org>
2015-06-11 14:51               ` Joerg Roedel
2015-06-11 13:47   ` [PATCH 3/4] iommu/vt-d: Remove unmap_device_dma() Joerg Roedel
2015-06-11 13:47   ` [PATCH 4/4] iommu/vt-d: Make sure si_domain is allocated for kdump kernel Joerg Roedel
2015-06-11 15:54   ` [PATCH 0/4] More cleanups and fixes for Intel VT-d David Woodhouse
2015-06-12  7:31     ` Joerg Roedel
     [not found]     ` <1434038066.3907.85.camel-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2015-06-12 20:29       ` Joerg Roedel

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=1434033896.3907.61.camel@infradead.org \
    --to=dwmw2@infradead.org \
    --cc=bhe@redhat.com \
    --cc=iommu@lists.linux-foundation.org \
    --cc=joro@8bytes.org \
    --cc=jroedel@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=zhen-hual@hp.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox