qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Re: [PATCHv2 10/12] tap: add vhost/vhostfd options


From: Anthony Liguori
Subject: [Qemu-devel] Re: [PATCHv2 10/12] tap: add vhost/vhostfd options
Date: Tue, 02 Mar 2010 08:39:28 -0600
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091209 Fedora/3.0-4.fc12 Lightning/1.0pre Thunderbird/3.0

On 03/02/2010 08:33 AM, Paul Brook wrote:
I think this assumption is unsafe. There are machines where RAM mappings
can change. It's not uncommon for a chip select (i.e. physical memory
address region) to be switchable to several different sources, one of
which may be RAM.  I'm pretty sure this functionality is present (but not
actually implemented) on some of the current qemu targets.
But I presume this is more about switching a dim to point at a different
region in memory.  It's a rare event similar to memory hot plug.
Approximately that, yes. One use is to start with ROM at address zero, then
switch to RAM once you've initialised the DRAM controller (using a small
internal SRAM as a trampoline).

Either way, if there are platforms where we don't treat ram with the new
ram api, that's okay.

I agree that changing RAM mappings under an active DMA is a fairly
suspect thing to do. However I think we need to avoid cache mappings
between separate DMA transactions i.e. when the guest can know that no
DMA will occur, and safely remap things.
One thing I like about having a new ram api is it gives us a stronger
interface than what we have today.  Today, we don't have a strong
guarantee that mappings won't be changed during a DMA transaction.

With a new api, cpu_physical_memory_map() changes semantics.  It only
returns pointers for static ram mappings.  Everything else is bounced
which guarantees that an address can't change during DMA.
Doesn't this mean that only the initial RAM is directly DMA-able?

While memory hotplug(and unplug) may be an infrequent event, having the
majority of ram be hotplug seems much more likely.

Hotplug works fine for direct DMA'ing. map/unmap would maintain a reference count on the registered RAM region and hot unplug would not be allowed until that reference dropped to zero. For something like virtio, it means that the driver has to be unloaded in the guest before you hot unplug the region of memory if it happens to be using that region of memory for the ring storage.

The key difference is that these regions are created and destroyed rarely and in such a way that the destruction is visible to the guest.

If you compare that to IO memory, we currently flip IO memory's mappings dynamically without the guest really being aware (such as the VGA optimization). An API like this wouldn't work for IO memory today without some serious thinking about how to model this sort of thing.

Regards,

Anthony Liguori





reply via email to

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