qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] bypassing pci_dma_read() and pci_dma_write() ?


From: Luigi Rizzo
Subject: Re: [Qemu-devel] bypassing pci_dma_read() and pci_dma_write() ?
Date: Fri, 18 Jan 2013 17:33:29 +0100
User-agent: Mutt/1.4.2.3i

On Fri, Jan 18, 2013 at 05:14:02PM +0100, Paolo Bonzini wrote:
...
> > This relies on the assumption that the ring (which is contiguous in the
> > guest's physical address space) is also contiguous in the host's virtual
> > address space.  In principle the property could be easily verified once
> > the ring is set up.
> 
> IIRC, the amount of contiguous memory is written by address_space_map in
> the plen parameter.
> 
> In your case:
> 
> >     +       s->txring = address_space_map(pci_dma_context(&s->dev)->as,
> >     +                       base, &desclen, 0 /* is_write */);
> 
> that would be desclen on return from address_space_map.

ok thanks.

> > And of course, am i missing some important detail ?
> 
> Unfortunately yes.
> 
> First, host memory mappings could change (though they rarely do on PC).
>  The result of address_space_map is not guaranteed to be stable.  To
> avoid problems with this, however, you could use something like
> hw/dataplane/hostmem.c and even avoid address_space_map altogether.

I'll look into that. Hopefully there is something that i can
use as a notification that the mapping has changed...

> Second, that pci_dma_*() could have the addresses translated by an
> IOMMU.  virtio is documented to have "real" physical memory addresses,
> but this does not apply to other devices.

I see. I suppose the ability to have an iommu depends on the
specific NIC ? I am only planning to use the above shortcut for
e1000.

thanks a lot for the quick feedback
luigi



reply via email to

[Prev in Thread] Current Thread [Next in Thread]