• Linus Torvalds's avatar
    userfaultfd: simplify fault handling · f9bf3522
    Linus Torvalds authored
    Instead of waiting in a loop for the userfaultfd condition to become
    true, just wait once and return VM_FAULT_RETRY.
    
    We've already dropped the mmap lock, we know we can't really
    successfully handle the fault at this point and the caller will have to
    retry anyway.  So there's no point in making the wait any more
    complicated than it needs to be - just schedule away.
    
    And once you don't have that complexity with explicit looping, you can
    also just lose all the 'userfaultfd_signal_pending()' complexity,
    because once we've set the correct process sleeping state, and don't
    loop, the act of scheduling itself will be checking if there are any
    pending signals before going to sleep.
    
    We can also drop the VM_FAULT_MAJOR games, since we'll be treating all
    retried faults as major soon anyway (series to regularize and share more
    of fault handling across architectures in a separate series by Peter Xu,
    and in the meantime we won't worry about the possible minor - I'll be
    here all week, try the veal - accounting difference).
    
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Peter Xu <peterx@redhat.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f9bf3522
userfaultfd.c 51.6 KB