From nobody Mon Dec 1 22:41:03 2025 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CDF0A34252F for ; Wed, 26 Nov 2025 20:23:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764188592; cv=none; b=NWw1FMzrIO3jeeJPddzvXtJnMG8dDo8TKdVRCem36XuI7L7xNNgREUR4N4UA77xnC8lQSATMsSXVIzIjwqdZSOXTxkgN1WeGKZWqHsm0KnpqhrRzXwBWtfpvygkn6mUVPutZ4nVLQy+DfOqdtax8bwrX6Cmi5dg6ezx0unt1F+c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764188592; c=relaxed/simple; bh=xTW7lVbfJsgnlziO9m7HRTBaTgvYhjTEK5XGbQnoB3Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XkgpUooEETr3hRYtiexl6dq5M9Dr+4vHHTu4vjL/UbRlxCgV2f0o1mFI2D8FHFi72f/dgWcDHxNKxJzTKbaz7RWWcRW2NTQ3KAnr3NptB+fUyKH9D/C3AGoLO3vbiWn5/3BTC2UFajH8SdMaltNiV2qxr3KI7UavIy1fFRMlYHQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=crwV1k8C; arc=none smtp.client-ip=209.85.214.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="crwV1k8C" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-297f35be2ffso2360315ad.2 for ; Wed, 26 Nov 2025 12:23:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764188590; x=1764793390; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=uKBmUb8EWfQ3VixqXwZwtOjhnNqHJe7y4QanLPyxD5w=; b=crwV1k8CqAp6gsxDKUZASEZmUJv/e0e4Bqo8tTx2WisiU0a26ZpQ+Jv2jl4CIf2LVs 2vjfNzp8WOB7240fiLAixlW+AlmCOGkk2EkFLy/uETp6jIUP/C76bj39u4WTgMXTq4fM u0AA+EiOqSs07QApsw1EJaO8cY5bT0+H7xzMfdvSWWh67QQQ5DApQz5DBuaipWCS7xY3 LB4/CaiKrWD0NSjGQsPX2lY64WS2/LIN79U9NHhl6+JDZep3vq5P+7NCzCm2VZVvYa0v WrbUNHJuoN0LJvaUZua1ok+B6/ehsR1LHS35UIzw9RbzcTbvf9qmmYRVd2m5xI5vuXHk sA5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764188590; x=1764793390; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=uKBmUb8EWfQ3VixqXwZwtOjhnNqHJe7y4QanLPyxD5w=; b=IqGBUCmFt51dntCTRoBFWi/iGw2PQHcGlbMXdU253tU/aqrGKRzrr4flfJDIUL6pxp yBElb2YjV/DZo+cUgef3ohNiCFSNIgqPDXzKk/LR1RxcIaVqNpsODTk103q9xGnoy/Op tpJZxl0Qb/YvcfnLbacOlYie0V7l3lSXqopvlQ0Nssh3KGJjWKxjRMxskCZrmnRM1Wtu 6oOiZhBPZNlAJVqVmyBjQUnHcoHXCMNXiozUqkuijzZPaOIymFZwxZpwEvLexWmzO52G KVUO68Fg+2hHyYpg14cy7lUKSPWTd//AajQGibyX3m2Bg8dyNQ2FnMjw7AR48poCBfKE cwgQ== X-Forwarded-Encrypted: i=1; AJvYcCXuRRlNB/WgZs6HPvIXJ/VRsUzr/bs0D45g28x4leRMgp0OEblJUuutcdgPzwkl2qX6mVY8xj9pNd1ORhQ=@vger.kernel.org X-Gm-Message-State: AOJu0YyagW8kUCESZoCBAxijVhEcouOEB7G0ML1YcB32P1niJzoKbAZk K4dlh9f3kbtB+iQJp//yWKOXU83vv9GqlT6mpQ+24WxPBAO/VyIXMLtT X-Gm-Gg: ASbGncu459SiJq/sQtk/Ma1zRVkAfzjG1SHCOoVi+bxbxZLz+MwPw1Lr+E4Om4DL/Qs CCcSWeaTCMXuW6bVN3Qq901gzgvSn/rt7COOkk/N1755/mwlZ2wpYvFias7d9gQh5fX6RXmLUwk HU/otcGEBEFt647vIvVFwoWa1ULBzBZ+Kb0vZLaYGKWxOK5utAbOo7UFCzQmoo/qHEq6xuTMp6D ipWnbSq+NG/zLPlzsKQa6GSpzGVJeahIm+jlZHu1MpWcqj9GYkNWhle6QHr74u/8LlZoCJJeglI 7VTqhDTudd71yCUBJs+NzgrFY0ZwqCHnAwbv4mc8lx+JDPFYqHH/hziEkpOgMxk7r3ZHOwmfq7w BSeKrvfAZA1vQEzngbFHm+kDkJ97YnD5LfwCnBmAzeVGHC2uclNLvN2rLa4Th+5fjFPQeZ49Fqd +2QRwRfZnYgXBxTULYkA== X-Google-Smtp-Source: AGHT+IGyvkmPXc4dmQLZ9+AKbI5kISLDRdVPiQNUOyHu8BG6Wb6Rsz1S8AiwQtQYbSVom1NHh9Ecag== X-Received: by 2002:a17:902:cf4b:b0:295:7b8c:6611 with SMTP id d9443c01a7336-29b6c404112mr221821495ad.15.1764188589903; Wed, 26 Nov 2025 12:23:09 -0800 (PST) Received: from [192.168.15.94] ([2804:7f1:ebc3:752f:12e1:8eff:fe46:88b8]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29b5b13a80csm207100475ad.35.2025.11.26.12.23.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Nov 2025 12:23:09 -0800 (PST) From: Andre Carvalho Date: Wed, 26 Nov 2025 20:22:53 +0000 Subject: [PATCH net-next v7 1/5] netconsole: add target_state enum Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251126-netcons-retrigger-v7-1-1d86dba83b1c@gmail.com> References: <20251126-netcons-retrigger-v7-0-1d86dba83b1c@gmail.com> In-Reply-To: <20251126-netcons-retrigger-v7-0-1d86dba83b1c@gmail.com> To: Breno Leitao , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Andre Carvalho X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1764188576; l=747; i=asantostc@gmail.com; s=20250807; h=from:subject:message-id; bh=BLduFEel2At1ZpRoHzUB/43M6t0wpDLHJLh+eokOBeA=; b=N/tl4cJC3zNG2CcT6bNGU7DO0K7bXp3dQ9rmLvLGL+8EHWN+ZXe3VMhsqbqkBEvwrVHyX2X9S Mf2b6DrobN9CNil0c8d0pMT2wdWsaYn/k2umZ5vHEfUxsZf+6/qc62z X-Developer-Key: i=asantostc@gmail.com; a=ed25519; pk=eWre+RwFHCxkiaQrZLsjC67mZ/pZnzSM/f7/+yFXY4Q= From: Breno Leitao Introduces a enum to track netconsole target state which is going to replace the enabled boolean. Signed-off-by: Breno Leitao Signed-off-by: Andre Carvalho --- drivers/net/netconsole.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 9cb4dfc242f5..e2ec09f238a0 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -119,6 +119,11 @@ enum sysdata_feature { MAX_SYSDATA_ITEMS =3D 4, }; =20 +enum target_state { + STATE_DISABLED, + STATE_ENABLED, +}; + /** * struct netconsole_target - Represents a configured netconsole target. * @list: Links this target into the target_list. --=20 2.52.0 From nobody Mon Dec 1 22:41:03 2025 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6824134250F for ; Wed, 26 Nov 2025 20:23:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764188600; cv=none; b=jfYyKoLJGD2uSvN+zF6DJ2HyBU4G4eOZBoW9G0cUnnYc5v3un7idiCbh9Cf/qAFfJsss12hZMQJ7AQUpeuvrj4I0HQLPkA1n16CLj1QajBIQTHMfUTviF61DWEROEBcmrWsdX5EvcuqnxPE4/OlO7cuSl7t0kBdU3fIV7h5aKWo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764188600; c=relaxed/simple; bh=ptkTe+cYKKYMyCNyu+hE6VVzhConXnPLG7fL2BaD9jQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CQ5VLxkjS4INmY55QF+/oD/1i+yGNrnNZLz7DxDP/F2Zwl8EekdBjDOH4PFvC9cZ5oggfAr097HhnUjcaly8SaTzeY0BQh8JNAU6SDiwxGgn0hLyaBLXC93tcfHKBMJFQjYpuffhqox0r8L62b+Q6Whh4M3E4qcXbltF2yCd0TU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=b6KX1/1H; arc=none smtp.client-ip=209.85.214.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="b6KX1/1H" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-297e239baecso9726575ad.1 for ; Wed, 26 Nov 2025 12:23:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764188598; x=1764793398; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=t+RTp3NdTDs9G43jfmTa4TiJRQPqbtzKxkq+h8ATOJA=; b=b6KX1/1HG1OvL8WyPq9VoPXcVTG+CMXhjWdRm+t2e9gP/6N3TYfv+pTsDutOXR9xtU lVogKU+ucB4r3vWsjlz4kCU1gAG6IK4Jt6ulefTJWoUPh4har7GcTIwEULK/b0xCPG7m yAQZ9fKHbK9l8EL9yEzWefYpIEuaEBUTqWKnTN5H/e4TBlPz970wexSPkJIluGmTy9Zo VfgUQOYdG3KPWexCOJUS9HkdXc7ByODxaXu5habcMin5YXMCvqc81OiunQBady1LvrdL L2PlFni5VZwMy/XRrhxGojDxS+AHhhokbkNQ3ijNpkpy4Dd/mAUh7GG/O6mffFOaUfVD j4BQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764188598; x=1764793398; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=t+RTp3NdTDs9G43jfmTa4TiJRQPqbtzKxkq+h8ATOJA=; b=iLQMTXQzrL0c6k59pAGh0dRqugpBt/GjvHLVcNESxq8vKTMdr7IVsRdrbyDDwJXJ31 iSFFXmuW6JkKJAVbYJTBctmGixnAqpkSle3cTWPh7hH+SgykHbW8RHWkS9owAOcxX2Yz BRCc2mNXGCJv0qVzIUR5yV2ricDV1Kd14p1dN0bjnHcldb8zvCaBee19AGgg+gt8n1j8 ZFjNG667uhaPEIxtyH7Ov6KH7ApY5Rh3f6YkNBfup2KzNGoDYp7XmLVkNeYT8+D/WauB WweJbwx/YFJIgK9R4GeD5OHNqwjc0D+UYipwT5I3oXm27V12mvXGndODahExg6kS9l4i caNQ== X-Forwarded-Encrypted: i=1; AJvYcCVMit9Z36yk8dMqUrHXXuOle2CmbJJHx0P9gGXFl3VCGJc33q7DEQBTvjwINMBa1+YP/Bma8yeDyVnLRgM=@vger.kernel.org X-Gm-Message-State: AOJu0YxNNRSSYkgXYV16IuXqtT0PN1mIJV28XOcwuZTfeuO63rD76gQu 1j2NNNt8vSnuEmhfGOYI37/of/uFHBO9qvXU1u/rPY9BSAs8FTrKrSnc X-Gm-Gg: ASbGncuYaacwl8shvRt5d3CutukBEfDO0rEvrdNF1XUlJVawvff7MiMMf+K+a+/cKyE mUxXtSe1SCWyLhXTLPblRWzEjXZc+rURHYvVN5sCpKTnRtiqpDc0HX+2P8p/jVeQHO5TaRH0NLh zmj5Dj1ADxeTeJyHnfvtvZ7tot4lohKlSQBUNhfYY86A3K8a0ngWKPobK87GfMfBX4iFZoBn4go Fg2Dd28vJflWkNmhcw4iSaR2aSKLHVwlbHvC+ARzJzpqRtljDH64DC5i6y6nsSy1uGMpUZ6lvRP mzns1juYNDV8OBSOK7hQAxZo7IJ8Ze0by2PlGH4d0Qf2rpCDLmz0fU53T/W87FjjIfdjm5GqQzP sCOoosXCeypOFHi+cpdySJOfs/KskBxMw+mir/vAjQp0rMSTKuQS9bVM/mR70l8jL8bYyoXIo1a Hbys4swo1qhZEAyOFvtQ== X-Google-Smtp-Source: AGHT+IHnq+hcKWMIhGOzkRicd2oIQQubAwrZjs+4Bn9HxO+O8u8npbybdXR5esWC04tApBHnxYIMqg== X-Received: by 2002:a17:902:d485:b0:24b:1585:6350 with SMTP id d9443c01a7336-29b6bf1ae09mr238515535ad.11.1764188597316; Wed, 26 Nov 2025 12:23:17 -0800 (PST) Received: from [192.168.15.94] ([2804:7f1:ebc3:752f:12e1:8eff:fe46:88b8]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29b5b13a80csm207100475ad.35.2025.11.26.12.23.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Nov 2025 12:23:16 -0800 (PST) From: Andre Carvalho Date: Wed, 26 Nov 2025 20:22:54 +0000 Subject: [PATCH net-next v7 2/5] netconsole: convert 'enabled' flag to enum for clearer state management Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251126-netcons-retrigger-v7-2-1d86dba83b1c@gmail.com> References: <20251126-netcons-retrigger-v7-0-1d86dba83b1c@gmail.com> In-Reply-To: <20251126-netcons-retrigger-v7-0-1d86dba83b1c@gmail.com> To: Breno Leitao , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Andre Carvalho X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1764188576; l=8948; i=asantostc@gmail.com; s=20250807; h=from:subject:message-id; bh=ptkTe+cYKKYMyCNyu+hE6VVzhConXnPLG7fL2BaD9jQ=; b=8RKlyRX/F54xIbVDSwkgACII+YR/FaHtjwEtK/4nTg6WIJSOw8mu+/nnUYLXKJ8GfE1jkbt7m fZU3pC6qrUsBnDok3OBnJY5PQH4lY8mPNld7xW6rdDDzHSexb9bfen/ X-Developer-Key: i=asantostc@gmail.com; a=ed25519; pk=eWre+RwFHCxkiaQrZLsjC67mZ/pZnzSM/f7/+yFXY4Q= This patch refactors the netconsole driver's target enabled state from a simple boolean to an explicit enum (`target_state`). This allow the states to be expanded to a new state in the upcoming change. Co-developed-by: Breno Leitao Signed-off-by: Breno Leitao Reviewed-by: Breno Leitao Signed-off-by: Andre Carvalho --- drivers/net/netconsole.c | 52 ++++++++++++++++++++++++++------------------= ---- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index e2ec09f238a0..b21ecea60d52 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -135,12 +135,12 @@ enum target_state { * @sysdata_fields: Sysdata features enabled. * @msgcounter: Message sent counter. * @stats: Packet send stats for the target. Used for debugging. - * @enabled: On / off knob to enable / disable target. + * @state: State of the target. * Visible from userspace (read-write). * We maintain a strict 1:1 correspondence between this and * whether the corresponding netpoll is active or inactive. * Also, other parameters of a target may be modified at - * runtime only when it is disabled (enabled =3D=3D 0). + * runtime only when it is disabled (state =3D=3D STATE_DISABLED). * @extended: Denotes whether console is extended or not. * @release: Denotes whether kernel release version should be prepended * to the message. Depends on extended console. @@ -170,7 +170,7 @@ struct netconsole_target { u32 msgcounter; #endif struct netconsole_target_stats stats; - bool enabled; + enum target_state state; bool extended; bool release; struct netpoll np; @@ -262,6 +262,7 @@ static struct netconsole_target *alloc_and_init(void) nt->np.local_port =3D 6665; nt->np.remote_port =3D 6666; eth_broadcast_addr(nt->np.remote_mac); + nt->state =3D STATE_DISABLED; =20 return nt; } @@ -280,7 +281,7 @@ static void netconsole_process_cleanups_core(void) mutex_lock(&target_cleanup_list_lock); list_for_each_entry_safe(nt, tmp, &target_cleanup_list, list) { /* all entries in the cleanup_list needs to be disabled */ - WARN_ON_ONCE(nt->enabled); + WARN_ON_ONCE(nt->state =3D=3D STATE_ENABLED); do_netpoll_cleanup(&nt->np); /* moved the cleaned target to target_list. Need to hold both * locks @@ -403,7 +404,7 @@ static void trim_newline(char *s, size_t maxlen) =20 static ssize_t enabled_show(struct config_item *item, char *buf) { - return sysfs_emit(buf, "%d\n", to_target(item)->enabled); + return sysfs_emit(buf, "%d\n", to_target(item)->state =3D=3D STATE_ENABLE= D); } =20 static ssize_t extended_show(struct config_item *item, char *buf) @@ -570,8 +571,8 @@ static ssize_t enabled_store(struct config_item *item, const char *buf, size_t count) { struct netconsole_target *nt =3D to_target(item); + bool enabled, current_enabled; unsigned long flags; - bool enabled; ssize_t ret; =20 mutex_lock(&dynamic_netconsole_mutex); @@ -580,9 +581,10 @@ static ssize_t enabled_store(struct config_item *item, goto out_unlock; =20 ret =3D -EINVAL; - if (enabled =3D=3D nt->enabled) { + current_enabled =3D nt->state =3D=3D STATE_ENABLED; + if (enabled =3D=3D current_enabled) { pr_info("network logging has already %s\n", - nt->enabled ? "started" : "stopped"); + current_enabled ? "started" : "stopped"); goto out_unlock; } =20 @@ -615,16 +617,16 @@ static ssize_t enabled_store(struct config_item *item, if (ret) goto out_unlock; =20 - nt->enabled =3D true; + nt->state =3D STATE_ENABLED; pr_info("network logging started\n"); } else { /* false */ /* We need to disable the netconsole before cleaning it up * otherwise we might end up in write_msg() with - * nt->np.dev =3D=3D NULL and nt->enabled =3D=3D true + * nt->np.dev =3D=3D NULL and nt->state =3D=3D STATE_ENABLED */ mutex_lock(&target_cleanup_list_lock); spin_lock_irqsave(&target_list_lock, flags); - nt->enabled =3D false; + nt->state =3D STATE_DISABLED; /* Remove the target from the list, while holding * target_list_lock */ @@ -653,7 +655,7 @@ static ssize_t release_store(struct config_item *item, = const char *buf, ssize_t ret; =20 mutex_lock(&dynamic_netconsole_mutex); - if (nt->enabled) { + if (nt->state =3D=3D STATE_ENABLED) { pr_err("target (%s) is enabled, disable to update parameters\n", config_item_name(&nt->group.cg_item)); ret =3D -EINVAL; @@ -680,7 +682,7 @@ static ssize_t extended_store(struct config_item *item,= const char *buf, ssize_t ret; =20 mutex_lock(&dynamic_netconsole_mutex); - if (nt->enabled) { + if (nt->state =3D=3D STATE_ENABLED) { pr_err("target (%s) is enabled, disable to update parameters\n", config_item_name(&nt->group.cg_item)); ret =3D -EINVAL; @@ -704,7 +706,7 @@ static ssize_t dev_name_store(struct config_item *item,= const char *buf, struct netconsole_target *nt =3D to_target(item); =20 mutex_lock(&dynamic_netconsole_mutex); - if (nt->enabled) { + if (nt->state =3D=3D STATE_ENABLED) { pr_err("target (%s) is enabled, disable to update parameters\n", config_item_name(&nt->group.cg_item)); mutex_unlock(&dynamic_netconsole_mutex); @@ -725,7 +727,7 @@ static ssize_t local_port_store(struct config_item *ite= m, const char *buf, ssize_t ret =3D -EINVAL; =20 mutex_lock(&dynamic_netconsole_mutex); - if (nt->enabled) { + if (nt->state =3D=3D STATE_ENABLED) { pr_err("target (%s) is enabled, disable to update parameters\n", config_item_name(&nt->group.cg_item)); goto out_unlock; @@ -747,7 +749,7 @@ static ssize_t remote_port_store(struct config_item *it= em, ssize_t ret =3D -EINVAL; =20 mutex_lock(&dynamic_netconsole_mutex); - if (nt->enabled) { + if (nt->state =3D=3D STATE_ENABLED) { pr_err("target (%s) is enabled, disable to update parameters\n", config_item_name(&nt->group.cg_item)); goto out_unlock; @@ -770,7 +772,7 @@ static ssize_t local_ip_store(struct config_item *item,= const char *buf, int ipv6; =20 mutex_lock(&dynamic_netconsole_mutex); - if (nt->enabled) { + if (nt->state =3D=3D STATE_ENABLED) { pr_err("target (%s) is enabled, disable to update parameters\n", config_item_name(&nt->group.cg_item)); goto out_unlock; @@ -795,7 +797,7 @@ static ssize_t remote_ip_store(struct config_item *item= , const char *buf, int ipv6; =20 mutex_lock(&dynamic_netconsole_mutex); - if (nt->enabled) { + if (nt->state =3D=3D STATE_ENABLED) { pr_err("target (%s) is enabled, disable to update parameters\n", config_item_name(&nt->group.cg_item)); goto out_unlock; @@ -830,7 +832,7 @@ static ssize_t remote_mac_store(struct config_item *ite= m, const char *buf, ssize_t ret =3D -EINVAL; =20 mutex_lock(&dynamic_netconsole_mutex); - if (nt->enabled) { + if (nt->state =3D=3D STATE_ENABLED) { pr_err("target (%s) is enabled, disable to update parameters\n", config_item_name(&nt->group.cg_item)); goto out_unlock; @@ -1326,7 +1328,7 @@ static void drop_netconsole_target(struct config_grou= p *group, * The target may have never been enabled, or was manually disabled * before being removed so netpoll may have already been cleaned up. */ - if (nt->enabled) + if (nt->state =3D=3D STATE_ENABLED) netpoll_cleanup(&nt->np); =20 config_item_put(&nt->group.cg_item); @@ -1444,7 +1446,7 @@ static int netconsole_netdev_event(struct notifier_bl= ock *this, case NETDEV_RELEASE: case NETDEV_JOIN: case NETDEV_UNREGISTER: - nt->enabled =3D false; + nt->state =3D STATE_DISABLED; list_move(&nt->list, &target_cleanup_list); stopped =3D true; } @@ -1725,7 +1727,8 @@ static void write_ext_msg(struct console *con, const = char *msg, =20 spin_lock_irqsave(&target_list_lock, flags); list_for_each_entry(nt, &target_list, list) - if (nt->extended && nt->enabled && netif_running(nt->np.dev)) + if (nt->extended && nt->state =3D=3D STATE_ENABLED && + netif_running(nt->np.dev)) send_ext_msg_udp(nt, msg, len); spin_unlock_irqrestore(&target_list_lock, flags); } @@ -1745,7 +1748,8 @@ static void write_msg(struct console *con, const char= *msg, unsigned int len) =20 spin_lock_irqsave(&target_list_lock, flags); list_for_each_entry(nt, &target_list, list) { - if (!nt->extended && nt->enabled && netif_running(nt->np.dev)) { + if (!nt->extended && nt->state =3D=3D STATE_ENABLED && + netif_running(nt->np.dev)) { /* * We nest this inside the for-each-target loop above * so that we're able to get as much logging out to @@ -1901,7 +1905,7 @@ static struct netconsole_target *alloc_param_target(c= har *target_config, */ goto fail; } else { - nt->enabled =3D true; + nt->state =3D STATE_ENABLED; } populate_configfs_item(nt, cmdline_count); =20 --=20 2.52.0 From nobody Mon Dec 1 22:41:03 2025 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 49BA234402C for ; Wed, 26 Nov 2025 20:23:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764188607; cv=none; b=ft/VMmYnutXo0V9ME+qCAcIMz45eOTGOkML8Ecd2RHbrI1TpxkAyyIIIcazbT1x2dWAo99e1c558llCXaZToKzYo3mVmT1sZuHUgpM5RlAm4gaM4e0MrgQCcYYCphJejCwXHrjG5eJwm8oMHarSWJW2RMIttslWijWmRlVwxmVU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764188607; c=relaxed/simple; bh=oZlSrKc5HSf8OTgk8Y9zCO1ND/6B7m7anVTBiZTQDCE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NP/+3Q8bb6vFQF4QSa5XdmOYxlw3WwPpxjcopKPnI29nlk7XH/Z9AO4m63kdNs8R8dqoWXTN8wxGLE//ex531xqOIjpfCfL3yJk0kNl0JdDN0wt8RzYRYRKw+khxFOImEZDOi7noOz25QR0h4guOnEcB0lBqnVYKw02wJQy8yso= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QbbaRCMu; arc=none smtp.client-ip=209.85.214.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QbbaRCMu" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-298039e00c2so2180165ad.3 for ; Wed, 26 Nov 2025 12:23:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764188605; x=1764793405; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=J4d7URFdeCPYu3U6zdfTOnUzmMHd/kT6rS033v+6Sa8=; b=QbbaRCMutWdy8VBU7QOm/Di7vDec7kR4wXzLpS8nM0UC3D8a+RcUqBiR9h0BvSl7l7 A8bd3OaQ4dAUDCSwBqtERrTu4gQFp0/8EsDNYlZ+HKED1Vbe+bo0RpjIjTWDqKk2KQ3m m8/ftGRHIcEsUtRpjYCEp7t4x7AsftRSiff8yV8bYoxeDDS5teJdx4jb8+fIu0WkPxfj Rb6iGVa5B8slO3/208HljEZwFkLWBTrJ6mbFLmDERPijz9sesU+sFdn0ltx1EBdXgbMa xMx5iolKt19G0fAvb5mTk2Lul1BXEHIifXbph1VXthv/FutpLrg7g/PRqobJ3DEK1WV7 KEEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764188605; x=1764793405; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=J4d7URFdeCPYu3U6zdfTOnUzmMHd/kT6rS033v+6Sa8=; b=LUPa6SCMU6kS9OyAscdvg6udxqgpkDHXkzYe+pVedTvRaLLd1C3MjNXjIgCLiLii+w q8aX1UYl4wfZp+HXw2V5QI5aJI4B+/AOIrePewhv9531SPQDtHxdebkaUWO51lFTNq2u bqAo725jxhAY/iXPHEWSxUr5VOR+k4C7258VA6KteEOU6SdWWONpFgqrlsE5MCjLEOrQ IlFTGfh+/mokFLLQ6w7I0yrpHgGg+a+gmMEs59XMpv2EFKcDyYSggardHpHhyxPFxUpf Bv3PjexD1sO/KflPHaB92eLXvWUnDiUOTtplCrNDImM4z9ainiyUHzmsip/qjyZZ9wPE TW1A== X-Forwarded-Encrypted: i=1; AJvYcCVVWD5OSbmsCqHVOiLe7TRPCCfnbWH6W38Bc2GRXp2ht4HUAsd/2BGyyalriB5h2vrtLTzg4NbMFxZw2xY=@vger.kernel.org X-Gm-Message-State: AOJu0YyCWqm3a+fJQS6bwQTEf1tlkx0a++c5+LadFzakKPoHURFsd0bl m5pIO6mEOzP56wBw0bdrhhNwGqI5Ui0wRYibCr0l7zpIBZDnvVpJGcgD X-Gm-Gg: ASbGncuKn1oR8WshFEVeVkGIWA2pfId8AQ+QBEF4Rf/oJ8KbZqSVLFru53B7iv7Qcuo ksLyvHSaiDtMCrW67gh4Q0snkTOgtEH+R1rrZaDAmJHdaGdkShfOgehvmjCuMTs6SkGcUKQV13Q jXuDzJjWive8/sDm15vSnb9SICj2xbaGs9rNEzKuaE6+pM9I/apVaoj3PN2UxDrRjqbNlsoNMmY ksTR0b64qp0jVAiveiVS812am0lkVEY7SDaC0izfesNCHsyWEWvH0Me3NIgr7Mrcs9B4OVmeOEl KRrhbIDEPcPc4GHeph95mc0kmfhC1fDkTak9vfmtieN/AAq/Zsl8bYcbubeS2kZ+MtqXA9yXp/Q ysMcgZxP3R/Qjv8Iav0sMBMbPEeG1T19GDeEuCHs9bPHc3ITmcZWw67iZACb1+aCFEJFY/Dpaop 5N5BtCDDXaNtJjN8WbRr54hAIrTC7e X-Google-Smtp-Source: AGHT+IHGB5xyi1FRDO7qHEuNyrSdPuJIf66uTvcetBn/DBSU9Vii6oLU5Y+uncUTdE5yg8blVoT9WQ== X-Received: by 2002:a17:903:2acc:b0:298:603b:dc46 with SMTP id d9443c01a7336-29b6bf37df2mr258195425ad.39.1764188604441; Wed, 26 Nov 2025 12:23:24 -0800 (PST) Received: from [192.168.15.94] ([2804:7f1:ebc3:752f:12e1:8eff:fe46:88b8]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29b5b13a80csm207100475ad.35.2025.11.26.12.23.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Nov 2025 12:23:23 -0800 (PST) From: Andre Carvalho Date: Wed, 26 Nov 2025 20:22:55 +0000 Subject: [PATCH net-next v7 3/5] netconsole: add STATE_DEACTIVATED to track targets disabled by low level Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251126-netcons-retrigger-v7-3-1d86dba83b1c@gmail.com> References: <20251126-netcons-retrigger-v7-0-1d86dba83b1c@gmail.com> In-Reply-To: <20251126-netcons-retrigger-v7-0-1d86dba83b1c@gmail.com> To: Breno Leitao , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Andre Carvalho X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1764188576; l=2409; i=asantostc@gmail.com; s=20250807; h=from:subject:message-id; bh=Bc0ee9DYK1oiSRrahxYGeDv2Y4gYudwUsG3FQq7nt2Y=; b=SAJQL5ZINCumtqkECOtyodcazmBLEaPG4kqXo8BJJNM+nb4uiY0spJyYDIMSkqHNOUpxUNvLP Js7kLRT7E39BoVXz89doaMvxrg303N9bDKMIWgzdmXTns8Is+sOzLHo X-Developer-Key: i=asantostc@gmail.com; a=ed25519; pk=eWre+RwFHCxkiaQrZLsjC67mZ/pZnzSM/f7/+yFXY4Q= From: Breno Leitao When the low level interface brings a netconsole target down, record this using a new STATE_DEACTIVATED state. This allows netconsole to distinguish between targets explicitly disabled by users and those deactivated due to interface state changes. It also enables automatic recovery and re-enabling of targets if the underlying low-level interfaces come back online. From a code perspective, anything that is not STATE_ENABLED is disabled. Devices (de)enslaving are marked STATE_DISABLED to prevent automatically resuming as enslaved interfaces cannot have netconsole enabled. Signed-off-by: Breno Leitao Signed-off-by: Andre Carvalho --- drivers/net/netconsole.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index b21ecea60d52..7a1e5559fc0d 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -122,6 +122,7 @@ enum sysdata_feature { enum target_state { STATE_DISABLED, STATE_ENABLED, + STATE_DEACTIVATED, }; =20 /** @@ -580,6 +581,14 @@ static ssize_t enabled_store(struct config_item *item, if (ret) goto out_unlock; =20 + /* When the user explicitly enables or disables a target that is + * currently deactivated, reset its state to disabled. The DEACTIVATED + * state only tracks interface-driven deactivation and should _not_ + * persist when the user manually changes the target's enabled state. + */ + if (nt->state =3D=3D STATE_DEACTIVATED) + nt->state =3D STATE_DISABLED; + ret =3D -EINVAL; current_enabled =3D nt->state =3D=3D STATE_ENABLED; if (enabled =3D=3D current_enabled) { @@ -1445,10 +1454,19 @@ static int netconsole_netdev_event(struct notifier_= block *this, break; case NETDEV_RELEASE: case NETDEV_JOIN: - case NETDEV_UNREGISTER: + /* transition target to DISABLED instead of + * DEACTIVATED when (de)enslaving devices as + * their targets should not be automatically + * resumed when the interface is brought up. + */ nt->state =3D STATE_DISABLED; list_move(&nt->list, &target_cleanup_list); stopped =3D true; + break; + case NETDEV_UNREGISTER: + nt->state =3D STATE_DEACTIVATED; + list_move(&nt->list, &target_cleanup_list); + stopped =3D true; } } netconsole_target_put(nt); --=20 2.52.0 From nobody Mon Dec 1 22:41:03 2025 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5EC5D345732 for ; Wed, 26 Nov 2025 20:23:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764188615; cv=none; b=u4Gia7GIHYmCyh6UCzVcZzzn1GMT/qqIY+nftn7/LGf+BDuKGBGTcdbqR9YZngBRox1ef+hK7g22JQP7MsaR5z06VnI+FENPDesX0y6RfrqmtUBkSJT1fHCHdRbMSYjtacMTo2f3bWj7/Ur37QYpGhgPZvVTCH/kLxF/qddHMpQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764188615; c=relaxed/simple; bh=U43LBa5ZqWUfnCjLm20j5ShVEuOi5TM5JaD9jZhAG9s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JKZObgXuICnNvWj9sWO92VB98CacOOsIv7ke3Gyi3q3UdEuOsKoOO3Qpk/ApKskT0rZN4B1kC4LQJ6Da/dqe2F+X6swdfBxPahRLpcYRTurUjVA47m2Hw+TqPCl5x6NjiUv4y7xLbfQFs0nMXhXsNHl6qcvQlNFg6YdJyd2284Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Eec0WZn3; arc=none smtp.client-ip=209.85.214.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Eec0WZn3" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2955623e6faso1818465ad.1 for ; Wed, 26 Nov 2025 12:23:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764188612; x=1764793412; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Ya0KpU5qQAQXJP6OAlaa47iZfPalcWrgiFV7vSpQFNw=; b=Eec0WZn3fYDuOBz10RoyqKMe5hipyvSD/pp4GV5T7f7dYUmxNA+yvlNHPTkuijHILb ttnJ3v2+t9C15Qz99Z5Kcdp/1TL8aWOpyh6kgAuj9daZh3GiMsJuaTik6dNvcftoIbYA zXuPbudjMgPlV4ZHZmfrrBAB0p19v9y+E9zjq1JAWqKahKV2lCCSFPl8SIfXc/tE51Kz 4mR9O6yfr4CV8NRKBVxRbKam5EMRP9xwQ3aPPrrERPZllT/voQJ/Xh5GUteP91jB5zTo wbYbQIG9mHnaS0GKh4gm2qDfWhTrOdn9n6ak0nI18JCDtF3W4y7rtX/XbLfdf81fatVl Tjvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764188612; x=1764793412; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Ya0KpU5qQAQXJP6OAlaa47iZfPalcWrgiFV7vSpQFNw=; b=s5LNqKaIfZh1zcZFfsokgkP6ozQVPlsomBvI2mm/eoV0clNl13PUXTMLUDtKvXKafO IsZOY28XKUK7+okRYtd5y6wgwoOhVRfdf4k8IZV/H2eWvivI2rPYAhHVuqIkHpTvacRK O9JovEKug3hdaGDN7FSvxNyl5kdhQpUBY0Ke7E1wZ2Kmhl4INjU/ILoxaR3vD97yzqU3 8UQrvGo+5xaG9VC4y3Ez0NJKmyfYVSCsLRyObKxs1k/bfowH+uidEfv79m1BDPvLlGR7 Z1SQ0WJaPUgKvasbnH2rJ+Mz30pJy/DcazlWbPqwmrxnWBm+Q+g3kpGclz0ttK9Oyutz MIEw== X-Forwarded-Encrypted: i=1; AJvYcCXJRRITGZAlBiK5QdD69YPW5ttfoxBolTGUxOF5ZdzchWUfXNafoW0dlMDrifgQ8w8zCY3ZGKM5J9mL1oY=@vger.kernel.org X-Gm-Message-State: AOJu0Yzyg7/cEd+dmKhBJkHdT/RRwlGPUdTQ6HscHRigmtRak4HR+z0O pmV+k8ejIi5U9RVbtH4TjTa2nSgMlolZfWIfMHXV2GOOgU1+MWdhWdoo X-Gm-Gg: ASbGncvI2Cr74F953ch9L7WnooX9B1w4CFYqwWhykAtf2xM5+d4KGrLnAOoxolDnHJA OqKBbp7eYa+lBfnUl5Ypza7P9fYN9nF5F4tBtMfK5/rCIRlRQOBqhM5Z8rmcfBmgkYTc+/cys2U Od08LODjSQdvIbjNv86YJFsHb/06OfJMVZy+YSKI9Ul30ct7OIF3icj2HIhqqn/22X/2pkjXFlY xkVsdCA6qm56odc04jjtJTi/18CYP6na9msmIuhBo7LBLbtD5cwjGXW0dI2Xv3KGaMaMePQ4tpt YAJvCvTlo/MfCFwAfbAqhkKMaALnn+eVcZbTGuIp3aAqTsStIpiHJ7/ey5831fEQexKUbNntntE ID+V4MvcAT6bUdZgMbRCDEE5TKziGTJ3cZxIdq7TUARRkXthK4/bnGjOSeLL4pHbETaivboLSeb 9R5l50kDwvAG5rPUq1rLHPkX+e9uZ6 X-Google-Smtp-Source: AGHT+IGhuQ5VfLX4r5MGrQDek02H0QVKLtEaRdTq+YMnWO58IGFYau5AnnIHNzbWgzOkINdjfFqGpQ== X-Received: by 2002:a17:903:2341:b0:295:1a63:57b0 with SMTP id d9443c01a7336-29baafca153mr84562175ad.23.1764188611430; Wed, 26 Nov 2025 12:23:31 -0800 (PST) Received: from [192.168.15.94] ([2804:7f1:ebc3:752f:12e1:8eff:fe46:88b8]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29b5b13a80csm207100475ad.35.2025.11.26.12.23.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Nov 2025 12:23:30 -0800 (PST) From: Andre Carvalho Date: Wed, 26 Nov 2025 20:22:56 +0000 Subject: [PATCH net-next v7 4/5] netconsole: resume previously deactivated target Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251126-netcons-retrigger-v7-4-1d86dba83b1c@gmail.com> References: <20251126-netcons-retrigger-v7-0-1d86dba83b1c@gmail.com> In-Reply-To: <20251126-netcons-retrigger-v7-0-1d86dba83b1c@gmail.com> To: Breno Leitao , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Andre Carvalho X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1764188576; l=5542; i=asantostc@gmail.com; s=20250807; h=from:subject:message-id; bh=U43LBa5ZqWUfnCjLm20j5ShVEuOi5TM5JaD9jZhAG9s=; b=7xM4Oz67GhoBFxh7QGBHPZlcSHfB7mFP/4n+QH3HprC1FPAUVMqtzQIisBbNXhvdpnkHFP0kj uSRqANj9++vC4zPzAf+sp7Oxzgzg564oODcaouhD+a6z910/W/Eg1St X-Developer-Key: i=asantostc@gmail.com; a=ed25519; pk=eWre+RwFHCxkiaQrZLsjC67mZ/pZnzSM/f7/+yFXY4Q= Attempt to resume a previously deactivated target when the associated interface comes back (NETDEV_UP event is received) by calling __netpoll_setup on the device. Depending on how the target was setup (by mac or interface name), the corresponding field is compared with the device being brought up. Targets that are candidates for resuming are removed from the target list and added to a temp list, as __netpoll_setup is IRQ unsafe. __netpoll_setup assumes RTNL is held (which is guaranteed to be the case when handling the event). In case of success, hold a reference to the device which will be removed upon target (or netconsole) removal by netpoll_cleanup. Target transitions to STATE_DISABLED in case of failures resuming it to avoid retrying the same target indefinitely. Reviewed-by: Breno Leitao Signed-off-by: Andre Carvalho --- drivers/net/netconsole.c | 82 ++++++++++++++++++++++++++++++++++++++++++++= ---- 1 file changed, 76 insertions(+), 6 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 7a1e5559fc0d..2dcdfb44a9e0 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -138,10 +138,14 @@ enum target_state { * @stats: Packet send stats for the target. Used for debugging. * @state: State of the target. * Visible from userspace (read-write). - * We maintain a strict 1:1 correspondence between this and - * whether the corresponding netpoll is active or inactive. + * From a userspace perspective, the target is either enabled or + * disabled. Internally, although both STATE_DISABLED and + * STATE_DEACTIVATED correspond to inactive targets, the latter is + * due to automatic interface state changes and will try + * recover automatically, if the interface comes back + * online. * Also, other parameters of a target may be modified at - * runtime only when it is disabled (state =3D=3D STATE_DISABLED). + * runtime only when it is disabled (state !=3D STATE_ENABLED). * @extended: Denotes whether console is extended or not. * @release: Denotes whether kernel release version should be prepended * to the message. Depends on extended console. @@ -1430,17 +1434,76 @@ static int prepare_sysdata(struct netconsole_target= *nt) } #endif /* CONFIG_NETCONSOLE_DYNAMIC */ =20 +/* Attempts to resume logging to a deactivated target. */ +static void resume_target(struct netconsole_target *nt, struct net_device = *ndev) +{ + int ret; + + netdev_hold(ndev, &nt->np.dev_tracker, GFP_KERNEL); + + ret =3D __netpoll_setup(&nt->np, ndev); + if (ret) { + /* netpoll fails setup once, do not try again. */ + nt->state =3D STATE_DISABLED; + netdev_put(ndev, &nt->np.dev_tracker); + return; + } + + nt->state =3D STATE_ENABLED; + pr_info("network logging resumed on interface %s\n", nt->np.dev_name); +} + +/* Check if the target was bound by mac address. */ +static bool bound_by_mac(struct netconsole_target *nt) +{ + return is_valid_ether_addr(nt->np.dev_mac); +} + +/* Checks if a deactivated target matches a device. */ +static bool deactivated_target_match(struct netconsole_target *nt, + struct net_device *ndev) +{ + if (nt->state !=3D STATE_DEACTIVATED) + return false; + + if (bound_by_mac(nt)) + return !memcmp(nt->np.dev_mac, ndev->dev_addr, ETH_ALEN); + return !strncmp(nt->np.dev_name, ndev->name, IFNAMSIZ); +} + +/* Process targets in resume_list and returns them to target_list */ +static void netconsole_process_resumable_targets(struct list_head *resume_= list, + struct net_device *ndev) +{ + struct netconsole_target *nt, *tmp; + unsigned long flags; + + list_for_each_entry_safe(nt, tmp, resume_list, list) { + resume_target(nt, ndev); + + /* At this point the target is either enabled or disabled and + * was cleaned up before getting deactivated. Either way, add it + * back to target list. + */ + spin_lock_irqsave(&target_list_lock, flags); + list_move(&nt->list, &target_list); + spin_unlock_irqrestore(&target_list_lock, flags); + } +} + /* Handle network interface device notifications */ static int netconsole_netdev_event(struct notifier_block *this, unsigned long event, void *ptr) { - unsigned long flags; - struct netconsole_target *nt, *tmp; struct net_device *dev =3D netdev_notifier_info_to_dev(ptr); + struct netconsole_target *nt, *tmp; + LIST_HEAD(resume_list); bool stopped =3D false; + unsigned long flags; =20 if (!(event =3D=3D NETDEV_CHANGENAME || event =3D=3D NETDEV_UNREGISTER || - event =3D=3D NETDEV_RELEASE || event =3D=3D NETDEV_JOIN)) + event =3D=3D NETDEV_RELEASE || event =3D=3D NETDEV_JOIN || + event =3D=3D NETDEV_UP)) goto done; =20 mutex_lock(&target_cleanup_list_lock); @@ -1469,6 +1532,11 @@ static int netconsole_netdev_event(struct notifier_b= lock *this, stopped =3D true; } } + if (event =3D=3D NETDEV_UP && deactivated_target_match(nt, dev)) + /* resume_target is IRQ unsafe, remove target from + * target_list in order to resume it with IRQ enabled. + */ + list_move(&nt->list, &resume_list); netconsole_target_put(nt); } spin_unlock_irqrestore(&target_list_lock, flags); @@ -1492,6 +1560,8 @@ static int netconsole_netdev_event(struct notifier_bl= ock *this, dev->name, msg); } =20 + netconsole_process_resumable_targets(&resume_list, dev); + /* Process target_cleanup_list entries. By the end, target_cleanup_list * should be empty */ --=20 2.52.0 From nobody Mon Dec 1 22:41:03 2025 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 766F3345CA8 for ; Wed, 26 Nov 2025 20:23:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764188621; cv=none; b=YFxesNANJeksPLeKBO6ibaukzognO8FWvNglxDWY6TqcFYs9HgYO2dkL8/sW8NWe2wHUfPcLML0EFvhwS8nhZX1ZTqPomK1dB5CMrK+iJJ4fRaFFiNPkCFbQBnJod7nzxh6l5ctT8EJp5HoSbJDrhOu7R8oQj8lEMeYioW+MgOI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764188621; c=relaxed/simple; bh=hn/kxg8v9iI6fPhbZcD8Tj+G//s0QmgoWLVA/hu8hV4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BgG8G4s7W5fDb2M3oatYgpF2xEjsdoPXfTmhmB38PcpWvv3uzkCgkWU8MHWScgUSsEUNtQRRHWHudrabtHJ4YYUiOark1y5BTvyC0Lm3a4AFQGiTeFGMxmwmnR8HH23KvxeOMWcGwfC8zdKgSeL7nBok3Z5m2zqKI3Ale/zXHXA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZKFzQj2D; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZKFzQj2D" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-295548467c7so1841245ad.2 for ; Wed, 26 Nov 2025 12:23:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764188619; x=1764793419; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=3/fAPe5zn1MJUzjr0NdBaLTd5ohKsQq+JKoQHPiFo9E=; b=ZKFzQj2Digx3P0D2Z7pBMXWp/dNP2V2Z6OTlQrNWtxCu/Z/KXT+f/Ak11S/DyxRFti Mkyf7wlbwXBZThFRG43mcDnvqWbcAIWguMqRtYaaaf0qdSSAZLnthzscgwkVFwTWfSW0 bME+nvfw8KAJQ6N6Qw+VBQ4bsAiXFZWpHL2f+0x+5UBsPEyOY1QRkiBM7t3R6teRwmN9 kSgoIK41KzfFSl2HKt287WF64O+uGWU1JcrmI2mpM/MuKdnHAb0ZmSaTgOLHRZM2Rq8k B8ej8g42RUfWvShHNhTDIgKcERsYU/fZEW47xf/AawM2B/Od/KimisAW1QY9zTyFzepf +KZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764188619; x=1764793419; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=3/fAPe5zn1MJUzjr0NdBaLTd5ohKsQq+JKoQHPiFo9E=; b=u4EZoQJB+Lt5auLabvwyj+gO7G4oLmYVK2zegp7ocjf0B9sH81DMnClL/b7puYwk2L qWtj/NXIYXO+dJRc0D6AotacLEhQwB+29p7aNbCiJjKyBXfVouuI2wGLuGzDSoaw44B9 BJ+//15W7Typ+VSeoqZDtm1TaclEUimASwbQaJ/TM6H/JdX34GiUnEPFHvE+d8X9tezE chGDO6xqGZXE9Fzc4AR4HHyh2RHgAsZzNQL8ydAcFyM11HvjDLmGJmkuNSJykMQ8Eq13 fVLI2hKObYnFA50z3jWCDm/daKyIOAcyN2n9aNH/xr/nXbGK4y4dU0ULZYWcokuAyXj0 QTpg== X-Forwarded-Encrypted: i=1; AJvYcCWQvIMTB381MPlUooxpBYo2/xWCuDe2HeFx7vl6EAIOZ3RX1Z761BTMrVgy9VTBvaIRGAMSTtlZ/l6ow34=@vger.kernel.org X-Gm-Message-State: AOJu0YxKXFwKMsW3Y5HPaFFGyXXdcYCPbswSvPlOeisyGRJf0ut9gXz5 e85Oav5W1vJW1AnA6OD/+tciyIXPq7mTDuqcW483022qgh/8ynQIHzkM X-Gm-Gg: ASbGncsvAYne+gvrgtXoyzDjqMGIcNe2v/xKGP2BsE2dM/Q+QDs1KZ5Un/oEOWmD1mW 5zuPqgYNfOp4HkqqiqQXsTFCbmISbTQ3OaJ+aBAFqt8iAWAzGu/HJTuBeTUzSn6p++i56xbDxBV lHbS5gBV4TQiE9wQ/45dgbgpUhH2NC6Y3oMiQxcxsvPWs5wj89EMHmq4ttJIAyZdv0mFuv4IrU7 PQplINqkMOBzQclxP6vbUlbqKaB9jb+No8vcv6sHoXUtwyNWzeX2F2i8VhUqovqsbDhgDisPJiG fJa8BjKzKV9POlisyJgQh8VRaQocME+hRd8yAc5sU0n2Obl3SypmXluoWE10l+SaDvD6lYerltD K/vDrwuRpT8vYSIGedDCBGF/DZVjz1R0Dk/UJY9O3iogQH8/EcU84aT3BlYBvsy3sw1/bMkpwqW te4nruaXpuA+SJkjLbAw== X-Google-Smtp-Source: AGHT+IFlWVMX3M1sh8LmYCCM96cdfdCDdGHZ43sVYm0HSHzwk5bsC7hG9uCm6tFdUOBtcUGMxFtFNA== X-Received: by 2002:a17:902:ccc9:b0:295:596f:84ef with SMTP id d9443c01a7336-29b6bf3b5dfmr273525865ad.31.1764188618591; Wed, 26 Nov 2025 12:23:38 -0800 (PST) Received: from [192.168.15.94] ([2804:7f1:ebc3:752f:12e1:8eff:fe46:88b8]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29b5b13a80csm207100475ad.35.2025.11.26.12.23.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Nov 2025 12:23:37 -0800 (PST) From: Andre Carvalho Date: Wed, 26 Nov 2025 20:22:57 +0000 Subject: [PATCH net-next v7 5/5] selftests: netconsole: validate target resume Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251126-netcons-retrigger-v7-5-1d86dba83b1c@gmail.com> References: <20251126-netcons-retrigger-v7-0-1d86dba83b1c@gmail.com> In-Reply-To: <20251126-netcons-retrigger-v7-0-1d86dba83b1c@gmail.com> To: Breno Leitao , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Andre Carvalho X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1764188576; l=6537; i=asantostc@gmail.com; s=20250807; h=from:subject:message-id; bh=hn/kxg8v9iI6fPhbZcD8Tj+G//s0QmgoWLVA/hu8hV4=; b=Gc3qQzJVfojty4M0sdLaLerlkNhNULg2fnhRj1y77ELw6y2fb0ILQ+09aIEBjf8I7ZIWElEQx 5eOQj2mprGFBHxjLaoA+n/SVCCKN3YRHvhFzWwqac6aJMa6RVdlusEM X-Developer-Key: i=asantostc@gmail.com; a=ed25519; pk=eWre+RwFHCxkiaQrZLsjC67mZ/pZnzSM/f7/+yFXY4Q= Introduce a new netconsole selftest to validate that netconsole is able to resume a deactivated target when the low level interface comes back. The test setups the network using netdevsim, creates a netconsole target and then remove/add netdevsim in order to bring the same interfaces back. Afterwards, the test validates that the target works as expected. Targets are created via cmdline parameters to the module to ensure that we are able to resume targets that were bound by mac and interface name. Reviewed-by: Breno Leitao Signed-off-by: Andre Carvalho --- tools/testing/selftests/drivers/net/Makefile | 1 + .../selftests/drivers/net/lib/sh/lib_netcons.sh | 35 ++++++-- .../selftests/drivers/net/netcons_resume.sh | 97 ++++++++++++++++++= ++++ 3 files changed, 128 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/drivers/net/Makefile b/tools/testing/s= elftests/drivers/net/Makefile index f5c71d993750..3eba569b3366 100644 --- a/tools/testing/selftests/drivers/net/Makefile +++ b/tools/testing/selftests/drivers/net/Makefile @@ -19,6 +19,7 @@ TEST_PROGS :=3D \ netcons_cmdline.sh \ netcons_fragmented_msg.sh \ netcons_overflow.sh \ + netcons_resume.sh \ netcons_sysdata.sh \ netcons_torture.sh \ netpoll_basic.py \ diff --git a/tools/testing/selftests/drivers/net/lib/sh/lib_netcons.sh b/to= ols/testing/selftests/drivers/net/lib/sh/lib_netcons.sh index 87f89fd92f8c..239f44d4a45d 100644 --- a/tools/testing/selftests/drivers/net/lib/sh/lib_netcons.sh +++ b/tools/testing/selftests/drivers/net/lib/sh/lib_netcons.sh @@ -203,19 +203,21 @@ function do_cleanup() { function cleanup_netcons() { # delete netconsole dynamic reconfiguration # do not fail if the target is already disabled - if [[ ! -d "${NETCONS_PATH}" ]] + local TARGET_PATH=3D${1:-${NETCONS_PATH}} + + if [[ ! -d "${TARGET_PATH}" ]] then # in some cases this is called before netcons path is created return fi - if [[ $(cat "${NETCONS_PATH}"/enabled) !=3D 0 ]] + if [[ $(cat "${TARGET_PATH}"/enabled) !=3D 0 ]] then - echo 0 > "${NETCONS_PATH}"/enabled || true + echo 0 > "${TARGET_PATH}"/enabled || true fi # Remove all the keys that got created during the selftest - find "${NETCONS_PATH}/userdata/" -mindepth 1 -type d -delete + find "${TARGET_PATH}/userdata/" -mindepth 1 -type d -delete # Remove the configfs entry - rmdir "${NETCONS_PATH}" + rmdir "${TARGET_PATH}" } =20 function cleanup() { @@ -377,6 +379,29 @@ function check_netconsole_module() { fi } =20 +function wait_target_state() { + local TARGET=3D${1} + local STATE=3D${2} + local TARGET_PATH=3D"${NETCONS_CONFIGFS}"/"${TARGET}" + local ENABLED=3D0 + + if [ "${STATE}" =3D=3D "enabled" ] + then + ENABLED=3D1 + fi + + if [ ! -d "$TARGET_PATH" ]; then + echo "FAIL: Target does not exist." >&2 + exit "${ksft_fail}" + fi + + local CHECK_CMD=3D"grep \"$ENABLED\" \"$TARGET_PATH/enabled\"" + slowwait 2 sh -c "test -n \"\$($CHECK_CMD)\"" || { + echo "FAIL: ${TARGET} is not ${STATE}." >&2 + exit "${ksft_fail}" + } +} + # A wrapper to translate protocol version to udp version function wait_for_port() { local NAMESPACE=3D${1} diff --git a/tools/testing/selftests/drivers/net/netcons_resume.sh b/tools/= testing/selftests/drivers/net/netcons_resume.sh new file mode 100755 index 000000000000..383ad1149271 --- /dev/null +++ b/tools/testing/selftests/drivers/net/netcons_resume.sh @@ -0,0 +1,97 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: GPL-2.0 + +# This test validates that netconsole is able to resume a target that was +# deactivated when its interface was removed when the interface is brought +# back up. +# +# The test configures a netconsole target and then removes netdevsim modul= e to +# cause the interface to disappear. Targets are configured via cmdline to = ensure +# targets bound by interface name and mac address can be resumed. +# The test verifies that the target moved to disabled state before adding +# netdevsim and the interface back. +# +# Finally, the test verifies that the target is re-enabled automatically a= nd +# the message is received on the destination interface. +# +# Author: Andre Carvalho + +set -euo pipefail + +SCRIPTDIR=3D$(dirname "$(readlink -e "${BASH_SOURCE[0]}")") + +source "${SCRIPTDIR}"/lib/sh/lib_netcons.sh + +modprobe netdevsim 2> /dev/null || true +rmmod netconsole 2> /dev/null || true + +check_netconsole_module + +function cleanup() { + cleanup_netcons "${NETCONS_CONFIGFS}/cmdline0" + do_cleanup + rmmod netconsole +} + +trap cleanup EXIT + +# Run the test twice, with different cmdline parameters +for BINDMODE in "ifname" "mac" +do + echo "Running with bind mode: ${BINDMODE}" >&2 + # Set current loglevel to KERN_INFO(6), and default to KERN_NOTICE(5) + echo "6 5" > /proc/sys/kernel/printk + + # Create one namespace and two interfaces + set_network + + # Create the command line for netconsole, with the configuration from + # the function above + CMDLINE=3D$(create_cmdline_str "${BINDMODE}") + + # The content of kmsg will be save to the following file + OUTPUT_FILE=3D"/tmp/${TARGET}-${BINDMODE}" + + # Load the module, with the cmdline set + modprobe netconsole "${CMDLINE}" + # Expose cmdline target in configfs + mkdir "${NETCONS_CONFIGFS}/cmdline0" + + # Target should be enabled + wait_target_state "cmdline0" "enabled" + + # Remove low level module + rmmod netdevsim + # Target should be disabled + wait_target_state "cmdline0" "disabled" + + # Add back low level module + modprobe netdevsim + # Recreate namespace and two interfaces + set_network + # Target should be enabled again + wait_target_state "cmdline0" "enabled" + + # Listen for netconsole port inside the namespace and destination + # interface + listen_port_and_save_to "${OUTPUT_FILE}" & + # Wait for socat to start and listen to the port. + wait_local_port_listen "${NAMESPACE}" "${PORT}" udp + # Send the message + echo "${MSG}: ${TARGET}" > /dev/kmsg + # Wait until socat saves the file to disk + busywait "${BUSYWAIT_TIMEOUT}" test -s "${OUTPUT_FILE}" + # Make sure the message was received in the dst part + # and exit + validate_msg "${OUTPUT_FILE}" + + # kill socat in case it is still running + pkill_socat + # Cleanup & unload the module + cleanup + + echo "${BINDMODE} : Test passed" >&2 +done + +trap - EXIT +exit "${EXIT_STATUS}" --=20 2.52.0