From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753530AbeAKAxr (ORCPT + 1 other); Wed, 10 Jan 2018 19:53:47 -0500 Received: from mail-pg0-f67.google.com ([74.125.83.67]:46032 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753426AbeAKAxp (ORCPT ); Wed, 10 Jan 2018 19:53:45 -0500 X-Google-Smtp-Source: ACJfBouIDk+v/miKkXjRUX7cM9m9IffpSdthgpHy6py86hz4SmaxHizIDJY94iM9wQOafW5b20hu9A== From: Sergey Senozhatsky X-Google-Original-From: Sergey Senozhatsky To: Tejun Heo Cc: Lai Jiangshan , linux-kernel@vger.kernel.org, Sergey Senozhatsky Subject: [PATCH] workqueue: avoid hard lockups in show_workqueue_state() Date: Thu, 11 Jan 2018 09:53:35 +0900 Message-Id: <20180111005335.24642-1-sergey.senozhatsky@gmail.com> X-Mailer: git-send-email 2.15.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: show_workqueue_state() can print out a lot of messages while being in atomic context, e.g. sysrq-t -> show_workqueue_state(). If the console device is slow it may end up triggering NMI hard lockup watchdog. Signed-off-by: Sergey Senozhatsky --- kernel/workqueue.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 9960f8842b31..8dd2e66e8383 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -48,6 +48,7 @@ #include #include #include +#include #include "workqueue_internal.h" @@ -4473,6 +4474,12 @@ void show_workqueue_state(void) if (pwq->nr_active || !list_empty(&pwq->delayed_works)) show_pwq(pwq); spin_unlock_irqrestore(&pwq->pool->lock, flags); + /* + * We could be printing a lot from atomic context, e.g. + * sysrq-t -> show_workqueue_state(). Avoid triggering + * hard lockup. + */ + touch_nmi_watchdog(); } } @@ -4500,6 +4507,12 @@ void show_workqueue_state(void) pr_cont("\n"); next_pool: spin_unlock_irqrestore(&pool->lock, flags); + /* + * We could be printing a lot from atomic context, e.g. + * sysrq-t -> show_workqueue_state(). Avoid triggering + * hard lockup. + */ + touch_nmi_watchdog(); } rcu_read_unlock_sched(); -- 2.15.1