[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 06/49] cpu-exec-common.c: Clarify comment about cpu_r
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 06/49] cpu-exec-common.c: Clarify comment about cpu_reload_memory_map()'s RCU operations |
Date: |
Fri, 16 Oct 2015 10:49:28 +0200 |
From: Peter Maydell <address@hidden>
The reason for cpu_reload_memory_map()'s RCU operations is not
so much because the guest could make the critical section very
long, but that it could have a critical section within which
it made an arbitrary number of changes to the memory map and
thus accumulate an unbounded amount of memory data structures
awaiting reclamation. Clarify the comment to make this clearer.
Signed-off-by: Peter Maydell <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
cpu-exec-common.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/cpu-exec-common.c b/cpu-exec-common.c
index 16d305b..b95b09a 100644
--- a/cpu-exec-common.c
+++ b/cpu-exec-common.c
@@ -42,13 +42,21 @@ void cpu_reload_memory_map(CPUState *cpu)
AddressSpaceDispatch *d;
if (qemu_in_vcpu_thread()) {
- /* Do not let the guest prolong the critical section as much as it
- * as it desires.
+ /* The guest can in theory prolong the RCU critical section as long
+ * as it feels like. The major problem with this is that because it
+ * can do multiple reconfigurations of the memory map within the
+ * critical section, we could potentially accumulate an unbounded
+ * collection of memory data structures awaiting reclamation.
*
- * Currently, this is prevented by the I/O thread's periodinc kicking
- * of the VCPU thread (iothread_requesting_mutex, qemu_cpu_kick_thread)
- * but this will go away once TCG's execution moves out of the global
- * mutex.
+ * Because the only thing we're currently protecting with RCU is the
+ * memory data structures, it's sufficient to break the critical
section
+ * in this callback, which we know will get called every time the
+ * memory map is rearranged.
+ *
+ * (If we add anything else in the system that uses RCU to protect
+ * its data structures, we will need to implement some other mechanism
+ * to force TCG CPUs to exit the critical section, at which point this
+ * part of this callback might become unnecessary.)
*
* This pair matches cpu_exec's rcu_read_lock()/rcu_read_unlock(),
which
* only protects cpu->as->dispatch. Since we reload it below, we can
--
2.5.0
- [Qemu-devel] [PULL 00/49] Misc patches for 2015-10-16, Paolo Bonzini, 2015/10/16
- [Qemu-devel] [PULL 01/49] nbd: switch from g_slice allocator to malloc, Paolo Bonzini, 2015/10/16
- [Qemu-devel] [PULL 02/49] scsi: switch from g_slice allocator to malloc, Paolo Bonzini, 2015/10/16
- [Qemu-devel] [PULL 03/49] megasas: fix megasas_get_sata_addr, Paolo Bonzini, 2015/10/16
- [Qemu-devel] [PULL 06/49] cpu-exec-common.c: Clarify comment about cpu_reload_memory_map()'s RCU operations,
Paolo Bonzini <=
- [Qemu-devel] [PULL 04/49] configure: Require Python 2.6, Paolo Bonzini, 2015/10/16
- [Qemu-devel] [PULL 05/49] exec.c: Don't call cpu_reload_memory_map() from cpu_exec_init(), Paolo Bonzini, 2015/10/16
- [Qemu-devel] [PULL 07/49] exec.c: Collect AddressSpace related fields into a CPUAddressSpace struct, Paolo Bonzini, 2015/10/16
- [Qemu-devel] [PULL 09/49] linux-headers: update from kvm/next, Paolo Bonzini, 2015/10/16
- [Qemu-devel] [PULL 08/49] checkpatch: allow open braces on typedef lines, Paolo Bonzini, 2015/10/16
- [Qemu-devel] [PULL 10/49] target-i386/kvm: Hyper-V HV_X64_MSR_RESET support, Paolo Bonzini, 2015/10/16
- [Qemu-devel] [PULL 11/49] target-i386/kvm: set Hyper-V features cpuid bit HV_X64_MSR_VP_INDEX_AVAILABLE, Paolo Bonzini, 2015/10/16
- [Qemu-devel] [PULL 13/49] exec: remove non-TCG stuff from exec-all.h header., Paolo Bonzini, 2015/10/16
- [Qemu-devel] [PULL 12/49] target-i386/kvm: Hyper-V HV_X64_MSR_VP_RUNTIME support, Paolo Bonzini, 2015/10/16
- [Qemu-devel] [PULL 14/49] kvm-all: Align to qemu_real_host_page_size in kvm_set_phys_mem, Paolo Bonzini, 2015/10/16