From: Avi Kivity <avi@redhat.com>
To: qemu-devel@nongnu.org
Cc: kvm@vger.kernel.org
Subject: [Qemu-devel] [PATCH 1/3] memory: reclaim resources when a memory region is destroyed for good
Date: Mon, 8 Aug 2011 19:58:48 +0300 [thread overview]
Message-ID: <1312822730-9577-2-git-send-email-avi@redhat.com> (raw)
In-Reply-To: <1312822730-9577-1-git-send-email-avi@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
---
memory.c | 24 ++++++++++++++++++++++++
memory.h | 1 +
2 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/memory.c b/memory.c
index be891c6..5e3d966 100644
--- a/memory.c
+++ b/memory.c
@@ -661,6 +661,25 @@ void memory_region_transaction_commit(void)
memory_region_update_topology();
}
+static void memory_region_destructor_none(MemoryRegion *mr)
+{
+}
+
+static void memory_region_destructor_ram(MemoryRegion *mr)
+{
+ qemu_ram_free(mr->ram_addr);
+}
+
+static void memory_region_destructor_ram_from_ptr(MemoryRegion *mr)
+{
+ qemu_ram_free_from_ptr(mr->ram_addr);
+}
+
+static void memory_region_destructor_iomem(MemoryRegion *mr)
+{
+ cpu_unregister_io_memory(mr->ram_addr);
+}
+
void memory_region_init(MemoryRegion *mr,
const char *name,
uint64_t size)
@@ -671,6 +690,7 @@ void memory_region_init(MemoryRegion *mr,
mr->addr = 0;
mr->offset = 0;
mr->terminates = false;
+ mr->destructor = memory_region_destructor_none;
mr->priority = 0;
mr->may_overlap = false;
mr->alias = NULL;
@@ -833,6 +853,7 @@ static void memory_region_prepare_ram_addr(MemoryRegion *mr)
return;
}
+ mr->destructor = memory_region_destructor_iomem;
mr->ram_addr = cpu_register_io_memory(memory_region_read_thunk,
memory_region_write_thunk,
mr,
@@ -860,6 +881,7 @@ void memory_region_init_ram(MemoryRegion *mr,
{
memory_region_init(mr, name, size);
mr->terminates = true;
+ mr->destructor = memory_region_destructor_ram;
mr->ram_addr = qemu_ram_alloc(dev, name, size);
mr->backend_registered = true;
}
@@ -872,6 +894,7 @@ void memory_region_init_ram_ptr(MemoryRegion *mr,
{
memory_region_init(mr, name, size);
mr->terminates = true;
+ mr->destructor = memory_region_destructor_ram_from_ptr;
mr->ram_addr = qemu_ram_alloc_from_ptr(dev, name, size, ptr);
mr->backend_registered = true;
}
@@ -890,6 +913,7 @@ void memory_region_init_alias(MemoryRegion *mr,
void memory_region_destroy(MemoryRegion *mr)
{
assert(QTAILQ_EMPTY(&mr->subregions));
+ mr->destructor(mr);
memory_region_clear_coalescing(mr);
qemu_free((char *)mr->name);
qemu_free(mr->ioeventfds);
diff --git a/memory.h b/memory.h
index da00a3b..c9252a2 100644
--- a/memory.h
+++ b/memory.h
@@ -109,6 +109,7 @@ struct MemoryRegion {
target_phys_addr_t addr;
target_phys_addr_t offset;
bool backend_registered;
+ void (*destructor)(MemoryRegion *mr);
ram_addr_t ram_addr;
IORange iorange;
bool terminates;
--
1.7.5.3
next prev parent reply other threads:[~2011-08-08 16:58 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-08 16:58 [Qemu-devel] [PATCH 0/3] Memory API updates Avi Kivity
2011-08-08 16:58 ` Avi Kivity [this message]
2011-08-08 16:58 ` [Qemu-devel] [PATCH 2/3] memory: add API for creating ROM/device regions Avi Kivity
2011-08-12 13:48 ` Anthony Liguori
2011-08-14 3:05 ` Avi Kivity
2011-08-14 13:29 ` Anthony Liguori
2011-08-14 15:43 ` Alexander Graf
2011-08-14 13:51 ` Anthony Liguori
2011-08-08 16:58 ` [Qemu-devel] [PATCH 3/3] memory: correct documentation typos Avi Kivity
2011-08-12 13:47 ` [Qemu-devel] [PATCH 0/3] Memory API updates Anthony Liguori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1312822730-9577-2-git-send-email-avi@redhat.com \
--to=avi@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).