From: Anthony Liguori <anthony@codemonkey.ws>
To: Avi Kivity <avi@redhat.com>
Cc: Blue Swirl <blauwirbel@gmail.com>,
qemu-devel@nongnu.org, Andrea Arcangeli <aarcange@redhat.com>,
chrisw@redhat.com, kvm@vger.kernel.org,
Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [Qemu-devel] Re: [PATCH 2 of 5] add can_dma/post_dma for direct IO
Date: Tue, 16 Dec 2008 11:48:01 -0600 [thread overview]
Message-ID: <4947E9D1.8060007@codemonkey.ws> (raw)
In-Reply-To: <4947E0D1.6060704@redhat.com>
Avi Kivity wrote:
> Blue Swirl wrote:
>>> I don't understand. It's not a device that needs bouncing, it's a
>>> particular transfer. This could be either due to the transfer
>>> targeting
>>> mmio, or due to the transfer requiring a transformation.
>>>
>>
>> Should the bouncing be something more much complex, for example
>> negotiated between the devices? Or maybe the devices set up a
>> transforming and non-transforming channel (which the other end should
>> be able to transform some more) and use them as needed?
>>
>
> Yes. We already have two cases:
>
> - may do partial request: useful for block storage where requests can
> be huge
> - need full request: networking, where you can't send or receive half
> a packet; on the other hand, packets are small (even with tso)
>
> You're adding a third case, always bounce, when the data undergoes a
> transformation which can't happen in-place.
IMHO, IOMMU translation is distinct from mapping/data transformation. I
would think the IOMMU translation API would be different in that it took
a physical address and returned a physical address.
The IOMMU DMA API (which could transform data potentially) should return
a virtual address and data a physical address. In the normal case
(non-transforming IOMMU), it should just fall-through to CPU DMA API
(which is just map/unmap).
The PCI DMA API would normally fall through to the IOMMU DMA API.
So we would have:
PCI DMA map(addr):
if IOMMU:
return IOMMU DMA map(addr)
return CPU DMA map(addr)
IOMMU DMA map(addr):
new_address = IOMMU translate(addr)
if transform:
return IOMMU byte-swap map(addr)
return CPU DMA map(addr)
Regards,
Anthony Liguori
next prev parent reply other threads:[~2008-12-16 17:48 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-12 18:16 [PATCH 0 of 5] dma api v3 Andrea Arcangeli
2008-12-12 18:16 ` [PATCH 1 of 5] fix cpu_physical_memory len Andrea Arcangeli
2008-12-12 19:06 ` Anthony Liguori
2008-12-12 19:26 ` Andrea Arcangeli
2008-12-12 18:16 ` [PATCH 2 of 5] add can_dma/post_dma for direct IO Andrea Arcangeli
2008-12-12 19:00 ` [Qemu-devel] " Blue Swirl
2008-12-12 19:18 ` Anthony Liguori
2008-12-12 20:05 ` Blue Swirl
2008-12-12 20:10 ` Anthony Liguori
2008-12-12 19:15 ` Anthony Liguori
2008-12-12 19:37 ` Andrea Arcangeli
2008-12-12 20:09 ` Anthony Liguori
2008-12-12 20:25 ` Gerd Hoffmann
2008-12-12 19:39 ` Anthony Liguori
2008-12-13 9:22 ` [Qemu-devel] " Avi Kivity
2008-12-13 16:45 ` Anthony Liguori
2008-12-13 19:48 ` Avi Kivity
2008-12-13 21:07 ` Anthony Liguori
2008-12-14 6:03 ` Avi Kivity
2008-12-14 19:10 ` Anthony Liguori
2008-12-14 19:49 ` Avi Kivity
2008-12-14 23:08 ` Anthony Liguori
2008-12-15 0:57 ` Paul Brook
2008-12-15 2:09 ` Anthony Liguori
2008-12-15 6:23 ` Avi Kivity
2008-12-15 18:35 ` Blue Swirl
2008-12-15 22:06 ` Anthony Liguori
2008-12-16 9:41 ` Avi Kivity
2008-12-16 16:55 ` Blue Swirl
2008-12-16 17:09 ` Avi Kivity
2008-12-16 17:48 ` Anthony Liguori [this message]
2008-12-16 18:11 ` Blue Swirl
2008-12-16 15:57 ` Blue Swirl
2008-12-16 16:29 ` Paul Brook
2008-12-16 16:35 ` Blue Swirl
2008-12-14 17:30 ` Jamie Lokier
2008-12-13 14:39 ` Andrea Arcangeli
2008-12-13 16:46 ` Anthony Liguori
2008-12-13 16:53 ` Andrea Arcangeli
2008-12-13 21:11 ` Anthony Liguori
2008-12-14 16:47 ` Andrea Arcangeli
2008-12-14 17:01 ` Avi Kivity
2008-12-14 17:15 ` Andrea Arcangeli
2008-12-14 19:59 ` Avi Kivity
2008-12-22 16:44 ` [Qemu-devel] " Ian Jackson
2008-12-22 19:44 ` Avi Kivity
2008-12-23 0:03 ` Thiemo Seufer
2008-12-23 1:02 ` Andrea Arcangeli
2008-12-23 17:31 ` Avi Kivity
2008-12-22 19:46 ` Avi Kivity
2009-01-05 10:27 ` Gerd Hoffmann
2008-12-13 22:47 ` Anthony Liguori
2008-12-14 6:07 ` Avi Kivity
2008-12-12 18:16 ` [PATCH 3 of 5] rename dma.c to isa_dma.c Andrea Arcangeli
2008-12-12 18:16 ` [PATCH 4 of 5] dma api Andrea Arcangeli
2008-12-12 18:55 ` [Qemu-devel] " Blue Swirl
2008-12-12 18:16 ` [PATCH 5 of 5] bdrv_aio_readv/writev Andrea Arcangeli
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=4947E9D1.8060007@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=aarcange@redhat.com \
--cc=avi@redhat.com \
--cc=blauwirbel@gmail.com \
--cc=chrisw@redhat.com \
--cc=kraxel@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=qemu-devel@nongnu.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.