From patchwork Tue Feb 4 11:35:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13958948 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ed1-f46.google.com (mail-ed1-f46.google.com [209.85.208.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 7633F202C39; Tue, 4 Feb 2025 11:35:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668934; cv=none; b=jDKv6w0QTCkvXF5zTfgeMSVpnSKzD/BylmvNzddKMiHRESEgtPr7pw/3gRSd9OAAr/iJEnkqiwaOkxSAr7ZjsX6tiAHRHpXr2MN/dcUgbGiQ+NrQ4YXn4ACzVP5P41wgXba61v/vK1sWMI1+nYW4qcOMq98GLOIw73zOGOlqYBg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668934; c=relaxed/simple; bh=HUz4qbhG1xocbRDA0LuqGzXg2iC7UrsL31cULRzZ+ms=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sidyJindlGMSPoqFFzl/JlVGLTlnRX/PBQyqDS3BkeHyPwsLFoylftynkhgdZ6TPvGlKNuYVN8OMU+y5+WlsB1+sYw50raDz6b2dVU1V/nYIY+lr2hT/q5eVMbO5iG+XXmQn46q0T/6Zn85K2EhCDFJTXEViJpsil+7TY7kyFCY= 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.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-ed1-f46.google.com with SMTP id 4fb4d7f45d1cf-5dccc90a4f1so699779a12.2; Tue, 04 Feb 2025 03:35:32 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738668930; x=1739273730; 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=HRyFXvBfkvZSawDf3OnbAefq+WNb8zfIFJyUMwy5ouo=; b=CbFtwl9D+d9ENh92D0R/7kM9w5kp3hv9WeLG0lxSzYz7OzMmQX5GtlEvtIgcl7/5lp VV/q/D9pgRW6fks8o0HPg/ghHumjzlkC0eVul0VdBSNxgzNupHNG9C5a9OtVd29WcH6U Ge6xTdndgu4R0vErLy6WgAvRUndiUKcSfNaCgmbB/yQzOgJYBGSP7RVp604NCAbCDFFd NBY2CzsE05SNCs3eY3n5E2KvWN4vby5K8V21QHQLBbhsYLLPhERhAkPRT92b27vZQUAd wkESvhzeXANk35nUxuip2ZgvRzyQy9MB9Ptn360o242Axq3DgGOKHRMFF+YxSuhAUkQy WAXA== X-Forwarded-Encrypted: i=1; AJvYcCUn2X3Lt/ba2Z30szBeT6zdG2qLsrX1nPYPZs7McqQP/QgecBnaz3duggF3zBYrl+8pUOPc2fxyXLc=@vger.kernel.org, AJvYcCWaSDHayTKcHEWbRyn4SjPa4mdIeG1Iat7hSXiPqGa3pffuPVaON36NQTNYiWdIXmBi54bOWiHbUOzu8q7duMe1@vger.kernel.org, AJvYcCXZE7o0Vg46NWWjuy28sc5SqrfK9YMODarVIfQ7yXNCbhui6+j53mELR1nM0VjTc6ToXD0MYKdw5AKZ/lTP@vger.kernel.org X-Gm-Message-State: AOJu0Yzxp5MnItIxs06rRiGIHRjoWX3XFhrXiGGxjehy3RjGsD5h+da6 V0AmCgo6OtItMbXahJQ4kcDPaCTwhSfQ4w3067pchh+/K+NTJI8lPhYFDg== X-Gm-Gg: ASbGncvDrkr+ubt4k0KCOh6iCFQTVMAecdtlygXrD/Jjeh296+PPZfFIIQPx2XDJJrF bP1DJR7vsybg5QyDlz+FkgwgMScDc/FAFBcuP/VdLT5Wj4HVBSxHjj9VtwS5u7PSDAEznNE0vxa kLtQQfiTIYBen7h2h3ReWzntNsF+9X6cYX2ivKoV/KVcCK3PkzTbYdqK4a9hW0NnS7bXz7ohFbE BQx6audhuYvic6SOW6DRsdDV+qLXw8BJ5z8NoamTRH/RfSv4J8Y6MQQytDKfM9MzNciuM6Bm9Z/ LgLORg== X-Google-Smtp-Source: AGHT+IEXZc+B+4scL804n7B5G3JYdJzlqnzlB1FiPy0G03GBltXaClsQfdHhrJ5lSAv9veWJemSPRw== X-Received: by 2002:a05:6402:51d4:b0:5dc:cf9b:b043 with SMTP id 4fb4d7f45d1cf-5dccf9bb32cmr885910a12.11.1738668930042; Tue, 04 Feb 2025 03:35:30 -0800 (PST) Received: from localhost ([2a03:2880:30ff:7::]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dc724056casm9445854a12.43.2025.02.04.03.35.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Feb 2025 03:35:29 -0800 (PST) From: Breno Leitao Date: Tue, 04 Feb 2025 03:35:09 -0800 Subject: [PATCH net-next v4 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: <20250204-netcon_cpu-v4-1-9480266ef556@debian.org> References: <20250204-netcon_cpu-v4-0-9480266ef556@debian.org> In-Reply-To: <20250204-netcon_cpu-v4-0-9480266ef556@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=HUz4qbhG1xocbRDA0LuqGzXg2iC7UrsL31cULRzZ+ms=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnoft+ZJMVLABta5NuZHzKL6S9uxASM+F7H4+1D PeC54p1aqKJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6H7fgAKCRA1o5Of/Hh3 bf1LEACUN1qkm0gAgx8GO7gdBvDpcNcrBMGA8bxHXw+GfFDIj9SBIfdVLpyLWHWd3GCFHrBg21q 5PkERB1EkpGi1VVbx5eDoT5BZE+nj1N9NqTwKumAt8DqJ1Nc2c50S4ofQmc0WNwyuaGukLXRemf Df2H3/yMWAYb6iGf5p6J09xcaJuLKqyr7mRDgXiKPnxBBIpR+n05WyQtShkK9YxGqLw1zK1ZBFQ 7KWSKlw9jlid1tDY/15/0rbzKPWjah22zfY8iBGykKyT8yr8zbNKMqNsEk/mkXFiTuSa+AXSjxR fXT7pBFUwEJyiEAvJyQaWHHMg15yYHfj1e4AfoXJzN8GCm/QMkfFsq/jDCiw5NGpHxNRlu/XkWl wTYwrpRp/uc+m09r987XqlVxKIi9N2awXzODc8VnCu/ht10CPFVdt6R6sZTbr5ZYkGTyKxHbgLh DlSIBy+b55uY2XFz4ZPLtp0s4foc5ehhROe8STNu9xOEyIEIL8xtj9VzSXXIKTCDRlxcZ4SheJX vwBMUVT7wcarZMym2NzFhSLic11nMA8RlegIyVwNAuUfMB/tkKbpRDlCOsOnF6ObXr6RHKjfz2L w6flnBokzg0LlC2X0Kr4fQAgJC6Hi9msi3YbDFM9zq5l2dLAEu9QArHpTo4pKZkOKdtg4dCATnI 4fXdNezEbv+8ovA== 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..c1ad54d99438dbd14e8288d39ad6bcc6f8ff5ad1 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 Tue Feb 4 11:35:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13958949 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) (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 0838620CCF2; Tue, 4 Feb 2025 11:35:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668937; cv=none; b=ZZQdVUx8nFr9mpklRGHkN7PCmkmQfOnc2ARnitQ9Tt20RG/EBxKRg1WO06p0GYH5P9TAsbJFq68A3Uu41meMtED1vh0O4oXVxmffvDxZy2GzZWGt+pitmoD+VBAedYFqMKRMK9UnpXXe2QbHjD8YeExYaWCqSXXt5Iw+ff7wfMg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668937; c=relaxed/simple; bh=kU8C8umM4ScJz96Y0T3yehh2t5lXosZmarZW34y+f9k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sDem9Hrqabgx5dalPs7Ye6TkFAk69+1S3LPBhTto/asO6ehhkiRmnT0N5dB9l2LHfsHv70Ji60uVpYtZ0oXKHLzESPg7loxORG3w/cu/tI8Btf8hTyfkCcAqfcBJq95slsoqZk7HKoLrzpVD2phHSasJCYPCTuqVLO/5+OikZmM= 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.41 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-f41.google.com with SMTP id 4fb4d7f45d1cf-5d3e9a88793so8697019a12.1; Tue, 04 Feb 2025 03:35:33 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738668932; x=1739273732; 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=48ZpelgdFKqZGLj2HNZNkwbEfh2/EultLZjsM1GK/BM=; b=K8MBSe/UzcpLA1grLdPk6Vw8ZOnDs6Vl4JQfMmy3l7W7QT3B3DPn0fZQMgDWHIigAb qBUMcURzALdYfsHrd5B9VLb0N5tBWHeqSO4LkzVRnHWremXWbVD6CyiTnF1U3ToyrHvd auGVlGPf59hpMEMTW8HU86lxnuW+97OVoPVChRAyqe8Bcn4viABRIpzlJ/x4YBvYnGtg 98VPiWKII5F7/6qJDLfbRNpIqomNVkh9U/m+BEOkkJEVCpy+rMinXYtj9kc+u/cH93vc J4glOn+coy+S0jPWUCVS7M7nh0g9CW5icY38tNpDl6hkWU6eV6XgZ7+EPyjdMZoQxnlM uD+g== X-Forwarded-Encrypted: i=1; AJvYcCVw2UyDe2F/gM0zYJDKWlC9EoiMDqev0WGj1RWb1pPY9G3s6+Tcq6LIr4WgSuYLDcYFe5meGaBd+2U=@vger.kernel.org, AJvYcCXBnC9TRX7BZ9NnZGmNTEbB9taOZylH2pYDV8N1uiN8vZaoQ13p72m8niavDV30lWdMkevnOXeC49xl9nyi@vger.kernel.org, AJvYcCXgHbOV1TE6BeGwAVIo0BzIRZgUwY0wDNq+GrWCc3ljF24CX5paU0dSYZ8b0JoT9oFpgtBgMjSWYG4LtFWY0WkG@vger.kernel.org X-Gm-Message-State: AOJu0Yyahah1XeymHpipU1Bg0lmnOjMr7taq3Le9v/2ykCXZNwNiBqcr mGQDtqfHGt9kdkpwPbKzyTRpF3cKw4EuLbMHeLfU5NeinZ1FzBP4zBwG4A== X-Gm-Gg: ASbGncsI+/EFQi86dy0oTizARqJPr+U4CkDxh5Y3OJ/8qpq46q3SzeOLpRO778uOwK2 Gxfy+glDc36+dz5yvzz1mxvWXfA0OthjcrGr4h0CMG/fs3tTcfKtmLWHI2puwm3sogWMyCfJOoX Lnz7DrIz1nfh2zJZfQf1Fhlz6v1x2+oatunlY9qBjwBOplCas1NjGArVJkNbEaLixUdJwUVBPiv ESr7+xthexAp/0yy9KNzC28LvyTgsxjnjQZ2rg7YblxgrGZXf76/OhJsMlMJ3qUpW61vXQ6J5t0 7HeT2w== X-Google-Smtp-Source: AGHT+IGvRv/eP9TGPyI7DwFHf3/4D3BAqUMT6k83pkkDZK7O6Klwz0N2QElC8P0BP2fqUpFjs/WQ4Q== X-Received: by 2002:a17:907:6d18:b0:ab7:b30:42ed with SMTP id a640c23a62f3a-ab70b3042f7mr1506615066b.0.1738668931717; Tue, 04 Feb 2025 03:35:31 -0800 (PST) Received: from localhost ([2a03:2880:30ff:3::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab6e4a553c6sm897157766b.165.2025.02.04.03.35.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Feb 2025 03:35:31 -0800 (PST) From: Breno Leitao Date: Tue, 04 Feb 2025 03:35:10 -0800 Subject: [PATCH net-next v4 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: <20250204-netcon_cpu-v4-2-9480266ef556@debian.org> References: <20250204-netcon_cpu-v4-0-9480266ef556@debian.org> In-Reply-To: <20250204-netcon_cpu-v4-0-9480266ef556@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=kU8C8umM4ScJz96Y0T3yehh2t5lXosZmarZW34y+f9k=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnoft+oqg50bGFHSc+yPkfpUHetG+24kGloJXvG EAVkXFq7VWJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6H7fgAKCRA1o5Of/Hh3 bbGbD/0eIbqQDD+E6BUznhOLU9YdpuM6AV6wT0HZJdUeKEKPkI6aAkRXNECb5DD+BmX2Jh/CzNb ZtSxShU+S0jr2p443GaqgInsZollLHUvTA7/28FwRHGXwXYgoG6S/LYDPL/5b6Tr+xp57/IwRQc wL/paX38vn0W5zSNk7G5wHCC9qFbOvalM1DkdDt0GA/0SGxn/nEqH/eHbpNFSBnxZ83Pm55shbk oS0xmxymuldUBhoFMC/0nwJFe2Q+Cz3I4aiBzMKQ78d4tbG5doA+dl3TtT1Reky2ZzuQaVBNV9h hUt2uaYLAYqfOTOTgcO0BwQ7lpvZn0wgq5P3s4NyuGYdieSAMv8X15anAUs4c1qeFy2034Lcu+f O1fwecnt9xkygcaKIKNcVIjDgbpxMmnp+gQ/L438JWA+kyArqTqEhgOmMxzouaa7UBXbf8TlHZF MQb+AuyDhCWcZn6tOEdeT4MS7anvvpakbC8SSIS1J1CWPAFl06SonJkMa81KEjb08z9WPKndyEq cFihwLXoC84Csd5blI/aSfE+tO7zEbY+bGlpx41lIwEd/cRZDG59faPdJjrBssDxBB01McB+akA gDDK9r4Z9kUwHJ2WDm/7JCI3uJSbLLahZcEt0kQnKR+xA4EVFGVfpjm9fcxkHi6mOP31bcbDOlL dQIYLUnwga1L/5w== 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 c1ad54d99438dbd14e8288d39ad6bcc6f8ff5ad1..15867bb481e226cbb4164642e470baecca730a40 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 Tue Feb 4 11:35:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13958950 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.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 951A120D4E7; Tue, 4 Feb 2025 11:35:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668937; cv=none; b=IwFRcnpSIhcW9NdUJ69QvK5PgLLO7BwnGBHIsj2zyHNYcm+Ues09HHru1g9eNx3JsARSThvt8wFCLzsrWH+N2vo3xDlIEfJJyRWFqhwaBDF8/UDR4Y+bTTToXlwM3JPwi1mVXyK/1mTYTRSoGxBc61s0b3rMva9dcHiuAhIjX7s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668937; c=relaxed/simple; bh=IjZkiLAW4iU2C6hZ49uxGABatYfCQ4v/9ISyIy6t2+4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=a8O5hpwm/b6iotzaAgiD7c9nvKqHWWGEKlfXSYrMGiaY8kxrTGtwSnOGng8nbgdfPJW3ZKSyfh41rJeyjIy9O5LVaK3aqaqPpbAdk3lNd5mOuJupKMpoprCapJD01r7mesJ3+wlN6o+1eqcxBi4VGksF6YVhTf2gSpXNFqv3xcw= 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.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-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-5dcc38c7c6bso1249076a12.1; Tue, 04 Feb 2025 03:35:35 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738668933; x=1739273733; 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=/npJbJcTx1+Ep/iKTQCUB6+kjufTBRaHHPsIia9g2og=; b=t3TmADY518g6/g1F6G0caD3lVqsloNtlXZZJ+h9OqEoJ3LgGhVIM3ix2QGjom3sGDJ 4hOl/O+j0c7sKdsE8n9AFFp8CD5Uh06LsEWwUMgjw9yiPi9djFpo+Rgr98+2B5KOUT/v oLHAJ5+N1HbV7eWFlj++R6wv3fkRA8iVKvFKTjcUuMVXcV31RcS8ECIPEHX2VL6aWY9b ib+tD8dVM8d7GS7z9yg36NU49E0wZoDZi/kfmcjcG4SZ9/QLKUmpyKQA97BMMAiWLPWt oRNwHFf7rFiYr6eS4nMmTMaZH4HLYhJu2BeBvcVRSEp0UAJlXWuoqrqYgiHKKthbhru7 70xA== X-Forwarded-Encrypted: i=1; AJvYcCUzxSWdmlfSiuW0AqS/ehHk6atXj7H+Vd2cy9rLvabYWS9SX0USpbeZWavCLG10QOtliqbGS8MfPdE=@vger.kernel.org, AJvYcCWNfd5QeavmpgaLcXEz+uSTaCGtUa0Hqwf/LjkW49esFlokziMRTchkNIiuRmC6VxOgIgax09oqMMIPbO5T@vger.kernel.org, AJvYcCXyev+rIhKcboTt6Kqhd4clQmlCoMmgfSBupqBs1dtWzgi8jkry+bXDEKhSkG3T3uImAA7MbFRnUjXeTnzC+xVx@vger.kernel.org X-Gm-Message-State: AOJu0YxW2PXixOA20NlWi7bipGFjx1Of7KsvdPxwYKeqeMnq2td46qh4 wc7Rb8pGl5wpxKxdGrOXJ7UxCYCdBGf11YAaDJP2Pur3bQguOeQKAnOGTQ== X-Gm-Gg: ASbGncu+wzkM/g6/fUy6L7kE9XVLKDvkyNakRDSc7yIdxoQzL5cCTWN6jjig9BUtgGA Rkj5TjGtTsjZsD1deCDSTRZunb4+J0sXo9Vh7Wk98+I2p948VirvkS+h0Aw6jBijTqFtgkfjCRd eOz5LyLbv6I4GozOhRdNKByDYov5O9/XnS90oTqbx7+TNWVYkZt5tgnPOe5uvUsgDm3AhkZAZw/ l/gHYUut3o9jFe1uOMEhpd8kAMxd5ZmV2Ush40im2F7289PBpwYsdPfk5kshynQ0UHE41DQzk7N FW/jJDI= X-Google-Smtp-Source: AGHT+IFuTFVdhB6HttmAeptILiHpRNNaQj+Ayc5Uuxq6nCzfdtwIzl0gTB+Frn8vEzevFTlYmsZ45g== X-Received: by 2002:a17:906:730b:b0:ab6:de39:c7d9 with SMTP id a640c23a62f3a-ab6de39ea32mr2606500866b.33.1738668933266; Tue, 04 Feb 2025 03:35:33 -0800 (PST) Received: from localhost ([2a03:2880:30ff:71::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab6e47cfba6sm925768166b.57.2025.02.04.03.35.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Feb 2025 03:35:32 -0800 (PST) From: Breno Leitao Date: Tue, 04 Feb 2025 03:35:11 -0800 Subject: [PATCH net-next v4 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: <20250204-netcon_cpu-v4-3-9480266ef556@debian.org> References: <20250204-netcon_cpu-v4-0-9480266ef556@debian.org> In-Reply-To: <20250204-netcon_cpu-v4-0-9480266ef556@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=IjZkiLAW4iU2C6hZ49uxGABatYfCQ4v/9ISyIy6t2+4=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnoft+19NXucyGY2Sc0HU5ODXEFJ1WKoE2wCYbu 7NeKRZxK8+JAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6H7fgAKCRA1o5Of/Hh3 bZxGD/9prJB3RycqyQ2grUimSymowHKl+aicCOhtu9warJXrMnhl7KsrDhPJj1y7gB84FpYhV4o Sq7FsMQfIsGRFr0Py44MXVmoDVYVx1yrQPd+76FVozfozGpOy+IPYaSZwcLxs2Vyw1UwPgR65N+ tIctdopM7dtpvziSc/kGZkuBC2X2Rxy7M9bbTbqX66DBzvJ+U9ySpgO+bKIaWAsWiGJ7r0Mf/ci dxgDGM7q2Ttm9td5bncZ/Tbb9LNvP/w7M3uCWYacSLhBijnd4CQBTiwYvIiuPd/NakjHNjyiHsy ZGj0KqDr9UjOuR6nmHA1BOVFU/7B0gYqz1tui5OG91CQx+BFz7GdlO1gaee7h4G5Z+bxsKB801K Sw4WAI4PVIoB++/h9WmlBr7YYRRANOyffjCAlVEGcuIPI7ohRqvbsl7LuPsZyLR2SjsI2X2NUp7 6u27cC1swLccvVkZoQo4/tGqoMSn03jV1ZWnaXMJFIYDfBgU2RrHYGvh0rUGO6vJpsi9fdpztbl WB9tkX1lF9fr2LCrDyruoiWVXxQLUQCuDoohceyPr17D9M2vj66XdzXewlhQzwXESqqELeJ1jFk AlzWMkZKN/Hobgg91MZjLF/8Q3A6iF675ocmyTt7zKwM4C26Z55MOQBh+ArCYdWgFDRMGULboHB yAUa45SyHMxCotw== 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 15867bb481e226cbb4164642e470baecca730a40..bfcc3809f4b5fa351c8e7e6340a54e93d525aa2e 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 Tue Feb 4 11:35:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13958951 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (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 24F7B202C39; Tue, 4 Feb 2025 11:35:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668939; cv=none; b=OHccwCw2Gn8Wt7PntSTzvejry9NaQtttuVslYyAShewX3FG/bZpYWuP4/9Z12qprwr9NC+/H4bT7dNx5S+kC4paMCnUpeQLEQfwiKF/obnmxmbaD/Pl3Z3FbvYc+Fdn99JRyxicx/sqXTUCsPgYhQiIIWvOW6RGhlFzrBVIUU5I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668939; c=relaxed/simple; bh=hLy9TXg6nIhPoxfmNDiJnIiiKr4KfKw97Pj0OjO2JcU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QxniTx7p4UGqeG1RQsdWT2g6Yz+5sKskbbQWfwXbuTyaRpOfHYcTd9f239UQ51UB5QsRkkdC25a5L8dVy9SHCGe7LAywm92+8DS2V5nNGG4/tIPKybJR5cGheDusv8NHfC0/sdZtlNlr2owWVEmiqqj78eHRZ7A7otmflHYqVOk= 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.45 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-f45.google.com with SMTP id a640c23a62f3a-ab69bba49e2so825153466b.2; Tue, 04 Feb 2025 03:35:36 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738668935; x=1739273735; 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=kshh9gQrmmrR38vR7SN8goBhjS3FcwE1q+QpkHqdKgc=; b=fH84EUtRciqPaLTaslvnnbG7/2OSqckJzE4O8vRUzJBp6N/EQRYtbdyzDV6cqocz2z tjI/PCHfkTG0XcC7nnMYvyfp5GaG8qY8cRCIEIc0XXVHaDKLpmC7vtdTwVlcSe4H+VNF 5sclBvOn9kRutgAuWrEusd/wYkI4rjppiBTDdZDDPJ1rarAjG3zwRsUUa688g4Vdt+nR W9xCg38AHS9lP9i8/vIomoWCH9DVR8AeLIDSGMQmi4ogWgBMJ/OqWpl5Cz/VCMWskuhU +WpWntn/xGRXwDlJR4UNzv+ELvnYhdCOaefURMzJIeRGt5FSsh8GokfkUYSJOMVrNH9W z2bQ== X-Forwarded-Encrypted: i=1; AJvYcCV9OcuqmkJ6m6ueSCGSxhugFdPTtcLIGdfIiwCo4FJ9G8QUyZ59zKFwIOeUyBwWN9n6ItGbsbkDtLE=@vger.kernel.org, AJvYcCViZ3junonCzN4ZYxJffQfNFK8OXQmB/7xcioKsx7ZI6k90u1h6R2WSIHAvoibZeinl6oimHgCyQDvQTCZt/UPz@vger.kernel.org, AJvYcCW0IGzhxGrx1c2V0l1mB+9Imk1k3VvOXbMmZqJRNzBTbx6YpCl8Z2ReARq2m7EIXBNDYgn6Qfm0PawjcTYT@vger.kernel.org X-Gm-Message-State: AOJu0YyPAmEpSyc8bWnANtB8NFhPYey5b+AHGw+SO1zlohzLKKo6dzYp Mpb8mh5/faz9J7NqdQwD7t7pITn+5jB5jtROB9SAofSIpMobYKMwYCJiLQ== X-Gm-Gg: ASbGncvjFe1YmE9geBALQjuOzhd8Ky9II5XCmvGjeGFAKdB9L56FmV8KlXd25zAhp/h EZZqdWNNnXRQr5hGTOtB2sdByiM1abrPnhesR5bI+UZ5nBicIVmNQfYxqfFTY6/FSd6QLvx4w4Q Pic7JA4wjCAmaCUztZ+IiictS8gMzQ8G/J0Tlc+m9o7xluoMFZzbf9hsts2taZYMf/1jURTkFbw AbhYcmynEgYflCu5mdjsoPlaxHvIannuGZ0/nR6pz1tJ6lUtTJDp2yhwVffvpuf7+9PF7OTQIYl BwLMnTU= X-Google-Smtp-Source: AGHT+IG0XavFggy1ISsJG6VB35Gu5B1/c8zqrZxhlnydqXQkX7DYqvzpjkc/mOlahVuoSIfLSS0/ZA== X-Received: by 2002:a05:6402:268d:b0:5dc:740b:3cdb with SMTP id 4fb4d7f45d1cf-5dc740b3efcmr57278528a12.29.1738668934851; Tue, 04 Feb 2025 03:35:34 -0800 (PST) Received: from localhost ([2a03:2880:30ff:72::]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dc8eaafa38sm6186948a12.76.2025.02.04.03.35.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Feb 2025 03:35:34 -0800 (PST) From: Breno Leitao Date: Tue, 04 Feb 2025 03:35:12 -0800 Subject: [PATCH net-next v4 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: <20250204-netcon_cpu-v4-4-9480266ef556@debian.org> References: <20250204-netcon_cpu-v4-0-9480266ef556@debian.org> In-Reply-To: <20250204-netcon_cpu-v4-0-9480266ef556@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=hLy9TXg6nIhPoxfmNDiJnIiiKr4KfKw97Pj0OjO2JcU=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnoft+aeYylxjwv7smperkJBzhfNt2VPWfmzY6A 9lBq3yREzaJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6H7fgAKCRA1o5Of/Hh3 bcmWEACoZXzE+YK8lTIJ8bOFalVamkfp/Pr73MhtK5oJbL5nfgcvfgIwkinquGr/QRs+jpI90s8 qNZv1K6HAyvdXJIHp5XZBrFroH1f5Je50GeR5tESc7beXxJKgOBiQSTRhkhClNXTGY7lnAL8hLD yY8x9FynMYscpTDr4R3hpAd3BIbdEpu52/pahhwlLvpXmAqd0q1yhDKUua70aPSqXBri6BjtRR/ G33tfIAcXRxy/7VJ1+u/ur0v5mQGGphTcFW3nmPIoswZT95I7ftKHaZz71xWvPDzCQtCgH3soqi VQZ32lXf35EpNLOMBUv+7R/yuSPSwPhgmEArk9OsLBR/g7O4orL3mBYFGL20aGc931UfWM7Ch8L QxExSE/VHFiJqK0RUh3hvDRsPiltPe0RLHCpw215tQQ9wz9/clmJw8F9uAvHmMBxOos82XGJD+n HDcqZNIQxY9H4jl3QzcWbiyhXv6CLwDYRS7pZL09uDnUaet+P8ozQqDWMkMIyZvbW9cq9227dbq 0Fbk0tFv0uitenuJyKHNWHjiIAgb+lV0PC7l816M87+rKXk2o7VD2E4pDYypHgkXFQfVoFcvvzy 1C1+A0RPN7bUeKagv70o6e+Z3Kw5qlqhyfX2JCEPYxS8sOzDu9/77CBAPJfWtvinnGz+dgeMRmd iOLiIdVVIqbGFEw== 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 bfcc3809f4b5fa351c8e7e6340a54e93d525aa2e..c3f31b15ab8108f6be80d747ffc64a1eeb59a5a9 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 Tue Feb 4 11:35:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13958952 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) (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 C661C20E007; Tue, 4 Feb 2025 11:35:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668940; cv=none; b=vEZaF4EjUDI72eU6kB481O413lC2jAxsp6JgntSTLwEhAIYY2mKJZGgP4jJKs43Hgkk2OOa40vgQMPuPuofuRYK7P2QKRAZozurbC6KWIZHcHNbr04+PRAfq1Dh+KCEq+pyL9mzVMMPfx5GN17Af4auKU0MXQGfMLRzVhxLO7UA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668940; c=relaxed/simple; bh=TDqC7fD+fxMAo8/7y/hGgVVgkOS2xRk3o0bFxnvFUdw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Lljq5Vkx7fdvCFYhK9s0HB20EKu7mOuEBpBT6DyHnOX0EowL47oj9uu4OM/g4lc43oEsyoFe5nqbleeWwiJvgmi7zsWyHLJlcHT9G+OZXLSLcEYQYEnbT4EyKH+QboMPHWyuzHsDBxecwCVTG926fHJsPA4Eb0YZ8I03y+8dzWA= 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.51 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-f51.google.com with SMTP id 4fb4d7f45d1cf-5dca451f922so4191604a12.2; Tue, 04 Feb 2025 03:35:38 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738668937; x=1739273737; 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=FQ77TkRX8woOw0II1Uyf/2qIvjpBF3NsVF6MNMkwyak=; b=nWsf1wnV45CasKG3x5VxYkn/RDm8sO97iOPqKnL7LsvgxzMC2xsfPtH9EoPJzBE58F AnYITAI8RcJgAt0zER9/+q9YjZEHrAUQbUoNZinqbRuza7HfnXpmenAJOzOR/nD1SE4Z PHYhkwqrOxPegi/9PdNUT026n7+eSQbKP1tXHgcilug16bDKwGNGR9wUXK1qoX1BZ/RT tlWYsGqXgpXqmsAEMj8dif3AX85d39cUYAlrKZtI1wv9GVMuT4nmyVwhJdMlvVN2mF0h UMOKs2dqiOjMJFxH5cbteZVRZva2tBhRXi/Mr4uA3EElu9Xg+i55sdo6YbOp8uJGGJSR 0vRQ== X-Forwarded-Encrypted: i=1; AJvYcCW7KgidffqG/QBjR/lzT/WlOnxqQ+xfnxRNckO8HE1d7y53SgThXQCwxGSR8TmE2TrW5X4hKhr6J6E=@vger.kernel.org, AJvYcCWiW8J4UnNV39TeyePZcIDFs+RbTbzjZ6R5rkMkzdOsurtv7vx2TVwrWhvZbSlB1bnK3ggkYbGa/UyXfF0P@vger.kernel.org, AJvYcCWlMS5rZkMXW5jzla+2pfFld+ZxU3aLIb55DkaTE8sKcVErwvSnXeH379KQeeClGZHsD41wd8zdP9k5n1enk8pa@vger.kernel.org X-Gm-Message-State: AOJu0Yz2RiBuuGLkfsbD2yIVWmbyOicgC+j5TLJ+SCSd+os1rp1AbO9A 9BnH3RS71b/4HgzDvBH04ZNLRSkrheuv578Ojo69QwZW2V2vhijnVU0Ynw== X-Gm-Gg: ASbGncvw88F8tEQV3WIXcmEImjoHZ0sqCOtyyvjh7wo3PD/SeaQgvLC/6Bqq1C8830W RQuEyuEdZeOAyoIWaXYtviJKnaD/3rMGnx26OkmvxVVdjnCst3kskbx3qXLSCAHfQugnGHDI4fC SheOIfPPNKlZvcAK9Q34/IAx1ue9pJuxbVtTSrlDDo+rb9i7HHLx9Bmzib9cblYUTzxpQObcREz QidafrdrKslc5gDdPs0dsNWV+Hq+3073aMi1Dgwk3M0VmGVd+bnfg6cUatQ/QcbXJOGBXX6Gjzy IXE= X-Google-Smtp-Source: AGHT+IHm87cbgXD+rLCRowe7VBMk5wnHEbY9pNjoPbxgIbQThnsfZYfWteZC7REzGIu0iTbvGZ9CWA== X-Received: by 2002:a17:906:f595:b0:ab7:479f:8aa7 with SMTP id a640c23a62f3a-ab7479f8f86mr381597466b.30.1738668936438; Tue, 04 Feb 2025 03:35:36 -0800 (PST) Received: from localhost ([2a03:2880:30ff::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab6e47f205bsm903107966b.86.2025.02.04.03.35.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Feb 2025 03:35:35 -0800 (PST) From: Breno Leitao Date: Tue, 04 Feb 2025 03:35:13 -0800 Subject: [PATCH net-next v4 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: <20250204-netcon_cpu-v4-5-9480266ef556@debian.org> References: <20250204-netcon_cpu-v4-0-9480266ef556@debian.org> In-Reply-To: <20250204-netcon_cpu-v4-0-9480266ef556@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=TDqC7fD+fxMAo8/7y/hGgVVgkOS2xRk3o0bFxnvFUdw=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnoft+jQ+jckGc0NrGzmgUOIngHg/gKkOAY9a8B CaEXDL7wWGJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6H7fgAKCRA1o5Of/Hh3 beNxD/9k5uK/2KGYwT4QKnLZSxAunyqfOnp+DE02IE6nvFj+J4SdCHvLbTJOTfm4wuVtIno0Xov SHVnw9iU9Nrm0D35+jcQKSIFMK4wYXtP5w5JAnZPSWpLtam7uNZcysNNw43+NxqwZV8bULnGIAh uIT8MnSmOqIQCxSt2qk4xEWazC6bQDC+jRVxTYnoAnfRpVkAXlJVDgULk4g5821AHm+qWndchoe Ndp/jD07f1jiyJEtRvaDWuNaE5XhB3f8UHtB+O5f3eyjeam4N8vvx6tMDqW6fc9rsJC5/h+g9qK cybPLZsGE9UCprnXDHCErn56Ww50mGuzMiMuluLk40Foqs2GkHUSmlvrHoMyGdVDaCQQwByyj/H G1Re2cWp7C13JE893EqZQZsGskSF4oHM3RXPCE5DC8JIxQGFIOIIvExzQPzzkbAOAC7en0EFpKo zYieT8gQBVIv6PI60pc7nJAa6QfHcqf3CepcZG7Ik/2FxPWltwPu2j/peeW5tF5O0mpvLpwFuKJ J2gMxfD/NeUIhM6U/ywI3hcGmxt3A8o1ahr3U6t1HyPpdYSSGO6FHGaAXsb/vWMeLOwCz0Py+yj 1rNyY1TXw3wXsaqzHcLhtPTS4c3LpXc3VDIn6F4DB8fpEHVPUA134YT9vZ48jTiuzWFwn4erCe1 JFcxflqOHbA1h6w== 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 c3f31b15ab8108f6be80d747ffc64a1eeb59a5a9..4255f547bdecfbdaf02ccfb28360ba6fc8b58bed 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 Tue Feb 4 11:35:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13958953 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (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 4F64720C46B; Tue, 4 Feb 2025 11:35:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668942; cv=none; b=HnWw1Wn0E5M8PSlp+V3DgQV47YzCTIZDt56vmdBcMgZHy4xBBo+b7jwNYhf7EY17cYnvUb41qlUzW3S5/fM1SwIfbvzjVklWjaoCJ8tPj/LvtJQeAgQd9YV4hB1mI3ObHeg7s57b5j9gAqn3BLu9ths5lKHBsYuxiYjCOfiDkxc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668942; c=relaxed/simple; bh=xLQWYHSSQoD+EjBCSRRVdC+nRYUe+DB4GVrm5CY1At8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iKqGntA+Luopx/T4py3i+Ux69hDWHvJP9UVh8RoBGPFVlK6ZXAFoTB3t8iyDfuPEkN0TVukhngle+cpTmuYO1SPhz+c5GPIVryFWagZGgK+fRM551OoIuv9GXo8um0qDinnz8of/SRWohYEeeqM9T+701v8z6tJceQAUD+zh0Tc= 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.49 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-f49.google.com with SMTP id a640c23a62f3a-aafc9d75f8bso1090565566b.2; Tue, 04 Feb 2025 03:35:39 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738668938; x=1739273738; 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=HxdWjnTSMeOLZHgJdp79TxTqQugOh3yw+hsn4aWgrG4=; b=kPrjDzdrIiHv+xApbFsOKngnRTlIq5a5pmuAalfwlmJfatH4/dIBJnVAumOg9219zA FJoBD6BIROtdj5eB3DapotVqc9GTuJDBoU3wUZfLZ0hddgwLsUo5VawQQ0eiOHpjNkdA yZhrqUfnzTGKe7pwaSVydLpOGK0kgve9R4jmddVVelmlXxHQbbDgVs7QGRgSgIcLlIZt I6kpP71zVnIVc5v/+4LRJqzxXhpUkSou1rJJ+WPDn9VSpOf8wBf37WMErsOduRKgG2E7 n1KFTfGDdPn6rvK90AF3untSgnbtB93b9v9sVEc0MH/h/ViPw9OUUFcfJx7FPayMpXri MEUg== X-Forwarded-Encrypted: i=1; AJvYcCUPmiYtkRt4iooub/G3LCFSPKE/IJaHw+TWDB1HMB5xYWV5kJDRN14NS6fAQv6S4waJw35d9AO1iMB/1AOR@vger.kernel.org, AJvYcCXUlGmh+E2y3xtghZyYveIahu94DWPDN1x/DOR0yvITWWtA1mLUtVyXbcjs5YOroso+PJQVy3WgfbtGzs+XugBd@vger.kernel.org, AJvYcCXX52tzjq+NqSXqgPLHC/I7idY5j64QJ3FiPXlxYZx2mDTYeMYpJj7zatyEPc7uxcS/513RlnDsv0s=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1vn3H3T4++JUZkCjgT7sRFTi6qRyvW+JhBb/AxeGMwntv2ZRn dPN7LOmUKhQmYG5ElSvHLkqqIWO5u26K/QY5hJ6uPiKClwEiSQwAM80Zbw== X-Gm-Gg: ASbGncvYLRKaD2Vg0LFs+dNgyrsjOf5omM4a2Npt0xKAo+GkR/dTJVDFJ+ZLM3fm/wj cv/I6PylR1BKIZTayl+4Rw+cbWTXSJkw3Qr9NIZyivZcBt32GSNsdM85sWngCvmEOejfd5Cv6GU UbFoBBwqA67z2AYzBbP79ls7fq82vVCzffK1gRJlSpEX0xrsCrQRoE8xN/OHLgZZWrexPJpzUgL LSXyZ+e+jqtAZrocDpXRfHq2lHjehp0+awKX1T9hw6O2+YTXGJGqQS5rBhaDP0WErRuoRWFbrhK z1o= X-Google-Smtp-Source: AGHT+IH9XRj50A4yWWHjc9zgZ3i8fYAw76Vwpz5S4/Yiwv9+q2T7qWWA4CbrVzAiX6iDqFPtq0TRvg== X-Received: by 2002:a17:907:86a0:b0:ab7:4262:6851 with SMTP id a640c23a62f3a-ab74262699bmr573070566b.30.1738668938062; Tue, 04 Feb 2025 03:35:38 -0800 (PST) Received: from localhost ([2a03:2880:30ff::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab6e47d0f1csm909998066b.70.2025.02.04.03.35.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Feb 2025 03:35:37 -0800 (PST) From: Breno Leitao Date: Tue, 04 Feb 2025 03:35:14 -0800 Subject: [PATCH net-next v4 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: <20250204-netcon_cpu-v4-6-9480266ef556@debian.org> References: <20250204-netcon_cpu-v4-0-9480266ef556@debian.org> In-Reply-To: <20250204-netcon_cpu-v4-0-9480266ef556@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=xLQWYHSSQoD+EjBCSRRVdC+nRYUe+DB4GVrm5CY1At8=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnoft+2jxbBFJnKCp+efq0T2kogcM9K60SW6ptV eq0EEmMhdeJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6H7fgAKCRA1o5Of/Hh3 bZzmEACXzOz+AkTzIHdTLnqfn1+JeoKy6NlA9DuCUWnO688eiq4NDBV+QLdKuavUeewACVHhrO7 EStLAa1L9gCn3MzvUpBhoHpvhq2yAnjXoT9lHH6hrrFxkhUDFuX0Qy4qZdptmZ3Q00ky0CXsmJA ITWfiRuVguNqWZTq6+91IX0BUr2j+0INb6ry4t/Yj91hYITvoJgZuYjpJHGqrM9IKof9oayaPCI BNYFArL8BbIFv9s3JWlyuC/LMX5GOGK+9/g8fnIoEB8R2WSu6iXQHHmyHbIVazx+URLKsM5AoZq QuoYTznxxIsl/MQiubF98CIB113UXpnnQy6/rN/W88b3q9NXkIQN2h4WeEETsHdXwmztcWoEUzl aYpoj5AFn6FZW8jphj1CJ4UPmm/4MAO58272/MDf5i+n+vkWZaAuKLt2qHrKZrgR0hABKtcKioI jTlqiZ97OqzjSsUYSarktRwUdtP0TtnsvNG3sffZwIk6k7zjX6D9xDttCgXbv7lBPNQHUEUcNvA tLfJTMh8zuwhJbjF3EpHlFBFDGc1zfs43zN/LP3a8antpK95DjhEwpFMS6EDbaEBeGhc95+SsSl Z1ZkPfyDJta9QrLy1nbeQmsGMzdH1sHHxDcSfw9or1OMVH46fvF4o+d84VfqN+FFP2fbXPxpb+e cr2l8L38ZQ6QMGA== 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 4255f547bdecfbdaf02ccfb28360ba6fc8b58bed..07298caa0a12b7f63e1cf9eee418a3f6a696a021 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 Tue Feb 4 11:35:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13958954 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (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 EBA512116E6; Tue, 4 Feb 2025 11:35:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668944; cv=none; b=OggXWqpB3sRJX4tZtvhCUNealpe6JwEg1LRtKXABJuEHgMBE+bBsJYNNI3+rhIZGzzLV3gQKpGgP33EBobu3+ZdmpFY8dgQynePg7UGB6dynpLAmwQOSjZGvYtkoN/QOhap/Oa4ghcNeZBcO83qUaR1bIqdb6ftP0Fw/qPr0Ei8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668944; c=relaxed/simple; bh=EWk2ay0albPWO0VUzwfvd3FuxFeaTYfwca4yspDY4GM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=chaB9axV5lKc+kQVQXY8RayviNYdWZRCyIyqfM4Gb5UzGNPSJMyc3D8fuBIEMYz3ofTI5TV+x0CLXHcdOq/LOk+pA2uIrIfYDgDSdbrrIT6Hy4GLLTmK7Bna/fM9JL8WncRnO7/Y/H7yZyj+4WTY/K+HNfdgbxCCb+kXig/q12c= 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.48 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-f48.google.com with SMTP id a640c23a62f3a-ab68a4ab074so674149466b.0; Tue, 04 Feb 2025 03:35:41 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738668940; x=1739273740; 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=rPbOHSfTAHpzCG/QCDgBl7AJTnT2FBMlQ0jVBz+DjsLGy+RGbeYtv/JWpHFaTtVMPf dVEeqjaCRFrqznC98o6ehdS0pBMmzCXBDMKSZLe9bG3MO4b60qG3QbXKDQh/+I9jm1t8 LpFBspUCtRCxWACqUvaHH5VCaUaaGi2BD3scVBhMxgZD0T1TwHD6xkmzgO2oaaUFcv9b Fj8XK6covQLUYjyBsbcyQph2GZc1/3HhiqYaKWBMsZMxgnlmFgsTAcOVZAe8TE3b0UNV RGSGBuPzfp3WA7892Q/gOHX/u1DmH1en7RiynU8Z5znkT5ao/J4eB9FRyJ1BmQOKqiSw FSTg== X-Forwarded-Encrypted: i=1; AJvYcCVRqELExogmYSNk2RKWIZ3q+ryATjCMnfyYFrWX2FB8GNPempVzOf1vtdYP5WWqqwEdXtbLEb0fRoWS2U/rbFil@vger.kernel.org, AJvYcCVtHgK1ZNCbC7/VnqO8qkIYQy8MKlClNLXrqo6nYvyrgGF+J/uP/K7RKE9f76wty+4omFfNTaYGzlM=@vger.kernel.org, AJvYcCW33LCbsnjqMbpcepOuHB3Lj2xRtMWkSDxa7svlsrwQO0WTIrv/eCcMsNfs5t/rb7aSgk5UzC1tfoX6pbE5@vger.kernel.org X-Gm-Message-State: AOJu0YxKvln51nv6WEJkHCh460GyD8bglzcnZG3yu+Y0R73SdO+LJUmh swVp9e624rHZoENOxpQycsyD6goqQjM3BnWalnmQ7TZn5NPvuzoWpEPIgg== X-Gm-Gg: ASbGncvsBCR/FI16yCl/PdfSUk1o6Ku8IpLlxmA16epxMT1qzs2c2Z915WxIP0lQu0j 5oeQa/3wKQugkct2lz+X5jAjgZm9Q3YGUW23MbkyoCNoe4Ao8B/aRzZm3wdd+4wczG4vQ8jo4Pd nPrfKfUsZZYFeIPRsrfRiamo9O8ME5Bd73fSAox1uRseX0w/bnoOMiSN6pj2jsL3AHDbIcbjbOE RSI1XFKuUchatAd9Jn0T2n9eE+CfJ9yeUfjzSbwNxD3mkgVTAwX+B0EzE9YDQqeKUBax5J9BmUe o6odI20= X-Google-Smtp-Source: AGHT+IHDbQ1+cLNBPQxoOFBV+3VXprx5YVL2fhuMmRdRdGknXrBharEkYL7xW71lznoSIMEG3h/FIg== X-Received: by 2002:a05:6402:5285:b0:5dc:a463:ab96 with SMTP id 4fb4d7f45d1cf-5dca463abf6mr23965091a12.19.1738668939633; Tue, 04 Feb 2025 03:35:39 -0800 (PST) Received: from localhost ([2a03:2880:30ff:72::]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dc724a9c76sm9357917a12.53.2025.02.04.03.35.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Feb 2025 03:35:39 -0800 (PST) From: Breno Leitao Date: Tue, 04 Feb 2025 03:35:15 -0800 Subject: [PATCH net-next v4 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: <20250204-netcon_cpu-v4-7-9480266ef556@debian.org> References: <20250204-netcon_cpu-v4-0-9480266ef556@debian.org> In-Reply-To: <20250204-netcon_cpu-v4-0-9480266ef556@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/8eHdtAcsmYgBnoft+jBqVcviLLuFniqVgH0ydldvphC8ymZkQf kEj8f4wAPaJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6H7fgAKCRA1o5Of/Hh3 bbU/D/9kiqFvmq3sVhypIhxv22X21ABBavGODyL5+5dgDYzrbbvt10XDPxjxayWScPsFzgayh0e kW5JSgVfoyAJ0gBFClzHRZR/yUSs+IoZHDpQpF6IEhSepI55YCpJzIgkZsKTQXW3AA98gcYJxPg G+NOk6eNNmSo5oGh1uY7TWMhoHdDO4rDO11ymjVU84+eB8IEPboTNYMqganY5o94tZDH+of5wwQ EX9aPtVLAZcB1BaxzOVIm+Q9J+E4IWPUmmKAwsLTEyHiXOcffdQm6oaz/jdhDOUFLAcxC4Fx4jI ICAUm4JW0ozRK25g3lNgFDfYmnxammbVqJj/8B0YGVkdrxHCirIdlksgD8ocCmQb+RdQS4UJciQ MwfiPwe7Cxn8DrokW5sfS56bL+IFVcDb76VNwPTikKEtHEpAfDjT4uWm95yDfat2KDNmfhf1FXb 4ATsBGGyCDhEl5m5JBH7/uvL4AsDd0PiKGDzLvp764j8WWcRmD/prTCs/6wrVJPM2XRuAB+3XxX LKrvm81YLZHGbUN+Ra/9PYqh3j/4fHSjGtcukqnuSav3UQVtyoMmXHwQLHsU+ADQphAOMHFqCzQ VVZ63PPsmnmJZ9K+z6/hhYbl3m2rqXMljb1WrG+t6TS9ey2Ts18qZ+p0Hy6de6TaZM9ZsaCeqbR 7lMhTTfNm3PMYvw== 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 Tue Feb 4 11:35:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Leitao X-Patchwork-Id: 13958955 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 78FBD211A31; Tue, 4 Feb 2025 11:35:43 +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=1738668948; cv=none; b=R2QxxnreBGVTKjXQPJjx0WGwvgastTbG1Hs2jVVEtkrrg+Q01B7WWTXvD8KAzf7v+2XZRatH86PlXrf9V4uGcpHzPehR6j+7yBLfqNAPdp5PN5EGz4bZ4JmR7dSqq33oFCppCjOFkr8+YYDn1P/b2kbcCS1dHyhJoRboJ0qQAcY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738668948; c=relaxed/simple; bh=2pUaLVwLHOwxMYDPKEmqQLY0Bgk29Kn0tTJ8gIKafis=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RrCeVChsvKzOBjWv6Kp3ZlRwyNIJilv8Q3WEhq79CxEiSSBCYyFXz4ydhic3Ldgfia6YJ9OuVEXVQFe1LdWn1Lx0CxqXS90H0GFJNrQD0s630HKqf8szpH/dx6XJX6+iD4ebRsI9pVqhJZnWaSEo9Z8N1biq+nT+66IyXfTVP8U= 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-ab70043cd05so847517166b.0; Tue, 04 Feb 2025 03:35:43 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738668941; x=1739273741; 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=8PPqcIXQzYEFsqNlbLKuHZEq4XrZtJwQTMEp1c3me10=; b=NrNTyVXTMMz/Z4on3YxpLZdDHnlvK5egX9Fix244TFZ44itUygaXJmR9KgpmmEXSd6 uZ1fy8Dl4GFSzALhP6Ji550SqNP2ZgzouiFqhXwyiRShY4j6/k7wSDE//CTe3y2E+V6p J/RLgrdkWWrVT1gPkw0kb9dlwo02NAybjcHlbb4WGr4NEg7lrPTAGMHzt+LEdGLrVJ66 ubFm/yR2H0yhdZi0R5oKtgdTZU7qvJVoYYTSMQYz2i84tsned5NJyUz6VcrnJ2aRWi6F K7IBXhbIyf7jgVec0912flzxaVHgpOJj4UA5KMAV9NbmP5Z515bxzcUHtb0nygVRqluL E1tw== X-Forwarded-Encrypted: i=1; AJvYcCUaBmveCwcrTzh2dDGw6IvKUItUQsbjyh8OT3eIVfRwkMyFN8p8XWvFoyn4lFpV+zobqbfq9FvcxLluPOuN@vger.kernel.org, AJvYcCX371YXP+y5XqKoCyrIu7b4cf3nqown3Pxut580OH77jraCIpLbNbZuNgGN/sd4Hv4K4YI5alz6Zrs+IyyzCvFg@vger.kernel.org, AJvYcCXuAjz/nz9nBaDUlhDFyzd4u5ZY4Q91/ehhZ67IJrEIO8jiQLBMEefVnFYp2wK2kFizd7MbS6empDo=@vger.kernel.org X-Gm-Message-State: AOJu0YxCBYXeCbRMPcZfMZx/pNE3EghEJJsJzbh8YZyIdhA0/rMOnPXc vkdaQV+hm27MvInZQ5n5ed02UX6+gJM6JSmBhTMuLfiGJLqLvwJY7i3prA== X-Gm-Gg: ASbGncs649lptlPxVtPU9mncbEEtpukOMnqSQrEXiFIqQYoRhIrNvtlAh7GZsrq+pvu vCNFJDR5UPp7NYKpbqVLRy0s/NFaXH8uaP4MprEPDcGB2/IfmxdCd7Bu1/t+LVFuOgsYXN8/zqH /r5zWDutNtwJlfoKIqLStS716ZQ4YUEamTEGpPlrtXhdGqj745abzmvUM5Q4apF88k7AjlxvY77 JtDL8IVITgoisy/hNcoq3cFZa3vaLBqDfC0hQOmlp2ujqvSsx+r/5BGQPlOJAZQkxbj5L623+J3 USKXhcs= X-Google-Smtp-Source: AGHT+IHCyfaueKIUNYUPir9gO/xg7NSDPC0F+tsupVOVvkWrV6oAN6co9B3Ale6w9VUTWBCuMyZH6w== X-Received: by 2002:a17:907:7255:b0:ab7:e71:adb5 with SMTP id a640c23a62f3a-ab70e71b1bcmr1353777066b.35.1738668941218; Tue, 04 Feb 2025 03:35:41 -0800 (PST) Received: from localhost ([2a03:2880:30ff:70::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab71166a8e0sm545657466b.158.2025.02.04.03.35.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Feb 2025 03:35:40 -0800 (PST) From: Breno Leitao Date: Tue, 04 Feb 2025 03:35:16 -0800 Subject: [PATCH net-next v4 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: <20250204-netcon_cpu-v4-8-9480266ef556@debian.org> References: <20250204-netcon_cpu-v4-0-9480266ef556@debian.org> In-Reply-To: <20250204-netcon_cpu-v4-0-9480266ef556@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=3164; i=leitao@debian.org; h=from:subject:message-id; bh=2pUaLVwLHOwxMYDPKEmqQLY0Bgk29Kn0tTJ8gIKafis=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBnoft+8Sx5tY+XOi3a1CcmSvKXupO1Hflji0JvP kGtZ1lphD+JAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCZ6H7fgAKCRA1o5Of/Hh3 bQ4nEACZUwIqUq8eeC7HBNxcADsyp9IxDLdVgHJp1/faFHA5nEda5PJE2Rgxf2enEQTh7yr49x3 Y8CW7ZSk4uK8NFjVVmnWAvBOFe9FVLvP7SWswe5cU5yvBMuMAZZEsBZ6ZbwPDHv1PZylN/QQvMZ /nEyieCeWDFOBV0YVmX7gXPxkdjh1BWrxkIcevek/fb7K4WdWMI3bSMhVsnbaiPFKdgw9OUuxr8 MbC0ooUwRUGUmorSCNbCF7EMbSvmqSb9RJQh+pdmEatxP0kY2NKfjZ54+Y7Gnqlu8VBALieepKq 1OSFUAKrJQpRlv4BcSzEXghk7Eh1hxaoBw0RlvBeguyiK8GUev+cnsokATcwdr7QBCkUhibYpM/ gSd1+mU/55+P8r2HiZ3JWyVIsp7F1Z7xAji2keN+uqySeMFi3WfpZkwzQlQ4cZ7EgS7X+E+uTil UcE26rjnDjIuMivbikAcIXNKAC9N3nZuUWONSLtrkhniHYDCf1rtDdpCRXQouqvIWD/ZaDJN5Xe mbHBDf7p4kHLg1lmpiNxDhsQzExojGkuBJU+0sdVa7Zn0sEWb6dtJTI7U5s3lSnrl+ONmqJ4jUf 4HzSSbmvwhRIxk5RuQNnXgd74sT5ms6rc0voDB3eZnMdr3eJs/hgVgOMH+1k2vd27ETGGUTJkb/ ItbN1bm9VVncpVw== 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: =================