BUG:scheduling while atomic
通过学习,发现在中断的回调中,如果调用msleep函数,会引起进程调度,这时就会警告:scheduling while atomic
其实如果调用其他可能导致中断进程睡眠的函数如:down_interruptible(),也会出现这样的问题。
内核检测到了这个问题,便给出了警告。
============================================
参考:http://ecdav.cuc.edu.cn/bbs/viewthread.php?tid=145
在spin lock 期间,调用了可以睡眠的 down_interruptible()函数。内核检测到了这个问题,便给出了警告。
参考:http://bbs.chinaunix.net/thread-1939737-1-1.html
顾名思义,kmap_atomic和kunmap_atmoic之间是不允许调度的,而f_op->read()是有可能引起调度的。一旦发生调度的话就可能发生问题:
scheduling while atomic有几种case,比如:
1. 如果你抓了一把spinlock,然后被调度出去了,就可能会引起死锁的问题。
2. 就kmap_atomic和kunmap_atomic之间,不允许被调度出去,防止别的process也去调用kmap_atomic,如果交叉调用的话,就会出现问题了。
kernel打出warning只是提醒你,这样做可能会有问题,但是问题不一定现在就会发生。。。