[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v1 1/3] add memory_region_get_offset_within_address_
From: |
KONRAD Frederic |
Subject: |
[Qemu-devel] [PATCH v1 1/3] add memory_region_get_offset_within_address_space |
Date: |
Thu, 29 Jun 2017 11:28:51 +0200 |
This is helpful in the next patch to know if a rom is pointed by an alias.
Signed-off-by: KONRAD Frederic <address@hidden>
---
include/exec/memory.h | 10 ++++++++++
memory.c | 22 ++++++++++++++++++++--
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/include/exec/memory.h b/include/exec/memory.h
index 8503685..e342412 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -1270,6 +1270,16 @@ void memory_region_set_size(MemoryRegion *mr, uint64_t
size);
void memory_region_set_alias_offset(MemoryRegion *mr,
hwaddr offset);
+/*
+ * memory_region_get_offset_within_address_space: get the offset of a region
+ *
+ * Returns the offset of a region within its address space. @mr must be mapped
+ * to an #AddressSpace.
+ *
+ * @mr: the #MemoryRegion to check.
+ */
+hwaddr memory_region_get_offset_within_address_space(MemoryRegion *mr);
+
/**
* memory_region_present: checks if an address relative to a @container
* translates into #MemoryRegion within @container
diff --git a/memory.c b/memory.c
index 1044bba..2b7439b 100644
--- a/memory.c
+++ b/memory.c
@@ -598,11 +598,18 @@ static MemTxResult access_with_adjusted_size(hwaddr addr,
return r;
}
-static AddressSpace *memory_region_to_address_space(MemoryRegion *mr)
+static AddressSpace *memory_region_to_address_space(MemoryRegion *mr,
+ hwaddr *offset)
{
AddressSpace *as;
+ if (offset) {
+ *offset = 0;
+ }
while (mr->container) {
+ if (offset) {
+ *offset += mr->addr;
+ }
mr = mr->container;
}
QTAILQ_FOREACH(as, &address_spaces, address_spaces_link) {
@@ -613,6 +620,17 @@ static AddressSpace
*memory_region_to_address_space(MemoryRegion *mr)
return NULL;
}
+hwaddr memory_region_get_offset_within_address_space(MemoryRegion *mr)
+{
+ hwaddr offset;
+ AddressSpace *as;
+
+ as = memory_region_to_address_space(mr, &offset);
+ assert(as);
+
+ return offset;
+}
+
/* Render a memory region into the global view. Ranges in @view obscure
* ranges in @mr.
*/
@@ -2251,7 +2269,7 @@ static MemoryRegionSection
memory_region_find_rcu(MemoryRegion *mr,
addr += root->addr;
}
- as = memory_region_to_address_space(root);
+ as = memory_region_to_address_space(root, NULL);
if (!as) {
return ret;
}
--
1.8.3.1
[Qemu-devel] [PATCH v1 1/3] add memory_region_get_offset_within_address_space,
KONRAD Frederic <=
[Qemu-devel] [PATCH v1 3/3] armv7m_systick: abort instead of locking on a bad rate, KONRAD Frederic, 2017/06/29