From nobody Fri Dec 19 18:47:18 2025 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5B06C28E61A for ; Thu, 24 Apr 2025 17:33:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516027; cv=none; b=KYf/Mu6NgnR42OtIszUpXuzaiU0yf0/Xw2JWl+pZ3pEw4/Wgf67g78w/CENsAh1NpBrQfuRZds1bBNntNKAS+OccEbqisn2XHBz86Li8+0xQdYr9JPG3j4qkGuWngO5FG7RWL9JMpW2khF/WUh2lMBQDRhp6WC967TrlYe4c6VQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516027; c=relaxed/simple; bh=aFqX3fLDtG8cy76aRcSSCxbszjtqQl817f+Kcc6ZMK0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=OKYvH7P6MsNAF/YTru4hd1huhfQ7gSqep+vAGlTD5kg9IGhcWHonmMi8u4k53FlKXxRAoE26oMqzGIsKIt5wCFRCkCSmI2a6AyH3YftjoCSIUGlJOmJYgbdz4zcoB2LlhRR2OC1FH6TzGIW4uowxTfAvFrGt7yWifUIPW5x8n+o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=WJwCQifU; arc=none smtp.client-ip=209.85.214.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="WJwCQifU" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-2243803b776so23397685ad.0 for ; Thu, 24 Apr 2025 10:33:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1745516025; x=1746120825; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MqV/L1fucoXh0zEq3ZbEkv0iZBTOf63rS7eOzOMDARE=; b=WJwCQifUIjEIFJgV0n05o7j7lWn9dcycnDP2Pyyrz7rerqfFUHvaYfGjn5GAoMnJo7 2zRQRzRBACmMJ+eSOPqkgYRZ+wughP9TcJHqjhf0Zanmhq1XpnFwldRUmlcmCw/KkN/g ySIihldhHHDzcVWgaLuMNSxZRrEgeFJK/YDCFXjQdTyx5nJ8F2opt3YduaiIxaTl+MBU dn5fxv9OjXJe3ryU444b0heqdljT2FCo0fmAVG6yLt5tt75SpZTvS00jm9Bwgz0uQrTe 8IfFxPqD1GLYzHVQKJyxbGcAIzdCIDkqGj1NgWPyji5tYs7aIJPFPHf5KrQdJ+Axb9kt ekwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745516025; x=1746120825; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MqV/L1fucoXh0zEq3ZbEkv0iZBTOf63rS7eOzOMDARE=; b=UIO+KHTUP2A9HnuwWwaMHB460/EYpkOGHbUbotaoh/kblUKiOjp5BL8h+YE5fyIMC2 v3cpZL19xkoJw3ehpQnbO0AXEyYdVSp8uMalV89hfAQpaTmwJF85N+6A3W0UTZkfzF/b iXrt6ob9YHELwL9CZujm1Bd3qRsXApTHL5ROgkYt8mo5ywnwzdktc1VNlJNOMJTrblmg 58zxELK37vCynxPGT7L76fRnvJA8h9TyuCo7K8vMLBEYUUiEeDr50h/UMfxNyBPUph9n TYVFUT9N7xFtDBgdIshVT6mPv6c/B+oToATkkXdxWBU7RAa1baOn8O/qClXZRDJSPIqB B2Mg== X-Forwarded-Encrypted: i=1; AJvYcCV9a5+oxehasUi2m47MoKJj34duQND3vJ949/6eNnxiA3QpBxjND5zP8GjCeyBF5X4INezDdopWhSn/6UQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxEixGRglekdvzvc9q1t+A6+M66O/8AAB8XokRK/90avmL33gZM g5v1/2/QTmFpp55JTfSalSSGlPU5nBxQb0beFG/6JJ8vskfluwoy+0+10HhNew0= X-Gm-Gg: ASbGnctAY8SudokZaJwsF/S6tcVe1+m/BiW+jHcB20dxZA2Z9e0gSS/47N9YdV5hiQL vuakVIU8UzdGBX0YRGlp+Dw4uvacoLKZUIyiVRxmDeEiwnoHavRgo5Gyid3mjvgDis0ESaAM7g0 ypXGrIIddO5axP9Aq1Bt5X7g0/2vraofMIZv+zczT2d5hQQtrrrcIp1BvpaYtt0vi1No5IeHxFa o+hyCP+/AQzjcDnePb46JNgDUR6gw4utDuUP82iS5BvZxzomRWw3R0Nk1UhsbUgkdiL/CY+n4LA L6Nv+HWv+kT9BoM4vsQHTKcooDmandskji7mrmjAEA== X-Google-Smtp-Source: AGHT+IGoXel2WMkjiTK/q7g1/yBkqNZ84Lmsw32W4+SLXcM2BGBaWrGqIbaWGI5EV1R0ZMMR1eKW3w== X-Received: by 2002:a17:903:2445:b0:220:d078:eb33 with SMTP id d9443c01a7336-22db3d71d34mr56439695ad.36.1745516025550; Thu, 24 Apr 2025 10:33:45 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22db5100c4esm16270255ad.173.2025.04.24.10.33.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Apr 2025 10:33:44 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v6 01/14] riscv: sbi: add Firmware Feature (FWFT) SBI extensions definitions Date: Thu, 24 Apr 2025 19:31:48 +0200 Message-ID: <20250424173204.1948385-2-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250424173204.1948385-1-cleger@rivosinc.com> References: <20250424173204.1948385-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The Firmware Features extension (FWFT) was added as part of the SBI 3.0 specification. Add SBI definitions to use this extension. Signed-off-by: Cl=C3=A9ment L=C3=A9ger Reviewed-by: Samuel Holland Tested-by: Samuel Holland Reviewed-by: Deepak Gupta Reviewed-by: Andrew Jones Reviewed-by: Atish Patra --- arch/riscv/include/asm/sbi.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index 3d250824178b..bb077d0c912f 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -35,6 +35,7 @@ enum sbi_ext_id { SBI_EXT_DBCN =3D 0x4442434E, SBI_EXT_STA =3D 0x535441, SBI_EXT_NACL =3D 0x4E41434C, + SBI_EXT_FWFT =3D 0x46574654, =20 /* Experimentals extensions must lie within this range */ SBI_EXT_EXPERIMENTAL_START =3D 0x08000000, @@ -402,6 +403,33 @@ enum sbi_ext_nacl_feature { #define SBI_NACL_SHMEM_SRET_X(__i) ((__riscv_xlen / 8) * (__i)) #define SBI_NACL_SHMEM_SRET_X_LAST 31 =20 +/* SBI function IDs for FW feature extension */ +#define SBI_EXT_FWFT_SET 0x0 +#define SBI_EXT_FWFT_GET 0x1 + +enum sbi_fwft_feature_t { + SBI_FWFT_MISALIGNED_EXC_DELEG =3D 0x0, + SBI_FWFT_LANDING_PAD =3D 0x1, + SBI_FWFT_SHADOW_STACK =3D 0x2, + SBI_FWFT_DOUBLE_TRAP =3D 0x3, + SBI_FWFT_PTE_AD_HW_UPDATING =3D 0x4, + SBI_FWFT_POINTER_MASKING_PMLEN =3D 0x5, + SBI_FWFT_LOCAL_RESERVED_START =3D 0x6, + SBI_FWFT_LOCAL_RESERVED_END =3D 0x3fffffff, + SBI_FWFT_LOCAL_PLATFORM_START =3D 0x40000000, + SBI_FWFT_LOCAL_PLATFORM_END =3D 0x7fffffff, + + SBI_FWFT_GLOBAL_RESERVED_START =3D 0x80000000, + SBI_FWFT_GLOBAL_RESERVED_END =3D 0xbfffffff, + SBI_FWFT_GLOBAL_PLATFORM_START =3D 0xc0000000, + SBI_FWFT_GLOBAL_PLATFORM_END =3D 0xffffffff, +}; + +#define SBI_FWFT_PLATFORM_FEATURE_BIT BIT(30) +#define SBI_FWFT_GLOBAL_FEATURE_BIT BIT(31) + +#define SBI_FWFT_SET_FLAG_LOCK BIT(0) + /* SBI spec version fields */ #define SBI_SPEC_VERSION_DEFAULT 0x1 #define SBI_SPEC_VERSION_MAJOR_SHIFT 24 @@ -419,6 +447,11 @@ enum sbi_ext_nacl_feature { #define SBI_ERR_ALREADY_STARTED -7 #define SBI_ERR_ALREADY_STOPPED -8 #define SBI_ERR_NO_SHMEM -9 +#define SBI_ERR_INVALID_STATE -10 +#define SBI_ERR_BAD_RANGE -11 +#define SBI_ERR_TIMEOUT -12 +#define SBI_ERR_IO -13 +#define SBI_ERR_DENIED_LOCKED -14 =20 extern unsigned long sbi_spec_version; struct sbiret { --=20 2.49.0 From nobody Fri Dec 19 18:47:18 2025 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CF34528E5F7 for ; Thu, 24 Apr 2025 17:33:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516036; cv=none; b=Z+21Styb6dUg+DdyBPqo1giaculXoB07LJILGOicogTgvMeAgWlzl3skl2Kr+95oCnQPr0j7pk5FowrifBg50Aq0ZSiXfY2/FXPIk3tcXGojo7d61k4OHEywBw8fhYdNvFWqwqYTfNc0Ie5IGgSAXTkNM+UvOXBPSs5hEIW7h0g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516036; c=relaxed/simple; bh=Hvkg2vuWcLH+loCVg3KfVBlKpSfZ+GMWX4LieYFjwwE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JNUsd4ra+iKvLJ8GmnAOO9gph9m3zCollWkutebbaFlxvbUwhHgJhB8SQw6qfWkvHI/VleVLbrNCB+KMDhzceU1RN157JQGNkU8R+09dtgAjaAiLA7+JwjZDEEYsGyPvCeq6JNTJHX4zxAo4k1bfw1FqVqHoYWoNAGhET9vGLY4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=gKbkbaRd; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="gKbkbaRd" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-22c33ac23edso13514615ad.0 for ; Thu, 24 Apr 2025 10:33:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1745516034; x=1746120834; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=gvf5XOciI2RxholK/olnAUr6RSsyRw+cO5ZQm+/Dg/Y=; b=gKbkbaRdJYoVwsyPc3EomBxUmPD6s2gSEj8UW55j1mMS/jZ9Akw/CBTGI3I/tmi8c8 QRUe1lirj8vIgl15mVPVE2tf7SI0WbtfYAJXfwbt01Trm1oRIyXdX/aaQRQ4wBguaf3m PjML0brUMIJj2+XlNO5u8gUO0FiB5vYmxNNCxvZWQvczN/TePt2/+MG+8pHVBX1148Tf EC8ho4ME1cz6M4BfdnPgSPZ4YFq7WTPuGm6p9GwgAYRdV0ABS21SpRY19liNIKeitbXR Pqy2OXZ5JwdhycOf8ZpGDvPLTKAdp5uGj5lOBBYf066LLebU4TVHGdsIjGSz65cs6UtR mJ5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745516034; x=1746120834; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gvf5XOciI2RxholK/olnAUr6RSsyRw+cO5ZQm+/Dg/Y=; b=XmpxzU+GbPx6nJCbhf0DKacanFCQKFC7FIgT9ufS56dXyoA3Xz45eqyJaYywDsr/z2 54JsgSdmB2PFHCQ31nBO2xw2f72i9CtOsgmiQ9IgQ1yN8CIUtlnf0WYlXPW4NHbUk7oP X0/KC0SHfBJ25duqHrHTXc1GnEcSiPBDRSHHGWJZ8D0OUxQ/TloA+6iZ0EoiJrP+U2aA eIH+1A4YSPPsH0zWMQeG6GgZhNlq9Y2w6nPXqzV4kjhTW0ixE3orOqe78V18Z223UdLy PHu8HePD51zKnT8mcASmKAi5xuZf5bTCbDh3QHb4hCoIzRxebOaAKbN4g3vrW8g3YwlP Hv3A== X-Forwarded-Encrypted: i=1; AJvYcCXJrc3C+EcSyOp7saEpQzcUoad6OCC9Ms/4sP8HN5OMdB6wL/wLHxT7XLnubLhm5uIJGRIaiuB7g1R6i8Y=@vger.kernel.org X-Gm-Message-State: AOJu0Yx3MpuC0Ze+OLilJP9uLVQ1tZBllbixA2Ji9PiN0QwCWmqMXWZ/ XnPP1KBMPhNoedRqg2d6ft69ncg90aKwKhkOEZsZy2ybJ5AhyK/sF0a7DImQ6GM= X-Gm-Gg: ASbGncvGMgCvnBjL2JBKq1Rpe0T0LgpAD8DAlx6sCaDCclL0082+EZppMRdBPF6V41H LdxRE8S3SHS2Vcb+Xn+ViK4VqVt/NakOOyMbL6NABIIctk+URU/efdF9boucchFZfKMUln0V9c/ kZBE8P7WDbHbnFwUMTqtawL1PTCbQAVdNt+wHqPLYhRX6NK++yAE9FHMxUM9PWOiyDNkpyeArDt kU2LL/vY0D4gyyPT8iBm6y52rz6Oh+ppCvCmptnd/otw0nfYo9TlR5GWZlQgdfh8f4cadRdQH+d 26ld36EliNtk8C7nxMshwTaqfeml5BxLNEpGumwFUQ== X-Google-Smtp-Source: AGHT+IHaM8bzJfRRvw0MkUxc3QW2tm+twyY3rgnrMs/7xPlJBt/0WAycPUEFxVys/K0zq71dkmTO4g== X-Received: by 2002:a17:902:d489:b0:22d:b243:2fee with SMTP id d9443c01a7336-22dbd415915mr4178995ad.13.1745516034428; Thu, 24 Apr 2025 10:33:54 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22db5100c4esm16270255ad.173.2025.04.24.10.33.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Apr 2025 10:33:53 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v6 02/14] riscv: sbi: remove useless parenthesis Date: Thu, 24 Apr 2025 19:31:49 +0200 Message-ID: <20250424173204.1948385-3-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250424173204.1948385-1-cleger@rivosinc.com> References: <20250424173204.1948385-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable A few parenthesis in check for SBI version/extension were useless, remove them. Signed-off-by: Cl=C3=A9ment L=C3=A9ger Reviewed-by: Andrew Jones Reviewed-by: Atish Patra --- arch/riscv/kernel/sbi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/riscv/kernel/sbi.c b/arch/riscv/kernel/sbi.c index 1989b8cade1b..1d44c35305a9 100644 --- a/arch/riscv/kernel/sbi.c +++ b/arch/riscv/kernel/sbi.c @@ -609,7 +609,7 @@ void __init sbi_init(void) } else { __sbi_rfence =3D __sbi_rfence_v01; } - if ((sbi_spec_version >=3D sbi_mk_version(0, 3)) && + if (sbi_spec_version >=3D sbi_mk_version(0, 3) && sbi_probe_extension(SBI_EXT_SRST)) { pr_info("SBI SRST extension detected\n"); pm_power_off =3D sbi_srst_power_off; @@ -617,8 +617,8 @@ void __init sbi_init(void) sbi_srst_reboot_nb.priority =3D 192; register_restart_handler(&sbi_srst_reboot_nb); } - if ((sbi_spec_version >=3D sbi_mk_version(2, 0)) && - (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { + if (sbi_spec_version >=3D sbi_mk_version(2, 0) && + sbi_probe_extension(SBI_EXT_DBCN) > 0) { pr_info("SBI DBCN extension detected\n"); sbi_debug_console_available =3D true; } --=20 2.49.0 From nobody Fri Dec 19 18:47:18 2025 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 11B5E28D85C for ; Thu, 24 Apr 2025 17:34:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516045; cv=none; b=LAFHrZGZ0ELgOZ0AvQX37l+V7Nqmc+Wf82Lt5ClP5lEJV63bLmSQQj74e4g1GLzqCYg4ftOAN3M4WPysEvs37JWgOahzK8F69Q18A40A8HL5l55iPpstl8Amyah0bonQtp5uN3RuY7hDYJQxmYkU82JyzFqgP7N0YClGhcQWqkU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516045; c=relaxed/simple; bh=I8q3a/r8sIPwl9ULO4heNHCAxh6RA5hJvMvMHg5vqgk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ipBxxo2BJ451S//MC5xP4NoU3okIZcAwtpz9c7d7wv8CKQoKnEXG2UpvzaZdQOUFpkv6q+QoIGGhv9DCIjSJe8/NvYnh7I5FsS3muRugy2wvbZ1MtTfYioi81IK4H4o8qjlriQD8H/2i/mFA7xkVKkFcQ7za2YcruDedqN/VGik= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=nOO22wwC; arc=none smtp.client-ip=209.85.214.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="nOO22wwC" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-22c33677183so14839875ad.2 for ; Thu, 24 Apr 2025 10:34:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1745516043; x=1746120843; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kJ5IZYf4f1NhGHvFycXXpF/34tAS76qwhFgvuPH97UQ=; b=nOO22wwCEeeCLRdveDX1XJoulJIftSH2Nt3zOLaUXbwhKvcj7lcqH87YEsPTBbZZVa DAZ92Bd8Qn0w/IXvr6KM2BLUODk+EeRU+BzFKu3J8g29wrEmXLW4zt8L/U+KtaqYVI1E 1uVZ4y1fDi5d5ZdC40Rbt7iLF5i1i5LlbLDyP/24BqAHGGZ5l9ZyGFNaST9DcpVhflpv AfqL3xSYZe6wrmKxpIZImjsLgR6rYg5TWruM+xJmm7bN64PuspNEKe1mWR2TlFafaKnd xN1Xqs7d8jv6TDen0V0LTc3ynMr0xWKDV2TFI0PWiQKG/mraDPeHnKEyRGyF9fkw/HTA jPsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745516043; x=1746120843; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kJ5IZYf4f1NhGHvFycXXpF/34tAS76qwhFgvuPH97UQ=; b=C0xo6JXThToBDMiM0b8aup76iE2fqSSqd+Vehhyiv0C1iHlYgB3G7DeX31NxFy2bN5 0XS8yv91WLOoAfH98leltoF/+aip9yBTez3jYVuem3XdrI/JAHgLFpkdTcW0Idprlsdi kYbxqwtzyF7VbJyltR8h+u88f9MAKfkWxKKgWn/YzXkvrFavNJFpWDZCt+st0+o8aolX 5v7qKiZ81k/Mp2wD9H2oRFvgyLhWvDZHTKDil/P74uDWYxS6NVpEnSXIIClQbgTnIMlG LZL+u/wbqMMhE3zgmhM3/5GBI5WMSf5lImiP4QJOLutVtfWJAhSZSKJ1O0nBp201Ywct yYug== X-Forwarded-Encrypted: i=1; AJvYcCUREiJ+TrAV40sn+WGFTA/ukYIEfsT6a6XjtGRj5sAUjyg6cUSq5S8qNsTtQuxJQOQaWNJkyBDrs80k45M=@vger.kernel.org X-Gm-Message-State: AOJu0YxXo2WQrZbBFkXqsUtb8hd1xCIzrl9k6yqjxmkeMlgCWyh1iHtv 7IJ/jyuplc54G0H1k1WAfvejDQuDDGsjQw1TqKigjWOYeqnFswucA3ynydWudH8= X-Gm-Gg: ASbGncuZKRa/MnmTXnW9zHOZgAX7B7SwaNigWIPCnMhgEcGsRNgWicBf2uro7cz4rSK cvh7Ir365Bpug+VjEb5pR8eIzGVSv2Ugpb1QTwTGkW5C92HqgSKy41A2OllIS4FOUi5SxFp0iOc w+ovM4GzFP8Wn0XuePJI9LYLZpkF660suFCuTahgs2a+YPtrbQmcIFv0ZThf96DiVlPe8yzvXWu WDPa3Mwl78Z28TXdZYddOiB7VZ2YM4qocfg7uZ7LKAmzO/hxzx7aJNNabL6AnhjwofnnJQb/MHn yYG9xxtbiPGqt+iGNl8Zo+XGhpDoyHgzb4e7gadYMw== X-Google-Smtp-Source: AGHT+IHzS5PXDP+Qy5Xmwwn0uCCNIK9/92EEG8lEAWpb5PTGOgGH/HAmRDTuUMHUdz3Q/hblJk8Z1w== X-Received: by 2002:a17:903:234e:b0:223:67ac:8929 with SMTP id d9443c01a7336-22dbd35407bmr5533655ad.0.1745516043323; Thu, 24 Apr 2025 10:34:03 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22db5100c4esm16270255ad.173.2025.04.24.10.33.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Apr 2025 10:34:02 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v6 03/14] riscv: sbi: add new SBI error mappings Date: Thu, 24 Apr 2025 19:31:50 +0200 Message-ID: <20250424173204.1948385-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250424173204.1948385-1-cleger@rivosinc.com> References: <20250424173204.1948385-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable A few new errors have been added with SBI V3.0, maps them as close as possible to errno values. Signed-off-by: Cl=C3=A9ment L=C3=A9ger Reviewed-by: Andrew Jones Reviewed-by: Atish Patra --- arch/riscv/include/asm/sbi.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index bb077d0c912f..7ec249fea880 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -536,11 +536,21 @@ static inline int sbi_err_map_linux_errno(int err) case SBI_SUCCESS: return 0; case SBI_ERR_DENIED: + case SBI_ERR_DENIED_LOCKED: return -EPERM; case SBI_ERR_INVALID_PARAM: + case SBI_ERR_INVALID_STATE: return -EINVAL; + case SBI_ERR_BAD_RANGE: + return -ERANGE; case SBI_ERR_INVALID_ADDRESS: return -EFAULT; + case SBI_ERR_NO_SHMEM: + return -ENOMEM; + case SBI_ERR_TIMEOUT: + return -ETIME; + case SBI_ERR_IO: + return -EIO; case SBI_ERR_NOT_SUPPORTED: case SBI_ERR_FAILURE: default: --=20 2.49.0 From nobody Fri Dec 19 18:47:18 2025 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CA3C028E614 for ; Thu, 24 Apr 2025 17:34:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516054; cv=none; b=R918Fv+ZdmUjdIj2JMCTqVab8lorgkGHc6urGYOFf5+1i7VSojRYpm/Au8F0PwW0EZMbr+P6HdoNcC+4zQpDBGhvJNWOTBLNid1/HGj+cpU2hcfNRoGq8uM2bk8kGgubCaQSacjNq0ZEFw4O7CYezZxCYk0RCOt6V0371DDiW/4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516054; c=relaxed/simple; bh=4KKxaT4YbiMX7RMDjwNA7B7kFRjG+KUrG1SV+mETLMk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=fMegl+ZK76jWnAZkPLZbsvcyF1UckWNqF5oJaptrUwLpWiXzUl8Qa/cUGMS3DriQmV1cpWIhJhlACowmnvoG0ZqQYBoaXO7ldUiPXechHivv8yWEYTRD8JN21BjNfE5O3X21SVb35xZGEQm2bfnYCdZ4Kz9mYH0bph0md6Osxhc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=HYxIFLWD; arc=none smtp.client-ip=209.85.214.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="HYxIFLWD" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-2295d78b433so15954255ad.2 for ; Thu, 24 Apr 2025 10:34:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1745516052; x=1746120852; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DvBBsjj+z7fvXIiV8XNjx2EbWr7FpMlve2V3rRwX9go=; b=HYxIFLWDGWb1b5A5HS0G2BdVtNK/UIDYiMrtfAXgk7oErx/DFK7LO28/3faj3VqCld ZTkq20eJQiLbQwG0TdUryAdwSaG6WJHcqz2nVCldu26RFhRuwPLaBaFY8h8onkYrf+1v motQw/Vk5iZE8xZFXI9Fyzm6wDWY3reH4Y2DMoOQLbrpkXzMw/fnw7lAOiexNeWO5Cly URcADGRYIcBe0r3m0QRoPB2IeuVx/wQtPb3QKINEGqpgFwgnWRSHW5QntJ56IMBpI4cJ oq0nV4QI9niQcALRBb6fKTc4o98Tzi+Gh8plGLttAmAjxFW2DYKwWBR7+3d/Al5Lc+Hd n3zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745516052; x=1746120852; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DvBBsjj+z7fvXIiV8XNjx2EbWr7FpMlve2V3rRwX9go=; b=mkWSqUT4p7RV0E/gwyWJTJerqD4wiIBlG/b0Y5V9VBvhV2ccBH5IrvGrQSSZZickIA l21SQL01XVqCKjy0bEHNLr4pwe9O2sPp2tih/j+nVwCrji7DmcBYyzCLrTHbiWdXTLl4 zljIcNVldSU/gJPPlBT8Ne4erU4A4ur+Y9AsYn3lss25jGLZbCEZhmDJhmgIfjDcbPxJ w1DwnVkW8a3GCJoEwj6OfThyW5goLMwwIJSff0mAdJoh1ZfjfGWKauIIEJDYN7/bQRwE VTFF12mPPK3Pfz9UPFqMVCo/cbHiNoOocjUyu7REdROFxj01GVKOm8dzpVRi4NFp4DPj vo4A== X-Forwarded-Encrypted: i=1; AJvYcCU2cCEifCPbdSILLsf1SonGqs5Hs6JCCcI9GBxqeBbYxUgp8xiEyLIIrseCWENF8ofrdJThN9XvvqrWo28=@vger.kernel.org X-Gm-Message-State: AOJu0Yzxy4J3K94XbrbazZRo5++WLstdXLZ809q4WVpPcILn4Hnhr8ls Hwz9ouZ34sXqGj53BRSDOCvBnx2PmKaiFNzLcPMVyyhdk1gQgbUAT53kqEpscXM= X-Gm-Gg: ASbGncu9j1WOtqhUCooJmPJPJhPAoHRsR3hf/M57x2fw1QZQEq3LoRXtX4YJkpUywOt aKrH9zkBvqdv/1m9eAL58b0jVlTnk0SSjIs++s7tIU0TYs0O8EvjIcAn2J5KHIYntW3+qgLVgkI dKgn08mUIRjswE4wnz2+rANsMuQT1wLPc4pJXmm1mhl8BzFINnayhArQCRPA2V+puPgCmurfO1k qfP8/hIJ+T2YJ0IZR2ZR4OSs+EpkmKd9jMILnz8JI1TW7P01HHfhodF2GsSL65gyZb1+b75mDdk r3gu7tZWMLUUU8/Z32SsF13l/kiDfablewfnO6PaIQ== X-Google-Smtp-Source: AGHT+IGUt7NQqfqeO0namSyIMn7maNYN8P7cnVATP91mLdDbfQJ5Gas+mViREoMG88x9kDoZBx7Z4g== X-Received: by 2002:a17:903:3c46:b0:21c:fb6:7c3c with SMTP id d9443c01a7336-22dbd412142mr4560165ad.17.1745516052316; Thu, 24 Apr 2025 10:34:12 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22db5100c4esm16270255ad.173.2025.04.24.10.34.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Apr 2025 10:34:11 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v6 04/14] riscv: sbi: add FWFT extension interface Date: Thu, 24 Apr 2025 19:31:51 +0200 Message-ID: <20250424173204.1948385-5-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250424173204.1948385-1-cleger@rivosinc.com> References: <20250424173204.1948385-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable This SBI extensions enables supervisor mode to control feature that are under M-mode control (For instance, Svadu menvcfg ADUE bit, Ssdbltrp DTE, etc). Add an interface to set local features for a specific cpu mask as well as for the online cpu mask. Signed-off-by: Cl=C3=A9ment L=C3=A9ger Reviewed-by: Andrew Jones Reviewed-by: Atish Patra --- arch/riscv/include/asm/sbi.h | 17 +++++++++++ arch/riscv/kernel/sbi.c | 57 ++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index 7ec249fea880..3bbef56bcefc 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -503,6 +503,23 @@ int sbi_remote_hfence_vvma_asid(const struct cpumask *= cpu_mask, unsigned long asid); long sbi_probe_extension(int ext); =20 +int sbi_fwft_set(u32 feature, unsigned long value, unsigned long flags); +int sbi_fwft_set_cpumask(const cpumask_t *mask, u32 feature, + unsigned long value, unsigned long flags); +/** + * sbi_fwft_set_online_cpus() - Set a feature on all online cpus + * @feature: The feature to be set + * @value: The feature value to be set + * @flags: FWFT feature set flags + * + * Return: 0 on success, appropriate linux error code otherwise. + */ +static inline int sbi_fwft_set_online_cpus(u32 feature, unsigned long valu= e, + unsigned long flags) +{ + return sbi_fwft_set_cpumask(cpu_online_mask, feature, value, flags); +} + /* Check if current SBI specification version is 0.1 or not */ static inline int sbi_spec_is_0_1(void) { diff --git a/arch/riscv/kernel/sbi.c b/arch/riscv/kernel/sbi.c index 1d44c35305a9..d57e4dae7dac 100644 --- a/arch/riscv/kernel/sbi.c +++ b/arch/riscv/kernel/sbi.c @@ -299,6 +299,63 @@ static int __sbi_rfence_v02(int fid, const struct cpum= ask *cpu_mask, return 0; } =20 +/** + * sbi_fwft_set() - Set a feature on the local hart + * @feature: The feature ID to be set + * @value: The feature value to be set + * @flags: FWFT feature set flags + * + * Return: 0 on success, appropriate linux error code otherwise. + */ +int sbi_fwft_set(u32 feature, unsigned long value, unsigned long flags) +{ + return -EOPNOTSUPP; +} + +struct fwft_set_req { + u32 feature; + unsigned long value; + unsigned long flags; + atomic_t error; +}; + +static void cpu_sbi_fwft_set(void *arg) +{ + struct fwft_set_req *req =3D arg; + int ret; + + ret =3D sbi_fwft_set(req->feature, req->value, req->flags); + if (ret) + atomic_set(&req->error, ret); +} + +/** + * sbi_fwft_set_cpumask() - Set a feature for the specified cpumask + * @mask: CPU mask of cpus that need the feature to be set + * @feature: The feature ID to be set + * @value: The feature value to be set + * @flags: FWFT feature set flags + * + * Return: 0 on success, appropriate linux error code otherwise. + */ +int sbi_fwft_set_cpumask(const cpumask_t *mask, u32 feature, + unsigned long value, unsigned long flags) +{ + struct fwft_set_req req =3D { + .feature =3D feature, + .value =3D value, + .flags =3D flags, + .error =3D ATOMIC_INIT(0), + }; + + if (feature & SBI_FWFT_GLOBAL_FEATURE_BIT) + return -EINVAL; + + on_each_cpu_mask(mask, cpu_sbi_fwft_set, &req, 1); + + return atomic_read(&req.error); +} + /** * sbi_set_timer() - Program the timer for next timer event. * @stime_value: The value after which next timer event should fire. --=20 2.49.0 From nobody Fri Dec 19 18:47:18 2025 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 094D728F507 for ; Thu, 24 Apr 2025 17:34:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516063; cv=none; b=HvzhoUmg4Xww7/IqtOEOlw7xLxVKNx8hNLKgWuq1o6VW8UOyDbWI94Uf8R77qGxz0KPd9O8lLb5TV3ODNI5i0mzJXLxh7j/YalEh0EL7ipwd8nNMvw5lM81ZJ9B7Wm9zJKK4f0YNUNGeqlbY8k+RyiVzT6ZK5v89n8VuQrSo0Bs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516063; c=relaxed/simple; bh=WFmpbMMF8HntgsLUUpVbwFoU5lFzEDsl21mQjoTPJz8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=o2kYxs4LWm6n95yXFWdtFM8Qr8x2YNVu/U260WYFTPQWpWyEMAKsmZ3K7YWC8231FmGDo2JS+OWVCqam9IJdqJBZRTlhpzNH4C9R/DW2XvnaQN4aXIRHSWYx+/uPxrXz4N7cWoewPpbGrR1a9Ue+CE9XyPazjPxu+DqmXmop5jM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=vrABEJbx; arc=none smtp.client-ip=209.85.214.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="vrABEJbx" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-2264aefc45dso21630445ad.0 for ; Thu, 24 Apr 2025 10:34:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1745516061; x=1746120861; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3eGkKF9qJdSzcJjZFaybinwNECXrhVepEnvdsnCoIkY=; b=vrABEJbxwBMRtIyYIwPcHH5MTwJ69rs1sdTNR2yrbw3Jv2LN27K5WZ1xO9m0DMeCEt eskgkmEtXtjIjgJoBTrVSIN//nCm8uY6IY7uEJaq0lCDhnUSVRqtX5UCLjULMXH95fZ3 AQVf9p5V/gMwJe+059AV9EAs84DZQFWGF4vQEPinsNuUJG9DGDXVITp/JtDCPOZY7TkL IRh3RG1Q5rH+vupKn06ayea4WoHCk4vsw5LjJwGKyJyhshnY8NxJgdkC62cKM7uvrHmr X924iIKWJBj2E+ciH878r87l9gi3SWBmxg3OAJ8erl6p2AgwkGqUBB3fRimwOJ6X4jHH 5pPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745516061; x=1746120861; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3eGkKF9qJdSzcJjZFaybinwNECXrhVepEnvdsnCoIkY=; b=Mdg+Y19ayxzgOz/3wcJmJoaIx1ezAiBSSzLYZC4PJs3nIE9KwVqthI3yOwRuwvMME/ jjH6U98Be+QaV2IkhGXkXduR0osPUpdeGbbu0m9yEj+VTCOc3sVrG/K6KvzdkgvPjqYG hE4vphq28h8pGxkuUGXFqaOXC/bEu626ivCfImIo+HSroPMRQNNMHaZxF+HivB7tsm0w 8v352Wfpey1mjel9DF97CrZ72klqMGrIIx/y9D3SYy39Psgcl0JwOqu1HsiVOaMK6aHb UxAeD7VpVPWDl4bmyvvDfFHwBXykjg0bTVJzd/RkWv9hYBPWtnmsfVTAPs22Ux23Yh5K Up0Q== X-Forwarded-Encrypted: i=1; AJvYcCV94I/krihyf8Bce8k8ZRyV3p2bayjN33uH9Z0mJZAxO+SlqmwuGXho3XDVYDqNhbGDeEAzTVKunyoLp1I=@vger.kernel.org X-Gm-Message-State: AOJu0YwRN8jPR97pNhkqaOitOqDO39BtXR6MaFoNpDGEly7kHA9568vE V+R9B00E6BT0ZVvqQ4GxYV/4HN1EM6mGOIH+jncrQWMQA4KJ+H0bYphreSj30x0= X-Gm-Gg: ASbGncuv2x5eY5xwygnqtpwfc7m0dkvoQm680pjASSUmaysPd0zc+hOD28aXoXx9dSP ZTRd2H2o+IM/ReniHS+8y68xcEE0qv27wRAdnItpuPhvF+C06eO6pIoLgcOffYAl5UH4d6xZDxb boGq3lDDvV2paMBX1ZZfn7wPM6smVJ77TAexjCJaQdvQZRB90odeYI1KH6zBuDVIFGupqftFE24 o+R+NlyKLzvHMB0g3TDAnwrgJSF3UvCqjt8A44rfThtAh9Fl1XJ4ZpGJS280QEvZ0MNh0KfvXfD S0EplwxO0ZcB5SJ35jr2eutuD9D39dSmNNTpkAMK2w== X-Google-Smtp-Source: AGHT+IEs4ew4uugiJtDbQhNEaEfxtdPEFF4bo2T+1eF9T2VcpqRrkFtRa0ffscLhiLfSNXEuYhJu4Q== X-Received: by 2002:a17:902:db11:b0:223:5a6e:b16 with SMTP id d9443c01a7336-22dbd3f9de4mr5146115ad.5.1745516061340; Thu, 24 Apr 2025 10:34:21 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22db5100c4esm16270255ad.173.2025.04.24.10.34.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Apr 2025 10:34:20 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v6 05/14] riscv: sbi: add SBI FWFT extension calls Date: Thu, 24 Apr 2025 19:31:52 +0200 Message-ID: <20250424173204.1948385-6-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250424173204.1948385-1-cleger@rivosinc.com> References: <20250424173204.1948385-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add FWFT extension calls. This will be ratified in SBI V3.0 hence, it is provided as a separate commit that can be left out if needed. Signed-off-by: Cl=C3=A9ment L=C3=A9ger Reviewed-by: Andrew Jones Reviewed-by: Atish Patra --- arch/riscv/kernel/sbi.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/arch/riscv/kernel/sbi.c b/arch/riscv/kernel/sbi.c index d57e4dae7dac..070014ff35d4 100644 --- a/arch/riscv/kernel/sbi.c +++ b/arch/riscv/kernel/sbi.c @@ -299,6 +299,8 @@ static int __sbi_rfence_v02(int fid, const struct cpuma= sk *cpu_mask, return 0; } =20 +static bool sbi_fwft_supported; + /** * sbi_fwft_set() - Set a feature on the local hart * @feature: The feature ID to be set @@ -309,7 +311,15 @@ static int __sbi_rfence_v02(int fid, const struct cpum= ask *cpu_mask, */ int sbi_fwft_set(u32 feature, unsigned long value, unsigned long flags) { - return -EOPNOTSUPP; + struct sbiret ret; + + if (!sbi_fwft_supported) + return -EOPNOTSUPP; + + ret =3D sbi_ecall(SBI_EXT_FWFT, SBI_EXT_FWFT_SET, + feature, value, flags, 0, 0, 0); + + return sbi_err_map_linux_errno(ret.error); } =20 struct fwft_set_req { @@ -348,6 +358,9 @@ int sbi_fwft_set_cpumask(const cpumask_t *mask, u32 fea= ture, .error =3D ATOMIC_INIT(0), }; =20 + if (!sbi_fwft_supported) + return -EOPNOTSUPP; + if (feature & SBI_FWFT_GLOBAL_FEATURE_BIT) return -EINVAL; =20 @@ -679,6 +692,11 @@ void __init sbi_init(void) pr_info("SBI DBCN extension detected\n"); sbi_debug_console_available =3D true; } + if (sbi_spec_version >=3D sbi_mk_version(3, 0) && + sbi_probe_extension(SBI_EXT_FWFT)) { + pr_info("SBI FWFT extension detected\n"); + sbi_fwft_supported =3D true; + } } else { __sbi_set_timer =3D __sbi_set_timer_v01; __sbi_send_ipi =3D __sbi_send_ipi_v01; --=20 2.49.0 From nobody Fri Dec 19 18:47:18 2025 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4EA2128F509 for ; Thu, 24 Apr 2025 17:34:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516073; cv=none; b=F46CyYL/5k1l9uoItF4uK7VA+4KTQRwXrT1pGLnLBb50FbfRYVa2ltqyGgvsuAETJMik3X54lisyYVWVMPsisr877364ELvY/CjSNEvMq3I+BOP0ZRv6WNi6keWGkNT4f1Vj+nOCJzlDnNsRAVHiN2I7y82rT+UadOYmJ8w+jUQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516073; c=relaxed/simple; bh=pcGrEFJSoCPBjP83DKmshQqtiDx/pnJTzB92vC0uUOs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=PuEfLQOz6RFGEw4y15iaPuTZCU26/7M8XXoBhLr5rPmOxTyBn+4L6GaKH+21TLFPXFgmH22lEKYj8S27MeSj4jxeEgLbUugkYwquSiT74jtus4A+31/LXYCI60POamcyYP6WFGv6959M11F/0h2Bai3UilXL5NdUqyzr3kl3xwU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=p20Gi+Vp; arc=none smtp.client-ip=209.85.214.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="p20Gi+Vp" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-225df540edcso26119555ad.0 for ; Thu, 24 Apr 2025 10:34:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1745516070; x=1746120870; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6bU2iOKxu5SmLczj4d/R9CrHjankuiJ12CPdEyBdM40=; b=p20Gi+VpbgKpr/uUltuaVdKPQL6mEsmtFpp3xzZE6X8JgULhg2Iuy8Nf3b2+VTcvDY POMYn815UJ2rD3kc1mh+SZtAw++HD3Bd9R5AYr9xpjPCWmrBQDmxs23zfOMOQ4/GKLja m6zH9NxU0A/naTCGn13VImNd1A9ZnGKL6xH9ydt09nWeK1EWmWOKbSzr+O2v/bJ2p7ki RMBg0gWc1sh1JT3L+KX2txB3uBLG8P9l00vnWGQZd3cSAg8POC69qZMgkOmwJg+A1sxR pHrFYufxmwnjg3pzXU+w5pGCF2TA9UsDWqrPXi/7u/ewNDHYtKlgMlaQayvRZ4cO4Bgu GTsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745516070; x=1746120870; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6bU2iOKxu5SmLczj4d/R9CrHjankuiJ12CPdEyBdM40=; b=UH5bcOqRgch9sQ94aYriK1urw/j3L1X4jXqreCv9MhMHasPvR75/PQ6xDXsWni6Uyb Mrjf39JnoAfM0y1qIXyzSm9uYV0WuIH3KVFBlwRdHj0wDKlCFFV2n12nPsBvTuncrZR+ ucVCFW8th7/jo2Q2rsPEuqmPpLpsSk5Jk4BJL0DsVU53UCDqbAnlJkFUjJV5KSwZ/IK6 53S8dqZwyI9VQlqD1EdE1Wr/zMPMzhs3Vo79nMjpkd/LnVF5BrjXLtkCLGlqXy6ekApZ 9guYvzcERe5hhFlq4GdVpfGUYYYptOY3wSjaramKIl52KOlQalS7/DOKwv7xvkhPK2ue BtHA== X-Forwarded-Encrypted: i=1; AJvYcCWt/ymPJLdZ811XONavxnpotZLxOM1BLTaqbO4eeubeD7V7r8PiDDVUoTz4ccT8vvcoyyawYNtHx7bp1PA=@vger.kernel.org X-Gm-Message-State: AOJu0YwDyIg/PCWoXLXoh3o4jrVPlZZIpkDETVl0huzpwKIEkKIrOlMB 3aXxD8C8Nb4pMfsnNEU0D2y7VlkNnYGob8GA321cpDFTwBAwA7Phb/x+AaY/C0c= X-Gm-Gg: ASbGncuvFUWAAoeLvwcx8njj1CxLxfnTeowwvcylKousJPY8d8bvOC18a5sZ8vFGOZI 8V2hukgPkReNbvrMKqbEbm5vihfAPOgnxqEyhKg9R6QzmJ6eO3xv482D604jSplxi2WcOlWh3Tp rn6NQPlDgK4OzMSxW2EWRac4pZl2mGO1WgDL+ZuR4wMCH6oxEaGUhtrPagsnrc0fhQAY1Ps9V9s Bwk4zgITV9EcpAilYQ7mRW2l81yt4XUDug3jNZgrOiaRCZiwpIASZ2EF5W/dykGODZRkfY80sp/ 3SCSa9YX/3KaAsci6lP3egE1j+IoR66xBlA9J5NZvwIHv2S7BVB+ X-Google-Smtp-Source: AGHT+IG3l8kK7kp3RaV5j+GPb4uHqVWvo0jElPOjXjQU/Gw4v40fSw8IcnxpiGG/AbGNwQyQot80lw== X-Received: by 2002:a17:903:3ba7:b0:223:517a:d5a9 with SMTP id d9443c01a7336-22db4819fdemr42739985ad.15.1745516070298; Thu, 24 Apr 2025 10:34:30 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22db5100c4esm16270255ad.173.2025.04.24.10.34.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Apr 2025 10:34:29 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v6 06/14] riscv: misaligned: request misaligned exception from SBI Date: Thu, 24 Apr 2025 19:31:53 +0200 Message-ID: <20250424173204.1948385-7-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250424173204.1948385-1-cleger@rivosinc.com> References: <20250424173204.1948385-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Now that the kernel can handle misaligned accesses in S-mode, request misaligned access exception delegation from SBI. This uses the FWFT SBI extension defined in SBI version 3.0. Signed-off-by: Cl=C3=A9ment L=C3=A9ger Reviewed-by: Andrew Jones --- arch/riscv/include/asm/cpufeature.h | 3 +- arch/riscv/kernel/traps_misaligned.c | 71 +++++++++++++++++++++- arch/riscv/kernel/unaligned_access_speed.c | 8 ++- 3 files changed, 77 insertions(+), 5 deletions(-) diff --git a/arch/riscv/include/asm/cpufeature.h b/arch/riscv/include/asm/c= pufeature.h index f56b409361fb..dbe5970d4fe6 100644 --- a/arch/riscv/include/asm/cpufeature.h +++ b/arch/riscv/include/asm/cpufeature.h @@ -67,8 +67,9 @@ void __init riscv_user_isa_enable(void); _RISCV_ISA_EXT_DATA(_name, _id, _sub_exts, ARRAY_SIZE(_sub_exts), _valida= te) =20 bool __init check_unaligned_access_emulated_all_cpus(void); +void unaligned_access_init(void); +int cpu_online_unaligned_access_init(unsigned int cpu); #if defined(CONFIG_RISCV_SCALAR_MISALIGNED) -void check_unaligned_access_emulated(struct work_struct *work __always_unu= sed); void unaligned_emulation_finish(void); bool unaligned_ctl_available(void); DECLARE_PER_CPU(long, misaligned_access_speed); diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps= _misaligned.c index 97c674d7d34f..6bb734abf9a4 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -16,6 +16,7 @@ #include #include #include +#include #include =20 #define INSN_MATCH_LB 0x3 @@ -629,7 +630,7 @@ bool __init check_vector_unaligned_access_emulated_all_= cpus(void) =20 static bool unaligned_ctl __read_mostly; =20 -void check_unaligned_access_emulated(struct work_struct *work __always_unu= sed) +static void check_unaligned_access_emulated(struct work_struct *work __alw= ays_unused) { int cpu =3D smp_processor_id(); long *mas_ptr =3D per_cpu_ptr(&misaligned_access_speed, cpu); @@ -640,6 +641,13 @@ void check_unaligned_access_emulated(struct work_struc= t *work __always_unused) __asm__ __volatile__ ( " "REG_L" %[tmp], 1(%[ptr])\n" : [tmp] "=3Dr" (tmp_val) : [ptr] "r" (&tmp_var) : "memory"); +} + +static int cpu_online_check_unaligned_access_emulated(unsigned int cpu) +{ + long *mas_ptr =3D per_cpu_ptr(&misaligned_access_speed, cpu); + + check_unaligned_access_emulated(NULL); =20 /* * If unaligned_ctl is already set, this means that we detected that all @@ -648,9 +656,10 @@ void check_unaligned_access_emulated(struct work_struc= t *work __always_unused) */ if (unlikely(unaligned_ctl && (*mas_ptr !=3D RISCV_HWPROBE_MISALIGNED_SCA= LAR_EMULATED))) { pr_crit("CPU misaligned accesses non homogeneous (expected all emulated)= \n"); - while (true) - cpu_relax(); + return -EINVAL; } + + return 0; } =20 bool __init check_unaligned_access_emulated_all_cpus(void) @@ -682,4 +691,60 @@ bool __init check_unaligned_access_emulated_all_cpus(v= oid) { return false; } +static int cpu_online_check_unaligned_access_emulated(unsigned int cpu) +{ + return 0; +} +#endif + +#ifdef CONFIG_RISCV_SBI + +static bool misaligned_traps_delegated; + +static int cpu_online_sbi_unaligned_setup(unsigned int cpu) +{ + if (sbi_fwft_set(SBI_FWFT_MISALIGNED_EXC_DELEG, 1, 0) && + misaligned_traps_delegated) { + pr_crit("Misaligned trap delegation non homogeneous (expected delegated)= "); + return -EINVAL; + } + + return 0; +} + +void __init unaligned_access_init(void) +{ + int ret; + + ret =3D sbi_fwft_set_online_cpus(SBI_FWFT_MISALIGNED_EXC_DELEG, 1, 0); + if (ret) + return; + + misaligned_traps_delegated =3D true; + pr_info("SBI misaligned access exception delegation ok\n"); + /* + * Note that we don't have to take any specific action here, if + * the delegation is successful, then + * check_unaligned_access_emulated() will verify that indeed the + * platform traps on misaligned accesses. + */ +} +#else +void __init unaligned_access_init(void) {} + +static int cpu_online_sbi_unaligned_setup(unsigned int cpu __always_unused) +{ + return 0; +} #endif + +int cpu_online_unaligned_access_init(unsigned int cpu) +{ + int ret; + + ret =3D cpu_online_sbi_unaligned_setup(cpu); + if (ret) + return ret; + + return cpu_online_check_unaligned_access_emulated(cpu); +} diff --git a/arch/riscv/kernel/unaligned_access_speed.c b/arch/riscv/kernel= /unaligned_access_speed.c index b8ba13819d05..ae2068425fbc 100644 --- a/arch/riscv/kernel/unaligned_access_speed.c +++ b/arch/riscv/kernel/unaligned_access_speed.c @@ -236,6 +236,11 @@ arch_initcall_sync(lock_and_set_unaligned_access_stati= c_branch); =20 static int riscv_online_cpu(unsigned int cpu) { + int ret =3D cpu_online_unaligned_access_init(cpu); + + if (ret) + return ret; + /* We are already set since the last check */ if (per_cpu(misaligned_access_speed, cpu) !=3D RISCV_HWPROBE_MISALIGNED_S= CALAR_UNKNOWN) { goto exit; @@ -248,7 +253,6 @@ static int riscv_online_cpu(unsigned int cpu) { static struct page *buf; =20 - check_unaligned_access_emulated(NULL); buf =3D alloc_pages(GFP_KERNEL, MISALIGNED_BUFFER_ORDER); if (!buf) { pr_warn("Allocation failure, not measuring misaligned performance\n"); @@ -439,6 +443,8 @@ static int __init check_unaligned_access_all_cpus(void) { int cpu; =20 + unaligned_access_init(); + if (unaligned_scalar_speed_param !=3D RISCV_HWPROBE_MISALIGNED_SCALAR_UNK= NOWN) { pr_info("scalar unaligned access speed set to '%s' (%lu) by command line= \n", speed_str[unaligned_scalar_speed_param], unaligned_scalar_speed_param); --=20 2.49.0 From nobody Fri Dec 19 18:47:18 2025 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2227E28F52B for ; Thu, 24 Apr 2025 17:34:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516081; cv=none; b=S9GDnRfNS5EZEMHeS1jGsdfSEqWi3GypqJHemffWmffunD6/IeakiYoQ0I2ttDfgRe499WRWsbgyerTsxqNP3hnVOruEBNOt3vIGiNpp61NFtL1cVs3hi9GmV211tCR/csUOwbjLjWeQI3Ik7mT1rYLv8ps6CBDCyYWaPeH5g5A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516081; c=relaxed/simple; bh=LcpSprXMV6bcNVh6rueh5KTbTp1K/fbkooupP6MTizk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=hpYIssGvtX9IN7TFCFN3RyJPvxV+EIX7GcHctdmEAw+KLgjxoVTeGquaaEhbb67I+hFQ7N+2/y0FSSW/VbNaMeNKG+nI5e9jI418USuKvUG+r5tad1MMHodaX0ZXhUg31pnUoHfsPZxVwB4GS/f7R0IW2yorP+ZAWFAn0FwcC9I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=owfWtu9h; arc=none smtp.client-ip=209.85.216.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="owfWtu9h" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-3081fe5987eso1287962a91.3 for ; Thu, 24 Apr 2025 10:34:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1745516079; x=1746120879; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SH77kPPOP+qp5pa2Cr8pgAGSaFmjEWdE92nKDczco64=; b=owfWtu9hdkAHE0zKblqsvB1dUkIPCXmYCfyvccCw1Pp/VcDq7vvWGLwjREa0bt/ims pkDNOz7FIEpA9eItkuJ+01IXuBh176qfud6JMq4EWtsJOMeEaeRsAdlyGgXOijeU3W+y 4YCUIuFnSOK5USK4Q16Wi0xWCcxdPSS15+9ig9ILKCdsJzc9BTvV+UJ9ndnN3G/F9NVs lV7Vm4CP9VBMGx0L0Oc3/nbYVaInEg/OA1/glgdVOnkUJ6V4+R4r+aKET7rnghJhhEc4 zA6Y8AWEQxDudw5GDTqpolylcn9YG0vU2zI40WznPQOu+RWkgHgK73+Gv4kvZ7AkgeXV u4fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745516079; x=1746120879; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SH77kPPOP+qp5pa2Cr8pgAGSaFmjEWdE92nKDczco64=; b=CpG7t7Uhgabu/NKrJI1YlQYDuBpx6OnDD8ibSdNiUok6adsF38cAwmoeF33lfUFhqP DEDIX4SY5xfEWaTLI+VtyGLqEjMZdXx191fjAYoH7Gdr0AIP0U/dzG75vUd6ekcjwHSN LFDRe78TNx6C39L2U4NGG8SWluQN49DbySGzvRzievkodQaaf5rhX7AHaiZO3VbgB/+1 xi47qAz/h2TESk3NZJbdYUGDFi9UqdLkbdcL8WmFOPI4Ke4udDH/uXScjvVEz3y1jj8A +7gYpn04BBai63oojcWDgPR92glY5kbGWAQ7zr3XyFhDSHwRsi5ROBhqDS4Cu2PLGw9v 4aTQ== X-Forwarded-Encrypted: i=1; AJvYcCXrnxxwV9uzruGJULAMPI1UBQ07mbrh0UIykDVXjk05ANZB9jQ5YciVCqwzgIQpoMIAorU93btLDKA5W18=@vger.kernel.org X-Gm-Message-State: AOJu0YxiQaPDRh4kdVXHqvKEXFsOuP6I/DAP0FjlLRRHN583v46xb4hA we6FGSbcOk+fexOQNe+8KRqyJOu7ASrlw+K3L7HSN64kxZIK+OJB9TLKiNKNhhI= X-Gm-Gg: ASbGnct5Bsx6FzFTqwpdVqbBpVeTcdZeOHBMxcdaN3OJoWTYeDyL9yPQovW1bQDSL7O KzUG3Nd3ebd9h/pccNNefLdrWHCeaTQsv50gJeGvcHyg+dUAWuAsnqiPBAQdrb6F63hBB4aYWLw b48GO+mIN8jXTJwD3wzB2JuIVQE9qPK5ukvcrBVl3zZnOS0sWqwkFKbqj2Dlu6+o80xQK85OEY0 EaFeBSF9h/oNK2WJO8HZs2+dId1iVUeqPPxPClJKeONUBCXW2chZIJ09rD9pEF0SuRGlMIQrVue IDqiODp23+xCw3ow1kuwVVLjEA7FzQE5oenrNTPj9Q== X-Google-Smtp-Source: AGHT+IFi4Le7AzhhmTTIRr2FvD3j5KIgFxeLHXA7hAgbxEuSLsG1Fq72dIzoCsCCWJEHQANRW1hXVg== X-Received: by 2002:a17:90b:1d4f:b0:2ee:f22a:61dd with SMTP id 98e67ed59e1d1-309f56fa88cmr642762a91.32.1745516079316; Thu, 24 Apr 2025 10:34:39 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22db5100c4esm16270255ad.173.2025.04.24.10.34.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Apr 2025 10:34:38 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v6 07/14] riscv: misaligned: use on_each_cpu() for scalar misaligned access probing Date: Thu, 24 Apr 2025 19:31:54 +0200 Message-ID: <20250424173204.1948385-8-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250424173204.1948385-1-cleger@rivosinc.com> References: <20250424173204.1948385-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable schedule_on_each_cpu() was used without any good reason while documented as very slow. This call was in the boot path, so better use on_each_cpu() for scalar misaligned checking. Vector misaligned check still needs to use schedule_on_each_cpu() since it requires irqs to be enabled but that's less of a problem since this code is ran in a kthread. Add a comment to explicit that. Signed-off-by: Cl=C3=A9ment L=C3=A9ger Reviewed-by: Andrew Jones --- arch/riscv/kernel/traps_misaligned.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps= _misaligned.c index 6bb734abf9a4..e1fe39cc6709 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -610,6 +610,10 @@ bool __init check_vector_unaligned_access_emulated_all= _cpus(void) { int cpu; =20 + /* + * While being documented as very slow, schedule_on_each_cpu() is used si= nce + * kernel_vector_begin() expects irqs to be enabled or it will panic() + */ schedule_on_each_cpu(check_vector_unaligned_access_emulated); =20 for_each_online_cpu(cpu) @@ -630,7 +634,7 @@ bool __init check_vector_unaligned_access_emulated_all_= cpus(void) =20 static bool unaligned_ctl __read_mostly; =20 -static void check_unaligned_access_emulated(struct work_struct *work __alw= ays_unused) +static void check_unaligned_access_emulated(void *arg __always_unused) { int cpu =3D smp_processor_id(); long *mas_ptr =3D per_cpu_ptr(&misaligned_access_speed, cpu); @@ -671,7 +675,7 @@ bool __init check_unaligned_access_emulated_all_cpus(vo= id) * accesses emulated since tasks requesting such control can run on any * CPU. */ - schedule_on_each_cpu(check_unaligned_access_emulated); + on_each_cpu(check_unaligned_access_emulated, NULL, 1); =20 for_each_online_cpu(cpu) if (per_cpu(misaligned_access_speed, cpu) --=20 2.49.0 From nobody Fri Dec 19 18:47:18 2025 Received: from mail-pj1-f45.google.com (mail-pj1-f45.google.com [209.85.216.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EB49A280A57 for ; Thu, 24 Apr 2025 17:34:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516090; cv=none; b=TpdW0LWXXpEV6wwTtIj5y2NbxAHGxIy9+l+bJvlUuZ4++4AJJ5Jeu2JMA8+X3jMBeSEUV2c5+UNaxA95XwsYjw9rMuDaQygBF6HbXbs4P7fr4HLvYbAscTtwRe4YmWpKC5Utr3lVkVDRn+tT7uu+RtW/Q1zg/mkC7+p46T3Iezk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516090; c=relaxed/simple; bh=lWMV9a4rt/vMMWmMpqg6bQDMprZkvJOCqC9l111y6iA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Ujk5KOAeuJ+zfMD140SFtwr/NkHNOUWvtk3O3xJj43VK+BXNKyodc5ltKXWeuUQb5qieWnOR0n60U+nCDnEASXKTc6+IhgdCxFUAr0/Yd6hEmvrE5pQ1cdKY1zwT7T1ZR6ls6TpSEDcAG+mPXA0mUVBaJSjbz/ALFUq6JGwpN7I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=wHcmUuPW; arc=none smtp.client-ip=209.85.216.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="wHcmUuPW" Received: by mail-pj1-f45.google.com with SMTP id 98e67ed59e1d1-301cda78d48so1614086a91.0 for ; Thu, 24 Apr 2025 10:34:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1745516088; x=1746120888; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=we6/kXNuYG+zbvuEeQnBBO4wnOzYcP3bTDt7ONOTsDY=; b=wHcmUuPWGRmmHh+l/O3BtgPlyIa0Qjr5FnO4TpEPCijXV8zlFsvYrmUQOkfUNStBSY TtBsypfbrlP+r42ZEG2sCxiLhd2PIn1Y5uuqfzi23Cu+nnZLaqHH7dqboq8Bx0UQxNsj m6so04F4CzXWonpJQMY7RwEDdJFKcC5xPSLLpDyUa2+NusGVhm6NmLkNoLidI1+eXATW Sp38RAORh8miaCUlqTxuvQLUEWZyVTpqfkSzgIv1NT4i5AmcWbQmIPQXAVtko0UKrrqp pu5EAVXqaW93pxn+cf+RjtMDyPJm4ikhQ6Bw9mCTEL2fDjieF656gyiGIT2PmofeonnO l/AA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745516088; x=1746120888; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=we6/kXNuYG+zbvuEeQnBBO4wnOzYcP3bTDt7ONOTsDY=; b=s84RxviCqU6XzYw8AticL6Hbix1y7z0xVxLUsrpM5z1V09HzsV69iVvx78GOZJ+g8V m65f9mXtSiPBpKy7/vaSkBIwDGxhWDgB63/ud81EBtVhl1Ew14K+L7Dpdjy1qd7CQ7xB 6/4escTrGfH5aeuTfpLV8Dia86YQC0OQwQ2nLd46O6My46TrEHkLK6zfHwOT7z1gJuBQ UovdEgf6oEIub9+NnJ2z6vipZPhgE0rV4ByhAc1ePSEjz2moqc4DybByHSz9kYrVGuMU 9fVRFfyIE+aENgksgv8ToRnYMEqVQ3L8JYDnHFr9FW8WthJneO2uo3td5kP8HiKs1953 3xqA== X-Forwarded-Encrypted: i=1; AJvYcCV+SXT2mtRdWhp8zwd3Vwj5LYd7yx+vslnLX6bI/Nq50axOmvxVzESd2tN7siz5ksm4Jb8Yb6NxOsMPMLY=@vger.kernel.org X-Gm-Message-State: AOJu0YwlY5ZG2Yj4lxakmjS7Ex6PSvTkNZ2YcbuVwC+q3xtZhgUq4IeK B/MwlBLreuox7xONlM91YJ7HAgYMEdKUJdNi3FBbDS9q//QmmDW/r76pU1oCJns= X-Gm-Gg: ASbGncvXQErKsHO09GirA/tuQezMeO0JhEjrZcy2uIb+83GEP2Q9+nbx2R6wAdlOYbn dFudDM277JL8FnIPlk3HX+NRUPaRn+WClZSz7kiiwfu3GwnLANw3+FYAgKZ7NGtKcXs1GtDJc5s bekXE+tcXbKE5uLSU/YYiBe6zq1clB2GN+okc4Zp1ak/LQ6+9jH0kB6DDvDnZuXBv1IXeEeWMze C0yuf34QNML5FUcGaowKvRPTvIjVFNd0bM6DRO6x5AoSin9F8RwfOBggscATtWTyBU6q4ExpUke 03IxITSOdy4+dlQoQNazxCbyGIdfOhiylWfD3jykiw== X-Google-Smtp-Source: AGHT+IH/QMJyzwx6cGAw+XwgapY2Ztj34NBA/q3W1YmtI9wSx+YU+sJYTDmY372LJ5cZOrin5uzqng== X-Received: by 2002:a17:90b:5144:b0:309:f407:5ad1 with SMTP id 98e67ed59e1d1-309f5533ac7mr921807a91.14.1745516088230; Thu, 24 Apr 2025 10:34:48 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22db5100c4esm16270255ad.173.2025.04.24.10.34.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Apr 2025 10:34:47 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v6 08/14] riscv: misaligned: use correct CONFIG_ ifdef for misaligned_access_speed Date: Thu, 24 Apr 2025 19:31:55 +0200 Message-ID: <20250424173204.1948385-9-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250424173204.1948385-1-cleger@rivosinc.com> References: <20250424173204.1948385-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable misaligned_access_speed is defined under CONFIG_RISCV_SCALAR_MISALIGNED but was used under CONFIG_RISCV_PROBE_UNALIGNED_ACCESS. Fix that by using the correct config option. Signed-off-by: Cl=C3=A9ment L=C3=A9ger Reviewed-by: Andrew Jones --- arch/riscv/kernel/traps_misaligned.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps= _misaligned.c index e1fe39cc6709..e02e9b4b0fc5 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -362,7 +362,7 @@ static int handle_scalar_misaligned_load(struct pt_regs= *regs) =20 perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, addr); =20 -#ifdef CONFIG_RISCV_PROBE_UNALIGNED_ACCESS +#ifdef CONFIG_RISCV_SCALAR_MISALIGNED *this_cpu_ptr(&misaligned_access_speed) =3D RISCV_HWPROBE_MISALIGNED_SCAL= AR_EMULATED; #endif =20 --=20 2.49.0 From nobody Fri Dec 19 18:47:18 2025 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E4C5728F927 for ; Thu, 24 Apr 2025 17:34:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516099; cv=none; b=CdnIUyEgUD4uP7xBdZl0Q4n178IfxCb6LBrfai8fkvrSZHKwpUUUC7rU4/wMgcGxZojSJ4rCj7HQNyO7DYtqRSWRSSomYz/rPNM2Tb33Ex/ihfGU6XQ2yEPlPsxBuewIrXE1eL7dgsba+u9EE6ToQQvC6kkJmCmZm2hdGDYKYWg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516099; c=relaxed/simple; bh=i5EIv8p28s9SzqwrmxjoQqEJ1yfHwtC674KTF1pprHo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=f31m3hAeRDmON9lBkVErLSPFuHCA4dVJOBcuRPJlu8ZFVnVVwsJVnebYx16O5akcI5WLjyY53UX//YqwbTEws2g0bGrsxFS6gyZPQxR3zllWrYAiy6F5Lgnso5X9pFZ50Pv/iOC09PpHE8Ohebx0ZjdmeCHsAiMjDZNyflgBt+g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=1VZgrW3i; arc=none smtp.client-ip=209.85.214.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="1VZgrW3i" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-223f4c06e9fso12707075ad.1 for ; Thu, 24 Apr 2025 10:34:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1745516097; x=1746120897; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=d9V9rr9KXScjB209CCQhOyL2xY7TO+2YEqW9Zt14WVs=; b=1VZgrW3ieCTJyupdtrSzNRChjSrTt4vxjboJO3oYPeJCPtFhgXTsz0TdL/sckxV5Cw RAoNKuRJjYYlodoeNheGzH959ekAGgr4OS0V4z0DOvR4kUXK25OwlLy71LHSL5tJbFsS 8NT9wO+qyG/DpBM7Q+qwHKQhjSlKm+BUrxcqhRyte1b+6WmBBw/ohVnOmVlM28vdrVI3 W3lY377hDMPfCUUrU8YEzEFLPh+iETYA6DEednsSwelK8nO27b2xFxq5ddW3t/Dzo9z8 90PSicaUF1TZ8EgBeQ8Dt4B7fXd1CyIrc1HcUsLIM+eXII5k7UfeRbmqeEee3k46kZks btvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745516097; x=1746120897; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=d9V9rr9KXScjB209CCQhOyL2xY7TO+2YEqW9Zt14WVs=; b=XqnKIa//aTE/P1fNbc257cU+5tZtjL4sypqzsxVty6MwrzrUfSpfHInAu6b0wIlq5t 9LIQTAMm9MA/Cz8N8mBluvOGGnTrsnCb43rU49+yKWhdpMM/Kh+bLzmLc73ZBV5XnOdP zzOexocBOSjYyvdF/o8nh9Xt7fkuwhJ4x2++jt5XTQAOLssmTuq9MS/jXvzCsKZaDYW4 iJ6f/qkLXocOKpkqSNgrAaDYah28QTPN3bLqsfy428a8JHuXKdTCjhdKlAlEMeYDi/+n ilP473a/CqGPoqnJDVmBSKodLqPJk4X9owoWZhS6Qwvnf61WRt0r5MO6A0pne6C1nVag xqng== X-Forwarded-Encrypted: i=1; AJvYcCUedlL9EMt8RxiqGKJyCdgKSuMfFF6p9+gTeBa40FDBuHivOisw+L55ecQUgeGVg6ywen8ju5IYQldpPHo=@vger.kernel.org X-Gm-Message-State: AOJu0YwGAIZWZ4uoSXhma6ALyzJu5dP2c1Dp7MrRNSc+yR+nfHobjzkw Q9EjWf6b8CjEO6DGisNr4IvyJspjQz7XWPe3jf2DzXfxI4Pm348JtiGwWd5A97U= X-Gm-Gg: ASbGncvdHk6epwNK8kBcYqJBsdaQ8wLpDU2dkhHoncXxkscGvucVKJDAEh0m+WPnRri oaaaKwwKK32UAWgg1y+bB23TYMtVYXLLtuzmAsfbagZhzOps1/LjVC3lY/EHCJ+NC0qjQ3mTwUw M5N5tqTQxw2xQc6RWBLQ9yfPXBg0EXQKqF7F9kw0WwIpkbhwf/hOTZhLphvdFggx5v6cS/Dt0YC 0xkFMh5094uF+q1R/CfPcw3cugIPuG8i+pymhqlcMsvMeXTPYZBoljzUgSfAk7oLjKmv8RiTAQZ JkVeavxtZIU5qLrUAPD08/WFGqebVi1mdNYEJk/uvcgXmFJpCQmW X-Google-Smtp-Source: AGHT+IGAQrQw/KilPGjWcs2DXTqeGJNePUSlT3bxzRIay4dKTLJvYkpcmDxPXRgdgSxGOsYJ0V1TjQ== X-Received: by 2002:a17:903:14b:b0:223:607c:1d99 with SMTP id d9443c01a7336-22db46a3332mr45750265ad.0.1745516097242; Thu, 24 Apr 2025 10:34:57 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22db5100c4esm16270255ad.173.2025.04.24.10.34.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Apr 2025 10:34:56 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v6 09/14] riscv: misaligned: move emulated access uniformity check in a function Date: Thu, 24 Apr 2025 19:31:56 +0200 Message-ID: <20250424173204.1948385-10-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250424173204.1948385-1-cleger@rivosinc.com> References: <20250424173204.1948385-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Split the code that check for the uniformity of misaligned accesses performance on all cpus from check_unaligned_access_emulated_all_cpus() to its own function which will be used for delegation check. No functional changes intended. Signed-off-by: Cl=C3=A9ment L=C3=A9ger Reviewed-by: Andrew Jones --- arch/riscv/kernel/traps_misaligned.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps= _misaligned.c index e02e9b4b0fc5..410b2e0e0765 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -666,10 +666,20 @@ static int cpu_online_check_unaligned_access_emulated= (unsigned int cpu) return 0; } =20 -bool __init check_unaligned_access_emulated_all_cpus(void) +static bool all_cpus_unaligned_scalar_access_emulated(void) { int cpu; =20 + for_each_online_cpu(cpu) + if (per_cpu(misaligned_access_speed, cpu) !=3D + RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED) + return false; + + return true; +} + +bool __init check_unaligned_access_emulated_all_cpus(void) +{ /* * We can only support PR_UNALIGN controls if all CPUs have misaligned * accesses emulated since tasks requesting such control can run on any @@ -677,10 +687,8 @@ bool __init check_unaligned_access_emulated_all_cpus(v= oid) */ on_each_cpu(check_unaligned_access_emulated, NULL, 1); =20 - for_each_online_cpu(cpu) - if (per_cpu(misaligned_access_speed, cpu) - !=3D RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED) - return false; + if (!all_cpus_unaligned_scalar_access_emulated()) + return false; =20 unaligned_ctl =3D true; return true; --=20 2.49.0 From nobody Fri Dec 19 18:47:18 2025 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EF4C6288C90 for ; Thu, 24 Apr 2025 17:35:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516108; cv=none; b=Ro5Xm71isG0xPnUzpem9hdLPFuY19Q3ZVBRJKFS4wTxxRff9kKeRog5h7LlR9yfNNWpsvDTnXAxdNZoXWBI/2F8lMG3YAs94+GjIvQjz2PAGoofY9tQIT049NDWUJCeox4beo8JbHB9I1q41a6wgEaCdcb8i9kG9IdBuhKtkh/Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516108; c=relaxed/simple; bh=dB1Aqp9jw5AsBzdrqtoxtIcKj/5RdGr1pHa5QHly7Vk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=MiI7C4CviVeoNkPtAzUWWll8Mos8ZHDCahjQxA7qRY3Jvvmxbu5H6XhCT8C/RBTvJia2cJJQ3b2zsQkUw/Smo8HJVszg2U10oOAJk+HFAfj6p1BiZknUk1RnlxISm0bUYT6vKLQKLEPa47TLeZE5KtWnqeFHHWAjjKM0JnXWFVo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=VWMZl22y; arc=none smtp.client-ip=209.85.214.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="VWMZl22y" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-22928d629faso14414835ad.3 for ; Thu, 24 Apr 2025 10:35:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1745516106; x=1746120906; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PNDdi3bVRW98tMUmMa3iEbBTwqmvke8nqAL/FJxM67I=; b=VWMZl22yAGOgUd1DSj3FivEtJcHpvktTZq1d8gjDDi85aaMEuKeFdGe3yab70wlMuA xeEswMQjfHvl2PhvNrRc6vJ9nZ/ej3M3Qsb2hFxMDsjmrFhFqRXSj+huojn5MbbVqLzB YwGdC1Wb0k0XCHkijUEZjdcxQkptmT6MygU7VuFf5mS+U6UIkjO9z7+gRXeIQMh0pIyq GOh1Sh/lpDfF8YMEn7KBp2hAglT5IG+kS0YpBtdlfhXbOLFgO/bFDMrrxBT0uo3pJBtm ZAON01BhkqCERLz4soRDm6iJhwgjjoGUfVtXUbV5Ug3joh0bEVFgeoaLm2QwY6hImik7 9MyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745516106; x=1746120906; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PNDdi3bVRW98tMUmMa3iEbBTwqmvke8nqAL/FJxM67I=; b=YVsD2/MykXJQi+otNpBicTZyuLCNLK9wzx2yGi/WldHPzaVXolvNWlyIDoLaRtzSga kU1MSq6fzKk9B1tuPtasX67rSkMxPVcbx6dhfUSQMfIJHfTtvKuycTL5BF7ZMHlbgrN5 8sOb/B5PrQlwpg+Rm2+WRJpq+7Qj9mYV9p+0M8ahYYSbHHcvFf2M9xUThFEm9xWEX98Y Dz3mxyUCCTpfa0RV3M5od0CtfDKWA8tatkmJbA8/4g8GZCbXnVjLNn3pqYGdmG/nNM/5 YgE1lIEnETLysWa9bAFt2g5EVJiOOuwBrGN3UcZWef9jrziYIAXszxus7kjOMP8ega2t laeQ== X-Forwarded-Encrypted: i=1; AJvYcCUq4+jzXlf3n2sBCLh/EBE2mzxlrSSiozRaH80+w3bCYJq5/stXAkTTWGnn5Dzs7/GZORz6etXGJ9ewA7U=@vger.kernel.org X-Gm-Message-State: AOJu0YwITifeVTS7mkDdhE31dt1RK3riuC8T3ox5Q1X9Vaf/txO+5wG2 Gyd3mWIAEHMLEzUGrc+cImVyOLMXS5ZR1vi+dIFTKSCYv8rHGrAc67tNioJt6vU= X-Gm-Gg: ASbGncvYrpP/zMqH5CidH3kVtUqd4xpRHXfUJhob7TDKMbC3Nb4ty/vkLdC1wrSe/5J FtIAaBxXKWtVGeIYMIXb39ILHECh9axm9CWwBs0jfiDjYyhyoagXwIROEAxNRqmoBqD+OvXKYP5 Zbq2qj40ctcZCtUfTCq6KMo1ZSuspQHDxBsFBeF/vzGgbxiiAbY5EQ5Y1D46sWZNZD62OauUmP8 9KEuQW0Yomqe8twQt2TH6WKuGjjRqAphS+O/xeon7nplbcsEEf3Ua/YDc96xFJOWjZ7zX1mXJJ8 1fzkjjUH6GQEPPHR/oi6PzA1robkgwTBXRWX3vMyWVVfGokjyI5F X-Google-Smtp-Source: AGHT+IHgoxOdSwMCR3g5IpOqeK6qLMj0uu2JqSy/m/IXPMpoioHfXGrM09vCJDVNOdL1X/GrKu4d3A== X-Received: by 2002:a17:902:e74b:b0:224:160d:3f54 with SMTP id d9443c01a7336-22dbd469727mr4368305ad.31.1745516106262; Thu, 24 Apr 2025 10:35:06 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22db5100c4esm16270255ad.173.2025.04.24.10.34.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Apr 2025 10:35:05 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v6 10/14] riscv: misaligned: add a function to check misalign trap delegability Date: Thu, 24 Apr 2025 19:31:57 +0200 Message-ID: <20250424173204.1948385-11-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250424173204.1948385-1-cleger@rivosinc.com> References: <20250424173204.1948385-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Checking for the delegability of the misaligned access trap is needed for the KVM FWFT extension implementation. Add a function to get the delegability of the misaligned trap exception. Signed-off-by: Cl=C3=A9ment L=C3=A9ger Reviewed-by: Andrew Jones --- arch/riscv/include/asm/cpufeature.h | 5 +++++ arch/riscv/kernel/traps_misaligned.c | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/arch/riscv/include/asm/cpufeature.h b/arch/riscv/include/asm/c= pufeature.h index dbe5970d4fe6..3a87f612035c 100644 --- a/arch/riscv/include/asm/cpufeature.h +++ b/arch/riscv/include/asm/cpufeature.h @@ -72,12 +72,17 @@ int cpu_online_unaligned_access_init(unsigned int cpu); #if defined(CONFIG_RISCV_SCALAR_MISALIGNED) void unaligned_emulation_finish(void); bool unaligned_ctl_available(void); +bool misaligned_traps_can_delegate(void); DECLARE_PER_CPU(long, misaligned_access_speed); #else static inline bool unaligned_ctl_available(void) { return false; } +static inline bool misaligned_traps_can_delegate(void) +{ + return false; +} #endif =20 bool __init check_vector_unaligned_access_emulated_all_cpus(void); diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps= _misaligned.c index 410b2e0e0765..1d3be999220f 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -709,10 +709,10 @@ static int cpu_online_check_unaligned_access_emulated= (unsigned int cpu) } #endif =20 -#ifdef CONFIG_RISCV_SBI - static bool misaligned_traps_delegated; =20 +#ifdef CONFIG_RISCV_SBI + static int cpu_online_sbi_unaligned_setup(unsigned int cpu) { if (sbi_fwft_set(SBI_FWFT_MISALIGNED_EXC_DELEG, 1, 0) && @@ -748,6 +748,7 @@ static int cpu_online_sbi_unaligned_setup(unsigned int = cpu __always_unused) { return 0; } + #endif =20 int cpu_online_unaligned_access_init(unsigned int cpu) @@ -760,3 +761,15 @@ int cpu_online_unaligned_access_init(unsigned int cpu) =20 return cpu_online_check_unaligned_access_emulated(cpu); } + +bool misaligned_traps_can_delegate(void) +{ + /* + * Either we successfully requested misaligned traps delegation for all + * CPUS or the SBI does not implemented FWFT extension but delegated the + * exception by default. + */ + return misaligned_traps_delegated || + all_cpus_unaligned_scalar_access_emulated(); +} +EXPORT_SYMBOL_GPL(misaligned_traps_can_delegate); --=20 2.49.0 From nobody Fri Dec 19 18:47:18 2025 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3339528F921 for ; Thu, 24 Apr 2025 17:35:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516118; cv=none; b=PeNeUYrVC0kuH3T8pJod1NUHgZezVvlfjuae0tBHZCijqGRbo/9ZjZpGhWCIe8ft9wSQldrKxY7J16QhCVLLRv/wCaoRit2gFt9Ntt+dr7Q41ZewjliHdOM/qVSuD8laORX6PoA4yDmZQN0ZLFcT2dtg//Y+4XVLoX17dB+uqSo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516118; c=relaxed/simple; bh=NXa9HEO5RKY1D2k9IbxsxMtK9lSmU2PJg0VdH4XU874=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oeTePA7EblQT7m2apTq/uAUmFmnVg5Ure8OqjaAmAmd1D+vG1PAGreF+uXCPf/qyxIbbiUT0P+yj/c1sJRrl5yqF/hXmmoYlv4DXkJi64Hfrfg5It3lpfx8HhmnXXoGliboHm0NDFDJiZiuRaUwLfOCKX57SbY4Q5gec83yCzi0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=Bnm+M5Jw; arc=none smtp.client-ip=209.85.214.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="Bnm+M5Jw" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-227a8cdd241so18116795ad.3 for ; Thu, 24 Apr 2025 10:35:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1745516115; x=1746120915; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/KHThPTp9HBECdAqxs4JY6wN99GqOifsmOPr7rqjaok=; b=Bnm+M5Jw3DAc3lwaZErrhiqa5TB0lLR8Ik327yAAsdeOP28hQnBQ4LKxfNYm1hP7SX UpWMjhrwgKf7Rk3qk6luqq+Dp0Z9b0aDLBRteFGku9gBNRlXnpWft7QxcLT1RKX2ZT/A 97Wuj2dp1oWPftm75fnE9wOoRZlr/AWtTruJOVynhSHaFtGK7U/MaL5qHOvuN3X8rX6T 6q108FZvYqhRlWUaIvtEvLzoL19DkrRTkcazg2a3l59IScl0bHUnNorCvfy7j1mkLzPH j+ZVbXoKBp1zQsf4EQmCWNEIk0CE/6vmT0JvlAsyHGpF880XZJZlq5bqM1T2rduGoKNQ pGIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745516115; x=1746120915; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/KHThPTp9HBECdAqxs4JY6wN99GqOifsmOPr7rqjaok=; b=LuGg72DQnc/sleCn9s6wUVK8Qs96L8DPIRmhMQMFvv+DrpJM3oA9GzgNF5OzXzbks7 V/atBPFp1Ty4AMbAFLhzAewQKjlKstWiwvBa/OyIMdt41TtBv9/Cd6yPnCfVIPLobU8v 3Gb2bDEkt5XoGYrKQMdvOUuWs3z3sLpdGuYZ7eK52mJ75EthmxMSFYf3AjdrLJJkJb5W j7MOqpS7pxhe0yCTRnydiE1CfTpOiUy6MN1We0qek2T6SGwqhHvpPEIaOJDLzXHnYu4I xWXxRPmVGFZtL7+N7pXFixxKj9YS7ESajVfJKCfTagdqNYCHT5nUt+9Xb4VyM3vTcud0 mpgw== X-Forwarded-Encrypted: i=1; AJvYcCVnWUl8foylXRRXaRf7e6WPTsvospUctSgMHcYFqNIfMtPDEw+PHbMuqDgv53TAEhnH8siDii4jfBVTXYo=@vger.kernel.org X-Gm-Message-State: AOJu0YxLWfvslw+vOpmXR090I+q0p2WAnkKO7mvaCiC2qdmA7FewZh4S KPk88vNb3q77LVTkdkGIC7K7hDcfkTGwYpY0H4SZbrr4qJoUnW00oOdQz877FDc= X-Gm-Gg: ASbGnctZ9pjso1iWw7d6hcBbZQsgVujcaK/vM1Z2VO0i5y5go1JOn8d0N3PohsWFeqX 38KomTNkHySJhRMF87JFV2aIboN4ThF3yeeBHRUVAYaua8FOIvMhjEMiXcAUa1JLtj9c3QwqcN5 LN4iafOnEufWcx7/hfp6FaGrer9sGi6Ig5cLX6R2G/RPtR+tcLssWtuJ4WZ2YSJln4VPVNS9YZh aiFHGDiAfIruMt4/QyROx44ysuydhto16tEGMr5q47hvLvGmHrRc89TAjY27UDBh4U1hOLxU7RG rjVPERsJcSYXbU6eDZ68YxMxaDNJ3ZNKUepEiKXUHg== X-Google-Smtp-Source: AGHT+IHk7ifeDzXStWRadJ48a4Rbu1GdvPFHAeWe+THKzkAyDqtofKTCbTRnNG+8lnQC3H+eIm6QNA== X-Received: by 2002:a17:902:d489:b0:220:ff3f:6cba with SMTP id d9443c01a7336-22db3d71b30mr52646935ad.38.1745516115638; Thu, 24 Apr 2025 10:35:15 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22db5100c4esm16270255ad.173.2025.04.24.10.35.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Apr 2025 10:35:14 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v6 11/14] RISC-V: KVM: add SBI extension init()/deinit() functions Date: Thu, 24 Apr 2025 19:31:58 +0200 Message-ID: <20250424173204.1948385-12-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250424173204.1948385-1-cleger@rivosinc.com> References: <20250424173204.1948385-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The FWFT SBI extension will need to dynamically allocate memory and do init time specific initialization. Add an init/deinit callbacks that allows to do so. Signed-off-by: Cl=C3=A9ment L=C3=A9ger Reviewed-by: Andrew Jones Reviewed-by: Atish Patra --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 9 +++++++++ arch/riscv/kvm/vcpu.c | 2 ++ arch/riscv/kvm/vcpu_sbi.c | 26 ++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm= /kvm_vcpu_sbi.h index 4ed6203cdd30..bcb90757b149 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -49,6 +49,14 @@ struct kvm_vcpu_sbi_extension { =20 /* Extension specific probe function */ unsigned long (*probe)(struct kvm_vcpu *vcpu); + + /* + * Init/deinit function called once during VCPU init/destroy. These + * might be use if the SBI extensions need to allocate or do specific + * init time only configuration. + */ + int (*init)(struct kvm_vcpu *vcpu); + void (*deinit)(struct kvm_vcpu *vcpu); }; =20 void kvm_riscv_vcpu_sbi_forward(struct kvm_vcpu *vcpu, struct kvm_run *run= ); @@ -69,6 +77,7 @@ const struct kvm_vcpu_sbi_extension *kvm_vcpu_sbi_find_ex= t( bool riscv_vcpu_supports_sbi_ext(struct kvm_vcpu *vcpu, int idx); int kvm_riscv_vcpu_sbi_ecall(struct kvm_vcpu *vcpu, struct kvm_run *run); void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu); +void kvm_riscv_vcpu_sbi_deinit(struct kvm_vcpu *vcpu); =20 int kvm_riscv_vcpu_get_reg_sbi_sta(struct kvm_vcpu *vcpu, unsigned long re= g_num, unsigned long *reg_val); diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index 60d684c76c58..877bcc85c067 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -185,6 +185,8 @@ void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu) =20 void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu) { + kvm_riscv_vcpu_sbi_deinit(vcpu); + /* Cleanup VCPU AIA context */ kvm_riscv_vcpu_aia_deinit(vcpu); =20 diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index d1c83a77735e..3139f171c20f 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -508,5 +508,31 @@ void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu) scontext->ext_status[idx] =3D ext->default_disabled ? KVM_RISCV_SBI_EXT_STATUS_DISABLED : KVM_RISCV_SBI_EXT_STATUS_ENABLED; + + if (ext->init && ext->init(vcpu) !=3D 0) + scontext->ext_status[idx] =3D KVM_RISCV_SBI_EXT_STATUS_UNAVAILABLE; + } +} + +void kvm_riscv_vcpu_sbi_deinit(struct kvm_vcpu *vcpu) +{ + struct kvm_vcpu_sbi_context *scontext =3D &vcpu->arch.sbi_context; + const struct kvm_riscv_sbi_extension_entry *entry; + const struct kvm_vcpu_sbi_extension *ext; + int idx, i; + + for (i =3D 0; i < ARRAY_SIZE(sbi_ext); i++) { + entry =3D &sbi_ext[i]; + ext =3D entry->ext_ptr; + idx =3D entry->ext_idx; + + if (idx < 0 || idx >=3D ARRAY_SIZE(scontext->ext_status)) + continue; + + if (scontext->ext_status[idx] =3D=3D KVM_RISCV_SBI_EXT_STATUS_UNAVAILABL= E || + !ext->deinit) + continue; + + ext->deinit(vcpu); } } --=20 2.49.0 From nobody Fri Dec 19 18:47:18 2025 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EE4E628F921 for ; Thu, 24 Apr 2025 17:35:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516126; cv=none; b=rhIHCw+zO4MDxOsflazcQHabdPk8kGC1Gop5P75nhfhMcWW0dZmk/irqm3uN0F0RgcUcpsd2lNzPKgZKKRjo39diqIS1jQKSJZilDmQ3Q8hIY2kli8rAC/8jtkbEaEhO2zZITsRbT6N2ieyRZhacm7PePhOt37FMKfKUazyi6kI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516126; c=relaxed/simple; bh=H5I3SSDmXjwRUib3TL18xTg/rVQsrKqfiODBF/E5v6c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ezxbvFwf7wC1oLUrBjtQjni7bgV+kWn69BHfk55DGNQZxdOEKYqznP/WA4GX640yQhrM+AoZOC6vqM0RwYBIs6ow8u9D5M7iH18oU+AaTbQIeL2rEWQFMQhuL8v9cXl0xqFBEoqr+SRZCDWDp/vnRPlmp2k8n0s/YDxLV9MOAvE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=piLuddr3; arc=none smtp.client-ip=209.85.214.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="piLuddr3" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-227c7e57da2so11771735ad.0 for ; Thu, 24 Apr 2025 10:35:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1745516124; x=1746120924; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=RIWI5J13lSlmUc75M0Yyv1OmkFoJoZE6o7hXZ4HO9lg=; b=piLuddr39WucrnUpSovPPxF106ssOv8MhhhKgyW4GKp+1DpjBxJe834YHMl8YqbX4W rpiRVxGC1wte+vgJUO+vacRFwnEjU1guUPYO2VJyV/g1LjcS7eELlRaB5apVwpexO5as I7pAit2WbiAq2Ef+3GGH8x1LlGKJhnR83nBwYDn364l/MFPeAfhI2jbHZI7cb9GsuDVu OMsA9Ia1fjm5yyV1aabmYxR4CCxYczeoLwdzgw1ufqQTMymW3lXjFDqM/vOAIhaTIOHh ZEH9xhIdmfIVPx2D8mpTBaN5vmIi2W6dO9tdeFg6OeCTsbikmnCSg1bww0JgyUtil9v2 czwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745516124; x=1746120924; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RIWI5J13lSlmUc75M0Yyv1OmkFoJoZE6o7hXZ4HO9lg=; b=ZGiPMwPrye0xUrFC6eM2wcaDg0Pc3muQbLnmF75VrlexWCcMkZJU9PcjTjmLTwkkkU 840MKGjwBm1BASy5AI85SE3loLWfZbBsMUTx+jM2N8cKK9a7wmc2qNvvoPCky9nBRQ/M 35KI9FSWgkrXzYU25DVOEbUh8VCfdMuRTFdlA34702mN4v86yHkL1w8eOLy4YahwmgcD CFRhrxDX+aA8H41yRqvo6HXgFOWt+LtEO4Kuh3Ge1ParJH7+Pa+6sPJaAMYRPwlkVwpw gg5Ncga0mAT4N8cwBmXgfrzWsMqD4IThuqhTnRscX5At7Pge4RmOvFBXHO4k9i1DytqS bpZA== X-Forwarded-Encrypted: i=1; AJvYcCX7hh81JaRmh2FjFAwJAEmO75KFuwwFKV/wZiPIdzzG3kYXoib+fGrEYS4MrX1ZGuCyATUXabnqhPbeO+g=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9wapdWAacDWRj3lsikcQkUGPdeta2rODHrvv6s96ZNJjcdEGw gk1OMMXmj9nEu+WhQxEwT6ZxKYulvjUur35Fb5Rtx+XbCmLov+dXAxY9yjlJFMk= X-Gm-Gg: ASbGncv3so5uFOEUecWRH6jpgiiODkuc2ZHCN6yEeiAnhgzqQvcXninlod9VD/5hxH/ 8goUhEtb7C/oSdjhzCx3gXKJOd9bKBX/rkg8m+Fyxfassmjfvm3l5mhHs4hCbFt4wiAd/98oNAx L9h2qtecigeOx6f/+xrkLT/UNxLZ0tuL9V+B+IDl4gE3bKszPpGBgIq+Of22Hha5MocY+SCql95 d3Uwxyg0TW5+KRnDFwqqq5O5gWrz3T1jQiJPZuRRf+9cRST/47eJ5Jj9IoELJNJfrG2NyORMHlM uT5h8MKJVeCjiEiAQfxha/EDCJV82uvNpDOFXdqFUg== X-Google-Smtp-Source: AGHT+IEMgeNDdBBhoNSxcm3znhBhdeT3XXPb2Z1/mSRltyTQzf0eyhuWj16KlTi3Qs15Rz0vFa6sUg== X-Received: by 2002:a17:903:3203:b0:216:794f:6d7d with SMTP id d9443c01a7336-22dbd46f99fmr4326145ad.48.1745516124524; Thu, 24 Apr 2025 10:35:24 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22db5100c4esm16270255ad.173.2025.04.24.10.35.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Apr 2025 10:35:23 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v6 12/14] RISC-V: KVM: add SBI extension reset callback Date: Thu, 24 Apr 2025 19:31:59 +0200 Message-ID: <20250424173204.1948385-13-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250424173204.1948385-1-cleger@rivosinc.com> References: <20250424173204.1948385-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Currently, only the STA extension needed a reset function but that's going to be the case for FWFT as well. Add a reset callback that can be implemented by SBI extensions. Signed-off-by: Cl=C3=A9ment L=C3=A9ger Reviewed-by: Andrew Jones Reviewed-by: Atish Patra --- arch/riscv/include/asm/kvm_host.h | 1 - arch/riscv/include/asm/kvm_vcpu_sbi.h | 2 ++ arch/riscv/kvm/vcpu.c | 2 +- arch/riscv/kvm/vcpu_sbi.c | 24 ++++++++++++++++++++++++ arch/riscv/kvm/vcpu_sbi_sta.c | 3 ++- 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/arch/riscv/include/asm/kvm_host.h b/arch/riscv/include/asm/kvm= _host.h index 0e9c2fab6378..4fa02e082142 100644 --- a/arch/riscv/include/asm/kvm_host.h +++ b/arch/riscv/include/asm/kvm_host.h @@ -407,7 +407,6 @@ void __kvm_riscv_vcpu_power_on(struct kvm_vcpu *vcpu); void kvm_riscv_vcpu_power_on(struct kvm_vcpu *vcpu); bool kvm_riscv_vcpu_stopped(struct kvm_vcpu *vcpu); =20 -void kvm_riscv_vcpu_sbi_sta_reset(struct kvm_vcpu *vcpu); void kvm_riscv_vcpu_record_steal_time(struct kvm_vcpu *vcpu); =20 #endif /* __RISCV_KVM_HOST_H__ */ diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm= /kvm_vcpu_sbi.h index bcb90757b149..cb68b3a57c8f 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -57,6 +57,7 @@ struct kvm_vcpu_sbi_extension { */ int (*init)(struct kvm_vcpu *vcpu); void (*deinit)(struct kvm_vcpu *vcpu); + void (*reset)(struct kvm_vcpu *vcpu); }; =20 void kvm_riscv_vcpu_sbi_forward(struct kvm_vcpu *vcpu, struct kvm_run *run= ); @@ -78,6 +79,7 @@ bool riscv_vcpu_supports_sbi_ext(struct kvm_vcpu *vcpu, i= nt idx); int kvm_riscv_vcpu_sbi_ecall(struct kvm_vcpu *vcpu, struct kvm_run *run); void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu); void kvm_riscv_vcpu_sbi_deinit(struct kvm_vcpu *vcpu); +void kvm_riscv_vcpu_sbi_reset(struct kvm_vcpu *vcpu); =20 int kvm_riscv_vcpu_get_reg_sbi_sta(struct kvm_vcpu *vcpu, unsigned long re= g_num, unsigned long *reg_val); diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index 877bcc85c067..542747e2c7f5 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -94,7 +94,7 @@ static void kvm_riscv_reset_vcpu(struct kvm_vcpu *vcpu) vcpu->arch.hfence_tail =3D 0; memset(vcpu->arch.hfence_queue, 0, sizeof(vcpu->arch.hfence_queue)); =20 - kvm_riscv_vcpu_sbi_sta_reset(vcpu); + kvm_riscv_vcpu_sbi_reset(vcpu); =20 /* Reset the guest CSRs for hotplug usecase */ if (loaded) diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index 3139f171c20f..50be079b5528 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -536,3 +536,27 @@ void kvm_riscv_vcpu_sbi_deinit(struct kvm_vcpu *vcpu) ext->deinit(vcpu); } } + +void kvm_riscv_vcpu_sbi_reset(struct kvm_vcpu *vcpu) +{ + struct kvm_vcpu_sbi_context *scontext =3D &vcpu->arch.sbi_context; + const struct kvm_riscv_sbi_extension_entry *entry; + const struct kvm_vcpu_sbi_extension *ext; + int idx, i; + + for (i =3D 0; i < ARRAY_SIZE(sbi_ext); i++) { + entry =3D &sbi_ext[i]; + ext =3D entry->ext_ptr; + idx =3D entry->ext_idx; + + if (idx < 0 || idx >=3D ARRAY_SIZE(scontext->ext_status)) + continue; + + if (scontext->ext_status[idx] !=3D KVM_RISCV_SBI_EXT_STATUS_ENABLED || + !ext->reset) + continue; + + ext->reset(vcpu); + } +} + diff --git a/arch/riscv/kvm/vcpu_sbi_sta.c b/arch/riscv/kvm/vcpu_sbi_sta.c index 5f35427114c1..cc6cb7c8f0e4 100644 --- a/arch/riscv/kvm/vcpu_sbi_sta.c +++ b/arch/riscv/kvm/vcpu_sbi_sta.c @@ -16,7 +16,7 @@ #include #include =20 -void kvm_riscv_vcpu_sbi_sta_reset(struct kvm_vcpu *vcpu) +static void kvm_riscv_vcpu_sbi_sta_reset(struct kvm_vcpu *vcpu) { vcpu->arch.sta.shmem =3D INVALID_GPA; vcpu->arch.sta.last_steal =3D 0; @@ -156,6 +156,7 @@ const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_sta = =3D { .extid_end =3D SBI_EXT_STA, .handler =3D kvm_sbi_ext_sta_handler, .probe =3D kvm_sbi_ext_sta_probe, + .reset =3D kvm_riscv_vcpu_sbi_sta_reset, }; =20 int kvm_riscv_vcpu_get_reg_sbi_sta(struct kvm_vcpu *vcpu, --=20 2.49.0 From nobody Fri Dec 19 18:47:18 2025 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 42EEC2900A8 for ; Thu, 24 Apr 2025 17:35:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516136; cv=none; b=N8pgBDkn44ECB0N8v/crq9yjoY7jfI7CgkoGJoKAQvr2rSGaPaQOiABb2PY2dOs2Hzr56oKBEddkCiFZ7Qu6Jj4p80EwcLX/Xhh8HUYnSMMhGIwg+pYhTW5I1xzMR3fXJy53SF0UmNsE2XqQKs4jOy3Wsmmx4h/2T1EqFRP21qY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516136; c=relaxed/simple; bh=1C7Djni+0IZk+aDQP5LiExVKCiwH2agzUNaeaAf13I4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=H6uq+8NcPOS7+azDMgqTD/wdAGj+IzhW/FP9Ls3dcbWfyyTxlYArb8TihgTz40yiIzoX0bjOadIKr0PE2Ql3hZo9eOB6ByUc9wC6CQKbt0mMUpUYH+RsyOf4lhOIOwvOA1GLMDCXyZ1hjVQPrPqt06ch6h53lLmfOQlpgdGiVCM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=0OuXm3eq; arc=none smtp.client-ip=209.85.214.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="0OuXm3eq" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-2260c91576aso11745025ad.3 for ; Thu, 24 Apr 2025 10:35:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1745516133; x=1746120933; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pIsv+titG4x0ovEMDknM6ko4IiiOufEK1Ymj080VPx4=; b=0OuXm3eq5dRrmJC9snSoI50FFQZhAzXlr2ejaAT5uESgat/91ksVjmo48TFG4pcvKM 5Co3m+5Mz3234mcVxUOf/NNVzDe/SbmAuGyi0dCiB3oJ9SiP5qZhSDvWf9gz6mQfbR57 G1wMoCqzmDuNtVYRhLw7pQhSFWubBPy38f5+PkFyVO7RXzC+Fbx1mcEmSD3LqnzzV/kt AnWoomz7sDsHAMcZra056SNJjtjPoBQEN1FEErY4ANifK464pMTv8byOtSPiyE4DXSXg guyR1i/U6T118wdUHWx1ZvQoEncfrHMxqX5EduowiA9F6yoAJrcWZ2wp/zzSzIg09diH psEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745516133; x=1746120933; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pIsv+titG4x0ovEMDknM6ko4IiiOufEK1Ymj080VPx4=; b=VJOyMYe38LhMkR8om7zn88FoC3D00JwDBOEAGFYdWwoK/5TTsh1GHSHmazLKAy1Jxs I7DrCBL3jZWB4Z3Zm40JqYYayc3HoDPHQLZzjs3vN/oxeyAjwb64sq6NrkpnQ4Qj8FjQ Sr+HoDhAD/E3n63FhdJ/on+hQitRfsBDM3KnNY3RRpiF+AKsp8D4/kTJebOThMehA9ag mQfkjma1gkvYxNdd4yQ677omfYMeMhX1Z/bGoF4UnbXooFOhiKLRT3JJeBrXe8G0syS7 8DdvJ8eiE3lfopaHLsUDLupGLykgpy5kZFfvmqcnMun64pQBUq8UxLoUx4TX5AtYLy76 svew== X-Forwarded-Encrypted: i=1; AJvYcCX/rkOrr/ZcKU2CJ7JcvUTDHBQHguxRm3Rjtb8D6nEWOpNl120yiMIc7aGqZ6WnNszKmjMEN+pym2imScc=@vger.kernel.org X-Gm-Message-State: AOJu0YwPc5zoHVuRUTc4c80JSyr1IAl2ZgGri8BW6O23q5wdD+Zlx1Dc tb9sbvyrTZNgd1w+bhUevkxiaU4gIZaQqskMJblPBaFe9FxTaAf6++3bU7swVz5ZiHbrK41G4Ja tOGg= X-Gm-Gg: ASbGnct/fELDv7ajipZm1woe7HmRaZXrYWpmKzPKSteATxmaNHJqjZSarr61g/7p2WC X1soy3m1QN2plZ/O6YYVv/j/ZMDB5cgd7d0cCtPUYqGEqs0G37BYhqPdH6tVjT1ImOVKqDpvEQs BfBG5QERLsc6/nRqjiwTrYDF99qAzJIB4/yXtEoIWKXkBSe/6mSiM6mPLKmmLbZqqsQR+6hOPs9 wRxl/V9MflxUH5sScJIiHHsoKPJSo7++ZO2tq1AvaFJX2QkQUlQK9kUuvZ4H7QyplP5tiFGaWig rNncNpw4wZ/hqHpj4XKwdU5qudAhRYFl3aixTgg2Mg== X-Google-Smtp-Source: AGHT+IG9MFmvlCC44cS0jYEh46W0kXDkUBACm39Pu4nHZgkwqd3/vf/EeN8PbrVqTWMOQVYaPZCP6g== X-Received: by 2002:a17:903:234e:b0:223:67ac:8929 with SMTP id d9443c01a7336-22dbd35407bmr5607675ad.0.1745516133553; Thu, 24 Apr 2025 10:35:33 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22db5100c4esm16270255ad.173.2025.04.24.10.35.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Apr 2025 10:35:32 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v6 13/14] RISC-V: KVM: add support for FWFT SBI extension Date: Thu, 24 Apr 2025 19:32:00 +0200 Message-ID: <20250424173204.1948385-14-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250424173204.1948385-1-cleger@rivosinc.com> References: <20250424173204.1948385-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add basic infrastructure to support the FWFT extension in KVM. Signed-off-by: Cl=C3=A9ment L=C3=A9ger Reviewed-by: Andrew Jones Reviewed-by: Atish Patra --- arch/riscv/include/asm/kvm_host.h | 4 + arch/riscv/include/asm/kvm_vcpu_sbi.h | 1 + arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h | 29 +++ arch/riscv/include/uapi/asm/kvm.h | 1 + arch/riscv/kvm/Makefile | 1 + arch/riscv/kvm/vcpu_sbi.c | 4 + arch/riscv/kvm/vcpu_sbi_fwft.c | 216 +++++++++++++++++++++ 7 files changed, 256 insertions(+) create mode 100644 arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h create mode 100644 arch/riscv/kvm/vcpu_sbi_fwft.c diff --git a/arch/riscv/include/asm/kvm_host.h b/arch/riscv/include/asm/kvm= _host.h index 4fa02e082142..c3f880763b9a 100644 --- a/arch/riscv/include/asm/kvm_host.h +++ b/arch/riscv/include/asm/kvm_host.h @@ -19,6 +19,7 @@ #include #include #include +#include #include #include =20 @@ -281,6 +282,9 @@ struct kvm_vcpu_arch { /* Performance monitoring context */ struct kvm_pmu pmu_context; =20 + /* Firmware feature SBI extension context */ + struct kvm_sbi_fwft fwft_context; + /* 'static' configurations which are set only once */ struct kvm_vcpu_config cfg; =20 diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm= /kvm_vcpu_sbi.h index cb68b3a57c8f..ffd03fed0c06 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -98,6 +98,7 @@ extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_h= sm; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_dbcn; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_susp; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_sta; +extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_fwft; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_experimental; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_vendor; =20 diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h b/arch/riscv/includ= e/asm/kvm_vcpu_sbi_fwft.h new file mode 100644 index 000000000000..9ba841355758 --- /dev/null +++ b/arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Cl=C3=A9ment L=C3=A9ger + */ + +#ifndef __KVM_VCPU_RISCV_FWFT_H +#define __KVM_VCPU_RISCV_FWFT_H + +#include + +struct kvm_sbi_fwft_feature; + +struct kvm_sbi_fwft_config { + const struct kvm_sbi_fwft_feature *feature; + bool supported; + unsigned long flags; +}; + +/* FWFT data structure per vcpu */ +struct kvm_sbi_fwft { + struct kvm_sbi_fwft_config *configs; +}; + +#define vcpu_to_fwft(vcpu) (&(vcpu)->arch.fwft_context) + +#endif /* !__KVM_VCPU_RISCV_FWFT_H */ diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/as= m/kvm.h index 5f59fd226cc5..5ba77a3d9f6e 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -204,6 +204,7 @@ enum KVM_RISCV_SBI_EXT_ID { KVM_RISCV_SBI_EXT_DBCN, KVM_RISCV_SBI_EXT_STA, KVM_RISCV_SBI_EXT_SUSP, + KVM_RISCV_SBI_EXT_FWFT, KVM_RISCV_SBI_EXT_MAX, }; =20 diff --git a/arch/riscv/kvm/Makefile b/arch/riscv/kvm/Makefile index 4e0bba91d284..06e2d52a9b88 100644 --- a/arch/riscv/kvm/Makefile +++ b/arch/riscv/kvm/Makefile @@ -26,6 +26,7 @@ kvm-y +=3D vcpu_onereg.o kvm-$(CONFIG_RISCV_PMU_SBI) +=3D vcpu_pmu.o kvm-y +=3D vcpu_sbi.o kvm-y +=3D vcpu_sbi_base.o +kvm-y +=3D vcpu_sbi_fwft.o kvm-y +=3D vcpu_sbi_hsm.o kvm-$(CONFIG_RISCV_PMU_SBI) +=3D vcpu_sbi_pmu.o kvm-y +=3D vcpu_sbi_replace.o diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index 50be079b5528..0748810c0252 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -78,6 +78,10 @@ static const struct kvm_riscv_sbi_extension_entry sbi_ex= t[] =3D { .ext_idx =3D KVM_RISCV_SBI_EXT_STA, .ext_ptr =3D &vcpu_sbi_ext_sta, }, + { + .ext_idx =3D KVM_RISCV_SBI_EXT_FWFT, + .ext_ptr =3D &vcpu_sbi_ext_fwft, + }, { .ext_idx =3D KVM_RISCV_SBI_EXT_EXPERIMENTAL, .ext_ptr =3D &vcpu_sbi_ext_experimental, diff --git a/arch/riscv/kvm/vcpu_sbi_fwft.c b/arch/riscv/kvm/vcpu_sbi_fwft.c new file mode 100644 index 000000000000..b0f66c7bf010 --- /dev/null +++ b/arch/riscv/kvm/vcpu_sbi_fwft.c @@ -0,0 +1,216 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Cl=C3=A9ment L=C3=A9ger + */ + +#include +#include +#include +#include +#include +#include +#include + +struct kvm_sbi_fwft_feature { + /** + * @id: Feature ID + */ + enum sbi_fwft_feature_t id; + + /** + * @supported: Check if the feature is supported on the vcpu + * + * This callback is optional, if not provided the feature is assumed to + * be supported + */ + bool (*supported)(struct kvm_vcpu *vcpu); + + /** + * @set: Set the feature value + * + * Return SBI_SUCCESS on success or an SBI error (SBI_ERR_*) + * + * This callback is mandatory + */ + long (*set)(struct kvm_vcpu *vcpu, struct kvm_sbi_fwft_config *conf, unsi= gned long value); + + /** + * @get: Get the feature current value + * + * Return SBI_SUCCESS on success or an SBI error (SBI_ERR_*) + * + * This callback is mandatory + */ + long (*get)(struct kvm_vcpu *vcpu, struct kvm_sbi_fwft_config *conf, unsi= gned long *value); +}; + +static const enum sbi_fwft_feature_t kvm_fwft_defined_features[] =3D { + SBI_FWFT_MISALIGNED_EXC_DELEG, + SBI_FWFT_LANDING_PAD, + SBI_FWFT_SHADOW_STACK, + SBI_FWFT_DOUBLE_TRAP, + SBI_FWFT_PTE_AD_HW_UPDATING, + SBI_FWFT_POINTER_MASKING_PMLEN, +}; + +static bool kvm_fwft_is_defined_feature(enum sbi_fwft_feature_t feature) +{ + int i; + + for (i =3D 0; i < ARRAY_SIZE(kvm_fwft_defined_features); i++) { + if (kvm_fwft_defined_features[i] =3D=3D feature) + return true; + } + + return false; +} + +static const struct kvm_sbi_fwft_feature features[] =3D { +}; + +static struct kvm_sbi_fwft_config * +kvm_sbi_fwft_get_config(struct kvm_vcpu *vcpu, enum sbi_fwft_feature_t fea= ture) +{ + int i; + struct kvm_sbi_fwft *fwft =3D vcpu_to_fwft(vcpu); + + for (i =3D 0; i < ARRAY_SIZE(features); i++) { + if (fwft->configs[i].feature->id =3D=3D feature) + return &fwft->configs[i]; + } + + return NULL; +} + +static int kvm_fwft_get_feature(struct kvm_vcpu *vcpu, u32 feature, + struct kvm_sbi_fwft_config **conf) +{ + struct kvm_sbi_fwft_config *tconf; + + tconf =3D kvm_sbi_fwft_get_config(vcpu, feature); + if (!tconf) { + if (kvm_fwft_is_defined_feature(feature)) + return SBI_ERR_NOT_SUPPORTED; + + return SBI_ERR_DENIED; + } + + if (!tconf->supported) + return SBI_ERR_NOT_SUPPORTED; + + *conf =3D tconf; + + return SBI_SUCCESS; +} + +static int kvm_sbi_fwft_set(struct kvm_vcpu *vcpu, u32 feature, + unsigned long value, unsigned long flags) +{ + int ret; + struct kvm_sbi_fwft_config *conf; + + ret =3D kvm_fwft_get_feature(vcpu, feature, &conf); + if (ret) + return ret; + + if ((flags & ~SBI_FWFT_SET_FLAG_LOCK) !=3D 0) + return SBI_ERR_INVALID_PARAM; + + if (conf->flags & SBI_FWFT_SET_FLAG_LOCK) + return SBI_ERR_DENIED_LOCKED; + + conf->flags =3D flags; + + return conf->feature->set(vcpu, conf, value); +} + +static int kvm_sbi_fwft_get(struct kvm_vcpu *vcpu, unsigned long feature, + unsigned long *value) +{ + int ret; + struct kvm_sbi_fwft_config *conf; + + ret =3D kvm_fwft_get_feature(vcpu, feature, &conf); + if (ret) + return ret; + + return conf->feature->get(vcpu, conf, value); +} + +static int kvm_sbi_ext_fwft_handler(struct kvm_vcpu *vcpu, struct kvm_run = *run, + struct kvm_vcpu_sbi_return *retdata) +{ + int ret; + struct kvm_cpu_context *cp =3D &vcpu->arch.guest_context; + unsigned long funcid =3D cp->a6; + + switch (funcid) { + case SBI_EXT_FWFT_SET: + ret =3D kvm_sbi_fwft_set(vcpu, cp->a0, cp->a1, cp->a2); + break; + case SBI_EXT_FWFT_GET: + ret =3D kvm_sbi_fwft_get(vcpu, cp->a0, &retdata->out_val); + break; + default: + ret =3D SBI_ERR_NOT_SUPPORTED; + break; + } + + retdata->err_val =3D ret; + + return 0; +} + +static int kvm_sbi_ext_fwft_init(struct kvm_vcpu *vcpu) +{ + struct kvm_sbi_fwft *fwft =3D vcpu_to_fwft(vcpu); + const struct kvm_sbi_fwft_feature *feature; + struct kvm_sbi_fwft_config *conf; + int i; + + fwft->configs =3D kcalloc(ARRAY_SIZE(features), sizeof(struct kvm_sbi_fwf= t_config), + GFP_KERNEL); + if (!fwft->configs) + return -ENOMEM; + + for (i =3D 0; i < ARRAY_SIZE(features); i++) { + feature =3D &features[i]; + conf =3D &fwft->configs[i]; + if (feature->supported) + conf->supported =3D feature->supported(vcpu); + else + conf->supported =3D true; + + conf->feature =3D feature; + } + + return 0; +} + +static void kvm_sbi_ext_fwft_deinit(struct kvm_vcpu *vcpu) +{ + struct kvm_sbi_fwft *fwft =3D vcpu_to_fwft(vcpu); + + kfree(fwft->configs); +} + +static void kvm_sbi_ext_fwft_reset(struct kvm_vcpu *vcpu) +{ + int i; + struct kvm_sbi_fwft *fwft =3D vcpu_to_fwft(vcpu); + + for (i =3D 0; i < ARRAY_SIZE(features); i++) + fwft->configs[i].flags =3D 0; +} + +const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_fwft =3D { + .extid_start =3D SBI_EXT_FWFT, + .extid_end =3D SBI_EXT_FWFT, + .handler =3D kvm_sbi_ext_fwft_handler, + .init =3D kvm_sbi_ext_fwft_init, + .deinit =3D kvm_sbi_ext_fwft_deinit, + .reset =3D kvm_sbi_ext_fwft_reset, +}; --=20 2.49.0 From nobody Fri Dec 19 18:47:18 2025 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 640DF28F51C for ; Thu, 24 Apr 2025 17:35:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516145; cv=none; b=LysMqyFy4T9+9D/Ni/5IERZBJhDE1uuy+gJDALyG+fg+PdKelN4joIGmrWXLQdy9QWfmFf5JpUSMKAOseQIZBtsGAfchJcY/AtI21ff7kNOYRC1cPi/czgKO0mjGeuj+AzWGG0TG6stOE0oRjFu70dVw6Y8rkO1W5N0jyNAqoWU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745516145; c=relaxed/simple; bh=FDpWismWIQ/RNrzoV9koqJ7IGLL3azpnw2PSMJkenmQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=LwgL3+4OiunZX7ZykMBdvpkFnKVtXX9xZUm+SeQTiYCfZ6zZUH27AWYuoouI/ewGVo+rZ7sOZDnBlrfwhUzyt8c/NPrbGAEwFdrEnI6+lXjAKhPAXYHN9Bjqd9g5VZjbeL9NU0YJEyVgt422p1hMajQCFRuCP28Z4IxIvsXf0rs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=vEeoYmpk; arc=none smtp.client-ip=209.85.214.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="vEeoYmpk" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-22401f4d35aso16857795ad.2 for ; Thu, 24 Apr 2025 10:35:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1745516143; x=1746120943; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZXzCvVqwD1xQeGWZCz1UsZh6myMoBDUQY0JAsLX+Wro=; b=vEeoYmpk7lI/woi+wsbxwFNIBK3WE/c6Mp4RL0kxvA+j0tjrQKC6mTF7fP2jQWrl4k YhHx4LEP81Wva60VgsTEXvLGMH1EVJjPB0micbyBiEh5LHyuv2JI8/0VSmeGENpoDj8/ ioTg35vIN7xUzW7OqdX9/taSQXoSoq5gycTSNI8mXXA4aMJmFRmCL0IimPQnO+Wt/9wR Dy6fTfwM2l/6eRgN5eTqCaQwQ12MddAvn8QG9pyht7lZwi6v93LfaGvy22khf74T8GNu 43K4cb2KNHSA/X+sG1M5nKyCMoAaXPCnoeulypB++h7lAB0nF7ct6NbMvLGmGyMeARYv H6qQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745516143; x=1746120943; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZXzCvVqwD1xQeGWZCz1UsZh6myMoBDUQY0JAsLX+Wro=; b=kM58pGLVdBLJooGEJgaWeCZMtYkITSpPKkm0jmTe3rYqhOcp+7acmvvdZ48Lez491Y H4WvSZoeMHGtkx99cWkdEjTqTQ8UppojtjRlAcy/frleYX4jItDNVaZj9/azA/t/rmNc 7R0mSF4DYoJXoSuOZKJdqqNAKWZ3rWCKNwbzMx9SLVCA5n7/CDpW5yEFQ1XpsmsMylAz fUwj57x5PgBKAF/gjihIPsZ9vRWJgpIhcjf1aHZHh34r7DFa/v/ha0iRbbtYHBjUBTB/ VKOIlDx7NOitQ1UzPC82RNUpozhsAohb+XcR8tB8P6gyTqZPd4X6SXKnwtIVrVlO1Jvu FSDw== X-Forwarded-Encrypted: i=1; AJvYcCUJIdzx/WwiUswVsjHquNUKcIFGz53u+60ve+v3u9AIdx21sbUvhcSOYiJ8UgUOo1qnCwraNZNmERUFiDI=@vger.kernel.org X-Gm-Message-State: AOJu0YxhbtrKZBpV8Cecq13PjYKR04/wkTNNu9R6PIu2OIiQV+Ah32af Ra4yvFIFHoIvCcqcQ6Lbsn558i2wzNLI/psf/4NAMiF1ZuV8V37FtrrNMeNp4iU= X-Gm-Gg: ASbGnctgR4S2Jtw4VVqaGQxyH+GUjaBQuEsrDbQ9WOYCNS+sdF0h8fmoBF2O/rhCxD4 zUDv5LqgZMPuHGl7Z5uzwT25DqwlWqDY7cGihxC8Ax1Zqopzuh3queiNK56q73VgDgm0Zn9LJtq uEW84JnNS7bsAiXpMgG4Oh3WL26OnJ/trgzqQY19AFt3IIw50uW43JAizhojDTzlIhCoBpjMYHR 8m/URTTrjm1ZEq2vpK5Yix0pMbB0lKef24R3Ra7jzImEYEnFrQ1cliH9ugwKcwNcokY0qNgaHaL msctGEmERX4mKqHjlw40sbgWk8MOlrHM7jQDK/5qPQ== X-Google-Smtp-Source: AGHT+IFqCoNXysJ8Uz6w7sA2JzHDg11kuHB44+WTgIOUFofZxJnqgRWWiibGSTc2Np3Gu4COYQqeSg== X-Received: by 2002:a17:902:f683:b0:220:ce37:e31f with SMTP id d9443c01a7336-22db3bdb6bemr46068695ad.17.1745516142601; Thu, 24 Apr 2025 10:35:42 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22db5100c4esm16270255ad.173.2025.04.24.10.35.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Apr 2025 10:35:41 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v6 14/14] RISC-V: KVM: add support for SBI_FWFT_MISALIGNED_DELEG Date: Thu, 24 Apr 2025 19:32:01 +0200 Message-ID: <20250424173204.1948385-15-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250424173204.1948385-1-cleger@rivosinc.com> References: <20250424173204.1948385-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable SBI_FWFT_MISALIGNED_DELEG needs hedeleg to be modified to delegate misaligned load/store exceptions. Save and restore it during CPU load/put. Signed-off-by: Cl=C3=A9ment L=C3=A9ger Reviewed-by: Deepak Gupta Reviewed-by: Andrew Jones --- arch/riscv/kvm/vcpu.c | 3 +++ arch/riscv/kvm/vcpu_sbi_fwft.c | 36 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index 542747e2c7f5..d98e379945c3 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -646,6 +646,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) { void *nsh; struct kvm_vcpu_csr *csr =3D &vcpu->arch.guest_csr; + struct kvm_vcpu_config *cfg =3D &vcpu->arch.cfg; =20 vcpu->cpu =3D -1; =20 @@ -671,6 +672,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) csr->vstval =3D nacl_csr_read(nsh, CSR_VSTVAL); csr->hvip =3D nacl_csr_read(nsh, CSR_HVIP); csr->vsatp =3D nacl_csr_read(nsh, CSR_VSATP); + cfg->hedeleg =3D nacl_csr_read(nsh, CSR_HEDELEG); } else { csr->vsstatus =3D csr_read(CSR_VSSTATUS); csr->vsie =3D csr_read(CSR_VSIE); @@ -681,6 +683,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) csr->vstval =3D csr_read(CSR_VSTVAL); csr->hvip =3D csr_read(CSR_HVIP); csr->vsatp =3D csr_read(CSR_VSATP); + cfg->hedeleg =3D csr_read(CSR_HEDELEG); } } =20 diff --git a/arch/riscv/kvm/vcpu_sbi_fwft.c b/arch/riscv/kvm/vcpu_sbi_fwft.c index b0f66c7bf010..d16ee477042f 100644 --- a/arch/riscv/kvm/vcpu_sbi_fwft.c +++ b/arch/riscv/kvm/vcpu_sbi_fwft.c @@ -14,6 +14,8 @@ #include #include =20 +#define MIS_DELEG (BIT_ULL(EXC_LOAD_MISALIGNED) | BIT_ULL(EXC_STORE_MISALI= GNED)) + struct kvm_sbi_fwft_feature { /** * @id: Feature ID @@ -68,7 +70,41 @@ static bool kvm_fwft_is_defined_feature(enum sbi_fwft_fe= ature_t feature) return false; } =20 +static bool kvm_sbi_fwft_misaligned_delegation_supported(struct kvm_vcpu *= vcpu) +{ + return misaligned_traps_can_delegate(); +} + +static long kvm_sbi_fwft_set_misaligned_delegation(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + unsigned long value) +{ + if (value =3D=3D 1) + csr_set(CSR_HEDELEG, MIS_DELEG); + else if (value =3D=3D 0) + csr_clear(CSR_HEDELEG, MIS_DELEG); + else + return SBI_ERR_INVALID_PARAM; + + return SBI_SUCCESS; +} + +static long kvm_sbi_fwft_get_misaligned_delegation(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + unsigned long *value) +{ + *value =3D (csr_read(CSR_HEDELEG) & MIS_DELEG) =3D=3D MIS_DELEG; + + return SBI_SUCCESS; +} + static const struct kvm_sbi_fwft_feature features[] =3D { + { + .id =3D SBI_FWFT_MISALIGNED_EXC_DELEG, + .supported =3D kvm_sbi_fwft_misaligned_delegation_supported, + .set =3D kvm_sbi_fwft_set_misaligned_delegation, + .get =3D kvm_sbi_fwft_get_misaligned_delegation, + }, }; =20 static struct kvm_sbi_fwft_config * --=20 2.49.0