模块API之module_is_live

来源:互联网 发布:网络机柜接线图视频 编辑:程序博客网 时间:2024/05/29 09:28
module_is_live 用于判断模块是否处于活动状态使用的实例如下所示:bool try_module_get(struct module *module){bool ret = true;if (module) {preempt_disable();/* Note: here, we can fail to get a reference */if (likely(module_is_live(module) &&   atomic_inc_not_zero(&module->refcnt) != 0))trace_module_get(module, _RET_IP_);elseret = false;preempt_enable();}return ret;}其源码在分析如下:static inline int module_is_live(struct module *mod){return mod->state != MODULE_STATE_GOING;}可见主要是通过判断模块的状态不是MODULE_STATE_GOING就认为模块处于活动状态,也就是说模块如果处于MODULE_STATE_GOING状态的话,模块已经不能正常工作了模块总共有四种状态,分别如下:enum module_state {MODULE_STATE_LIVE,/* Normal state. */MODULE_STATE_COMING,/* Full formed, running module_init. */MODULE_STATE_GOING,/* Going away. */MODULE_STATE_UNFORMED,/* Still setting it up. */};