On 13.03.2012, at 15:04, David Gibson wrote: > On Tue, Mar 13, 2012 at 02:56:47PM +0100, Alexander Graf wrote: >> >> On 13.03.2012, at 06:07, David Gibson wrote: >> >>> On Fri, Mar 09, 2012 at 11:23:01AM +0100, Paolo Bonzini wrote: >>>> Il 09/03/2012 06:01, David Gibson ha scritto: >>>>> This patch adds the basic infrastructure necessary to emulate an IOMMU >>>>> visible to the guest. The DMAContext structure is extended with >>>>> information and a callback describing the translation, and the various >>>>> DMA functions used by devices will now perform IOMMU translation using >>>>> this callback. >>>>> >>>>> Cc: Michael S. Tsirkin <m...@redhat.com> >>>>> Cc: Richard Henderson <r...@twiddle.net> >>>>> >>>>> Signed-off-by: Eduard - Gabriel Munteanu <eduard.munte...@linux360.ro> >>>>> Signed-off-by: David Gibson <da...@gibson.dropbear.id.au> >>>>> --- >>>>> configure | 12 ++++ >>>>> dma-helpers.c | 191 >>>>> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >>>>> dma.h | 125 +++++++++++++++++++++++++++++++------- >>>>> 3 files changed, 306 insertions(+), 22 deletions(-) >>>>> >>>>> diff --git a/configure b/configure >>>>> index a5eb832..e6fba2f 100755 >>>>> --- a/configure >>>>> +++ b/configure >>>>> @@ -138,6 +138,7 @@ linux_aio="" >>>>> cap_ng="" >>>>> attr="" >>>>> libattr="" >>>>> +iommu="yes" >>>>> xfs="" >>>>> >>>>> vhost_net="no" >>>>> @@ -784,6 +785,10 @@ for opt do >>>>> ;; >>>>> --enable-vhost-net) vhost_net="yes" >>>>> ;; >>>>> + --enable-iommu) iommu="yes" >>>>> + ;; >>>>> + --disable-iommu) iommu="no" >>>>> + ;; >>>> >>>> This need not be a configure option. Just enable it, or it will >>>> bitrot. >>> >>> I did wonder about that. I'd like to hear that suggested by more than >>> one person before I unconditionally add code which will impose an >>> overhead on all emulated DMAs. >> >> Maybe make it a target option? That way targets that want and need >> an IOMMU can compile the code in, while the others don't see >> performance hits. That would of course mean that we'd still have >> conditional code paths, but at least they wouldn't bitrot, as >> building multiple targets means you'd build both paths. > > Heh, yeah, so I tried that way back. It's problematic, unfortunately, > as it would require pulling a number of things out of libhw and back > into target dependent code.
Hrm. How about measuring the performance overhead then? Maybe it's negligible? Alex