From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 40/43] tcg: add memory barriers in page_find_alloc accesses
Date: Wed, 9 Sep 2015 15:50:10 +0200 [thread overview]
Message-ID: <1441806613-13775-41-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1441806613-13775-1-git-send-email-pbonzini@redhat.com>
page_find is reading the radix tree outside all locks, so it has to
use the RCU primitives. It does not need RCU critical sections
because the PageDescs are never removed, so there is never a need
to wait for the end of code sections that use a PageDesc.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
translate-all.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/translate-all.c b/translate-all.c
index 37bb56c..5329982 100644
--- a/translate-all.c
+++ b/translate-all.c
@@ -431,26 +431,26 @@ static PageDesc *page_find_alloc(tb_page_addr_t index, int alloc)
/* Level 2..N-1. */
for (i = V_L1_SHIFT / V_L2_BITS - 1; i > 0; i--) {
- void **p = *lp;
+ void **p = atomic_rcu_read(lp);
if (p == NULL) {
if (!alloc) {
return NULL;
}
p = g_new0(void *, V_L2_SIZE);
- *lp = p;
+ atomic_rcu_set(lp, p);
}
lp = p + ((index >> (i * V_L2_BITS)) & (V_L2_SIZE - 1));
}
- pd = *lp;
+ pd = atomic_rcu_read(lp);
if (pd == NULL) {
if (!alloc) {
return NULL;
}
pd = g_new0(PageDesc, V_L2_SIZE);
- *lp = pd;
+ atomic_rcu_set(lp, pd);
}
return pd + (index & (V_L2_SIZE - 1));
--
2.4.3
next prev parent reply other threads:[~2015-09-09 13:51 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-09 13:49 [Qemu-devel] [PULL 00/43] First batch of misc changes for 2.5 (2015-09-09) Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 01/43] qemu-thread: handle spurious futex_wait wakeups Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 02/43] seqlock: add missing 'inline' to seqlock_read_retry Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 03/43] seqlock: read sequence number atomically Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 04/43] cpus.c: qemu_mutex_lock_iothread fix race condition at cpu thread init Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 05/43] iohandler: Use aio API Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 06/43] block/iscsi: validate block size returned from target Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 07/43] Added generic panic handler qemu_system_guest_panicked() Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 08/43] i8257: rewrite DMA_schedule to avoid hooking into the CPU loop Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 09/43] i8257: remove cpu_request_exit irq Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 10/43] tcg: introduce tcg_current_cpu Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 11/43] remove qemu/tls.h Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 12/43] tcg: assign cpu->current_tb in a simpler place Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 13/43] tcg: synchronize cpu->exit_request and cpu->tcg_exit_req accesses Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 14/43] tcg: synchronize exit_request and tcg_current_cpu accesses Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 15/43] use qemu_cpu_kick instead of cpu_exit or qemu_cpu_kick_thread Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 16/43] tcg: signal-free qemu_cpu_kick Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 17/43] Move RAMBlock and ram_list to ram_addr.h Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 18/43] Makefile.target: include top level build dir in vpath Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 19/43] rcu: init rcu_registry_lock after fork Paolo Bonzini
2015-09-16 12:37 ` Gerd Hoffmann
2015-09-16 12:38 ` Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 20/43] rcu: fix comment with s/rcu_gp_lock/rcu_registry_lock/ Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 21/43] linux-user: call rcu_(un)register_thread on pthread_(exit|create) Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 22/43] translate-all: remove obsolete comment about l1_map Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 23/43] cutils: Add qemu_strtol() wrapper Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 24/43] cutils: Add qemu_strtoul() wrapper Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 25/43] cutils: Add qemu_strtoll() wrapper Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 26/43] cutils: Add qemu_strtoull() wrapper Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 27/43] qmp: Add example usage of strto*l() qemu wrapper Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 28/43] CODING_STYLE: update mixed declaration rules Paolo Bonzini
2015-09-09 13:49 ` [Qemu-devel] [PULL 29/43] checkpatch: adapt some tests to QEMU Paolo Bonzini
2015-09-09 13:50 ` [Qemu-devel] [PULL 30/43] checkpatch: remove tests that are not relevant outside the kernel Paolo Bonzini
2015-09-09 13:50 ` [Qemu-devel] [PULL 31/43] vhost-scsi: fix wrong vhost-scsi firmware path Paolo Bonzini
2015-09-09 13:50 ` [Qemu-devel] [PULL 32/43] configure: factor out adding disas configure Paolo Bonzini
2015-09-09 13:50 ` [Qemu-devel] [PULL 33/43] add macro file for coccinelle Paolo Bonzini
2015-09-09 13:50 ` [Qemu-devel] [PULL 34/43] configure: Add support for jemalloc Paolo Bonzini
2015-09-09 13:50 ` [Qemu-devel] [PULL 35/43] scripts/dump-guest-memory.py: fix after RAMBlock change Paolo Bonzini
2015-09-09 13:50 ` [Qemu-devel] [PULL 36/43] cpus: protect work list with work_mutex Paolo Bonzini
2015-09-09 13:50 ` [Qemu-devel] [PULL 37/43] cpus: remove tcg_halt_cond and tcg_cpu_thread globals Paolo Bonzini
2015-09-09 13:50 ` [Qemu-devel] [PULL 38/43] replace spinlock by QemuMutex Paolo Bonzini
2015-09-09 13:50 ` [Qemu-devel] [PULL 39/43] remove unused spinlock Paolo Bonzini
2015-09-09 13:50 ` Paolo Bonzini [this message]
2015-09-09 13:50 ` [Qemu-devel] [PULL 41/43] tcg: comment on which functions have to be called with mmap_lock held Paolo Bonzini
2015-09-09 13:50 ` [Qemu-devel] [PULL 42/43] exec: make mmap_lock/mmap_unlock globally available Paolo Bonzini
2015-09-09 13:50 ` [Qemu-devel] [PULL 43/43] cpu-exec: fix lock hierarchy for user-mode emulation Paolo Bonzini
2015-09-09 18:41 ` [Qemu-devel] [PULL 00/43] First batch of misc changes for 2.5 (2015-09-09) Peter Maydell
2015-09-09 19:25 ` Paolo Bonzini
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=1441806613-13775-41-git-send-email-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--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).