This was an oversight when the rest of cputlb was being updated. As before it falls back to the non-atomic version when the host can't support wider-than-bus atomics.
Signed-off-by: Alex Bennée <alex.ben...@linaro.org> --- cputlb.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cputlb.c b/cputlb.c index f5d056cc08..0d52e45dfd 100644 --- a/cputlb.c +++ b/cputlb.c @@ -540,9 +540,17 @@ void tlb_reset_dirty(CPUState *cpu, ram_addr_t start1, ram_addr_t length) static inline void tlb_set_dirty1(CPUTLBEntry *tlb_entry, target_ulong vaddr) { +#if TCG_OVERSIZED_GUEST if (tlb_entry->addr_write == (vaddr | TLB_NOTDIRTY)) { tlb_entry->addr_write = vaddr; } +#else + uintptr_t orig_addr = atomic_mb_read(&tlb_entry->addr_write); + + if (orig_addr == (vaddr | TLB_NOTDIRTY)) { + atomic_cmpxchg(&tlb_entry->addr_write, orig_addr, vaddr); + } +#endif } /* update the TLB corresponding to virtual page vaddr -- 2.11.0