From patchwork Tue Mar 25 12:15:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guo Ren X-Patchwork-Id: 14028522 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id F0B76C36005 for ; Tue, 25 Mar 2025 12:18:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 91741280008; Tue, 25 Mar 2025 08:18:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8C81B280001; Tue, 25 Mar 2025 08:18:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 74339280008; Tue, 25 Mar 2025 08:18:16 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 56DD0280001 for ; Tue, 25 Mar 2025 08:18:16 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id ED5461A1DF0 for ; Tue, 25 Mar 2025 12:18:17 +0000 (UTC) X-FDA: 83259975834.11.C825E00 Received: from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31]) by imf28.hostedemail.com (Postfix) with ESMTP id 30B3FC0018 for ; Tue, 25 Mar 2025 12:18:15 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=teUw2FHO; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf28.hostedemail.com: domain of guoren@kernel.org designates 172.234.252.31 as permitted sender) smtp.mailfrom=guoren@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742905096; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=+ZdR9y3tfBQTzK4aBIjVIYxbGtsMZmQRoCp2El6OX0g=; b=adCqSy3ZiqHWOUwtGAVjDrisC0WNgnjZauRFRMzQ8fAMmXQgWqIesANX7MJDgh6bcrFIJ/ 8G3WtZRxwmIjAh8L714NoUnjwl8/Q+QJ38uvhGK+pKra+GcymFDvYzuXx0C+0bRTJ11B+n p6AijUDdKqFLuxolCaCbppufJa8+ozg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742905096; a=rsa-sha256; cv=none; b=DWEwzqcqfOYD08jAEgug8ncCVZHjZolWngXDFLwDe8tXzCXV+tn6ksyfETUGR3lLdvyjyL 24jeMbuEuaEQH0Q2aRPdZ4ph3AX7r5oPyaqWCtIzdfyvLj3/jci6FIKTBZfIuvKcWZJrs3 Smm8FqyiZXWMv4P1PCgf9Iq0qxXpnls= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=teUw2FHO; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf28.hostedemail.com: domain of guoren@kernel.org designates 172.234.252.31 as permitted sender) smtp.mailfrom=guoren@kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sea.source.kernel.org (Postfix) with ESMTP id DB38F43C1F; Tue, 25 Mar 2025 12:18:14 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3232CC4CEE4; Tue, 25 Mar 2025 12:18:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742905095; bh=UABL4vMSXTJ7ioKDShPOJnvQ/v/SXYqnkdRYWjffYuI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=teUw2FHOlBQ1lrIKT7Hs+qUfkkWnEEpTWG7+L12tSB2mbphU+tEwWLTIzWHI0iiRJ DbQvjYXhNoIHuNkVkJjJR9grTurlc5egb+jrZsRmnn/7yCBhuoST5sWNFrEg4whn8S R8w4LPsMxn2q34XM1d2a9BJgQLJkEbNoee3acd75JHM7OSqPc/dbF55YqAnxMmxb3B GonCtkmj1hPTAVD6eZOTRDAsO7Au8f+9qjRty68GqzTjCoMQ60GAujyzoXiVezS8hQ Cw9dI4jq4Uyzfsd0C+8lhRsjuPYR84Qgic3GJeVkTgp4byQiRpTz3vrpRfdwMGr/ce BEShK8B1mJ11Q== From: guoren@kernel.org To: arnd@arndb.de, gregkh@linuxfoundation.org, torvalds@linux-foundation.org, paul.walmsley@sifive.com, palmer@dabbelt.com, anup@brainfault.org, atishp@atishpatra.org, oleg@redhat.com, kees@kernel.org, tglx@linutronix.de, will@kernel.org, mark.rutland@arm.com, brauner@kernel.org, akpm@linux-foundation.org, rostedt@goodmis.org, edumazet@google.com, unicorn_wang@outlook.com, inochiama@outlook.com, gaohan@iscas.ac.cn, shihua@iscas.ac.cn, jiawei@iscas.ac.cn, wuwei2016@iscas.ac.cn, drew@pdp7.com, prabhakar.mahadev-lad.rj@bp.renesas.com, ctsai390@andestech.com, wefu@redhat.com, kuba@kernel.org, pabeni@redhat.com, josef@toxicpanda.com, dsterba@suse.com, mingo@redhat.com, peterz@infradead.org, boqun.feng@gmail.com, guoren@kernel.org, xiao.w.wang@intel.com, qingfang.deng@siflower.com.cn, leobras@redhat.com, jszhang@kernel.org, conor.dooley@microchip.com, samuel.holland@sifive.com, yongxuan.wang@sifive.com, luxu.kernel@bytedance.com, david@redhat.com, ruanjinjie@huawei.com, cuiyunhui@bytedance.com, wangkefeng.wang@huawei.com, qiaozhe@iscas.ac.cn Cc: ardb@kernel.org, ast@kernel.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-mm@kvack.org, linux-crypto@vger.kernel.org, bpf@vger.kernel.org, linux-input@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-serial@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-arch@vger.kernel.org, maple-tree@lists.infradead.org, linux-trace-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-atm-general@lists.sourceforge.net, linux-btrfs@vger.kernel.org, netfilter-devel@vger.kernel.org, coreteam@netfilter.org, linux-nfs@vger.kernel.org, linux-sctp@vger.kernel.org, linux-usb@vger.kernel.org, linux-media@vger.kernel.org Subject: [RFC PATCH V3 06/43] rv64ilp32_abi: riscv: csum: Utilize 64-bit width to improve the performance Date: Tue, 25 Mar 2025 08:15:47 -0400 Message-Id: <20250325121624.523258-7-guoren@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250325121624.523258-1-guoren@kernel.org> References: <20250325121624.523258-1-guoren@kernel.org> MIME-Version: 1.0 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 30B3FC0018 X-Stat-Signature: 96rxr34opskw5w6aaro63d3y4km9ogoo X-Rspam-User: X-HE-Tag: 1742905095-630250 X-HE-Meta: U2FsdGVkX1+vRSLSzncMmRsGPJNpEERRGvjWacnYKsIXoQVxOrffe8VtSmqlBAhomLMxJFWIiTc3/BY/oxEVoIUODpON7tUcaObKsv+mNn6AXyrixZdHeV8YiqmpLxSu13dsz84Maz4q9Mi+Zekl7Q3Uy7q3QsmVnU5TygGZLXte+cI9A50tMnjElpwJ+Jfs+hCPoBCGBWZG/Owl1MgLHlYMnuL5qpxZfuXArxu1imPI/oovceVugzTA2d3usJ7F+8Um87cL0e+ZeOQL3/IBy+bJDLphVMmFgV28iaSz3rYXRGKSfh3ibkF1VpsIsEVuxwhbasMq808K2a5Tni7vdAcHua4esM9bsjkOn2F75pbKZLEfr5EafjCgHuS2pySnz2d/h1J8NkX/KVeuHauocbYzR3Ft9Za5U7IJ3HFCXWfF30kMR0IHT20FYs+62UERTXXbe72BKjCHR1lc7BzJWJqNVj5tXuzJs/gOaE4PqcAQsUS2I6j1C4rNW+pfs+2rqk6Y1HhH9aAV2OnF/28MDF/yMRc6CW2N3XNh0N0IKnd7foYtaaRW9NgMdutFP2rYv6/4RiNaG5N7lMSoIt2KH1uaQg2qcsYGoA8Kw2LlBNr0t71tgdXw8rxliZEPkYhs2l0OW/NjaQC7UZH+EXtB169T3TbMdk6n31Pd+NW39TaFSuloDPHBsRQFS3ZI86JcdfILdQN954qH6FvxVy8ZKavXSLMfYcX6fLkFYvziuna3IUZL31RdOziu3Yc+SnVXS73/QmlFRdmGOS4F/rNK94JyLgN2E8Fsg5AJPdBqJpVNjHkfDPDqxsAbnQXtLbVSRQXntM/M9hiIS0nWDAXjyZhasAz5n3UUrC0a1QFd54XIsKFb7BEYO46kQVk3sa2toauh2KD1eixwc3qKKMzkEouBT2vlj31HNixhpCSL/OuMl20kmXAM3SH/nDL5Pyyr16qIGlroZUJyVvR6ZUR 6qDw8CEA o8FQyr7WSCJHxTpreSfymZWLNJp1iDsvo7gasERVyXNszIE1OOJkh5gRcvcqrTYdDpC3v1CthqvBebjCMXaLUXwuw1ondXRtnYC6PZqmangSVdsL23Mg8GbQWr83BTYjQ8gcdgRF7yE5D+duGz251p8HzvsoQMYR+1gHwCpGrpfzwEw1OXDz0/xuqnFjVSKyEO40+sDw9QItZfodH1TFH87eG7CqmQFFuhBt/vsUWw8zqF4RhLNpBTsNXgFfAgqK6C3WHmOF6bNrF5QpzQ4t/d8XKb7P6FYH5B9eMtFmqL6KQfXlg1le3szW5eRgty8XZ3rCBABhCvj7D+3cyDj3QXkCYNv3e1aEAIuDL X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: "Guo Ren (Alibaba DAMO Academy)" The RV64ILP32 ABI, derived from a 64-bit ISA, uses 32-bit BITS_PER_LONG. Therefore, checksum algorithm could utilize 64-bit width to improve the performance. Signed-off-by: Guo Ren (Alibaba DAMO Academy) --- arch/riscv/lib/csum.c | 48 +++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/arch/riscv/lib/csum.c b/arch/riscv/lib/csum.c index 7fb12c59e571..7139ab855349 100644 --- a/arch/riscv/lib/csum.c +++ b/arch/riscv/lib/csum.c @@ -22,17 +22,17 @@ __sum16 csum_ipv6_magic(const struct in6_addr *saddr, __u32 len, __u8 proto, __wsum csum) { unsigned int ulen, uproto; - unsigned long sum = (__force unsigned long)csum; + xlen_t sum = (__force xlen_t)csum; - sum += (__force unsigned long)saddr->s6_addr32[0]; - sum += (__force unsigned long)saddr->s6_addr32[1]; - sum += (__force unsigned long)saddr->s6_addr32[2]; - sum += (__force unsigned long)saddr->s6_addr32[3]; + sum += (__force xlen_t)saddr->s6_addr32[0]; + sum += (__force xlen_t)saddr->s6_addr32[1]; + sum += (__force xlen_t)saddr->s6_addr32[2]; + sum += (__force xlen_t)saddr->s6_addr32[3]; - sum += (__force unsigned long)daddr->s6_addr32[0]; - sum += (__force unsigned long)daddr->s6_addr32[1]; - sum += (__force unsigned long)daddr->s6_addr32[2]; - sum += (__force unsigned long)daddr->s6_addr32[3]; + sum += (__force xlen_t)daddr->s6_addr32[0]; + sum += (__force xlen_t)daddr->s6_addr32[1]; + sum += (__force xlen_t)daddr->s6_addr32[2]; + sum += (__force xlen_t)daddr->s6_addr32[3]; ulen = (__force unsigned int)htonl((unsigned int)len); sum += ulen; @@ -46,7 +46,7 @@ __sum16 csum_ipv6_magic(const struct in6_addr *saddr, */ if (IS_ENABLED(CONFIG_RISCV_ISA_ZBB) && IS_ENABLED(CONFIG_RISCV_ALTERNATIVE)) { - unsigned long fold_temp; + xlen_t fold_temp; /* * Zbb is likely available when the kernel is compiled with Zbb @@ -85,12 +85,12 @@ EXPORT_SYMBOL(csum_ipv6_magic); #define OFFSET_MASK 7 #endif -static inline __no_sanitize_address unsigned long -do_csum_common(const unsigned long *ptr, const unsigned long *end, - unsigned long data) +static inline __no_sanitize_address xlen_t +do_csum_common(const xlen_t *ptr, const xlen_t *end, + xlen_t data) { unsigned int shift; - unsigned long csum = 0, carry = 0; + xlen_t csum = 0, carry = 0; /* * Do 32-bit reads on RV32 and 64-bit reads otherwise. This should be @@ -130,8 +130,8 @@ static inline __no_sanitize_address unsigned int do_csum_with_alignment(const unsigned char *buff, int len) { unsigned int offset, shift; - unsigned long csum, data; - const unsigned long *ptr, *end; + xlen_t csum, data; + const xlen_t *ptr, *end; /* * Align address to closest word (double word on rv64) that comes before @@ -140,7 +140,7 @@ do_csum_with_alignment(const unsigned char *buff, int len) */ offset = (unsigned long)buff & OFFSET_MASK; kasan_check_read(buff, len); - ptr = (const unsigned long *)(buff - offset); + ptr = (const xlen_t *)(buff - offset); /* * Clear the most significant bytes that were over-read if buff was not @@ -153,7 +153,7 @@ do_csum_with_alignment(const unsigned char *buff, int len) #else data = (data << shift) >> shift; #endif - end = (const unsigned long *)(buff + len); + end = (const xlen_t *)(buff + len); csum = do_csum_common(ptr, end, data); #ifdef CC_HAS_ASM_GOTO_TIED_OUTPUT @@ -163,7 +163,7 @@ do_csum_with_alignment(const unsigned char *buff, int len) */ if (IS_ENABLED(CONFIG_RISCV_ISA_ZBB) && IS_ENABLED(CONFIG_RISCV_ALTERNATIVE)) { - unsigned long fold_temp; + xlen_t fold_temp; /* * Zbb is likely available when the kernel is compiled with Zbb @@ -233,15 +233,15 @@ do_csum_with_alignment(const unsigned char *buff, int len) static inline __no_sanitize_address unsigned int do_csum_no_alignment(const unsigned char *buff, int len) { - unsigned long csum, data; - const unsigned long *ptr, *end; + xlen_t csum, data; + const xlen_t *ptr, *end; - ptr = (const unsigned long *)(buff); + ptr = (const xlen_t *)(buff); data = *(ptr++); kasan_check_read(buff, len); - end = (const unsigned long *)(buff + len); + end = (const xlen_t *)(buff + len); csum = do_csum_common(ptr, end, data); /* @@ -250,7 +250,7 @@ do_csum_no_alignment(const unsigned char *buff, int len) */ if (IS_ENABLED(CONFIG_RISCV_ISA_ZBB) && IS_ENABLED(CONFIG_RISCV_ALTERNATIVE)) { - unsigned long fold_temp; + xlen_t fold_temp; /* * Zbb is likely available when the kernel is compiled with Zbb