From mboxrd@z Thu Jan 1 00:00:00 1970 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 0047C35FF51; Thu, 15 Jan 2026 09:55:31 +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=1768470936; cv=none; b=oIIsZs7zB1VjdvL+27iihaORwGK2Yax1+PCa3OvUmw9gLXYFc6+EFcRsofwzwzmIeK21s3Up7iDAcffHT8UmwxO6L7fo4+4fU8taxqAV+h2qyaJ+pd0uvgAXhpByQ9yjWZ1fPKjiDvUxORP95gcikrVTN4gC/4nZi6LCoUx2nf0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768470936; c=relaxed/simple; bh=oAMs2NSqOllFJJV6ioWKQ33aLM7PlREjc3QoSRYM13U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ZYsdVjYpXuPydUO0tpClBMYwMZ4uZMYnn2+LLpN5SzGrgcRAsxqSbrKWEHYOfhlGuc4LIlgG/57wmIjUZWnCIj/9pZCxu/zLdAkH9rllLqYeIKviQIh+mkadvXcGeQ9uIRoKLJK3faLiKxA0ZfypfFJOIQxcVm4Nc/0wftT2JS4= 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=oM1QH39t; 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="oM1QH39t" 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=y2 6c9Ul7xtvzQmlIpcEdE+5G3aZFcgLB2fDIOU5iC9c=; b=oM1QH39tw+aNZ/WVqP k3b/myieyfhIFcvpgA3StO8xtlqAFA+S0lyrY1xaj+KKtAopDANf8QITatDIzUWM XovE89X1rUbdzOo1+hsxzztusRaM65qZioGh98QygJeQkMzTOoSE+LhUSRQ/DOVt aYOrxgzLYppScImZb6MRhhJ7I= Received: from localhost.localdomain (unknown []) by gzsmtp3 (Coremail) with SMTP id PigvCgAH3axTuWhpe3IgLg--.97S6; Thu, 15 Jan 2026 17:54:44 +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 v6 4/8] net: wwan: core: split port unregister and stop Date: Thu, 15 Jan 2026 17:54:13 +0800 Message-Id: <20260115095417.36975-5-slark_xiao@163.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260115095417.36975-1-slark_xiao@163.com> References: <20260115095417.36975-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: 8bit X-CM-TRANSID:PigvCgAH3axTuWhpe3IgLg--.97S6 X-Coremail-Antispam: 1Uf129KBjvJXoW7Ww48CFy3Cr1kJr15WFWxZwb_yoW5Jr15pa 1qqF9xKFW8JF43Ww43XF4xXFWruF4xGw1Sy34xW34Skrn5tryFvrWkuF1qyrWrJF97WFy5 ZrW5tFWUCa4UCr7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0piU3k_UUUUU= X-CM-SenderInfo: xvod2y5b0lt0i6rwjhhfrp/xtbC5wX7YGlouWWwNAAA3g 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 ef8f4cb9279c..7de9b69422e9 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 *port) return 0; } +/* Unregister a regular WWAN port (e.g. AT, MBIM, etc) */ +static void wwan_port_unregister_wwan(struct wwan_port *port) +{ + struct wwan_device *wwandev = 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 = to_wwan_dev(port->dev.parent); mutex_lock(&port->ops_lock); - if (port->start_count) + if (port->start_count) { port->ops->stop(port); + port->start_count = 0; + } port->ops = NULL; /* Prevent any new port operations (e.g. from fops) */ mutex_unlock(&port->ops_lock); wake_up_interruptible(&port->waitqueue); - skb_queue_purge(&port->rxq); - dev_set_drvdata(&port->dev, NULL); - 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); /* Release related wwan device */ wwan_remove_dev(wwandev); -- 2.25.1