]> Zhao Yanbai Git Server - minix.git/commit
Interrupts hadling while idle
authorTomas Hruby <tom@minix3.org>
Tue, 23 Mar 2010 13:35:01 +0000 (13:35 +0000)
committerTomas Hruby <tom@minix3.org>
Tue, 23 Mar 2010 13:35:01 +0000 (13:35 +0000)
commit8451a86f0a4e7f237f64faeac1209d5a371b4898
tree580bba73ae8dc36ddb592caa4c60d1e1c8bef367
parentbde2109b7c21f3bed0ffa49e410f78cef6dd374b
Interrupts hadling while idle

- When the cpu halts, the interrupts are enable so the cpu may be
  woken up. When the interrupt handler returns but another interrupt
  is available it is also serviced immediately. This is not a problem
  per-se. It only slightly breaks time accounting as idle accounted is
  for the kernel time in the interrupt handler.

-  As the big kernel lock is lock/unlocked in the smp branch in the
   time acounting functions as they are called exactly at the places
   we need to take the lock) this leads to a deadlock.

- we make sure that once the interrupt handler returns from the nested
  trap, the interrupts are disabled. This means that only one
  interrupt is serviced after idle is interrupted.

- this requires the loop in apic timer calibration to keep reenabling
  the interrupts. I admit it is a little bit hackish (one line),
  however, this code is a stupid corner case at the boot time.
  Hopefully it does not matter too much.
kernel/arch/i386/apic.c
kernel/arch/i386/apic_asm.S
kernel/arch/i386/klib386.S
kernel/arch/i386/mpx386.S
kernel/arch/i386/sconst.h