Received: by 2002:ab2:1149:0:b0:1f3:1f8c:d0c6 with SMTP id z9csp1342022lqz; Mon, 1 Apr 2024 03:19:50 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWdJjisnvQENmIDCMrJgWdH64vWAyRQ5bepDtBLF9zRj6w+whCsuOY5XdAcT94iJYrj7p12UIwdchLgsdpbmWd0mu/RgJqiAuzz4E8OMw== X-Google-Smtp-Source: AGHT+IFZmcXS6iW79mkBtdnLpCc5f6SUtp3fKl6ZryrHuDTBmSBqw58k7CHRO0W9vFufaiDI2H0w X-Received: by 2002:a05:6a20:9193:b0:1a7:1c9:5f86 with SMTP id v19-20020a056a20919300b001a701c95f86mr10307592pzd.16.1711966790136; Mon, 01 Apr 2024 03:19:50 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1711966790; cv=pass; d=google.com; s=arc-20160816; b=t5r/+dGnElTogIdG1BaU02MkYz2OHgv7wiG2c9AA0fdSDvsa0k0EV5vC3AHGA00IJn 0WJ7uVpflJBMaFi50Sq2VW+5mVvnf/jRCRTGtqMcho7qWwj8VOSZfGC1zQ91rU/CGGIv s7beVJI0YAZCSk3FZLN8LKp+PDeh2SD16wc7CRk1Axbz6kJGOMmpJkrSQosrGKzep6c+ 0T91zhhWQG9ym/GV1K8KjIQuk4VKO94kdtyT7CxrrosNlT0dQcanApRXoqq0unTMUyL1 wTOLEyeaBtN5Y86HNIGNPdS0t6qd6hWaZEIMoLCxiRUiDJ+BcEY6TgwitVjgXLLgNvht 6pMA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-id:precedence:message-id:date :subject:cc:to:from:dkim-signature; bh=lSS9Rf5SDqtnzD78GJetNSF84A57PWyWBlevDAh10HE=; fh=hoLB35Bu1QgdOEuV0+tbyX/4oNQTgwRTJtApOORm7DA=; b=T4YUww2spr/Ne3cQE3C65p9G7OJ7WxpN8gy5Dui7ySO6RjIAuJNBtnXWxUpv5O3KLN fzj54C96NWF42r4aE816O55ObAw/fSs9B2TjrkMYbA/XyhTyCLL8pUsozH+uAGjwkkMo EgJoGkVzTemLH5aLR5S3ON8WuSjkOt+y1yWVb3d9jC/aIyt+ma+LDoWeStHdPot38gbJ 5DG3fMT30AeOvQt1OLoZWjDlKOJFKG1ih9nJIckTI7S/6633XXNj25zV4QM5giuCMmyp rhBO/jyGhHCIIiVWklVJ4ho1mK4RHo8N76wVXJyH/SJKh8QdN7ZSX9WR65qohXmlXzn7 +dKQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@126.com header.s=s110527 header.b=SbxOSxct; arc=pass (i=1 spf=pass spfdomain=126.com dkim=pass dkdomain=126.com dmarc=pass fromdomain=126.com); spf=pass (google.com: domain of linux-kernel+bounces-126592-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-126592-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=126.com Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id q132-20020a632a8a000000b005d8e2f778c7si8735515pgq.294.2024.04.01.03.19.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Apr 2024 03:19:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-126592-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@126.com header.s=s110527 header.b=SbxOSxct; arc=pass (i=1 spf=pass spfdomain=126.com dkim=pass dkdomain=126.com dmarc=pass fromdomain=126.com); spf=pass (google.com: domain of linux-kernel+bounces-126592-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-126592-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=126.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 99FB9B21761 for ; Mon, 1 Apr 2024 10:19:45 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 446C116428; Mon, 1 Apr 2024 10:19:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=126.com header.i=@126.com header.b="SbxOSxct" Received: from m16.mail.126.com (m16.mail.126.com [117.135.210.8]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CFB8A14AB3 for ; Mon, 1 Apr 2024 10:19:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=117.135.210.8 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711966779; cv=none; b=ozyP88W6YC9DjtSBw5N46Vbt0dgTjudYHqZbXYcENZbhj6kI6oRcCRhZfw8PgmQ6HieX94OXCsmMP2ce8DjYQUNAu2DRI+ksMI8jN4fA1YNJ2ZN006jRXq8MLPn/YQgOz6utmEqxIvzCOZau+XXxZIknzxK/2V0iyTeA7Gl7Hig= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711966779; c=relaxed/simple; bh=dyWEMScUpp1u2umraVryY12pTmkoU3/CNE7RVY1EAlE=; h=From:To:Cc:Subject:Date:Message-Id; b=TQMVA52mKn/L4wRQyYDoPzm7xpw97XiI+MCanfR+yZabhZqD2dKV3b9WwSIDyeiKw30DaXtBYSz1WOA3dNrvJIqVifbBGmUnR3qwe9f+NNXW8EaKcnxNbCFmQUmX/oICG+Z99ICopyTP3NCoCwczskl20dtvpQH9dIzXsZ1bh5o= 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=SbxOSxct; arc=none smtp.client-ip=117.135.210.8 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; s=s110527; h=From:Subject:Date:Message-Id; bh=lSS9Rf5SDqtnzD78GJ etNSF84A57PWyWBlevDAh10HE=; b=SbxOSxctMGAE5n61ddmkuhlEFxT7dm9KsH dtL8lJ1aKq7SKVhG8f1jRHIyrZxG1MYJss+/t4GaaP98EelGL6nP6+jso8c77bwg V1X2ZjW9edBnGMQDy7NP1AMRYxx2CdmXncwZrYAXj1nSpuDVVnSLPWyaDHBMwOJQ T9NGKIeMA= Received: from localhost.localdomain (unknown [27.38.213.133]) by gzga-smtp-mta-g1-4 (Coremail) with SMTP id _____wDXf7ccigpmfIkvAg--.11841S2; Mon, 01 Apr 2024 18:19:08 +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, "Gary Feng" Subject: [PATCH] tty: serial: fixed uart irq maybe cause irq storm Date: Mon, 1 Apr 2024 18:19:06 +0800 Message-Id: <1711966746-225228-1-git-send-email-fengchunguo@126.com> X-Mailer: git-send-email 2.7.4 X-CM-TRANSID:_____wDXf7ccigpmfIkvAg--.11841S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxAry8AF43KrWfAw18Xry3XFb_yoW5Ar18pa 4Yqr909FWkXF42vanrtr10qF4rZa12yFy7Gr97Gr1UK3W5KryUXF1xtFWSqFW7CrWYvr9r XF47t34j9a4UtaDanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07UE1v-UUUUU= X-CM-SenderInfo: 5ihqwu5kxqw3br6rjloofrz/xtbBcwWzOmSQAqnT4AABsS Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: From: "Gary 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 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/8250_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, struct ktermios *termios, rate = clk_round_rate(d->clk, newrate); if (rate > 0 && p->uartclk != rate) { + /*Need disable uart irq before disabled clk, because uart irq maybe triggered 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, struct ktermios *termios, if (!ret) p->uartclk = rate; clk_prepare_enable(d->clk); + + if (p->irq) + enable_irq(p->irq); } dw8250_do_set_termios(p, termios, old); -- 2.7.4