0

在我的 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() 会导致任何问题吗?

4

0 回答 0