在我的驱动程序的 file_operations 结构中,我有:
struct file_operations Fops = {
read: device_read,
write: device_write,
unlocked_ioctl: device_ioctl,
...
};
即没有使用 ioctl 字段。这足以避免大内核锁定并在没有任何同步的情况下进入 device_ioctl() 吗?或者我是否也必须更改代码的用户空间部分中的 ioctl() 调用?
最佳答案
阅读这篇 LWN 文章: http://lwn.net/Articles/119652/
在 2.6.33 和 2.6.35 rc 之间的某个时间(使用 git-diff 找出哪个提交)内核现在在仅定义 .ioctl 时发出警告。
这是朝着更明确和更细粒度的锁定迈进的一步。另请注意,仅更改函数签名和指针即可编译,但会引入竞争条件的可能性(两个用户空间应用程序同时执行 ioctl 调用)。
关于c - unlocked_ioctl 与普通 ioctl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1063564/