浅析linux内核中的idr机制
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-05-13
统允许的动态总线号的最大值 */ res = idr_get_new_above(&i2c_adapter_idr, adapter, __i2c_first_dynamic_bus_num, &id); mutex_unlock(&core_lists); if (res < 0) { if (res == -EAGAIN) goto retry; return res; } adapter->nr = id; return i2c_register_adapter(adapter); } EXPORT_SYMBOL(i2c_add_adapter); /* 采用静态总线号声明并注册一个i2c适配器(adapter) */ int i2c_add_numbered_adapter(struct i2c_adapter *adap) { int id; int status; if (adap->nr & ~MAX_ID_MASK) return -EINVAL; retry: if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0) return -ENOMEM; mutex_lock(&core_lists); /* "above" here means "above or equal to", sigh; * we need the "equal to" result to force the result */ status = idr_get_new_above(&i2c_adapter_idr, adap, adap->nr, &id); if (status == 0 && id != adap->nr) { status = -EBUSY; idr_remove(&i2c_adapter_idr, id); } mutex_unlock(&core_lists); if (status == -EAGAIN) goto retry; if (status == 0) status = i2c_register_adapter(adap); return status; } EXPORT_SYMBOL_GPL(i2c_add_numbered_adapter); /* 注销一个i2c适配器 */ int i2c_del_adapter(struct i2c_adapter *adap) { ... /* free bus id */ idr_remove(&i2c_adapter_idr, adap->nr); ... return res; } EXPORT_SYMBOL(i2c_del_adapter); /* 通过ID号获得i2c_adapter设备结构体 */ struct i2c_adapter* i2c_get_adapter(int id) { struct i2c_adapter *adapter; mutex_lock(&core_lists); adapter = (struct i2c_adapter *)idr_find(&i2c_adapter_idr, id); if (adapter && !try_module_get(adapter->owner)) adapter = NULL; mutex_unlock(&core_lists); return adapter; } EXPORT_SYMBOL(i2c_get_adapter); |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: bind 完成正确安装下一篇: ln 命令
关于浅析linux内核中的idr机制的所有评论