From: "Emilio G. Cota" <cota@braap.org>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 1/4] cpus: protect all icount computation with seqlock
Date: Fri, 31 Aug 2018 18:03:08 -0400 [thread overview]
Message-ID: <20180831220308.GA18048@flamenco> (raw)
In-Reply-To: <20180820150903.1224-2-pbonzini@redhat.com>
On Mon, Aug 20, 2018 at 17:09:00 +0200, Paolo Bonzini wrote:
> Using the seqlock makes the atomic_read__nocheck safe, because it now
> happens always inside a seqlock and any torn reads will be retried.
Using a seqlock makes regular accesses safe as well, for the same
reason. It's undefined behaviour but I don't see how to avoid
it if the host might not have wide-enough atomics (see below).
> qemu_icount_bias and icount_time_shift also need to be accessed with
> atomics.
But qemu_icount_bias is always accessed through the seqlock, so regular
accesses should be fine there.
Moreover, seqlock + regular accesses allow us not to worry about
32-bit hosts without __atomic builtins, which might choke on
atomic accesses to u64's (regardless of __nocheck) like this one:
> -#ifdef CONFIG_ATOMIC64
> + /* The read is protected by the seqlock, so __nocheck is okay. */
> return atomic_read__nocheck(&timers_state.qemu_icount);
> -#else /* FIXME: we need 64bit atomics to do this safely */
> - return timers_state.qemu_icount;
> -#endif
So I think we should convert these to regular accesses. I just
wrote a patch to perform the conversion (after noticing the same
misuse of __nocheck + seqlock in qsp.c, which is my fault); however,
I have a question on patch 3, which I'd like to address first.
Thanks,
Emilio
next prev parent reply other threads:[~2018-08-31 22:03 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-20 15:08 [Qemu-devel] [PATCH 0/4] cpus: improve seqlock usage for timers_state, allow cpu_get_ticks out of BQL Paolo Bonzini
2018-08-20 15:09 ` [Qemu-devel] [PATCH 1/4] cpus: protect all icount computation with seqlock Paolo Bonzini
2018-08-31 22:03 ` Emilio G. Cota [this message]
2018-08-20 15:09 ` [Qemu-devel] [PATCH 2/4] seqlock: add QemuLockable support Paolo Bonzini
2018-08-20 15:09 ` [Qemu-devel] [PATCH 3/4] cpus: protect TimerState writes with a spinlock Paolo Bonzini
2018-08-28 7:23 ` [Qemu-devel] [3/4] " Pavel Dovgalyuk
2018-09-09 23:39 ` Paolo Bonzini
2018-09-10 5:36 ` Pavel Dovgalyuk
2018-09-10 12:59 ` Paolo Bonzini
2018-09-11 6:00 ` Pavel Dovgalyuk
2018-09-11 9:31 ` Paolo Bonzini
2018-10-08 7:09 ` Pavel Dovgalyuk
2018-10-08 11:24 ` Paolo Bonzini
2018-08-31 22:07 ` [Qemu-devel] [PATCH 3/4] " Emilio G. Cota
2018-09-09 23:39 ` Paolo Bonzini
2018-08-20 15:09 ` [Qemu-devel] [PATCH 4/4] cpus: allow cpu_get_ticks out of BQL 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=20180831220308.GA18048@flamenco \
--to=cota@braap.org \
--cc=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 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.