Statistics
| Branch: | Revision:

root / memory.c @ a22f123c

History | View | Annotate | Download (36.4 kB)

# Date Author Comment
563ea489 08/22/2011 07:29 pm Richard Henderson

memory: Fix old_portio vs non-zero offset

The legacy functions that we're wrapping expect that offset
to be included in the register. Indeed, they generally
expect the absolute address and then mask off the "high" bits.

The FDC is the first converted device with a non-zero offset....

a5e1cbc8 08/22/2011 07:14 pm Anthony Liguori

memory: temporarily suppress the subregion collision warning

After 312b4234, the APIC and PCI devices are colliding with each other. This
is harmless in practice because the APIC accesses are special cased and never
make there way onto the bus.

Avi is working on a proper fix, but until that's ready, avoid printing the...

164a4dcd 08/22/2011 02:27 am Avi Kivity

memory: abstract cracking of write access ops into a function

The memory API automatically cracks large reads and writes into smaller
ones when needed. Factor out this mechanism, which is now duplicated between
memory reads and memory writes, into a function....

3a130f4e 08/22/2011 02:27 am Avi Kivity

memory: crack wide ioport accesses into smaller ones when needed

The memory API supports cracking wide accesses into narrower ones
when needed; but this was no implemented for the pio address space,
causing lsi53c895a's IO BAR to malfunction.

Fix by correctly cracking wide accesses when needed....

7267c094 08/21/2011 07:01 am Anthony Liguori

Use glib memory allocation and free functions

qemu_malloc/qemu_free no longer exist after this commit.

Signed-off-by: Anthony Liguori <>

d0a9b5bc 08/12/2011 04:31 pm Avi Kivity

memory: add API for creating ROM/device regions

ROM/device regions act as mapped RAM for reads, can I/O memory for
writes. This allow emulation of flash devices.

Signed-off-by: Avi Kivity <>
Signed-off-by: Anthony Liguori <>

545e92e0 08/12/2011 04:31 pm Avi Kivity

memory: reclaim resources when a memory region is destroyed for good

Signed-off-by: Avi Kivity <>
Signed-off-by: Anthony Liguori <>

39b796f2 08/05/2011 06:57 pm Avi Kivity

memory: synchronize dirty bitmap before unmapping a range

When a range is being unmapped, ask accelerators (e.g. kvm) to synchronize the
dirty bitmap to avoid losing information forever.

Fixes grub2 screen update.

Signed-off-by: Avi Kivity <>...

8417cebf 08/05/2011 06:57 pm Avi Kivity

memory: use signed arithmetic

When trying to map an alias of a ram region, where the alias starts at
address A and we map it into address B, and A > B, we had an arithmetic
underflow. Because we use unsigned arithmetic, the underflow converted
into a large number which failed addrrange_intersects() tests....

14a3c10a 07/29/2011 04:25 pm Avi Kivity

memory: rename MemoryRegion::has_ram_addr to ::terminates

I/O regions will not have ram_addrs, so this is a better name.

Reviewed-by: Anthony Liguori <>
Signed-off-by: Avi Kivity <>
Signed-off-by: Anthony Liguori <>

16ef61c9 07/29/2011 04:25 pm Avi Kivity

memory: late initialization of ram_addr

For non-RAM memory regions, we cannot tell whether this is an I/O region
or an MMIO region. Since the qemu backing registration is different for
the two, we have to defer initialization until we know which address...

658b2224 07/29/2011 04:25 pm Avi Kivity

memory: I/O address space support

Allow registering I/O ports via the same mechanism as mmio ranges.

Reviewed-by: Anthony Liguori <>
Signed-off-by: Avi Kivity <>
Signed-off-by: Anthony Liguori <>

627a0e90 07/29/2011 04:25 pm Avi Kivity

memory: add backward compatibility for old portio registration

Reviewed-by: Anthony Liguori <>
Signed-off-by: Avi Kivity <>
Signed-off-by: Anthony Liguori <>

74901c3b 07/29/2011 04:25 pm Avi Kivity

memory: add backward compatibility for old mmio registration

This eases the transition to the new API.

Reviewed-by: Anthony Liguori <>
Signed-off-by: Avi Kivity <>
Signed-off-by: Anthony Liguori <>

3e9d69e7 07/29/2011 04:25 pm Avi Kivity

memory: add ioeventfd support

As with the rest of the memory API, the caller associates an eventfd
with an address, and the memory API takes care of registering or
unregistering when the address is made visible or invisible to the
guest.

Signed-off-by: Avi Kivity <>...

b8af1afb 07/29/2011 04:25 pm Avi Kivity

memory: separate building the final memory map into two steps

Instead of adding and deleting regions in one pass, do a delete
pass followed by an add pass. This fixes the following case:

from:
0x0000-0x0fff ram (a1)
0x1000-0x1fff mmio (a2)
0x2000-0x2fff ram (a3)...

4ef4db86 07/29/2011 04:25 pm Avi Kivity

memory: transaction API

Allow changes to the memory hierarchy to be accumulated and
made visible all at once. This reduces computational effort,
especially when an accelerator (e.g. kvm) is involved.

Useful when a single register update causes multiple changes...

093bc2cd 07/29/2011 04:25 pm Avi Kivity

Hierarchical memory region API

The memory API separates the attributes of a memory region (its size, how
reads or writes are handled, dirty logging, and coalescing) from where it
is mapped and whether it is enabled. This allows a device to configure
a memory region once, then hand it off to its parent bus to map it according...

5a583347 07/29/2011 04:25 pm Avi Kivity

memory: implement dirty tracking

Currently dirty tracking is implemented by passing through
all calls to the underlying cpu_physical_memory_*() calls.

Reviewed-by: Anthony Liguori <>
Signed-off-by: Avi Kivity <>
Signed-off-by: Anthony Liguori <>

3d8e6bf9 07/29/2011 04:25 pm Avi Kivity

memory: merge adjacent segments of a single memory region

Simple implementations of memory routers, for example the Cirrus VGA memory banks
or the 440FX PAM registers can generate adjacent memory regions which are contiguous.
Detect these and merge them; this saves kvm memory slots and shortens lookup times....

1c0ffa58 07/29/2011 04:25 pm Avi Kivity

Internal interfaces for memory API

get_system_memory() provides the root of the memory hierarchy.

This interface is intended to be private between memory.c and exec.c.
If this file is included elsewhere, it should be regarded as a bug (or
TODO item). However, it will be temporarily needed for the conversion...

cc31e6e7 07/29/2011 04:25 pm Avi Kivity

memory: abstract address space operations

Prepare for multiple address space support by abstracting away the details
of registering a memory range with qemu's flat representation into an
AddressSpace object.

Note operations which are memory specific are not abstracted, since they will...