freebsd-nq/sys/i386/include
John Baldwin 215e7c161a Rework how we wire up interrupt sources to CPUs:
- Throw out all of the logical APIC ID stuff.  The Intel docs are somewhat
  ambiguous, but it seems that the "flat" cluster model we are currently
  using is only supported on Pentium and P6 family CPUs.  The other
  "hierarchy" cluster model that is supported on all Intel CPUs with
  local APICs is severely underdocumented.  For example, it's not clear
  if the OS needs to glean the topology of the APIC hierarchy from
  somewhere (neither ACPI nor MP Table include it) and setup the logical
  clusters based on the physical hierarchy or not.  Not only that, but on
  certain Intel chipsets, even though there were 4 CPUs in a logical
  cluster, all the interrupts were only sent to one CPU anyway.
- We now bind interrupts to individual CPUs using physical addressing via
  the local APIC IDs.  This code has also moved out of the ioapic PIC
  driver and into the common interrupt source code so that it can be
  shared with MSI interrupt sources since MSI is addressed to APICs the
  same way that I/O APIC pins are.
- Interrupt source classes grow a new method pic_assign_cpu() to bind an
  interrupt source to a specific local APIC ID.
- The SMP code now tells the interrupt code which CPUs are avaiable to
  handle interrupts in a simpler and more intuitive manner.  For one thing,
  it means we could now choose to not route interrupts to HT cores if we
  wanted to (this code is currently in place in fact, but under an #if 0
  for now).
- For now we simply do static round-robin of IRQs to CPUs when the first
  interrupt handler just as before, with the change that IRQs are now
  bound to individual CPUs rather than groups of up to 4 CPUs.
- Because the IRQ to CPU mapping has now been moved up a layer, it would
  be easier to manage this mapping from higher levels.  For example, we
  could allow drivers to specify a CPU affinity map for their interrupts,
  or we could allow a userland tool to bind IRQs to specific CPUs.

The MFC is tentative, but I want to see if this fixes problems some folks
had with UP APIC kernels on 6.0 on SMP machines (an SMP kernel would work
fine, but a UP APIC kernel (such as GENERIC in RELENG_6) would lose
interrupts).

MFC after:	1 week
2006-02-28 22:24:55 +00:00
..
pc Make the facility for recognizing BIOS-signatures more general 2005-07-21 09:48:37 +00:00
_bus.h Break out the definition of bus_space_{tag,handle}_t and a few other types 2005-04-18 21:45:34 +00:00
_inttypes.h
_limits.h Move MINSIGSTKSZ from <machine/signal.h> to <machine/_limits.h> and rename 2005-08-20 16:44:41 +00:00
_stdint.h
_types.h By popular demand, move __HAVE_ACPI and __PCI_REROUTE_INTERRUPT into 2006-01-09 06:05:57 +00:00
acpica_machdep.h
apicreg.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
apicvar.h Rework how we wire up interrupt sources to CPUs: 2006-02-28 22:24:55 +00:00
apm_bios.h Move pc98 specific parts to the pc98 specific file. 2005-04-03 23:27:11 +00:00
apm_segments.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
asm.h
asmacros.h - Move PUSH_FRAME and POP_FRAME into machine/asmacros.h. 2005-12-05 21:44:47 +00:00
atomic.h Add a new atomic_fetchadd() primitive that atomically adds a value to a 2005-09-27 17:39:11 +00:00
bootinfo.h
bus_dma.h Refactor the bus_dma header files so that the interface is described in 2005-03-14 16:46:28 +00:00
bus.h Fix -Wundef warnings found when compiling i386 LINT, GENERIC and 2005-12-05 11:58:35 +00:00
clock.h Tweak how the MD code calls the fooclock() methods some. Instead of 2005-12-22 22:16:09 +00:00
cpu.h Tweak how the MD code calls the fooclock() methods some. Instead of 2005-12-22 22:16:09 +00:00
cpufunc.h Add a knob for disabling/enabling HTT, "machdep.hyperthreading_allowed". 2005-05-13 00:10:56 +00:00
cputypes.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
cserial.h Prepare for sconfig(8) update. 2006-01-30 13:34:57 +00:00
db_machdep.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
elan_mmcr.h Expand indirect reference to BSD license with the current one. 2005-01-06 22:05:28 +00:00
elf.h
endian.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
exec.h Use a common multi-inclusion protection, and add such a 2005-02-19 21:16:48 +00:00
float.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
floatingpoint.h The file machine/ieeefp.h needs sys/cdefs.h on amd64 and i386 after my 2005-04-02 17:31:42 +00:00
frame.h Tweak how the MD code calls the fooclock() methods some. Instead of 2005-12-22 22:16:09 +00:00
gdb_machdep.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
i4b_cause.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
i4b_debug.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
i4b_ioctl.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
i4b_rbch_ioctl.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
i4b_tel_ioctl.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
i4b_trace.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
ieeefp.h Remove fpsetsticky(). This was added for SysV compatibility, but due 2005-03-15 15:53:39 +00:00
if_wl_wavelan.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
in_cksum.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
intr_machdep.h Rework how we wire up interrupt sources to CPUs: 2006-02-28 22:24:55 +00:00
ioctl_bt848.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
ioctl_meteor.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
iodev.h
kdb.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
legacyvar.h Expose legacy_pcib_alloc_resource, and use it in the mptable pci bus 2005-09-17 23:57:53 +00:00
limits.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
md_var.h - Print number of physical/logical cores and more CPUID info. 2005-10-14 22:52:01 +00:00
memdev.h
metadata.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
mp_watchdog.h
mptable.h guard function decls with _KERNEL so user code can include this file 2006-02-22 21:38:33 +00:00
mutex.h
npx.h - Move the NPX_DEBUG option to options.{i386,pc98} and use opt_npx.h. 2005-05-12 12:47:41 +00:00
param.h By popular demand, move __HAVE_ACPI and __PCI_REROUTE_INTERRUPT into 2006-01-09 06:05:57 +00:00
pcaudioio.h
pcb_ext.h Explicitly switch to the new TSS by updating the current CPU's TSS selector 2005-09-15 17:30:08 +00:00
pcb.h Remove pcb_switchout, it has not been used for a long time. 2005-12-29 13:23:48 +00:00
pci_cfgreg.h Move pc98 specific parts to the pc98 specific file. 2005-04-03 23:27:11 +00:00
pcpu.h Move global variable private_tss into per-cpu area. 2005-12-26 00:07:19 +00:00
pcvt_ioctl.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
pecoff_machdep.h
perfmon.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
pmap.h - Cleanup whitespace and extra ()s in vtophys() macros. 2005-12-06 21:09:01 +00:00
pmc_mdep.h MFP4: 2005-06-09 19:45:09 +00:00
ppireg.h - Move timerreg.h to <arch>/include and split i8253 specific defines into 2005-05-14 09:10:02 +00:00
privatespace.h
proc.h Divorce critical sections from spinlocks. Critical sections as denoted by 2005-04-04 21:53:56 +00:00
profile.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
psl.h
ptrace.h Add support for XMM registers in GDB for x86 processors that support 2005-05-31 09:43:04 +00:00
reg.h Add support for XMM registers in GDB for x86 processors that support 2005-05-31 09:43:04 +00:00
reloc.h
resource.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
runq.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
segments.h Change the segment limits to 4GB, we set the user accessible bit on all 2005-04-13 22:57:17 +00:00
setjmp.h
sf_buf.h Implement support for CPU private mappings within sf_buf_alloc(). 2005-02-13 06:23:13 +00:00
sigframe.h
signal.h Move MINSIGSTKSZ from <machine/signal.h> to <machine/_limits.h> and rename 2005-08-20 16:44:41 +00:00
smapi.h
smp.h Tweak how the MD code calls the fooclock() methods some. Instead of 2005-12-22 22:16:09 +00:00
speaker.h Add /dev/speaker support to amd64. 2005-11-11 09:57:32 +00:00
specialreg.h - Print number of physical/logical cores and more CPUID info. 2005-10-14 22:52:01 +00:00
stdarg.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
sysarch.h Change the segment limits to 4GB, we set the user accessible bit on all 2005-04-13 22:57:17 +00:00
timerreg.h Change the spkr_set_pitch() function to a macro to fix low level profiling. 2005-05-28 13:40:27 +00:00
trap.h Add POSIX siginfo_t's si_code, this is for upcoming POSIX realtime signal 2005-10-14 03:01:14 +00:00
tss.h
ucontext.h MFamd64: use register_t's. 2005-09-12 03:34:05 +00:00
varargs.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
vm86.h
vmparam.h
xbox.h Cleaned the memory initialization up, moved some defines from the framebuffer 2006-02-10 18:48:22 +00:00