-1
我需要在USB内核模块中添加一个很短的延迟,以避免在小型嵌入式Linux设备启动时出现极其罕见的内核恐慌。有问题的代码如下。如果我在代码中加入了一个新元素,那么该设备将成功运行整夜,直到它以前失败。我想添加一个小延迟,但usleep_range和msleep会导致内核回溯“Scheduling While Atomic”。如何在没有睡眠的情况下在这段代码中添加延迟?是做一个while循环的方式吗?如何在Linux内核模块中延迟关键部分
usb_hub_for_each_child(udev, chix, childdev) {
printk(KERN_ERR "r8a66597: Start USB Discover\n");
//usleep_range(10000, 11000);
//preempt_disable();
//msleep(1);
collect_usb_address_map(childdev, map);
//usleep_range(10000, 11000);
printk(KERN_ERR "r8a66597: Stop USB Discover\n");
//msleep(1);
//preempt_enable();
}
你需要找到你的代码有竞争状态的根源。 – 0andriy