User Tools

Site Tools


Stale page

The contents of this page must be revised to reflect the current state of MINIX3.

APIC mode

APIC is a successor to the legacy PIC. The main advantage is that together with IO APIC controllers it enables the system to use much more IRQ lines than the 16 legacy (E)ISA IRQs and thus possible much less IRQ sharing. Using local APICs is a requirement for multi-processor systems.

The local APIC code is always compiled in the MINIX kernel, however the default mode is PIC. The main reason is that in contrast to real hardware, when running Minix in a virtual machine the timing of the local APIC timer is difficult to configure right and the timer ticks much faster than it should. It is not a problem when Minix runs on real hardware. To turn the APIC mode on the no_apic variable must be set to 0 in the boot monitor. Although the no_ part may look confusing APIC is meant to become the default mode in Minix as soon as the timing issue in VMs is resolved and setting this variable should turn APIC off on old systems.

To use the APIC mode on most hardware ACPI driver is required as only through ACPI can we figure out how the interrupts are routed in the system. This is not an issue in systems like KVM which use only legacy interrupts. The ACPI driver is not part of the default image as it can only be compiled with a compiler that provides native 64bit integers. Use CC=gcc to compile such an image

Known issues :

  • APIC timer ticks too fast in virtual-machines. Set apic_timer_x=N in boot monitor to slow it down N timer. The recommended value is ~10, try out what is the best match for your configuration.
  • PCI does not reset the interrupt-line-registers (ILR) of devices back to the legacy mode when shutting down, thus when rebooted without APIC mode the PCI devices will try to register IRQ > 15 which won't work
  • immediate reboot through boot monitor does not work, for some reason the interrupt controllers are not in like-after-boot state and Minix crashes. Otoh this brings the interrupt controllers to a “good” state and next reboot works
releases/3.2.0/usersguide/apic.txt · Last modified: 2014/11/14 13:53 by lionelsambuc