git: kernel - Fix Xinvltlb issue, fix ipiq issue, add Xsniff

Matthew Dillon dillon at crater.dragonflybsd.org
Tue Jul 19 17:46:20 PDT 2016


commit e32d324453609358a4f48c324b3216c69a6c5c4b
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Tue Jul 19 17:14:33 2016 -0700

    kernel - Fix Xinvltlb issue, fix ipiq issue, add Xsniff
    
    * The Xinvltlb IPI interrupt enables interrupts in smp_inval_intr(), which
      allows potentially pending interrupts and other things to happen.  We
      must use doreti instead of doreti_iret.
    
    * Fix a reentrancy issue with lwkt_ipiq.  Reentrancy can occur when the ipi
      callback itself needs to issue an IPI, but the target cpu FIFO is full.
      When this happens, the cpu mask may not be correct so force a scan of all
      cpus in this situation.
    
    * Add an infinite loop detection test to lwkt_process_ipiq() and jigger
      another IPI if it persists more than 10 seconds, hopefully recovering the
      system if as-yet unknown IPI issues persist.
    
    * Add the Xsniff IPI and augment systat -pv to use it.  This sniffs the %rip
      and %rpc on all cpus, allowing us to see where where the kernel spends its
      time.

Summary of changes:
 sys/cpu/x86_64/include/cpufunc.h             |   1 +
 sys/kern/kern_clock.c                        |   7 +-
 sys/kern/lwkt_ipiq.c                         | 104 +++++++++++++++++++++------
 sys/kern/lwkt_thread.c                       |   1 -
 sys/platform/pc64/apic/apic_vector.s         |  20 ++++++
 sys/platform/pc64/apic/lapic.c               |   4 ++
 sys/platform/pc64/include/intr_machdep.h     |  10 ++-
 sys/platform/pc64/x86_64/genassym.c          |   1 +
 sys/platform/pc64/x86_64/global.s            |   2 +
 sys/platform/pc64/x86_64/mp_machdep.c        |  17 ++++-
 sys/platform/vkernel64/platform/pmap_inval.c |   6 ++
 sys/sys/globaldata.h                         |   3 +-
 sys/sys/kinfo.h                              |   4 +-
 usr.bin/systat/symbols.c                     |   4 +-
 usr.bin/systat/vmmeter.c                     |  24 ++++---
 15 files changed, 164 insertions(+), 44 deletions(-)

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


-- 
DragonFly BSD source repository


More information about the Commits mailing list