All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: "Jonathan Neuschäfer" <j.neuschaefer@gmx.net>
Cc: qemu-devel@nongnu.org, pbonzini@redhat.com,
	mttcg@listserver.greensocs.com, peter.maydell@linaro.org,
	claudio.fontana@huawei.com, nikunj@linux.vnet.ibm.com,
	jan.kiszka@siemens.com, mark.burton@greensocs.com,
	a.rigo@virtualopensystems.com, cota@braap.org,
	serge.fdrv@gmail.com, bobby.prani@gmail.com, rth@twiddle.net,
	fred.konrad@greensocs.com
Subject: Re: [Qemu-devel] [PATCH v3 05/15] seqlock: use atomic writes for the sequence
Date: Fri, 30 Sep 2016 23:45:19 +0100	[thread overview]
Message-ID: <87r381uhvk.fsf@linaro.org> (raw)
In-Reply-To: <20160930221426.xlx72nz3owdyi73o@latitude>


Jonathan Neuschäfer <j.neuschaefer@gmx.net> writes:

> On Fri, Sep 30, 2016 at 10:30:56PM +0100, Alex Bennée wrote:
>> From: Paolo Bonzini <pbonzini@redhat.com>
>>
>> There is a data race if the sequence is written concurrently to the
>> read.  In C11 this has undefined behavior.  Use atomic_set; the
>> read side is already using atomic_read.
>>
>> Reported-by: Alex Bennée <alex.bennee@linaro.org>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> ---
>>  include/qemu/seqlock.h | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/qemu/seqlock.h b/include/qemu/seqlock.h
>> index 2e2be4c..8dee11d 100644
>> --- a/include/qemu/seqlock.h
>> +++ b/include/qemu/seqlock.h
>> @@ -31,7 +31,7 @@ static inline void seqlock_init(QemuSeqLock *sl)
>>  /* Lock out other writers and update the count.  */
>>  static inline void seqlock_write_begin(QemuSeqLock *sl)
>>  {
>> -    ++sl->sequence;
>> +    atomic_set(&sl->sequence, sl->sequence + 1);
>
> I'm not an atomics expert, but as I read the code, the load of
> sl->sequence (on the right side) isn't atomic relative to the store
> (atomic_set). Should this be atomic_inc(&sl->sequence) instead, or am I
> missing something?

There can only be one seqlock_write going on at a time (that is
protected by a lock). The atomic_set only ensures that the seqlock_read
side unambiguously sees one value or the other - you don't need to use
an atomic_inc in this case.

>
> In particular, I'm worried about this situation:
>
> 	thread 0				thread 1
> 	seqlock_write_begin:			seqlock_write_begin:
> 	  unsigned tmp = sl->sequence		  unsigned tmp = sl->sequence
> 	  tmp += 1				  tmp += 1
> 						  atomic_set(&sl->sequence, tmp)
> 	  atomic_set(&sl->sequence, tmp)
>
> ... where sl->sequence will effectively only be incremented once (as far
> as I can see).
>
>
> Regards,
> Jonathan Neuschäfer


--
Alex Bennée

  reply	other threads:[~2016-09-30 22:45 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-30 21:30 [Qemu-devel] [PATCH v3 00/15] A number of fixes for ThreadSanitizer Alex Bennée
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 01/15] atomic.h: fix __SANITIZE_THREAD__ build Alex Bennée
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 02/15] atomic.h: comment on use of atomic_read/set Alex Bennée
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 03/15] exec-all.h: revert tb_page_addr_t to target_ulong Alex Bennée
2016-10-03  8:59   ` Paolo Bonzini
2016-10-03  9:32     ` Alex Bennée
2016-10-03 10:10       ` Paolo Bonzini
2016-10-04 14:08         ` Alex Bennée
2016-10-03 15:31       ` Emilio G. Cota
2016-10-03 16:16         ` Alex Bennée
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 04/15] tcg/optimize: move default return out of if statement Alex Bennée
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 05/15] seqlock: use atomic writes for the sequence Alex Bennée
2016-09-30 22:14   ` Jonathan Neuschäfer
2016-09-30 22:45     ` Alex Bennée [this message]
2016-09-30 22:58       ` Jonathan Neuschäfer
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 06/15] qom/object: update class cache atomically Alex Bennée
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 07/15] qom/cpu: atomically clear the tb_jmp_cache Alex Bennée
2016-09-30 21:30 ` [Qemu-devel] [PATCH v3 08/15] cpu: atomically modify cpu->exit_request Alex Bennée
2016-09-30 21:31 ` [Qemu-devel] [PATCH v3 09/15] util/qht: atomically set b->hashes Alex Bennée
2016-09-30 21:31 ` [Qemu-devel] [PATCH v3 10/15] linux-user/syscall: extend lock around cpu-list Alex Bennée
2016-09-30 21:31 ` [Qemu-devel] [PATCH v3 11/15] qga/command: use QEMU atomic primitives Alex Bennée
2016-09-30 21:31 ` [Qemu-devel] [PATCH v3 12/15] .travis.yml: add gcc sanitizer build Alex Bennée
2016-09-30 21:31 ` [Qemu-devel] [PATCH v3 13/15] tcg: ensure cpu_tb_exec/tb_gen_code use atomic_read/write Alex Bennée
2016-09-30 22:12   ` [Qemu-devel] [PATCH] fixup! " Alex Bennée
2016-10-03  8:43   ` [Qemu-devel] [PATCH v3 13/15] " Paolo Bonzini
2016-10-03  9:48     ` Alex Bennée
2016-10-03  9:53       ` Paolo Bonzini
2016-09-30 21:31 ` [Qemu-devel] [PATCH v3 14/15] tcg: update remaining TranslationBuffer fields atomically Alex Bennée
2016-09-30 21:31 ` [Qemu-devel] [PATCH v3 15/15] translate-all: mark updates to PageDesc as atomic Alex Bennée
2016-10-03  8:50   ` Paolo Bonzini
2016-09-30 21:54 ` [Qemu-devel] [PATCH v3 00/15] A number of fixes for ThreadSanitizer no-reply
2016-09-30 22:06 ` no-reply
2016-10-03  9:25 ` Paolo Bonzini
2016-10-03  9:43   ` Alex Bennée

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=87r381uhvk.fsf@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=a.rigo@virtualopensystems.com \
    --cc=bobby.prani@gmail.com \
    --cc=claudio.fontana@huawei.com \
    --cc=cota@braap.org \
    --cc=fred.konrad@greensocs.com \
    --cc=j.neuschaefer@gmx.net \
    --cc=jan.kiszka@siemens.com \
    --cc=mark.burton@greensocs.com \
    --cc=mttcg@listserver.greensocs.com \
    --cc=nikunj@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=serge.fdrv@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.