'安排原子'删除USB键盘时出错,以及如何阅读错误信息?

时间:2014-07-16 08:57:28

标签: linux multithreading linux-kernel scheduled-tasks

我正在使用USB键盘在液晶显示器上制作虚拟控制台并且效果很好,但是当我插上USB键盘时,它会在控制台上显示消息。

# usb 1-1: USB disconnect, device number 2
BUG: scheduling while atomic: khubd/12/0x00000002
Modules linked in:
[c03b58dc : wait_for_common+0xcc/0x1a0 ]
[c027fc2c : devtmpfs_delete_node+0xa0/0xc8 ]
[c027920c : device_del+0x160/0x188 ]
[c02d7a3c : evdev_disconnect+0xc/0x30 ]
[c02d5960 : input_unregister_device+0xcc/0x174 ]
[c02f6fb8 : hidinput_disconnect+0x4c/0x70 ]
[c02f33c4 : hid_disconnect+0x48/0x58 ]
[c02f343c : hid_device_remove+0x68/0x80 ]
[c027ba90 : __device_release_driver+0x5c/0xb8 ]
[c027bb00 : device_release_driver+0x14/0x24 ]
[c027b628 : bus_remove_device+0xe8/0x10c ]
[c02791b4 : device_del+0x108/0x188 ]
[c02f327c : hid_destroy_device+0x20/0x3c ]
[c02fb770 : usbhid_disconnect+0x18/0x34 ]
[c02bea74 : usb_unbind_interface+0xd4/0x148 ]
[c027ba90 : __device_release_driver+0x5c/0xb8 ]

我知道当内核尝试在原子上下文中休眠时,会打印“原子时调度”。 (比如在中断期间)。从消息中我可以看到它始于__device_release_driver函数并最终以wait_for_common函数结束,这就像使用调度休眠一样。在某处我读到这是一个内核错误,我应该升级我的内核(这不是我的选择)。我不确定这是不是真的是一个内核bug。 (我正在使用linux 3.3)
我的问题是,在上面的函数调用列表中,每个函数名后面的数字是多少? (例如在[c03b58dc:wait_for_common + 0xcc / 0x1a0]中,0xcc / 0x1a0部分。) 提前谢谢。

1 个答案:

答案 0 :(得分:0)

这是因为'else'关键字阻止了我在使用的urb_dequeue函数中调用spin_unlock_irqrestore。删除'else'后一切正常。仅供参考。