可以在ioctl内部进行msleep导致不正确的互斥操作吗?

时间:2013-08-26 08:59:50

标签: linux mutex sleep ioctl

在我的linux驱动程序中,我有一个ioctl调度程序,一个分支使用msleep()函数。

static long p347_fpga_ioctl(struct file *filp, uint cmd, unsigned long arg) 
{
    long ret_code = 0;
    ...

    switch (cmd) {
        ...
        case p347_IOCTL_CLIENT_START_ROT: {
            if (arg != 0) {
                ret_code = rot_set_params(trp); //idx
                if (ret_code == 0) {
                    ret_code = rot_run(trp->rot_idx);
                } else {
                    printk("Cannot setup rot channel with error=%d\n",ret_code);
                }
            }
        }
    break; }
        ...
    };
    ...
    return ret_code;
}

int rot_run(unsigned char rot_idx)包含msleep()调用

此外,我的用户空间程序使用互斥锁内的所有ioctl来防止同时调用。

...
pthread_mutex_lock(&FMutex);
ret = ioctl(dev_desc, p347_IOCTL_CLIENT_START_ROT, &params);
pthread_mutex_unlock(&FMutex);
...

这样,msleep()会导致任何问题吗?

0 个答案:

没有答案