Message ID | 20200712014717.10858-1-chengang@emindsoft.com.cn (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | target: i386: mem_helper: Fix ldaxr instruction 64 bit alignment issue temporarily for stable-4.1 | expand |
diff --git a/target/i386/mem_helper.c b/target/i386/mem_helper.c index d50d4b0c40..8c37b05fae 100644 --- a/target/i386/mem_helper.c +++ b/target/i386/mem_helper.c @@ -68,7 +68,13 @@ void helper_cmpxchg8b(CPUX86State *env, target_ulong a0) uint64_t *haddr = g2h(a0); cmpv = cpu_to_le64(cmpv); newv = cpu_to_le64(newv); - oldv = atomic_cmpxchg__nocheck(haddr, cmpv, newv); + if ((unsigned long)haddr % 8) { + volatile uint64_t tmp = *haddr; /* avoid compiler optimization */ + oldv = atomic_cmpxchg__nocheck(&tmp, cmpv, newv); + *haddr = tmp; + } else { + oldv = atomic_cmpxchg__nocheck(haddr, cmpv, newv); + } oldv = le64_to_cpu(oldv); } #else