在驱动程序的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/