Skip to content
  • John Baldwin's avatar
    Add preliminary support for binding interrupts to CPUs: · eaf86d16
    John Baldwin authored
    - 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}
    eaf86d16