[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [patch v5 5/8] memory: introduce local lock for address spa
From: |
Liu Ping Fan |
Subject: |
[Qemu-devel] [patch v5 5/8] memory: introduce local lock for address space |
Date: |
Mon, 29 Oct 2012 07:48:44 +0800 |
For those address spaces which want to be able out of big lock, they
will be protected by their own local.
Signed-off-by: Liu Ping Fan <address@hidden>
---
memory.c | 11 ++++++++++-
memory.h | 5 ++++-
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/memory.c b/memory.c
index 2f68d67..ff34aed 100644
--- a/memory.c
+++ b/memory.c
@@ -1532,9 +1532,15 @@ void memory_listener_unregister(MemoryListener *listener)
QTAILQ_REMOVE(&memory_listeners, listener, link);
}
-void address_space_init(AddressSpace *as, MemoryRegion *root)
+void address_space_init(AddressSpace *as, MemoryRegion *root, bool lock)
{
memory_region_transaction_begin();
+ if (lock) {
+ as->lock = g_new(QemuMutex, 1);
+ qemu_mutex_init(as->lock);
+ } else {
+ as->lock = NULL;
+ }
as->root = root;
as->current_map = g_new(FlatView, 1);
flatview_init(as->current_map);
@@ -1553,6 +1559,9 @@ void address_space_destroy(AddressSpace *as)
QTAILQ_REMOVE(&address_spaces, as, address_spaces_link);
address_space_destroy_dispatch(as);
flatview_destroy(as->current_map);
+ if (as->lock) {
+ g_free(as->lock);
+ }
g_free(as->current_map);
}
diff --git a/memory.h b/memory.h
index 79393f1..12d1c56 100644
--- a/memory.h
+++ b/memory.h
@@ -22,6 +22,7 @@
#include "cpu-common.h"
#include "targphys.h"
#include "qemu-queue.h"
+#include "qemu-thread.h"
#include "iorange.h"
#include "ioport.h"
#include "int128.h"
@@ -164,6 +165,7 @@ typedef struct AddressSpace AddressSpace;
*/
struct AddressSpace {
/* All fields are private. */
+ QemuMutex *lock;
const char *name;
MemoryRegion *root;
struct FlatView *current_map;
@@ -801,8 +803,9 @@ void mtree_info(fprintf_function mon_printf, void *f);
*
* @as: an uninitialized #AddressSpace
* @root: a #MemoryRegion that routes addesses for the address space
+ * @lock: if true, the physmap protected by local lock, otherwise big lock
*/
-void address_space_init(AddressSpace *as, MemoryRegion *root);
+void address_space_init(AddressSpace *as, MemoryRegion *root, bool lock);
/**
--
1.7.4.4
- [Qemu-devel] [patch v5 0/8] push mmio dispatch out of big lock, Liu Ping Fan, 2012/10/28
- [Qemu-devel] [patch v5 1/8] atomic: introduce atomic operations, Liu Ping Fan, 2012/10/28
- [Qemu-devel] [patch v5 2/8] qom: apply atomic on object's refcount, Liu Ping Fan, 2012/10/28
- [Qemu-devel] [patch v5 5/8] memory: introduce local lock for address space,
Liu Ping Fan <=
- [Qemu-devel] [patch v5 4/8] pci: remove pci device from mem view when unplug, Liu Ping Fan, 2012/10/28
- [Qemu-devel] [patch v5 7/8] memory: introduce tls context to record nested dma, Liu Ping Fan, 2012/10/28
- [Qemu-devel] [patch v5 6/8] memory: make mmio dispatch able to be out of biglock, Liu Ping Fan, 2012/10/28