[{"id":3678543,"web_url":"http://patchwork.ozlabs.org/comment/3678543/","msgid":"<b0c30cf3-751e-4f65-81ea-393c568dde56@kernel.org>","date":"2026-04-17T07:58:21","subject":"Re: [PATCH] powerpc/perf/hv-gpci: bound sysfs formatting with\n sysfs_emit_at()","submitter":{"id":92089,"url":"http://patchwork.ozlabs.org/api/people/92089/","name":"Christophe Leroy (CS GROUP)","email":"chleroy@kernel.org"},"content":"Le 17/04/2026 à 09:48, Pengpeng Hou a écrit :\n> systeminfo_gpci_request() and\n> affinity_domain_via_partition_result_parse() hex-encode hypervisor data\n> into the single-page sysfs read buffer with sprintf(buf + *n, ...).\n> Both helpers only check PAGE_SIZE after the formatting loops have already\n> advanced past the end of the buffer.\n> \n> Switch these appends to sysfs_emit_at() and stop once the sysfs buffer is\n> full.\n\nYou are changing several time a single lines by multiples lines that \nlook pretty similar. Can you refactor in a helper function ?\n\n> \n> Fixes: 71f1c39647d8 (\"powerpc/hv_gpci: Add sysfs file inside hv_gpci device to show processor bus topology information\")\n> Fixes: a15e0d6a6929 (\"powerpc/hv_gpci: Add sysfs file inside hv_gpci device to show affinity domain via partition information\")\n> Cc: stable@vger.kernel.org\n> \n> Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>\n> ---\n>   arch/powerpc/perf/hv-gpci.c | 56 +++++++++++++++++++++++++++++++------\n>   1 file changed, 47 insertions(+), 9 deletions(-)\n> \n> diff --git a/arch/powerpc/perf/hv-gpci.c b/arch/powerpc/perf/hv-gpci.c\n> index 5cac2cf3bd1e..325b80f01629 100644\n> --- a/arch/powerpc/perf/hv-gpci.c\n> +++ b/arch/powerpc/perf/hv-gpci.c\n> @@ -11,6 +11,7 @@\n>   \n>   #include <linux/init.h>\n>   #include <linux/perf_event.h>\n> +#include <linux/sysfs.h>\n>   #include <asm/firmware.h>\n>   #include <asm/hvcall.h>\n>   #include <asm/io.h>\n> @@ -134,6 +135,7 @@ static unsigned long systeminfo_gpci_request(u32 req, u32 starting_index,\n>   \t\t\tsize_t *n, struct hv_gpci_request_buffer *arg)\n>   {\n>   \tunsigned long ret;\n> +\tint len;\n>   \tsize_t i, j;\n>   \n>   \targ->params.counter_request = cpu_to_be32(req);\n> @@ -176,9 +178,17 @@ static unsigned long systeminfo_gpci_request(u32 req, u32 starting_index,\n>   \tfor (i = 0; i < be16_to_cpu(arg->params.returned_values); i++) {\n>   \t\tj = i * be16_to_cpu(arg->params.cv_element_size);\n>   \n> -\t\tfor (; j < (i + 1) * be16_to_cpu(arg->params.cv_element_size); j++)\n> -\t\t\t*n += sprintf(buf + *n,  \"%02x\", (u8)arg->bytes[j]);\n> -\t\t*n += sprintf(buf + *n,  \"\\n\");\n> +\t\tfor (; j < (i + 1) * be16_to_cpu(arg->params.cv_element_size);\n> +\t\t     j++) {\n> +\t\t\tlen = sysfs_emit_at(buf, *n, \"%02x\", (u8)arg->bytes[j]);\n> +\t\t\tif (!len)\n> +\t\t\t\treturn -EFBIG;\n> +\t\t\t*n += len;\n> +\t\t}\n> +\t\tlen = sysfs_emit_at(buf, *n, \"\\n\");\n> +\t\tif (!len)\n> +\t\t\treturn -EFBIG;\n> +\t\t*n += len;\n>   \t}\n>   \n>   \tif (*n >= PAGE_SIZE) {\n> @@ -465,6 +475,7 @@ static void affinity_domain_via_partition_result_parse(int returned_values,\n>   \t\t\tint element_size, char *buf, size_t *last_element,\n>   \t\t\tsize_t *n, struct hv_gpci_request_buffer *arg)\n>   {\n> +\tint len;\n>   \tsize_t i = 0, j = 0;\n>   \tsize_t k, l, m;\n>   \tuint16_t total_affinity_domain_ele, size_of_each_affinity_domain_ele;\n> @@ -483,22 +494,49 @@ static void affinity_domain_via_partition_result_parse(int returned_values,\n>   \t */\n>   \twhile (i < returned_values) {\n>   \t\tk = j;\n> -\t\tfor (; k < j + element_size; k++)\n> -\t\t\t*n += sprintf(buf + *n,  \"%02x\", (u8)arg->bytes[k]);\n> -\t\t*n += sprintf(buf + *n,  \"\\n\");\n> +\t\tfor (; k < j + element_size; k++) {\n> +\t\t\tlen = sysfs_emit_at(buf, *n, \"%02x\", (u8)arg->bytes[k]);\n> +\t\t\tif (!len) {\n> +\t\t\t\t*n = PAGE_SIZE;\n> +\t\t\t\treturn;\n> +\t\t\t}\n> +\t\t\t*n += len;\n> +\t\t}\n> +\t\tlen = sysfs_emit_at(buf, *n, \"\\n\");\n> +\t\tif (!len) {\n> +\t\t\t*n = PAGE_SIZE;\n> +\t\t\treturn;\n> +\t\t}\n> +\t\t*n += len;\n>   \n>   \t\ttotal_affinity_domain_ele = (u8)arg->bytes[k - 2] << 8 | (u8)arg->bytes[k - 3];\n>   \t\tsize_of_each_affinity_domain_ele = (u8)arg->bytes[k] << 8 | (u8)arg->bytes[k - 1];\n>   \n>   \t\tfor (l = 0; l < total_affinity_domain_ele; l++) {\n>   \t\t\tfor (m = 0; m < size_of_each_affinity_domain_ele; m++) {\n> -\t\t\t\t*n += sprintf(buf + *n,  \"%02x\", (u8)arg->bytes[k]);\n> +\t\t\t\tlen = sysfs_emit_at(buf, *n, \"%02x\",\n> +\t\t\t\t\t\t    (u8)arg->bytes[k]);\n> +\t\t\t\tif (!len) {\n> +\t\t\t\t\t*n = PAGE_SIZE;\n> +\t\t\t\t\treturn;\n> +\t\t\t\t}\n> +\t\t\t\t*n += len;\n>   \t\t\t\tk++;\n>   \t\t\t}\n> -\t\t\t*n += sprintf(buf + *n,  \"\\n\");\n> +\t\t\tlen = sysfs_emit_at(buf, *n, \"\\n\");\n> +\t\t\tif (!len) {\n> +\t\t\t\t*n = PAGE_SIZE;\n> +\t\t\t\treturn;\n> +\t\t\t}\n> +\t\t\t*n += len;\n>   \t\t}\n>   \n> -\t\t*n += sprintf(buf + *n,  \"\\n\");\n> +\t\tlen = sysfs_emit_at(buf, *n, \"\\n\");\n> +\t\tif (!len) {\n> +\t\t\t*n = PAGE_SIZE;\n> +\t\t\treturn;\n> +\t\t}\n> +\t\t*n += len;\n>   \t\ti++;\n>   \t\tj = k;\n>   \t}","headers":{"Return-Path":"\n <linuxppc-dev+bounces-19825-incoming=patchwork.ozlabs.org@lists.ozlabs.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linuxppc-dev@lists.ozlabs.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=IBOpVpJg;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=2404:9400:21b9:f100::1; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-19825-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)","lists.ozlabs.org;\n arc=none smtp.remote-ip=\"2600:3c0a:e001:78e:0:1991:8:25\"","lists.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org","lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=IBOpVpJg;\n\tdkim-atps=neutral","lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=kernel.org\n (client-ip=2600:3c0a:e001:78e:0:1991:8:25; helo=sea.source.kernel.org;\n envelope-from=chleroy@kernel.org; receiver=lists.ozlabs.org)"],"Received":["from lists.ozlabs.org (lists.ozlabs.org\n [IPv6:2404:9400:21b9:f100::1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fxnLv4cNhz1yGt\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 17 Apr 2026 17:58:31 +1000 (AEST)","from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4fxnLv0Xh5z2yhP;\n\tFri, 17 Apr 2026 17:58:31 +1000 (AEST)","from sea.source.kernel.org (sea.source.kernel.org\n [IPv6:2600:3c0a:e001:78e:0:1991:8:25])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 4fxnLt1C3Bz2xpt\n\tfor <linuxppc-dev@lists.ozlabs.org>; Fri, 17 Apr 2026 17:58:30 +1000 (AEST)","from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58])\n\tby sea.source.kernel.org (Postfix) with ESMTP id 3E09941842;\n\tFri, 17 Apr 2026 07:58:27 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id E2086C19425;\n\tFri, 17 Apr 2026 07:58:24 +0000 (UTC)"],"ARC-Seal":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1776412710;\n\tcv=none;\n b=meSMovnlJjA+gizkYxih+1BnVgxLPBpPxwIatLrziaQII8DCPNQDhmijsq/AscvuFywAlQq+81trsIIhY46B3SPlsqdD51UuUDRRX9BlQ2ul6hufMqdgYgOfgdIMUIvDYgL5FAQMmNon6ANmfcVsu5K55G6pYrlwQw6FWTjm0JX9orlAejyzME/tsusqzksdqLAEXEJ4d9GnbYqHXfW0kZV1FB2WBScx6FnoiZlAsGSQG7nKjGOBk5FVSSbs/kxw+NUZWe3kCd41ivqtUo+ByhLXZgSwvXzCK2OwG7rUemZConJrVTqlGg0E1rvmtf6qEjnOR2GxO48qhrf5rgwSAA==","ARC-Message-Signature":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1776412710; c=relaxed/relaxed;\n\tbh=B9tw2tZGsXUMz/8zSZvqLbDzN0OphcNcggHmkLxSIf0=;\n\th=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:\n\t In-Reply-To:Content-Type;\n b=ayIhwZIUG2byrqbfp9pP9uISEgSYDXdU2du/Ta8soO83hNxnyyTORl6I7ariF/IOyZiYQavgAbd2YUCaTdmm86D4KHdis7cVBrOZg1HDJT55o7obeofAetyJqNFgtey9/jJjVulF0Ho32+ZVCcza/rS10CAZI0IvKk80Lk3MPnfla8STfP5/fvW3M5H4SfK8e55XN0lEMLbv1WBCr0bIGfO7iY5AMbKClHFBFsrCV7O7haetjEbKVdFy9bnV6iC347sULky3X+25LkfuOT3AkbS+v2Rk6zVBzv0uChRoRhyAZp19xEB5aWlArjG4EBRLIK+ZgiKwakXeJg6VoHNcmg==","ARC-Authentication-Results":"i=1; lists.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org;\n dkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=IBOpVpJg; dkim-atps=neutral;\n spf=pass (client-ip=2600:3c0a:e001:78e:0:1991:8:25;\n helo=sea.source.kernel.org; envelope-from=chleroy@kernel.org;\n receiver=lists.ozlabs.org) smtp.mailfrom=kernel.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1776412707;\n\tbh=VQUKrR9nWoPJsROPvUoUyOlHujMLWC88AwwtyCd0cKA=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=IBOpVpJgooMO5weqdtaWKIw5U1JbNTBM54JOf/4zV/Kr+ECkCLA9/Ho9PE3A+sei6\n\t U/ynTePxGr4L9Gukk9q6spzWkSKR8CYi3uL6C7qylZgTDhMyE7p/X8Bgao+7TFvNnh\n\t 4ftsmv4HSqn9O9H1+yjQrKha24xFb3c2aMQAA+DXpmeFmzeRUZZM29X4EnErkFDMbg\n\t KeP/iQ+3GI6mQlwTyfghpWZvCU4g2P6HF/iM2S2Df3kmYhy6jh5feLydOEb2rRxVHk\n\t 3h12d5X+jXELk5ev+/szz0RWCYnw3jvQVxar2pXcC0tT4dDBPk5sPTjwVvTlvhedyg\n\t BJuDrbnFncZQA==","Message-ID":"<b0c30cf3-751e-4f65-81ea-393c568dde56@kernel.org>","Date":"Fri, 17 Apr 2026 09:58:21 +0200","X-Mailing-List":"linuxppc-dev@lists.ozlabs.org","List-Id":"<linuxppc-dev.lists.ozlabs.org>","List-Help":"<mailto:linuxppc-dev+help@lists.ozlabs.org>","List-Owner":"<mailto:linuxppc-dev+owner@lists.ozlabs.org>","List-Post":"<mailto:linuxppc-dev@lists.ozlabs.org>","List-Archive":"<https://lore.kernel.org/linuxppc-dev/>,\n  <https://lists.ozlabs.org/pipermail/linuxppc-dev/>","List-Subscribe":"<mailto:linuxppc-dev+subscribe@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-digest@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-nomail@lists.ozlabs.org>","List-Unsubscribe":"<mailto:linuxppc-dev+unsubscribe@lists.ozlabs.org>","Precedence":"list","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] powerpc/perf/hv-gpci: bound sysfs formatting with\n sysfs_emit_at()","To":"Pengpeng Hou <pengpeng@iscas.ac.cn>,\n Madhavan Srinivasan <maddy@linux.ibm.com>,\n Michael Ellerman <mpe@ellerman.id.au>","Cc":"Nicholas Piggin <npiggin@gmail.com>, Kees Cook <kees@kernel.org>,\n linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,\n stable@vger.kernel.org","References":"<20260417074825.22967-1-pengpeng@iscas.ac.cn>","Content-Language":"fr-FR","From":"\"Christophe Leroy (CS GROUP)\" <chleroy@kernel.org>","In-Reply-To":"<20260417074825.22967-1-pengpeng@iscas.ac.cn>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","X-Spam-Status":"No, score=-0.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,\n\tDKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS\n\tautolearn=disabled version=4.0.1 OzLabs 8","X-Spam-Checker-Version":"SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org"}}]