* [PATCH net-next v3 0/2] Improve wwan qcdm compatibility with user-space tools
@ 2026-07-24 14:28 Daniele Palmas
2026-07-24 14:28 ` [PATCH net-next v3 1/2] net: wwan: add minimalistic IOCTls support also to QCDM port Daniele Palmas
2026-07-24 14:28 ` [PATCH net-next v3 2/2] net: wwan: add exclusive open mode capability to AT and QCDM ports Daniele Palmas
0 siblings, 2 replies; 4+ messages in thread
From: Daniele Palmas @ 2026-07-24 14:28 UTC (permalink / raw)
To: Loic Poulain, Sergey Ryazanov, Johannes Berg, Andrew Lunn,
David Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
Cc: netdev, Daniele Palmas
Historically, Qualcomm diagnostic port was a serial device, so user-space
tools were developed using tty specific features. One of the most common
tool is, for example, ModemManager libqcdm, available at
https://gitlab.freedesktop.org/mobile-broadband/ModemManager
which requires tcgetattr/tcsetattr and the possibility to get exclusive
device access to properly work.
The wwan qcdm is not really a tty device, but, besides the lack of tty
functions, it behaves as a standard serial Qualcomm diagnostic port, so,
as c230035c2f2f ("net: wwan: core: implement terminal ioctls for AT port"),
this series add support for terminal ioctls also for qcdm ports and
implement the exclusive open mode feature to improve compatibility with
user-space tools.
This is an incremental change which should not affect the existing tools
using wwan which do not rely on the implemented features.
V2: fixed race condition highlighted by Sashiko at
https://sashiko.dev/#/patchset/20260717081935.2071083-1-dnlplm%40gmail.com
V3: simplified patch 2 according to Loic's comment at
https://lore.kernel.org/netdev/CAFEp6-2UiSja11A6nLKqRX8A1eE=P4euEs+fbpKZxPE8fTX2QQ@mail.gmail.com/#t
Daniele Palmas (2):
net: wwan: add minimalistic IOCTls support also to QCDM port
net: wwan: add exclusive open mode capability to AT and QCDM ports
drivers/net/wwan/wwan_core.c | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
--
2.43.0
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH net-next v3 1/2] net: wwan: add minimalistic IOCTls support also to QCDM port
2026-07-24 14:28 [PATCH net-next v3 0/2] Improve wwan qcdm compatibility with user-space tools Daniele Palmas
@ 2026-07-24 14:28 ` Daniele Palmas
2026-07-24 14:28 ` [PATCH net-next v3 2/2] net: wwan: add exclusive open mode capability to AT and QCDM ports Daniele Palmas
1 sibling, 0 replies; 4+ messages in thread
From: Daniele Palmas @ 2026-07-24 14:28 UTC (permalink / raw)
To: Loic Poulain, Sergey Ryazanov, Johannes Berg, Andrew Lunn,
David Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
Cc: netdev, Daniele Palmas
Upstream libqcdm requires IOCTLs support to work, so add the current
AT minimalistic support also to the QCDM port.
Reviewed-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
---
drivers/net/wwan/wwan_core.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wwan/wwan_core.c b/drivers/net/wwan/wwan_core.c
index ccce2ad74128..8168239e52c3 100644
--- a/drivers/net/wwan/wwan_core.c
+++ b/drivers/net/wwan/wwan_core.c
@@ -1046,7 +1046,8 @@ static long wwan_port_fops_ioctl(struct file *filp, unsigned int cmd,
struct wwan_port *port = filp->private_data;
int res;
- if (port->type == WWAN_PORT_AT) { /* AT port specific IOCTLs */
+ if (port->type == WWAN_PORT_AT || port->type == WWAN_PORT_QCDM) {
+ /* AT and QCDM port specific IOCTLs */
res = wwan_port_fops_at_ioctl(port, cmd, arg);
if (res != -ENOIOCTLCMD)
return res;
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH net-next v3 2/2] net: wwan: add exclusive open mode capability to AT and QCDM ports
2026-07-24 14:28 [PATCH net-next v3 0/2] Improve wwan qcdm compatibility with user-space tools Daniele Palmas
2026-07-24 14:28 ` [PATCH net-next v3 1/2] net: wwan: add minimalistic IOCTls support also to QCDM port Daniele Palmas
@ 2026-07-24 14:28 ` Daniele Palmas
2026-07-24 18:22 ` Loic Poulain
1 sibling, 1 reply; 4+ messages in thread
From: Daniele Palmas @ 2026-07-24 14:28 UTC (permalink / raw)
To: Loic Poulain, Sergey Ryazanov, Johannes Berg, Andrew Lunn,
David Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
Cc: netdev, Daniele Palmas
Add exclusive open mode capability to AT and QCDM ports to improve
compatibility with user-space tools using the Qualcomm diagnostic
device (e.g. libqcdm).
Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
---
drivers/net/wwan/wwan_core.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/drivers/net/wwan/wwan_core.c b/drivers/net/wwan/wwan_core.c
index 8168239e52c3..ffbcf11e4e68 100644
--- a/drivers/net/wwan/wwan_core.c
+++ b/drivers/net/wwan/wwan_core.c
@@ -42,6 +42,7 @@ static struct dentry *wwan_debugfs_dir;
/* WWAN port flags */
#define WWAN_PORT_TX_OFF 0
+#define WWAN_PORT_EXCLUSIVE 1
/**
* struct wwan_device - The structure that defines a WWAN device
@@ -748,6 +749,12 @@ static int wwan_port_op_start(struct wwan_port *port)
goto out_unlock;
}
+ if (test_bit(WWAN_PORT_EXCLUSIVE, &port->flags) &&
+ !capable(CAP_SYS_ADMIN)) {
+ ret = -EBUSY;
+ goto out_unlock;
+ }
+
/* If port is already started, don't start again */
if (!port->start_count)
ret = port->ops->start(port);
@@ -769,6 +776,7 @@ static void wwan_port_op_stop(struct wwan_port *port)
if (port->ops)
port->ops->stop(port);
skb_queue_purge(&port->rxq);
+ clear_bit(WWAN_PORT_EXCLUSIVE, &port->flags);
}
mutex_unlock(&port->ops_lock);
}
@@ -1031,6 +1039,22 @@ static long wwan_port_fops_at_ioctl(struct wwan_port *port, unsigned int cmd,
break;
}
+ case TIOCEXCL:
+ set_bit(WWAN_PORT_EXCLUSIVE, &port->flags);
+ break;
+
+ case TIOCNXCL:
+ clear_bit(WWAN_PORT_EXCLUSIVE, &port->flags);
+ break;
+
+ case TIOCGEXCL:
+ {
+ int excl = test_bit(WWAN_PORT_EXCLUSIVE, &port->flags);
+
+ ret = put_user(excl, (int __user *)arg);
+ break;
+ }
+
default:
ret = -ENOIOCTLCMD;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH net-next v3 2/2] net: wwan: add exclusive open mode capability to AT and QCDM ports
2026-07-24 14:28 ` [PATCH net-next v3 2/2] net: wwan: add exclusive open mode capability to AT and QCDM ports Daniele Palmas
@ 2026-07-24 18:22 ` Loic Poulain
0 siblings, 0 replies; 4+ messages in thread
From: Loic Poulain @ 2026-07-24 18:22 UTC (permalink / raw)
To: Daniele Palmas
Cc: Sergey Ryazanov, Johannes Berg, Andrew Lunn, David Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, netdev
On Fri, Jul 24, 2026 at 4:32 PM Daniele Palmas <dnlplm@gmail.com> wrote:
>
> Add exclusive open mode capability to AT and QCDM ports to improve
> compatibility with user-space tools using the Qualcomm diagnostic
> device (e.g. libqcdm).
>
> Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
This looks somewhat fragile in scenarios where a process does not
properly release the bit, such as on a crash. That said, it appears to
be consistent with the mechanism used by tty, so:
Reviewed-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
> ---
> drivers/net/wwan/wwan_core.c | 24 ++++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
>
> diff --git a/drivers/net/wwan/wwan_core.c b/drivers/net/wwan/wwan_core.c
> index 8168239e52c3..ffbcf11e4e68 100644
> --- a/drivers/net/wwan/wwan_core.c
> +++ b/drivers/net/wwan/wwan_core.c
> @@ -42,6 +42,7 @@ static struct dentry *wwan_debugfs_dir;
>
> /* WWAN port flags */
> #define WWAN_PORT_TX_OFF 0
> +#define WWAN_PORT_EXCLUSIVE 1
>
> /**
> * struct wwan_device - The structure that defines a WWAN device
> @@ -748,6 +749,12 @@ static int wwan_port_op_start(struct wwan_port *port)
> goto out_unlock;
> }
>
> + if (test_bit(WWAN_PORT_EXCLUSIVE, &port->flags) &&
> + !capable(CAP_SYS_ADMIN)) {
> + ret = -EBUSY;
> + goto out_unlock;
> + }
> +
> /* If port is already started, don't start again */
> if (!port->start_count)
> ret = port->ops->start(port);
> @@ -769,6 +776,7 @@ static void wwan_port_op_stop(struct wwan_port *port)
> if (port->ops)
> port->ops->stop(port);
> skb_queue_purge(&port->rxq);
> + clear_bit(WWAN_PORT_EXCLUSIVE, &port->flags);
> }
> mutex_unlock(&port->ops_lock);
> }
> @@ -1031,6 +1039,22 @@ static long wwan_port_fops_at_ioctl(struct wwan_port *port, unsigned int cmd,
> break;
> }
>
> + case TIOCEXCL:
> + set_bit(WWAN_PORT_EXCLUSIVE, &port->flags);
> + break;
> +
> + case TIOCNXCL:
> + clear_bit(WWAN_PORT_EXCLUSIVE, &port->flags);
> + break;
> +
> + case TIOCGEXCL:
> + {
> + int excl = test_bit(WWAN_PORT_EXCLUSIVE, &port->flags);
> +
> + ret = put_user(excl, (int __user *)arg);
> + break;
> + }
> +
> default:
> ret = -ENOIOCTLCMD;
> }
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-07-24 18:22 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-24 14:28 [PATCH net-next v3 0/2] Improve wwan qcdm compatibility with user-space tools Daniele Palmas
2026-07-24 14:28 ` [PATCH net-next v3 1/2] net: wwan: add minimalistic IOCTls support also to QCDM port Daniele Palmas
2026-07-24 14:28 ` [PATCH net-next v3 2/2] net: wwan: add exclusive open mode capability to AT and QCDM ports Daniele Palmas
2026-07-24 18:22 ` Loic Poulain
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox