git: kernel - Make kprintf / kputchar more robust

Aaron LI aly at crater.dragonflybsd.org
Tue Jul 20 16:30:35 PDT 2021


commit d9126105909034b7d4010f933837c7db307c8ebf
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Thu Jul 15 14:02:21 2021 -0700

    kernel - Make kprintf / kputchar more robust
    
    * kprintf() via kputchar() can deadlock due to kprintf()s made from
      Xinvltlb (which ignores critical sections).  However, we still want
      to be able to dump diagnostic information from Xinvltlb!
    
    * Adjust sccnputc() to use a non-blocking syscons lock.
    
    * Adjust kputchar() to not issue a wakeup() on the console support
      thread if called with mycpu->gd_intr_nesting_level != 0.  To
      compensate, the support thread now checks at a minimum rate of
      once per second.
    
    * Adjust kvcprintf() to always spin_trylock(), which means that
      lines will be lost if multiple cpu's compete for the console
      (but all lines will still wind up in the dmesg buffer).  This
      needs to be done to allow kprintf()s from Xinvltlb (which ignore
      critical sections) to not deadlock the machine.

Summary of changes:
 sys/dev/misc/syscons/syscons.c |  3 ++-
 sys/kern/subr_prf.c            | 42 ++++++++++++++++++++----------------------
 2 files changed, 22 insertions(+), 23 deletions(-)

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


-- 
DragonFly BSD source repository


More information about the Commits mailing list