[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 11/19] memory: Add global-locking property to memory
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 11/19] memory: Add global-locking property to memory regions |
Date: |
Mon, 6 Jul 2015 14:35:00 +0200 |
From: Jan Kiszka <address@hidden>
This introduces the memory region property "global_locking". It is true
by default. By setting it to false, a device model can request BQL-free
dispatching of region accesses to its r/w handlers. The actual BQL
break-up will be provided in a separate patch.
Signed-off-by: Jan Kiszka <address@hidden>
Cc: Frederic Konrad <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
Message-Id: <address@hidden>
---
include/exec/memory.h | 26 ++++++++++++++++++++++++++
memory.c | 11 +++++++++++
2 files changed, 37 insertions(+)
diff --git a/include/exec/memory.h b/include/exec/memory.h
index 8ae004e..0ebdc55 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -180,6 +180,7 @@ struct MemoryRegion {
bool rom_device;
bool warning_printed; /* For reservations */
bool flush_coalesced_mmio;
+ bool global_locking;
MemoryRegion *alias;
hwaddr alias_offset;
int32_t priority;
@@ -825,6 +826,31 @@ void memory_region_set_flush_coalesced(MemoryRegion *mr);
void memory_region_clear_flush_coalesced(MemoryRegion *mr);
/**
+ * memory_region_set_global_locking: Declares the access processing requires
+ * QEMU's global lock.
+ *
+ * When this is invoked, accesses to the memory region will be processed while
+ * holding the global lock of QEMU. This is the default behavior of memory
+ * regions.
+ *
+ * @mr: the memory region to be updated.
+ */
+void memory_region_set_global_locking(MemoryRegion *mr);
+
+/**
+ * memory_region_clear_global_locking: Declares that access processing does
+ * not depend on the QEMU global lock.
+ *
+ * By clearing this property, accesses to the memory region will be processed
+ * outside of QEMU's global lock (unless the lock is held on when issuing the
+ * access request). In this case, the device model implementing the access
+ * handlers is responsible for synchronization of concurrency.
+ *
+ * @mr: the memory region to be updated.
+ */
+void memory_region_clear_global_locking(MemoryRegion *mr);
+
+/**
* memory_region_add_eventfd: Request an eventfd to be triggered when a word
* is written to a location.
*
diff --git a/memory.c b/memory.c
index 3ac0bd2..b0b8860 100644
--- a/memory.c
+++ b/memory.c
@@ -1012,6 +1012,7 @@ static void memory_region_initfn(Object *obj)
mr->ram_addr = RAM_ADDR_INVALID;
mr->enabled = true;
mr->romd_mode = true;
+ mr->global_locking = true;
mr->destructor = memory_region_destructor_none;
QTAILQ_INIT(&mr->subregions);
QTAILQ_INIT(&mr->coalesced);
@@ -1646,6 +1647,16 @@ void memory_region_clear_flush_coalesced(MemoryRegion
*mr)
}
}
+void memory_region_set_global_locking(MemoryRegion *mr)
+{
+ mr->global_locking = true;
+}
+
+void memory_region_clear_global_locking(MemoryRegion *mr)
+{
+ mr->global_locking = false;
+}
+
void memory_region_add_eventfd(MemoryRegion *mr,
hwaddr addr,
unsigned size,
--
2.4.3
- [Qemu-devel] [PULL 00/19] Multithread, multiarch, multicompiler, multi^WKVM changes for 2015-07-06, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 02/19] cutils: allow compilation with icc, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 01/19] qemu-common: add VEC_OR macro, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 04/19] cpu-defs: Move CPU_TEMP_BUF_NLONGS to tcg, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 05/19] include/exec: Move standard exceptions to cpu-all.h, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 07/19] cpu-defs: Move out TB_JMP defines, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 03/19] memory_mapping: Rework cpu related includes, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 06/19] include/exec: Move tb hash functions out, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 08/19] Fix irq route entries exceeding KVM_MAX_IRQ_ROUTES, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 09/19] main-loop: use qemu_mutex_lock_iothread consistently, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 11/19] memory: Add global-locking property to memory regions,
Paolo Bonzini <=
- [Qemu-devel] [PULL 12/19] exec: pull qemu_flush_coalesced_mmio_buffer() into address_space_rw/ld*/st*, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 13/19] memory: let address_space_rw/ld*/st* run outside the BQL, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 10/19] main-loop: introduce qemu_mutex_iothread_locked, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 15/19] kvm: Switch to unlocked PIO, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 14/19] kvm: First step to push iothread lock out of inner run loop, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 16/19] acpi: mark PMTIMER as unlocked, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 19/19] exec: skip MMIO regions correctly in cpu_physical_memory_write_rom_internal, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 18/19] Stop including qemu-common.h in memory.h, Paolo Bonzini, 2015/07/06
- [Qemu-devel] [PULL 17/19] kvm: Switch to unlocked MMIO, Paolo Bonzini, 2015/07/06