From patchwork Tue Mar 25 12:15:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guo Ren X-Patchwork-Id: 14028518 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 12D4FC35FFC for ; Tue, 25 Mar 2025 12:17:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C75D4280004; Tue, 25 Mar 2025 08:17:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C22D5280001; Tue, 25 Mar 2025 08:17:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AC484280004; Tue, 25 Mar 2025 08:17:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 8982D280001 for ; Tue, 25 Mar 2025 08:17:19 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id D5F3F1A1D85 for ; Tue, 25 Mar 2025 12:17:20 +0000 (UTC) X-FDA: 83259973440.23.9911B84 Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by imf25.hostedemail.com (Postfix) with ESMTP id 48E72A0006 for ; Tue, 25 Mar 2025 12:17:19 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=M7zSCa31; spf=pass (imf25.hostedemail.com: domain of guoren@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=guoren@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742905039; 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=HK7WO6PD2redkm76y4Z4hxReAccN/i/trdAfp8Y0Q5U=; b=lvIEsx0YPcxDzW/ntfBykBahKg9o1ZwMj1BrCx3ZXtLp8zGpJ9FgUn4yfQNUomjcbCSIrd c02WvnS+6OwkwLW7wJsuI3BEUuFRO79fEtpQXtirjjaPXB3Cbj5ls8DhgAVh85oXyFZ9E8 WNOf5jo3Rw+j/g71HaFBA+uU1wewSCQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742905039; a=rsa-sha256; cv=none; b=4y9ePzGAyJAavGpRM9mgPA6NeZnqzR1rpKRRHPET6J+BLgIFaVDRSQO4xmz0UMngWO3W8Q qZP0T9z0d1SLdajBP2NYUdXGmTrqXiOXNsgjO2bRopprpQZjqZ5sxrH3XhW58uLEX17EyA yd2Zx7/4ta3gNY9pD69wBS01QXyM/UI= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=M7zSCa31; spf=pass (imf25.hostedemail.com: domain of guoren@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=guoren@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 8EAAB6158C; Tue, 25 Mar 2025 12:17:14 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 89036C4CEEF; Tue, 25 Mar 2025 12:17:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742905038; bh=LCI/yc1ahl/Zp9x+QUBbqr6DoNgqTtvLT0+YbqUE8Kc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=M7zSCa31T5EIDOyp2pisnsb36omDKGCK3CtmKd0jmWms5JTGy4cL6gqroHU+U6Do3 GF5N76/FLWX7xtVasdLhKMcInuvkPjYr3/XnVSZ0Pobo+jSDrMTbHwC4OV0hO+sPFI ioSKnCYcXTCDbUuV2wyGraJbUwJ9AzzjW2UTGrk2nCywWovoornRX4ZXKz0LVTxi7r qUcDCGXPxGB7Nv/XpwP22Vm+8YPGohVwdZX0Qz0dza/5WXPU3SnFd3lRUYrc4XYmk2 cIekIVLnOX0Kw3qDsIdU2cHos9atrofsQ8fmXPfl7xnlXnTI5oe/zK85/xe5ly8pgc 65J8Dyq0AYcUQ== 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 02/43] rv64ilp32_abi: riscv: Adapt Makefile and Kconfig Date: Tue, 25 Mar 2025 08:15:43 -0400 Message-Id: <20250325121624.523258-3-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-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 48E72A0006 X-Stat-Signature: w888q9ssaahwgw9sobf854iktoujjsgg X-HE-Tag: 1742905039-11598 X-HE-Meta: U2FsdGVkX1/3KOh/LAcmqF+fNc59jVzBdzTu0EhzQPnjm0/Rd2qDoz+Vu2z0vLDn5d//y5Jdrr8cGCAk7f8OeT1mKHIZIxNpChlFwalfKDZQrCnp03Al4AyYYz2aBPLv/b9XAVpvQ2QIZQ0DcfFhaA6nUwTffaBqNav0Q4rY+BG/Qc5+aXdjFCmHTTjNIbcZIGU9EQGt8cS3ooeKikxeVRwQM2LnXuiYhuNdLSsAx/vmclhVFiO2CNveY/DbnGV5N5pBcN0J902I6xZ+ixSnKbeKfJCZqgyIeVcY6DraK+TJoztAsab3eMRh5cL+vEN/Tzy+iiF1jpkdIaKMJJKpKQH9HA8o8Rf48y3sn5S0sc8UrlxtGfvJBSu7DWUXlo8/5MXR/UcPsOC3+j5SHkimf7B9wDot+F6HAP2+RHyupI4iuAoOax/YxAkj+phyziDagzYQGC7F1Mswnmsk2yHcpHtaTjh43Dz+hsJAevwahhswWibR974ZQIwlLuovRpDocLhfKqbBQiio653jeJ1mHu76JuEV+wIf6AukefkmrdHFqvk9fWUU8qN3mUGuJBa/ePrlAVFP+IDpoIsm2mEZYh2TnRpgEd3JbKuwnCwrtP2ExclS5QErwLRR4Pkd1OLV+zugl4bsCZQAgzT72ZIGuzFLG4tu+S3Zlygza3wqLl+sMmmUN4gXStcYYMzNwVad9UcR9LP7hv0zVZ5BaKKj+HIp7RGMsBmt6a+Lc9usr5T/QAYwToYyyqpCFShhj2lqsqwEfwPrX7Th1yrHZ2XFaRsbCcwoIYYAoZToKWptocT5nlxDQfFkJshMKTWuxHQtJWXf1DUqKiwQ1IhFKyLoC670MdUwRGcHT5FRlCkUrKaIR2rKzjhkt+jKzRryegAJvgtE9HGiRY72JUTYajxOd2A0WgbJffnDRc+A/HK+YbPwKm1EDaTJCF3tW/aM7bbmmxWbufrDAS586hWE/N9 ANcAwPet GptbIkd66Q3zP9hfreezdW//TfPKja/rSn3RM8uhVLDy9Mj5jk1J+guKhHots+VvFRStAQJqGl9Bir99RvklNyN0x+pBvTOK/R7T7piWznkmU473P+qa0F/bzeM2NuTo3lc1RfTzH7Ztfuh/xvSYqZri1R0fCHt2hT5R4apWnBpmytbeiR3jEqORjntJLqZ7tRmADcDjunaPcA5eM8COgvolWSJEyMJf2bY/BWh8srSTETnJPYZLr/vouzBVJr5KxwpW+6Pr0TGi4mo8qowS+u+hbbXnOeOz3Xy9bl1fHIjaFy3uIOXzvufsg7wydAfRyz8USi0EWpk4Y9U7FRiMkUkSonVCMkGsj6nRI 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)" Extend the ARCH_RV64I base with ABI_RV64ILP32 to compile the Linux kernel self into ILP32 on CONFIG_64BIT=y, minimizing the kernel's memory footprint and cache occupation. The 'cmd_cpp_lds_S' in scripts/Makefile.build uses cpp_flags for ld.s generation, so add "-mabi=xxx" to KBUILD_CPPFLAGS, just like what we've done in KBUILD_CLFAGS and KBUILD_AFLAGS. cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -U$(ARCH) The rv64ilp32 ABI reuses an rv64 toolchain whose default "-mabi=" is lp64, so add "-mabi=ilp32" to correct it. Add config entry with rv64ilp32.config fragment in Makefile: - rv64ilp32_defconfig Signed-off-by: Guo Ren (Alibaba DAMO Academy) --- arch/riscv/Kconfig | 12 ++++++++++-- arch/riscv/Makefile | 17 +++++++++++++++++ arch/riscv/configs/rv64ilp32.config | 1 + 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 arch/riscv/configs/rv64ilp32.config diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 7612c52e9b1e..da2111b0111c 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -213,7 +213,7 @@ config RISCV select TRACE_IRQFLAGS_SUPPORT select UACCESS_MEMCPY if !MMU select USER_STACKTRACE_SUPPORT - select ZONE_DMA32 if 64BIT + select ZONE_DMA32 if 64BIT && !ABI_RV64ILP32 config RUSTC_SUPPORTS_RISCV def_bool y @@ -298,6 +298,7 @@ config PAGE_OFFSET config KASAN_SHADOW_OFFSET hex depends on KASAN_GENERIC + default 0x70000000 if ABI_RV64ILP32 default 0xdfffffff00000000 if 64BIT default 0xffffffff if 32BIT @@ -341,7 +342,7 @@ config FIX_EARLYCON_MEM config ILLEGAL_POINTER_VALUE hex - default 0 if 32BIT + default 0 if 32BIT || ABI_RV64ILP32 default 0xdead000000000000 if 64BIT config PGTABLE_LEVELS @@ -418,6 +419,13 @@ config ARCH_RV64I endchoice +config ABI_RV64ILP32 + bool "ABI RV64ILP32" + depends on 64BIT + help + Compile linux kernel self into RV64ILP32 ABI of RISC-V psabi + specification. + # We must be able to map all physical memory into the kernel, but the compiler # is still a bit more efficient when generating code if it's setup in a manner # such that it can only map 2GiB of memory. diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile index 13fbc0f94238..76db01020a22 100644 --- a/arch/riscv/Makefile +++ b/arch/riscv/Makefile @@ -30,10 +30,21 @@ ifeq ($(CONFIG_ARCH_RV64I),y) BITS := 64 UTS_MACHINE := riscv64 +ifeq ($(CONFIG_ABI_RV64ILP32),y) + KBUILD_CPPFLAGS += -mabi=ilp32 + + KBUILD_CFLAGS += -mabi=ilp32 + KBUILD_AFLAGS += -mabi=ilp32 + + KBUILD_LDFLAGS += -melf32lriscv +else + KBUILD_CPPFLAGS += -mabi=lp64 + KBUILD_CFLAGS += -mabi=lp64 KBUILD_AFLAGS += -mabi=lp64 KBUILD_LDFLAGS += -melf64lriscv +endif KBUILD_RUSTFLAGS += -Ctarget-cpu=generic-rv64 --target=riscv64imac-unknown-none-elf \ -Cno-redzone @@ -41,6 +52,8 @@ else BITS := 32 UTS_MACHINE := riscv32 + KBUILD_CPPFLAGS += -mabi=ilp32 + KBUILD_CFLAGS += -mabi=ilp32 KBUILD_AFLAGS += -mabi=ilp32 KBUILD_LDFLAGS += -melf32lriscv @@ -224,6 +237,10 @@ PHONY += rv32_nommu_virt_defconfig rv32_nommu_virt_defconfig: $(Q)$(MAKE) -f $(srctree)/Makefile nommu_virt_defconfig 32-bit.config +PHONY += rv64ilp32_defconfig +rv64ilp32_defconfig: + $(Q)$(MAKE) -f $(srctree)/Makefile defconfig rv64ilp32.config + define archhelp echo ' Image - Uncompressed kernel image (arch/riscv/boot/Image)' echo ' Image.gz - Compressed kernel image (arch/riscv/boot/Image.gz)' diff --git a/arch/riscv/configs/rv64ilp32.config b/arch/riscv/configs/rv64ilp32.config new file mode 100644 index 000000000000..07536586e169 --- /dev/null +++ b/arch/riscv/configs/rv64ilp32.config @@ -0,0 +1 @@ +CONFIG_ABI_RV64ILP32=y