[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2] target-sh4: add atomic tas
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH v2] target-sh4: add atomic tas |
Date: |
Thu, 3 Nov 2016 18:52:15 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 |
On 03/11/2016 17:51, Richard Henderson wrote:
>>> Well, tas_test "runs without error with this change", I suppose it fails
>>> before? In other words, is this patch enough to run multithreaded sh4
>>> programs with qemu-user?
>>
>> It should,:the problem was reported by Adrian (cc:) while compiling ghc
>> in qemu-sh4, but I have just tested the functionality with the softmmu
>> version, not the atomicity.
>>
>> Adrian, could you test this patch?
>
> It's a start, but sh4 has an interesting scheme to implement atomic
> sequences via special values in the stack pointer. E.g. xchg is
>
> mova 1f, r0
> mov sp, r1
> mov #(0f-1f), sp
> 0: mov.l mem, out
> mov.l in, mem
> 1: mov r1, sp
>
> which is only atomic if you've got a UP kernel and have code in your
> interrupt entry point that recognizes the small negative value in SP to
> reset the PC as necessary.
UP kernel = no sane way to implement this in user-mode qemu? Doing
pattern matching on negative sp moves and the instructions in between is
probably not sane, even though GCC always has:
- mov/mov for exchange
- mov/cmpeq/bf/mov for compare-and-swap
- mov/mov/op/mov for fetch-and-foo
- mov/mov/and/not/mov for fetch-and-nand
- mov/op/mov for foo-and-fetch
- mov/and/not/mov for nand-and-fetch
Another possibility is to treat the load as a LL and the store as a SC
(implemented in turn with cmpxchg+branch if it fails). cmpxchg spans
two basic blocks, so maybe one also needs to look at r0 and sp in
cpu_get_tb_cpu_state...
Anyhow this patch seems like a bugfix.
Paolo
> For SH4A, there are proper load-locked/store-condition insns, but prior
> to that TAS was the only truly atomic insn.
- [Qemu-devel] [PATCH v2] target-sh4: add atomic tas, Laurent Vivier, 2016/11/03
- Re: [Qemu-devel] [PATCH v2] target-sh4: add atomic tas, Richard Henderson, 2016/11/03
- Re: [Qemu-devel] [PATCH v2] target-sh4: add atomic tas, Paolo Bonzini, 2016/11/03
- Re: [Qemu-devel] [PATCH v2] target-sh4: add atomic tas, Laurent Vivier, 2016/11/03
- Re: [Qemu-devel] [PATCH v2] target-sh4: add atomic tas, John Paul Adrian Glaubitz, 2016/11/04
- Re: [Qemu-devel] [PATCH v2] target-sh4: add atomic tas, John Paul Adrian Glaubitz, 2016/11/04
- Re: [Qemu-devel] [PATCH v2] target-sh4: add atomic tas, Laurent Vivier, 2016/11/04
- Re: [Qemu-devel] [PATCH v2] target-sh4: add atomic tas, John Paul Adrian Glaubitz, 2016/11/04
- Re: [Qemu-devel] [PATCH v2] target-sh4: add atomic tas, Paolo Bonzini, 2016/11/04
- Re: [Qemu-devel] [PATCH v2] target-sh4: add atomic tas, John Paul Adrian Glaubitz, 2016/11/04
- Re: [Qemu-devel] [PATCH v2] target-sh4: add atomic tas, Paolo Bonzini, 2016/11/04
Re: [Qemu-devel] [PATCH v2] target-sh4: add atomic tas, Aurelien Jarno, 2016/11/03