From patchwork Tue Mar 25 12:15:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guo Ren X-Patchwork-Id: 14028525 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 B8C44C35FFC for ; Tue, 25 Mar 2025 12:19:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 49C6528000B; Tue, 25 Mar 2025 08:18:58 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4251D280001; Tue, 25 Mar 2025 08:18:58 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2A15628000B; Tue, 25 Mar 2025 08:18:58 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 09230280001 for ; Tue, 25 Mar 2025 08:18:58 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id B849C1A1DF7 for ; Tue, 25 Mar 2025 12:18:59 +0000 (UTC) X-FDA: 83259977598.05.0216B4F Received: from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31]) by imf11.hostedemail.com (Postfix) with ESMTP id E4FA040002 for ; Tue, 25 Mar 2025 12:18:57 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Av1iWZ11; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf11.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=1742905138; 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=xzbRQ6B32aGWixUVP35bc3TohpXihiaCMnxlGC7yoeY=; b=0i8kNXEdh09EqRl81898nQOvMrDM7eRmTdu9TVo69i09hpMe8aR7Q4Dxo17DfXnIvTiqOa EDkaN24bELgQs3GynvqreewlcgnzLSVJs2X7EbPQX8Xxzwz+uobaOqWrxlnL2Y1LH//mH9 ritSGxml2IETt4W7xFNfhDDkqL4RVP4= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Av1iWZ11; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf11.hostedemail.com: domain of guoren@kernel.org designates 172.234.252.31 as permitted sender) smtp.mailfrom=guoren@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742905138; a=rsa-sha256; cv=none; b=QXBFNlQ4gm+MMaMqJtYge9gDwGLfNppwugJxEbQ7uwl7eme1A9ktWocbGAVY50mdy42deX JyPAunfdZWaOfgu7UcPyeHAxDz6rlSaw8W77fBTYMI77/brif0P1Vewt0K9WY60j5DhJ3V UiuuiCZ+eoIJ+oqVDbYXTFGoXASVA7w= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sea.source.kernel.org (Postfix) with ESMTP id 7F46043C2A; Tue, 25 Mar 2025 12:18:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 86390C4CEE9; Tue, 25 Mar 2025 12:18:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742905136; bh=CkHSnvK7MIdZ92ELdn81bKYc+IanecbF+EpzeS9eHgE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Av1iWZ11H8OzWTpyQcaIUWDHae7LxA08a0FAeGsTT0s3iZgbkbcvAiqA4Rq0Xet5j 2+nlUrRJn1Vdt4iPov5qd9QlPxivEDsvOF5iUx9h8lOhYO9d47s7kHGa++wrFLVQww 53MRjEzXHEO+oKZMkSTWTYqHIQtTZyJhdAOmn6ZL1My7/G6jgIBZEKrbYJVnm5oCxa /DbU6+44emZ6CpsPev+uHgQN0R65JAVjtBDYAeDCA2qNPLdBL72n5vY6OzwaN5WDP0 mgLrQoaZyBOPAzgJfO6fikBN77EJGRFL39+NYHrRa8zWigK//5KeYsOg84YR6W6DN2 W8PIgwH1HOLeQ== 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 09/43] rv64ilp32_abi: riscv: Reuse LP64 SBI interface Date: Tue, 25 Mar 2025 08:15:50 -0400 Message-Id: <20250325121624.523258-10-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: rspam01 X-Stat-Signature: oohc7dptbem5shqw4asdbawj74aznz81 X-Rspam-User: X-Rspamd-Queue-Id: E4FA040002 X-HE-Tag: 1742905137-590663 X-HE-Meta: U2FsdGVkX191TrVRzuQ6T4T+S4iIKHbdMTWuqpK+Pmh1/dpVsg/ATqapAYPCBKH/zhbUVslWj+GaZ9KqN8bfnj5yU/4nT4ncqC4PIYkGvknnXU+wwtIN5Q6CR5WufdLV9P/nHOARuRrcdHMI5TqvIk798LIitfwoo4pMEoxQXCQsr/77hHVxDvTQ8thb+58hQ7c1Cy+UFoG4jLgw1EUYZaTVxlE3woPtaV5y1AOHIDjCH6/yQ6U8RajA0NiYyIGmegiBiEtnYs6ctvBPHTUHX2OGvvUhnt23DR0XEg7nsqR6M5Qd6SIIelktTVI/zJpGZ9MyUGowEfVzWp+41bjQhQo+g7xlHNhzUQrveO5UkIpW85QYVuNU9qti/PD6C965i7C/0hcT5+9SP2qRYDhd54Hdp83WOw3geNiWE8s1sQ+N/0Xx0H9iTsQf9PvUGWtWX5qkHjuLs7UpXyN+rDoNyA2d4O2F6rlOBM59MMwN6/NOmlG4/AecgojbxU/x/IWK8k4ZzZb9A/Rw4miQymniCs4ERtyP6p4Bndliu4KyArLWqVgpalhP0ifklKWXTbSHXUAaf0uLEn49YLvdN1HmdhrsKrFsOunKOLcqbkMGpdPHuiGyT5XBv2dLwgxP7YbL48H0P4y8dW7+6RFZnfylaDYkNrte9QajUYHsF8zoty0BWYpl37F+lkO0/WUyu3fLI61EH+CCzLKWWpSAuF2dlB9Wcr38rGAHYHQJO8k+Y9j+gAb4gxTAtpwDVQ6s5YKhSOl3FuEzQfI2CXmFcS30XXJKIEq4ZfjuMKPNwU7g3M2bFFfiMY3CAQF9c937/Z436mJZbqGSXYM7MHuaGiNQRUvtAiGrg86mriiXJwX0s0/QYgKGZWvqY0loq0jLrQp75QQQGlgZEaCSRvm2Y1i26AIEyqIeE8bHiPgQLJiOj32B0E2Qxr9uZRjYKc5Iz3nZsYjnUtw9BKC0poNEMVu lZ3V/A7T 5Xlf43Bo4a8Wte56EwPSH3xuC3Po78BQgp6XpXaRSqtVmhtjYIBKohhJjrC2wpczFQ/S8TaO6itdHDcrD3ADLV8XY8bJIOjDvgQ49Q30cKOJeZ9h39n/cEmWH3N2Ev+W7SnSQuGunSp/vYPfux8gRdy4OE/LW/+2OjuvjGDISt721WfZyoJps/BBlFiYeFHy1IyNMa8t8Ufxs1sr4bIhHgl4SGU8pt1LBnyWGtwYr9ldORufgt4+UYjl8SJnaRT20PV6ojd4zEs6ObRPwsFyN8BE0LM0nD7ASeIMpLG11AmLrDiDjHDd+Y0QWlTy4dGuUA5kTUzZ0NqxldLZCg4MoDNber07qiMyiyWPK 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 leverages the LP64 SBI interface, enabling the RV64ILP32 Linux kernel to run seamlessly on LP64 OpenSBI or KVM. Using RV64ILP32 Linux doesn't require changing the bootloader, firmware, or hypervisor; it could replace the LP64 kernel directly. Signed-off-by: Guo Ren (Alibaba DAMO Academy) --- arch/riscv/include/asm/cpu_ops_sbi.h | 4 ++-- arch/riscv/include/asm/sbi.h | 22 +++++++++++----------- arch/riscv/kernel/cpu_ops_sbi.c | 4 ++-- arch/riscv/kernel/sbi_ecall.c | 22 +++++++++++----------- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/arch/riscv/include/asm/cpu_ops_sbi.h b/arch/riscv/include/asm/cpu_ops_sbi.h index d6e4665b3195..d967adad6b48 100644 --- a/arch/riscv/include/asm/cpu_ops_sbi.h +++ b/arch/riscv/include/asm/cpu_ops_sbi.h @@ -19,8 +19,8 @@ extern const struct cpu_operations cpu_ops_sbi; * @stack_ptr: A pointer to the hart specific sp */ struct sbi_hart_boot_data { - void *task_ptr; - void *stack_ptr; + xlen_t task_ptr; + xlen_t stack_ptr; }; #endif diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index 3d250824178b..fd9a9c723ec6 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -138,16 +138,16 @@ enum sbi_ext_pmu_fid { }; union sbi_pmu_ctr_info { - unsigned long value; + xlen_t value; struct { - unsigned long csr:12; - unsigned long width:6; + xlen_t csr:12; + xlen_t width:6; #if __riscv_xlen == 32 - unsigned long reserved:13; + xlen_t reserved:13; #else - unsigned long reserved:45; + xlen_t reserved:45; #endif - unsigned long type:1; + xlen_t type:1; }; }; @@ -422,15 +422,15 @@ enum sbi_ext_nacl_feature { extern unsigned long sbi_spec_version; struct sbiret { - long error; - long value; + xlen_t error; + xlen_t value; }; void sbi_init(void); long __sbi_base_ecall(int fid); -struct sbiret __sbi_ecall(unsigned long arg0, unsigned long arg1, - unsigned long arg2, unsigned long arg3, - unsigned long arg4, unsigned long arg5, +struct sbiret __sbi_ecall(xlen_t arg0, xlen_t arg1, + xlen_t arg2, xlen_t arg3, + xlen_t arg4, xlen_t arg5, int fid, int ext); #define sbi_ecall(e, f, a0, a1, a2, a3, a4, a5) \ __sbi_ecall(a0, a1, a2, a3, a4, a5, f, e) diff --git a/arch/riscv/kernel/cpu_ops_sbi.c b/arch/riscv/kernel/cpu_ops_sbi.c index e6fbaaf54956..f9ef3c0155f4 100644 --- a/arch/riscv/kernel/cpu_ops_sbi.c +++ b/arch/riscv/kernel/cpu_ops_sbi.c @@ -71,8 +71,8 @@ static int sbi_cpu_start(unsigned int cpuid, struct task_struct *tidle) /* Make sure tidle is updated */ smp_mb(); - bdata->task_ptr = tidle; - bdata->stack_ptr = task_pt_regs(tidle); + bdata->task_ptr = (ulong)tidle; + bdata->stack_ptr = (ulong)task_pt_regs(tidle); /* Make sure boot data is updated */ smp_mb(); hsm_data = __pa(bdata); diff --git a/arch/riscv/kernel/sbi_ecall.c b/arch/riscv/kernel/sbi_ecall.c index 24aabb4fbde3..ee22e69d70da 100644 --- a/arch/riscv/kernel/sbi_ecall.c +++ b/arch/riscv/kernel/sbi_ecall.c @@ -17,23 +17,23 @@ long __sbi_base_ecall(int fid) } EXPORT_SYMBOL(__sbi_base_ecall); -struct sbiret __sbi_ecall(unsigned long arg0, unsigned long arg1, - unsigned long arg2, unsigned long arg3, - unsigned long arg4, unsigned long arg5, +struct sbiret __sbi_ecall(xlen_t arg0, xlen_t arg1, + xlen_t arg2, xlen_t arg3, + xlen_t arg4, xlen_t arg5, int fid, int ext) { struct sbiret ret; trace_sbi_call(ext, fid); - register uintptr_t a0 asm ("a0") = (uintptr_t)(arg0); - register uintptr_t a1 asm ("a1") = (uintptr_t)(arg1); - register uintptr_t a2 asm ("a2") = (uintptr_t)(arg2); - register uintptr_t a3 asm ("a3") = (uintptr_t)(arg3); - register uintptr_t a4 asm ("a4") = (uintptr_t)(arg4); - register uintptr_t a5 asm ("a5") = (uintptr_t)(arg5); - register uintptr_t a6 asm ("a6") = (uintptr_t)(fid); - register uintptr_t a7 asm ("a7") = (uintptr_t)(ext); + register xlen_t a0 asm ("a0") = (xlen_t)(arg0); + register xlen_t a1 asm ("a1") = (xlen_t)(arg1); + register xlen_t a2 asm ("a2") = (xlen_t)(arg2); + register xlen_t a3 asm ("a3") = (xlen_t)(arg3); + register xlen_t a4 asm ("a4") = (xlen_t)(arg4); + register xlen_t a5 asm ("a5") = (xlen_t)(arg5); + register xlen_t a6 asm ("a6") = (xlen_t)(fid); + register xlen_t a7 asm ("a7") = (xlen_t)(ext); asm volatile ("ecall" : "+r" (a0), "+r" (a1) : "r" (a2), "r" (a3), "r" (a4), "r" (a5), "r" (a6), "r" (a7)