Date: Thu, 22 Mar 2018 15:11:54 +0000 (UTC) From: Warner Losh <imp@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r331359 - head/sys/dev/syscons Message-ID: <201803221511.w2MFBsX4033828@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: imp Date: Thu Mar 22 15:11:53 2018 New Revision: 331359 URL: https://svnweb.freebsd.org/changeset/base/331359 Log: Revert r331298 Normally, shutdown_nice() just signals init. However, sometimes it calls kern_reboot directly. For that case, r331298 dropped the Giant lock before calling it. This turns out to be incorrect for the more common case where init exists and we just signal it. Restore the old behavior. The direct call to kern_reboot() doesn't sync buffers to the disk, so should work with Giant held, so we don't need to drop locks here for that. Noticed by: bde@ Sponsored by: Netflix Modified: head/sys/dev/syscons/syscons.c Modified: head/sys/dev/syscons/syscons.c ============================================================================== --- head/sys/dev/syscons/syscons.c Thu Mar 22 14:51:05 2018 (r331358) +++ head/sys/dev/syscons/syscons.c Thu Mar 22 15:11:53 2018 (r331359) @@ -3858,28 +3858,22 @@ next_code: case RBT: #ifndef SC_DISABLE_REBOOT - if (enable_reboot && !(flags & SCGETC_CN)) { - mtx_unlock(&Giant); + if (enable_reboot && !(flags & SCGETC_CN)) shutdown_nice(0); - } #endif break; case HALT: #ifndef SC_DISABLE_REBOOT - if (enable_reboot && !(flags & SCGETC_CN)) { - mtx_unlock(&Giant); + if (enable_reboot && !(flags & SCGETC_CN)) shutdown_nice(RB_HALT); - } #endif break; case PDWN: #ifndef SC_DISABLE_REBOOT - if (enable_reboot && !(flags & SCGETC_CN)) { - mtx_unlock(&Giant); + if (enable_reboot && !(flags & SCGETC_CN)) shutdown_nice(RB_HALT|RB_POWEROFF); - } #endif break;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201803221511.w2MFBsX4033828>