[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 02/30] memory: use a new FlatView pointer on eve
From: |
Anthony Liguori |
Subject: |
Re: [Qemu-devel] [PATCH 02/30] memory: use a new FlatView pointer on every topology update |
Date: |
Fri, 28 Jun 2013 15:02:47 -0500 |
User-agent: |
Notmuch/0.15.2+77~g661dcf8 (http://notmuchmail.org) Emacs/23.3.1 (x86_64-pc-linux-gnu) |
Paolo Bonzini <address@hidden> writes:
> This is the first step towards converting as->current_map to
> RCU-style updates, where the FlatView updates run concurrently
> with uses of an old FlatView.
>
> Signed-off-by: Paolo Bonzini <address@hidden>
Reviewed-by: Anthony Liguori <address@hidden>
Regards,
Anthony Liguori
> ---
> memory.c | 34 ++++++++++++++++++----------------
> 1 file changed, 18 insertions(+), 16 deletions(-)
>
> diff --git a/memory.c b/memory.c
> index 1f44cd1..319894e 100644
> --- a/memory.c
> +++ b/memory.c
> @@ -276,6 +276,7 @@ static void flatview_destroy(FlatView *view)
> memory_region_unref(view->ranges[i].mr);
> }
> g_free(view->ranges);
> + g_free(view);
> }
>
> static bool can_merge(FlatRange *r1, FlatRange *r2)
> @@ -512,17 +513,18 @@ static void render_memory_region(FlatView *view,
> }
>
> /* Render a memory topology into a list of disjoint absolute ranges. */
> -static FlatView generate_memory_topology(MemoryRegion *mr)
> +static FlatView *generate_memory_topology(MemoryRegion *mr)
> {
> - FlatView view;
> + FlatView *view;
>
> - flatview_init(&view);
> + view = g_new(FlatView, 1);
> + flatview_init(view);
>
> if (mr) {
> - render_memory_region(&view, mr, int128_zero(),
> + render_memory_region(view, mr, int128_zero(),
> addrrange_make(int128_zero(), int128_2_64()),
> false);
> }
> - flatview_simplify(&view);
> + flatview_simplify(view);
>
> return view;
> }
> @@ -610,8 +612,8 @@ static void address_space_update_ioeventfds(AddressSpace
> *as)
> }
>
> static void address_space_update_topology_pass(AddressSpace *as,
> - FlatView old_view,
> - FlatView new_view,
> + const FlatView *old_view,
> + const FlatView *new_view,
> bool adding)
> {
> unsigned iold, inew;
> @@ -621,14 +623,14 @@ static void
> address_space_update_topology_pass(AddressSpace *as,
> * Kill ranges in the old map, and instantiate ranges in the new map.
> */
> iold = inew = 0;
> - while (iold < old_view.nr || inew < new_view.nr) {
> - if (iold < old_view.nr) {
> - frold = &old_view.ranges[iold];
> + while (iold < old_view->nr || inew < new_view->nr) {
> + if (iold < old_view->nr) {
> + frold = &old_view->ranges[iold];
> } else {
> frold = NULL;
> }
> - if (inew < new_view.nr) {
> - frnew = &new_view.ranges[inew];
> + if (inew < new_view->nr) {
> + frnew = &new_view->ranges[inew];
> } else {
> frnew = NULL;
> }
> @@ -674,14 +676,14 @@ static void
> address_space_update_topology_pass(AddressSpace *as,
>
> static void address_space_update_topology(AddressSpace *as)
> {
> - FlatView old_view = *as->current_map;
> - FlatView new_view = generate_memory_topology(as->root);
> + FlatView *old_view = as->current_map;
> + FlatView *new_view = generate_memory_topology(as->root);
>
> address_space_update_topology_pass(as, old_view, new_view, false);
> address_space_update_topology_pass(as, old_view, new_view, true);
>
> - *as->current_map = new_view;
> - flatview_destroy(&old_view);
> + as->current_map = new_view;
> + flatview_destroy(old_view);
> address_space_update_ioeventfds(as);
> }
>
> --
> 1.8.1.4
- [Qemu-devel] [PATCH 00/30] Memory API changes for 1.6: RCU-protected address space dispatch, Paolo Bonzini, 2013/06/28
- [Qemu-devel] [PATCH 01/30] memory: access FlatView from a local variable, Paolo Bonzini, 2013/06/28
- [Qemu-devel] [PATCH 02/30] memory: use a new FlatView pointer on every topology update, Paolo Bonzini, 2013/06/28
- Re: [Qemu-devel] [PATCH 02/30] memory: use a new FlatView pointer on every topology update,
Anthony Liguori <=
- [Qemu-devel] [PATCH 03/30] memory: add reference counting to FlatView, Paolo Bonzini, 2013/06/28
- [Qemu-devel] [PATCH 04/30] add a header file for atomic operations, Paolo Bonzini, 2013/06/28
- [Qemu-devel] [PATCH 05/30] exec: do not use qemu/tls.h, Paolo Bonzini, 2013/06/28
- [Qemu-devel] [PATCH 07/30] qemu-thread: add QemuEvent, Paolo Bonzini, 2013/06/28
- [Qemu-devel] [PATCH 06/30] qemu-thread: add TLS wrappers, Paolo Bonzini, 2013/06/28