From patchwork Wed May 17 15:56:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "D. Starke" X-Patchwork-Id: 95391 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1243798vqo; Wed, 17 May 2023 09:01:09 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6cHxNAcyFrtZZU+Nyj+45jLlZRjoXghOcE27Pd7Dd7HDSfWEKl1WzcI7y1iJ3bAZCkDwIL X-Received: by 2002:a17:90a:ac18:b0:253:3ca1:4b8c with SMTP id o24-20020a17090aac1800b002533ca14b8cmr211650pjq.4.1684339269463; Wed, 17 May 2023 09:01:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684339269; cv=none; d=google.com; s=arc-20160816; b=QugPaoFGv4r/OjyEc9kuJssGWcIx9xleCi4TQQzJYk2Ggi/jo6oUcGHl2pKFCZgAOc qgLNKUgJgtbECXqA34F+sCEXRCK6ZSZAhiJxZXKduaZKMOs3oGdvVKf2k0FZqQLd0z2M hE4nWT5+CIEJQMaSITQZK+gOl9NzuJHedg2tvKXzMsu1Dld8sMbIovhcUv6eckNIbRFr /TFEEjOs4lsX20I8Loyxb4iYMYj4ReV2l3xLzfhNRABWGL6ISgumAB1UgefuXgn+eSPi /rxUaVaJkMOqSbaU5oH8XIqry+8TkZODHvHgCSUFrqb1AuJU1dDq6wtJ6FzbR4H5b5/4 G5WQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:feedback-id:content-transfer-encoding :mime-version:message-id:date:subject:cc:to:from:dkim-signature; bh=myO+P8WOEjna9leIj0Mi2o9ZV1FzreaUuCy/6birCxg=; b=HRr1Ib1OHKxYYbZh7eiOAtzwucAvaShAACNaLG6fuX/Dfm4Mr/pOTmAXZvgWtBhSFA Jp7RTv2nB0JM/KGDlvuyl8dQFOxW0KnSTXiRdn66ZtKCvABDK/0m1Qu1Q5pcf/v5HQuU 1OO6g/IA3UdADzF7plplVpnQZfxBEHMH/fW22AI3P4DrwIiqpz8IcMJkYm4GLRDgSmoF hkXRkv/PLU4HNLppAFx94ReFPefz0LnxAShOQw9XE+mDdiNU/lCQsCtfIPc8yZAup+ph s6/lfBzWu+nJ5UjCcLG9aFgAtDCCZ5bAy4GtappcbknijYARBRyeZ38oGcrnhNzdEtg2 dvnw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=h3OcECnT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j30-20020a633c1e000000b004fb8abdd188si21073146pga.115.2023.05.17.09.00.54; Wed, 17 May 2023 09:01:09 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=h3OcECnT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229601AbjEQP6p (ORCPT + 99 others); Wed, 17 May 2023 11:58:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231238AbjEQP6f (ORCPT ); Wed, 17 May 2023 11:58:35 -0400 Received: from mta-64-227.siemens.flowmailer.net (mta-64-227.siemens.flowmailer.net [185.136.64.227]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B34F230FD for ; Wed, 17 May 2023 08:58:29 -0700 (PDT) Received: by mta-64-227.siemens.flowmailer.net with ESMTPSA id 202305171558264d7acbcc892648136f for ; Wed, 17 May 2023 17:58:26 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=daniel.starke@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc; bh=myO+P8WOEjna9leIj0Mi2o9ZV1FzreaUuCy/6birCxg=; b=h3OcECnT2RGiwr8E/X3Favf64LAC/N6yEQ2xq/npJpR5AyqhgZAu5fG3ZH8xpYBRo1jNlM 747whGj63viyftONRAziDSdytMJNK+SJ97KtC6j0dQs9hSv+u9HPd5bHvzk/BRBO+pwWYQT7 I3eOpTDThIN85c2OlwXNn5ZV4fx+E=; From: "D. Starke" To: linux-serial@vger.kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, felix-haase@siemens.com Cc: linux-kernel@vger.kernel.org, Daniel Starke Subject: [PATCH v5 01/10] tty: n_gsm: add restart flag to DLC specific ioctl config Date: Wed, 17 May 2023 17:56:55 +0200 Message-Id: <20230517155704.5701-1-daniel.starke@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-314044:519-21489:flowmailer X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766157733545261884?= X-GMAIL-MSGID: =?utf-8?q?1766157733545261884?= From: Daniel Starke Currently, changing the parameters of a DLCI gives no direct control to the user whether this should trigger a channel reset or not. The decision is solely made by the driver based on the assumption which parameter changes are compatible or not. Therefore, the user has no means to perform an automatic channel reset after parameter configuration for non-conflicting changes. Add the parameter 'flags' to 'gsm_dlci_config' to force a channel reset after ioctl setting regardless of whether the changes made require this or not by setting this to 'GSM_FL_RESTART'. Note that 'GSM_FL_RESTART' is currently the only allow flag to allow additions here. Signed-off-by: Daniel Starke --- drivers/tty/n_gsm.c | 4 ++++ include/uapi/linux/gsmmux.h | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) v4 -> v5: Changed GSM_FL_RESTART comment to be more specific about its use as suggested in the review comment. Please note that I cannot response to emails until August 7th. Felix Haase will take over from our side for questions regarding this patch series or the n_gsm. Link: https://lore.kernel.org/all/DB9PR10MB5881B63FBBA7912DF5A7A6A8E0789@DB9PR10MB5881.EURPRD10.PROD.OUTLOOK.COM/ diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index b411a26cc092..66edcf65a4dd 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -2532,6 +2532,8 @@ static int gsm_dlci_config(struct gsm_dlci *dlci, struct gsm_dlci_config *dc, in return -EINVAL; if (dc->k > 7) return -EINVAL; + if (dc->flags & ~GSM_FL_RESTART) /* allow future extensions */ + return -EINVAL; /* * See what is needed for reconfiguration @@ -2546,6 +2548,8 @@ static int gsm_dlci_config(struct gsm_dlci *dlci, struct gsm_dlci_config *dc, in /* Requires care */ if (dc->priority != dlci->prio) need_restart = true; + if (dc->flags & GSM_FL_RESTART) + need_restart = true; if ((open && gsm->wait_config) || need_restart) need_open = true; diff --git a/include/uapi/linux/gsmmux.h b/include/uapi/linux/gsmmux.h index eb67884e5f38..e56e2d7ea6eb 100644 --- a/include/uapi/linux/gsmmux.h +++ b/include/uapi/linux/gsmmux.h @@ -2,10 +2,22 @@ #ifndef _LINUX_GSMMUX_H #define _LINUX_GSMMUX_H +#include #include #include #include +/* + * flags definition for n_gsm + * + * Used by: + * struct gsm_dlci_config.flags + */ +/* Forces a DLCI reset if set. Otherwise, a DLCI reset is only done if + * incompatible settings were provided. Always cleared on retrieval. + */ +#define GSM_FL_RESTART _BITUL(0) + struct gsm_config { unsigned int adaption; @@ -58,7 +70,8 @@ struct gsm_dlci_config { __u32 priority; /* Priority (0 for default value) */ __u32 i; /* Frame type (1 = UIH, 2 = UI) */ __u32 k; /* Window size (0 for default value) */ - __u32 reserved[8]; /* For future use, must be initialized to zero */ + __u32 flags; /* DLCI specific flags. */ + __u32 reserved[7]; /* For future use, must be initialized to zero */ }; #define GSMIOC_GETCONF_DLCI _IOWR('G', 7, struct gsm_dlci_config) From patchwork Wed May 17 15:56:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "D. Starke" X-Patchwork-Id: 95392 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1244136vqo; Wed, 17 May 2023 09:01:28 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6szU63zi77DPl6VzkY4tv81j1HGG6acNev64cUsfbj7Pd+D6eKKVPsdCXdN/he6f3o7VfC X-Received: by 2002:a05:6a21:9987:b0:100:c3ad:79a8 with SMTP id ve7-20020a056a21998700b00100c3ad79a8mr43934612pzb.1.1684339288076; Wed, 17 May 2023 09:01:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684339288; cv=none; d=google.com; s=arc-20160816; b=HuZqmZ2kHq5bydp8aJypkdUdaQeZP81LItX+DJtaYuygHfOkA/hOXCLqHKWC6L8DUG O3tMcnbye4t81ZQBMQ6a3k7XBmJ4zH9N+bItiHhrQiL8E9cNob0DuzfGgJPSM3MKXkWN Ed/pZ9BNHvAaWQm+h0j7LAY6cQyHk+07ROHUPULviDeQyf8T+8Le0lqg9kmuSJCNUU2e TJhed0QNkawXqAHLExgmzE1ATypUTs6mMTshRlNbkgKAhG0rNZpWoLsqYaiIwrXGkRSR nYF4Z0E1218TLFEzflN3rXgA8EbEbFstl8A9R0zE/oiT9DkRrswN748ttylsvqP5O3iq Vuqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:feedback-id:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=OXqc2YuyxMs+ABmAjJ+9qlfVsi/iQdg+2Fg6AhB/Pzg=; b=DS5bI5QITUwFzcRhHMAntjHOZbqaSzfvWjlHh7i+8VD9eQJ7YO82Px6oOmbE4ewqpT LJkc3HaG8Ufwf7/Rf9B1Cu1Yps2zG/j2eIeHoOrd5T8GQZ1Ne53k58tGGhOzhFyswP8E 37mgk2Eai7XcgGwBW0tJHhJKZfJz/AD+3Uu2sRpwwdsQDm6ceuXIPZ1vADqPcs1dVg0x fI9GgI4g8deYgF7UtrxG4/awnWbY6RTsKNMKfRw9+YYGNVBdV2iVPdIWOYE4sDWEKY0p LZNI1XkD7hjcwk6oI9fez6YGyFYsVrA//SM0qQVOMtQO/oOfWHPPRY4wSWsaEA42FeJ1 QoYQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=UnHYpu9k; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c18-20020a637252000000b00528d30e698bsi21569287pgn.734.2023.05.17.09.01.12; Wed, 17 May 2023 09:01:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=UnHYpu9k; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231865AbjEQP6t (ORCPT + 99 others); Wed, 17 May 2023 11:58:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56800 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231696AbjEQP6f (ORCPT ); Wed, 17 May 2023 11:58:35 -0400 Received: from mta-64-228.siemens.flowmailer.net (mta-64-228.siemens.flowmailer.net [185.136.64.228]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B37F74EC4 for ; Wed, 17 May 2023 08:58:29 -0700 (PDT) Received: by mta-64-228.siemens.flowmailer.net with ESMTPSA id 2023051715582782436c26a81ec47d65 for ; Wed, 17 May 2023 17:58:27 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=daniel.starke@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=OXqc2YuyxMs+ABmAjJ+9qlfVsi/iQdg+2Fg6AhB/Pzg=; b=UnHYpu9kzd4Vn0PK8DuM3EXGSfJPqUwmsiLTjiu+HrNrRARSJxEleMiizc94jFooCmByBm qaj6DNUBsAD8eCXF4+ArWZ7lKRUDXtWpiLLRkrft7MVGaVGhY2bGTl6buRjoQm6t7erVVVDt iNHgLvBsbKzqxXx5FS+pzps3tdYV4=; From: "D. Starke" To: linux-serial@vger.kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, felix-haase@siemens.com Cc: linux-kernel@vger.kernel.org, Daniel Starke Subject: [PATCH v5 02/10] tty: n_gsm: add missing description to structs in gsmmux.h Date: Wed, 17 May 2023 17:56:56 +0200 Message-Id: <20230517155704.5701-2-daniel.starke@siemens.com> In-Reply-To: <20230517155704.5701-1-daniel.starke@siemens.com> References: <20230517155704.5701-1-daniel.starke@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-314044:519-21489:flowmailer X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766157753124790945?= X-GMAIL-MSGID: =?utf-8?q?1766157753124790945?= From: Daniel Starke Currently, all available structure fields in gsmmux.h except those for gsm_config are commented. Furthermore, no kernel doc comments are used. Fix this by adding appropriate comments to the not commented fields of gsm_config. Convert the comments of the other structs to kernel doc format. Note that 'mru' and 'mtu' refer to the size without basic/advanced option mode header and byte stuffing as defined in the standard in chapter 5.7.2. Link: https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1516 Signed-off-by: Daniel Starke --- include/uapi/linux/gsmmux.h | 104 +++++++++++++++++++++++++++++------- 1 file changed, 84 insertions(+), 20 deletions(-) v4 -> v5: No changes. Please note that I cannot response to emails until August 7th. Felix Haase will take over from our side for questions regarding this patch series or the n_gsm. Link: https://lore.kernel.org/all/20230426080315.7595-2-daniel.starke@siemens.com/ diff --git a/include/uapi/linux/gsmmux.h b/include/uapi/linux/gsmmux.h index e56e2d7ea6eb..3bd6f03a8293 100644 --- a/include/uapi/linux/gsmmux.h +++ b/include/uapi/linux/gsmmux.h @@ -18,6 +18,28 @@ */ #define GSM_FL_RESTART _BITUL(0) +/** + * struct gsm_config - n_gsm basic configuration parameters + * + * This structure is used in combination with GSMIOC_GETCONF and GSMIOC_SETCONF + * to retrieve and set the basic parameters of an n_gsm ldisc. + * struct gsm_config_ext can be used to configure extended ldisc parameters. + * + * All timers are in units of 1/100th of a second. + * + * @adaption: Convergence layer type + * @encapsulation: Framing (0 = basic option, 1 = advanced option) + * @initiator: Initiator or responder + * @t1: Acknowledgment timer + * @t2: Response timer for multiplexer control channel + * @t3: Response timer for wake-up procedure + * @n2: Maximum number of retransmissions + * @mru: Maximum incoming frame payload size + * @mtu: Maximum outgoing frame payload size + * @k: Window size + * @i: Frame type (1 = UIH, 2 = UI) + * @unused: Can not be used + */ struct gsm_config { unsigned int adaption; @@ -31,18 +53,32 @@ struct gsm_config unsigned int mtu; unsigned int k; unsigned int i; - unsigned int unused[8]; /* Can not be used */ + unsigned int unused[8]; }; #define GSMIOC_GETCONF _IOR('G', 0, struct gsm_config) #define GSMIOC_SETCONF _IOW('G', 1, struct gsm_config) +/** + * struct gsm_netconfig - n_gsm network configuration parameters + * + * This structure is used in combination with GSMIOC_ENABLE_NET and + * GSMIOC_DISABLE_NET to enable or disable a network data connection + * over a mux virtual tty channel. This is for modems that support + * data connections with raw IP frames instead of PPP. + * + * @adaption: Adaption to use in network mode. + * @protocol: Protocol to use - only ETH_P_IP supported. + * @unused2: Can not be used. + * @if_name: Interface name format string. + * @unused: Can not be used. + */ struct gsm_netconfig { - unsigned int adaption; /* Adaption to use in network mode */ - unsigned short protocol;/* Protocol to use - only ETH_P_IP supported */ - unsigned short unused2; /* Can not be used */ - char if_name[IFNAMSIZ]; /* interface name format string */ - __u8 unused[28]; /* Can not be used */ + unsigned int adaption; + unsigned short protocol; + unsigned short unused2; + char if_name[IFNAMSIZ]; + __u8 unused[28]; }; #define GSMIOC_ENABLE_NET _IOW('G', 2, struct gsm_netconfig) @@ -51,27 +87,55 @@ struct gsm_netconfig { /* get the base tty number for a configured gsmmux tty */ #define GSMIOC_GETFIRST _IOR('G', 4, __u32) +/** + * struct gsm_config_ext - n_gsm extended configuration parameters + * + * This structure is used in combination with GSMIOC_GETCONF_EXT and + * GSMIOC_SETCONF_EXT to retrieve and set the extended parameters of an + * n_gsm ldisc. + * + * All timers are in units of 1/100th of a second. + * + * @keep_alive: Control channel keep-alive in 1/100th of a second (0 to disable). + * @wait_config: Wait for DLCI config before opening virtual link? + * @reserved: For future use, must be initialized to zero. + */ struct gsm_config_ext { - __u32 keep_alive; /* Control channel keep-alive in 1/100th of a - * second (0 to disable) - */ - __u32 wait_config; /* Wait for DLCI config before opening virtual link? */ - __u32 reserved[6]; /* For future use, must be initialized to zero */ + __u32 keep_alive; + __u32 wait_config; + __u32 reserved[6]; }; #define GSMIOC_GETCONF_EXT _IOR('G', 5, struct gsm_config_ext) #define GSMIOC_SETCONF_EXT _IOW('G', 6, struct gsm_config_ext) -/* Set channel accordingly before calling GSMIOC_GETCONF_DLCI. */ +/** + * struct gsm_dlci_config - n_gsm channel configuration parameters + * + * This structure is used in combination with GSMIOC_GETCONF_DLCI and + * GSMIOC_SETCONF_DLCI to retrieve and set the channel specific parameters + * of an n_gsm ldisc. + * + * Set the channel accordingly before calling GSMIOC_GETCONF_DLCI. + * + * @channel: DLCI (0 for the associated DLCI). + * @adaption: Convergence layer type. + * @mtu: Maximum transfer unit. + * @priority: Priority (0 for default value). + * @i: Frame type (1 = UIH, 2 = UI). + * @k: Window size (0 for default value). + * @flags: DLCI specific flags. + * @reserved: For future use, must be initialized to zero. + */ struct gsm_dlci_config { - __u32 channel; /* DLCI (0 for the associated DLCI) */ - __u32 adaption; /* Convergence layer type */ - __u32 mtu; /* Maximum transfer unit */ - __u32 priority; /* Priority (0 for default value) */ - __u32 i; /* Frame type (1 = UIH, 2 = UI) */ - __u32 k; /* Window size (0 for default value) */ - __u32 flags; /* DLCI specific flags. */ - __u32 reserved[7]; /* For future use, must be initialized to zero */ + __u32 channel; + __u32 adaption; + __u32 mtu; + __u32 priority; + __u32 i; + __u32 k; + __u32 flags; + __u32 reserved[7]; }; #define GSMIOC_GETCONF_DLCI _IOWR('G', 7, struct gsm_dlci_config) From patchwork Wed May 17 15:56:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "D. Starke" X-Patchwork-Id: 95401 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1253634vqo; Wed, 17 May 2023 09:12:22 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6AlY/KA1IbZ1V7nqLrENZon5mVct5vQfdyk+MJBoIc7TozfycxFelPvisKSVU7cMqmrmGL X-Received: by 2002:a17:903:1249:b0:1ab:220a:9068 with SMTP id u9-20020a170903124900b001ab220a9068mr54259950plh.42.1684339942241; Wed, 17 May 2023 09:12:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684339942; cv=none; d=google.com; s=arc-20160816; b=pAqKY4FuMYMBjaDJ2XUP8tXBE00tTkod1BD0U3mXFw5UvFbq/MCKEapE7JIDfBHhu+ SLN19RfamLlBQqLmnV1q91dxdbUp7qiMMmvfZ+Ft/wPEmdgEebaOOMEyZ5E2fN8DaJC6 hyBLWTTHj2Tq3FJCYiSwvPsT9/Ef8fvZhjn04SjuilYxeV69wwj+N5F+NhfERGIVHAmw UCaWmq242ZPMBb3uGmlN69f6vfYXrCtOnGwGpaVv4dXtu/LCqiKnDnk3xo45J2xz/J4o rkzhrjHtgoAoUyqbMjkYGZaOkg8GKHPJgs8L7CfivVWgobIir0s3nLOE+Iw57QEdThr7 xriw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:feedback-id:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=hLYDLew2BnYtz1yW2u/0Fx5TXlG323HFpawW+DCWpzs=; b=XgrQmgUFH7KjKYGDHJCDoxrBnOyORDndM+ohgZwsjtvzpEbQLtH/SG2cPBG0vn0QJ/ 0HG58CmkQ5vBhDkn2R/lckwGnvuW8ohwkfjWDs9UOIN8TaG53mCCgO5R4+Afi0WyyXqy /guc8eFN8GU8iVu2Mqmbh6a2jDNIFJoZJsRTj0ZcSCVUvQWHpHTKZV2gXTRJSB0uucqG Ig8i0Ul7pxIFvUnCgyIs24Ufwv6igQDScudRVymIjYLK6JmKOGKKiPp/7WYmCi1WCOjM /n1bU60kuyEKCzckljEVYlt/Ggr/qKzFggTTnkDtnY4EMWG7Xux8sBRnr1ip6WWIy+Mi eY8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=Fqfhp1cD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ix19-20020a170902f81300b001a669006139si20644596plb.248.2023.05.17.09.12.08; Wed, 17 May 2023 09:12:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=Fqfhp1cD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231152AbjEQP6i (ORCPT + 99 others); Wed, 17 May 2023 11:58:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56784 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231644AbjEQP6f (ORCPT ); Wed, 17 May 2023 11:58:35 -0400 Received: from mta-64-228.siemens.flowmailer.net (mta-64-228.siemens.flowmailer.net [185.136.64.228]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B572C659B for ; Wed, 17 May 2023 08:58:29 -0700 (PDT) Received: by mta-64-228.siemens.flowmailer.net with ESMTPSA id 202305171558270ef22220b1dbdd5194 for ; Wed, 17 May 2023 17:58:28 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=daniel.starke@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=hLYDLew2BnYtz1yW2u/0Fx5TXlG323HFpawW+DCWpzs=; b=Fqfhp1cD0EJa9fFC2xJ8Z/9CSQcupvI8O/bp8c5vIAutEnR19ycF8fvP4O+gmlkgOXkf/n lrRDLnfjngvNIs/8gf95e539zjWt88BJ8mhLaEMzCk9Xox9AADDI9OtfmX6/PNMa9RoNpiPU xjH1rHgia9rJCIlM1UatJ154LFEpU=; From: "D. Starke" To: linux-serial@vger.kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, felix-haase@siemens.com Cc: linux-kernel@vger.kernel.org, Daniel Starke Subject: [PATCH v5 03/10] tty: n_gsm: remove unneeded initialization of ret in gsm_dlci_config Date: Wed, 17 May 2023 17:56:57 +0200 Message-Id: <20230517155704.5701-3-daniel.starke@siemens.com> In-Reply-To: <20230517155704.5701-1-daniel.starke@siemens.com> References: <20230517155704.5701-1-daniel.starke@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-314044:519-21489:flowmailer X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766158439161999361?= X-GMAIL-MSGID: =?utf-8?q?1766158439161999361?= From: Daniel Starke The variable 'ret' is not used before assignment from gsm_activate_mux(). Still it gets initialized to zero at declaration. Fix this as remarked in the link below by moving the declaration to the first assignment. Link: https://lore.kernel.org/all/b42bc4d1-cc9d-d115-c981-aaa053bdc59f@kernel.org/ Signed-off-by: Daniel Starke --- drivers/tty/n_gsm.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) v4 -> v5: No changes. Please note that I cannot response to emails until August 7th. Felix Haase will take over from our side for questions regarding this patch series or the n_gsm. Link: https://lore.kernel.org/all/20230426080315.7595-3-daniel.starke@siemens.com/ diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index 66edcf65a4dd..ebb71957f783 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -3277,7 +3277,6 @@ static void gsm_copy_config_values(struct gsm_mux *gsm, static int gsm_config(struct gsm_mux *gsm, struct gsm_config *c) { - int ret = 0; int need_close = 0; int need_restart = 0; @@ -3356,7 +3355,7 @@ static int gsm_config(struct gsm_mux *gsm, struct gsm_config *c) * and removing from the mux array */ if (gsm->dead) { - ret = gsm_activate_mux(gsm); + int ret = gsm_activate_mux(gsm); if (ret) return ret; if (gsm->initiator) From patchwork Wed May 17 15:56:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "D. Starke" X-Patchwork-Id: 95397 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1251494vqo; Wed, 17 May 2023 09:09:36 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7Wf4LC+5ktQoW5bcpXHzAq3zWvm5R6jcBVo0m3+TztFW0eQfNy7WRLlsVAmo+7ihor2bf/ X-Received: by 2002:a17:90b:fd4:b0:246:8497:37c5 with SMTP id gd20-20020a17090b0fd400b00246849737c5mr103590pjb.46.1684339776632; Wed, 17 May 2023 09:09:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684339776; cv=none; d=google.com; s=arc-20160816; b=rDJfBFoRf2Jr+pljqp32yTy8yonEn/5TwIQnKecOTP7jaXiNV93VU/9dsGH+3rSnLo JU1G46zBTDRekWYHpqfc7w4bt0OtM7GG52vjaCJAJr3ve4Mx6l7L5hznLYZZjYLg4MPP ZV2ce4CuL5XyNbDq4SQg5oAb7rG9eK852o3uef5aToS87k9Wy4Fc8jKhhT6D7hG5dH6O cwECEbOKtjToO5+BG0GgPnNC2pdxo3Sz6ry2iFocgYLaKnSMD0tpPsgx301/40TG9pzH 6VoPnSw6GQIXVSIp85dHDhloI+ZLd1OEa3pUieHVE7CqJd/adJcKA5oVrdUwuoI6fJik OCHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:feedback-id:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=NAdU0ZFkKL/GxTNJIYcpoMVLuevkFQ3Dl3nGDNVQ2BE=; b=Obd8QzJ5BZd0Ik8SkJCIA5ERPzVFEenj70Zny7a7HIT+M2ST8B9YYUdLckJyoFT/0B ng6yiF20+sD14JeH2fq6JGQFN8VtJFn74EKmzonQo3X+HZ7rlQb+rAAw+nROXW2OPZEV Xn+i6ldupyvsEqbtokakszI7PmmRU76Ngm+ScL/rdfzEEvPPc54EVcWzy89H2DKHQYyA tqA3Eohf8V3cCOJixPh/k3VmBdkaLIhAbN1RBjm8PYZIO6zKKtQ9RzFq8YBUXiPUzqET 2optonOoH972510nd8D6BiWO6ITFAPEuWBXAGANBSo8bkLsdQzbNlgpO3ePGRlpm5PFc MgIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=CtvJC2T0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s64-20020a632c43000000b005030859019fsi20716407pgs.675.2023.05.17.09.09.16; Wed, 17 May 2023 09:09:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=CtvJC2T0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231894AbjEQP7B (ORCPT + 99 others); Wed, 17 May 2023 11:59:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56856 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231175AbjEQP6i (ORCPT ); Wed, 17 May 2023 11:58:38 -0400 Received: from mta-65-227.siemens.flowmailer.net (mta-65-227.siemens.flowmailer.net [185.136.65.227]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 91AD71725 for ; Wed, 17 May 2023 08:58:30 -0700 (PDT) Received: by mta-65-227.siemens.flowmailer.net with ESMTPSA id 202305171558285090153d3041a1fa1b for ; Wed, 17 May 2023 17:58:28 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=daniel.starke@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=NAdU0ZFkKL/GxTNJIYcpoMVLuevkFQ3Dl3nGDNVQ2BE=; b=CtvJC2T0MgZgMjGIQvNbo1nopjh3gRiRhHZp5Vy3jg3TSKm3bMkMaemumLw0IUD8EZgYHU 3gm8oN5jUrTdYn5CPB42c9LKYWOFFE90dusFscLuP+4t6AAfGroGPYz4CpDoRo0lieWU3enU mLkMGmCYvZagE8c03kxMuCjlnzMoE=; From: "D. Starke" To: linux-serial@vger.kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, felix-haase@siemens.com Cc: linux-kernel@vger.kernel.org, Daniel Starke Subject: [PATCH v5 04/10] tty: n_gsm: add open_error counter to gsm_mux Date: Wed, 17 May 2023 17:56:58 +0200 Message-Id: <20230517155704.5701-4-daniel.starke@siemens.com> In-Reply-To: <20230517155704.5701-1-daniel.starke@siemens.com> References: <20230517155704.5701-1-daniel.starke@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-314044:519-21489:flowmailer X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766158265699947111?= X-GMAIL-MSGID: =?utf-8?q?1766158265699947111?= From: Daniel Starke Extend the n_gsm link statistics by a failed link open counter in preparation for an upcoming patch which will expose these. This counter is increased whenever an attempt to open the control channel failed. This is true in the following cases: - new DLCI allocation failed - connection request (SAMB) with invalid CR flag has been received - connection response (UA) timed out - parameter negotiation timed out or failed Signed-off-by: Daniel Starke --- drivers/tty/n_gsm.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) v4 -> v5: No changes. Please note that I cannot response to emails until August 7th. Felix Haase will take over from our side for questions regarding this patch series or the n_gsm. Link: https://lore.kernel.org/all/20230426080315.7595-4-daniel.starke@siemens.com/ diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index ebb71957f783..186f463f0f11 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -339,6 +339,7 @@ struct gsm_mux { unsigned long bad_fcs; unsigned long malformed; unsigned long io_error; + unsigned long open_error; unsigned long bad_size; unsigned long unsupported; }; @@ -1730,25 +1731,32 @@ static void gsm_control_negotiation(struct gsm_mux *gsm, unsigned int cr, struct gsm_dlci *dlci; struct gsm_dlci_param_bits *params; - if (dlen < sizeof(struct gsm_dlci_param_bits)) + if (dlen < sizeof(struct gsm_dlci_param_bits)) { + gsm->open_error++; return; + } /* Invalid DLCI? */ params = (struct gsm_dlci_param_bits *)data; addr = FIELD_GET(PN_D_FIELD_DLCI, params->d_bits); - if (addr == 0 || addr >= NUM_DLCI || !gsm->dlci[addr]) + if (addr == 0 || addr >= NUM_DLCI || !gsm->dlci[addr]) { + gsm->open_error++; return; + } dlci = gsm->dlci[addr]; /* Too late for parameter negotiation? */ - if ((!cr && dlci->state == DLCI_OPENING) || dlci->state == DLCI_OPEN) + if ((!cr && dlci->state == DLCI_OPENING) || dlci->state == DLCI_OPEN) { + gsm->open_error++; return; + } /* Process the received parameters */ if (gsm_process_negotiation(gsm, addr, cr, params) != 0) { /* Negotiation failed. Close the link. */ if (debug & DBG_ERRORS) pr_info("%s PN failed\n", __func__); + gsm->open_error++; gsm_dlci_close(dlci); return; } @@ -1768,6 +1776,7 @@ static void gsm_control_negotiation(struct gsm_mux *gsm, unsigned int cr, } else { if (debug & DBG_ERRORS) pr_info("%s PN in invalid state\n", __func__); + gsm->open_error++; } } @@ -2221,6 +2230,7 @@ static void gsm_dlci_t1(struct timer_list *t) dlci->retries--; mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); } else { + gsm->open_error++; gsm_dlci_begin_close(dlci); /* prevent half open link */ } break; @@ -2236,6 +2246,7 @@ static void gsm_dlci_t1(struct timer_list *t) dlci->mode = DLCI_MODE_ADM; gsm_dlci_open(dlci); } else { + gsm->open_error++; gsm_dlci_begin_close(dlci); /* prevent half open link */ } @@ -2757,12 +2768,16 @@ static void gsm_queue(struct gsm_mux *gsm) switch (gsm->control) { case SABM|PF: - if (cr == 1) + if (cr == 1) { + gsm->open_error++; goto invalid; + } if (dlci == NULL) dlci = gsm_dlci_alloc(gsm, address); - if (dlci == NULL) + if (dlci == NULL) { + gsm->open_error++; return; + } if (dlci->dead) gsm_response(gsm, address, DM|PF); else { From patchwork Wed May 17 15:56:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "D. Starke" X-Patchwork-Id: 95395 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1246223vqo; Wed, 17 May 2023 09:03:29 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4LOPySf3razhXl83MxYBcDS2JEnGatuQk2qMij558BC5gpgfHpkZz/XVhNrOHMCBjzXDIs X-Received: by 2002:a17:90b:4c89:b0:250:43a6:fb02 with SMTP id my9-20020a17090b4c8900b0025043a6fb02mr121881pjb.20.1684339409644; Wed, 17 May 2023 09:03:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684339409; cv=none; d=google.com; s=arc-20160816; b=Tkhx72KR1wTxp3bjtiOCWt54KksVs3KpEtyryPsmwVggMmQFGoWyjYhK+QmutXf4bT 1shhqmlzSkfUQ3Qx22xp3Qdn7t67v9Zc3USdvGFANXJrL4TjSEbtm2wzUdYQ9l3GlXf5 ak6YEhErOgG1dtoFXB0sdKdVq+X5HCSbZvMid2B2Uds5nE/wRps4JyW3PXHETe36IdRv eMo0K0O4ZKRVZJ3H8AIofUMmPixfXpMvhoMQBbZqGkKfTTBM71xlnDeSPdznybUR8/d1 xp7utDfME/7iX0Z9L7fKkW1KTvrg/3zJk7InGrMB3gbvML7uAGic9ZVfH5qfFk6d+Ht8 HE7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:feedback-id:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=E9IwZtdfkhkPpswS1gYiZOwz+Ap7dZzs6d4A7WBwoPE=; b=pEXOxqvSypPQpN2cKhkQqjD/gmAYMLCeUsYhl13FbVIKXO1wVPgza4tJ4vBnZCvAIC Wj9l/54Tn5iqDUSKiQMm0uUG+ej7OmqQZPZ7+g9teuYKN3MsQjXMAzE8DdWY1WMn7AK+ oZYUUwtd1agYP6AAVf2lOGt7N6Ko4ae0N4vf6j7mUPTwOGELjbcUr13v/qv5ZKW6AK50 n+Ixen+UeRk8YoGjOA8i/vvHiLLyq014k2NMQIegiwWWsnZQ/t9tnLlwUNRVt0jQsj87 NQ1SwsuAr4SWvuqeal3+uwgfTMq1JR69fPfFAk8LY4jqtQUYRTViqhIN6JKkhBvR8Gb4 /2Vg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=ioRufgCk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s15-20020a17090aad8f00b002532933832csi2005695pjq.78.2023.05.17.09.03.08; Wed, 17 May 2023 09:03:29 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=ioRufgCk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231774AbjEQP64 (ORCPT + 99 others); Wed, 17 May 2023 11:58:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56860 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231749AbjEQP6i (ORCPT ); Wed, 17 May 2023 11:58:38 -0400 Received: from mta-64-228.siemens.flowmailer.net (mta-64-228.siemens.flowmailer.net [185.136.64.228]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0AA4A72B4 for ; Wed, 17 May 2023 08:58:31 -0700 (PDT) Received: by mta-64-228.siemens.flowmailer.net with ESMTPSA id 20230517155829611cda8f53bbc3aa43 for ; Wed, 17 May 2023 17:58:29 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=daniel.starke@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=E9IwZtdfkhkPpswS1gYiZOwz+Ap7dZzs6d4A7WBwoPE=; b=ioRufgCk8NB5DNeaUoJVm9cmWHMmWgBGFMClospy6Ao5HltN4+fhPsfdnk4znAq71vXbac tgRBS3uEJXEPJHwq1kSKiEsSR4ARUTcXTw00Vqz7NEKYYXdkewOrGg9tEZMXsK+mLwjlZzCY inSnh6ULQ45hbJaaWRWJY9ewOoBpc=; From: "D. Starke" To: linux-serial@vger.kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, felix-haase@siemens.com Cc: linux-kernel@vger.kernel.org, Daniel Starke Subject: [PATCH v5 05/10] tty: n_gsm: increase malformed counter for malformed control frames Date: Wed, 17 May 2023 17:56:59 +0200 Message-Id: <20230517155704.5701-5-daniel.starke@siemens.com> In-Reply-To: <20230517155704.5701-1-daniel.starke@siemens.com> References: <20230517155704.5701-1-daniel.starke@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-314044:519-21489:flowmailer X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766157880673019153?= X-GMAIL-MSGID: =?utf-8?q?1766157880673019153?= From: Daniel Starke The malformed counter in gsm_mux is already increased in case of errors detected in gsm_queue() and gsm1_receive(). gsm_dlci_command() also detects a case for a malformed frame but does not increase the malformed counter yet. Fix this by also increasing the gsm_mux malformed counter in case of a malformed frame in gsm_dlci_command(). Note that the malformed counter is not yet exposed and only set internally. Signed-off-by: Daniel Starke --- drivers/tty/n_gsm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) v4 -> v5: No changes. Please note that I cannot response to emails until August 7th. Felix Haase will take over from our side for questions regarding this patch series or the n_gsm. Link: https://lore.kernel.org/all/20230426080315.7595-5-daniel.starke@siemens.com/ diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index 186f463f0f11..5b6a03668c78 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -2455,8 +2455,10 @@ static void gsm_dlci_command(struct gsm_dlci *dlci, const u8 *data, int len) data += dlen; /* Malformed command? */ - if (clen > len) + if (clen > len) { + dlci->gsm->malformed++; return; + } if (command & 1) gsm_control_message(dlci->gsm, command, data, clen); From patchwork Wed May 17 15:57:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "D. Starke" X-Patchwork-Id: 95399 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1252748vqo; Wed, 17 May 2023 09:11:15 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7E1Zd5EpkJY1TE6xX1gOjt2T4t2krC9u1ktO4GBp0Uwjb5VHbdYheyrfWxRPpIjhJSS/tA X-Received: by 2002:a17:903:2312:b0:1ac:656f:a697 with SMTP id d18-20020a170903231200b001ac656fa697mr46206416plh.21.1684339847170; Wed, 17 May 2023 09:10:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684339847; cv=none; d=google.com; s=arc-20160816; b=elteoblz4zWbwYMsc072694G7lG9TLk/ehwETwgL20/KsM0lhV3v0mq5RzmzapWjn1 hfpS12MOS5QUV0BKsh9qRC9AxKSyMQrPeNXvJI7LAWk4O2YGUS3xa++Gsc7xSDsCej9q hCC+a3WRK5U+zpGJcxqB3Ax0Of2VeWmhPQYr859zQCx/o/keR1mV4PZxepq5TMwAC0nb jTko7Thb6akBrhPXTqIcRSVrkvXlP8oqW5iJHeTWF5UwHB+h+YvmTASXEvD4E8uuAfKd vnjyp6IhPuwUdXt2SgT3LTyy2P2qbGmOExa6bh+NZ9TSfWTs/M59qnK/bx/iG/AqM5yv mxBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:feedback-id:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=ZT7+g7B3Lbu99drej4ZddyowwBxP0nuUx4VS88186Es=; b=NqqzoijRTyEuSHOV/AfSIElddHDUwFisaTbp98ilqnE2pozVm+NQlOjirzS0+DyO29 V3RA5fQlNQm5MmRTLpZyxBQ0VQFpGNeNHxF/qtnRaUjft4hh1KpphnsFykpn7617ftSm 0sK+orVqkprTARTt0FR3RUm/CeCUNkgj4/DuAILtTPKUk5JB2F+axNBKhyzg3WeZREdd SuaNM0MW32xWZ/1F8YnfU6368EnQXNhonX2GSh2iLCvn7iHPv+yBlqHFRSSGQwWguDkB p0sMR7dmRQ3Y/9pKAMWXMVwDh9mA85Zjx7+rkX95/qHTxozuI/Efuhtyn5bIhQVMoWXS KGCQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=OTmSarLU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s1-20020a17090a764100b0024e3527e8f1si2129290pjl.60.2023.05.17.09.10.32; Wed, 17 May 2023 09:10:47 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=OTmSarLU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232097AbjEQP7E (ORCPT + 99 others); Wed, 17 May 2023 11:59:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57372 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231898AbjEQP6y (ORCPT ); Wed, 17 May 2023 11:58:54 -0400 Received: from mta-64-225.siemens.flowmailer.net (mta-64-225.siemens.flowmailer.net [185.136.64.225]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 037AB3A80 for ; Wed, 17 May 2023 08:58:31 -0700 (PDT) Received: by mta-64-225.siemens.flowmailer.net with ESMTPSA id 20230517155829be8a39f72acba4b99e for ; Wed, 17 May 2023 17:58:29 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=daniel.starke@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=ZT7+g7B3Lbu99drej4ZddyowwBxP0nuUx4VS88186Es=; b=OTmSarLUw0pA6xy7u7l5FKpEmDX8pQVAYcMCiPvj+Ym0KglLFhEbIYSI5nHazJw1MZDMwZ 0rRkoy2A9ftyynVqELLWBaJVUfAg+ithhLgwK91W35/0K1Q3c6vcyTUp1CSWL5MQ09Pmgykr MdNtXdpV6aK7mbTefE9a9Yk+KauzU=; From: "D. Starke" To: linux-serial@vger.kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, felix-haase@siemens.com Cc: linux-kernel@vger.kernel.org, Daniel Starke Subject: [PATCH v5 06/10] tty: n_gsm: increase gsm_mux unsupported counted where appropriate Date: Wed, 17 May 2023 17:57:00 +0200 Message-Id: <20230517155704.5701-6-daniel.starke@siemens.com> In-Reply-To: <20230517155704.5701-1-daniel.starke@siemens.com> References: <20230517155704.5701-1-daniel.starke@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-314044:519-21489:flowmailer X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766158339185761127?= X-GMAIL-MSGID: =?utf-8?q?1766158339185761127?= From: Daniel Starke The structure gsm_mux contains the 'unsupported' field. However, there is currently no place in the code which increases this counter. Increase the 'unsupported' statistics counter in the following case: - an unsupported frame type has been requested by the peer via parameter negotiation - a control frame with an unsupported but known command has been received Note that we have no means to detect an inconsistent/unsupported adaptation sufficient accuracy as this changes the structure of the UI/UIH frames. E.g. a one byte header is added in case of convergence layer type 2 instead of 1 and contains the modem signal octet with the state of the signal lines. There is no checksum or other value which indicates of this field is correct or should be present. Therefore, we can only assume protocol correctness here. See also 'gsm_dlci_data()' where this is handled. Signed-off-by: Daniel Starke --- drivers/tty/n_gsm.c | 3 +++ 1 file changed, 3 insertions(+) v4 -> v5: No changes. Please note that I cannot response to emails until August 7th. Felix Haase will take over from our side for questions regarding this patch series or the n_gsm. Link: https://lore.kernel.org/all/20230426080315.7595-6-daniel.starke@siemens.com/ diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index 5b6a03668c78..42a8507aae4a 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -1590,6 +1590,7 @@ static int gsm_process_negotiation(struct gsm_mux *gsm, unsigned int addr, if (debug & DBG_ERRORS) pr_info("%s unsupported I frame request in PN\n", __func__); + gsm->unsupported++; return -EINVAL; default: if (debug & DBG_ERRORS) @@ -1897,6 +1898,8 @@ static void gsm_control_message(struct gsm_mux *gsm, unsigned int command, /* Optional unsupported commands */ case CMD_RPN: /* Remote port negotiation */ case CMD_SNC: /* Service negotiation command */ + gsm->unsupported++; + fallthrough; default: /* Reply to bad commands with an NSC */ buf[0] = command; From patchwork Wed May 17 15:57:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "D. Starke" X-Patchwork-Id: 95393 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1245044vqo; Wed, 17 May 2023 09:02:19 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4wudNwrc0FZEEXJFOzKyQ3rjYFXO7vpjcxEGA+z7bMeWQjQWUx5wnPXv92a6oeYf/v8t1j X-Received: by 2002:a05:6a20:1450:b0:106:1748:70e9 with SMTP id a16-20020a056a20145000b00106174870e9mr14359118pzi.28.1684339338639; Wed, 17 May 2023 09:02:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684339338; cv=none; d=google.com; s=arc-20160816; b=Va3BnhLqOAstS3YlDvrFgEkMy8MHmyHSmV07xXYetdfla1ocD6lrWWMvsoFS5t0Wwe 8Y2OfBKU/HngaTSMVwlCVAMoG3+gCEyiU3mxKhCv+QRwoAD4oNMBniRrDUIzerGU1/NY B75F48UPb9uYyKJ8GFunQO272SmGdUltb/NK2BIXxC2AcOdfriRGOSqoFsMWseXoDIyq wzuSfdf14i2wObQSI58G+XcWavoaCLx+L22ZLd+PVH7FOqD16O4rN+JKhRqeSeArRvm7 utgOT+gzS1JPSiJ4wSnGK5FgPRyd2PbsYg8LPFfEH//oiu4nkYheuDBvpjSkNpqOwp2Z MXPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:feedback-id:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=8JZ3aNj2YfHl3YwKHBbNEj8X9wcN9oM57BAa2nlT+Po=; b=sCMGJ7cXU4LMU54M+A+ol8jF7oSKyGGVb8REXZBrallynBz8yh56Q/KUTJmZ56ZY5p +fAzODrDByQdjT7r2NOI0m+LUpC/Tq1PGq1Z+qK5cLaZJqMWOvAx5GoMqL+UekKy96/P BUHpb1fZ5iEij7zKFVCexTC5rzPNJmyc1D/Jmx9jt0aWTA6dH6Mfkw5bMpxkFuOlzkNI CalLLrIF6xrx85M7nseco5UYgF1Ssh7xzbYPLJJOIRKxekm849oaMxwXZVZGSPMEn44S 2mEDk+sCBrrYwqR/Xb5/lgKH/So7w9xFLB/peoIXWToK5zuv6+78aGhCzRCjKFEZ7Mg+ UeYA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=ABTv8j70; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b1-20020aa78ec1000000b0063b506e148asi22379269pfr.90.2023.05.17.09.02.02; Wed, 17 May 2023 09:02:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=ABTv8j70; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232146AbjEQP7K (ORCPT + 99 others); Wed, 17 May 2023 11:59:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57354 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231968AbjEQP6z (ORCPT ); Wed, 17 May 2023 11:58:55 -0400 Received: from mta-65-225.siemens.flowmailer.net (mta-65-225.siemens.flowmailer.net [185.136.65.225]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 363447289 for ; Wed, 17 May 2023 08:58:34 -0700 (PDT) Received: by mta-65-225.siemens.flowmailer.net with ESMTPSA id 202305171558304f57da4f8f42d0ab55 for ; Wed, 17 May 2023 17:58:30 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=daniel.starke@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=8JZ3aNj2YfHl3YwKHBbNEj8X9wcN9oM57BAa2nlT+Po=; b=ABTv8j70Np0JRokN+q2Jfx+1JhRLSh7J7PBOYernGtJzjh9JrozrFbXSB8JOIX29YvhnwD dE4QNPFJUV03D8FpAuYyTXbLPlkgCG50l+RouAdDcMAyIkmK8oenN3gnN7aMJ2ZzhV/FD/lX TgwG3yiwuvWSoMfXqo5rwXqbVqg3c=; From: "D. Starke" To: linux-serial@vger.kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, felix-haase@siemens.com Cc: linux-kernel@vger.kernel.org, Daniel Starke Subject: [PATCH v5 07/10] tty: n_gsm: cleanup gsm_control_command and gsm_control_reply Date: Wed, 17 May 2023 17:57:01 +0200 Message-Id: <20230517155704.5701-7-daniel.starke@siemens.com> In-Reply-To: <20230517155704.5701-1-daniel.starke@siemens.com> References: <20230517155704.5701-1-daniel.starke@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-314044:519-21489:flowmailer X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766157806323429654?= X-GMAIL-MSGID: =?utf-8?q?1766157806323429654?= From: Daniel Starke There are multiple places in gsm_control_command and gsm_control_reply that derive the specific DLCI handle directly out of the DLCI table in gsm. Add a local variable which holds this handle and use it instead to improve code readability. Signed-off-by: Daniel Starke --- drivers/tty/n_gsm.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) v4 -> v5: No changes. Please note that I cannot response to emails until August 7th. Felix Haase will take over from our side for questions regarding this patch series or the n_gsm. Link: https://lore.kernel.org/all/20230426080315.7595-7-daniel.starke@siemens.com/ diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index 42a8507aae4a..62bff4474b57 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -1451,15 +1451,16 @@ static int gsm_control_command(struct gsm_mux *gsm, int cmd, const u8 *data, int dlen) { struct gsm_msg *msg; + struct gsm_dlci *dlci = gsm->dlci[0]; - msg = gsm_data_alloc(gsm, 0, dlen + 2, gsm->dlci[0]->ftype); + msg = gsm_data_alloc(gsm, 0, dlen + 2, dlci->ftype); if (msg == NULL) return -ENOMEM; msg->data[0] = (cmd << 1) | CR | EA; /* Set C/R */ msg->data[1] = (dlen << 1) | EA; memcpy(msg->data + 2, data, dlen); - gsm_data_queue(gsm->dlci[0], msg); + gsm_data_queue(dlci, msg); return 0; } @@ -1478,14 +1479,15 @@ static void gsm_control_reply(struct gsm_mux *gsm, int cmd, const u8 *data, int dlen) { struct gsm_msg *msg; + struct gsm_dlci *dlci = gsm->dlci[0]; - msg = gsm_data_alloc(gsm, 0, dlen + 2, gsm->dlci[0]->ftype); + msg = gsm_data_alloc(gsm, 0, dlen + 2, dlci->ftype); if (msg == NULL) return; msg->data[0] = (cmd & 0xFE) << 1 | EA; /* Clear C/R */ msg->data[1] = (dlen << 1) | EA; memcpy(msg->data + 2, data, dlen); - gsm_data_queue(gsm->dlci[0], msg); + gsm_data_queue(dlci, msg); } /** From patchwork Wed May 17 15:57:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "D. Starke" X-Patchwork-Id: 95400 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1253088vqo; Wed, 17 May 2023 09:11:39 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4q/3lkc0O6qNF8J8fdHPAn65gTntCZK7q20S+a/z+hRID9xpJHpnaoNy8RbZE4Rrvb9MxC X-Received: by 2002:a17:90a:9315:b0:24e:edd:4d63 with SMTP id p21-20020a17090a931500b0024e0edd4d63mr249487pjo.5.1684339899455; Wed, 17 May 2023 09:11:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684339899; cv=none; d=google.com; s=arc-20160816; b=x2q6X+ucxWO3f7deC0M3ZCpJW7FZvYo+ZKncG8g8xW5HHUMI9szYxNKJsJohcaoncY U1xqdMlwXgwfrKujI3rEermEtgp6uX+UK2Chyiqsx3on9qSW9WhrHrlNR87FiyUGVPRv 81aHhFLHWIGAVLwC3Jw+iCIzePB6JbaieB3xNiQo+dQ2pX6VSN2mxphvjB1uDZjh5zQp 0lLg9QSfq9cXHpONv8NAOWHvoIVgdLv/yJjIBpt40H32qe55GHba02C0EZNz7ab0kim3 jJr1AfaqBG42qtiTkPPqB4TGp0kZTjIo1k3ljNQt6ebkYQLg58WOkJa9Lz83qh9BuGP8 zFKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:feedback-id:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Sa2/lDymF7guLu5/iTBwB/pVI82RAGaOTwCGzH2ZfJs=; b=LYng0oEIgludrt2AJ+3/q8sNFfYPSN8abxJjrmEVmvoy2Khpb8DF5tHfr895Z9FQ1b tsj3dzo+3eW5hzt/qAcyQft6jYZLmLTnNWIgUFUPSfnbcB3RZJvtn4YccOSU2vcpNtaY 0nchmXwiIje6H5GwWzOCo7CGEz6K4N10OOBhY9x7Betvgdy2VpkYB68BnZ8S7wEUbhQw 7rBzTd/mVgWeYpUnKx/PUeWzzzo08rXyMhlicsk6eLjtFb68gMRNbw2+l3mTu4XR7IHY 2Qk2BhVY/30hjxepimbVwqZoOxFXYwul2VdhofNI06J18RijUC6qLYKRrxwL7OtSDx6+ 8j/Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=GGbH5S9C; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id rj7-20020a17090b3e8700b00247ad11b6d3si2205384pjb.88.2023.05.17.09.11.26; Wed, 17 May 2023 09:11:39 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=GGbH5S9C; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232125AbjEQP7H (ORCPT + 99 others); Wed, 17 May 2023 11:59:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57382 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231963AbjEQP6y (ORCPT ); Wed, 17 May 2023 11:58:54 -0400 Received: from mta-64-225.siemens.flowmailer.net (mta-64-225.siemens.flowmailer.net [185.136.64.225]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 41D567AB1 for ; Wed, 17 May 2023 08:58:33 -0700 (PDT) Received: by mta-64-225.siemens.flowmailer.net with ESMTPSA id 20230517155831f80cb885b24e654a99 for ; Wed, 17 May 2023 17:58:31 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=daniel.starke@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=Sa2/lDymF7guLu5/iTBwB/pVI82RAGaOTwCGzH2ZfJs=; b=GGbH5S9CVsn0iyn2AM467c9w4vL3Ia8lP4NQfMoFErGuzQ9vWcRrvigDC/YCnFkNy0ovoD 6NLoU6f4pviCO6yg2TCfBg2K0TCGQb1bv+UwaHmGcReOhouc2p3s/Vf94URSYEU8vbJajS+U IXTkWiALiGAJtR4DlF9uPIYctR8wg=; From: "D. Starke" To: linux-serial@vger.kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, felix-haase@siemens.com Cc: linux-kernel@vger.kernel.org, Daniel Starke Subject: [PATCH v5 08/10] tty: n_gsm: add DLCI specific rx/tx statistics Date: Wed, 17 May 2023 17:57:02 +0200 Message-Id: <20230517155704.5701-8-daniel.starke@siemens.com> In-Reply-To: <20230517155704.5701-1-daniel.starke@siemens.com> References: <20230517155704.5701-1-daniel.starke@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-314044:519-21489:flowmailer X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766158394733605085?= X-GMAIL-MSGID: =?utf-8?q?1766158394733605085?= From: Daniel Starke Add counters for the number of data bytes received/transmitted per DLCI in for preparation for an upcoming patch which will expose these values to the user. Signed-off-by: Daniel Starke --- drivers/tty/n_gsm.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) v4 -> v5: Added blank line before comment of new tx/rx fields in struct gsm_dlci as suggested in the review. The remarked upcoming patch which exposes these flags is now included in patch 9/10. This has been done as recommended in the review. Please note that I cannot response to emails until August 7th. Felix Haase will take over from our side for questions regarding this patch series or the n_gsm. Link: https://lore.kernel.org/all/DB9PR10MB5881A7A09725EAF8FDB5F35BE0789@DB9PR10MB5881.EURPRD10.PROD.OUTLOOK.COM/ diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index 62bff4474b57..511f22489754 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -186,6 +186,10 @@ struct gsm_dlci { void (*data)(struct gsm_dlci *dlci, const u8 *data, int len); void (*prev_data)(struct gsm_dlci *dlci, const u8 *data, int len); struct net_device *net; /* network interface, if created */ + + /* Statistics (not currently exposed) */ + u64 tx; /* Data bytes sent on this DLCI */ + u64 rx; /* Data bytes received on this DLCI */ }; /* @@ -1216,6 +1220,7 @@ static int gsm_dlci_data_output(struct gsm_mux *gsm, struct gsm_dlci *dlci) tty_port_tty_wakeup(&dlci->port); __gsm_data_queue(dlci, msg); + dlci->tx += len; /* Bytes of data we used up */ return size; } @@ -1283,6 +1288,7 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm, memcpy(dp, dlci->skb->data, len); skb_pull(dlci->skb, len); __gsm_data_queue(dlci, msg); + dlci->tx += len; if (last) { dev_kfree_skb_any(dlci->skb); dlci->skb = NULL; @@ -1461,6 +1467,7 @@ static int gsm_control_command(struct gsm_mux *gsm, int cmd, const u8 *data, msg->data[1] = (dlen << 1) | EA; memcpy(msg->data + 2, data, dlen); gsm_data_queue(dlci, msg); + dlci->tx += dlen; return 0; } @@ -1488,6 +1495,7 @@ static void gsm_control_reply(struct gsm_mux *gsm, int cmd, const u8 *data, msg->data[1] = (dlen << 1) | EA; memcpy(msg->data + 2, data, dlen); gsm_data_queue(dlci, msg); + dlci->tx += dlen; } /** @@ -1852,10 +1860,13 @@ static void gsm_control_message(struct gsm_mux *gsm, unsigned int command, const u8 *data, int clen) { u8 buf[1]; + struct gsm_dlci *dlci = gsm->dlci[0]; + + if (dlci) + dlci->rx += clen; switch (command) { case CMD_CLD: { - struct gsm_dlci *dlci = gsm->dlci[0]; /* Modem wishes to close down */ if (dlci) { dlci->dead = true; @@ -1934,6 +1945,8 @@ static void gsm_control_response(struct gsm_mux *gsm, unsigned int command, ctrl = gsm->pending_cmd; dlci = gsm->dlci[0]; + if (dlci) + dlci->rx += clen; command |= 1; /* Does the reply match our command */ if (ctrl != NULL && (command == ctrl->cmd || command == CMD_NSC)) { @@ -2298,6 +2311,9 @@ static void gsm_dlci_begin_open(struct gsm_dlci *dlci) need_pn = true; } + dlci->tx = 0; + dlci->rx = 0; + switch (dlci->state) { case DLCI_CLOSED: case DLCI_WAITING_CONFIG: @@ -2330,6 +2346,9 @@ static void gsm_dlci_begin_open(struct gsm_dlci *dlci) */ static void gsm_dlci_set_opening(struct gsm_dlci *dlci) { + dlci->tx = 0; + dlci->rx = 0; + switch (dlci->state) { case DLCI_CLOSED: case DLCI_WAITING_CONFIG: @@ -2349,6 +2368,9 @@ static void gsm_dlci_set_opening(struct gsm_dlci *dlci) */ static void gsm_dlci_set_wait_config(struct gsm_dlci *dlci) { + dlci->tx = 0; + dlci->rx = 0; + switch (dlci->state) { case DLCI_CLOSED: case DLCI_CLOSING: @@ -2425,6 +2447,7 @@ static void gsm_dlci_data(struct gsm_dlci *dlci, const u8 *data, int clen) fallthrough; case 1: /* Line state will go via DLCI 0 controls only */ default: + dlci->rx += clen; tty_insert_flip_string(port, data, clen); tty_flip_buffer_push(port); } @@ -2785,6 +2808,7 @@ static void gsm_queue(struct gsm_mux *gsm) gsm->open_error++; return; } + dlci->rx += gsm->len; if (dlci->dead) gsm_response(gsm, address, DM|PF); else { From patchwork Wed May 17 15:57:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "D. Starke" X-Patchwork-Id: 95398 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1252345vqo; Wed, 17 May 2023 09:10:42 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5ECbMwSXEr3/Vp50QL5W+wEtCDSJkv/HZRylCRlI9BgXP2Y27lXj3nzCZZoSwO/fv8vDGW X-Received: by 2002:a17:90a:cb8e:b0:252:7114:b37a with SMTP id a14-20020a17090acb8e00b002527114b37amr117588pju.47.1684339842660; Wed, 17 May 2023 09:10:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684339842; cv=none; d=google.com; s=arc-20160816; b=bJzE4Ps+rVTTYeA21gYG0Ei74K2vdj43ZSozvFPuX/7mUYj/abfspqDPqBrCNsDnPZ OZKV85K/VoWzC+19JvupWoc8kRXFc2syjqsc/2OeSH4paXUdxR3AEIWmB2HSqEvdswTJ UBqy1nNBd9x8nrlb5WmGllg0tLW7WpyLAw6ZdrJ8PrDMAIn3nr+vvVcYieycHmnapl4t /XG8z5n5hI26u5clEII7f4AJjFFPQp8WrzJz/eSnLxd8E+wF3Ya7+oRjiH+6Z0UUeuJF FrWvVRyCuq6H1I3T8m6yztx6Bey0d1WNwB3nWMMf4KeDzHU8ztxuNe7J8ylC1IWm3RhC feKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:feedback-id:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=I8rIrez1vOp3Ee2KwKlOwpZ0Tbuw1W2GBhq4oZuF5uE=; b=oouZdOqdniISMyiT6HdJaXnsknO2J+puksoxCzZ/PQDKXLwndXQklX3Q0JGM3ySiE9 nV8BhTL5U5811y4+0VPhK59c+f1ZneEQC2ULs1Gg1IwlJcmXHrWULyNd2ZzX6yyF7OXB MiTyJjMu6OzzqXUbqIq6T3e6PXB/KYbov8Kt2u7K7FqBel0fedwTr5DoW1FGhrz9gNFG uO7tVV5hhx/1pwrBWCtRW9yCMwwRi+DL/0djFt3yqldb82cwS0alS2lsUNz/rlizYM0D pdB13bfQOTb/OznM/PQ17Lvx1pgZdrrXwv+1gNLtEegQj5AqguoIlR15+uOrY8V4lXa+ Pv4g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=U3dT0lEv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ob9-20020a17090b390900b0024e5ed38294si2325974pjb.66.2023.05.17.09.10.30; Wed, 17 May 2023 09:10:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=U3dT0lEv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229907AbjEQP7Q (ORCPT + 99 others); Wed, 17 May 2023 11:59:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57514 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231749AbjEQP7A (ORCPT ); Wed, 17 May 2023 11:59:00 -0400 Received: from mta-65-226.siemens.flowmailer.net (mta-65-226.siemens.flowmailer.net [185.136.65.226]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DB6D26596 for ; Wed, 17 May 2023 08:58:33 -0700 (PDT) Received: by mta-65-226.siemens.flowmailer.net with ESMTPSA id 20230517155831b511dab89ce444757d for ; Wed, 17 May 2023 17:58:31 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=daniel.starke@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=I8rIrez1vOp3Ee2KwKlOwpZ0Tbuw1W2GBhq4oZuF5uE=; b=U3dT0lEv/7vXDxEa2b4ExjZOaQ6BgZLNqITOvBauRtuUiF7rnDZHSlc9pIhMevI9NSeHua 7ofnwszIsoQLYl5LcBeC6SW3oQzirPWxoKG+0k1BfwXkMcQ8x7hSKzYvCPXOaVuQWGVkmLcv sXiQ3CZlypLDEZ3YbQrI1f1s3NdCQ=; From: "D. Starke" To: linux-serial@vger.kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, felix-haase@siemens.com Cc: linux-kernel@vger.kernel.org, Daniel Starke Subject: [PATCH v5 09/10] tty: n_gsm: expose configuration and statistics via proc fs Date: Wed, 17 May 2023 17:57:03 +0200 Message-Id: <20230517155704.5701-9-daniel.starke@siemens.com> In-Reply-To: <20230517155704.5701-1-daniel.starke@siemens.com> References: <20230517155704.5701-1-daniel.starke@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-314044:519-21489:flowmailer X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766158334835787582?= X-GMAIL-MSGID: =?utf-8?q?1766158334835787582?= From: Daniel Starke The n_gsm mux collects various statistics about the mux and its channels. These are currently not exposed to the user. There exists already a proc fs path for tty ldiscs (/proc/tty/ldisc). Extend this path by an 'n_gsm' node and create a proc file for each mux instance if active. The file exposes protocol statistics and channel states and configuration to the user. Mutex based locks are introduced to avoid inconsistent states. The following shows an example output: tty:ttyS1 flags: initiator:1 mode:1 mru:64 mtu:64 t1:10 t2:34 t3:10 n2:3 k:2 wc:0 ka:100 bad_fcs:0 malformed:0 io_error:0 open_error:0 bad_size:0 unsupported:0 dlci:0 state:OPEN cl:2 prio:0 i:UIH k:2 mtu:64 tx:35 rx:35 Description: tty: The underlying device used by this mux. flags: Tty flags relevant to the mux protocol. initiator: 0 for responder, 1 for initiator. mode: 0 for basic option mode, 1 for advanced option mode mru: Maximum receive unit size. mtu: Maximum transmission unit size. t1: Acknowledgment timer. t2: Response timer for multiplexer control channel. t3: Response timer for wake-up procedure. n2: Maximum number of retransmissions. k: Window size. wc: Wait for configuration before starting parameter negotiation? ka: Control channel keep-alive timer (0 if disabled). bad_fcs: Number of bad FCS. malformed: Number of malformed frames. io_error: Number of I/O errors on the underlying tty. open_error: Number of failed DLCI open attempts. bad_size: Number of n_gsm frames with bad size. unsupported: Number of malformed control frames. dlci: Related channel number. state: Current channel state. Possible values are CLOSED, WAITING_CONFIG, CONFIGURE, OPENING, OPEN and CLOSING. cl: Convergence layer type. prio: Priority. i: Framing. Possible values are UI and UIH. k: Window size. mtu: Maximum transmission unit size. tx: Transmitted payload size in bytes (incl. convergence layer type header). rx: Received payload size in bytes (incl. convergence layer type header). All timers are in 1/100th of a second units. Signed-off-by: Daniel Starke --- drivers/tty/n_gsm.c | 207 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 196 insertions(+), 11 deletions(-) v4 -> v5: Newly added patch to expose the collected statistics to the user via proc fs. Please note that I cannot response to emails until August 7th. Felix Haase will take over from our side for questions regarding this patch series or the n_gsm. Link: https://lore.kernel.org/all/DB9PR10MB5881A7A09725EAF8FDB5F35BE0789@DB9PR10MB5881.EURPRD10.PROD.OUTLOOK.COM/ diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index 511f22489754..30f73ab2491f 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -46,10 +46,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include #include @@ -187,7 +189,7 @@ struct gsm_dlci { void (*prev_data)(struct gsm_dlci *dlci, const u8 *data, int len); struct net_device *net; /* network interface, if created */ - /* Statistics (not currently exposed) */ + /* Statistics (exposed via proc file) */ u64 tx; /* Data bytes sent on this DLCI */ u64 rx; /* Data bytes received on this DLCI */ }; @@ -272,6 +274,7 @@ enum gsm_mux_state { struct gsm_mux { struct tty_struct *tty; /* The tty our ldisc is bound to */ + struct proc_dir_entry *proc; /* Associated proc fs entry */ spinlock_t lock; struct mutex mutex; unsigned int num; @@ -339,7 +342,7 @@ struct gsm_mux { bool wait_config; /* Wait for configuration by ioctl before DLCI open */ u32 keep_alive; /* Control channel keep-alive in 10ms */ - /* Statistics (not currently exposed) */ + /* Statistics (exposed via proc file) */ unsigned long bad_fcs; unsigned long malformed; unsigned long io_error; @@ -357,6 +360,7 @@ struct gsm_mux { #define MAX_MUX 4 /* 256 minors */ static struct gsm_mux *gsm_mux[MAX_MUX]; /* GSM muxes */ static DEFINE_SPINLOCK(gsm_mux_lock); +static DEFINE_MUTEX(gsm_mux_mutex); static struct tty_driver *gsm_tty_driver; @@ -3079,6 +3083,153 @@ static void gsm_error(struct gsm_mux *gsm) gsm->io_error++; } +/* + * Entry to the proc file system in tty/ldisc/n_gsm/ + */ + +static struct proc_dir_entry *proc_gsm; + +/** + * gsm_proc_print_flag - check and print termios flag + * @m: output handle + * @flags: termios flags + * @val: flag to check and print + * @str: string representation of val + * @first: does not need separator? + */ +static bool gsm_proc_print_flag(struct seq_file *m, unsigned short flags, + int val, const char *str, bool first) +{ + if ((flags & val) == 0) + return first; + if (!first) + seq_putc(m, '|'); + seq_puts(m, str); + return false; +} + +#define gsm_proc_print_flag_str(m, flags, val) \ + (first = gsm_proc_print_flag((m), (flags), (val), __stringify(val), first)) + +/** + * gsm_proc_show - output proc file + * @m: output handle + * @v: result from start + * + * Handles the output of /proc/tty/ldisc/n_gsm/mux%d + */ +static int gsm_proc_show(struct seq_file *m, void *v) +{ + struct gsm_mux *gsm = m->private; + struct gsm_dlci *dlci = NULL; + unsigned short flags; + int i; + bool first = true; + const char *state, *ftype; + + if (!gsm) + return -ENODEV; + + /* The proc file may get removed in gsm_cleanup_mux() if the connection + * was closed. Early out here to avoid a deadlock. + */ + if (!mutex_trylock(&gsm_mux_mutex)) + return -EBUSY; + if (!mutex_trylock(&gsm->mutex)) { + mutex_unlock(&gsm_mux_mutex); + return -EBUSY; + } + + seq_printf(m, "tty:%s flags:", tty_name(gsm->tty)); + flags = gsm->tty->termios.c_iflag; + gsm_proc_print_flag_str(m, flags, IGNBRK); + gsm_proc_print_flag_str(m, flags, IXON); + gsm_proc_print_flag_str(m, flags, IXOFF); + flags = gsm->tty->termios.c_cflag; + gsm_proc_print_flag_str(m, flags, CLOCAL); + gsm_proc_print_flag_str(m, flags, CRTSCTS); + seq_putc(m, '\n'); + + seq_printf(m, "initiator:%d mode:%d mru:%u mtu:%u t1:%d t2:%d t3:%d", + gsm->initiator, gsm->encoding, gsm->mru, gsm->mtu, gsm->t1, + gsm->t2, gsm->t3); + seq_printf(m, " n2:%d k:%d wc:%d ka:%u", gsm->n2, gsm->k, + gsm->wait_config ? 1 : 0, gsm->keep_alive); + if (gsm->dead) + seq_puts(m, " DEAD"); + seq_putc(m, '\n'); + + seq_printf(m, "bad_fcs:%lu malformed:%lu io_error:%lu open_error:%lu", + gsm->bad_fcs, gsm->malformed, gsm->io_error, + gsm->open_error); + seq_printf(m, " bad_size:%lu unsupported:%lu\n\n", gsm->bad_size, + gsm->unsupported); + + for (i = 0; i < NUM_DLCI; i++) { + dlci = gsm->dlci[i]; + if (!dlci) + continue; + switch (dlci->state) { + case DLCI_CLOSED: + state = "CLOSED"; + break; + case DLCI_WAITING_CONFIG: + state = "WAITING_CONFIG"; + break; + case DLCI_CONFIGURE: + state = "CONFIGURE"; + break; + case DLCI_OPENING: + state = "OPENING"; + break; + case DLCI_OPEN: + state = "OPEN"; + break; + case DLCI_CLOSING: + state = "CLOSING"; + break; + default: + state = "???"; + break; + } + switch (dlci->ftype) { + case UI: + ftype = "UI"; + break; + case UIH: + ftype = "UIH"; + break; + default: + ftype = "???"; + break; + } + seq_printf(m, "dlci:%d state:%s cl:%d prio:%d i:%s k:%d mtu:%u", + i, state, dlci->adaption, dlci->prio, ftype, dlci->k, + dlci->mtu); + seq_printf(m, " tx:%llu rx:%llu", dlci->tx, dlci->rx); + if (dlci->dead) + seq_puts(m, " DEAD"); + seq_putc(m, '\n'); + } + + mutex_unlock(&gsm->mutex); + mutex_unlock(&gsm_mux_mutex); + + return 0; +} + +static int gsm_proc_open(struct inode *inode, struct file *file) +{ + return single_open(file, gsm_proc_show, pde_data(inode)); +} + +static const struct proc_ops gsm_proc_ops = { + .proc_open = gsm_proc_open, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_release = single_release, +}; + /** * gsm_cleanup_mux - generic GSM protocol cleanup * @gsm: our mux @@ -3131,6 +3282,9 @@ static void gsm_cleanup_mux(struct gsm_mux *gsm, bool disc) list_for_each_entry_safe(txq, ntxq, &gsm->tx_data_list, list) kfree(txq); INIT_LIST_HEAD(&gsm->tx_data_list); + + if (gsm->proc) + proc_remove(gsm->proc); } /** @@ -3145,6 +3299,7 @@ static void gsm_cleanup_mux(struct gsm_mux *gsm, bool disc) static int gsm_activate_mux(struct gsm_mux *gsm) { struct gsm_dlci *dlci; + char pbuf[8]; int ret; dlci = gsm_dlci_alloc(gsm, 0); @@ -3162,6 +3317,9 @@ static int gsm_activate_mux(struct gsm_mux *gsm) gsm->has_devices = true; gsm->dead = false; /* Tty opens are now permissible */ + + if (proc_gsm && snprintf(pbuf, sizeof(pbuf), "mux%u", gsm->num) > 0) + gsm->proc = proc_create_data(pbuf, 0444, proc_gsm, &gsm_proc_ops, gsm); return 0; } @@ -3596,6 +3754,8 @@ static void gsmld_close(struct tty_struct *tty) { struct gsm_mux *gsm = tty->disc_data; + mutex_lock(&gsm_mux_mutex); + /* The ldisc locks and closes the port before calling our close. This * means we have no way to do a proper disconnect. We will not bother * to do one. @@ -3607,6 +3767,8 @@ static void gsmld_close(struct tty_struct *tty) gsmld_flush_buffer(tty); /* Do other clean up here */ mux_put(gsm); + + mutex_unlock(&gsm_mux_mutex); } /** @@ -3622,14 +3784,20 @@ static void gsmld_close(struct tty_struct *tty) static int gsmld_open(struct tty_struct *tty) { struct gsm_mux *gsm; + int ret = 0; - if (tty->ops->write == NULL) - return -EINVAL; + mutex_lock(&gsm_mux_mutex); + if (tty->ops->write == NULL) { + ret = -EINVAL; + goto err_unlock; + } /* Attach our ldisc data */ gsm = gsm_alloc_mux(); - if (gsm == NULL) - return -ENOMEM; + if (gsm == NULL) { + ret = -ENOMEM; + goto err_unlock; + } tty->disc_data = gsm; tty->receive_room = 65536; @@ -3645,7 +3813,9 @@ static int gsmld_open(struct tty_struct *tty) else gsm->receive = gsm1_receive; - return 0; +err_unlock: + mutex_unlock(&gsm_mux_mutex); + return ret; } /** @@ -3769,17 +3939,24 @@ static int gsmld_ioctl(struct tty_struct *tty, unsigned int cmd, struct gsm_mux *gsm = tty->disc_data; unsigned int base, addr; struct gsm_dlci *dlci; + int ret = 0; switch (cmd) { case GSMIOC_GETCONF: gsm_copy_config_values(gsm, &c); + mutex_lock(&gsm_mux_mutex); if (copy_to_user((void __user *)arg, &c, sizeof(c))) - return -EFAULT; - return 0; + ret = -EFAULT; + mutex_unlock(&gsm_mux_mutex); + break; case GSMIOC_SETCONF: + mutex_lock(&gsm_mux_mutex); if (copy_from_user(&c, (void __user *)arg, sizeof(c))) - return -EFAULT; - return gsm_config(gsm, &c); + ret = -EFAULT; + else + ret = gsm_config(gsm, &c); + mutex_unlock(&gsm_mux_mutex); + break; case GSMIOC_GETFIRST: base = mux_num_to_base(gsm); return put_user(base + 1, (__u32 __user *)arg); @@ -3824,6 +4001,7 @@ static int gsmld_ioctl(struct tty_struct *tty, unsigned int cmd, default: return n_tty_ioctl_helper(tty, cmd, arg); } + return ret; } /* @@ -4497,7 +4675,9 @@ static void gsmtty_cleanup(struct tty_struct *tty) dlci_put(dlci); dlci_put(gsm->dlci[0]); + mutex_lock(&gsm_mux_mutex); mux_put(gsm); + mutex_unlock(&gsm_mux_mutex); } /* Virtual ttys for the demux */ @@ -4556,6 +4736,9 @@ static int __init gsm_init(void) status = -EBUSY; goto err_put_driver; } + + proc_gsm = proc_mkdir_mode("tty/ldisc/n_gsm", 0555, NULL); + pr_debug("gsm_init: loaded as %d,%d.\n", gsm_tty_driver->major, gsm_tty_driver->minor_start); return 0; @@ -4569,6 +4752,8 @@ static int __init gsm_init(void) static void __exit gsm_exit(void) { tty_unregister_ldisc(&tty_ldisc_packet); + if (proc_gsm) + proc_remove(proc_gsm); tty_unregister_driver(gsm_tty_driver); tty_driver_kref_put(gsm_tty_driver); } From patchwork Wed May 17 15:57:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "D. Starke" X-Patchwork-Id: 95394 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1245588vqo; Wed, 17 May 2023 09:02:51 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7vSYw0PnA5wUl+ybjtQdNbvfagurY/ipizQFSiSYzIeAiWFt11QdPSOaP28hEiLzkTnOdS X-Received: by 2002:a05:6a21:6d88:b0:104:f973:d846 with SMTP id wl8-20020a056a216d8800b00104f973d846mr20090142pzb.14.1684339371535; Wed, 17 May 2023 09:02:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684339371; cv=none; d=google.com; s=arc-20160816; b=g5/IGKVSXmwmWHs2KY/aU6h+7zDbA+fXUV/5PSuWqqvtqu+Wn6/jC9HNGBdoSYFyyr mF/Df1N6zlTYVAgBQyjd5l9HH+shulLEuPoeUuARc1xDkCDc2hszon7HYwMf1t6bA49W g6d3d++F6lA3DQfjyGHnDE4uduWDAGEfb2q+/3jM5PDqnPmvFBNbGEtpOxZoJde84GLF Z7Pu8R2OLgJjU+5EOqgH94MykzTACWnF4E10moW7gs3io3N8Mi0rM59QI2icFInb5ERw m9L1utRFiNY9P1xcgV/LxuDveFapOyf8IrnIIx6z56mtv3QjqIMY5cvyOBno8qvDW6OF BL8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:feedback-id:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=sXrwJ9Suw+eRO3K7fPMPI+/OulstW6ToHU5QLmyRPdg=; b=V8BFsbIhrJmYaMbxVI+SIT7hMFBYF+/yacW5QvENjtIkybb8g3diidLx/Wguv+ZtZr earmD8eAMP2VVMl4LuaqL1kUtKx8PrCn97hFAEkDxclypwYEyrL7VAQPf5uS0nINdYSU 2E/ltThDX+fxY2/27MSm51Oq6B+cpYzlIZAy7kTpzgHjTduIzv6MkGECL7h1fzTaiA6s pnmWyc1sl3rgMMttyy9oL6awgb44IIYFX/Z2/crKWtD+X8cA2ysJQvAc4ZXsK5W6Ny0l AK4fp16zD1Ay67DjcY3X3I/6MTJGW0Fq4GTRyUUim0p5FajDTJIchgsBrOGda79W9P3O VrKg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=poCQmV7v; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c18-20020a637252000000b00528d30e698bsi21569287pgn.734.2023.05.17.09.02.36; Wed, 17 May 2023 09:02:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=poCQmV7v; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231947AbjEQP7T (ORCPT + 99 others); Wed, 17 May 2023 11:59:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57356 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231983AbjEQP67 (ORCPT ); Wed, 17 May 2023 11:58:59 -0400 Received: from mta-64-228.siemens.flowmailer.net (mta-64-228.siemens.flowmailer.net [185.136.64.228]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 34CD16A5F for ; Wed, 17 May 2023 08:58:34 -0700 (PDT) Received: by mta-64-228.siemens.flowmailer.net with ESMTPSA id 20230517155832d1db49695436981b53 for ; Wed, 17 May 2023 17:58:32 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=daniel.starke@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=sXrwJ9Suw+eRO3K7fPMPI+/OulstW6ToHU5QLmyRPdg=; b=poCQmV7v3sTU0jmYQLtrkyfHOnvWb/Pxh9cnrogAs+k9+cjXKKth4xhS48mQXkXHoDZf3Q yTAlJNEIId/7caobzzxczFOarsi/blCvxQ0OO+7dGDWKli7XJs8+VmpRVW4ejoGvc8ixJTtI kMchkQlzQWnlJswdZPBAF18HGXqGk=; From: "D. Starke" To: linux-serial@vger.kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com, felix-haase@siemens.com Cc: linux-kernel@vger.kernel.org, Daniel Starke Subject: [PATCH v5 10/10] tty: n_gsm: add restart flag to extended ioctl config Date: Wed, 17 May 2023 17:57:04 +0200 Message-Id: <20230517155704.5701-10-daniel.starke@siemens.com> In-Reply-To: <20230517155704.5701-1-daniel.starke@siemens.com> References: <20230517155704.5701-1-daniel.starke@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-314044:519-21489:flowmailer X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766157840545138142?= X-GMAIL-MSGID: =?utf-8?q?1766157840545138142?= From: Daniel Starke Currently, changing the parameters of the n_gsm mux gives no direct control to the user whether this should trigger a mux reset or not. The decision is solely made by the driver based on the assumption which parameter changes are compatible or not. Therefore, the user has no means to perform an automatic mux reset after parameter configuration for non-conflicting changes. Add the parameter 'flags' to 'gsm_config_ext' to force a mux reset after ioctl setting regardless of whether the changes made require this or not by setting this to 'GSM_FL_RESTART'. This is done similar to 'GSM_FL_RESTART' in gsm_dlci_config.flags. Note that 'GSM_FL_RESTART' is currently the only allowed flag to allow additions here. Signed-off-by: Daniel Starke --- drivers/tty/n_gsm.c | 23 +++++++++++++++++++++++ include/uapi/linux/gsmmux.h | 5 ++++- 2 files changed, 27 insertions(+), 1 deletion(-) v4 -> v5: Newly added patch. This adds the missing equivalent from struct gsm_dlci_config to struct gsm_config_ext. See also the link below regarding the initial remark for this. Please note that I cannot response to emails until August 7th. Felix Haase will take over from our side for questions regarding this patch series or the n_gsm. Link: https://lore.kernel.org/all/cd7c33c8-2634-382d-cf62-3785e391af2@linux.intel.com/ diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index 30f73ab2491f..362a42bdc072 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -3578,6 +3578,7 @@ static void gsm_copy_config_ext_values(struct gsm_mux *gsm, static int gsm_config_ext(struct gsm_mux *gsm, struct gsm_config_ext *ce) { + bool need_restart = false; unsigned int i; /* @@ -3587,6 +3588,20 @@ static int gsm_config_ext(struct gsm_mux *gsm, struct gsm_config_ext *ce) for (i = 0; i < ARRAY_SIZE(ce->reserved); i++) if (ce->reserved[i]) return -EINVAL; + if (ce->flags & ~GSM_FL_RESTART) + return -EINVAL; + + /* Requires care */ + if (ce->flags & GSM_FL_RESTART) + need_restart = true; + + /* + * Close down what is needed, restart and initiate the new + * configuration. On the first time there is no DLCI[0] + * and closing or cleaning up is not necessary. + */ + if (need_restart) + gsm_cleanup_mux(gsm, true); /* * Setup the new configuration values @@ -3594,6 +3609,14 @@ static int gsm_config_ext(struct gsm_mux *gsm, struct gsm_config_ext *ce) gsm->wait_config = ce->wait_config ? true : false; gsm->keep_alive = ce->keep_alive; + if (gsm->dead) { + int ret = gsm_activate_mux(gsm); + if (ret) + return ret; + if (gsm->initiator) + gsm_dlci_begin_open(gsm->dlci[0]); + } + return 0; } diff --git a/include/uapi/linux/gsmmux.h b/include/uapi/linux/gsmmux.h index 3bd6f03a8293..4c878d84dbda 100644 --- a/include/uapi/linux/gsmmux.h +++ b/include/uapi/linux/gsmmux.h @@ -11,6 +11,7 @@ * flags definition for n_gsm * * Used by: + * struct gsm_config_ext.flags * struct gsm_dlci_config.flags */ /* Forces a DLCI reset if set. Otherwise, a DLCI reset is only done if @@ -98,12 +99,14 @@ struct gsm_netconfig { * * @keep_alive: Control channel keep-alive in 1/100th of a second (0 to disable). * @wait_config: Wait for DLCI config before opening virtual link? + * @flags: Mux specific flags. * @reserved: For future use, must be initialized to zero. */ struct gsm_config_ext { __u32 keep_alive; __u32 wait_config; - __u32 reserved[6]; + __u32 flags; + __u32 reserved[5]; }; #define GSMIOC_GETCONF_EXT _IOR('G', 5, struct gsm_config_ext)