mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "D. Starke" <daniel.starke@siemens.com>
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 <daniel.starke@siemens.com>
Subject: [PATCH v6 9/9] tty: n_gsm: add restart flag to extended ioctl config
Date: Thu, 17 Aug 2023 11:32:31 +0200	[thread overview]
Message-ID: <20230817093231.2317-9-daniel.starke@siemens.com> (raw)
In-Reply-To: <20230817093231.2317-1-daniel.starke@siemens.com>

From: Daniel Starke <daniel.starke@siemens.com>

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 <daniel.starke@siemens.com>
---
 drivers/tty/n_gsm.c         | 23 +++++++++++++++++++++++
 include/uapi/linux/gsmmux.h |  5 ++++-
 2 files changed, 27 insertions(+), 1 deletion(-)

v5 -> v6:
No changes. This was previously patch 10/10. Patch 9/10 has been removed.

Link: https://lore.kernel.org/all/2023081644-stiffness-division-215b@gregkh/
Link: https://lore.kernel.org/all/20230517155704.5701-10-daniel.starke@siemens.com/

diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
index 47905803f8f9..8ecc7b138c05 100644
--- a/drivers/tty/n_gsm.c
+++ b/drivers/tty/n_gsm.c
@@ -3422,6 +3422,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;
 
 	/*
@@ -3431,6 +3432,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
@@ -3438,6 +3453,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)
-- 
2.34.1


  parent reply	other threads:[~2023-08-17  9:33 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-17  9:32 [PATCH v6 1/9] tty: n_gsm: add restart flag to DLC specific " D. Starke
2023-08-17  9:32 ` [PATCH v6 2/9] tty: n_gsm: add missing description to structs in gsmmux.h D. Starke
2023-08-17  9:32 ` [PATCH v6 3/9] tty: n_gsm: remove unneeded initialization of ret in gsm_dlci_config D. Starke
2023-08-17  9:32 ` [PATCH v6 4/9] tty: n_gsm: add open_error counter to gsm_mux D. Starke
2023-08-17  9:32 ` [PATCH v6 5/9] tty: n_gsm: increase malformed counter for malformed control frames D. Starke
2023-08-17  9:32 ` [PATCH v6 6/9] tty: n_gsm: increase gsm_mux unsupported counted where appropriate D. Starke
2023-08-17  9:32 ` [PATCH v6 7/9] tty: n_gsm: cleanup gsm_control_command and gsm_control_reply D. Starke
2023-08-17  9:32 ` [PATCH v6 8/9] tty: n_gsm: add DLCI specific rx/tx statistics D. Starke
2023-08-22 13:04   ` Greg KH
2023-08-17  9:32 ` D. Starke [this message]
2023-08-22 13:05 ` [PATCH v6 1/9] tty: n_gsm: add restart flag to DLC specific ioctl config Greg KH
2023-08-22 13:05   ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230817093231.2317-9-daniel.starke@siemens.com \
    --to=daniel.starke@siemens.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=ilpo.jarvinen@linux.intel.com \
    --cc=jirislaby@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®