Well, the routine keyboard_interrupt() does
send_cmd(0xAD); /* disable keyboard */
and
kb_wait();
and
send_cmd(0xAE); /* enable keyboard */
where send_cmd() first does a kb_wait() and then sends a byte
to the keyboard. And kb_wait() looks like
static inline void kb_wait(void)
{
int i;
for (i=0; i<0x100000; i++)
if ((inb_p(0x64) & 0x02) == 0)
return;
printk("Keyboard timed out\n");
}
So, since this happens in an interrupt routine,
if the keyboard refuses to react, we are deaf for
a long time (three times the keyboard timeout).