DragonFly commits List (threaded) for 2004-12
cvs commit: src/sys/dev/misc/kbd
dillon 2004/12/16 00:30:15 PST
DragonFly src repository
Fix the keyboard lockup problem. There were two big clues: The first was a
report that it sometimes seemed to occur during heavy video operations. The
second was a set of kernel dates from Jansen Gotis and Michael Powell that
focused me in on the right part of the code.
Simply put, there is a hack for AT keyboards that polls the keyboard for
data 10 times a second in order to catch lost interrupts. Lost interrupts
can occur because unlike other interrupts the AT keyboard interrupt is
edge-triggered. This means that latency in the system can cause the
keyboard interrupt to retrigger before it is reenabled after an earlier
event but not cause any further interrupts.
There is a big hack in the system that polls for keyboard data 10 times a
second in order to detect this 'lost' interrupt case. However, that code
was broken by the timeout->callout work I did on September 19th. An
incorrectly placed callout_reset() stopped the polling code in its tracks.
Reported-by: Jeroen Ruigrok/asmodai <asmodai@xxxxxx>,
Chris Pressey <cpressey@xxxxxxxxxxxxxxx>,
Michael Powell <nightrecon@xxxxxxxxxxx>,
Jansen Gotis <jtgotis@xxxxxxxxx>,
Revision Changes Path
1.14 +2 -2 src/sys/dev/misc/kbd/kbd.c