[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 15/19] exec: store RAMBlock pointer into memory regio
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 15/19] exec: store RAMBlock pointer into memory region |
Date: |
Wed, 24 Feb 2016 14:27:37 +0100 |
From: Gonglei <address@hidden>
Each RAM memory region has a unique corresponding RAMBlock.
In the current realization, the memory region only stored
the ram_addr which means the offset of RAM address space,
We need to qurey the global ram.list to find the ram block
by ram_addr if we want to get the ram block, which is very
expensive.
Now, we store the RAMBlock pointer into memory region
structure. So, if we know the mr, we can easily get the
RAMBlock.
Signed-off-by: Gonglei <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
exec.c | 2 ++
include/exec/memory.h | 2 ++
memory.c | 1 +
3 files changed, 5 insertions(+)
diff --git a/exec.c b/exec.c
index 1f24500..4c0114a 100644
--- a/exec.c
+++ b/exec.c
@@ -1717,6 +1717,8 @@ ram_addr_t qemu_ram_alloc_internal(ram_addr_t size,
ram_addr_t max_size,
error_propagate(errp, local_err);
return -1;
}
+
+ mr->ram_block = new_block;
return addr;
}
diff --git a/include/exec/memory.h b/include/exec/memory.h
index c92734a..4025729 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -156,6 +156,7 @@ struct MemoryRegionIOMMUOps {
typedef struct CoalescedMemoryRange CoalescedMemoryRange;
typedef struct MemoryRegionIoeventfd MemoryRegionIoeventfd;
+typedef struct RAMBlock RAMBlock;
struct MemoryRegion {
Object parent_obj;
@@ -172,6 +173,7 @@ struct MemoryRegion {
bool global_locking;
uint8_t dirty_log_mask;
ram_addr_t ram_addr;
+ RAMBlock *ram_block;
Object *owner;
const MemoryRegionIOMMUOps *iommu_ops;
diff --git a/memory.c b/memory.c
index 09041ed..b4451dd 100644
--- a/memory.c
+++ b/memory.c
@@ -912,6 +912,7 @@ void memory_region_init(MemoryRegion *mr,
}
mr->name = g_strdup(name);
mr->owner = owner;
+ mr->ram_block = NULL;
if (name) {
char *escaped_name = memory_region_escape_name(name);
--
2.5.0
- [Qemu-devel] [PULL 06/19] dump-guest-memory: add dump_in_progress() helper function, (continued)
- [Qemu-devel] [PULL 06/19] dump-guest-memory: add dump_in_progress() helper function, Paolo Bonzini, 2016/02/24
- [Qemu-devel] [PULL 10/19] DumpState: adding total_size and written_size fields, Paolo Bonzini, 2016/02/24
- [Qemu-devel] [PULL 12/19] Dump: add hmp command "info dump", Paolo Bonzini, 2016/02/24
- [Qemu-devel] [PULL 11/19] Dump: add qmp command "query-dump", Paolo Bonzini, 2016/02/24
- [Qemu-devel] [PULL 14/19] log: Redirect stderr to logfile if deamonized, Paolo Bonzini, 2016/02/24
- [Qemu-devel] [PULL 13/19] dump-guest-memory: add qmp event DUMP_COMPLETED, Paolo Bonzini, 2016/02/24
- [Qemu-devel] [PULL 16/19] memory: optimize qemu_get_ram_ptr and qemu_ram_ptr_length, Paolo Bonzini, 2016/02/24
- [Qemu-devel] [PULL 17/19] memory: Remove unreachable return statement, Paolo Bonzini, 2016/02/24
- [Qemu-devel] [PULL 18/19] chardev: Properly initialize ChardevCommon components, Paolo Bonzini, 2016/02/24
- [Qemu-devel] [PULL 15/19] exec: store RAMBlock pointer into memory region,
Paolo Bonzini <=
- [Qemu-devel] [PULL 19/19] target-i386: fix confusion in xcr0 bit position vs. mask, Paolo Bonzini, 2016/02/24
- Re: [Qemu-devel] [PULL 00/19] Misc changes for 2016-02-24, Peter Maydell, 2016/02/25