我正在跟踪我们的一个驱动程序中的“原子调度”错误,并且想知道 ioctl 是否是原子上下文。此外,如果有人对如何进入和退出原子上下文以及它们出现的常见位置有什么要分享的,那将是有帮助的。
问问题
2560 次
2 回答
10
不,ioctl 通常在进程上下文中运行。如果驱动程序在 ioctl 处理期间抓住了自旋锁,则驱动程序将进入原子上下文并保持在原子上下文中,直到它释放自旋锁。
请参阅:http ://lwn.net/Articles/274695/以获得关于 Linux 中原子上下文的良好讨论
于 2010-09-02T16:37:15.253 回答
2
你有没有打开CONFIG_DEBUG_SPINLOCK_SLEEP
,这可能会给你更多信息,包括堆栈跟踪,错误在哪里。
另一个角度是你在调用什么睡眠函数。例子是msleep()
,mutex_lock()
等copy_to_user()
。
于 2010-09-08T04:22:25.753 回答