どうやらirqがずれているらしい。

$ cat /proc/interrupts
           CPU0       CPU1
  0:      23678          0   IO-APIC-edge      timer
  1:      11846          0   IO-APIC-edge      i8042
  9:       4381          0   IO-APIC-fasteoi   acpi
 12:      81025          0   IO-APIC-edge      i8042
 14:          0          0   IO-APIC-edge      ata_piix
 15:          0          0   IO-APIC-edge      ata_piix
 16:       3622          0   IO-APIC-fasteoi   eth0
 17:          0          0   IO-APIC-fasteoi   i915
 20:      33600          0   IO-APIC-fasteoi   ahci
 21:         53          0   IO-APIC-fasteoi
 23:         75          0   IO-APIC-fasteoi
NMI:          0          0   Non-maskable interrupts
LOC:     282148     274159   Local timer interrupts
SPU:          0          0   Spurious interrupts
CNT:          0          0   Performance counter interrupts
PND:          0          0   Performance pending work
RES:      16772      21554   Rescheduling interrupts
CAL:         11         25   Function call interrupts
TLB:          8         24   TLB shootdowns
ERR:          0
MIS:          0

見てわかることは、i915の割り込みが一回も入っていないということ。
irqpoll=onしてると、別のIRQも見るようなので、ネットワーク使っていなくてもeth0の割り込みが増えていく。んで、ちゃんと動く。
irqpoll=offだと、irq 16 not caredが出る。恐らく、i915のIRQは16番が正しいのではないかと。


あとはキーリピートだけ。これ何だろう?