LL/SC broken for MIPS after 7dd547e5ab6b31e7a0cfc182d3ad131dd55a948f

Bug #1861605 reported by Alexander Richardson
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
QEMU
Fix Released
Undecided
Unassigned

Bug Description

In that commit the env->llval value is loaded as an unsigned value (instead of sign-extended as before and therefore the CMPXCHG in gen_st_cond() in translate.c fails.

I have committed a fix for this issue as https://github.com/qemu/qemu/commit/6ff8dec97f1a105d0da96c67ee24c75e437df162

An alternative solution would be to change the cmpxchg line to perform a non-sign-extended compare, i.e. replace
    tcg_gen_atomic_cmpxchg_tl(t0, cpu_lladdr, cpu_llval, val,
                              eva ? MIPS_HFLAG_UM : ctx->mem_idx, tcg_mo);
with
    tcg_gen_atomic_cmpxchg_tl(t0, cpu_lladdr, cpu_llval, val,
                              eva ? MIPS_HFLAG_UM : ctx->mem_idx, tcg_mo & ~MO_SIGN);

However, that change does not fix the fact that the result of ll is no longer sign-extended, therefore I think adding a cast in the helpers is better.

I cannot send this patch to the QEMU mailing list as I am not able to setup git-send-email.
Feel free to apply this commit or the alternative solution.

Revision history for this message
Alexander Richardson (arichardson) wrote :
Revision history for this message
Alexander Richardson (arichardson) wrote :
description: updated
Revision history for this message
Thomas Huth (th-huth) wrote :
Changed in qemu:
status: New → Fix Committed
Changed in qemu:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.