[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v1 14/22] memory: manage coalesced mmio via a Memo
From: |
Avi Kivity |
Subject: |
Re: [Qemu-devel] [RFC v1 14/22] memory: manage coalesced mmio via a MemoryListener |
Date: |
Thu, 04 Oct 2012 16:33:32 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120911 Thunderbird/15.0.1 |
On 10/04/2012 04:08 PM, Anthony Liguori wrote:
> Avi Kivity <address@hidden> writes:
>
>> Instead of calling a global function on coalesced mmio changes, which
>> routes the call to kvm if enabled, add coalesced mmio hooks to
>> MemoryListener and make kvm use that instead.
>>
>> The motivation is support for multiple address spaces (which means we
>> we need to filter the call on the right address space) but the result
>> is cleaner as well.
>>
>> -int kvm_coalesce_mmio_region(target_phys_addr_t start, ram_addr_t size)
>> +static void kvm_coalesce_mmio_region(MemoryListener *listener,
>> + MemoryRegionSection *secion,
>> + target_phys_addr_t start, ram_addr_t
>> size)
>> {
>> - int ret = -ENOSYS;
>> KVMState *s = kvm_state;
>>
>> if (s->coalesced_mmio) {
>> @@ -466,15 +467,14 @@ int kvm_coalesce_mmio_region(target_phys_addr_t start,
>> ram_addr_t size)
>> zone.size = size;
>> zone.pad = 0;
>>
>> - ret = kvm_vm_ioctl(s, KVM_REGISTER_COALESCED_MMIO, &zone);
>> + (void)kvm_vm_ioctl(s, KVM_REGISTER_COALESCED_MMIO, &zone);
>
> g_assert on error instead of ignoring it.
I'll do that in a separate patch, since the existing behaviour is to
ignore the error. If errors really do happen, I don't want a
refactoring patch to trigger them.
>>
>> diff --git a/memory.c b/memory.c
>> index efefcb8..eb75349 100644
>> --- a/memory.c
>> +++ b/memory.c
>> @@ -1130,11 +1130,19 @@ static void
>> memory_region_update_coalesced_range_as(MemoryRegion *mr, AddressSpa
>> FlatRange *fr;
>> CoalescedMemoryRange *cmr;
>> AddrRange tmp;
>> + MemoryRegionSection section;
>>
>> FOR_EACH_FLAT_RANGE(fr, as->current_map) {
>> if (fr->mr == mr) {
>> - qemu_unregister_coalesced_mmio(int128_get64(fr->addr.start),
>> - int128_get64(fr->addr.size));
>> + section = (MemoryRegionSection) {
>> + .address_space = as->root,
>> + .offset_within_address_space = int128_get64(fr->addr.start),
>> + .size = int128_get64(fr->addr.size),
>> + };
>
> I think this is a bit too clever. You can move the definition of
> section into this block with a zero initializer, and then just set the
> fields directly. You'll end up losing 2 lines of code in the process
> too.
I happen to like it (I dislike repeating the variable name each line)
but have no problem changing it.
--
error compiling committee.c: too many arguments to function
- Re: [Qemu-devel] [RFC v1 08/22] memory: provide defaults for MemoryListener operations, (continued)
- [Qemu-devel] [RFC v1 13/22] xen: use new MEMORY_LISTENER_DEFAULT_OPS, Avi Kivity, 2012/10/03
- [Qemu-devel] [RFC v1 10/22] vfio: use new MEMORY_LISTENER_DEFAULT_OPS, Avi Kivity, 2012/10/03
- [Qemu-devel] [RFC v1 11/22] xen_pt: use new MEMORY_LISTENER_DEFAULT_OPS, Avi Kivity, 2012/10/03
- [Qemu-devel] [RFC v1 12/22] kvm: use new MEMORY_LISTENER_DEFAULT_OPS, Avi Kivity, 2012/10/03
- [Qemu-devel] [RFC v1 15/22] memory: move address_space_memory and address_space_io out of memory core, Avi Kivity, 2012/10/03
- [Qemu-devel] [RFC v1 14/22] memory: manage coalesced mmio via a MemoryListener, Avi Kivity, 2012/10/03
- [Qemu-devel] [RFC v1 16/22] memory: move tcg flush into a tcg memory listener, Avi Kivity, 2012/10/03
- [Qemu-devel] [RFC v1 21/22] pci: give each device its own address space, Avi Kivity, 2012/10/03
- [Qemu-devel] [RFC v1 22/22] pci: honor PCI_COMMAND_MASTER, Avi Kivity, 2012/10/03
- [Qemu-devel] [RFC v1 20/22] dma: make dma access its own address space, Avi Kivity, 2012/10/03
- [Qemu-devel] [RFC v1 19/22] memory: per-AddressSpace dispatch, Avi Kivity, 2012/10/03