[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 08/35] memory: extract flat_range_coalesced_io_{del,
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 08/35] memory: extract flat_range_coalesced_io_{del, add} |
Date: |
Tue, 18 Dec 2018 00:16:33 +0100 |
Extract two new functions from memory_region_update_coalesced_range_as.
To avoid duplication in the creation of the MemoryRegionSection, use
MEMORY_LISTENER_UPDATE_REGION instead of MEMORY_LISTENER_CALL
to invoke the listener callback.
Signed-off-by: Paolo Bonzini <address@hidden>
---
memory.c | 53 +++++++++++++++++++++++++++++------------------------
1 file changed, 29 insertions(+), 24 deletions(-)
diff --git a/memory.c b/memory.c
index d14c6dec1d..119b6e46d5 100644
--- a/memory.c
+++ b/memory.c
@@ -850,6 +850,33 @@ static void address_space_update_ioeventfds(AddressSpace
*as)
flatview_unref(view);
}
+static void flat_range_coalesced_io_del(FlatRange *fr, AddressSpace *as)
+{
+ MEMORY_LISTENER_UPDATE_REGION(fr, as, Reverse, coalesced_io_del,
+ int128_get64(fr->addr.start),
+ int128_get64(fr->addr.size));
+}
+
+static void flat_range_coalesced_io_add(FlatRange *fr, AddressSpace *as)
+{
+ MemoryRegion *mr = fr->mr;
+ CoalescedMemoryRange *cmr;
+ AddrRange tmp;
+
+ QTAILQ_FOREACH(cmr, &mr->coalesced, link) {
+ tmp = addrrange_shift(cmr->addr,
+ int128_sub(fr->addr.start,
+ int128_make64(fr->offset_in_region)));
+ if (!addrrange_intersects(tmp, fr->addr)) {
+ continue;
+ }
+ tmp = addrrange_intersection(tmp, fr->addr);
+ MEMORY_LISTENER_UPDATE_REGION(fr, as, Forward, coalesced_io_add,
+ int128_get64(tmp.start),
+ int128_get64(tmp.size));
+ }
+}
+
static void address_space_update_topology_pass(AddressSpace *as,
const FlatView *old_view,
const FlatView *new_view,
@@ -2136,34 +2163,12 @@ static void
memory_region_update_coalesced_range_as(MemoryRegion *mr, AddressSpa
{
FlatView *view;
FlatRange *fr;
- CoalescedMemoryRange *cmr;
- AddrRange tmp;
- MemoryRegionSection section;
view = address_space_get_flatview(as);
FOR_EACH_FLAT_RANGE(fr, view) {
if (fr->mr == mr) {
- section = (MemoryRegionSection) {
- .fv = view,
- .offset_within_address_space = int128_get64(fr->addr.start),
- .size = fr->addr.size,
- };
-
- MEMORY_LISTENER_CALL(as, coalesced_io_del, Reverse, §ion,
- int128_get64(fr->addr.start),
- int128_get64(fr->addr.size));
- QTAILQ_FOREACH(cmr, &mr->coalesced, link) {
- tmp = addrrange_shift(cmr->addr,
- int128_sub(fr->addr.start,
-
int128_make64(fr->offset_in_region)));
- if (!addrrange_intersects(tmp, fr->addr)) {
- continue;
- }
- tmp = addrrange_intersection(tmp, fr->addr);
- MEMORY_LISTENER_CALL(as, coalesced_io_add, Forward, §ion,
- int128_get64(tmp.start),
- int128_get64(tmp.size));
- }
+ flat_range_coalesced_io_del(fr, as);
+ flat_range_coalesced_io_add(fr, as);
}
}
flatview_unref(view);
--
2.20.1
- [Qemu-devel] [PULL 00/35] Misc patches for 2018-12-18, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 01/35] accel: Improve selection of the default accelerator, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 02/35] vhost-user-bridge: fix "unknown type name" compilation error, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 03/35] checkpatch: fix premature exit when no input or --mailback, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 05/35] checkpatch: improve handling of multiple patches or files, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 04/35] checkpatch: check Signed-off-by in --mailback mode, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 06/35] checkpatch: colorize output to terminal, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 07/35] pam: wrap MemoryRegion initialization in a transaction, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 08/35] memory: extract flat_range_coalesced_io_{del, add},
Paolo Bonzini <=
- [Qemu-devel] [PULL 09/35] memory: avoid unnecessary coalesced_io_del operations, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 10/35] memory: update coalesced_range on transaction_commit, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 11/35] hax: Support for Linux hosts, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 13/35] block/iscsi: take iscsilun->mutex in iscsi_timed_check_events(), Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 12/35] block/iscsi: drop unused IscsiAIOCB->buf field, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 15/35] block/iscsi: cancel libiscsi task when ABORT TASK TMF completes, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 16/35] esp-pci: Fix status register write erase control, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 14/35] block/iscsi: fix ioctl cancel use-after-free, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 17/35] scsi: esp: Defer command completion until previous interrupts have been handled, Paolo Bonzini, 2018/12/17
- [Qemu-devel] [PULL 18/35] build-sys: don't include windows.h, osdep.h does it, Paolo Bonzini, 2018/12/17