On 09/12/2016 06:47 AM, Alex Bennée wrote: >> > + /* Notice an IO access, or a notdirty page. */ >> > + if (unlikely(tlb_addr & ~TARGET_PAGE_MASK)) { >> > + /* There's really nothing that can be done to >> > + support this apart from stop-the-world. */ >> > + goto stop_the_world; > We are also triggering on TLB_NOTDIRTY here in the case where a > conditional write is the first write to a page. I don't know if a > stop_the_world is required at this point but we will need to ensure we > clear bits as notdirty_mem_write() does. >
You're quite right that we could probably special-case TLB_NOTDIRTY here such that (1) we needn't leave the cpu loop, and (2) needn't utilize the actual "write" part of notdirty_mem_write; just set the bits then fall through to the actual atomic instruction below. r~