Skip to content
  • Peter Zijlstra's avatar
    mmu_notifier: add call_srcu and sync function for listener to delay call and sync · b972216e
    Peter Zijlstra authored
    
    
    When kernel device drivers or subsystems want to bind their lifespan to
    t= he lifespan of the mm_struct, they usually use one of the following
    methods:
    
    1. Manually calling a function in the interested kernel module.  The
       funct= ion call needs to be placed in mmput.  This method was rejected
       by several ker= nel maintainers.
    
    2. Registering to the mmu notifier release mechanism.
    
    The problem with the latter approach is that the mmu_notifier_release
    cal= lback is called from__mmu_notifier_release (called from exit_mmap).
    That functi= on iterates over the list of mmu notifiers and don't expect
    the release call= back function to remove itself from the list.
    Therefore, the callback function= in the kernel module can't release the
    mmu_notifier_object, which is actuall= y the kernel module's object
    itself.  As a result, the destruction of the kernel module's object must
    to be done in a delayed fashion.
    
    This patch adds support for this delayed callback, by adding a new
    mmu_notifier_call_srcu function that receives a function ptr and calls
    th= at function with call_srcu.  In that function, the kernel module
    releases its object.  To use mmu_notifier_call_srcu, the calling module
    needs to call b= efore that a new function called
    mmu_notifier_unregister_no_release that as its= name implies,
    unregisters a notifier without calling its notifier release call= back.
    
    This patch also adds a function that will call barrier_srcu so those
    kern= el modules can sync with mmu_notifier.
    
    Signed-off-by: default avatarPeter Zijlstra <peterz@infradead.org>
    Signed-off-by: default avatarJérôme Glisse <jglisse@redhat.com>
    Signed-off-by: default avatarOded Gabbay <oded.gabbay@amd.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b972216e