From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752194AbdLBQ3G (ORCPT ); Sat, 2 Dec 2017 11:29:06 -0500 Received: from mail-pl0-f65.google.com ([209.85.160.65]:40247 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751827AbdLBQ3E (ORCPT ); Sat, 2 Dec 2017 11:29:04 -0500 X-Google-Smtp-Source: AGs4zMYw5GW8MxYnZbbcv08vn6UKbIOEc224E3ZaQOQHr3H00FNUdurkkgScKntkBCX5MU8+APyYqg== From: Guenter Roeck To: Thomas Gleixner Cc: linux-kernel@vger.kernel.org, Guenter Roeck , Andy Shevchenko , Dmitry Torokhov , Mika Westerberg Subject: [PATCH] irq: Guard handle_bad_irq log messages Date: Sat, 2 Dec 2017 08:29:01 -0800 Message-Id: <1512232141-32275-1-git-send-email-linux@roeck-us.net> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org An interrupt storm on a bad interrupt will cause the kernel log to be clogged. [ 60.089234] ->handle_irq(): ffffffffbe2f803f, [ 60.090455] 0xffffffffbf2af380 [ 60.090510] handle_bad_irq+0x0/0x2e5 [ 60.090522] ->irq_data.chip(): ffffffffbf2af380, [ 60.090553] IRQ_NOPROBE set [ 60.090584] ->handle_irq(): ffffffffbe2f803f, [ 60.090590] handle_bad_irq+0x0/0x2e5 [ 60.090596] ->irq_data.chip(): ffffffffbf2af380, [ 60.090602] 0xffffffffbf2af380 [ 60.090608] ->action(): (null) [ 60.090779] handle_bad_irq+0x0/0x2e5 This was seen when running an upstream kernel on Acer Chromebook R11. The system was unstable as result. Guard the log message with __printk_ratelimit to reduce the impact. This won't prevent the interrupt storm from happening, but at least the system remains stable. Link: https://bugzilla.kernel.org/show_bug.cgi?id=197953 Cc: Andy Shevchenko Cc: Dmitry Torokhov Cc: Mika Westerberg Signed-off-by: Guenter Roeck --- kernel/irq/handle.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c index 79f987b942b8..ad4d7a995f18 100644 --- a/kernel/irq/handle.c +++ b/kernel/irq/handle.c @@ -28,9 +28,11 @@ */ void handle_bad_irq(struct irq_desc *desc) { + static DEFINE_RATELIMIT_STATE(ratelimit, 5 * HZ, 5); unsigned int irq = irq_desc_get_irq(desc); - print_irq_desc(irq, desc); + if (__ratelimit(&ratelimit)) + print_irq_desc(irq, desc); kstat_incr_irqs_this_cpu(desc); ack_bad_irq(irq); } -- 2.7.4