Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp383202yba; Wed, 8 May 2019 22:43:55 -0700 (PDT) X-Google-Smtp-Source: APXvYqzSvLH6h4xXSq9sFv2FPAiI9oVKkmx1hk/4w5MVdkAHg9cgwSYXUDa3KtcMxGoqSCFCBVl8 X-Received: by 2002:a62:304:: with SMTP id 4mr2423831pfd.99.1557380635714; Wed, 08 May 2019 22:43:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557380635; cv=none; d=google.com; s=arc-20160816; b=m7SvHkH5y5/lEzc3W5JiW/nEWzlkv7PdnMqLOmt72iPMA/9VyLYRuM0j7UkX6rheEg VNHFGXKKkjmBMMEZQfUY/nChX8Rkytguyy4gAXZQZwzmFFX+DBCA415FrZ8BVJzxTjya jeatxjuDZmomFCUfaw31sK8t53Qu+inclkpXgqltMEIUR2q2DUPOjdfdmUwTG0h//f/q EKH/krVTgKAiuJxVXCKcwAbPvQ21TQfvTgsolbIfaMSP0AEI3U49bArhNWKW2N6Cme+B oFjQWW33cGmW/ryd6rGRhNSq7SxAn5n0TzN8+ArpM+UyObsvpv7UMQYW3IlGMDVbxzhJ GmZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=s2x7LoSc32lEvDkAoL480aj+nvBiwY0CVx5bvNfBU9w=; b=wQTaP2yDTC4KJIXUhJWsbgsZKR7Ptrc7MfXtLdDsVS46lNqfRZ506j+TplY6QUTaX4 rVpChXe4wiUWLbGn3m3Gc+tSbUnxyccQYpPLkeZySq+P+M2WmJqiJHcX4Cmq/ePHrKqu ZKrMrXPKy/DYa9D1mc6ajSiDMsbFC9/R9EYzWKkAUKMjITkYMoqe21wmTp2AsOx4tne/ nTw/2TX4V7Zso2Lkag2QjCiE6C1clkTraWr13ulKgFnzo8ihJuYK95fwkZS1CwBewa9h +F3NsxEnlLgVvdx9KYE+tOrjKeZp/QgaqhU2vsv5v9fpwLO33+FcL5JpdBBkC/vuukG7 /vTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=csVtQtV2; 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 t9si1646297pgv.294.2019.05.08.22.43.39; Wed, 08 May 2019 22:43:55 -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=csVtQtV2; 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 S1726832AbfEIFms (ORCPT + 99 others); Thu, 9 May 2019 01:42:48 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:46440 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726540AbfEIFms (ORCPT ); Thu, 9 May 2019 01:42:48 -0400 Received: by mail-pl1-f193.google.com with SMTP id bi2so544400plb.13; Wed, 08 May 2019 22:42:48 -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; bh=s2x7LoSc32lEvDkAoL480aj+nvBiwY0CVx5bvNfBU9w=; b=csVtQtV2inpBwOs4SzreziyFUbTddSpdZwh3TtZNEKES3WBzVVfQo22rH99jXdchRj wdTcbhtY/wbeexkXvyEZzixQCc8C0AKTeMmAOamYGlEG75/OYQA9qAV07CeFlu3YwBzW 1+WXafAjmM7iDnCRsG8iyWsG+fj5pYAzcXU5ockry1mnvf+h/Y9ZcI3wuugepWGOnket SEzYoDv4J8t1L9ePPQNDqYHSxss1AsK2/pgcPCMPQFEY4fvDt5uHzV7vVge7ubb0ivOG mfSSfq11dvQ/FuF2egKLlrMcG0GEsffVGzknWnLT+e76XEqo3xOigAr5+TgxcZ7LKBeW IxSQ== 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; bh=s2x7LoSc32lEvDkAoL480aj+nvBiwY0CVx5bvNfBU9w=; b=nEskWZB5ZTZiVNyOXq6UNlpHRYqSR6lHwuZ7dFCVKhx1lWVUvJOiG3cm0fDhVEv5Hr q9acJQ/P0cRrn4v4fo69WzpsPz6YCQdFAwAIdFDGom9HBHCxgbsHnv9gX17MJXCY065r bsjdJwXxUvjD6GPvaP7VHaCsX3EVTWxjQ9OtHVYDYxzfa1n/0gWX4RWgLOFQLuqB7Gsj aLRt1h6DRPVQGlcoiy9a3rADcDaVhjNQ+DB32xQrDup3dVZJFsT93R74CrkhMG7WQZ+n LlTfrFT05Ofq4G6XICgR0RhePnVDStIeZlr5X4dDKlwnH3s6UWyB/Vfwn1q3EbV8E39q vOvQ== X-Gm-Message-State: APjAAAU2dba/KEbTuQhHcVPaykky+5Vuc60Ry6MouPBZ3RbNYCW0GDgl uaqSdUOPn3awHEBpfoz6x6eNZ8OH X-Received: by 2002:a17:902:108a:: with SMTP id c10mr2749122pla.48.1557380567984; Wed, 08 May 2019 22:42:47 -0700 (PDT) Received: from sh04182tmp293.spreadtrum.com ([117.18.48.102]) by smtp.gmail.com with ESMTPSA id 2sm1881814pgc.49.2019.05.08.22.42.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 08 May 2019 22:42:47 -0700 (PDT) From: Lanqing Liu To: baolin.wang@unisoc.com, baolin.wang@linaro.org, gregkh@linuxfoundation.org, jslaby@suse.com Cc: lanqing.liu@unisoc.com, liuhhome@gmail.com, robh@kernel.org, linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, chunyan.zhang@unisoc.com, orson.zhai@unisoc.com, zhang.lyra@gmail.com Subject: [PATCH] tty: serial_core: Fix the incorrect configuration of baud rate and data length at the console serial port resume Date: Thu, 9 May 2019 13:42:39 +0800 Message-Id: X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When userspace opens a serial port for console, uart_port_startup() is called. This function assigns the uport->cons->cflag value to TTY->termios.c_cflag, then it is cleared to 0. When the user space closes this serial port, the TTY structure will be released, and at this time uport->cons->cflag has also been cleared. On the Spreadtrum platform, in some special scenarios, like charging mode, userspace needs to close the console, which means the uport->cons->cflag has also been cleared. But printing logs is still needed in the kernel. So when system enters suspend and resume, the console needs to be configure the baud rate and data length of the serial port according to its own cflag when resuming the console port. At this time, the cflag is 0, which will cause serial port to produce configuration errors that do not meet user expectations. To fix this, assigning the TTY->termios.c_cflag value to uport->cons->cflag before the userspace closes this console serial port. It will ensure that the correct cflag value can be gotten when the console serial port was resumed. Signed-off-by: Lanqing Liu --- drivers/tty/serial/serial_core.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c index 351843f..f233cf8 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -1539,6 +1539,7 @@ static void uart_set_termios(struct tty_struct *tty, static void uart_close(struct tty_struct *tty, struct file *filp) { struct uart_state *state = tty->driver_data; + struct uart_port *uport; if (!state) { struct uart_driver *drv = tty->driver->driver_state; @@ -1553,6 +1554,9 @@ static void uart_close(struct tty_struct *tty, struct file *filp) } pr_debug("uart_close(%d) called\n", tty->index); + uport = uart_port_check(state); + if (uport && uart_console(uport)) + uport->cons->cflag = tty->termios.c_cflag; tty_port_close(tty->port, tty, filp); } -- 1.9.1