From nobody Thu Apr 9 07:16:55 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3D97349AF5 for ; Tue, 10 Mar 2026 10:06:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773137161; cv=none; b=o14CFgNkuOZidm0QHYlTT3V/DAa+f8cZ/IkN/Ybywj9+V/5iOdZ0ycNLK63V/Fgts6X86vRpyUsSRSePXDsxJLp00FEf9C033CR8l+4wYQukxWmow05ENrX4ku/Qnv9CiYSIUfTOm/3a+kuxtpG+V14eHiT2sC3FYeM8EdqQmKI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773137161; c=relaxed/simple; bh=ppw/8xwp1YwwQnJfhBLYs/4VlvY8xgS+sm8YKor45qA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=XEev0JQ+Nav5ykJarWNRiXIrcNpVgj6DbYAZpzRwWAHM+bWtV7aFb69h5MjICsUOommQfWyt5qyGr3efvWRidY8vOpwWlwS/VP8fYIeHR/MJdjqVvQ02Z+f+sUHjkfobFertpeNHm8HojxNDzfgzSAXYv9vV9mRTUysctkUZM1o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QEXIomXH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QEXIomXH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 67ADFC19423; Tue, 10 Mar 2026 10:05:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773137161; bh=ppw/8xwp1YwwQnJfhBLYs/4VlvY8xgS+sm8YKor45qA=; h=From:To:Cc:Subject:Date:From; b=QEXIomXHcDvmmenDaDW+bWZgZ2cK/EJHXV2lRH712n701DcQFv/pVoSS1VyAFn1kU 1d7JA649Tqx6HHO2LkLiLkkfMeKiMBk4pFqYWT6AdnsCoSipa41hk8fSt7ROuKygzo AROSth005/Rc0j62RmTYtY0mYB9YGDedyOAPj5mZZ67spzKjCrgYTCnKWienKR2kp9 OwGz2dep2RaASLjKMvVxMw7UTU0zZUCr+CTyShyQXs1MKKaQI1trvupJx2NipAx+tT WD1Ror9vKUWOPIQjEM9RaLT14ZahDbDJykJr+tvB8l6z9ZQODeFOoPM90SrXTpA50m NwtAFjyMEevtg== From: "Christophe Leroy (CS GROUP)" To: Michael Ellerman , Nicholas Piggin , Madhavan Srinivasan Cc: "Christophe Leroy (CS GROUP)" , linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Subject: [PATCH] powerpc/net: Inline checksum wrappers and convert to scoped user access Date: Tue, 10 Mar 2026 11:05:54 +0100 Message-ID: X-Mailer: git-send-email 2.49.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=4911; i=chleroy@kernel.org; h=from:subject:message-id; bh=ppw/8xwp1YwwQnJfhBLYs/4VlvY8xgS+sm8YKor45qA=; b=owGbwMvMwCV2d0KB2p7V54MZT6slMWSuf8tk6RwSEXL+/bND27ldbv7lXD8xNiXsE5+f8J6EU Hu5CoO2jlIWBjEuBlkxRZbj/7l3zej6kpo/dZc+zBxWJpAhDFycAjCRFh1GhkOycwQTnKPsZssf +cDU//vJ1qa9/DNWzetd0ujzKcBS/zbD/9xLxgt55FW85Lz7p6Zx8pTFdi9e8NB3+jmBb9NW7Cp oYAcA X-Developer-Key: i=chleroy@kernel.org; a=openpgp; fpr=10FFE6F8B390DE17ACC2632368A92FEB01B8DD78 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Commit 861574d51bbd ("powerpc/uaccess: Implement masked user access") provides optimised user access by avoiding the cost of access_ok(). Convert csum_and_copy_to_user() and csum_and_copy_from_user() to scoped user access to benefit from masked user access. csum_and_copy_to_user() and csum_and_copy_from_user() are only called respectively by csum_and_copy_to_iter() and csum_and_copy_from_iter_full() and they are only called twice. Those functions used to be large but they were first reduced by commit c693cc4676a0 ("saner calling conventions for csum_and_copy_..._user()") then commit 70d65cd555c5 ("ppc: propagate the calling conventions change down to csum_partial_copy_generic()"). With the additional size reduction provided by conversion to scoped user access they are not worth being kept out of line. $ ./scripts/bloat-o-meter vmlinux.0 vmlinux.1 add/remove: 0/2 grow/shrink: 2/0 up/down: 136/-176 (-40) Function old new delta csum_and_copy_to_iter 2416 2488 +72 csum_and_copy_from_iter_full 2272 2336 +64 csum_and_copy_to_user 88 - -88 csum_and_copy_from_user 88 - -88 Total: Before=3D11514471, After=3D11514431, chg -0.00% Signed-off-by: Christophe Leroy (CS GROUP) --- This patch applies on top of v7.0-rc3, it requires commit af4e9ef3d784 ("ua= ccess: Fix scoped_user_read_access() for 'pointer to const'") --- arch/powerpc/include/asm/checksum.h | 22 +++++++++++++--- arch/powerpc/lib/Makefile | 3 +-- arch/powerpc/lib/checksum_wrappers.c | 39 ---------------------------- 3 files changed, 19 insertions(+), 45 deletions(-) delete mode 100644 arch/powerpc/lib/checksum_wrappers.c diff --git a/arch/powerpc/include/asm/checksum.h b/arch/powerpc/include/asm= /checksum.h index 4b573a3b7e17..52921ea2494a 100644 --- a/arch/powerpc/include/asm/checksum.h +++ b/arch/powerpc/include/asm/checksum.h @@ -8,6 +8,7 @@ =20 #include #include +#include /* * Computes the checksum of a memory block at src, length len, * and adds in "sum" (32-bit), while copying the block to dst. @@ -21,11 +22,24 @@ extern __wsum csum_partial_copy_generic(const void *src, void *dst, int le= n); =20 #define _HAVE_ARCH_COPY_AND_CSUM_FROM_USER -extern __wsum csum_and_copy_from_user(const void __user *src, void *dst, - int len); +static inline __wsum csum_and_copy_from_user(const void __user *src, void = *dst, int len) +{ + scoped_user_read_access_size(src, len, efault) + return csum_partial_copy_generic((void __force *)src, dst, len); + +efault: + return 0; +} + #define HAVE_CSUM_COPY_USER -extern __wsum csum_and_copy_to_user(const void *src, void __user *dst, - int len); +static inline __wsum csum_and_copy_to_user(const void *src, void __user *d= st, int len) +{ + scoped_user_write_access_size(dst, len, efault) + return csum_partial_copy_generic(src, (void __force *)dst, len); + +efault: + return 0; +} =20 #define _HAVE_ARCH_CSUM_AND_COPY #define csum_partial_copy_nocheck(src, dst, len) \ diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index f14ecab674a3..bcdf387f3998 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile @@ -62,8 +62,7 @@ obj64-$(CONFIG_ALTIVEC) +=3D vmx-helper.o obj64-$(CONFIG_KPROBES_SANITY_TEST) +=3D test_emulate_step.o \ test_emulate_step_exec_instr.o =20 -obj-y +=3D checksum_$(BITS).o checksum_wrappers.o \ - string_$(BITS).o +obj-y +=3D checksum_$(BITS).o string_$(BITS).o =20 obj-y +=3D sstep.o obj-$(CONFIG_PPC_FPU) +=3D ldstfp.o diff --git a/arch/powerpc/lib/checksum_wrappers.c b/arch/powerpc/lib/checks= um_wrappers.c deleted file mode 100644 index 1a14c8780278..000000000000 --- a/arch/powerpc/lib/checksum_wrappers.c +++ /dev/null @@ -1,39 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/* - * - * Copyright (C) IBM Corporation, 2010 - * - * Author: Anton Blanchard - */ -#include -#include -#include -#include -#include - -__wsum csum_and_copy_from_user(const void __user *src, void *dst, - int len) -{ - __wsum csum; - - if (unlikely(!user_read_access_begin(src, len))) - return 0; - - csum =3D csum_partial_copy_generic((void __force *)src, dst, len); - - user_read_access_end(); - return csum; -} - -__wsum csum_and_copy_to_user(const void *src, void __user *dst, int len) -{ - __wsum csum; - - if (unlikely(!user_write_access_begin(dst, len))) - return 0; - - csum =3D csum_partial_copy_generic(src, (void __force *)dst, len); - - user_write_access_end(); - return csum; -} --=20 2.49.0