linux模块加载竞争

到目前, 我们的讨论已来到一个模块加载的重要方面: 竞争情况. 如果你在如何编写你的 初始化函数上不小心, 你可能造成威胁到整个系统的稳定的情形. 我们将在本书稍后讨论 竞争情况; 现在, 快速提几点就足够了:

首先时你应该一直记住, 内核的某些别的部分会在注册完成之后马上使用任何你注册的设 施. 这是完全可能的, 换句话说, 内核将调用进你的模块, 在你的初始化函数仍然在运行 时. 所以你的代码必须准备好被调用, 一旦它完成了它的第一个注册. 不要注册任何设施, 直到所有的需要支持那个设施的你的内部初始化已经完成.

你也必须考虑到如果你的初始化函数决定失败会发生什么, 但是内核的一部分已经在使用 你的模块已注册的设施. 如果这种情况对你的模块是可能的, 你应当认真考虑根本不要使 初始化失败. 毕竟, 模块已清楚地成功输出一些有用的东西. 如果初始化必须失败, 必须 小心地处理任何可能的在内核别处发生的操作, 直到这些操作已完成.

原文地址:https://www.cnblogs.com/fanweisheng/p/11138405.html