HomeFreeBSD

Add preliminary support for binding interrupts to CPUs:

Description

Add preliminary support for binding interrupts to CPUs:

  • Add a new intr_event method ie_assign_cpu() that is invoked when the MI code wishes to bind an interrupt source to an individual CPU. The MD code may reject the binding with an error. If an assign_cpu function is not provided, then the kernel assumes the platform does not support binding interrupts to CPUs and fails all requests to do so.
  • Bind ithreads to CPUs on their next execution loop once an interrupt event is bound to a CPU. Only shared ithreads are bound. We currently leave private ithreads for drivers using filters + ithreads in the INTR_FILTER case unbound.
  • A new intr_event_bind() routine is used to bind an interrupt event to a CPU.
  • Implement binding on amd64 and i386 by way of the existing pic_assign_cpu PIC method.
  • For x86, provide a 'intr_bind(IRQ, cpu)' wrapper routine that looks up an interrupt source and binds its interrupt event to the specified CPU. MI code can currently (ab)use this by doing:

intr_bind(rman_get_start(irq_res), cpu);

however, I plan to add a truly MI interface (probably a bus_bind_intr(9))
where the implementation in the x86 nexus(4) driver would end up calling
intr_bind() internally.

Requested by: kmacy, gallatin, jeff
Tested on: {amd64, i386} x {regular, INTR_FILTER}

Details

Provenance
jhbAuthored on Mar 14 2008, 7:41 PM
Parents
rG9e3bdede0f3d: Correct IPsec behaviour with a 'use' level in SP but no SA available.
Branches
Unknown
Tags
Unknown

Event Timeline