From nobody Tue Feb 10 10:58:57 2026 Received: from m16.mail.163.com (m16.mail.163.com [117.135.210.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC67A314B6B; Mon, 5 Jan 2026 10:21:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=117.135.210.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767608493; cv=none; b=kYXId2JC4tNvW/Ew+oJmuPLv46BT4gMDofQy9oJutBkHjkCQg/QqE3Qrpz5MaVoU7ko9vLnWA0q9dJiShKUnIEyBaRVGlj/EBCUAVwSDz9DiCZjcyU/xjGOQ+cER9MY934l0rw6BGqoHXgduQnmIaH5JBkIue+hBfR6OYWZyELE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767608493; c=relaxed/simple; bh=YY3Vx9PIFhrCTpocaI1ZwHiT4Zc4qeWkF9q4sJfNauM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=sWVun8lLcjQY8c5erdZaKY4QP9iLwxZpdbyv+O4vCJrhLTfS4VVYkAYCY9kqhAPtRBm4o9GRuG08fpFU7C6gCKa/+NJ+qB4wKtaW6JWVtZMR/Zf0lQfOUTL6azpw/UiWPcRn19qj10/jDQwxS9PlOdu5zM3/YpYt838NIkBwXfU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=C7ziEwEj; arc=none smtp.client-ip=117.135.210.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="C7ziEwEj" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=oO dtIcMYsSD0TmAAE42OsXPNuxSQgAJE5aR5WCRdbik=; b=C7ziEwEj/Eo4gJbQ/W +X05f9f2moYbz7d4J1HRhM5ZAFj2NNmA7l9Q/dwXRB/kwdcjw+sFm/5oQrwglHjB Ka284jQH271XK1RK+VzTYcQTl/TC0CfodVteWKQIhIyAxAl8ipnuGyhT+uIPUnQL 4UryX3uBxqmyWgDIaQVFmHU24= Received: from localhost.localdomain (unknown []) by gzsmtp3 (Coremail) with SMTP id PigvCgDnrxNrkFtpVWA8KQ--.198S5; Mon, 05 Jan 2026 18:20:46 +0800 (CST) From: Slark Xiao To: loic.poulain@oss.qualcomm.com, ryazanov.s.a@gmail.com, johannes@sipsolutions.net, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, mani@kernel.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [net-next v4 3/8] net: wwan: core: split port unregister and stop Date: Mon, 5 Jan 2026 18:20:13 +0800 Message-Id: <20260105102018.62731-4-slark_xiao@163.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260105102018.62731-1-slark_xiao@163.com> References: <20260105102018.62731-1-slark_xiao@163.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: PigvCgDnrxNrkFtpVWA8KQ--.198S5 X-Coremail-Antispam: 1Uf129KBjvJXoW7Ww48CFy3Cr1kJr15WFWxZwb_yoW8KF1Dpa 1qqF9xKFW8Jr43Ww43XF4xXFWruF4xGw1Sy34xW34Skrn5tryFv3ykuF1qyrWrJF97WFyY vrW5tFWUCa45Cr7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jkXo7UUUUU= X-CM-SenderInfo: xvod2y5b0lt0i6rwjhhfrp/xtbC6B502GlbkH4OZwAA3v Content-Type: text/plain; charset="utf-8" From: Sergey Ryazanov Upcoming GNSS (NMEA) port type support requires exporting it via the GNSS subsystem. On another hand, we still need to do basic WWAN core work: call the port stop operation, purge queues, release the parent WWAN device, etc. To reuse as much code as possible, split the port unregistering function into the deregistration of a regular WWAN port device, and the common port tearing down code. In order to keep more code generic, break the device_unregister() call into device_del() and put_device(), which release the port memory uniformly. Signed-off-by: Sergey Ryazanov Reviewed-by: Loic Poulain --- drivers/net/wwan/wwan_core.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/net/wwan/wwan_core.c b/drivers/net/wwan/wwan_core.c index edee5ff48f28..c735b9830e6e 100644 --- a/drivers/net/wwan/wwan_core.c +++ b/drivers/net/wwan/wwan_core.c @@ -476,6 +476,18 @@ static int wwan_port_register_wwan(struct wwan_port *p= ort) return 0; } =20 +/* Unregister a regular WWAN port (e.g. AT, MBIM, etc) */ +static void wwan_port_unregister_wwan(struct wwan_port *port) +{ + struct wwan_device *wwandev =3D to_wwan_dev(port->dev.parent); + + dev_set_drvdata(&port->dev, NULL); + + dev_info(&wwandev->dev, "port %s disconnected\n", dev_name(&port->dev)); + + device_del(&port->dev); +} + struct wwan_port *wwan_create_port(struct device *parent, enum wwan_port_type type, const struct wwan_port_ops *ops, @@ -536,18 +548,19 @@ void wwan_remove_port(struct wwan_port *port) struct wwan_device *wwandev =3D to_wwan_dev(port->dev.parent); =20 mutex_lock(&port->ops_lock); - if (port->start_count) + if (port->start_count) { port->ops->stop(port); + port->start_count =3D 0; + } port->ops =3D NULL; /* Prevent any new port operations (e.g. from fops) */ mutex_unlock(&port->ops_lock); =20 wake_up_interruptible(&port->waitqueue); - skb_queue_purge(&port->rxq); - dev_set_drvdata(&port->dev, NULL); =20 - dev_info(&wwandev->dev, "port %s disconnected\n", dev_name(&port->dev)); - device_unregister(&port->dev); + wwan_port_unregister_wwan(port); + + put_device(&port->dev); =20 /* Release related wwan device */ wwan_remove_dev(wwandev); --=20 2.25.1