From nobody Thu Feb 12 01:23:27 2026 Received: from m16.mail.126.com (m16.mail.126.com [117.135.210.7]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0CB39FBFD for ; Mon, 1 Apr 2024 09:30:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=117.135.210.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711963845; cv=none; b=tukhra438yOwSaKt9MrRVuj2ZWKK/n+xkMcpMPJ6Pm9m3106p9aKYewuOjf+2CsgfMv+d3fpZLbx3j57OLFOO5/6r9KaNkqb4SxmrSUjmwTpcluVZp2BPs9ImMvfhzxQDqY/PWpKjis7ksKLSd9rYj6fzOhF8fqA9p+I1Jc4HbE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711963845; c=relaxed/simple; bh=SR8T3+He2AZJICAKjsYDSLD9RIrMgUNik84zJm/zi7E=; h=From:To:Cc:Subject:Date:Message-Id; b=S5uoq9zgJi4Hh4krAuwGXHzVpZOSRtK6gCqxQOGTheAqiqSI03ksgd6enIZN9z71NWS9VeT1YnC3OuiJvHkgU2bhzLEIRXgjXO7fwjUxzd0FXydopcYe+7zOhhjs463m5LfNN8+6ZzZtuLGSwqla/g4huhpWZMymuwra4lIC0L8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=126.com; spf=pass smtp.mailfrom=126.com; dkim=pass (1024-bit key) header.d=126.com header.i=@126.com header.b=LXEQ/YTk; arc=none smtp.client-ip=117.135.210.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=126.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=126.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=126.com header.i=@126.com header.b="LXEQ/YTk" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; s=s110527; h=From:Subject:Date:Message-Id; bh=YxqPnDDo14p23OJLtu fSJq/s7or8qzqTAqRYLxF+pYo=; b=LXEQ/YTkKXCjhQp9GfEWvXDSeKDU9SLmvF XqYVEHOjse0MQPAQCHohaA8G6O5XoUmQcHHmxVLRr6Fhc35iqhIrzKneJfjF6RoC TsKvDbMrpkFE1MSowweE8hJJzYZwc7Jym8kIbOuC/gieCk6Mxgx9OnapbQMd8ehQ bajZxTsL8= Received: from localhost.localdomain (unknown [27.38.213.133]) by gzga-smtp-mta-g0-2 (Coremail) with SMTP id _____wDX_2+hfgpmG2w3Ag--.21976S2; Mon, 01 Apr 2024 17:30:10 +0800 (CST) From: "fengchunguo@126.com" To: ilpo.jarvinen@linux.intel.com, andriy.shevchenko@linux.intel.com, gregkh@linuxfoundation.org, jirislaby@kernel.org Cc: linux-kernel@vger.kernel.org, "chunguo.feng" Subject: [PATCH] tty: serial: fixed uart irq maybe cause irq storm Date: Mon, 1 Apr 2024 17:30:01 +0800 Message-Id: <1711963801-184362-1-git-send-email-fengchunguo@126.com> X-Mailer: git-send-email 2.7.4 X-CM-TRANSID: _____wDX_2+hfgpmG2w3Ag--.21976S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxAry8AF43KrWfAw18Xry3XFb_yoW5Ar1xpF yYqr909FWkXF42ya1Dtr10qF4rXa12yFy7Gr97Gr1UK3W5KryUJF1xtFWSqFy7ArWYyr9r JF47t34j9a4UtaDanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jjiihUUUUU= X-CM-SenderInfo: 5ihqwu5kxqw3br6rjloofrz/xtbBdQOzOmSdL3SMRQAAsU Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "chunguo.feng" if not disable uart irq before disable clk, uart irq maybe triggered after disabled clk immediately, then maybe cause irq storm. Reproduced the below call trace, see i2c not be connected, but irq storm was triggered. i2c_designware 30b70000.i2c: controller timed out CPU: 2 PID: 2932 Comm: gnss@1.0-servic=20 Tainted: G O 5.14.61-00094-geaa0149416cc-dirty #8 Hardware name: Semidrive kunlun x9 REF Board (DT) Call trace: [] dump_backtrace+0x0/0x3c0 [] show_stack+0x14/0x1c [] dump_stack+0xc4/0xfc [] __report_bad_irq+0x50/0xe0 [] note_interrupt+0x248/0x28c [] handle_irq_event+0x78/0xa4 [] handle_fasteoi_irq+0xe4/0x1b4 [] __handle_domain_irq+0x7c/0xbc [] gic_handle_irq+0x4c/0xb8 [] el1_irq+0xb0/0x124 [] _raw_spin_unlock_irqrestore+0x10/0x44 [] dw8250_set_termios+0x48/0xf4 [] serial8250_set_termios+0x14/0x28 [] uart_change_speed+0x38/0x10c [] uart_set_termios+0xd0/0x17c [] tty_set_termios+0x160/0x1e4 [] set_termios+0x32c/0x3bc [] tty_mode_ioctl+0x6f0/0x7d8 [] n_tty_ioctl_helper+0x10c/0x1e8 [] n_tty_ioctl+0x120/0x194 [] tty_ioctl+0x658/0xa34 [] do_vfs_ioctl+0x554/0x810 [] SyS_ioctl+0x88/0x94 Exception stack(0xffff00000ccf3ec0 to 0xffff00000ccf4000 Signed-off-by: chunguo.feng --- drivers/tty/serial/8250/8250_dw.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/82= 50_dw.c index c1d43f0..133c24e 100644 --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c @@ -359,6 +359,12 @@ static void dw8250_set_termios(struct uart_port *p, st= ruct ktermios *termios, =20 rate =3D clk_round_rate(d->clk, newrate); if (rate > 0 && p->uartclk !=3D rate) { + /*Need disable uart irq before disabled clk, because uart irq maybe trig= gered after + * disabled clk immediately, then cause irq storm. + */ + if (p->irq) + disabled_irq(p->irq); + clk_disable_unprepare(d->clk); /* * Note that any clock-notifer worker will block in @@ -368,6 +374,9 @@ static void dw8250_set_termios(struct uart_port *p, str= uct ktermios *termios, if (!ret) p->uartclk =3D rate; clk_prepare_enable(d->clk); + + if (p->irq) + enable_irq(p->irq); } =20 dw8250_do_set_termios(p, termios, old); --=20 2.7.4