Hi Sergey,

I love your patch! Yet something to improve:

[auto build test ERROR on linux-sof-driver/master]
[also build test ERROR on v4.19 next-20181019]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Sergey-Senozhatsky/panic-avoid-deadlocks-in-re-entrant-console-drivers/20181025-181929
base:   https://github.com/thesofproject/linux master
config: i386-randconfig-x077-201842 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   kernel/panic.c: In function 'panic':
>> kernel/panic.c:237:2: error: implicit declaration of function 
>> 'unblank_screen' [-Werror=implicit-function-declaration]
     unblank_screen();
     ^~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/unblank_screen +237 kernel/panic.c

   186  
   187          /*
   188           * If we have crashed and we have a crash kernel loaded let it 
handle
   189           * everything else.
   190           * If we want to run this after calling panic_notifiers, pass
   191           * the "crash_kexec_post_notifiers" option to the kernel.
   192           *
   193           * Bypass the panic_cpu check and call __crash_kexec directly.
   194           */
   195          if (!_crash_kexec_post_notifiers) {
   196                  printk_safe_flush_on_panic();
   197                  __crash_kexec(NULL);
   198  
   199                  /*
   200                   * Note smp_send_stop is the usual smp shutdown 
function, which
   201                   * unfortunately means it may not be hardened to work 
in a
   202                   * panic situation.
   203                   */
   204                  smp_send_stop();
   205          } else {
   206                  /*
   207                   * If we want to do crash dump after notifier calls and
   208                   * kmsg_dump, we will need architecture dependent extra
   209                   * works in addition to stopping other CPUs.
   210                   */
   211                  crash_smp_send_stop();
   212          }
   213  
   214          /*
   215           * Run any panic handlers, including those that might need to
   216           * add information to the kmsg dump output.
   217           */
   218          atomic_notifier_call_chain(&panic_notifier_list, 0, buf);
   219  
   220          /* Call flush even twice. It tries harder with a single online 
CPU */
   221          printk_safe_flush_on_panic();
   222          kmsg_dump(KMSG_DUMP_PANIC);
   223  
   224          /*
   225           * If you doubt kdump always works fine in any situation,
   226           * "crash_kexec_post_notifiers" offers you a chance to run
   227           * panic_notifiers and dumping kmsg before kdump.
   228           * Note: since some panic_notifiers can make crashed kernel
   229           * more unstable, it can increase risks of the kdump failure 
too.
   230           *
   231           * Bypass the panic_cpu check and call __crash_kexec directly.
   232           */
   233          if (_crash_kexec_post_notifiers)
   234                  __crash_kexec(NULL);
   235  
   236  #ifdef CONFIG_VT
 > 237          unblank_screen();
   238  #endif
   239          console_unblank();
   240  
   241          /*
   242           * We may have ended up stopping the CPU holding the lock (in
   243           * smp_send_stop()) while still having some valuable data in 
the console
   244           * buffer.  Try to acquire the lock then release it regardless 
of the
   245           * result.  The release will also print the buffers out.  Locks 
debug
   246           * should be disabled to avoid reporting bad unlock balance when
   247           * panic() is not being callled from OOPS.
   248           */
   249          debug_locks_off();
   250          console_flush_on_panic();
   251  
   252          if (!panic_blink)
   253                  panic_blink = no_blink;
   254  
   255          if (panic_timeout > 0) {
   256                  /*
   257                   * Delay timeout seconds before rebooting the machine.
   258                   * We can't use the "normal" timers since we just 
panicked.
   259                   */
   260                  pr_emerg("Rebooting in %d seconds..\n", panic_timeout);
   261  
   262                  for (i = 0; i < panic_timeout * 1000; i += 
PANIC_TIMER_STEP) {
   263                          touch_nmi_watchdog();
   264                          if (i >= i_next) {
   265                                  i += panic_blink(state ^= 1);
   266                                  i_next = i + 3600 / PANIC_BLINK_SPD;
   267                          }
   268                          mdelay(PANIC_TIMER_STEP);
   269                  }
   270          }
   271          if (panic_timeout != 0) {
   272                  /*
   273                   * This will not be a clean reboot, with everything
   274                   * shutting down.  But if there is a chance of
   275                   * rebooting the system it will be rebooted.
   276                   */
   277                  emergency_restart();
   278          }
   279  #ifdef __sparc__
   280          {
   281                  extern int stop_a_enabled;
   282                  /* Make sure the user can actually press Stop-A (L1-A) 
*/
   283                  stop_a_enabled = 1;
   284                  pr_emerg("Press Stop-A (L1-A) from sun keyboard or send 
break\n"
   285                           "twice on console to return to the boot 
prom\n");
   286          }
   287  #endif
   288  #if defined(CONFIG_S390)
   289          {
   290                  unsigned long caller;
   291  
   292                  caller = (unsigned long)__builtin_return_address(0);
   293                  disabled_wait(caller);
   294          }
   295  #endif
   296          pr_emerg("---[ end Kernel panic - not syncing: %s ]---\n", buf);
   297          local_irq_enable();
   298          for (i = 0; ; i += PANIC_TIMER_STEP) {
   299                  touch_softlockup_watchdog();
   300                  if (i >= i_next) {
   301                          i += panic_blink(state ^= 1);
   302                          i_next = i + 3600 / PANIC_BLINK_SPD;
   303                  }
   304                  mdelay(PANIC_TIMER_STEP);
   305          }
   306  }
   307  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to