qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Knut Omang <knut.omang@oracle.com>
To: Jan Kiszka <jan.kiszka@web.de>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
	Stefan Weil <sw@weilnetz.de>, Le Tan <tamlokveer@gmail.com>,
	qemu-devel@nongnu.org,
	Alex Williamson <alex.williamson@redhat.com>,
	Anthony Liguori <aliguori@amazon.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v3 0/5] intel-iommu: introduce Intel IOMMU (VT-d) emulation to q35 chipset
Date: Fri, 15 Aug 2014 13:15:25 +0200	[thread overview]
Message-ID: <1408101325.14053.41.camel@abi.no.oracle.com> (raw)
In-Reply-To: <1408077757.11008.89.camel@ori.omang.mine.nu>

On Fri, 2014-08-15 at 06:42 +0200, Knut Omang wrote:
> On Thu, 2014-08-14 at 14:10 +0200, Jan Kiszka wrote:
> > On 2014-08-14 13:15, Michael S. Tsirkin wrote:
> > > On Mon, Aug 11, 2014 at 03:04:57PM +0800, Le Tan wrote:
> > >> Hi,
> > >>
> > >> These patches are intended to introduce Intel IOMMU (VT-d) emulation to q35
> > >> chipset. The major job in these patches is to add support for emulating Intel
> > >> IOMMU according to the VT-d specification, including basic responses to CSRs
> > >> accesses, the logics of DMAR (DMA remapping) and DMA memory address
> > >> translations.
> > > 
> > > Thanks!
> > > Looks very good overall, I noted some coding style issues - I didn't
> > > bother reporting each issue in every place where it appears - reported
> > > each issue once only, so please find and fix all instances of each
> > > issue.
> > 
> > BTW, because I was in urgent need for virtual test environment for
> > Jailhouse, I hacked interrupt remapping on top of Le's patches:
> > 
> > http://git.kiszka.org/?p=qemu.git;a=shortlog;h=refs/heads/queues/vtd-intremap
> > 
> > The approach likely needs further discussions and refinements but it
> > already allows me to work on top with our hypervisor, and also Linux.
> > You can see from the last commit that Le's work made it pretty easy to
> > build this on top.
> 
> Le, 
> 
> I have tried Jan's branch with my device setup which consists of a
> minimal q35 setup, an ioh3420 root port (specified as -device
> ioh3420,slot=0 ) and a pcie device plugged into that root port, which
> gives the following lscpi -t:
> 
> -[0000:00]-+-00.0
>            +-01.0
>            +-02.0
>            +-03.0-[01]----00.0
>            +-04.0
>            +-1f.0
>            +-1f.2
>            \-1f.3
> 
> All seems to work beautifully (I see the ISA bridge happily receive
> translations) until the first DMA from my device model (at 1:00.0)
> arrives, at which point I get:
> 
> [ 1663.732413] dmar: DMAR:[DMA Write] Request device [00:03.0] fault addr fffa0000 
> [ 1663.732413] DMAR:[fault reason 02] Present bit in context entry is clear
> 
> I would have expected request device 01:00.0 for this.
> It is not clear to me yet if this is a weakness of the implementation of
> ioh3420 or the iommu. Just wanted to let you know right away in case you
> can shed some light to it or it is an easy fix,
> 
> The device uses pci_dma_rw with itself as device pointer.

To verify my hypothesis: with this rude hack my device now works much
better:

@@ -774,6 +780,8 @@ static void iommu_translate(VTDAddressSpace *vtd_as,
int bus_num, int devfn,
         is_fpd_set = ce.lo & VTD_CONTEXT_ENTRY_FPD;
     } else {
         ret_fr = dev_to_context_entry(s, bus_num, devfn, &ce);
+        if (ret_fr)
+            ret_fr = dev_to_context_entry(s, 1, 0, &ce);
         is_fpd_set = ce.lo & VTD_CONTEXT_ENTRY_FPD;
         if (ret_fr) {
             ret_fr = -ret_fr;

Looking at how things look on hardware, multiple devices often receive
overlapping DMA address ranges for different physical addresses.

So if I understand the way this works, every requester ID would also
need to have it's own unique VTDAddressSpace, as each pci
device/function sees a unique DMA address space..

Knut

  reply	other threads:[~2014-08-15 11:15 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-11  7:04 [Qemu-devel] [PATCH v3 0/5] intel-iommu: introduce Intel IOMMU (VT-d) emulation to q35 chipset Le Tan
2014-08-11  7:04 ` [Qemu-devel] [PATCH v3 1/5] iommu: add is_write as a parameter to the translate function of MemoryRegionIOMMUOps Le Tan
2014-08-11  7:04 ` [Qemu-devel] [PATCH v3 2/5] intel-iommu: introduce Intel IOMMU (VT-d) emulation Le Tan
2014-08-12  7:34   ` Jan Kiszka
2014-08-12  9:04     ` Le Tan
2014-08-14 11:03   ` Michael S. Tsirkin
2014-08-11  7:05 ` [Qemu-devel] [PATCH v3 3/5] intel-iommu: add DMAR table to ACPI tables Le Tan
2014-08-14 11:06   ` Michael S. Tsirkin
2014-08-14 11:36     ` Jan Kiszka
2014-08-14 11:43       ` Michael S. Tsirkin
2014-08-14 11:51         ` Jan Kiszka
2014-08-14 11:53           ` Le Tan
2014-08-14 12:04             ` Michael S. Tsirkin
2014-08-14 11:44       ` Michael S. Tsirkin
2014-08-14 11:37     ` Le Tan
2014-08-11  7:05 ` [Qemu-devel] [PATCH v3 4/5] intel-iommu: add Intel IOMMU emulation to q35 and add a machine option "iommu" as a switch Le Tan
2014-08-14 11:12   ` Michael S. Tsirkin
2014-08-14 11:33     ` Le Tan
2014-08-14 11:35       ` Michael S. Tsirkin
2014-08-14 11:39         ` Le Tan
2014-08-11  7:05 ` [Qemu-devel] [PATCH v3 5/5] intel-iommu: add supports for queued invalidation interface Le Tan
2014-08-14 11:15 ` [Qemu-devel] [PATCH v3 0/5] intel-iommu: introduce Intel IOMMU (VT-d) emulation to q35 chipset Michael S. Tsirkin
2014-08-14 12:10   ` Jan Kiszka
2014-08-15  4:42     ` Knut Omang
2014-08-15 11:15       ` Knut Omang [this message]
2014-08-15 11:37         ` Le Tan
2014-08-16  7:54           ` Knut Omang
2014-08-16  8:45             ` Jan Kiszka
2014-08-16  8:47               ` Jan Kiszka
2014-08-18 16:34                 ` Knut Omang
2014-08-18 18:50                   ` Jan Kiszka
2014-08-19  4:08                     ` Knut Omang
2014-08-19  4:18                       ` Knut Omang
2014-08-19  5:36                       ` Jan Kiszka

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=1408101325.14053.41.camel@abi.no.oracle.com \
    --to=knut.omang@oracle.com \
    --cc=alex.williamson@redhat.com \
    --cc=aliguori@amazon.com \
    --cc=jan.kiszka@web.de \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=sw@weilnetz.de \
    --cc=tamlokveer@gmail.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;
as well as URLs for NNTP newsgroup(s).