c - unlocked_ioctl 与普通 ioctl

标签 c linux synchronization kernel ioctl

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

相关文章:

c++ - 在单独的函数中创建一个动态数组并通过调用函数对其进行操作

linux - 在另一个进程上设置限制

synchronized关键字的Java多线程用途

java - 许多对象和计数器的同步

c - 从 for 循环中的字节中提取半字节

c - 基数排序通过仅更改计数子例程的一个循环给出错误的答案

C初学者,代码输出不正确

linux - Shell 脚本变量作用域

linux - chmod o+rx '{}'\的含义

synchronization - 分布式客户端之间同步状态的方式