From patchwork Thu Feb 6 11:05:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13962850 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) (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 0046A22689C; Thu, 6 Feb 2025 11:06:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839969; cv=none; b=Q+T7PW+lUlEsfBUYW9Wn46BNnErgLlb9kTwxoSX7LzMJQjm7lZQEqaNmiFZcCL2cjeqj814Ktjwgx07Ogfpo4K2zSn/vGzyvxKSPWy/ks5/5/cTuaD4b/vqQoHyIzrzRDPBmdvlDIjj57dtoRWQwvGzrRAeuoDGvoXK7PBgZyiQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839969; c=relaxed/simple; bh=lTnjo5M9mcX1w/bC55hH7D4u1Aef58AcXKWP+fHpObA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fOqluIEWuTJHNZb2a8/XCi+lDFgOjn77fh1TMcFVN1h9nh0SmHsBP/vAYKYCgIBh+ssmHx3zMrzjbSpNLJQoq2Y/0arE+tRpc7p2O5B9lmKetCUIjjyZl5Bi7ph45kuJIQayvQSQMCBFRoPRFlitTHfeFWb6/RsicZW02eV6Lws= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.218.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-aaf0f1adef8so159360266b.3; Thu, 06 Feb 2025 03:06:07 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738839966; x=1739444766; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=REdEcbQPl65CW/hCmXFtnxh/44oJYC9fdWTnOSTALpY=; b=YujFAx22HE/lalpzqFUl0ySTxWypWJ60pTD4gyqIiKM4BbtPK3dBgzLhwsC0BkitZz d9kUlDPWc27aTGPkQ1jPVzx6RPCoPlfYQtxDrLF2N87/5Y/4MoPWyq6ZzZ5JYru2q2uM MTGmLlVCt/lwp7k7wE8ClW4VLeYn09Y4Ldb0z5oRoFbuI4nZ0u9un3CXkFJ1sOROUf8Q 5khb4HRPf3QAEnX0gJlVxsvSfPNU7Gk8DJSvOVmHtV3OKum7qWfFblLhXdjEc7ACHlB6 ZM7oTriZ5B01GaV5WJyKm3aHlmqjj1jOb8DMzHLwjhOHzdobvWVs7e9yoJdNi323g8mY dvfg== X-Forwarded-Encrypted: i=1; AJvYcCUi3WRDNfmAOaFJkXPM41ex2Ym5Snsbhq2q8N5jG53Q6Qk8ILjNSpULjrcWbGLGoZr9Il1u4ahKKqqofrCWbUsc@vger.kernel.org, AJvYcCV3sdAfo07EmnA3siKsinm3Pi/HroFd3Ry6O+1DIGbjPU59mePbmvq75mBQNs3qFeXZkZ7rdP0o9/ioiFPY@vger.kernel.org, AJvYcCVjprekuI+HCTbBjyLrpaamVLTXD/VVv+2BHVrlVodevySJc+oXiUKbjHkZmF+wDjELDzvD/KZJWlQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yz2cTGNL9KKP2OO8WkwZ0Nxy8Z/uwHSqjDzFo3hJoDTbxr8JFGH WpvKWgbNmh+FZAPveFDrnuuI/ROGV55FKwZOho0Kw8M+GNNoDqQx X-Gm-Gg: ASbGncvoln5yBUskCsc/cRtX6hoaUi5Hd+B9ZP3YQFfUorNBSQP0u9pqSnMA/B3VSbm TRPpn5AhM3Pgj7AFbmkRtLQ6OIatu3cIRUPuH/uj0c50GXfK6vRyMTuya7uqVaYjaeCZKn5qjaH VFzJ9/Wx3aqxVfXp4mqiuuoOftw8xVkE+CRcY/cYtOPphcUA/g+ox0M2LhM4odGwpU4MCB8DYRH IZA/poOwdS6GlTdNassdjioEaLCYDlEM2BN6dBYQWsssdvlD2jBDVKuX6fXVrsTgzexdujGA4om f7f40Bo= X-Google-Smtp-Source: AGHT+IEFzu5552xmMut4eBQ8kM3b60OXc28m+jdCkEYJPO9PAppMuzlTkh2nqwHMk+eoNVzhpAoigw== X-Received: by 2002:a17:907:6ea3:b0:aae:fb7c:50df with SMTP id a640c23a62f3a-ab75e34596bmr695893466b.36.1738839966138; Thu, 06 Feb 2025 03:06:06 -0800 (PST) Received: from localhost ([2a03:2880:30ff:71::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab7736468e7sm82392066b.172.2025.02.06.03.06.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 03:06:05 -0800 (PST) From: Breno Leitao Date: Thu, 06 Feb 2025 03:05:52 -0800 Subject: [PATCH net-next v5 1/8] netconsole: consolidate send buffers into netconsole_target struct Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250206-netcon_cpu-v5-1-859b23cc3826@debian.org> References: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> In-Reply-To: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Jonathan Corbet , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, rdunlap@infradead.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4811; i=leitao@debian.org; h=from:subject:message-id; bh=lTnjo5M9mcX1w/bC55hH7D4u1Aef58AcXKWP+fHpObA=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnpJeaSHEqxfpJAHBDX/XAsm+QM37Keoj68KRD6 efCzMD0xJGJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6SXmgAKCRA1o5Of/Hh3 bQaHD/9Mik8uaIvAZXqH3Lzr9pYTkgMo9nePIxRDKYKLYt8QCieeE6Ql1BBeOCB51SUsbNXjwS7 fvoMcUa73HfqYe1xbBavt0oG+hAyc4IXb08NRheg5/1h2uI+N75YN2sNWlBp2GumkjGkof4RLKx L5yAEyYfxrnF4+Pj895icG9jrZxgWmOgzC9onZbMbSoAYzCwdkue25v4Vo/hhCRuS16LvjP8vtf j3UdAUq5+zLiiX+BYBRFOTgKV9PSLzLbq2H0aL7U1CMW8vMJTfWR810rKjs6nEgGrOJ/Yo/O6Tz OJUofUqU+G2Lim2q5NXJsuCdjdPScaEUCyt2zqdan/sprHNe0tPIg5tYMUqMxxRLP3NG9Res22S 30puhnoDAi1GkJfpA4+vEd7e4zBqfBnlKaOkXRafUAXTUJNp6GMSCxZED3J4wD+r87aRsKgtjkc Yu9yygv4fK7FEhlRsrKX1rT2Gfd+gmnY144QOQszuOJFEfO3cSysgPXHAxl5P62xXjcNVhBI8UP /7ME1a1lNCOoPER6W196JqTgoC5hvG4FfVreUfYd3zjIJTzhDiLi5cVF+98CeBYyXprsFImL7L7 jCjilz1kKoMAPdy40qD8grfm+SWB4LeAG11Jwb4J9BSvS6Djn62zrGZFCOoWNnYe+N28uSd4HrD 21dqHSK2o/XWBfA== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Patchwork-Delegate: kuba@kernel.org Move the static buffers from send_msg_no_fragmentation() and send_msg_fragmented() into the netconsole_target structure. This simplifies the code by: - Eliminating redundant static buffers - Centralizing buffer management in the target structure - Reducing memory usage by 1KB (one buffer instead of two) The buffer in netconsole_target is protected by target_list_lock, maintaining the same synchronization semantics as the original code. Suggested-by: Jakub Kicinski Signed-off-by: Breno Leitao Reviewed-by: Simon Horman --- drivers/net/netconsole.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 86ab4a42769a49eebe5dd6f01dafafc6c86ec54f..034caaa26563504357f859000678af2037003c25 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -123,6 +123,7 @@ struct netconsole_target_stats { * remote_ip (read-write) * local_mac (read-only) * remote_mac (read-write) + * @buf: The buffer used to send the full msg to the network stack */ struct netconsole_target { struct list_head list; @@ -137,6 +138,8 @@ struct netconsole_target { bool extended; bool release; struct netpoll np; + /* protected by target_list_lock */ + char buf[MAX_PRINT_CHUNK]; }; #ifdef CONFIG_NETCONSOLE_DYNAMIC @@ -1117,7 +1120,6 @@ static void send_msg_no_fragmentation(struct netconsole_target *nt, int msg_len, int release_len) { - static char buf[MAX_PRINT_CHUNK]; /* protected by target_list_lock */ const char *userdata = NULL; const char *release; @@ -1128,18 +1130,18 @@ static void send_msg_no_fragmentation(struct netconsole_target *nt, if (release_len) { release = init_utsname()->release; - scnprintf(buf, MAX_PRINT_CHUNK, "%s,%s", release, msg); + scnprintf(nt->buf, MAX_PRINT_CHUNK, "%s,%s", release, msg); msg_len += release_len; } else { - memcpy(buf, msg, msg_len); + memcpy(nt->buf, msg, msg_len); } if (userdata) - msg_len += scnprintf(&buf[msg_len], + msg_len += scnprintf(&nt->buf[msg_len], MAX_PRINT_CHUNK - msg_len, "%s", userdata); - send_udp(nt, buf, msg_len); + send_udp(nt, nt->buf, msg_len); } static void append_release(char *buf) @@ -1150,7 +1152,7 @@ static void append_release(char *buf) scnprintf(buf, MAX_PRINT_CHUNK, "%s,", release); } -static void send_fragmented_body(struct netconsole_target *nt, char *buf, +static void send_fragmented_body(struct netconsole_target *nt, const char *msgbody, int header_len, int msgbody_len) { @@ -1181,7 +1183,7 @@ static void send_fragmented_body(struct netconsole_target *nt, char *buf, int this_offset = 0; int this_chunk = 0; - this_header += scnprintf(buf + this_header, + this_header += scnprintf(nt->buf + this_header, MAX_PRINT_CHUNK - this_header, ",ncfrag=%d/%d;", offset, body_len); @@ -1192,7 +1194,8 @@ static void send_fragmented_body(struct netconsole_target *nt, char *buf, MAX_PRINT_CHUNK - this_header); if (WARN_ON_ONCE(this_chunk <= 0)) return; - memcpy(buf + this_header, msgbody + offset, this_chunk); + memcpy(nt->buf + this_header, msgbody + offset, + this_chunk); this_offset += this_chunk; } @@ -1226,13 +1229,13 @@ static void send_fragmented_body(struct netconsole_target *nt, char *buf, */ return; - memcpy(buf + this_header + this_offset, + memcpy(nt->buf + this_header + this_offset, userdata + sent_userdata, this_chunk); this_offset += this_chunk; } - send_udp(nt, buf, this_header + this_offset); + send_udp(nt, nt->buf, this_header + this_offset); offset += this_offset; } } @@ -1242,7 +1245,6 @@ static void send_msg_fragmented(struct netconsole_target *nt, int msg_len, int release_len) { - static char buf[MAX_PRINT_CHUNK]; /* protected by target_list_lock */ int header_len, msgbody_len; const char *msgbody; @@ -1260,16 +1262,16 @@ static void send_msg_fragmented(struct netconsole_target *nt, * "ncfrag=/" */ if (release_len) - append_release(buf); + append_release(nt->buf); /* Copy the header into the buffer */ - memcpy(buf + release_len, msg, header_len); + memcpy(nt->buf + release_len, msg, header_len); header_len += release_len; /* for now on, the header will be persisted, and the msgbody * will be replaced */ - send_fragmented_body(nt, buf, msgbody, header_len, msgbody_len); + send_fragmented_body(nt, msgbody, header_len, msgbody_len); } /** From patchwork Thu Feb 6 11:05:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13962851 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 C567C2288D0; Thu, 6 Feb 2025 11:06:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839972; cv=none; b=UiiUDH7uDYN7aWamuUmjHlvuOUr20yGVenrlqun4aYQeQIPxYRxvPqIcX0fHVeWKRdMEpryhJJ2vE2CHtUI2TcEM0HEhq5+ERYRCzZvQaDUXLXD3v5jxEPdKYEbOTZzVIR2O1+2dM0BDCtt9xsPZvVH6sPPPz8rUchvntulbCNk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839972; c=relaxed/simple; bh=s3o30XJqTZd4IAwBHkjaql//dyYsAJ8dD3R0opkOV9Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Pkt7DcIAXQMNR+KwaXGvZrXxos+XSa7o7DEWm9YDyp8yoEu9pwdqLphJDfkcxP+o/NJ5XHq07dRQgZEplr6mXgPC/twu0vVG2bUtpv6FFALVarIqYG42lczYPd4JlaD8NeYUqIoVpScQoO8JWh2Ui6pEKIrtCG9/ENf5ldnfNBM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.218.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-ab698eae2d9so144303366b.0; Thu, 06 Feb 2025 03:06:09 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738839968; x=1739444768; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=T+iQNYrKRhquwRZ3wZW9DgvaA0aTVYyApstD6smfbSM=; b=RkPjpcgeoXviRvdvSDrHhvgHWifVz8KcslxiOyiDqJyMdNIGgMv9mEoCzEk+xCginp 7GS9IblgTtPwysKU9sgMq30hO7q6Np+cIJCOi74jAnY/bgkJnUL8CJaFVYFEcwNuCCST Uk024/tRgrthTnBCj7NlsQzvpNvl0if7/4EkEy90jeJwWEMMP8oxbE7Gzz00kiV+OCEk VYXg66PZ3ChtIq7A+w3GASV87yC7QgmgisAeAcmCJ8vwVmZNIKZ6jHd9/vUg782LIHSU hJkN8psI2EOXeTtztikTiXpZeJqH3Hhug1xoY3hxj2JFu5223row2osiqlTTFGRjDk8V aE0w== X-Forwarded-Encrypted: i=1; AJvYcCUVUxk/52YvTb1dVIG3/3neYMkvrPObs5MePSMSSoeqAsFYYqhhc9gCn+7Bg6TSpe+g+zDUjea1rxvOjpYOH0SO@vger.kernel.org, AJvYcCUypR8epUsEKPi2/g6mI5/d419z1A8Lyc2Goiipl15rhiuRVLLaGo5O3JgUMPgtjRd+urryvLtBvh0=@vger.kernel.org, AJvYcCXgWKVCen8TOh6igzu4r3spUT6BqsBL+6pPlFiTtdAHD/ARDy3RbnQvxSd2gtA6gs+OnlVvIV90+QariGxn@vger.kernel.org X-Gm-Message-State: AOJu0Ywb/iBw0cFBvSkCpPwur5YOniMVK2ImYAVUIKMWmAm461DrLkK8 r4dtFgz1/k4R/r9ts6ywe/kFMIiDcdxji+7MAt87RwrXX5Hz8M2F X-Gm-Gg: ASbGncvZ+8cN/NtvO9GACl+kXnPnlyZutJ2O1GatbkNYuY/ShWRn9iOD6MxQgzkL/c8 c64EXjl/gzfSmrx5lJTkcFaNdgCHyvMD9+sH1zejt+QR3YhrTP4Gy0XgsFBb9JR8SHtJKaTwSCV WYYkcKudntIgKYQtX8ua5ea158sf/TBjFy+qijgkRS7ns3xBebgkx1w3e6yIVkERfznZTGitkkP hVGMx2d1TbIYlW8AKkhObHHY6i57AyiXy4nGG0tUAms/66H2zoiVOyhmJLR+iExp/BN3FFHbcsf tV4= X-Google-Smtp-Source: AGHT+IE9aB4a488ge8KLh4aVgnhJ7it4TMKbMKIugIlJdalRqklBgO5JsMPaimLa0p2Noga12ny/Aw== X-Received: by 2002:a17:906:794c:b0:ab6:d575:3c53 with SMTP id a640c23a62f3a-ab75e213fd5mr731889066b.11.1738839967857; Thu, 06 Feb 2025 03:06:07 -0800 (PST) Received: from localhost ([2a03:2880:30ff::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab772f89277sm83693066b.58.2025.02.06.03.06.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 03:06:07 -0800 (PST) From: Breno Leitao Date: Thu, 06 Feb 2025 03:05:53 -0800 Subject: [PATCH net-next v5 2/8] netconsole: Rename userdata to extradata Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250206-netcon_cpu-v5-2-859b23cc3826@debian.org> References: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> In-Reply-To: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Jonathan Corbet , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, rdunlap@infradead.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=10589; i=leitao@debian.org; h=from:subject:message-id; bh=s3o30XJqTZd4IAwBHkjaql//dyYsAJ8dD3R0opkOV9Q=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnpJeaNuMPkgEGAsdqOpTbpT6MA9JWbcqbt1tbU xHA/cR5fSmJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6SXmgAKCRA1o5Of/Hh3 bWdxD/9WZVt4n+ch1NDHNPDLgGZTEyu9pEE8SyRBomlHtysv5xsVzWz/Vttlf6CHTlvRKqbon4u f0w59NIxAZU/uh6ez5V+6J2Nf3AQ0QOGioUKseRoG4wBrhZIuFgK+bNkPGj8WlS7X2A/iCvPTGj DaMhBm5pex7a/wfZNiYjf1JvdWVlQESa7BmrXCZKkUaQ1lcp9oGI4A5hlXkmP2g5azEUYM3cz5E m2LM2tbw0R4CLoODI9mr8w24FG8uVHfYEG1fBh7Hr6DNv7ozgRtgu6vNRqTSPOZXAOqqUrvpXXf eWn0wjg0WjXeKdpAKLjEjJyIbXtdW3cFL2VAQVkS3JfNm4bh1FJc6XTNgdnIHi76jrfbwoN744w RUGPpavSVY4+mt646VNIjqHCOVRvXACFRs0yujHZxT5T6xHtWOgvQI4F/DeoLPn/heugHdUqghv mBvCocNaDqWvQDNMJXstI84UKUjuCHLcM2qE7UKSXcjsi2KpNhkUIvxozg/9CJb58ns9OCdifEw RPQlWQ4Cd4DwHHVe5sA6/QoXrKnOy86Z2bUcLJ3a3Wnlf6usOkzjvPQ2ud8f0yMMP2dxXu/I+z2 3NsVeHMWw0FXhv2RBQ1pBL60RJ8S3hJcuaZS8Y0iMV2bsk2CCcusvbmvFa4SixwNFBaQoEicmdP 48KLSn+q1sSo4xQ== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Patchwork-Delegate: kuba@kernel.org Rename "userdata" to "extradata" since this structure will hold both user and system data in future patches. Keep "userdata" term only for data that comes from userspace (configfs), while "extradata" encompasses both userdata and future kerneldata. These are the rules of the design 1. extradata_complete will hold userdata and sysdata (coming) 2. sysdata will come after userdata_length 3. extradata_complete[userdata_length] string will be replaced at every message 5. userdata is replaced when configfs changes (update_userdata()) 6. sysdata is replaced at every message Example: extradata_complete = "userkey=uservalue cpu=42" userdata_length = 17 sysdata_length = 7 (space (" ") is part of sysdata) Since sysdata is still not available, you will see the following in the send functions: extradata_len = nt->userdata_length; The upcoming patches will, which will add support for sysdata, will change it to: extradata_len = nt->userdata_length + sysdata_len; Signed-off-by: Breno Leitao Reviewed-by: Simon Horman --- drivers/net/netconsole.c | 87 ++++++++++++++++++++++++------------------------ 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 034caaa26563504357f859000678af2037003c25..7f05c7f74c31ce26a7329c784bd99305b7bea0e8 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -45,12 +45,12 @@ MODULE_DESCRIPTION("Console driver for network interfaces"); MODULE_LICENSE("GPL"); #define MAX_PARAM_LENGTH 256 -#define MAX_USERDATA_ENTRY_LENGTH 256 -#define MAX_USERDATA_VALUE_LENGTH 200 +#define MAX_EXTRADATA_ENTRY_LEN 256 +#define MAX_EXTRADATA_VALUE_LEN 200 /* The number 3 comes from userdata entry format characters (' ', '=', '\n') */ -#define MAX_USERDATA_NAME_LENGTH (MAX_USERDATA_ENTRY_LENGTH - \ - MAX_USERDATA_VALUE_LENGTH - 3) -#define MAX_USERDATA_ITEMS 16 +#define MAX_EXTRADATA_NAME_LEN (MAX_EXTRADATA_ENTRY_LEN - \ + MAX_EXTRADATA_VALUE_LEN - 3) +#define MAX_EXTRADATA_ITEMS 16 #define MAX_PRINT_CHUNK 1000 static char config[MAX_PARAM_LENGTH]; @@ -102,8 +102,8 @@ struct netconsole_target_stats { * @list: Links this target into the target_list. * @group: Links us into the configfs subsystem hierarchy. * @userdata_group: Links to the userdata configfs hierarchy - * @userdata_complete: Cached, formatted string of append - * @userdata_length: String length of userdata_complete + * @extradata_complete: Cached, formatted string of append + * @userdata_length: String length of usedata in extradata_complete. * @stats: Packet send stats for the target. Used for debugging. * @enabled: On / off knob to enable / disable target. * Visible from userspace (read-write). @@ -130,7 +130,7 @@ struct netconsole_target { #ifdef CONFIG_NETCONSOLE_DYNAMIC struct config_group group; struct config_group userdata_group; - char userdata_complete[MAX_USERDATA_ENTRY_LENGTH * MAX_USERDATA_ITEMS]; + char extradata_complete[MAX_EXTRADATA_ENTRY_LEN * MAX_EXTRADATA_ITEMS]; size_t userdata_length; #endif struct netconsole_target_stats stats; @@ -690,7 +690,7 @@ static ssize_t remote_mac_store(struct config_item *item, const char *buf, struct userdatum { struct config_item item; - char value[MAX_USERDATA_VALUE_LENGTH]; + char value[MAX_EXTRADATA_VALUE_LEN]; }; static struct userdatum *to_userdatum(struct config_item *item) @@ -727,13 +727,13 @@ static void update_userdata(struct netconsole_target *nt) /* Clear the current string in case the last userdatum was deleted */ nt->userdata_length = 0; - nt->userdata_complete[0] = 0; + nt->extradata_complete[0] = 0; list_for_each(entry, &nt->userdata_group.cg_children) { struct userdatum *udm_item; struct config_item *item; - if (WARN_ON_ONCE(child_count >= MAX_USERDATA_ITEMS)) + if (WARN_ON_ONCE(child_count >= MAX_EXTRADATA_ITEMS)) break; child_count++; @@ -741,19 +741,19 @@ static void update_userdata(struct netconsole_target *nt) udm_item = to_userdatum(item); /* Skip userdata with no value set */ - if (strnlen(udm_item->value, MAX_USERDATA_VALUE_LENGTH) == 0) + if (strnlen(udm_item->value, MAX_EXTRADATA_VALUE_LEN) == 0) continue; - /* This doesn't overflow userdata_complete since it will write - * one entry length (1/MAX_USERDATA_ITEMS long), entry count is + /* This doesn't overflow extradata_complete since it will write + * one entry length (1/MAX_EXTRADATA_ITEMS long), entry count is * checked to not exceed MAX items with child_count above */ - complete_idx += scnprintf(&nt->userdata_complete[complete_idx], - MAX_USERDATA_ENTRY_LENGTH, " %s=%s\n", + complete_idx += scnprintf(&nt->extradata_complete[complete_idx], + MAX_EXTRADATA_ENTRY_LEN, " %s=%s\n", item->ci_name, udm_item->value); } - nt->userdata_length = strnlen(nt->userdata_complete, - sizeof(nt->userdata_complete)); + nt->userdata_length = strnlen(nt->extradata_complete, + sizeof(nt->extradata_complete)); } static ssize_t userdatum_value_store(struct config_item *item, const char *buf, @@ -764,7 +764,7 @@ static ssize_t userdatum_value_store(struct config_item *item, const char *buf, struct userdata *ud; ssize_t ret; - if (count > MAX_USERDATA_VALUE_LENGTH) + if (count > MAX_EXTRADATA_VALUE_LEN) return -EMSGSIZE; mutex_lock(&dynamic_netconsole_mutex); @@ -813,13 +813,13 @@ static struct config_item *userdatum_make_item(struct config_group *group, struct userdata *ud; size_t child_count; - if (strlen(name) > MAX_USERDATA_NAME_LENGTH) + if (strlen(name) > MAX_EXTRADATA_NAME_LEN) return ERR_PTR(-ENAMETOOLONG); ud = to_userdata(&group->cg_item); nt = userdata_to_target(ud); child_count = list_count_nodes(&nt->userdata_group.cg_children); - if (child_count >= MAX_USERDATA_ITEMS) + if (child_count >= MAX_EXTRADATA_ITEMS) return ERR_PTR(-ENOSPC); udm = kzalloc(sizeof(*udm), GFP_KERNEL); @@ -1120,11 +1120,11 @@ static void send_msg_no_fragmentation(struct netconsole_target *nt, int msg_len, int release_len) { - const char *userdata = NULL; + const char *extradata = NULL; const char *release; #ifdef CONFIG_NETCONSOLE_DYNAMIC - userdata = nt->userdata_complete; + extradata = nt->extradata_complete; #endif if (release_len) { @@ -1136,10 +1136,10 @@ static void send_msg_no_fragmentation(struct netconsole_target *nt, memcpy(nt->buf, msg, msg_len); } - if (userdata) + if (extradata) msg_len += scnprintf(&nt->buf[msg_len], MAX_PRINT_CHUNK - msg_len, - "%s", userdata); + "%s", extradata); send_udp(nt, nt->buf, msg_len); } @@ -1156,24 +1156,25 @@ static void send_fragmented_body(struct netconsole_target *nt, const char *msgbody, int header_len, int msgbody_len) { - const char *userdata = NULL; + int sent_extradata, preceding_bytes; + const char *extradata = NULL; int body_len, offset = 0; - int userdata_len = 0; + int extradata_len = 0; #ifdef CONFIG_NETCONSOLE_DYNAMIC - userdata = nt->userdata_complete; - userdata_len = nt->userdata_length; + extradata = nt->extradata_complete; + extradata_len = nt->userdata_length; #endif /* body_len represents the number of bytes that will be sent. This is * bigger than MAX_PRINT_CHUNK, thus, it will be split in multiple * packets */ - body_len = msgbody_len + userdata_len; + body_len = msgbody_len + extradata_len; /* In each iteration of the while loop below, we send a packet * containing the header and a portion of the body. The body is - * composed of two parts: msgbody and userdata. We keep track of how + * composed of two parts: msgbody and extradata. We keep track of how * many bytes have been sent so far using the offset variable, which * ranges from 0 to the total length of the body. */ @@ -1201,36 +1202,36 @@ static void send_fragmented_body(struct netconsole_target *nt, /* msgbody was finally written, either in the previous * messages and/or in the current buf. Time to write - * the userdata. + * the extradata. */ msgbody_written |= offset + this_offset >= msgbody_len; - /* Msg body is fully written and there is pending userdata to - * write, append userdata in this chunk + /* Msg body is fully written and there is pending extradata to + * write, append extradata in this chunk */ if (msgbody_written && offset + this_offset < body_len) { /* Track how much user data was already sent. First * time here, sent_userdata is zero */ - int sent_userdata = (offset + this_offset) - msgbody_len; + sent_extradata = (offset + this_offset) - msgbody_len; /* offset of bytes used in current buf */ - int preceding_bytes = this_chunk + this_header; + preceding_bytes = this_chunk + this_header; - if (WARN_ON_ONCE(sent_userdata < 0)) + if (WARN_ON_ONCE(sent_extradata < 0)) return; - this_chunk = min(userdata_len - sent_userdata, + this_chunk = min(extradata_len - sent_extradata, MAX_PRINT_CHUNK - preceding_bytes); if (WARN_ON_ONCE(this_chunk < 0)) /* this_chunk could be zero if all the previous * message used all the buffer. This is not a - * problem, userdata will be sent in the next + * problem, extradata will be sent in the next * iteration */ return; memcpy(nt->buf + this_header + this_offset, - userdata + sent_userdata, + extradata + sent_extradata, this_chunk); this_offset += this_chunk; } @@ -1287,17 +1288,17 @@ static void send_msg_fragmented(struct netconsole_target *nt, static void send_ext_msg_udp(struct netconsole_target *nt, const char *msg, int msg_len) { - int userdata_len = 0; + int extradata_len = 0; int release_len = 0; #ifdef CONFIG_NETCONSOLE_DYNAMIC - userdata_len = nt->userdata_length; + extradata_len = nt->userdata_length; #endif if (nt->release) release_len = strlen(init_utsname()->release) + 1; - if (msg_len + release_len + userdata_len <= MAX_PRINT_CHUNK) + if (msg_len + release_len + extradata_len <= MAX_PRINT_CHUNK) return send_msg_no_fragmentation(nt, msg, msg_len, release_len); return send_msg_fragmented(nt, msg, msg_len, release_len); From patchwork Thu Feb 6 11:05:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13962852 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (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 305DC2288D7; Thu, 6 Feb 2025 11:06:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839973; cv=none; b=QED9ZsF6gtvTtl1Z8dPMGbyI3+z+HRLDwsE9krv9rC9E+uQNR/KVvddVLcdqDkfAN/nAoElM7xOuasFSdMd2lgS1/QJ0qniJ9yvpKAjV6sJCSabG59yvVhgWawfwBJXJCf/rDR+HUX1AlDsM5CL6wk1L0STTb7ZRHc8Wym/55w0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839973; c=relaxed/simple; bh=+niiaHiskkhsTnTEZJ4wU+lHWH66HqehWyev2K0YeO8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ag1VjMY4qeVJufAS5W4Gxv74JD4YQqHy2ZGkcUCsBEdPQxZD62q6PZfOT37H7jVTNSVniZ8M14Hunq+MWjd8Zt1yPMoJHb7HxSgktIXMrg5eiHtv3oU75NhB8hIaAtsdIc9tN+7yT+EfLZiIJoiEq5NmyyFqfmWOTzW/J7PnD1o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.208.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-5dce4a5d8a0so1378037a12.1; Thu, 06 Feb 2025 03:06:11 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738839970; x=1739444770; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=H/paCx3x7C5/fSrkE+t0Z5vy0JRj846fYPbO5BYY5RM=; b=hvt70c849CD/J4D6i4+nVfKxtZlpMfW7AN4NzWo48kMLUAediXnzLXuWaTG0TGdPcE u3YrVm/6WvyMc2546W/7EDmW9s2yOdbqEl6erzkrCIFKGNBQI889DwP0wo3mcLHasYRp C5GbDga7pmUeix80elMCf9piUwI5NXa+V7njqt7RDhBv/axJspYaRa0T+IEPgKZcXvv3 p3ED8aKvEWB6fSSQqUD4l3yg9u0uoMzWi5SDPKvecQk7JjO3CJE0kEjNdmMH2dCU01q6 dIi/MGO/Q6CFWbrmiIZKgynuoAXJT+GLoPfHknMZsdX8a67rYA0X4hPvmpFzWIERi7zs zk2w== X-Forwarded-Encrypted: i=1; AJvYcCUFnhC0jeRZsobGYJ0HA5nqrCzsCq/8NS90ZrfW2NUSOd+mKijzwrgZXRnjYwaUv99I+20lbcisVVgn9qiC@vger.kernel.org, AJvYcCXWteVEGH5Gkv7kr7USAVrGGYH0w3xTWTpr/Dne4ea9BTIv5ecupieBwXFZYLk6A5qFQ7bseJo930wpuA5HCCsn@vger.kernel.org, AJvYcCXqKIW1m9YfL9qz4/P8X5CN0isX3tYqzNL1WIJyIsk/xQnSi5+7+CKfDRG1y+M6CqxrBGk2sOtkM3I=@vger.kernel.org X-Gm-Message-State: AOJu0Yy8je6c7citG6ZQmkB+Skje8RCgs7FhYeAjAbpGANMBwC9w7z4x 9Xgqm2ZRcGPktkOre2bFSIaVzhVbzuS80vewk8u+ZU+WlwshcARq X-Gm-Gg: ASbGncs/NcRap/oq3DNTSoADc16cQykfDva7m3NW2bMyXAmYcTj8oD3IO+4dSAAI71v NXNlhVvqy+LNU9MEdDx+PpUaXWQO64ESKt3TvMV1mse3Yppu6aCKQ19K5yYB4o5xoOiKtpvr0+c MrceEzR5mXGF1y4vqCYgEhZuUEY7iOkAEPe4WDjXGZvJwY5RDFevaITUJzzaPPmEEDdCNLh7ppO H4fMi/WD0QgKAk1lysbSaU2i96lv2NrgAtqqWOeDaF2PAXrwuUV+SwlQIgtWokrU2lY7LGbz7EV UKs= X-Google-Smtp-Source: AGHT+IEB23Ju3E9DJMpJQ7MTISnaIRXQuB9GVRcsqItI9Ob6K6xPb6asE1TwgWbZmQ6kqdi3ciO6Uw== X-Received: by 2002:a05:6402:2812:b0:5d0:bf5e:eb8 with SMTP id 4fb4d7f45d1cf-5dcdb762d40mr14605385a12.23.1738839970108; Thu, 06 Feb 2025 03:06:10 -0800 (PST) Received: from localhost ([2a03:2880:30ff::]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dcf6c9f93csm693345a12.51.2025.02.06.03.06.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 03:06:08 -0800 (PST) From: Breno Leitao Date: Thu, 06 Feb 2025 03:05:54 -0800 Subject: [PATCH net-next v5 3/8] netconsole: Helper to count number of used entries Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250206-netcon_cpu-v5-3-859b23cc3826@debian.org> References: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> In-Reply-To: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Jonathan Corbet , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, rdunlap@infradead.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2043; i=leitao@debian.org; h=from:subject:message-id; bh=+niiaHiskkhsTnTEZJ4wU+lHWH66HqehWyev2K0YeO8=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnpJea/JQi1p4uc8Fv+crwWRCulPgJxkHpLTBfY tzjTiUmvQuJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6SXmgAKCRA1o5Of/Hh3 bcs0D/9MAY7WpEi2yV+6kRBfWRZCF17lxg9vANvh891T6tnI1IBvZUkWGxJv2UwYsz96TbkQdOG Axk/KUmJkuo/wuXQlY6OpMHhMWlURmcpdOlOInmvxD7WS2f/7pBOcrjc2r3UWZE04snAVouAld1 mQpPBsceCnYjXvHsJuQFZFWu4FP4DtZEUD8fImt4Fgunwj9fOQu2HolzJ3AxTMB+pyCEdfgUX/w glWZYsnKaQ9xcbIFOWow/0ImdnkhirGh4NZ4v0BhRPlxtVX1Bs/rlmQRjKIkCXc0jJKWA2XWWq9 miQ8EAnywFvyb6NKgAkZMI3GsUoLMrwG76c7BAasRFgy08mxP6QidfTIGaf56hOXCgy//gUtw3K bWluO7Iafv5sqQyxyIY+AcfGvSc1bplNNcZGXLMQsty9UZoRoAmxO2uJoZzdRIdpCyRvfn0aJqI 67L1mJrzw2qkXCTDBeNmNW6f+qnCxPjj8FuCMBVbXxYdANActgtDkG9Ko5AwE56ziSYQCVzCGOs SGthkYCoI+dB7eGuGtDOG7auzu5oWUmDT8B68kL98q5n2mb4Lt6zcFaqvX8sBRVRI1Ee/TFJVtR mMy16/eUWGdmaNRi38TX23AN5PY5fS1ewKbiTY2ddoIWpd/SYEPwJPu9vGWhqOZ5z/M2lAS0bQj /wM6ykULEwJK3kw== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Patchwork-Delegate: kuba@kernel.org Add a helper function nr_extradata_entries() to count the number of used extradata entries in a netconsole target. This refactors the duplicate code for counting entries into a single function, which will be reused by upcoming CPU sysdata changes. The helper uses list_count_nodes() to count the number of children in the userdata group configfs hierarchy. Signed-off-by: Breno Leitao Reviewed-by: Simon Horman --- drivers/net/netconsole.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 7f05c7f74c31ce26a7329c784bd99305b7bea0e8..15daaba65c8827bf399f0623cc42d310626cbf68 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -662,6 +662,16 @@ static ssize_t remote_ip_store(struct config_item *item, const char *buf, return ret; } +/* Count number of entries we have in extradata. + * This is important because the extradata_complete only supports + * MAX_EXTRADATA_ITEMS entries. Before enabling any new {user,sys}data + * feature, number of entries needs to checked for available space. + */ +static size_t count_extradata_entries(struct netconsole_target *nt) +{ + return list_count_nodes(&nt->userdata_group.cg_children); +} + static ssize_t remote_mac_store(struct config_item *item, const char *buf, size_t count) { @@ -811,15 +821,13 @@ static struct config_item *userdatum_make_item(struct config_group *group, struct netconsole_target *nt; struct userdatum *udm; struct userdata *ud; - size_t child_count; if (strlen(name) > MAX_EXTRADATA_NAME_LEN) return ERR_PTR(-ENAMETOOLONG); ud = to_userdata(&group->cg_item); nt = userdata_to_target(ud); - child_count = list_count_nodes(&nt->userdata_group.cg_children); - if (child_count >= MAX_EXTRADATA_ITEMS) + if (count_extradata_entries(nt) >= MAX_EXTRADATA_ITEMS) return ERR_PTR(-ENOSPC); udm = kzalloc(sizeof(*udm), GFP_KERNEL); From patchwork Thu Feb 6 11:05:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13962853 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) (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 DC45122DFA7; Thu, 6 Feb 2025 11:06:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839975; cv=none; b=G06rOyTbymzwTC70+RViq3SoWShZ6C8hbVj/r5/TofGa73btozFS0KzrH7gRKvHCUJhTsYjo4uijYdQkyu+tk/f2ED0F79yEVOr6Xzhx3U1c5XnXuALMGFcxtNdhiuhrZno/KK0DBrnF4w1WSPFEuMUUI0IrTqq9q3n5egSbe9U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839975; c=relaxed/simple; bh=8WgGoItVdHl9J4C57gZoEzhi4IxKCuC308ZMbUO/wIg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X6fIRa3p81XWEy3Pwg2mBEvl9G6c8s3kglzHG/xcBDAX2qvukX/8j/loN9o9YU+koB6cuNlu28o/fAKgQKHrbmXG6w5YA8sJdtKHSVAxfWwR/EDaLB3NdZ7Gt61oJx3bbK/OQJJJSRFXvxboom8Am7rQ9LKN0VcIJ1m3zgeiwZ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.218.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-ab77db6334dso34595466b.0; Thu, 06 Feb 2025 03:06:13 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738839972; x=1739444772; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JHcRRqsjgJ8c783nCO10r0mtRcmvTaVMkiSUk9PgkzI=; b=Ny/98S8H2ilpBjqJ/simBTSshAgnTn3qqPTRPvcx51GW4oaNibyQ22wlDZbWxwUpjq YJZviBpC756elLbqNEjbcYnBPvW3AkNfwfwtLYS+rkbTkPT39LQSHCkSmZ1iidLemVxk QmCpNtdwlsSOrBTTQ6Al9OcBC7NCZEjLxsRCXssMNS84+jKWdTTAmBifBsar4ZRCRi9u mwN4JAPMFO0fZo2TpVBE2CEcK76pNUbesTqvbW8A+0l3PCZSz8koyEgoAKDErCAM3C4Y hhxhi8umJDsDYQ3iHxBacYLELsLRFXIOFVIProMTtr2FDPwu0R4kA5OKf+PfudqmAiH/ +ZUA== X-Forwarded-Encrypted: i=1; AJvYcCUhlksNvKF2KwjkO66SFjqVHiAZWTWjlmzW0anP/iZYY4n4JWBpe4ttiRhwvtGDtNgfdNn73YUHv1U=@vger.kernel.org, AJvYcCWbTRJQfJAgwUvEugt2VxKNR5DT8CNbIWWgg9bGCCbeFDj9RamSj62UbR1VDfGks6HhvnncWUbQ9ELq9hZcRqOH@vger.kernel.org, AJvYcCWeRHDJtl7OZ++8BHBxEsIWj8YX9ziQRKLaijmM3haMyfb7Qem4Kivimw8OnzrYXrT9qC7q9RWcGhYnerNk@vger.kernel.org X-Gm-Message-State: AOJu0YzpuoOf+m4G5t9biLMkhz1RQimvnmOnst2T+Oq9BdHveFgAtyMF /7djF+W8GgMm4q2g3Nj+ibdXaaW81j62tl9LJq/YsNHKKwKzf8o0 X-Gm-Gg: ASbGncspJMHZV4UnuRyVXVDYl9FeITiTuQBirkIyuRMND4ob1AsOsmxxyOR3RJ8h5X9 dHH3blnmqiyvULHERsy2RiGxCL/hnx5B8GmOQf6MhDANFKBr9ry7c93GCuE/j0V1Ao1CceUQf6l Wgs4Mh93BUq0/dvHU2uLaGGJ3kti0wuQrPpgKlVfJhQVSjYnVa57cSf0Nae2uDTsBQN1OGJ63wi L4DA4C+HMbR0norBBb7HkjBoBkyTHr9rVRPUpJBJ8Prky9ebD8CQQlf+vzMuPFOOykCyo8Ahkny VxhhLA== X-Google-Smtp-Source: AGHT+IEmud3FIGHF+4SlFQt9myGTdAuU9koYy2fbnT1VzOIXCMCZuOxnotksKZ4hI1YdwSdONukCTA== X-Received: by 2002:a17:907:2d22:b0:ab6:d7c4:fc7d with SMTP id a640c23a62f3a-ab75e35dc0dmr574486666b.39.1738839971703; Thu, 06 Feb 2025 03:06:11 -0800 (PST) Received: from localhost ([2a03:2880:30ff:3::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab772f8443asm81985066b.45.2025.02.06.03.06.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 03:06:11 -0800 (PST) From: Breno Leitao Date: Thu, 06 Feb 2025 03:05:55 -0800 Subject: [PATCH net-next v5 4/8] netconsole: Introduce configfs helpers for sysdata features Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250206-netcon_cpu-v5-4-859b23cc3826@debian.org> References: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> In-Reply-To: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Jonathan Corbet , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, rdunlap@infradead.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4892; i=leitao@debian.org; h=from:subject:message-id; bh=8WgGoItVdHl9J4C57gZoEzhi4IxKCuC308ZMbUO/wIg=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnpJea7DpL0dTgVy9ZzQ+YDcCrGJI1xzHR3Jf6S DbeMYlrtaSJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6SXmgAKCRA1o5Of/Hh3 bdL9EACsc4YLfh9tGNjOu2UWrTiEItHZwD40NFC4t44Q1UvzOkuHhzdmfrg1Pd+Djj6XVOCZVdA Vc9q0bsz/zw0IlhzBqzmfiQgBmfldc6aBwG8dTviX0KHqYBkkM9n63T+2MJwmzmo+Fe0Wh9UQS2 EjMRwBF/UB/IburBYZ0YY/9DNUn83Y0b7FOZnG4+3WoZwDvXycO5MpMusmMTAgKGrJU9hVQ7Z/J OAZQmf9FzruWJ2gfz7xP0UGZvtHjPpkh9UeWSkwDorHu8+/Lrd9/4c655Ghqs6eG7w2G9072773 oTS95Ffg/73LJ0Wm4+41pDh/7JRCAA1xd25wfIRDugPoYeKRwXj20Mq+Fyo0SRu1YfRofhQ5bMm wxnLPBWv8jUQBcegpbhZoCYc0ECFbw9y0A00PYxU/uf7i8jVSK3Y52g2zPVM8d2bqcgpLXzb/Vz tVHWVrH9s1HjBYtzvqc3T6AhPJBiE2TMsvX6wrTaz21y1av+ASm0VskXmJWF2T1ar2wZC264huc uuSD0U6qLrj96RRPq8anY2431QuLq7FxaJ32I2vEP4vgOf0QE6imNZvjYpW4eiSoAj+5SR4SCsR V+d5p41jM+KeQOx2sh79p1812wfmoCzgm2V1OUxQpg0GUMJhbNeUUn3jcAbShZDOJoljs6OkONX OpZxU9Haqi6G7Zw== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Patchwork-Delegate: kuba@kernel.org This patch introduces a bitfield to store sysdata features in the netconsole_target struct. It also adds configfs helpers to enable or disable the CPU_NR feature, which populates the CPU number in sysdata. The patch provides the necessary infrastructure to set or unset the CPU_NR feature, but does not modify the message itself. Signed-off-by: Breno Leitao Reviewed-by: Simon Horman --- drivers/net/netconsole.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 15daaba65c8827bf399f0623cc42d310626cbf68..710330ae8ee462083dbb4aa889cb0ba0cb5a7475 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -97,6 +97,15 @@ struct netconsole_target_stats { struct u64_stats_sync syncp; }; +/* Features enabled in sysdata. Contrary to userdata, this data is populated by + * the kernel. The fields are designed as bitwise flags, allowing multiple + * features to be set in sysdata_fields. + */ +enum sysdata_feature { + /* Populate the CPU that sends the message */ + CPU_NR = BIT(0), +}; + /** * struct netconsole_target - Represents a configured netconsole target. * @list: Links this target into the target_list. @@ -104,6 +113,7 @@ struct netconsole_target_stats { * @userdata_group: Links to the userdata configfs hierarchy * @extradata_complete: Cached, formatted string of append * @userdata_length: String length of usedata in extradata_complete. + * @sysdata_fields: Sysdata features enabled. * @stats: Packet send stats for the target. Used for debugging. * @enabled: On / off knob to enable / disable target. * Visible from userspace (read-write). @@ -132,6 +142,8 @@ struct netconsole_target { struct config_group userdata_group; char extradata_complete[MAX_EXTRADATA_ENTRY_LEN * MAX_EXTRADATA_ITEMS]; size_t userdata_length; + /* bit-wise with sysdata_feature bits */ + u32 sysdata_fields; #endif struct netconsole_target_stats stats; bool enabled; @@ -399,6 +411,19 @@ static ssize_t transmit_errors_show(struct config_item *item, char *buf) return sysfs_emit(buf, "%llu\n", xmit_drop_count + enomem_count); } +/* configfs helper to display if cpu_nr sysdata feature is enabled */ +static ssize_t sysdata_cpu_nr_enabled_show(struct config_item *item, char *buf) +{ + struct netconsole_target *nt = to_target(item->ci_parent); + bool cpu_nr_enabled; + + mutex_lock(&dynamic_netconsole_mutex); + cpu_nr_enabled = !!(nt->sysdata_fields & CPU_NR); + mutex_unlock(&dynamic_netconsole_mutex); + + return sysfs_emit(buf, "%d\n", cpu_nr_enabled); +} + /* * This one is special -- targets created through the configfs interface * are not enabled (and the corresponding netpoll activated) by default. @@ -793,7 +818,62 @@ static ssize_t userdatum_value_store(struct config_item *item, const char *buf, return ret; } +/* disable_sysdata_feature - Disable sysdata feature and clean sysdata + * @nt: target that is disabling the feature + * @feature: feature being disabled + */ +static void disable_sysdata_feature(struct netconsole_target *nt, + enum sysdata_feature feature) +{ + nt->sysdata_fields &= ~feature; + nt->extradata_complete[nt->userdata_length] = 0; +} + +/* configfs helper to sysdata cpu_nr feature */ +static ssize_t sysdata_cpu_nr_enabled_store(struct config_item *item, + const char *buf, size_t count) +{ + struct netconsole_target *nt = to_target(item->ci_parent); + bool cpu_nr_enabled, curr; + ssize_t ret; + + ret = kstrtobool(buf, &cpu_nr_enabled); + if (ret) + return ret; + + mutex_lock(&dynamic_netconsole_mutex); + curr = nt->sysdata_fields & CPU_NR; + if (cpu_nr_enabled == curr) + /* no change requested */ + goto unlock_ok; + + if (cpu_nr_enabled && + count_extradata_entries(nt) >= MAX_EXTRADATA_ITEMS) { + /* user wants the new feature, but there is no space in the + * buffer. + */ + ret = -ENOSPC; + goto unlock; + } + + if (cpu_nr_enabled) + nt->sysdata_fields |= CPU_NR; + else + /* This is special because extradata_complete might have + * remaining data from previous sysdata, and it needs to be + * cleaned. + */ + disable_sysdata_feature(nt, CPU_NR); + +unlock_ok: + ret = strnlen(buf, count); +unlock: + mutex_unlock(&dynamic_netconsole_mutex); + return ret; +} + CONFIGFS_ATTR(userdatum_, value); +CONFIGFS_ATTR(sysdata_, cpu_nr_enabled); static struct configfs_attribute *userdatum_attrs[] = { &userdatum_attr_value, @@ -853,6 +933,7 @@ static void userdatum_drop(struct config_group *group, struct config_item *item) } static struct configfs_attribute *userdata_attrs[] = { + &sysdata_attr_cpu_nr_enabled, NULL, }; From patchwork Thu Feb 6 11:05:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13962854 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (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 459AC22E3EC; Thu, 6 Feb 2025 11:06:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839977; cv=none; b=Th3jzp6gOLXyk94blQcXil2YFp1iMnGH+82cdT9qxWk3p1uucw8q0As1SuXh3wYdyHMDscRd+lt0AffrMkM5HvWO7ZkYF0w+ZkDhY1VphhPu10qcq0Vj57xVySo07g8eGzzqcmch3cKAOOBd6Bgq9S4xe9c0h7GrJ+MmBvdZ51M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839977; c=relaxed/simple; bh=146+Fd7GMEHjIB2x3rHlp8/1LduCZ88lYbm9gyDIpfE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JxvVMOeq6+IALUnMtISrkls1onsPw4oiZG/9d3IZCsApTyh35UrHuGHsw/ceSEuAGnQpZQRpKXSXXIT2uE8X2qARlu7VKS2bO2fbBoXUNMv7UnMlsLKgPaFXbCoSBZ1K1+81iH2pKygKfFLgo8IcOCFLfD0jTpLMVvob0mJ8Ds8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.208.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-5dcedee4f7bso1188600a12.0; Thu, 06 Feb 2025 03:06:14 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738839973; x=1739444773; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=v60yw++ddCI3iUtxUgKCBy+AvjYXItQZQ0qYmmzPQnw=; b=P4i8CDxsbtUCnaF+yiPtG3hBdpsOcjaxkpvRrTzd42I00jNkpmo4Hi4Mx9Yo27IgY0 u2YfOfJvdvOBAkOPwZGZA8Zoj5YvUYapABBLdkHrRXAhoWrGTuqmf2753X9Src1oJMSj fYWFjTq5iSfVvnbzyg1KVP0MsDser62MaW5kxH0Jlh4qNN80GMZSzkHKO/VcsGMwzk9S 0ocDjWdMBJ2PoV9BPMLBm1/No467s9Ci18XrizZmx5fixPwGtJCaWUw4UbbOO02i5oDt toZQVXQmLubCF+kbQRSMjNIvxHVKs0c3G5tVLsIhbeGurC4wFXCDCnyH8fpCE1DHRkdu EB1Q== X-Forwarded-Encrypted: i=1; AJvYcCVWSIwiLYpvHQoe2iq3s7KdSe2q4eoC6R09rqt+AuDN0C0iZoF4FG9X975/gUAQnWdFBZ9QL6JHvzk=@vger.kernel.org, AJvYcCVgeIbarB4ETZZX4YwOcSE5S2LDxA88Uy4ErObOtwLwyAhLujlwPuEJA1/D2tIzTkHxWenxJmhU4wYyeyIYg81g@vger.kernel.org, AJvYcCWABgtDlFmvPgdAoXYDht7JOdR2EY5J909qXJTkqCxvcNdVhfYPHYNeDIBl4tvy2cTSeykN3bjxuao1i+MM@vger.kernel.org X-Gm-Message-State: AOJu0Yw8p2vK0SZ8tRbQ2ncD4Lp3Dw5scXOWKcl8wbhEHZNAkhF7OF5c FLYPD76eLrpaXXzjQSbQwaWKUvv8TkjuEpnnG0XbAD2+P3IPKpkk X-Gm-Gg: ASbGnctJxaLTb3h20ZqXLdj90etI/rI2gdHs7wLR9CFsSWuT2Lqymw7flLVmSjIOc97 40rNvO4qBVao+ES8mM9hGOtIXmx3RzxyWXQE3DUIFE8thOdMoAjr8Pu/ugDSazkoXoNvxx24Ugr eAtDC/kO0UD9fDVpNbxOvlRSJk9ZQc3Ub3Fjic8AMx/7C0R5mmbeNI7cRysozwvJsZLOenxFSTF 9lu/w42fUjQfimwFSRwxCVnVvg4+OELSYkEobn+wY4X9sEe3XA3Xy2iigGSjIlxIjUCgPOmcu8+ OQyfTg== X-Google-Smtp-Source: AGHT+IG+p+1DmFFdJVRkJTROJXqXPU7O8SQKva/DWcOTuD4kF/FInXV/1u4PhkS+FyAj2Vl47BaWEw== X-Received: by 2002:a05:6402:388c:b0:5d9:8877:895a with SMTP id 4fb4d7f45d1cf-5dcdb732cd0mr7584773a12.17.1738839973305; Thu, 06 Feb 2025 03:06:13 -0800 (PST) Received: from localhost ([2a03:2880:30ff:4::]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dcf1b990b6sm696427a12.48.2025.02.06.03.06.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 03:06:12 -0800 (PST) From: Breno Leitao Date: Thu, 06 Feb 2025 03:05:56 -0800 Subject: [PATCH net-next v5 5/8] netconsole: Include sysdata in extradata entry count Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250206-netcon_cpu-v5-5-859b23cc3826@debian.org> References: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> In-Reply-To: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Jonathan Corbet , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, rdunlap@infradead.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1363; i=leitao@debian.org; h=from:subject:message-id; bh=146+Fd7GMEHjIB2x3rHlp8/1LduCZ88lYbm9gyDIpfE=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnpJeanF6eo7+Yu1shhA89YfURblQQdN0terIOc aWg6lvKukCJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6SXmgAKCRA1o5Of/Hh3 bY/SD/0TrSjAMOxvmMn+XwfcZfbi59Hy7YGIfYsbKgPZ1iuBAePpFATHQgBZKlTjxz8KnVfuXaS NtXZG4mK3XStf3Nm1m3wAjd4s8hti4X7WKm51zVr7UYmIPGjnV9eleaqkj0bmirQZPrpGaNSUck oUC38DVhDL0m6uAmGQQxcdAE+Lr5n5GQ9khjDh8/H2VXAjSJsa1FjNNK2E8wF+Ni6uNh2h8+blx DWthQJTqQvmOf8RfEf0Wetk9ZagcdYGRgV1eeJ0ZCsg2TyGbCMo60wk0ark4dsXpmfATHpHRZzw 6jqtmVD7C4RsOMswXMXqO19ryfxokVksbZqsDWSMaWowzLR9tBH1652XEe7PV2LMZphzrJMdWEm Z8HGEQ8UHroaiAszJ00YeCLhFXPP+EP2Y0I2YBzBCfkWm24s60ucx2E5FZk3hD7VT6rC5vDOMrm RhAqw31LPIxS3lcDrl6C1YjD57aQ+eLkqSJnpSIV9WZEmbfUqRj2zGWusteoPhFv9u/Uq6d5gqn bo6oAmlYNEsmIsOsQ/V03Qgi/mCAk9e9ws1tUDb+x21MWGRVWXZuw/lqUR0YctOQfRLEc3759CR AupCNQMPUg0YNE3Pz+f8tYO5Sl5gd2xPMKpRfntR6c+l2F8afyve6eDK6NR52zO4AO5dGsffGZQ vr2Vq9XSO/VPE+w== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Patchwork-Delegate: kuba@kernel.org Modify count_extradata_entries() to include sysdata fields when calculating the total number of extradata entries. This change ensures that the sysdata feature, specifically the CPU number field, is correctly counted against the MAX_EXTRADATA_ITEMS limit. The modification adds a simple check for the CPU_NR flag in the sysdata_fields, incrementing the entry count accordingly. Signed-off-by: Breno Leitao Reviewed-by: Simon Horman --- drivers/net/netconsole.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 710330ae8ee462083dbb4aa889cb0ba0cb5a7475..50739c7dbfb6ad5b1a65ef33325cf4dd6ed02031 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -694,7 +694,15 @@ static ssize_t remote_ip_store(struct config_item *item, const char *buf, */ static size_t count_extradata_entries(struct netconsole_target *nt) { - return list_count_nodes(&nt->userdata_group.cg_children); + size_t entries; + + /* Userdata entries */ + entries = list_count_nodes(&nt->userdata_group.cg_children); + /* Plus sysdata entries */ + if (nt->sysdata_fields & CPU_NR) + entries += 1; + + return entries; } static ssize_t remote_mac_store(struct config_item *item, const char *buf, From patchwork Thu Feb 6 11:05:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13962855 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) (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 E866522F174; Thu, 6 Feb 2025 11:06:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839978; cv=none; b=Rp6QA8mbEcLVg1Dezo/MbFEXXG2IHkn/dbZp5BGtf5eCGmn3tdxNVeZ5hsAevLvcZrMY+2Qs1I8HbsQHoMF3MUDu+ETIW3RKxpEmXt4TSBwemAnSlt293imwRPgj4sjfW2lrzLxv4LIKszkn4wDaS+7LerV144cXQNm59O7Oi68= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839978; c=relaxed/simple; bh=olLcX7TZ87eKML1mxWhKNcr/zAKRgSsVekl7MomH2Qs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HTCbIU3S6H1WdOA7sR/5MNrYlUa3TBbrB8IhAJqW897/2Z9MZAuIpNkyL/dJf/eyaX9IV9iThuWzdMPb93otXnhYT2ItdFBY8BgagdesVbymoM1kB7UfQTtZs9Xo7e3pavci5E0z/zCppPRwN5FsVJzn1mjx9DYRmJZPUXP9V7I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.218.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-aaee2c5ee6eso143759466b.1; Thu, 06 Feb 2025 03:06:16 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738839975; x=1739444775; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=922Jb88ShsF9zojgqCt8nRBp87kqrei03/FNLDK7/cg=; b=NsDWQQZ1jpDtDvVJ4fHn3RvRYuTit94vH1pPno9aegeEGjRnrCzFQ1EizojZa/aGyq Mq4OoS+W4MXfO2M45FbsFqbZR73TNQ+UPpdupelyMXc6pQZUrDQC2v8uabPQ4kGgLNvA BZXRPa9fZOWfBgvmwPdVE2ZtxLjhyDv1orCCEwT9Z5AGPPnqjeXIFZj2VpWAnXZpaWVv zSTJSmrkFl+Ktivgps+h3+y4oSeaBM/WfPdg7bOZkN2i0FgHOA9L5oICwN+T+6nqwWul lfegwa+xPcmkFQZjx7hbMbiSRVGT0Pl3PuncX0Jd8rOz0butrREttz4VhPqJ0yWtjT2w gN2Q== X-Forwarded-Encrypted: i=1; AJvYcCUiQ7V2m2SyUO0+jUOcWGfBlH5jyxbnC+9g/e37nAYnQjmI5TDVK/InL7NxLsQ1AI+c0EeMZU/MkiU=@vger.kernel.org, AJvYcCW5pmX2+UPQm3Iye3wAtr+soATvCuO3NfTt+1kxJp7c0yaUoVRW59KCtq8l7RfdB8HEHtW2sf4NNGejbgzYwuxv@vger.kernel.org, AJvYcCWFia55KpNSs6MmIW7DLWNRZzI867Li1xMVI3yUy1HqfNVcqw62wt8wUziY7nv1zzY49Bo+GMzBJ4SSbO6l@vger.kernel.org X-Gm-Message-State: AOJu0YzjObA/zgog6mKkPcNSvbWK04+kSuJsyBHLTq0gOCawGn+qY1wu 7+yKHlWQuGc8ln1oJhCrPdABE3r/3q06D5z8cITcb/eeSde8NcD+ X-Gm-Gg: ASbGncsRmVq5/0AP60Mv4TrUGJn4JVwIk3z6L676JY1w7YeYkhAXTqVt45V/B/C6oSa OXQqEUW7ZFnL9DKK2XiG+RzfE0LdB0suI1z5/lM4VgAA+wgRqqE+ku37CT1ooemlASaHr6CcRLA 3f+DDbzvPdWBKF7GPksBQq6mhtn2LHCbLx1Q+cT6vcsANjwf0UDibOZaXXxsiiLAhW16rWQusO9 gR7XCmFLf5sxP2wdXJYq41cAy8HFXLO/Z86pkkM+DDbT9pAJpmHSlwHTV95YKovg4rJlhuZ1JRi GziZLqk= X-Google-Smtp-Source: AGHT+IGaOLyDWXs3isW8mPzjr6+u3htmzKnxq7KaPaQzcrNY8/tWhK/7aukZ9QcsmSza8UIalg0Pzg== X-Received: by 2002:a17:907:3da7:b0:ab3:47cc:a7dc with SMTP id a640c23a62f3a-ab75e2467a4mr473420866b.22.1738839974855; Thu, 06 Feb 2025 03:06:14 -0800 (PST) Received: from localhost ([2a03:2880:30ff:71::]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dcf1b739e2sm681568a12.14.2025.02.06.03.06.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 03:06:14 -0800 (PST) From: Breno Leitao Date: Thu, 06 Feb 2025 03:05:57 -0800 Subject: [PATCH net-next v5 6/8] netconsole: add support for sysdata and CPU population Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250206-netcon_cpu-v5-6-859b23cc3826@debian.org> References: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> In-Reply-To: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Jonathan Corbet , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, rdunlap@infradead.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4633; i=leitao@debian.org; h=from:subject:message-id; bh=olLcX7TZ87eKML1mxWhKNcr/zAKRgSsVekl7MomH2Qs=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnpJeaoPh0XqVo6dmiv+D53ntcP9S/lWj6AsTNI NeyPQWL7iOJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6SXmgAKCRA1o5Of/Hh3 bVnuD/oDIPREbP6z4qEwICvlcekZXZksYvvamSH9siqOQzzyRe546G5o+ozC0d/ZO3JmMP2FfAW R35PjCvn/BANLupgJMkWx7BCy9qzhX4C/VauvxzcMnpNQIhVDuGz7vi3xGHWa4nti+LDLBu6Vef J3brK58mwkN7Esm2BuPBgpIPo8E55lith66if1MlqhAq+Orhu620cpOdxuKZOrq0RjJlIJMSNH0 fekjQdDPx9AOlPaafG1P/KFIxwWVCZ2gBxbGynK8e7EPdVx+x1er3p1g0hq9ndwAal1JZpL1EHm 8JuySEBZyVx9s+rfHTHjGhDvQHWJr1gjXKmNhHN4iCYkePtyBGVW/fPiK8fCEiiMfcyn0JHZNpC 8f7U1KjnBQp5TwIZFsllHsOTCXrQj24nltv4Np5m1AS1bFYKVEPbwjHuLxx4Xj37rHyGHjfzanR t/nnLqvaOPPyt5+JDKBQTp42um6U1YGGzzYLdVzOnWy5jTfp2xheLgLsfydK8pmMouTakmMTLdV lThkkLJTqKVGfEqWZPdNxu8u1cJY/WIlzpdRNZM2pvaKSjRzpdBUOYkt+8BeAbqFjY6zYLlzrXg tXzBdQJyiNbdNqVOvYJ6i9rm+mx7HxQbeOLis11pJQi1/Wbu52JKxMZOatS9SlMK+Td55QoUTvA h7Scz99TKnVzyTQ== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Patchwork-Delegate: kuba@kernel.org Add infrastructure to automatically append kernel-generated data (sysdata) to netconsole messages. As the first use case, implement CPU number population, which adds the CPU that sent the message. This change introduces three distinct data types: - extradata: The complete set of appended data (sysdata + userdata) - userdata: User-provided key-value pairs from userspace - sysdata: Kernel-populated data (e.g. cpu=XX) The implementation adds a new configfs attribute 'cpu_nr' to control CPU number population per target. When enabled, each message is tagged with its originating CPU. The sysdata is dynamically updated at message time and appended after any existing userdata. The CPU number is formatted as "cpu=XX" and is added to the extradata buffer, respecting the existing size limits. Signed-off-by: Breno Leitao Reviewed-by: Simon Horman --- drivers/net/netconsole.c | 53 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 50739c7dbfb6ad5b1a65ef33325cf4dd6ed02031..f77eddf221850fe2778cd479e49c91ad695aba3c 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1117,6 +1117,40 @@ static void populate_configfs_item(struct netconsole_target *nt, init_target_config_group(nt, target_name); } +/* + * prepare_extradata - append sysdata at extradata_complete in runtime + * @nt: target to send message to + */ +static int prepare_extradata(struct netconsole_target *nt) +{ + int sysdata_len, extradata_len; + + /* userdata was appended when configfs write helper was called + * by update_userdata(). + */ + extradata_len = nt->userdata_length; + + if (!(nt->sysdata_fields & CPU_NR)) + goto out; + + /* Append cpu=%d at extradata_complete after userdata str */ + sysdata_len = scnprintf(&nt->extradata_complete[nt->userdata_length], + MAX_EXTRADATA_ENTRY_LEN, " cpu=%u\n", + raw_smp_processor_id()); + + extradata_len += sysdata_len; + + WARN_ON_ONCE(extradata_len > + MAX_EXTRADATA_ENTRY_LEN * MAX_EXTRADATA_ITEMS); + +out: + return extradata_len; +} +#else /* CONFIG_NETCONSOLE_DYNAMIC not set */ +static int prepare_extradata(struct netconsole_target *nt) +{ + return 0; +} #endif /* CONFIG_NETCONSOLE_DYNAMIC */ /* Handle network interface device notifications */ @@ -1251,16 +1285,14 @@ static void append_release(char *buf) static void send_fragmented_body(struct netconsole_target *nt, const char *msgbody, int header_len, - int msgbody_len) + int msgbody_len, int extradata_len) { int sent_extradata, preceding_bytes; const char *extradata = NULL; int body_len, offset = 0; - int extradata_len = 0; #ifdef CONFIG_NETCONSOLE_DYNAMIC extradata = nt->extradata_complete; - extradata_len = nt->userdata_length; #endif /* body_len represents the number of bytes that will be sent. This is @@ -1341,7 +1373,8 @@ static void send_fragmented_body(struct netconsole_target *nt, static void send_msg_fragmented(struct netconsole_target *nt, const char *msg, int msg_len, - int release_len) + int release_len, + int extradata_len) { int header_len, msgbody_len; const char *msgbody; @@ -1369,7 +1402,8 @@ static void send_msg_fragmented(struct netconsole_target *nt, /* for now on, the header will be persisted, and the msgbody * will be replaced */ - send_fragmented_body(nt, msgbody, header_len, msgbody_len); + send_fragmented_body(nt, msgbody, header_len, msgbody_len, + extradata_len); } /** @@ -1385,12 +1419,10 @@ static void send_msg_fragmented(struct netconsole_target *nt, static void send_ext_msg_udp(struct netconsole_target *nt, const char *msg, int msg_len) { - int extradata_len = 0; int release_len = 0; + int extradata_len; -#ifdef CONFIG_NETCONSOLE_DYNAMIC - extradata_len = nt->userdata_length; -#endif + extradata_len = prepare_extradata(nt); if (nt->release) release_len = strlen(init_utsname()->release) + 1; @@ -1398,7 +1430,8 @@ static void send_ext_msg_udp(struct netconsole_target *nt, const char *msg, if (msg_len + release_len + extradata_len <= MAX_PRINT_CHUNK) return send_msg_no_fragmentation(nt, msg, msg_len, release_len); - return send_msg_fragmented(nt, msg, msg_len, release_len); + return send_msg_fragmented(nt, msg, msg_len, release_len, + extradata_len); } static void write_ext_msg(struct console *con, const char *msg, From patchwork Thu Feb 6 11:05:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13962856 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (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 91DBD22FDFA; Thu, 6 Feb 2025 11:06:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839981; cv=none; b=lwSs658WsDqVQxfoV33nmQZgBDKiP+XUl7W2nglStXg+5FPY7uhR9bGljm/xrHAZ5LutEg+jviUVIvCuI/oN8GCraP3Vmi7mliHsSSbgKL4SqW9XcJZ41RvLiY4geHVASzbOkId8JiBCVaqYhW9WSBOZoVBDHEexaX87fUr+9Ao= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839981; c=relaxed/simple; bh=EWk2ay0albPWO0VUzwfvd3FuxFeaTYfwca4yspDY4GM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uiWEqkx44Puh7K3pIHjCNIESeFyhuhc/sZIhMCSXJXPJm0D0ilAm1RYUlRKO2th6nf7y47K8gsTTYt+10oYkp0W68msrB8DdW/Eua7ZhiqShu2QcCk8nQp6qyyzh0DfcncNQ44GFQAxtuTL/U37A5KkrrdJymZvz4ls+JnJtZRw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.218.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-ab698eae2d9so144327066b.0; Thu, 06 Feb 2025 03:06:18 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738839977; x=1739444777; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+4lbmitZAUWzZsnieUUQwDFzsIag16/ARHCo65YqC7k=; b=LTM16u84GPge0C6kT6Wb7iiPHqPknW0Kj1nXt2LgbZJddcVtrC1qXfJquN4RpNB6Un 3IZv/k4sWNOrFDIOTB/s6kq5qRjyR6NDMUc0pLKO4W4yJyD/NmwtVeMglKZQi0Cbw6Yj vRyDV9Iwa1C6MX2ka5y0jrCc4mUmULkE63fW1/IxITQBVok2HQH5YRsXkojLdVVs0LQt ZtR7n1vBYgP+c7bkKBhWLoXfQCyHfZ5wAd/zPOAU9rMM2Zuim6acayZMY5uRkVzeqKGB Q/rSRUYDPV7hAAJIM7+3twfi3Qmo2DoLbV3ubpUn+LP6HZF79zFp81CAi9b9jVBjDmhc seDg== X-Forwarded-Encrypted: i=1; AJvYcCV+3riChSyYlyPWtW/MadyP9aEG1DewWL0q9XGpKkiDSFwh4PqeQi1pIcG79kDyNY3a/188P94TbFQ=@vger.kernel.org, AJvYcCWqG+v3QZwbU0bmLzakQRV9Mixd9WpZ+/Ur3nGPfeNilg6VpOxC3TFDBpRam5IKvMHIFf35iZQ7DG0zJOGubHoW@vger.kernel.org, AJvYcCWxknod9n4sXgPrwnqXgwQX8Yl6oOhEn3cYS/UWlCVQ4ELQN7G+kJuZPs4spI48fauhWjWfL3uJbDxC8ouX@vger.kernel.org X-Gm-Message-State: AOJu0YwESb/7Wd3SkclsUgPueGZJy6zIwZq2jISHsJTHmjr5koTRwfhX qk56Rx7l254BORxUjczXpYRiEsQ/IvHRR612AvIBxvOPca1ofAFq X-Gm-Gg: ASbGncuzwlRm9RxP3FTYguKcaucQLlbs5AkmSI7nyjb0anUAiwGNCMJUgY5OJfqC6by XBYg84wdVQuWHfwoHEDqQwhIrRALCllqCqhk6QDj9LT/uNFbWpMA4CEPfk6kGpmrii6i4rSVggg S+BrjsF7mkkj6xgl0GuLJcDYDamlJetnIsvhhJhI8LjMbxuxIbPWzHjrsDTZjVQNwNLigNmw/fM 1aipstIGbS9O3uFDzWmFpUYkEEbt4tKwPsKgUbALLDIUURe23BUaycmxZE2QfF8pA1opgnhGNrD kB3/3w== X-Google-Smtp-Source: AGHT+IFGhsz5+7kgfIZDY99QjO8pdL+augGLexBcLQ0bQftg/Zc2Eo5bX11/Iw+zA69dXn7JBR+Ebg== X-Received: by 2002:a17:906:3857:b0:ab7:6c4b:920a with SMTP id a640c23a62f3a-ab76c4b9227mr330324666b.6.1738839976563; Thu, 06 Feb 2025 03:06:16 -0800 (PST) Received: from localhost ([2a03:2880:30ff:5::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab7732e61d1sm81399466b.119.2025.02.06.03.06.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 03:06:15 -0800 (PST) From: Breno Leitao Date: Thu, 06 Feb 2025 03:05:58 -0800 Subject: [PATCH net-next v5 7/8] netconsole: selftest: test for sysdata CPU Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250206-netcon_cpu-v5-7-859b23cc3826@debian.org> References: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> In-Reply-To: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Jonathan Corbet , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, rdunlap@infradead.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7712; i=leitao@debian.org; h=from:subject:message-id; bh=EWk2ay0albPWO0VUzwfvd3FuxFeaTYfwca4yspDY4GM=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnpJeaUSAo4i+K7MhatfW97K0yNTXh5oPZtS0MU RSwHb1lY6uJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6SXmgAKCRA1o5Of/Hh3 bZWCD/983gGwIsnoH3FeBJ82Kf3H5RrV/Vj4ZFTw0pbRHhtq1tGPrtNZOLbYChWPEfuonUCSd96 QjR3CkSwgq+ciyAgky5up8zgXpm4SunxPTvHIsZmZ2jkogV0YgVopca4UF0KGv42Epxaoaykdxg 5GPLBs+J7oO/g97pymmU5tRDCyTplcLhCjTqw0WgsYmVe4IsXJcwfb0fbmd72zrZhdVlq66z5Qs n9MzdrUVs8Uy9vq5gkUQnf3t9Mem6GSc0GHnSnPnZAF5gS+hFQR0KCPsabIDwaayygjrS32NGKa FKBLVZc5xgqEVbLdWGuJk4QOxwkeM9Ntyc9X3k41+qheylVpEjyX0Tuqpvl4LJiXI3+lwppfFkJ eltLXf0brq2Jsr1TbskeyZ8M4tIU0bITHNBsx8XMAYW48OoR/cl1fhSvhY8wY2fnZfdpSTKEES8 KGKZtSlYMf+MBYVIfwgdJI+lX0zEmrQAfGF0y2NssH+c00U+1a8IeRZXf6xZIOPbyDtYQiRnKho ziC7tKqKjn84WGU2fzkwnEP9PLwQoHe5hzbQCtTvz6vNN9RcKKlyzFxf5J2meq1F65gMv0ndksG bWOrjuJMnYRknnm0aFG1KUFBh0IXR3ay/9dAROjRoMedEiiEUpbMo5lZDdeaZD5a4lwJxJS/Dnx +w50GGEpvOCAnqQ== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Patchwork-Delegate: kuba@kernel.org Add a new selftest to verify that the netconsole module correctly handles CPU runtime data in sysdata. The test validates three scenarios: 1. Basic CPU sysdata functionality - verifies that cpu=X is appended to messages 2. CPU sysdata with userdata - ensures CPU data works alongside userdata 3. Disabled CPU sysdata - confirms no CPU data is included when disabled The test uses taskset to control which CPU sends messages and verifies the reported CPU matches the one used. This helps ensure that netconsole accurately tracks and reports the originating CPU of messages. Signed-off-by: Breno Leitao Reviewed-by: Simon Horman --- tools/testing/selftests/drivers/net/Makefile | 1 + .../selftests/drivers/net/lib/sh/lib_netcons.sh | 17 +++ .../selftests/drivers/net/netcons_sysdata.sh | 167 +++++++++++++++++++++ 3 files changed, 185 insertions(+) diff --git a/tools/testing/selftests/drivers/net/Makefile b/tools/testing/selftests/drivers/net/Makefile index c7f1c443f2af091aa13f67dd1df9ae05d7a43f40..28b6d47f812dd23dfed89599b6edb020671f8242 100644 --- a/tools/testing/selftests/drivers/net/Makefile +++ b/tools/testing/selftests/drivers/net/Makefile @@ -9,6 +9,7 @@ TEST_PROGS := \ netcons_basic.sh \ netcons_fragmented_msg.sh \ netcons_overflow.sh \ + netcons_sysdata.sh \ ping.py \ queues.py \ stats.py \ diff --git a/tools/testing/selftests/drivers/net/lib/sh/lib_netcons.sh b/tools/testing/selftests/drivers/net/lib/sh/lib_netcons.sh index 0c262b123fdd3082c40b2bd899ec626d223226ed..3c96b022954db9e21216950b1c13431c313ed4b5 100644 --- a/tools/testing/selftests/drivers/net/lib/sh/lib_netcons.sh +++ b/tools/testing/selftests/drivers/net/lib/sh/lib_netcons.sh @@ -230,3 +230,20 @@ function check_for_dependencies() { exit "${ksft_skip}" fi } + +function check_for_taskset() { + if ! which taskset > /dev/null ; then + echo "SKIP: taskset(1) is not available" >&2 + exit "${ksft_skip}" + fi +} + +# This is necessary if running multiple tests in a row +function pkill_socat() { + PROCESS_NAME="socat UDP-LISTEN:6666,fork ${OUTPUT_FILE}" + # socat runs under timeout(1), kill it if it is still alive + # do not fail if socat doesn't exist anymore + set +e + pkill -f "${PROCESS_NAME}" + set -e +} diff --git a/tools/testing/selftests/drivers/net/netcons_sysdata.sh b/tools/testing/selftests/drivers/net/netcons_sysdata.sh new file mode 100755 index 0000000000000000000000000000000000000000..2b78fd1f5982fee81b379bf9ac6f64a38d915974 --- /dev/null +++ b/tools/testing/selftests/drivers/net/netcons_sysdata.sh @@ -0,0 +1,167 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: GPL-2.0 + +# A test that makes sure that sysdata runtime CPU data is properly set +# when a message is sent. +# +# There are 3 different tests, every time sent using a random CPU. +# - Test #1 +# * Only enable cpu_nr sysdata feature. +# - Test #2 +# * Keep cpu_nr sysdata feature enable and enable userdata. +# - Test #3 +# * keep userdata enabled, and disable sysdata cpu_nr feature. +# +# Author: Breno Leitao + +set -euo pipefail + +SCRIPTDIR=$(dirname "$(readlink -e "${BASH_SOURCE[0]}")") + +source "${SCRIPTDIR}"/lib/sh/lib_netcons.sh + +# Enable the sysdata cpu_nr feature +function set_cpu_nr() { + if [[ ! -f "${NETCONS_PATH}/userdata/cpu_nr_enabled" ]] + then + echo "Populate CPU configfs path not available in ${NETCONS_PATH}/userdata/cpu_nr_enabled" >&2 + exit "${ksft_skip}" + fi + + echo 1 > "${NETCONS_PATH}/userdata/cpu_nr_enabled" +} + +# Disable the sysdata cpu_nr feature +function unset_cpu_nr() { + echo 0 > "${NETCONS_PATH}/userdata/cpu_nr_enabled" +} + +# Test if MSG content and `cpu=${CPU}` exists in OUTPUT_FILE +function validate_sysdata_cpu_exists() { + # OUTPUT_FILE will contain something like: + # 6.11.1-0_fbk0_rc13_509_g30d75cea12f7,13,1822,115075213798,-;netconsole selftest: netcons_gtJHM + # userdatakey=userdatavalue + # cpu=X + + if [ ! -f "$OUTPUT_FILE" ]; then + echo "FAIL: File was not generated." >&2 + exit "${ksft_fail}" + fi + + if ! grep -q "${MSG}" "${OUTPUT_FILE}"; then + echo "FAIL: ${MSG} not found in ${OUTPUT_FILE}" >&2 + cat "${OUTPUT_FILE}" >&2 + exit "${ksft_fail}" + fi + + # Check if cpu=XX exists in the file and matches the one used + # in taskset(1) + if ! grep -q "cpu=${CPU}\+" "${OUTPUT_FILE}"; then + echo "FAIL: 'cpu=${CPU}' not found in ${OUTPUT_FILE}" >&2 + cat "${OUTPUT_FILE}" >&2 + exit "${ksft_fail}" + fi + + rm "${OUTPUT_FILE}" + pkill_socat +} + +# Test if MSG content exists in OUTPUT_FILE but no `cpu=` string +function validate_sysdata_no_cpu() { + if [ ! -f "$OUTPUT_FILE" ]; then + echo "FAIL: File was not generated." >&2 + exit "${ksft_fail}" + fi + + if ! grep -q "${MSG}" "${OUTPUT_FILE}"; then + echo "FAIL: ${MSG} not found in ${OUTPUT_FILE}" >&2 + cat "${OUTPUT_FILE}" >&2 + exit "${ksft_fail}" + fi + + if grep -q "cpu=" "${OUTPUT_FILE}"; then + echo "FAIL: 'cpu= found in ${OUTPUT_FILE}" >&2 + cat "${OUTPUT_FILE}" >&2 + exit "${ksft_fail}" + fi + + rm "${OUTPUT_FILE}" +} + +# Start socat, send the message and wait for the file to show up in the file +# system +function runtest { + # 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 + taskset -c "${CPU}" echo "${MSG}: ${TARGET}" > /dev/kmsg + # Wait until socat saves the file to disk + busywait "${BUSYWAIT_TIMEOUT}" test -s "${OUTPUT_FILE}" +} + +# ========== # +# Start here # +# ========== # + +modprobe netdevsim 2> /dev/null || true +modprobe netconsole 2> /dev/null || true + +# Check for basic system dependency and exit if not found +check_for_dependencies +# This test also depends on taskset(1). Check for it before starting the test +check_for_taskset + +# Set current loglevel to KERN_INFO(6), and default to KERN_NOTICE(5) +echo "6 5" > /proc/sys/kernel/printk +# Remove the namespace, interfaces and netconsole target on exit +trap cleanup EXIT +# Create one namespace and two interfaces +set_network +# Create a dynamic target for netconsole +create_dynamic_target + +#==================================================== +# TEST #1 +# Send message from a random CPU +#==================================================== +# Random CPU in the system +CPU=$((RANDOM % $(nproc))) +OUTPUT_FILE="/tmp/${TARGET}_1" +MSG="Test #1 from CPU${CPU}" +# Enable the auto population of cpu_nr +set_cpu_nr +runtest +# Make sure the message was received in the dst part +# and exit +validate_sysdata_cpu_exists + +#==================================================== +# TEST #2 +# This test now adds userdata together with sysdata +# =================================================== +# Get a new random CPU +CPU=$((RANDOM % $(nproc))) +OUTPUT_FILE="/tmp/${TARGET}_2" +MSG="Test #2 from CPU${CPU}" +set_user_data +runtest +validate_sysdata_cpu_exists + +# =================================================== +# TEST #3 +# Unset cpu_nr, so, no CPU should be appended. +# userdata is still set +# =================================================== +CPU=$((RANDOM % $(nproc))) +OUTPUT_FILE="/tmp/${TARGET}_3" +MSG="Test #3 from CPU${CPU}" +# Enable the auto population of cpu_nr +unset_cpu_nr +runtest +# At this time, cpu= shouldn't be present in the msg +validate_sysdata_no_cpu + +exit "${ksft_pass}" From patchwork Thu Feb 6 11:05:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13962857 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 20F4422F3AB; Thu, 6 Feb 2025 11:06:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839983; cv=none; b=oBaQnX+whqjdxcwyUu7QUjJZOW6ow4peXTRTNK4n9EVw4av3svD5qhbxdx/yL5yq/QNOnmKW/eNykUa0IhfjRyF2jW1U5TPnNln6nF4N4fMVGyKcjMJUumKVkCkM2Klors5qKjTr1WSp2XJpUvua3Ze0AfP43us4QeH7i0WJcGs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738839983; c=relaxed/simple; bh=tamcCxHm3y1DTBqjP1FY4004ODbiDOOle1ZuKGQMC/k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Er5XyY5Sl4tcVq1OdwAM2P+plEGele6FAcLDSMCttqos/nLMDJwgz+PqbzXTRtI+jW3zqKTNvGZxYa9k8F42efTdY+xbq9Agl0EiYpIYh83CxAo3yHRUmKQSwmROtw7HD2/hvlt0Op92XDjJc8guo9NV0sWJGfcG9Uoj3qTuTng= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.218.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-aaeef97ff02so136057466b.1; Thu, 06 Feb 2025 03:06:19 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738839978; x=1739444778; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TpvAfT2xKK2DzPTMuzs3BntCPv5+DBlkGoA1AwbPHIc=; b=hvUFP3bTUPvF102P0VqNyXxi10Qv29CBXCSuD0yvRuujgacW0wOih0aRCCdT5DrFyD +Yn/Eml84LUVj4QSmlk+yMqFsVISfpEHCXkkHGfvJGK7yIISP4HBkrGqv2yt2NBmvgX2 kqDK5YOKXKxvTZ9xs2CZmYQkFZQILzEwLyLXsF8srjLDKYo6dw2voPyQhe3eYT1mSueq NLqUcLLIA/DZ9BKeVQ3LZ812nYx+CEjFB2zATHylU42tizMFPipwZ4M3cVdsh6OWBdHw /SYiny1WDOx6RtRRP8EAIKdausko7dbhB9cSL2jqxBr8AVbmbDOG4tnpCbm/VRRip3g6 wolg== X-Forwarded-Encrypted: i=1; AJvYcCUC0zyXyPVOXW4X4n0/qU/N9hbe1u7J5J7MJmQh7BAn6ZVhTfWwxZgy/U/CLllLaJ2qiNuFzf86/zrsyfHPhbhr@vger.kernel.org, AJvYcCUSkDnNObyH3/t/2S0AxlVBi9TX2Fp1sXWyB1+e9noOKI0ALu5FG9zzgjHD1IWc27lg1TF3NH/ppfo=@vger.kernel.org, AJvYcCXNtYG4cVx/22mgUp8/8Uof06BSgkKLjJd2KWJJtBc+bGLHsyB72K197RYwHi8W+4OIz0qm8cgcHyt0FFKF@vger.kernel.org X-Gm-Message-State: AOJu0YzDiSCwGE1ajsMHYKQSCA0AjqOpdrjgvHZlGezUrrdzJhgtK8q4 p2jmUDrX12J1vFEymdA0rrouCzDID3+TdFGSoB1eLE4bZvBfXEls X-Gm-Gg: ASbGnctVG43YZ65hGFI3WizlsCWDNv4To4wVpqv10/dztMWPqXa+dVil+yuqiAtZJtw zd9B8eDoXHSL035PZJ9nGF9QVc4NibDt8zgAYDi1n5RojyoqQfu8veke2V47EpDqKlR2sAi8qXO MiiTrE97ZC5cXzSyugRQcvMBjyraHI0/pxwc5VKvj4Qyllg8c6qNbuYBzpNb5S+r3yyMFOHo8tH SAGWrce+Jnt2apyCOXBNmJSaVls3keS/3ZLnaMLYCRASRn2Z0NjZRGEQXB1u6Gcz063jUSC6VrW trrQew== X-Google-Smtp-Source: AGHT+IEXjLuBa1sEdPanHbL309t415dJgNNLyYgGBO6Jyc44lhGdhmYjk1F095sezbxN70cTox5t9g== X-Received: by 2002:a17:907:7b96:b0:ab7:6c4e:8e52 with SMTP id a640c23a62f3a-ab76c4e9dfdmr429966966b.5.1738839978140; Thu, 06 Feb 2025 03:06:18 -0800 (PST) Received: from localhost ([2a03:2880:30ff:2::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab7732e73a4sm82544666b.108.2025.02.06.03.06.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 03:06:17 -0800 (PST) From: Breno Leitao Date: Thu, 06 Feb 2025 03:05:59 -0800 Subject: [PATCH net-next v5 8/8] netconsole: docs: Add documentation for CPU number auto-population Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250206-netcon_cpu-v5-8-859b23cc3826@debian.org> References: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> In-Reply-To: <20250206-netcon_cpu-v5-0-859b23cc3826@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Jonathan Corbet , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, rdunlap@infradead.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3210; i=leitao@debian.org; h=from:subject:message-id; bh=tamcCxHm3y1DTBqjP1FY4004ODbiDOOle1ZuKGQMC/k=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnpJea6w5eCWTb5GW4BldBdPwcZG1M0KDuBZcua mxmxb3Uq7iJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6SXmgAKCRA1o5Of/Hh3 bUNID/425UN9lskLXEizCZaIfjB3/tMcvhX6/cNzqJNcQrO/tt3S5x7EoSpWxBaVMUImw9+A7NZ vl8rfEDsQkhqIrE4mWbAhPa2WwHbYwj3OIbldhmriysTjtA3a6hdl+klJerN8xnj3Ow1QtMvtBc TBy2CPy2hxf+lr5Si92pXeUHXSSR4QGrRWBw+1XONZOqlNpuodUq2uMbmUnn0qtNl9EN6snHXT4 PDuxHbMSHhKE+mPhdFLmCxdttkr4rT0C6SRDZ0rqI2PJqRXMv7vj7+ve8CN9AK1LpAXQpfCvOGS wMjKD+fUegV9xulQxfVD/IGELYrnyYvW8NsARBdnA8wQA65oSCv4xa4+inG3CyY2eDrqvspOEXn 86pI6BXxgIN14bzfuhlXFpi74+F2FZULvYBncZ/NgX5ZMH9G7SWCl0uIvMvQC3Ee+gPTy0LcFGi PcnXokaoTwL15swRG6oPoNXyRmlYS0F0ew0/DdSVPG9tBg7nqSq/axa6A/gJ8mvHMDPT125/SE2 5FV6WCPLCuY4p5VxKNin3ZTQDIfkcqhJFg6KecEhzl8W0bbkhwkgjoopxlcmsEkP213i9llkHUc h/+6TMGrkmhNMGdRWnTJZg4DzCcbaXFzfuMk5uH1wG+f1D5vyiTw+68Q7x86dFNr1QGSkZI224t QZgn23mBl2yPV4g== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Patchwork-Delegate: kuba@kernel.org Update the netconsole documentation to explain the new feature that allows automatic population of the CPU number. The key changes include introducing a new section titled "CPU number auto population in userdata", explaining how to enable the CPU number auto-population feature by writing to the "populate_cpu_nr" file in the netconsole configfs hierarchy. This documentation update ensures users are aware of the new CPU number auto-population functionality and how to leverage it for better demultiplexing and visibility of parallel netconsole output. Signed-off-by: Breno Leitao Reviewed-by: Simon Horman --- Documentation/networking/netconsole.rst | 45 +++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/Documentation/networking/netconsole.rst b/Documentation/networking/netconsole.rst index 94c4680fdf3e7e1a0020d11b44547acfd68072a5..84803c59968a3237012fab821f432eb531aba45c 100644 --- a/Documentation/networking/netconsole.rst +++ b/Documentation/networking/netconsole.rst @@ -17,6 +17,8 @@ Release prepend support by Breno Leitao , Jul 7 2023 Userdata append support by Matthew Wood , Jan 22 2024 +Sysdata append support by Breno Leitao , Jan 15 2025 + Please send bug reports to Matt Mackall Satyam Sharma , and Cong Wang @@ -238,6 +240,49 @@ Delete `userdata` entries with `rmdir`:: It is recommended to not write user data values with newlines. +CPU number auto population in userdata +-------------------------------------- + +Inside the netconsole configfs hierarchy, there is a file called +`cpu_nr` under the `userdata` directory. This file is used to enable or disable +the automatic CPU number population feature. This feature automatically +populates the CPU number that is sending the message. + +To enable the CPU number auto-population:: + + echo 1 > /sys/kernel/config/netconsole/target1/userdata/cpu_nr + +When this option is enabled, the netconsole messages will include an additional +line in the userdata field with the format `cpu=`. This allows the +receiver of the netconsole messages to easily differentiate and demultiplex +messages originating from different CPUs, which is particularly useful when +dealing with parallel log output. + +Example:: + + echo "This is a message" > /dev/kmsg + 12,607,22085407756,-;This is a message + cpu=42 + +In this example, the message was sent by CPU 42. + +.. note:: + + If the user has set a conflicting `cpu` key in the userdata dictionary, + both keys will be reported, with the kernel-populated entry appearing after + the user one. For example:: + + # User-defined CPU entry + mkdir -p /sys/kernel/config/netconsole/target1/userdata/cpu + echo "1" > /sys/kernel/config/netconsole/target1/userdata/cpu/value + + Output might look like:: + + 12,607,22085407756,-;This is a message + cpu=1 + cpu=42 # kernel-populated value + + Extended console: =================