From nobody Tue Feb 10 11:56:16 2026 Received: from m16.mail.163.com (m16.mail.163.com [220.197.31.4]) (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 6FEE938734A; Thu, 15 Jan 2026 11:47:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768477657; cv=none; b=vBw64TiXKyTUB5iumx1Ndpm4sINfeRcnxNioOZrwLtS4EZShOXtd/CdHVfETitJTUCQbwFHRjwRlhu1DHHOQDbJBhXjHCCea8Z8l87BHpXmIQ8bosnnNzrKzdcZXJWEIOv0WDsWtR7F6GBK1YAcc80tAigYb/nnyqyUqUO/EwUs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768477657; c=relaxed/simple; bh=6aLsYlkk3jIQO8gt6D9AaFgb7AsBDAjEB/hEJZbfP/k=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=PN6Rqzje9e/PJr73WNaNwrXZpadKz3BQcM9x1VBhuNOY20CBn3DVTgSRy043bE/+WFBTP2DYyE1b2YDWvSCcEOEr8ysCJfOgGGGSP07S4x9JFBHzfI1t1gMMzWbA0PYnqSqUOX59O78HmgdP6HD+OJH+XDP5JDKbVQNJJ2m8N6Q= 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=F26NJ0mU; arc=none smtp.client-ip=220.197.31.4 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="F26NJ0mU" 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=8O CMe3qyAgtsYnHFNUeAUlbwQX+dOXErx0oh72oVj0g=; b=F26NJ0mUabTcRspvbf XaZJPqS1BWrt6hla/hGo/BqjyNRMUft1oamlcAtc3HrVsychjNS8Mx0GPwCFWzTI YTJPxPzxOOJKdr9JKEo8XoHVUcgNQd2sF9Aw9eAlVm5e4ctn+6lWRemIajHNICln 0Y5lRLdPQoqKrwcPTcc2ywouk= Received: from localhost.localdomain (unknown []) by gzga-smtp-mtada-g1-3 (Coremail) with SMTP id _____wBHLGiX02hpr2PzGQ--.4331S6; Thu, 15 Jan 2026 19:46:45 +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, slark_xiao@163.com Subject: [net-next v7 4/8] net: wwan: core: split port unregister and stop Date: Thu, 15 Jan 2026 19:46:21 +0800 Message-Id: <20260115114625.46991-5-slark_xiao@163.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260115114625.46991-1-slark_xiao@163.com> References: <20260115114625.46991-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: _____wBHLGiX02hpr2PzGQ--.4331S6 X-Coremail-Antispam: 1Uf129KBjvJXoW7Ww48CFy3Cr1kJr15WFWxZwb_yoW5Jr15pa 1jgF9xKFW8Jr43Ww43XF4xXFWruF4xG34Sy34xW34Skrn5tryFvrWkuF1qyrWrJFyxWFy5 ZrW5tFWUCa4UCr7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0pEfMarUUUUU= X-CM-SenderInfo: xvod2y5b0lt0i6rwjhhfrp/xtbCwAWS9mlo06XnFQAA3k 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 1a9a77d597e6..ae91b1cd7142 100644 --- a/drivers/net/wwan/wwan_core.c +++ b/drivers/net/wwan/wwan_core.c @@ -474,6 +474,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, @@ -534,18 +546,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