DragonFly BSD
DragonFly commits List (threaded) for 2011-07
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

git: DragonFly_RELEASE_2_10 kernel - Fix rare IPIQ freezes


From: Venkatesh Srinivas <vsrinivas@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Sat, 30 Jul 2011 04:06:15 -0700 (PDT)

commit fca8f6a0327fb3e1d353e97efcec2145e05e8f41
Author: Matthew Dillon <dillon@apollo.backplane.com>
Date:   Fri Jul 29 01:25:46 2011 -0700

    kernel - Fix rare IPIQ freezes
    
    * Ensure that an IPI interrupt is sent went waiting for an IPIQ
      to drain.  The IPIQ can be pushed up by passive IPIs and not
      necessarily have a signal pending on the target cpu, so we
      have to put the check in our drain loop rather than outside
      the loop.
    
    * Add a cpu_pause() to reduce power use for the IPIQ drain case.
    
    * Normalize the use of gd_intr_nesting_level and clean up the
      code syntax for the ipiq_optimized case.
    
    * Remove the previous temporary IPI interrupt signaling fix, it
      was incomplete.
    
    * Fix a missing crit_exit() in the ENOENT case for
      lwkt_send_ipiq3_nowait().
    
    * Track cpu's which are in the middle of ipiq processing and
      assert that a cpu is not in an IPIQ processing loop when
      switching between threads.
    
    * Normalize the use of ip->ip_npoll in the IPIQ code.  This
      field is used to avoid unnecessary IPI interrupts.

Summary of changes:
 sys/kern/lwkt_ipiq.c                     |   81 +++++++++++++++--------------
 sys/kern/lwkt_thread.c                   |    3 +
 sys/platform/vkernel64/x86_64/cpu_regs.c |    6 ++-
 sys/platform/vkernel64/x86_64/mp.c       |    3 +-
 sys/sys/globaldata.h                     |    2 +-
 5 files changed, 53 insertions(+), 42 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/fca8f6a0327fb3e1d353e97efcec2145e05e8f41


-- 
DragonFly BSD source repository



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]