• Rusty Russell's avatar
    module: fix symbol waiting when module fails before init · 6f13909f
    Rusty Russell authored
    We use resolve_symbol_wait(), which blocks if the module containing
    the symbol is still loading.  However:
    
    1) The module_wq we use is only woken after calling the modules' init
       function, but there are other failure paths after the module is
       placed in the linked list where we need to do the same thing.
    
    2) wake_up() only wakes one waiter, and our waitqueue is shared by all
       modules, so we need to wake them all.
    
    3) wake_up_all() doesn't imply a memory barrier: I feel happier calling
       it after we've grabbed and dropped the module_mutex, not just after
       the state assignment.
    Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
    6f13909f
module.c 89.4 KB