Hi, i've written a device driver for a cdrom device. It's old. I know. But i keep getting compaints that it doesn't work reliably. It used to work OK in the old 1.3.fourties. Since more modern kernel version, it tended to break more often. Read errors... I spent days tracking down the bug, it appeared that the driver was woken without an interrupt occurring, or my own time-out causing the wake-up. I was stymied. Now i posted a message similar to this to the kernel list half a year ago. But i wasn't capable of reading the list (sorry) because i use my e-mail address at work. Apparently, there was some short reaction that my go_to_sleep routine should do something like
while(!my_interrupt_woke_me) sleep_on(&wait) Why is this? Why does the kernel wake me up if i didn't ask for it (i.e., no interrupt occured and no time-out occurred) I found out that the sleep_on() could immediately wakeup (i.e., not go to sleep) for many times in a row. I had to hack around by trying to go to sleep up to 100 times, but i am not charmed by the hack. Does it have to do with the (new?) macros DEVICE_TIMEOUT and TIMEOUT_VALUE that i've _not_ defined (because i wrote it in the KHG 0.5 days...). Thanks, ---david (david@tm.tno.nl) |