-1
小さな組み込みLinuxデバイスの起動時に非常にまれなカーネルパニックが発生するのを避けるため、USBカーネルモジュールに短い遅延を追加する必要があります。問題のあるコードは以下のとおりです。私がコードに傷をつけた場合、デバイスは一晩中正常に動作していました。私は小さな遅延を追加したいが、usleep_rangeとmsleepはカーネルトレースバック "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