kernel - Spread IPIs out to more priority levels
authorMatthew Dillon <dillon@apollo.backplane.com>
Mon, 27 Mar 2017 06:35:55 +0000 (23:35 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Mon, 27 Mar 2017 06:43:09 +0000 (23:43 -0700)
commitf240042b9f9bcfdacd70499659fcc5f55d5e49ab
tree216c0be15c1189fa67063833280fa39240b41ac7
parent67534613c487a9b4308151907f5d0e4777f5c814
kernel - Spread IPIs out to more priority levels

* Due to the brandamaged way the LAPIC queues received IPIs, each
  priority level (the top 4 bits of the 8 bit vector) has a 2-entry
  FIFO.  Bring in comments from FreeBSD on how this works.

* Change our IPI vectors which previously used 2 priority levels to now
  use 3 priority levels.  Each source is generally limited by an atomic
  op to avoid multi-queueing and hopefully that means the above LAPIC hw
  queue will never refuse to accept an IPI.

  IPIQ and TIMER use group 1

  INVLTLB (and INVLPG) uses group 2

  SNIFF, CPUSTOP, and SPURIOUSINT use group 3

* Reduces the number of vectors available per cpu by 16, but shouldn't
  present that big a problem.
sys/platform/pc64/apic/ioapic_abi.c
sys/platform/pc64/include/intr_machdep.h
sys/platform/pc64/x86_64/msi.c