From: Richard Henderson <rth@twiddle.net>
To: liu ping fan <qemulist@gmail.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
Stefan Hajnoczi <stefanha@gmail.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
qemu-devel@nongnu.org, Avi Kivity <avi@redhat.com>,
Anthony Liguori <anthony@codemonkey.ws>,
Jan Kiszka <jan.kiszka@siemens.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v6 1/8] atomic: introduce atomic operations
Date: Thu, 15 Nov 2012 16:03:14 -0800 [thread overview]
Message-ID: <50A582C2.5090908@twiddle.net> (raw)
In-Reply-To: <CAJnKYQ=S=y2_-Z=K9M1uV1MjgKO48q8HAJnAOsdU4gNZjym7iA@mail.gmail.com>
On 2012-11-14 23:47, liu ping fan wrote:
> Probably I made a mistake here, in vhost, log =
> __sync_fetch_and_and(from, 0) is used to fetch 64bits atomically in
> the case 32bits qemu running on 64bits linux. Right? But how can
> we read 32bits twice in atomic? Seem that no instruction like "_lock
> xchg" for this ops. So I guess _sync_fetch_and_and() based on
> something like spinlock.
... or for gcc 4.7 and later,
log = __atomic_load_n(from, memory_model)
For i386, we will not perform 2 32-bit reads of course. Paulo suggests
using cmpxchg8b, but that's a tad slow. Instead we'll perform a 64-bit
read into either the fpu or the sse units, and from there copy the data
wherever it's needed. Such 64-bit aligned reads are guaranteed to be
atomic for i586 (pentium) and later.
For other 32-bit architectures other possibilities exist. Recent arm can
use its ldrexd insn. Many of the 32-bit linux architectures have special
kernel entry points or schemes to perform atomic operations. These are
generally based on the assumption of a single-processor system, and are
arranged to either disable interrupts or notice that no interrupt occurred,
while executing a code region.
As an ultimate fallback, yes we would use locks. But none of the host
architectures that QEMU supports needs to do so.
r~
next prev parent reply other threads:[~2012-11-16 0:03 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-05 5:38 [Qemu-devel] [PATCH v6 0/8] push mmio dispatch out of big lock Liu Ping Fan
2012-11-05 5:38 ` [Qemu-devel] [PATCH v6 1/8] atomic: introduce atomic operations Liu Ping Fan
2012-11-12 9:54 ` Paolo Bonzini
2012-11-13 6:48 ` liu ping fan
2012-11-13 10:11 ` Paolo Bonzini
2012-11-14 9:38 ` liu ping fan
2012-11-14 9:47 ` Paolo Bonzini
2012-11-15 7:47 ` liu ping fan
2012-11-15 11:24 ` Paolo Bonzini
2012-11-16 0:03 ` Richard Henderson [this message]
2012-11-21 5:58 ` liu ping fan
2012-11-18 10:04 ` Avi Kivity
2012-11-21 5:57 ` liu ping fan
2012-11-13 10:11 ` Paolo Bonzini
2012-11-05 5:38 ` [Qemu-devel] [PATCH v6 2/8] qom: apply atomic on object's refcount Liu Ping Fan
2012-11-05 5:38 ` [Qemu-devel] [PATCH v6 3/8] hotplug: introduce qdev_unplug_complete() to remove device from views Liu Ping Fan
2012-11-12 9:27 ` Paolo Bonzini
2012-11-13 6:12 ` liu ping fan
2012-11-05 5:38 ` [Qemu-devel] [PATCH v6 4/8] pci: remove pci device from mem view when unplug Liu Ping Fan
2012-11-05 5:38 ` [Qemu-devel] [PATCH v6 5/8] memory: introduce local lock for address space Liu Ping Fan
2012-11-05 5:38 ` [Qemu-devel] [PATCH v6 6/8] memory: make mmio dispatch able to be out of biglock Liu Ping Fan
2012-11-05 6:45 ` Jan Kiszka
2012-11-05 5:38 ` [Qemu-devel] [PATCH v6 7/8] memory: introduce tls context to trace nested mmio request issue Liu Ping Fan
2012-11-05 6:57 ` Jan Kiszka
2012-11-05 5:38 ` [Qemu-devel] [PATCH v6 8/8] vcpu: push mmio dispatcher out of big lock Liu Ping Fan
2012-11-05 7:00 ` [Qemu-devel] [PATCH v6 0/8] push mmio dispatch " Jan Kiszka
2012-11-09 6:23 ` liu ping fan
2012-11-09 8:15 ` Jan Kiszka
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=50A582C2.5090908@twiddle.net \
--to=rth@twiddle.net \
--cc=anthony@codemonkey.ws \
--cc=avi@redhat.com \
--cc=jan.kiszka@siemens.com \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemulist@gmail.com \
--cc=stefanha@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.