Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp2102876ybe; Sat, 14 Sep 2019 07:56:46 -0700 (PDT) X-Google-Smtp-Source: APXvYqxsR+Ls7+gdTutLWWJDxcsQG1ShDRMdZZptGH3vyIvPKe8MCdsDUoeySZr5N+K98Vs7jlN1 X-Received: by 2002:a17:906:e92:: with SMTP id p18mr8458504ejf.308.1568473006856; Sat, 14 Sep 2019 07:56:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1568473006; cv=none; d=google.com; s=arc-20160816; b=n2Bd51muL4m0c9d8wkrMvrypBd1Dk9SAMbfADsILnuNWzYUFKVcLa+DkkvuDTDOSWh 3MAgGS9KdzibjRDFzmaNF8VSRc0CpnkPs045AZlRVeRNfyGqK1JywKAgirGqqe4dBY3A t6bG2lwAlVK6oHgjchp0urAHzBLa4GzwuRU784be6znicZudjbhwLh1eY4mp6AxeKTef 0SmOYh0l7Q08JziXfIsFypPjjorPqi0O4BD5Op+Z7PilM/zrsf4jZMQz47uJhQitLW6Y de8Tbb3hIivMKUR6tzvYokvNQQc2M9uPjsl4GTcgfBpBGswVxJc4tWYbEZpJzT02hyXu 0AFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=wXK8i3dcP0wrlupZd2syn0RAvq63einR0Js8n3kXDKU=; b=Y67YDTvegctdcWuUsUASNuuFOJObfsfvgAkkcZCuGK2eJSQMp+sbNcdM+wElJLoaqH tp+pMd0scYC9Q4IWXEIvd4JgvRNlYTkz479AvCl1p3Ji4aTzJ8a+F0k2oVnX3J+lLU7H wmpEzbl8i6HdiI06CHeHk2utf79KnThEE05lpAqgW9ImiHmhPWvJWFqh8yxn1Qo58a6R YBvZQ8JNypFIsNlzMcb5ySbZgvh6HUtePF4TgEjKemiD6KP5PMpxevJGFZU2vmK3wkUk K1U5oSkPA5sdd8WCki742gA0qI9x3D3Yjvr8zeYaBl4I+HZfvn9vXnl92w5pkF76RyKz jSRg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=jtYGqEBW; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j35si19964513eda.144.2019.09.14.07.56.23; Sat, 14 Sep 2019 07:56:46 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=jtYGqEBW; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726103AbfINE5C (ORCPT + 99 others); Sat, 14 Sep 2019 00:57:02 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:42682 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726028AbfINE5C (ORCPT ); Sat, 14 Sep 2019 00:57:02 -0400 Received: by mail-pl1-f193.google.com with SMTP id e5so3102801pls.9 for ; Fri, 13 Sep 2019 21:57:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=wXK8i3dcP0wrlupZd2syn0RAvq63einR0Js8n3kXDKU=; b=jtYGqEBWfPnvYYkUJ4rTSGo5nxzlwAtfWjmrPKJcrgNiowDrdgk8C1UCVY8Gr26Ajg gf//G8gkGX77zQi+bpNSjz8V0QZ4wVgIru5SEthDVAhaYGaX4Jb0PzdeIL1tEWFaq2z1 A+KSBoamuAPpHKMo5qCXavT1C+Sst0c8kbmw+QmGmEk8uFdK354EEpbYPs5wy+jdAhdl pU2Npk61osNGbx18SnHdMNSdkxjJU1gw9yV7QUn8/PimaOKwPya1CJkd4G3zb7gaZiQD w9MfShEVRzL//O3HB0rRLsOV4nxt3DJY5j3H6RwJStljvBh8h8G1rOVvBkY5zlTrokFt O53w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=wXK8i3dcP0wrlupZd2syn0RAvq63einR0Js8n3kXDKU=; b=L59attIuFm6XfMhpl4sl6gUFuWN9tUiYSZ1FbwAwgTqY2YhhDIrJmVxWWR2CNJsg3l 32VLYmfGuw0RevVPubKARApjwKs+Vbk2sWp/xsSEtiq2AhtmjgE1pGM1Y+ZQVBy6XODn fwsRMQpD1/GxyanJVNQ3UZ7fHHQsHmX6heUldID2fTA0neuGJOhQJJgpeB1CdnIXCmGY 8OvCV1TToDmRGgyf+9EbJmu/QckQZGCNuGP5zyI9dmvb7G25eLHL3vN/36uPKqha//6d Ry0Rr30urdgx5gk0ZdyRQViJ/7R1EuXLsDYyDK+XgGgOJBdsKjnbZa6GRIL7SvL/RYTG LtUA== X-Gm-Message-State: APjAAAXwY1RYpkb4pHn93+ptG4SfEPCW/myzolQNk9wBko6fg8F/Zslj FuKkp2lLxa8xM4Fpw4Q5V6w= X-Received: by 2002:a17:902:20c9:: with SMTP id v9mr51336181plg.293.1568437021853; Fri, 13 Sep 2019 21:57:01 -0700 (PDT) Received: from localhost.localdomain ([149.28.153.17]) by smtp.gmail.com with ESMTPSA id b14sm3468108pjo.13.2019.09.13.21.56.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Sep 2019 21:57:01 -0700 (PDT) From: Changbin Du To: Thomas Gleixner , Ingo Molnar Cc: Borislav Petkov , hpa@zytor.com, x86@kernel.org, Greg Kroah-Hartman , linux-kernel@vger.kernel.org, Changbin Du Subject: [PATCH] x86/nmi: remove the irqwork for long nmi handler duration warning Date: Sat, 14 Sep 2019 12:56:46 +0800 Message-Id: <20190914045646.24387-1-changbin.du@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org First, printk is NMI context safe now since the safe printk has been implemented. The safe printk will help us to do such work in its irqwork. Second, the NMI irqwork actually does not work if a NMI handler causes watchdog timeout panic. The NMI irqwork have no chance to run in such case, while the safe printk will flush its per-cpu buffer before panic. Signed-off-by: Changbin Du --- arch/x86/include/asm/nmi.h | 1 - arch/x86/kernel/nmi.c | 20 +++++++++----------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/arch/x86/include/asm/nmi.h b/arch/x86/include/asm/nmi.h index 75ded1d13d98..9d5d949e662e 100644 --- a/arch/x86/include/asm/nmi.h +++ b/arch/x86/include/asm/nmi.h @@ -41,7 +41,6 @@ struct nmiaction { struct list_head list; nmi_handler_t handler; u64 max_duration; - struct irq_work irq_work; unsigned long flags; const char *name; }; diff --git a/arch/x86/kernel/nmi.c b/arch/x86/kernel/nmi.c index 4df7705022b9..0fa51f80ad73 100644 --- a/arch/x86/kernel/nmi.c +++ b/arch/x86/kernel/nmi.c @@ -104,18 +104,22 @@ static int __init nmi_warning_debugfs(void) } fs_initcall(nmi_warning_debugfs); -static void nmi_max_handler(struct irq_work *w) +static void nmi_check_duration(struct nmiaction *action, u64 duration) { - struct nmiaction *a = container_of(w, struct nmiaction, irq_work); int remainder_ns, decimal_msecs; - u64 whole_msecs = READ_ONCE(a->max_duration); + u64 whole_msecs = READ_ONCE(action->max_duration); + + if (duration < nmi_longest_ns || duration < action->max_duration) + return; + + action->max_duration = duration; remainder_ns = do_div(whole_msecs, (1000 * 1000)); decimal_msecs = remainder_ns / 1000; printk_ratelimited(KERN_INFO "INFO: NMI handler (%ps) took too long to run: %lld.%03d msecs\n", - a->handler, whole_msecs, decimal_msecs); + action->handler, whole_msecs, decimal_msecs); } static int nmi_handle(unsigned int type, struct pt_regs *regs) @@ -142,11 +146,7 @@ static int nmi_handle(unsigned int type, struct pt_regs *regs) delta = sched_clock() - delta; trace_nmi_handler(a->handler, (int)delta, thishandled); - if (delta < nmi_longest_ns || delta < a->max_duration) - continue; - - a->max_duration = delta; - irq_work_queue(&a->irq_work); + nmi_check_duration(a, delta); } rcu_read_unlock(); @@ -164,8 +164,6 @@ int __register_nmi_handler(unsigned int type, struct nmiaction *action) if (!action->handler) return -EINVAL; - init_irq_work(&action->irq_work, nmi_max_handler); - raw_spin_lock_irqsave(&desc->lock, flags); /* -- 2.20.1