[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 62/66] exec: move listener from AddressSpaceDispatch
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 62/66] exec: move listener from AddressSpaceDispatch to AddressSpace |
Date: |
Thu, 4 Jul 2013 17:13:58 +0200 |
This will help having two copies of AddressSpaceDispatch during the
recreation of the radix tree (one being built, and one that is complete
and will be protected by RCU). We do not want to have to unregister and
re-register the listener.
Reviewed-by: Jan Kiszka <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
exec.c | 17 +++++++++--------
include/exec/memory.h | 2 ++
2 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/exec.c b/exec.c
index 598ac3a..2eb279c 100644
--- a/exec.c
+++ b/exec.c
@@ -93,7 +93,6 @@ struct AddressSpaceDispatch {
* The bottom level has pointers to MemoryRegionSections.
*/
PhysPageEntry phys_map;
- MemoryListener listener;
AddressSpace *as;
};
@@ -841,7 +840,8 @@ static void register_multipage(AddressSpaceDispatch *d,
static void mem_add(MemoryListener *listener, MemoryRegionSection *section)
{
- AddressSpaceDispatch *d = container_of(listener, AddressSpaceDispatch,
listener);
+ AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
+ AddressSpaceDispatch *d = as->dispatch;
MemoryRegionSection now = *section, remain = *section;
Int128 page_size = int128_make64(TARGET_PAGE_SIZE);
@@ -1703,7 +1703,8 @@ static void io_mem_init(void)
static void mem_begin(MemoryListener *listener)
{
- AddressSpaceDispatch *d = container_of(listener, AddressSpaceDispatch,
listener);
+ AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
+ AddressSpaceDispatch *d = as->dispatch;
d->phys_map.ptr = PHYS_MAP_NODE_NIL;
}
@@ -1772,22 +1773,22 @@ void address_space_init_dispatch(AddressSpace *as)
AddressSpaceDispatch *d = g_new(AddressSpaceDispatch, 1);
d->phys_map = (PhysPageEntry) { .ptr = PHYS_MAP_NODE_NIL, .is_leaf = 0 };
- d->listener = (MemoryListener) {
+ d->as = as;
+ as->dispatch = d;
+ as->dispatch_listener = (MemoryListener) {
.begin = mem_begin,
.region_add = mem_add,
.region_nop = mem_add,
.priority = 0,
};
- d->as = as;
- as->dispatch = d;
- memory_listener_register(&d->listener, as);
+ memory_listener_register(&as->dispatch_listener, as);
}
void address_space_destroy_dispatch(AddressSpace *as)
{
AddressSpaceDispatch *d = as->dispatch;
- memory_listener_unregister(&d->listener);
+ memory_listener_unregister(&as->dispatch_listener);
g_free(d);
as->dispatch = NULL;
}
diff --git a/include/exec/memory.h b/include/exec/memory.h
index 8355bdb..248c89b 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -209,6 +209,8 @@ struct AddressSpace {
int ioeventfd_nb;
struct MemoryRegionIoeventfd *ioeventfds;
struct AddressSpaceDispatch *dispatch;
+ MemoryListener dispatch_listener;
+
QTAILQ_ENTRY(AddressSpace) address_spaces_link;
};
--
1.8.1.4
- [Qemu-devel] [PATCH 50/66] hw/p*: pass owner to memory_region_init* functions, (continued)
- [Qemu-devel] [PATCH 50/66] hw/p*: pass owner to memory_region_init* functions, Paolo Bonzini, 2013/07/04
- [Qemu-devel] [PATCH 55/66] memory: access FlatView from a local variable, Paolo Bonzini, 2013/07/04
- [Qemu-devel] [PATCH 56/66] memory: use a new FlatView pointer on every topology update, Paolo Bonzini, 2013/07/04
- [Qemu-devel] [PATCH 54/66] add a header file for atomic operations, Paolo Bonzini, 2013/07/04
- [Qemu-devel] [PATCH 57/66] memory: add reference counting to FlatView, Paolo Bonzini, 2013/07/04
- [Qemu-devel] [PATCH 58/66] qom: Use atomics for object refcounting, Paolo Bonzini, 2013/07/04
- [Qemu-devel] [PATCH 59/66] exec: change well-known physical sections to macros, Paolo Bonzini, 2013/07/04
- [Qemu-devel] [PATCH 60/66] exec: separate current memory map from the one being built, Paolo Bonzini, 2013/07/04
- [Qemu-devel] [PATCH 61/66] memory: move MemoryListener declaration earlier, Paolo Bonzini, 2013/07/04
- [Qemu-devel] [PATCH 63/66] exec: separate current radix tree from the one being built, Paolo Bonzini, 2013/07/04
- [Qemu-devel] [PATCH 62/66] exec: move listener from AddressSpaceDispatch to AddressSpace,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 64/66] exec: put memory map in AddressSpaceDispatch, Paolo Bonzini, 2013/07/04
- [Qemu-devel] [PATCH 65/66] exec: remove cur_map, Paolo Bonzini, 2013/07/04
- [Qemu-devel] [PATCH 66/66] exec: change some APIs to take AddressSpaceDispatch, Paolo Bonzini, 2013/07/04
- [Qemu-devel] [PATCH 53/66] hw/[u-x]*: pass owner to memory_region_init* functions, Paolo Bonzini, 2013/07/04
- Re: [Qemu-devel] [PULL 00/66] Memory API changes for 1.6: ownership, I/O ports, RCU preparation, Paolo Bonzini, 2013/07/04
- [Qemu-devel] [PATCH 52/66] hw/t*: pass owner to memory_region_init* functions, Paolo Bonzini, 2013/07/04