try_module_get简析


 try_module_get 如果模块已经插入内核,则递增该模块引用计数;如果该模块还没有插入内核,则返回0表示出错

代码如下:

include/linux/module.h 

413 static inline int try_module_get(struct module *module)

414 {

415         int ret = 1;

416 

417         if (module) {

418                 unsigned int cpu = get_cpu();

419                 if (likely(module_is_live(module)))

420                         local_inc(&module->ref[cpu].count);

421                 else

422                         ret = 0;

423                 put_cpu();

424         }

425         return ret;

426 }

例如在fs/char_dev.c cdev_get中使用。

268 static struct kobject *cdev_get(struct cdev *p)

269 {

270         struct module *owner = p->owner;

271         struct kobject *kobj;

272         

273         if (owner && !try_module_get(owner))

274                 return NULL;

275         kobj = kobject_get(&p->kobj);

276         if (!kobj)

277                 module_put(owner);

278         return kobj;

279 }  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值