Alex Bennée <alex.ben...@linaro.org> writes: > Nikunj A Dadhania <nik...@linux.vnet.ibm.com> writes: > >> Richard Henderson <r...@twiddle.net> writes: >> >>> 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. >> >> I do hit this case with ppc64, where I see that its the first write to >> the page and it exits from this every time, causing the kernel to print >> soft-lockups. >> >> Can we add the special case here for NOTDIRTY and set the page as dirty >> and return successfully? > > Does the atomic step fall-back not work for you?
No, it doesn't seem so, otherwise I shouldn't have seen soft-lockups. Regards Nikunj