Received: by 2002:a25:f815:0:0:0:0:0 with SMTP id u21csp4008626ybd; Tue, 25 Jun 2019 12:20:40 -0700 (PDT) X-Google-Smtp-Source: APXvYqwcQjSJnQ5dVK4EkyGTAOQULwLcMRlSdOH0YtP7OzFQRWEnZAO5Ju5K2X4/jDj8yS0dzA+K X-Received: by 2002:a17:90a:cb18:: with SMTP id z24mr483182pjt.108.1561490440191; Tue, 25 Jun 2019 12:20:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561490440; cv=none; d=google.com; s=arc-20160816; b=MgLBM45k+iUpRVTgcr9wwQnNfOl+fUF04bFu8t6nQfzaATMLrWLBTQ4KutvqAjHj6W NJgF3fdGOjJGYoApozD45Ugih0vw9krO+FX9hLP8TpFjVG+3U1nAIJ/BCEH4ZzpWAK7O YiQIW2M1rDFh47+m9otZApEwbDtKZ9/BELEQEcLdej2oUwIArmLWahcy2oMyqky2q0pb StoxFBB7UZYvOjjvmprngC+UVzgkDQ3x2HRMXHxbQ1zqf+LQEaDsEcOu86HR/oSwneRE G61IagRqArbdXJga524FZpefRqfUbEmwmZC3KTBLhmG1qJz7VM9EXwQEQoV3DYTe3XT4 o2gw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:subject:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:cc:to:from :dkim-signature; bh=hzE1VNpnn5mxhjNCPcsJYlFRxK3YPhV+NqNkyq2FbmY=; b=C/TDoMmnYETYf50eb22V9xeg+3/LFZFjhD9EAtcJLPG7PrfS6BTsn5FWISwDXs/SY2 UDwCUy+auAeEvR+NJmnLowIRySoHuVS9mmc+fJwUXTl5QiygGhR1fAvOYDnPepk7glo5 gkj0HZYTvphjxguKYN/PSI6rtlYOphZWcK0uKIsJ+gQt2DA5+XozUlmNlJmGUQU2E/Nt U5ctD2lARUvKkrHkg2UNZ6YHI8BEF2ufmkjGaFNMePUMFgwnaUJri96/TyLYmcszaqfm jFW7i1L6+AVOFtbGX2VHsqG1PYDlU3QYTfxYkXO4rFy4Oe2LVYEvnQ5IWUkSPsosPMw3 73Og== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@cs.msu.ru header.s=dkim header.b=pkPsUBvL; 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=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=cs.msu.ru Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v12si15137704pgq.423.2019.06.25.12.20.24; Tue, 25 Jun 2019 12:20:40 -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=fail header.i=@cs.msu.ru header.s=dkim header.b=pkPsUBvL; 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=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=cs.msu.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731705AbfFYQMk (ORCPT + 99 others); Tue, 25 Jun 2019 12:12:40 -0400 Received: from mx.cs.msu.ru ([188.44.42.42]:28040 "EHLO mail.cs.msu.ru" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729583AbfFYQMh (ORCPT ); Tue, 25 Jun 2019 12:12:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=cs.msu.ru; s=dkim; h=Subject:Content-Transfer-Encoding:Content-Type:MIME-Version: References:In-Reply-To:Message-Id:Date:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=hzE1VNpnn5mxhjNCPcsJYlFRxK3YPhV+NqNkyq2FbmY=; b=pkPsUBvLlUEzGFFRyBRbWbRmT2 lPGi49SDzDjYqKcarAoBR7QBBDXorJ4coivYCeBBrtZ7AEV+DNE51vQ3VF9WJO7+DEXvcwMTwQQk/ +Icf4JbSdVChCuRB1VrFnpSTLWIhvD+qyEW/SSRb3Ad+4vbhszUtGHHZuTvR4Lpr5xGKD4YRJhIgK Gui+HQnT4iw7MPfE2YrOXjOBXwgb/ydXnQECMJxWAR9Won6bw56qvepne3X7gayclGTM5WlocgQHa tBkTWDviex5W154FXrae7DGkY9EenaM9wLxiUHYn0FegBLy66tbZydCi4H81EMuRz0t+J+HLXbxKu TNcFoWyQ==; Received: from [10.7.4.141] (port=44632 helo=cello.cs.msu.ru) by mail.cs.msu.ru with esmtpsa (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.92 (FreeBSD)) (envelope-from ) id 1hfo3F-0006Uf-DC; Tue, 25 Jun 2019 19:12:09 +0300 From: Arseny Maslennikov To: Greg Kroah-Hartman , Jiri Slaby , Ingo Molnar , Peter Zijlstra , linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org Cc: "Vladimir D. Seleznev" , Rob Landley , "Eric W. Biederman" , Pavel Machek , Arseny Maslennikov Date: Tue, 25 Jun 2019 19:11:49 +0300 Message-Id: <20190625161153.29811-4-ar@cs.msu.ru> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190625161153.29811-1-ar@cs.msu.ru> References: <20190625161153.29811-1-ar@cs.msu.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 10.7.4.141 X-SA-Exim-Mail-From: ar@cs.msu.ru X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.cs.msu.ru X-Spam-Level: X-Spam-Status: No, score=-5.1 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_ALL,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.2 Subject: [PATCH v2 3/7] n_tty: Send SIGINFO to fg pgrp on status request character X-SA-Exim-Version: 4.2 X-SA-Exim-Scanned: Yes (on mail.cs.msu.ru) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org No kerninfo line is printed yet. No existing implementation of this on any Unix-like system echoes the status character; no existing implementation discards or flushes pending input on VSTATUS receipt. There are existing popular TUI applications (e. g. mutt) that only turn off icanon and not iexten, but still do not expect any special treatment of the status request character — thus we require all three: isig, icanon and iexten to trigger this. Signed-off-by: Arseny Maslennikov --- drivers/tty/n_tty.c | 15 +++++++++++++-- include/linux/tty.h | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c index f9c584244f72..29f33798a6cd 100644 --- a/drivers/tty/n_tty.c +++ b/drivers/tty/n_tty.c @@ -79,6 +79,10 @@ #define ECHO_BLOCK 256 #define ECHO_DISCARD_WATERMARK N_TTY_BUF_SIZE - (ECHO_BLOCK + 32) +#define SIG_FLUSHING_MASK ( \ + rt_sigmask(SIGINT) | rt_sigmask(SIGQUIT) | \ + rt_sigmask(SIGTSTP) ) +#define SIG_FLUSHING(sig) ((1 << sig) & SIG_FLUSHING_MASK) #undef N_TTY_TRACE #ifdef N_TTY_TRACE @@ -1122,7 +1126,7 @@ static void isig(int sig, struct tty_struct *tty) { struct n_tty_data *ldata = tty->disc_data; - if (L_NOFLSH(tty)) { + if (L_NOFLSH(tty) || (!SIG_FLUSHING(sig))) { /* signal only */ __isig(sig, tty); @@ -1244,7 +1248,8 @@ n_tty_receive_signal_char(struct tty_struct *tty, int signal, unsigned char c) if (I_IXON(tty)) start_tty(tty); if (L_ECHO(tty)) { - echo_char(c, tty); + if (c != STATUS_CHAR(tty)) + echo_char(c, tty); commit_echoes(tty); } else process_echoes(tty); @@ -1294,6 +1299,9 @@ n_tty_receive_char_special(struct tty_struct *tty, unsigned char c) } else if (c == SUSP_CHAR(tty)) { n_tty_receive_signal_char(tty, SIGTSTP, c); return 0; + } else if (c == STATUS_CHAR(tty)) { + n_tty_receive_signal_char(tty, SIGINFO, c); + return 0; } } @@ -1848,6 +1856,9 @@ static void n_tty_set_termios(struct tty_struct *tty, struct ktermios *old) set_bit(INTR_CHAR(tty), ldata->char_map); set_bit(QUIT_CHAR(tty), ldata->char_map); set_bit(SUSP_CHAR(tty), ldata->char_map); + if (L_ICANON(tty) && L_IEXTEN(tty)) { + set_bit(STATUS_CHAR(tty), ldata->char_map); + } } clear_bit(__DISABLED_CHAR, ldata->char_map); ldata->raw = 0; diff --git a/include/linux/tty.h b/include/linux/tty.h index bfa4e2ee94a9..38d8ffe7f0e3 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h @@ -120,6 +120,7 @@ struct tty_bufhead { #define WERASE_CHAR(tty) ((tty)->termios.c_cc[VWERASE]) #define LNEXT_CHAR(tty) ((tty)->termios.c_cc[VLNEXT]) #define EOL2_CHAR(tty) ((tty)->termios.c_cc[VEOL2]) +#define STATUS_CHAR(tty) ((tty)->termios.c_cc[VSTATUS]) #define _I_FLAG(tty, f) ((tty)->termios.c_iflag & (f)) #define _O_FLAG(tty, f) ((tty)->termios.c_oflag & (f)) -- 2.20.1