在我的 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, ¶ms);
pthread_mutex_unlock(&FMutex);
...
这样, msleep() 会导致任何问题吗?