• Masami Hiramatsu's avatar
    module: Remove stop_machine from module unloading · e513cc1c
    Masami Hiramatsu authored
    Remove stop_machine from module unloading by adding new reference
    counting algorithm.
    
    This atomic refcounter works like a semaphore, it can get (be
    incremented) only when the counter is not 0. When loading a module,
    kmodule subsystem sets the counter MODULE_REF_BASE (= 1). And when
    unloading the module, it subtracts MODULE_REF_BASE from the counter.
    If no one refers the module, the refcounter becomes 0 and we can
    remove the module safely. If someone referes it, we try to recover
    the counter by adding MODULE_REF_BASE unless the counter becomes 0,
    because the referrer can put the module right before recovering.
    If the recovering is failed, we can get the 0 refcount and it
    never be incremented again, it can be removed safely too.
    
    Note that __module_get() forcibly gets the module refcounter,
    users should use try_module_get() instead of that.
    Signed-off-by: default avatarMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
    e513cc1c
module.c 96.1 KB