Messages in this thread Patch in this message | | | From | "Zhou, Libing (NSB - CN/Hangzhou)" <> | Subject | RE: [PATCH v2] x86/nmi: Fix nmi_handle duration miscalculation | Date | Mon, 31 Aug 2020 07:02:15 +0000 |
| |
Hi,
Any comment on this?
-----Original Message----- From: Libing Zhou <libing.zhou@nokia-sbell.com> Sent: 2020年8月20日 10:57 To: peterz@infradead.org; tglx@linutronix.de; mingo@redhat.com; bp@alien8.de; bp@suse.de; x86@kernel.org Cc: linux-kernel@vger.kernel.org; Zhou, Libing (NSB - CN/Hangzhou) <libing.zhou@nokia-sbell.com>; hpa@zytor.com Subject: [PATCH v2] x86/nmi: Fix nmi_handle duration miscalculation
In nmi_check_duration(), the 'whole_msecs' value get from 'action->max_duration' is wrong.
Fixes: 248ed51048c4 ("x86/nmi: Remove irq_work from the long duration NMI handler") Signed-off-by: Libing Zhou <libing.zhou@nokia-sbell.com> --- v2: Change solution as peterz@infradead.org suggested.
arch/x86/kernel/nmi.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/arch/x86/kernel/nmi.c b/arch/x86/kernel/nmi.c index 4fc9954a9560..47381666d6a5 100644 --- a/arch/x86/kernel/nmi.c +++ b/arch/x86/kernel/nmi.c @@ -102,7 +102,6 @@ fs_initcall(nmi_warning_debugfs); static void nmi_check_duration(struct nmiaction *action, u64 duration) { - u64 whole_msecs = READ_ONCE(action->max_duration); int remainder_ns, decimal_msecs; if (duration < nmi_longest_ns || duration < action->max_duration) @@ -110,12 +109,12 @@ static void nmi_check_duration(struct nmiaction *action, u64 duration) action->max_duration = duration; - remainder_ns = do_div(whole_msecs, (1000 * 1000)); + remainder_ns = do_div(duration, (1000 * 1000)); decimal_msecs = remainder_ns / 1000; printk_ratelimited(KERN_INFO "INFO: NMI handler (%ps) took too long to run: %lld.%03d msecs\n", - action->handler, whole_msecs, decimal_msecs); + action->handler, duration, decimal_msecs); } static int nmi_handle(unsigned int type, struct pt_regs *regs) -- 2.22.0
| |