在为IB设计驱动程序时,下面的结构和函数有什么作用?
struct ib_sa_client {
atomic_t users;
struct completion comp;
};
/**
* ib_sa_register_client - Register an SA client.
*/
void ib_sa_register_client(struct ib_sa_client *client);这将是非常友好的人来解释这些。
发布于 2014-08-23 06:52:02
这用于要执行SA (子网管理员)查询的高级驱动程序的引用计数/生存期处理。SA查询包括路径记录或服务记录查找-基本上是将查询发送到子网管理器以获取有关结构上其他实体的信息的任何内容。
这些查询是通过像ib_sa_path_rec_get这样的函数来完成的,这些函数的第一个参数是指向struct ib_sa_client的指针。这是必需的,因为这些查询是发往子网管理器的网络消息,我们需要等待响应,因此查询函数还需要一个回调参数。比方说,如果用户删除了启动SA查询的模块,我们不希望出现悬空回调。
因此,IB核心阻止ib_sa_unregister_client返回,直到所有挂起的查询完成;执行SA查询的任何模块都需要在其清理路径上调用注销函数。这可以防止内核在启动它的模块被移除后出现查询结束,这会导致跳转到回调函数,该回调函数的代码位于释放的内存中。
https://stackoverflow.com/questions/25401636
复制相似问题