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