[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] tcg/ppc: disable atomic write check on ppc32
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH] tcg/ppc: disable atomic write check on ppc32 |
Date: |
Tue, 12 Sep 2017 23:04:15 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 |
On 11/09/2017 23:37, Peter Maydell wrote:
> On 11 September 2017 at 21:49, Philippe Mathieu-Daudé <address@hidden> wrote:
>> this fixes building for ppc64 on ppc32 (changed in 5964fca8a12c):
>>
>> qemu/tcg/ppc/tcg-target.inc.c: In function 'tb_target_set_jmp_target':
>> qemu/include/qemu/compiler.h:86:30: error: static assertion failed: "not
>> expecting: sizeof(*(uint64_t *)jmp_addr) > ATOMIC_REG_SIZE"
>> QEMU_BUILD_BUG_ON(sizeof(*ptr) > ATOMIC_REG_SIZE); \
>> ^
>> qemu/tcg/ppc/tcg-target.inc.c:1377:9: note: in expansion of macro
>> 'atomic_set'
>> atomic_set((uint64_t *)jmp_addr, pair);
>> ^
>>
>> Suggested-by: Richard Henderson <address@hidden>
>> Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
>> ---
>> This fixes Shippable builds, see:
>> https://app.shippable.com/github/qemu/qemu/runs/434/10/console
>>
>> tcg/ppc/tcg-target.inc.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/tcg/ppc/tcg-target.inc.c b/tcg/ppc/tcg-target.inc.c
>> index 21d764c102..0417901289 100644
>> --- a/tcg/ppc/tcg-target.inc.c
>> +++ b/tcg/ppc/tcg-target.inc.c
>> @@ -1374,7 +1374,7 @@ void tb_target_set_jmp_target(uintptr_t tc_ptr,
>> uintptr_t jmp_addr,
>> pair = (uint64_t)i2 << 32 | i1;
>> #endif
>>
>> - atomic_set((uint64_t *)jmp_addr, pair);
>> + atomic_set__nocheck((uint64_t *)jmp_addr, pair);
>> flush_icache_range(jmp_addr, jmp_addr + 8);
>> } else {
>> intptr_t diff = addr - jmp_addr;
>
> Can you explain why this is the right thing? On the
> face of it it looks correct to insist that we don't
> try to do an atomic set of something that's bigger
> than the host can actually handle...
Probably because this code is guarded by "if (TCG_TARGET_REG_BITS ==
64)", so actually it only ever runs with 64-bit targets.
I wonder if QEMU_BUILD_BUG_ON (at least in atomics) should not use a
static assertion, but rather the 'error ("MESSAGE")' attribute instead.
This way, if the code is dead it does not cause a build failure.
Paolo