From patchwork Wed Apr 5 05:47:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "D. Starke" X-Patchwork-Id: 79456 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp85338vqo; Tue, 4 Apr 2023 23:09:15 -0700 (PDT) X-Google-Smtp-Source: AKy350bFB9QYxqbsGystTQpcRFnGj3nhVZaba/mY+mpl5VklxDRAuoSX2bgS9lL9rntOGK2itB/8 X-Received: by 2002:a17:903:74c:b0:19f:30be:ea0d with SMTP id kl12-20020a170903074c00b0019f30beea0dmr4807604plb.62.1680674955039; Tue, 04 Apr 2023 23:09:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680674955; cv=none; d=google.com; s=arc-20160816; b=fmqrDZb/PjrW/tx+Qdul0zU1NO2cL/1GdDNeQfGqbcIkwQv0/es6uPmP+ZNDUPiUlM MQp+1rM6BlFKA1DlpWOGWRAoJMoCk6BVjAM1SyWhxYqapQOfGvnu1SmJFOfF15t1fl4T W97DYb5eOMRwJZ8TyXGhf2m9KkH5104EbKzaMia6/gXWlZbsK7Bmg/i0VGSK8un0PB2+ P7KF9iRAza6KOYTO7vHIiijn2wg7Co8NjO0VpmwEiGrovkgK7kBLcP0iQfrLOnZyzTCs SJJ5zaGKrf7nDr3dIAi52Q8Tnyq+19bYymfgZcbJ1KJcSF3lZciK2479KIMc0Uf6YPlj PhIA== 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=Zt+CBmSJELOiEDRewmYEmnsb90fmgUF3XjBBaB7lybI=; b=Ax5MVkgiPG131T2ibsUS87DCzSzegYG0AcwuYfwzFq83nsm3GP+uBQRQZKn0s/BFBC 8FCaEt5vkK9z6EQVIl/AogmL2ERF4RYG5QhVaEQrpvBB3FcymXS9UiqquWIb6Kf5iBBE sW+2JG2myTKmIn2hRCOwB4BMjemKlMLeaxEOgyMUyKl9rB3J0/EClmqo+Y4fQPl8Leu9 uI287wuc4mDw+r385yZjmH9aXRUWsjYjToN564yMTx93Q2mQxenRDgNTzbYYitDQ9RMi ul857J89GhJ1+mTj7HbG3BQmZ+SjW1jVAd4Wp+/g3jnKXK9aL61Ut4QMJdyFQTGg9Azz 6Wzw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=ZLwSkHl7; 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 e17-20020a17090301d100b001a24efe1f14si12053562plh.78.2023.04.04.23.09.03; Tue, 04 Apr 2023 23:09:15 -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=ZLwSkHl7; 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 S236940AbjDEFtD (ORCPT + 99 others); Wed, 5 Apr 2023 01:49:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41744 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236913AbjDEFsp (ORCPT ); Wed, 5 Apr 2023 01:48:45 -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 6E5E1273F for ; Tue, 4 Apr 2023 22:48:42 -0700 (PDT) Received: by mta-65-227.siemens.flowmailer.net with ESMTPSA id 20230405054840887ac844a56bd988a8 for ; Wed, 05 Apr 2023 07:48:40 +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=Zt+CBmSJELOiEDRewmYEmnsb90fmgUF3XjBBaB7lybI=; b=ZLwSkHl7t6441wzo0AjhjdUIRi7ulepI+nyh8xze81f3d75+5vGxkGjmyK13z8/pFqDDqk nw1PzS6U3fOJzY9nKMt8MUeELtOIbXFWv7/CfzAglp4ijzSmJcbCFGDEmrFMuiudeexOxxxx 1ztS4+2ixXR+dR0il1FOln+hDKpJw=; From: "D. Starke" To: linux-serial@vger.kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com Cc: linux-kernel@vger.kernel.org, Daniel Starke Subject: [PATCH 5/9] tty: n_gsm: add open_error counter to gsm_mux Date: Wed, 5 Apr 2023 07:47:26 +0200 Message-Id: <20230405054730.3850-5-daniel.starke@siemens.com> In-Reply-To: <20230405054730.3850-1-daniel.starke@siemens.com> References: <20230405054730.3850-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=-0.2 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, SPF_PASS 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?1762315421866452486?= X-GMAIL-MSGID: =?utf-8?q?1762315421866452486?= 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. Signed-off-by: Daniel Starke --- drivers/tty/n_gsm.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index d42b92cbae88..9f6669686c59 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -338,6 +338,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; }; @@ -1729,25 +1730,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; } @@ -1767,6 +1775,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++; } } @@ -2220,6 +2229,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; @@ -2235,6 +2245,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 */ } @@ -2756,12 +2767,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 { @@ -3754,8 +3769,10 @@ static int gsmld_ioctl(struct tty_struct *tty, unsigned int cmd, dlci = gsm->dlci[dc.channel]; if (!dlci) { dlci = gsm_dlci_alloc(gsm, dc.channel); - if (!dlci) + if (!dlci) { + gsm->open_error++; return -ENOMEM; + } } gsm_dlci_copy_config_values(dlci, &dc); if (copy_to_user((void __user *)arg, &dc, sizeof(dc))) @@ -3769,8 +3786,10 @@ static int gsmld_ioctl(struct tty_struct *tty, unsigned int cmd, dlci = gsm->dlci[dc.channel]; if (!dlci) { dlci = gsm_dlci_alloc(gsm, dc.channel); - if (!dlci) + if (!dlci) { + gsm->open_error++; return -ENOMEM; + } } return gsm_dlci_config(dlci, &dc, 0); default: