unlocked_ioctl vs normal ioctl

后端 未结 3 1597
难免孤独
难免孤独 2021-02-05 12:33

In my driver\'s file_operations structure, I have:

struct file_operations Fops = {
  read:    device_read,
  write:   device_write,
  unlocked_ioctl:   device_io         


        
相关标签:
3条回答
  • 2021-02-05 12:49

    Read this LWN article: http://lwn.net/Articles/119652/

    Also sometime between 2.6.33 and a 2.6.35 rc (use git-diff to find out which commit) the kernel now WARNs when only .ioctl is defined.

    This is a move towards more explicit and fine-grained locking. Also note only changing the function signature and pointer will compile but will introduce the possibility of race conditions (two userspace apps doing ioctl calls at same time).

    0 讨论(0)
  • 2021-02-05 13:08

    Andi Kleem posted a recipe for a quick-and-dirty conversion of code using ioctl to unlocked_ioctl on Linux kernel mailing list:

    [JANITOR PROPOSAL] Switch ioctl functions to ->unlocked_ioctl

    The recipe explains how to tweak the function's parameters and insert locking and unlocking calls.

    0 讨论(0)
  • 2021-02-05 13:10

    Uhm, I solved this. It is also required to change signature of device_ioctl function. There is no inode parameter, and also the function should return long. Just like in following patch:

    -static int st_ioctl(struct inode *inode, struct file *file,
    - unsigned int cmd_in, unsigned long arg)
    +static long st_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
    {
    

    (from: http://linux.derkeiler.com/Mailing-Lists/Kernel/2008-01/msg06799.html)

    0 讨论(0)
提交回复
热议问题