On Tue, 2011-07-19 at 09:26 +0100, David Laight wrote: > > Got it, if the fault_in_user_writeable() is designed to catch the > > exact same write permission fault problem we discuss here, so > > your patch fixed that very nicely, we should fixup it by directly > > calling handle_mm_fault like what you did because we are for sure > > to know what just happened(permission violation), its not necessary > > to check what's happened by calling gup-->follow_page, and > > further the follow_page failed to report the fault :-) > > One thought I've had - and I don't know enough about the data > area in use to know if it is a problem - is what happens if > a different cpu faults on the same user page and has already > marked it 'valid' between the fault happening and the fault > handler looking at the page tables to find out why. > If any of the memory areas are shared, it might be that the > PTE (etc) might already show the page a writable by the > time the fault handler is looking at them - this might confuse it!
The same way handle_mm_fault() deals with two CPUs faulting on the same page at the same time :-) All the necessary locking is in there, handle_mm_fault() and friends will walk the page tables, take the PTE lock, will notice it's already been all fixed up (well that it doesn't need to do a page fault at least), will then call ptep_set_access_flags() which will itself notice there's nothing to do ... etc So all you'll hit is the spurious fault TLB invalidate in the write case, which is necessary on some archs (well, we think it is tho I don't know which archs really :-) Cheers, Ben. _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev