From: "Alex Bennée" <alex.bennee@linaro.org>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: peter.maydell@linaro.org, sbruno@freebsd.org,
Richard Henderson <rth@twiddle.net>,
qemu-devel@nongnu.org,
Peter Crosthwaite <crosthwaite.peter@gmail.com>
Subject: Re: [Qemu-devel] [PATCH v1 1/2] cpus: don't use atomic_read for vm_clock_warp_start
Date: Mon, 21 Mar 2016 17:45:59 +0000 [thread overview]
Message-ID: <87mvprsp0o.fsf@linaro.org> (raw)
In-Reply-To: <56F0209E.6090706@redhat.com>
Paolo Bonzini <pbonzini@redhat.com> writes:
> On 21/03/2016 17:23, Alex Bennée wrote:
>> As vm_clock_warp_start is a 64 bit value this causes problems for the
>> compiler trying to come up with a suitable atomic operation on 32 bit
>> hosts. The variable documentation says this is meant to be protected by
>> vm_clock_seqlock so lets just move the code into that section.
>
> This neglects the fact that there is a comment explaining the code, so
>
> Because the variable is protected by vm_clock_seqlock, we check its
> value inside a seqlock critical section.
>
> is better. In addition, I would prefer if you used seqlock_read_*.
I see you comment on the other thread passed the posting. I'll respin.
>
> Paolo
>
>> All other references to vm_clock_warp_start are already protected by the
>> seqlock.
>>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> ---
>> cpus.c | 12 ++++--------
>> 1 file changed, 4 insertions(+), 8 deletions(-)
>>
>> diff --git a/cpus.c b/cpus.c
>> index 23cf7aa..2fd5381 100644
>> --- a/cpus.c
>> +++ b/cpus.c
>> @@ -338,15 +338,10 @@ static int64_t qemu_icount_round(int64_t count)
>>
>> static void icount_warp_rt(void)
>> {
>> - /* The icount_warp_timer is rescheduled soon after vm_clock_warp_start
>> - * changes from -1 to another value, so the race here is okay.
>> - */
>> - if (atomic_read(&vm_clock_warp_start) == -1) {
>> - return;
>> - }
>> + bool check_clock = false;
>>
>> seqlock_write_lock(&timers_state.vm_clock_seqlock);
>> - if (runstate_is_running()) {
>> + if (vm_clock_warp_start != -1 && runstate_is_running()) {
>> int64_t clock = REPLAY_CLOCK(REPLAY_CLOCK_VIRTUAL_RT,
>> cpu_get_clock_locked());
>> int64_t warp_delta;
>> @@ -362,11 +357,12 @@ static void icount_warp_rt(void)
>> warp_delta = MIN(warp_delta, delta);
>> }
>> timers_state.qemu_icount_bias += warp_delta;
>> + check_clock = true;
>> }
>> vm_clock_warp_start = -1;
>> seqlock_write_unlock(&timers_state.vm_clock_seqlock);
>>
>> - if (qemu_clock_expired(QEMU_CLOCK_VIRTUAL)) {
>> + if (check_clock && qemu_clock_expired(QEMU_CLOCK_VIRTUAL)) {
>> qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
>> }
>> }
--
Alex Bennée
next prev parent reply other threads:[~2016-03-21 17:46 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-21 16:23 [Qemu-devel] [PATCH v1 0/2] Fix for FreeBSD compile on i386 Alex Bennée
2016-03-21 16:23 ` [Qemu-devel] [PATCH v1 1/2] cpus: don't use atomic_read for vm_clock_warp_start Alex Bennée
2016-03-21 16:26 ` Paolo Bonzini
2016-03-21 17:45 ` Alex Bennée [this message]
2016-03-21 16:23 ` [Qemu-devel] [PATCH v1 2/2] include/qemu/atomic: add compile time asserts Alex Bennée
2016-04-01 15:03 ` Alex Bennée
2016-04-04 8:33 ` 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=87mvprsp0o.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=crosthwaite.peter@gmail.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=sbruno@freebsd.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.