From: David Gibson <david@gibson.dropbear.id.au>
To: qemu-devel@nongnu.org, eduard.munteanu@linux360.ro, rth@twiddle.net
Subject: [Qemu-devel] Yet another take on a generic dma/iommu layer
Date: Fri, 3 Jun 2011 01:12:28 +1000 [thread overview]
Message-ID: <1307027562-3460-1-git-send-email-david@gibson.dropbear.id.au> (raw)
Here is my variant on Eduard - Gabriel Munteanu's patches to add a
DMA/IOMMU layer, this one is expanded to allow it to support the PAPR
TCE mechanism. At present, we implement PAPR TCEs directly in the
PAPR virtual IO bus layer, the last patch of this series reworks the
code to implement it through the generic DMA layer. That will make
life easier when we come to implement PCI for the pseries machine.
Apart from that, I've significantly reworked how the IOMMU data is
accessed from the qdev. The DMADevice structure is gone - I saw no
point to it. Instead, the DeviceState contains a pointer directly to
a DmaMmu structure. NULL here indicates no IOMMU, so DMAs go directl
to guest physical addresses. All the DMA R/W helper functions take a
DeviceState * and reach the DmaMmu from there.
The DmaMmu represents a single DMA context / address space, it could
be seperate for each device, or shared between several devices,
depending on whether a particular IOMMU implements independent
translation for each device, or a single shared DMA address space for
(e.g.) a whole bus. From the DmaMmu structure, IOMMU specific state
information can be reached via upcasting.
For PCI IOMMUS, the pci bus structure references a PCIBusIOMMU
structure. That contains a single 'new_device' callback which obtains
the appropriate DmaMmu context for a given PCI device. That could
either be a pointer to a fixed existing DmaMmu, if the IOMMU
implements a single shared address space (the AMD IOMMU uses this), or
it could allocate a new DmaMmu context if the IOMMU provides a
separate DMA address space for each device.
next reply other threads:[~2011-06-02 15:13 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-02 15:12 David Gibson [this message]
2011-06-02 15:12 ` [Qemu-devel] [PATCH 01/14] Generic DMA memory access interface David Gibson
2011-06-02 16:43 ` Richard Henderson
2011-06-02 17:35 ` Eduard - Gabriel Munteanu
2011-06-02 19:28 ` Richard Henderson
2011-06-02 19:59 ` Eduard - Gabriel Munteanu
2011-06-02 15:12 ` [Qemu-devel] [PATCH 02/14] pci: add IOMMU support via the generic DMA layer David Gibson
2011-06-02 16:49 ` Richard Henderson
2011-06-02 15:12 ` [Qemu-devel] [PATCH 03/14] AMD IOMMU emulation David Gibson
2011-06-02 15:12 ` [Qemu-devel] [PATCH 04/14] ide: use the DMA memory access interface for PCI IDE controllers David Gibson
2011-06-02 15:12 ` [Qemu-devel] [PATCH 05/14] rtl8139: use the DMA memory access interface David Gibson
2011-06-02 15:12 ` [Qemu-devel] [PATCH 06/14] eepro100: " David Gibson
2011-06-02 15:12 ` [Qemu-devel] [PATCH 07/14] ac97: " David Gibson
2011-06-02 15:12 ` [Qemu-devel] [PATCH 08/14] es1370: " David Gibson
2011-06-02 15:12 ` [Qemu-devel] [PATCH 09/14] e1000: " David Gibson
2011-06-02 15:12 ` [Qemu-devel] [PATCH 10/14] lsi53c895a: " David Gibson
2011-06-02 15:12 ` [Qemu-devel] [PATCH 11/14] pcnet: " David Gibson
2011-06-02 15:12 ` [Qemu-devel] [PATCH 12/14] usb-uhci: " David Gibson
2011-06-02 15:12 ` [Qemu-devel] [PATCH 13/14] usb-ohci: " David Gibson
2011-06-02 15:12 ` [Qemu-devel] [PATCH 14/14] Make spapr tces use generic dma layer David Gibson
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=1307027562-3460-1-git-send-email-david@gibson.dropbear.id.au \
--to=david@gibson.dropbear.id.au \
--cc=eduard.munteanu@linux360.ro \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/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).