From patchwork Mon Mar 10 15:12:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010350 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 744A6C28B2E for ; Mon, 10 Mar 2025 15:47:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=oZVqgZJwznVSgeFYpOU1bgbgm5ZgNuUwn/MWaz+2jko=; b=nPCihMOGAFVIJd 4nI4PDfhKJkBsQAU4zVTtXdQB8eVwXwWWZzLNb7j1YoLBcMV9frsLpVlt7bpUaNtg+QY7cL3vc8Gg kT/F2lPM7kghj89f0pMnEwPmwz7cVVs/dUeTxR3sB0y2qDsLftMYt9YYbhLMjixL5zmKPGk4fRdeE 0+3UGFHi07ibc2Vyo8eAUf10g374MREyDz5CSsMJb9xB2FiyWMlkIDfgaia9MIx2gLrp7HXDa5Arh uqtboNKqWUt+I3oL4jZ1u6kUSqXRqW16rRTgnseBQLkaTu84NB/K72gMn9cXJlyxLnrViAzZe8SQw 4phqrbf0lMUnI+oEiAbw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfLp-00000003Frd-1TzH; Mon, 10 Mar 2025 15:47:33 +0000 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1treoJ-000000037Mz-3PWB for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:12:56 +0000 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-223fb0f619dso82333255ad.1 for ; Mon, 10 Mar 2025 08:12:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619575; x=1742224375; darn=lists.infradead.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=iqoT5ixPEtXdLEI6ocjejwPv6xnA8RHlbYFtktGXOjg=; b=TGz5YLIaym6dyao/XvIh1rUWKxtgjWA2N+UbwHLIyym8Fr3XEx5UGECpOtQJ21TCxC xLvCewQ4Aa22eTISKrHq0A6UGBZZyywnJVR9TB4jWxpZbAn72aiTujOLoaczQ28QJQ7o 7ehQgpGZ7Wx2hYHCdxQ7/uINUgmaVl73mVr2St7cwSG6P0BbEMTEHYqDrRm6CV0GpuyM HkT1KicrXJsIs6EcB7sJYNuhNm4gNU478KWUFGm3AxPXQQ8pm9LDO1vllHK3IYr8mueQ pywyEYTm5bbgtdQ9jQfLglNQ+2RB+13qzpoMeXdWnRzwxFWDsLI/8KeIYMHoLWmhi5iV PTpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619575; x=1742224375; 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=iqoT5ixPEtXdLEI6ocjejwPv6xnA8RHlbYFtktGXOjg=; b=XFXPqAoTYKByMESKUPhYGQmtQ5su8GXRkeujqBrBsiWivn5GhJ6Ci4kRUCvVZcIwf9 96vGqR1TNCUkHA5yHaPhFFUD3CJX/R+sZ5rydVEmTjrZxQmKnHg/PL+ltYb+IupeC+8P CYniWfJQ0Oue+n7dCZ7oY4oaqXnG0HXQnWe4SQ8MfyKSfo5PkWeMG2agIEKSVMXDOSZr E+KpruVT5jZAuq5hg9O8MbktvSaieMfChCbxBuHSSgWIHSJL6uaCVn6U7/AezvIp1mXY +GAFGG5W1+FNbp/uF4hOWFMUAMzFDpnR8YsdwtxMmpwdoJ95xi8iu/uZs6wjfb+QdSUe E/Nw== X-Forwarded-Encrypted: i=1; AJvYcCX84QjyH/eB2pc1sfsTl8UT/jNPXA42M0BE7NyI6ihz9ESB9tn/qb+QkAzf3mPkPQgZqMm2oib8bya/IA==@lists.infradead.org X-Gm-Message-State: AOJu0Yzn7WTWsm2ajnuvSGm4m8OGdRYK20Kz+Ef9fYNa6KNlyx6EiBIu qPDF0sKP8bbRk2DduaNKM9Bmu76lLcqbFrvnYcQlXORWtJ01HL1j2YO2nb18xSw= X-Gm-Gg: ASbGncumeAHKNtePjAn1XUJbigouN/4gb+/cZUnUEmgZWu8ue2WANpiUo3RvCtJlj5/ Fet/KAgn5etlHspgFWmeUbmFmyBGvS0JNVaehTle7Oms2I/yw24QObHnCUKgB43OMpjg6V6bu5T LgtRQmOD7hgt6+sRDxy1G1IkrEB+9fuRlD6tRCHPTa7Rzu2woEwrT6JBlWWPt6ZqJ3j1RmDsmQ4 B7jQFs8uUrW/a1flbW3xF4wAy+whEWZut2U5OOjYCOTfRw1/grgW/1tuMdBvOB1sdEoR/DQQLXR scEMkcsPe5vUkhkTnwKzN9dk5sUtS1fwhHeOC0hj4IMdug== X-Google-Smtp-Source: AGHT+IFvzTd5QCV2TCtNaJ/EaL6UD5ar2zJmoTEAdGnVQhe1E8h+p63CvIu3O7VcRgR7VvKsoM8L/A== X-Received: by 2002:a17:902:d483:b0:223:4537:65b1 with SMTP id d9443c01a7336-22593185c80mr2418925ad.36.1741619575178; Mon, 10 Mar 2025 08:12:55 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.12.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:12:54 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland , Deepak Gupta Subject: [PATCH v3 01/17] riscv: add Firmware Feature (FWFT) SBI extensions definitions Date: Mon, 10 Mar 2025 16:12:08 +0100 Message-ID: <20250310151229.2365992-2-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081255_857437_79F119A1 X-CRM114-Status: UNSURE ( 9.65 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org 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ément Léger Reviewed-by: Samuel Holland Tested-by: Samuel Holland Reviewed-by: Deepak Gupta --- 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 = 0x4442434E, SBI_EXT_STA = 0x535441, SBI_EXT_NACL = 0x4E41434C, + SBI_EXT_FWFT = 0x46574654, /* Experimentals extensions must lie within this range */ SBI_EXT_EXPERIMENTAL_START = 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 +/* 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 = 0x0, + SBI_FWFT_LANDING_PAD = 0x1, + SBI_FWFT_SHADOW_STACK = 0x2, + SBI_FWFT_DOUBLE_TRAP = 0x3, + SBI_FWFT_PTE_AD_HW_UPDATING = 0x4, + SBI_FWFT_POINTER_MASKING_PMLEN = 0x5, + SBI_FWFT_LOCAL_RESERVED_START = 0x6, + SBI_FWFT_LOCAL_RESERVED_END = 0x3fffffff, + SBI_FWFT_LOCAL_PLATFORM_START = 0x40000000, + SBI_FWFT_LOCAL_PLATFORM_END = 0x7fffffff, + + SBI_FWFT_GLOBAL_RESERVED_START = 0x80000000, + SBI_FWFT_GLOBAL_RESERVED_END = 0xbfffffff, + SBI_FWFT_GLOBAL_PLATFORM_START = 0xc0000000, + SBI_FWFT_GLOBAL_PLATFORM_END = 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 extern unsigned long sbi_spec_version; struct sbiret { From patchwork Mon Mar 10 15:12:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010351 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9EAD8C35FF3 for ; Mon, 10 Mar 2025 15:47:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=jdPCn5BGJeXwtmam3+NjzFRwB1Jz/e3h3SN+O8a/x+E=; b=qtZJbO+m2yo9p/ htJDmyYzf0zVGxnhG4OoX2DQ+B2S54iiZXUKwqBg+lmyntCNIaE0XUnnUZuEEb0SYkvk/bq6hudz4 rNPMktbCdPuyU/PvgnEZ5LR58GIN6p9xW/WNqAUihdOz2w+H0sJx9hwZYMyDF8JBodd1Had0B5oEA KqLIwBs1W1EFjaFNIouc8v27MlJXEQG+M7l3/8UCaVy0iB06nvziGtWpOxBlOtcfXm7LbR+7G8Knl 3VJIS9+ACzVZOYcAJQhn55Vb9IN6y3nK4T1vqY5hiuGu/0hNhTSspDz/gWi9baQ+W8W9wUtw5tyg5 Tw/RVTWZMo26l/5jVgSA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfLq-00000003Ft5-2dIh; Mon, 10 Mar 2025 15:47:34 +0000 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1treoS-000000037RX-1nJc for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:13:05 +0000 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-2ff615a114bso7661267a91.0 for ; Mon, 10 Mar 2025 08:13:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619583; x=1742224383; darn=lists.infradead.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=AL3KrdqQvlwv1xQYem17t7QUv6GmMan/yx9/ashDvsw=; b=UteZiBC0+idb3DP8Mg/PQVTFFHKHuoxWHTPMJgRlbzdpFJ8EaUebbl+mXoiaLk1564 Hv0pin9Jz5ghPvn5JYiqY9kBKBDoDfXPa58CM0/57FRvN4BlSNOMOlZ2MlqB6S9U3Oqh EReJCDQK6x/NMEimiTdV+gUVDkoICG1Oy9ymvFdtxMjuz/gHdjiWtBbxknMzFCq0/Elz J5U2XiGQeRROf4MGR6wwwpSnEnnuiLR8Us8i2QM+WTgb+wUIwVi6TyA88IkSQw8H2t8G CdMKpAaxBg5865xDFdHWunLyU+jTQ6N9fmBgqCGDFH7E6C+unrn2/tXiMW0lnCeD1X+O 3JuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619583; x=1742224383; 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=AL3KrdqQvlwv1xQYem17t7QUv6GmMan/yx9/ashDvsw=; b=eEQHWXTwsoHKFFVsEa1VnjAOVwhPW1NguoKekGAKZxVPW9/Fxzm97LO7DmGX1E205P 1Zz/4kfn8OpTnldWpzhB5XWkxAZmeVcZwK7xl0Li+26YyZ72lLdd9GZLNm2JxgXh5j6b azORwHuKp+4mr/VKiwVCJC2Pp4Ntz8w9DhKtIAPhmz7XCNLNlsupdRgsG00rlZUXwzn0 J9mA2JNTWbvTBtjg6c5puaFYqdwUWGbogzLiUh7Nto3Z7+m4ovU1kAF0y+4yAZeMzKF6 9xCsVwMwAZhTyn2DCgc8jGe4H0NbzsTB/ui1LLaiuo2CGFGHxhi3WjS+0Dbz6/N1ZObA L/nQ== X-Forwarded-Encrypted: i=1; AJvYcCVv+OffwjuslI4az/T9IsUGwuIAbNfYRGV6i6N9Ko53cM5Oncg4V2ZsRXvhXwrIQCJHXNAWw888VIbpGQ==@lists.infradead.org X-Gm-Message-State: AOJu0Yyk31gjahDpi4UZUPCKDwqj5NDyAUr680FsHCJ9djhd4HglVmEI 3Q6xENeEsn93LrGscKy8gfkTeBgF8o7GPOGKwrqouQuy5DbmNWQ9fjOxcjjPMgo= X-Gm-Gg: ASbGnctGBNR5ZScJ5DtbfzlLp6XBa3HXJk+onKEuILCPFs1EO2L7Spgd9hzkge7P1YO bFNeyQiFwETtQf1JeiEeRBaLZRATPr2OlSMuacPPdA1n3Ie218iV7IYg9mHgdK5XuGR28ga5qR2 ypngLEut88sQr8g3AcoCngcCc2jYev/OiTqxBqv2WhBdxH2TX9Hu3WEyTcIkRnv5QQzifFDxtio UqtnszaztEH7zmnmKap+wIgMwA0a7oqfJw+jsngVXC+49UnSsWdAG5dJeAEgzh40pz7puNCMAHW XKT05UKsn+fuBCMcVrU9HBP7J1+0hnofSGlyycV0V4FthOtgLRcIlCr+ X-Google-Smtp-Source: AGHT+IFqOyaVREaO+MohFgN6MHhlVeTDEW+52HPkp4Dqon7PwKBjXGmUdU6fJQIinAVq3owNZZQiOQ== X-Received: by 2002:a17:90b:3810:b0:2fa:3b6b:3370 with SMTP id 98e67ed59e1d1-2ffbc1f57cemr15412229a91.16.1741619583563; Mon, 10 Mar 2025 08:13:03 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.12.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:13:03 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 02/17] riscv: sbi: add FWFT extension interface Date: Mon, 10 Mar 2025 16:12:09 +0100 Message-ID: <20250310151229.2365992-3-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081304_473337_E6338926 X-CRM114-Status: GOOD ( 15.46 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org This SBI extensions enables supervisor mode to control feature that are under M-mode control (For instance, Svadu menvcfg ADUE bit, Ssdbltrp DTE, etc). Signed-off-by: Clément Léger --- arch/riscv/include/asm/sbi.h | 5 ++ arch/riscv/kernel/sbi.c | 97 ++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index bb077d0c912f..fc87c609c11a 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -503,6 +503,11 @@ int sbi_remote_hfence_vvma_asid(const struct cpumask *cpu_mask, unsigned long asid); long sbi_probe_extension(int ext); +int sbi_fwft_all_cpus_set(u32 feature, unsigned long value, unsigned long flags, + bool revert_on_failure); +int sbi_fwft_get(u32 feature, unsigned long *value); +int sbi_fwft_set(u32 feature, unsigned long value, unsigned long 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 1989b8cade1b..256910db1307 100644 --- a/arch/riscv/kernel/sbi.c +++ b/arch/riscv/kernel/sbi.c @@ -299,6 +299,103 @@ static int __sbi_rfence_v02(int fid, const struct cpumask *cpu_mask, return 0; } +int sbi_fwft_get(u32 feature, unsigned long *value) +{ + return -EOPNOTSUPP; +} + +/** + * sbi_fwft_set() - 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. + */ +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; + cpumask_t mask; +}; + +static void cpu_sbi_fwft_set(void *arg) +{ + struct fwft_set_req *req = arg; + + if (sbi_fwft_set(req->feature, req->value, req->flags)) + cpumask_clear_cpu(smp_processor_id(), &req->mask); +} + +static int sbi_fwft_feature_local_set(u32 feature, unsigned long value, + unsigned long flags, + bool revert_on_fail) +{ + int ret; + unsigned long prev_value; + cpumask_t tmp; + struct fwft_set_req req = { + .feature = feature, + .value = value, + .flags = flags, + }; + + cpumask_copy(&req.mask, cpu_online_mask); + + /* We can not revert if features are locked */ + if (revert_on_fail && flags & SBI_FWFT_SET_FLAG_LOCK) + return -EINVAL; + + /* Reset value is the same for all cpus, read it once. */ + ret = sbi_fwft_get(feature, &prev_value); + if (ret) + return ret; + + /* Feature might already be set to the value we want */ + if (prev_value == value) + return 0; + + on_each_cpu_mask(&req.mask, cpu_sbi_fwft_set, &req, 1); + if (cpumask_equal(&req.mask, cpu_online_mask)) + return 0; + + pr_err("Failed to set feature %x for all online cpus, reverting\n", + feature); + + req.value = prev_value; + cpumask_copy(&tmp, &req.mask); + on_each_cpu_mask(&req.mask, cpu_sbi_fwft_set, &req, 1); + if (cpumask_equal(&req.mask, &tmp)) + return 0; + + return -EINVAL; +} + +/** + * sbi_fwft_all_cpus_set() - 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 + * @revert_on_fail: true if feature value should be restored to it's orignal + * value on failure. + * + * Return: 0 on success, appropriate linux error code otherwise. + */ +int sbi_fwft_all_cpus_set(u32 feature, unsigned long value, unsigned long flags, + bool revert_on_fail) +{ + if (feature & SBI_FWFT_GLOBAL_FEATURE_BIT) + return sbi_fwft_set(feature, value, flags); + + return sbi_fwft_feature_local_set(feature, value, flags, + revert_on_fail); +} + /** * sbi_set_timer() - Program the timer for next timer event. * @stime_value: The value after which next timer event should fire. From patchwork Mon Mar 10 15:12:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010352 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C7D85C282DE for ; Mon, 10 Mar 2025 15:47:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=B7mz16FRi3NIf6PZAo0VyhqIxgQ9Mm7RQ4uNkvxUGK8=; b=pQGbEBlwEgNwJB X03IuDjQc1prRnN9g2xZkdrETsXsO5on9RdcrwWubDsY761bEOt2IWo3VuSpUAKgQzshGgPOvdLO6 vUfcQZQ/wuwtJYPbDQl2egoLpSF+KMFv/e5f+Btr9CD2WAokd4Qnj3VKTnF/gZu1tDyNdT+Kd1vrG EF7QL7qPfI+LpylhrmcPF8aswhtRWRI0CaNtEOc4BDGkTt+INGIqy/ucLzQlogzUkGzQ5w9e5pLi5 GF7aRNNs9sa0nO0mqB9FPtnSV2WHBH8w9YPaLtnHumvLmqQ4t+emoc/aMSdN9GcQM5++igQ3eBvKn xow2bj7dln8JLma3EqNA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfLr-00000003Fu3-36Ex; Mon, 10 Mar 2025 15:47:35 +0000 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1treoa-000000037VU-2SoX for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:13:13 +0000 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2232aead377so13780795ad.0 for ; Mon, 10 Mar 2025 08:13:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619592; x=1742224392; darn=lists.infradead.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=x8ehbEB4G2M6rMKgF63InF+3qW6jpnoI0lm2nt0Msdk=; b=WRJ0bn5o7dB8+ETWYOTd5YzUgD/f8JPkT3cgJeFguST1W5X6kPDFd0AqxTSz/SmbNF m1U/+TL1QPNM03w5Hgr6fkVJFGIEgdXwrKxVpmFGzcoGTb37E2hgEsy6QVrEoI+4rZxM l+TQKNTkBnhOS1SyPGDoc80tSC6gPqU4aJobl2rigCw/GHPfZXeuqg68XHgmfe+qrRfF 0E3TrKSelBzkVoNNwjYKZsjr4W1psnIlAolzrLEODI2Yu7QEmE40g1iii71BifRdteKE Qsty3a7JCQt5uRNwd8YnyU5Yo2RVeRchnKILFhjapEVpcw96qSimJ0nZXYl0f+OMvcJo obTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619592; x=1742224392; 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=x8ehbEB4G2M6rMKgF63InF+3qW6jpnoI0lm2nt0Msdk=; b=B+KjwJxAVPRBenVVf6JHIWRdNB9V1R7usgxydCUED80VB6Gy8nndm+wMFQz5Of4c1j BA5/4snI0drK6ec5wbDYal9YUbpkTwvehkTfttLQPeZEtQL6CCgZsRHb50NVer4C6rIh Wdv4431C6k3CTNyOIE89hnIFqD5ZpOtL4LlM9Ro6S1NapBPgHo8p4QaHxV7PM1TATJPk u2EQFOFLfM2m+s2PgGHSm+/p85X37yNjDA+Lw+qGyRuqfeFlY6QOyWjEcPDi50GjgT36 90CGxUgpcw9L1ibBeKOQXzndvTJVEoIVHhNPuE4l9Wxm/3vhDlldMhHGzvC691gzsaXx XFjw== X-Forwarded-Encrypted: i=1; AJvYcCUEJ7y7OvYqzxTbuffJwkWRUnS/2cLOdPxKlKCenh5g/zgW2oUO7EAih2XdguoMJaWP5VFWeg06w2PJFA==@lists.infradead.org X-Gm-Message-State: AOJu0YwPXzRJ9o2I9uFQ+A4B9b/SAF+MYoqCq4ZcGdwrIrmrAo2jsp/u 6FgYcZP3f4E+WWWQAUq3i1x+jNvrb0iYqM37TcD6ZnbYiXr/uCWMH5T0/GHOTEE= X-Gm-Gg: ASbGncvKKK4bml9gc7ZYZfpxEezVPMLGRR3DIYf/3uXT/1H2T9nVpSdvK9qvLpH7P0l y1S7jyhxuOQT8EG05Jsiv065j7IypOvBf2OlIE9jZ85EHYlcsz9oFo0qT4P9U7PFAewSWLi/O+h G1v5z3cj/vzJJ1U/xaj6ae6mNiI5YGFDfrkQDdC2XbNkhivR6B9y4aAWC+EFWJbneAGK7RIj3rh Tva/uYzdQh7ojyCf2uTImRgogErLVTTZ4TO0cO1+01qkoY0vg8y7/CQQeVj7c5g0Q2vj2zCu7DH u5JTXB663MRAPXjTX7twokaYb8xM31Lgp+qOiSdZECC0SQ== X-Google-Smtp-Source: AGHT+IHx06QKyqqktCp5VtJUo5IN0vcBDSsl9L3/ywFUKF9aCYPEgmbUbCQl4AVArEAbrJmDgZ6oCQ== X-Received: by 2002:a17:903:2405:b0:224:24d5:f20a with SMTP id d9443c01a7336-22428bfdba7mr268684275ad.48.1741619592004; Mon, 10 Mar 2025 08:13:12 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.13.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:13:11 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 03/17] riscv: sbi: add SBI FWFT extension calls Date: Mon, 10 Mar 2025 16:12:10 +0100 Message-ID: <20250310151229.2365992-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081312_627255_0F539532 X-CRM114-Status: GOOD ( 13.59 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org 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ément Léger --- arch/riscv/kernel/sbi.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/arch/riscv/kernel/sbi.c b/arch/riscv/kernel/sbi.c index 256910db1307..af8e2199e32d 100644 --- a/arch/riscv/kernel/sbi.c +++ b/arch/riscv/kernel/sbi.c @@ -299,9 +299,19 @@ static int __sbi_rfence_v02(int fid, const struct cpumask *cpu_mask, return 0; } +static bool sbi_fwft_supported; + int sbi_fwft_get(u32 feature, unsigned long *value) { - return -EOPNOTSUPP; + struct sbiret ret; + + if (!sbi_fwft_supported) + return -EOPNOTSUPP; + + ret = sbi_ecall(SBI_EXT_FWFT, SBI_EXT_FWFT_GET, + feature, 0, 0, 0, 0, 0); + + return sbi_err_map_linux_errno(ret.error); } /** @@ -314,7 +324,15 @@ int sbi_fwft_get(u32 feature, unsigned long *value) */ int sbi_fwft_set(u32 feature, unsigned long value, unsigned long flags) { - return -EOPNOTSUPP; + struct sbiret ret; + + if (!sbi_fwft_supported) + return -EOPNOTSUPP; + + ret = sbi_ecall(SBI_EXT_FWFT, SBI_EXT_FWFT_SET, + feature, value, flags, 0, 0, 0); + + return sbi_err_map_linux_errno(ret.error); } struct fwft_set_req { @@ -389,6 +407,9 @@ static int sbi_fwft_feature_local_set(u32 feature, unsigned long value, int sbi_fwft_all_cpus_set(u32 feature, unsigned long value, unsigned long flags, bool revert_on_fail) { + if (!sbi_fwft_supported) + return -EOPNOTSUPP; + if (feature & SBI_FWFT_GLOBAL_FEATURE_BIT) return sbi_fwft_set(feature, value, flags); @@ -719,6 +740,11 @@ void __init sbi_init(void) pr_info("SBI DBCN extension detected\n"); sbi_debug_console_available = true; } + if ((sbi_spec_version >= sbi_mk_version(2, 0)) && + (sbi_probe_extension(SBI_EXT_FWFT) > 0)) { + pr_info("SBI FWFT extension detected\n"); + sbi_fwft_supported = true; + } } else { __sbi_set_timer = __sbi_set_timer_v01; __sbi_send_ipi = __sbi_send_ipi_v01; From patchwork Mon Mar 10 15:12:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010353 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8694FC35FF2 for ; Mon, 10 Mar 2025 15:47:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Mf7nuoLPdAKaOQ5lmgawroSJ+BVHq4ix/XWFNjcEEjw=; b=CbgKb78yze462y Uz6uV0htgiu5dBHgfNYN+PyAc2Nd2RkdpyhsBVp3TaTGSqWT3EzXNo2O/F/2MoYOrSCmdfJ+d9OWI bS9HgN/zWJhvRlCA+afhY5tYADEBKhR5lEz++cYG46Z6cfnu+eIWhgGukuzjJzEJblfescOFODZCw 8fYbWmNQYdfaqTWqSF7w+RaOzJGMDfjgXMzEoVt8UGZE/CLc50lw8hNyquqWkx6lhWlFbWDO1LtDk 9+c7nZQa8WvxZ1CXWzn9o3AiwlCfB0r1MsDVJ4jfVlcE0KgMYZuQYoP0OS9y2AtRG0BIagDIDfZxi vI6ewonE1zOqeUTAOfnA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfLs-00000003FuY-1eUy; Mon, 10 Mar 2025 15:47:36 +0000 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1treoi-000000037Yd-3bN6 for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:13:21 +0000 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2243803b776so68720345ad.0 for ; Mon, 10 Mar 2025 08:13:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619600; x=1742224400; darn=lists.infradead.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=iCzObjCiX22GaNtqPcn313QNcQsAxjFzTtLeQoUqwaY=; b=GadKO/aWA6LBNANRtxvkWLX+BU901uj99fPr3DezPVqVRUjP/xBRg26U6L5iY4Jq6c 3I6G2Xt3F4x/lWVCT4IQQP9YYWNBFEPs8JH8CtBZkJCGkfs3wBzt4arGwi/vZxuoDX9x NKbkOzJWA3dSQV8R9iM3m758Wad4ckgjtXOScRpEauKJl+vCywuanQDB3OqUae5uc0TE jLYF+JDRlqeohSXOEmtGZ9wvbV1EZ1rD/hy/8e9xD4uGHwBiWxFi2HuGWi1q1NLQe5Vl A9nf7MSnURWG0pXFtkNaHYe5gcJVbZ6yF43kgYxVBDtKVuPrKq+CS/ynm6Uj7Xm3XNqg J1Tw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619600; x=1742224400; 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=iCzObjCiX22GaNtqPcn313QNcQsAxjFzTtLeQoUqwaY=; b=GXmYS76uqmpSc6OfhnYUG8fPxwAgoz3dP7oCxymTndZq+Yb0mbGxu+KrySZyTw+khF /GYioPQs9+lKu8uSujjHRPSJ3pRhX2lRoUFgVUB31zOAqujjYwmafG1JWYEBHOdKa3f4 wS7WteuE5Nb3uaxnfvRffcRPm1x5izVqH2jROe5gwxvI3tj6VpiaJWFDOQpQWpXWOjlh P1p9rUjeI+weatE5Jeiw47YKXE53QpBb2qSaE7DkXHFnZL0ByjEbPuhYCkVk+VhSZw3D E1GiYd5/hjc/LZTubZ2ONTqNauSCexRaIgTMOsWHU0W4Qxc+YZ6/Ktrlblzk6ZRWTQWZ fNtg== X-Forwarded-Encrypted: i=1; AJvYcCWTc9X7zyNh/Cy6mi4L12kFQxidBSe1M34npgyGJ7pEJhh6G5Em8Dx8t60dO0r+3/TQEzhho4ID/BxadA==@lists.infradead.org X-Gm-Message-State: AOJu0Yw9HLONh75OfWLn/TZhzQTcfeBggEyf+mqGhFoIKsgky9HigWYU Xc8VZ7VE96sXxFvf7KzTdFf/gjDXO5YmSDfoWOlGIbBGe96REHkhH2HEoT8U/m4= X-Gm-Gg: ASbGncuDju+qhWBCzhbOszxaSUxf2qGs24D2DfsABYzQLYkqpLQhKk/wwRD2M2kYOn4 t7+bUsKbWRY7Jt4uNM7VNtTq7Z/akX2f3eBgEAUBWdMQZDmEJPdqfJo2daR3REE8+/paI7EnUDX voDd1z+TqopLzGoR9/ZuX9RIXVWA1wqy+aLRst+vfRc2p3pl7wi1qR9/AWdgR6Si+amd8BlIEdA NAOT44A6r1f4d+hcs/fdMOYuHvmapJTfM4fTkqr9eyqYbqtqcGtwTOic4K7iAHPM8cnLbxsEboH iXYgncxwyZNU3a245Yqbjrr5YFUQJllysNn35tdMqterEw== X-Google-Smtp-Source: AGHT+IFAN+g28xsEl6cRHjCuf/iafyl8QjCyWFLr5ynPSsnxM9bGhegkupQZbu72YeMxbfX8Ebj7iA== X-Received: by 2002:a17:903:32c5:b0:224:10a2:cad5 with SMTP id d9443c01a7336-2242887b36bmr234821365ad.10.1741619600386; Mon, 10 Mar 2025 08:13:20 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.13.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:13:19 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 04/17] riscv: misaligned: request misaligned exception from SBI Date: Mon, 10 Mar 2025 16:12:11 +0100 Message-ID: <20250310151229.2365992-5-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081320_904411_EE5C9C37 X-CRM114-Status: GOOD ( 16.82 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org 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ément Léger --- arch/riscv/include/asm/cpufeature.h | 3 +- arch/riscv/kernel/traps_misaligned.c | 77 +++++++++++++++++++++- arch/riscv/kernel/unaligned_access_speed.c | 11 +++- 3 files changed, 86 insertions(+), 5 deletions(-) diff --git a/arch/riscv/include/asm/cpufeature.h b/arch/riscv/include/asm/cpufeature.h index 569140d6e639..ad7d26788e6a 100644 --- a/arch/riscv/include/asm/cpufeature.h +++ b/arch/riscv/include/asm/cpufeature.h @@ -64,8 +64,9 @@ void __init riscv_user_isa_enable(void); _RISCV_ISA_EXT_DATA(_name, _id, _sub_exts, ARRAY_SIZE(_sub_exts), _validate) bool 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_unused); 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 7cc108aed74e..90ac74191357 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #define INSN_MATCH_LB 0x3 @@ -635,7 +636,7 @@ bool check_vector_unaligned_access_emulated_all_cpus(void) static bool unaligned_ctl __read_mostly; -void check_unaligned_access_emulated(struct work_struct *work __always_unused) +static void check_unaligned_access_emulated(struct work_struct *work __always_unused) { int cpu = smp_processor_id(); long *mas_ptr = per_cpu_ptr(&misaligned_access_speed, cpu); @@ -646,6 +647,13 @@ void check_unaligned_access_emulated(struct work_struct *work __always_unused) __asm__ __volatile__ ( " "REG_L" %[tmp], 1(%[ptr])\n" : [tmp] "=r" (tmp_val) : [ptr] "r" (&tmp_var) : "memory"); +} + +static int cpu_online_check_unaligned_access_emulated(unsigned int cpu) +{ + long *mas_ptr = per_cpu_ptr(&misaligned_access_speed, cpu); + + check_unaligned_access_emulated(NULL); /* * If unaligned_ctl is already set, this means that we detected that all @@ -654,9 +662,10 @@ void check_unaligned_access_emulated(struct work_struct *work __always_unused) */ if (unlikely(unaligned_ctl && (*mas_ptr != RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED))) { pr_crit("CPU misaligned accesses non homogeneous (expected all emulated)\n"); - while (true) - cpu_relax(); + return -EINVAL; } + + return 0; } bool check_unaligned_access_emulated_all_cpus(void) @@ -688,4 +697,66 @@ bool check_unaligned_access_emulated_all_cpus(void) { 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; +} + +static void unaligned_sbi_request_delegation(void) +{ + int ret; + + ret = sbi_fwft_all_cpus_set(SBI_FWFT_MISALIGNED_EXC_DELEG, 1, 0, 0); + if (ret) + return; + + misaligned_traps_delegated = 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. + */ +} + +void unaligned_access_init(void) +{ + if (sbi_probe_extension(SBI_EXT_FWFT) > 0) + unaligned_sbi_request_delegation(); +} +#else +void 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 = 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 91f189cf1611..2f3aba073297 100644 --- a/arch/riscv/kernel/unaligned_access_speed.c +++ b/arch/riscv/kernel/unaligned_access_speed.c @@ -188,13 +188,20 @@ arch_initcall_sync(lock_and_set_unaligned_access_static_branch); static int riscv_online_cpu(unsigned int cpu) { + int ret; static struct page *buf; /* We are already set since the last check */ if (per_cpu(misaligned_access_speed, cpu) != RISCV_HWPROBE_MISALIGNED_SCALAR_UNKNOWN) goto exit; - check_unaligned_access_emulated(NULL); + ret = cpu_online_unaligned_access_init(cpu); + if (ret) + return ret; + + if (per_cpu(misaligned_access_speed, cpu) == RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED) + goto exit; + buf = alloc_pages(GFP_KERNEL, MISALIGNED_BUFFER_ORDER); if (!buf) { pr_warn("Allocation failure, not measuring misaligned performance\n"); @@ -403,6 +410,8 @@ static int check_unaligned_access_all_cpus(void) { bool all_cpus_emulated, all_cpus_vec_unsupported; + unaligned_access_init(); + all_cpus_emulated = check_unaligned_access_emulated_all_cpus(); all_cpus_vec_unsupported = check_vector_unaligned_access_emulated_all_cpus(); From patchwork Mon Mar 10 15:12:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010354 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C401AC35FF6 for ; Mon, 10 Mar 2025 15:47:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=8gziYNBLUcvXEfBSham/kLJnRZX8Oe5yUB47l09rEeA=; b=1mMAQIpOmbviON wrXhQs7s0PFraqtpjSEOvfhRQLPJ34BN5jtzltrRzfM8C6QOU8LySEJY+vKUlVjq6BPQeklim3uqo EpDiOH2A9ql5ZVFYT6p4FPRPJ1G6jiz5mwfkrU/KUTAdYig7FX2Mf5z+2fZAcNlkhniVNctc9Mmk3 Tq5hsKq62LbYWke1r2lhe6F+4tzvDp6wwBKkBEnaeUDY5Ka6r29YFGxq9+/LAVaYieMPO5W9IX56s ObatVdonGzHjVVBmCrNVlto8jfKojBFkunlV7kUfEWKHCaF+pSjuTDlGt5h9egLmcNGaPCz0DCTt6 lfymo1z7es9RYr3RDVew==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfLt-00000003FwO-3NmP; Mon, 10 Mar 2025 15:47:37 +0000 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1treor-000000037dl-1dqX for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:13:31 +0000 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-2235189adaeso72912165ad.0 for ; Mon, 10 Mar 2025 08:13:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619609; x=1742224409; darn=lists.infradead.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=CP/QN2TKpQVKty1QPq9K94rdshw9XjhsCR/clUjZxuE=; b=RWKI2/Zvh4sAGHgYxNblMeETjQaSygY0Ih6UtJsg6nQy/GdhMy5Kk2BGm3r7h9Wg0T ALMlgDXSQ1MDr9YRJQKf4FHzfEuy8IVBv99IZ+JPk5LoTFZhjcCn0n1IVEGUo1kD3UIQ 6tIqfTqZ49Qg/mWztBXsk7FafO11rPgw90IS4mWLoW8iGP+oR6gTsIEVgVNazci/oeCo uPJBa7CY2wfAEx/S5BEWVMJX3Jb6mRj0swEeeLw9YY1wQ1gMNY86pxDm14DY/R6xhMnv 2LOrMOPvgho8IAxOFbC6srA/Cnd1lv81vVrWAo5JBWjaZVtvD/lu7fRx7Ln1pc4yTW7k uiUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619609; x=1742224409; 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=CP/QN2TKpQVKty1QPq9K94rdshw9XjhsCR/clUjZxuE=; b=QDz9J/Shoiz4CdY1npAGaa2enSVkoWeiJLd0u1YNC9UUlIrDvKntKDkKU0qopBI4Me tnhHj17idsRN8cy0bmU5XbbkILTjgcom/srSh+dvm92Y54EQMmuTCg2Ekb7N6r8jQxrH UcsBAJPs4Fykm5A8fwXGkORAy0kEztl+mM0pfAhLWh2W0YOrQh8e8mu+is9NPfM/ToQo nZAD/9zVPacFgcwvVWfb+2kvduTd6XsmMNYpkB9l26QTOvmuqnAHV3IYLonzY/hMqaRp pbSNDbl/Fd+2+NM2tcTsaQHINytRJ9ijJQ7QuWCMoQhg4U/Jz7PYPbvQHbXco4aZDWPq AhlA== X-Forwarded-Encrypted: i=1; AJvYcCXMaqDjiyu/ipyOMxoF0ZGaMXekqsKRavgJwnRZVzwtOOzAbrhLl9uVuSksEa1TfEF58fauxfPCJtmkWw==@lists.infradead.org X-Gm-Message-State: AOJu0YxYGD++Z1qyFFPtOLkmRBDqgUOFCFkkWLXVUsEo4rUlhER95n4Q MeUdOO5Sw6/hLYEDtGovfLbf/O6WVDrwLA8rRPTToI30S8yrBi54Kxdw1bq40xM= X-Gm-Gg: ASbGncuy9Mie+X3LVPBsZgEKbNLLeKv3NcQQq5H2EdzHOkuk1abkClAfJbT65BTbiDA qEe2HOaCUgJ2Ao2T7ceEYr34m4gnagkE3HaHvHXDi4cpVOjIfpslwVT7vOwIloqfuCpnlrnYgDh pRxIqjpnLxnEAbg1e5D2EzeNlwE3LIYvf9Q7cfR79aQ2tRneCkOa2ptqoJ1xqC6AbkZYsagB6LG dQIlX1VSmkzMApxcap/3qOyCrriza1Ces/Lo/AnmvB1alX1dz40KDO0PMxylUWz8aI4tYO9BRRF vrTI9HK0pvzYIAG96yiyZyspyZWLiTHH1WFdlejxv2IgejmBuTEE9u1U X-Google-Smtp-Source: AGHT+IE/CwbxNhDp7rRzvfmLqzJMclwTPVUcQ5dvDrzAMSsXdg6waC3I4WKcj3iwXpglVe985eMicg== X-Received: by 2002:a17:902:e84c:b0:21f:40de:ae4e with SMTP id d9443c01a7336-2245360f020mr151160385ad.9.1741619608740; Mon, 10 Mar 2025 08:13:28 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.13.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:13:28 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 05/17] riscv: misaligned: use on_each_cpu() for scalar misaligned access probing Date: Mon, 10 Mar 2025 16:12:12 +0100 Message-ID: <20250310151229.2365992-6-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081329_430462_C802B6AD X-CRM114-Status: GOOD ( 12.38 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org 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ément Léger --- arch/riscv/kernel/traps_misaligned.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps_misaligned.c index 90ac74191357..ffac424faa88 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -616,6 +616,11 @@ bool check_vector_unaligned_access_emulated_all_cpus(void) return false; } + /* + * While being documented as very slow, schedule_on_each_cpu() is used + * since kernel_vector_begin() that is called inside the vector code + * expects irqs to be enabled or it will panic(). + */ schedule_on_each_cpu(check_vector_unaligned_access_emulated); for_each_online_cpu(cpu) @@ -636,7 +641,7 @@ bool check_vector_unaligned_access_emulated_all_cpus(void) static bool unaligned_ctl __read_mostly; -static void check_unaligned_access_emulated(struct work_struct *work __always_unused) +static void check_unaligned_access_emulated(void *arg __always_unused) { int cpu = smp_processor_id(); long *mas_ptr = per_cpu_ptr(&misaligned_access_speed, cpu); @@ -677,7 +682,7 @@ bool check_unaligned_access_emulated_all_cpus(void) * 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); for_each_online_cpu(cpu) if (per_cpu(misaligned_access_speed, cpu) From patchwork Mon Mar 10 15:12:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010355 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BEB72C35FF1 for ; Mon, 10 Mar 2025 15:47:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ltngW466mIc/M2lDZ7fhvqE7A3ScDE/VQS8ffu5ynDc=; b=YnGjMTyx0skH16 Q81lSTamspdJ1J0ff68RMYZrbWac0CFBuI3fMreW5bNXKoYzKDvwD5r4628Mm00OhoQqeQppTyRw/ cmm2k9RLmEqGNvGcjLsL7iIrFkeVf1Wl5I7YxXJo6GritkiMXR2XqTaeFl7rV4/6z4g3OIlROVoTu xFvQ9bL47HJ/RdbweySXTimkwV8rgVgGz1zDQ56QRqEycKwu3n3mOLk0O1oQHvo9ksWEZZTzL4ihh Bd+GYJvVeXDRS8OxQLoCA9MpU0iH2l6cpqA9TKOlMbncQ/j0axBwVWBP9N1AOrRY1yKf+Zqxm6Bvg jGPFOQ4wSBoHgT1Yqefw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfLu-00000003FxK-2T0A; Mon, 10 Mar 2025 15:47:38 +0000 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1treoz-000000037hQ-3Nyl for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:13:38 +0000 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-223f4c06e9fso72941605ad.1 for ; Mon, 10 Mar 2025 08:13:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619617; x=1742224417; darn=lists.infradead.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=Radg/O1kYDcS8p0IZNGBH2Vna601zEl7dWErY3x7IKQ=; b=3dKN2OS+oWMOrOnfzgSOtxAz2g+QzJYOWD0mnujyBvxyTNSnsmc4l1/GRbvms8tXYs LVRnfZ8cTL2p7ycdX4KnHk+ohxJkX2Ut0AxRwCvrUqZktiVwFsrZrqT/flIaUa13A3x4 D7uEi/rYn/nMQdt+CUIMVF7eZn9ro29qEn0CO2rhh1deaEhST7aN/1bBErST6dy98160 8otTS2GuMz+gKpj3yeSeYnj31ONWsEiIF4nykp1cRu8zjYeR8/SV/4xn76OOcCJsGN1Q OVG1NsjKvGYfTD3Dun/ZOvWHmE0qH6eAvSEeQxoWvLiVUUZF536BVQY3OxC/nujmh3nd VO2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619617; x=1742224417; 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=Radg/O1kYDcS8p0IZNGBH2Vna601zEl7dWErY3x7IKQ=; b=pP+xzDbSE+ociDrN+7RDre1dAMY2/SMGaEeFSbxL45Hh5L+3G2ERXIm8g9BBnRzCec GNnKCHlH8s50r10QePBp35nDDYW3gpEmNqkiDPrvT1hTr/Xps0CBY5FU2yVSPZZrvLJQ ZXA+BUjgIJPFWobAAXGN6vh05rEgJz7cdvezDnH1FJTN4j0fotHdeDZd2vp8x9BLC9Al 4s0dGyuHp+DYXeN192Q6k2t9X+AmiUfFjQf3NeHyseSI/x1yiK1qqz4mri/e1q0wfdDB T5m+9gbFjdm/VS+EFT6D0SvR8LOIdeBjiwT7HD0F7xJjQwr618Vi4NKYkMjLj0veYefP 0fiA== X-Forwarded-Encrypted: i=1; AJvYcCVieF0GSap5o89oy8J8dpe/ZG7UwwdcFFyhkvjnuD5GuM8L3J3PjvIPeD7XC5DU5cM99eG6r2T7k9qWZA==@lists.infradead.org X-Gm-Message-State: AOJu0YxCDy4Lj9oUWLIqBvQ8jEuqgyh2aNZ4Kqh0FucYi9hkl3yDMdYq DGep0jklpWSRnzuMtEOBM2RPGNj+CG87gaVWgJy0BJUohA6P+pg2Oo2zCV26RFM= X-Gm-Gg: ASbGncvJFwZZW6hi9jGWHJ+k365qXC+OkTX1oqThdjjsifmeraUGnYLw+9e3AoeDtKS zMzWoTJhiR9lt+KH679asVSwD/HBKuEbbtrgVsMQfQJY3PqhPtXmPg2xtl3yJQk4sUvrAjWoGv9 1VJLPal2FqOCjX/9S52oENyYS/F4p7x5DB191oDBqvZ+hPYxdjdtJ7PWPO8mVnCayFtVGDZDn2+ x4CrUi72Hf3exDouUwFfigmh6ab3PO0ylPfLR6+vIRvX7u1QjZNPzaeN5BoNpElwOaE1D1mn6r/ bv2ieFR801XVDlnJ7xXQ8Gfe3lzMveLhGSXkByNzC7NoRQ== X-Google-Smtp-Source: AGHT+IFYtJx1zpZXoyRZ/KHJTP5G1HNeErNj7hP1Uj5JhhNtVjlp1IKO2nyoOwTegiQflbbotJG7Sw== X-Received: by 2002:a17:903:2308:b0:215:58be:334e with SMTP id d9443c01a7336-224628603d2mr147459315ad.10.1741619617154; Mon, 10 Mar 2025 08:13:37 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.13.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:13:36 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 06/17] riscv: misaligned: use correct CONFIG_ ifdef for misaligned_access_speed Date: Mon, 10 Mar 2025 16:12:13 +0100 Message-ID: <20250310151229.2365992-7-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081337_851535_D0237D4E X-CRM114-Status: GOOD ( 10.87 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org 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ément Léger --- 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 ffac424faa88..7fe25adf2539 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) perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, addr); -#ifdef CONFIG_RISCV_PROBE_UNALIGNED_ACCESS +#ifdef CONFIG_RISCV_SCALAR_MISALIGNED *this_cpu_ptr(&misaligned_access_speed) = RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED; #endif From patchwork Mon Mar 10 15:12:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010356 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 027F2C282DE for ; Mon, 10 Mar 2025 15:47:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=rskNOFn283JNL34tkBQLBTsbWlru5zf1YnBFK/97J20=; b=gImeoUBB8nOzg6 o0QwP+9Z9BHNus1zltdq75s5clxZvBgCPz+nCBHdUFMtUVd3iB28yhv6WwOpagOp2ubXOwthl2v5k enDLYFMaRKZavWGxkaBXyqRAt41lhaX+qvuGgTQVzdcc8wZvWKtr5KJY/9BOhVWrODOE71MGHsjjz zz9rLK+rjY0DIYs4sS9yWwR7DGjtdGcnWIh6GT1L6G6xbdIc2zGZP8t+0V10fvgu921Bxx5BTENcW 6j4azCdIhbCvp+SMKUpRTvoT23FEb0VujkzAYpgLBWeURP3ODjHHTV012VBqTNQIGysZ2iJndSFeP OLPnNmohCarLvh1jjmCQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfLw-00000003Fzo-0oD8; Mon, 10 Mar 2025 15:47:40 +0000 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trep8-000000037kU-03BE for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:13:47 +0000 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-2243803b776so68739075ad.0 for ; Mon, 10 Mar 2025 08:13:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619625; x=1742224425; darn=lists.infradead.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=yCBi+dVMU97ACIzU1KLcK/YVJVSSJGwq4MBxilXjNH4=; b=l40Zjtt41MAgR0VHZ/ZdG9WYohEwvn/HaZjBuYMe8FTTJN+HNRS3Md4XW+uwo/lU4h 6vgvjJXlXGeqnHKS9PWmxAs6zocDro645D8rFqzhtsDU9BKopiC9bgiic3nD2WcaEp28 0TNBruSAH7/hxhWRanVA/lgZb1nT4cW8DW0IkqBLZIyTv3IGiOTntbP/x7ggk5qrscHD tq1TW6mQ0vv9y1oPGOUSBtgpOqdlo6XgSDICWq+CGOV6WnSwhxXfdo2hT3aKVK5isDFG MRFhtyGD7Wv2oAlIK20FirccAF++yBELMKCz9VIo1cEUwa4G/8cvgW0Q+WQgNdWzVwm/ Ks6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619625; x=1742224425; 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=yCBi+dVMU97ACIzU1KLcK/YVJVSSJGwq4MBxilXjNH4=; b=XYyEFL9De9mM06kcNKu2wKk8n6wpNTml3tqEJJWPhMWjydsIVqnk6DjOSRvYrRfHDQ p51HFyRJuPp/n3ciAhTcSXD+39xzo0143BMKei2V4NQYkP+gFPEAki6oyl64yQz7hQmS aOZUb7aBXFyrda93hTLYrV5I/wc1qfjPMgAgK1OWkOqnxOZSztC2jwT3rPu6DFeOil95 hj81QOqmuuZv2tTVxLwpjTbKS1/f64EwUTxy2TqpdVEakHy5w/KkcIjjaeY0KvymFOJq NxL1UeUYsNBUNbNAqGrf+rwnwVPp2dZc8Ct4x1oUWjFMo2f67GPktD66mqdKTCLXrZRL 9rHw== X-Forwarded-Encrypted: i=1; AJvYcCXZPIsbFrNdgzzZFnPp7cev1//zT9BnYb1A+stz6h7XKyQqFr4EAB4LLZ0yyFbuJqkg/mxebA7ICZ6jQw==@lists.infradead.org X-Gm-Message-State: AOJu0Ywey6bsY9tMYHGDBEznMJCTzOilWPgJOCSO8ZfdbFOn6gRAu9XQ G/+13KvZfTbGQIpUqKziXgYIagUbRfYKPh9fSgGlgPHBOb4DNPOScOjBb3xjikY= X-Gm-Gg: ASbGncsWlL4V4MDZWi0PwfgvthzkUekSech2ZgI0vYH2uc3sfHPcaAujX8GUwd/85H9 0a8NX/oTK30pB4G+KR1PsSJ7EfgX9VoRmPsedgk4Lg/Xg6vk+9hHFHo9ulmmb04HPvRK+MlaBa+ iyZOpg7N/+Kl6oy/9ByjVDT6R9CxFzjHKFfH1ZKftKkXHfMm5LUYZqLJrzyKSUd9weSl2qZIoDe ejFo7UciZ/OVvYAzcbTTBLaKlTcd/+uyqOwT3+KCJlb8qSZGniMdWtQ0UXXSCKFuHkfoP2sjI+L dgcupcyyBPJLbmhN9OgqfZi3uW0zBLycv6lYcUyqUv7lDg== X-Google-Smtp-Source: AGHT+IEfHZuAa7IrsxCaNkSR7EwHAs8m2MJ5ac0OEsbyXjAWI9w4OglgcFN0I6P8WNfULj+ZAYb2cg== X-Received: by 2002:a17:903:283:b0:21f:1bd:efd4 with SMTP id d9443c01a7336-2242888ab0cmr237920295ad.19.1741619625536; Mon, 10 Mar 2025 08:13:45 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.13.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:13:44 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 07/17] riscv: misaligned: move emulated access uniformity check in a function Date: Mon, 10 Mar 2025 16:12:14 +0100 Message-ID: <20250310151229.2365992-8-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081346_049897_C27A2CDA X-CRM114-Status: GOOD ( 11.91 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org 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ément Léger --- 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 7fe25adf2539..db31966a834e 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -673,10 +673,20 @@ static int cpu_online_check_unaligned_access_emulated(unsigned int cpu) return 0; } -bool check_unaligned_access_emulated_all_cpus(void) +static bool all_cpus_unaligned_scalar_access_emulated(void) { int cpu; + for_each_online_cpu(cpu) + if (per_cpu(misaligned_access_speed, cpu) != + RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED) + return false; + + return true; +} + +bool 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 @@ -684,10 +694,8 @@ bool check_unaligned_access_emulated_all_cpus(void) */ on_each_cpu(check_unaligned_access_emulated, NULL, 1); - for_each_online_cpu(cpu) - if (per_cpu(misaligned_access_speed, cpu) - != RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED) - return false; + if (!all_cpus_unaligned_scalar_access_emulated()) + return false; unaligned_ctl = true; return true; From patchwork Mon Mar 10 15:12:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010357 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 36DECC28B2E for ; Mon, 10 Mar 2025 15:47:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ezPF9RbRKyoyHdB+6Ix0smuGm+9an3uaXgKFFcrobHg=; b=a1UPrDHOrCEZsX Z8pD2s927HqyBS9ATduBfnmi1tIu0Bbuuv9OYaIv2JVZ+1GuWomO7zBH5Wn+/P4PTOGuI5IECe50H Q4tgBAZWR4iZ7ad4zUZ4W5rYjis5q6g7vd3sZpM40hkhUy8tub13rq3O6lxSZjlZ3WcDh96CobFE5 3MYpje5Er2UJCvp+q0TaNqqpZGOjaWRXw1ecQqbwctAYypXpFcZcGeJlVX8Ts5PU4yhNfW0w8UqRN 1zGljoXnYAlplw9xrjMR8RQNAPL/rtKG6dv7+DpKazKC5uctpusrcT4BLC2I4KuQGEKqeQ8AMJSb/ j6dE1gZ7POAb4lbaq9lA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfLw-00000003G0r-49Mx; Mon, 10 Mar 2025 15:47:40 +0000 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trepG-000000037nv-1wbJ for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:13:55 +0000 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-225477548e1so33349615ad.0 for ; Mon, 10 Mar 2025 08:13:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619634; x=1742224434; darn=lists.infradead.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=aJEE3tstWlxClRLN5XCqSGWhwaxxi8RTX0eYkvDKRxQ=; b=D+JHsFOb6sbgkr7O3kYZmPgQqv2auuhizLNkrN9k/9PaDbfiGYw5itXny1blxf4Xbj 5Mqx8U/hvZEYDuQ+V/KOKfjkaIm0waOHqo4Q9wPTwDk2YSjr9VoWFYIXggMNRJ6ypkFc N3qBEqzGEKB6TrG3UEHi7EhBCgmrGhobEhjCG9oG9gRNf7kVXXIWX8NGLSjgrBjxjA4i pJgJqcdkHvZPCcL7nvjsno1vKmZH5+bpBRFhH7LlThATs99G1zIt/0Rat/ouim/FUQ4O 6ebUc3KdrGPJfscGuV+VE9Zf4WvkLKWnuWjUStrdtoFBSS3eicEFtuTX/hApgniaW+On djFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619634; x=1742224434; 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=aJEE3tstWlxClRLN5XCqSGWhwaxxi8RTX0eYkvDKRxQ=; b=uNSyoZltFcLv4XwftZGYzXaFxynr0UTW8TyhvK/sD/y8at7acufIcYc/P5PP5Yd3tU tkE/7R/8sfQkuuEokltayxPd+b8vSDpIpgT19qZyY1myFkHPNY/VcNeJ2uH7WJHepHFb 8WRTaXGxsh7GvKRyw0g6ZSSnsz0tdumQLoiT7KoN2DrL0ALTQaR6czHNdtJeUKKINFiE irHtJEK6oMlyiyVrDb8VqTtj6Uea1e1RZb0tWz2LP3NoKF46I6nXoQG7cTSHEpJfEnUm Wx5W1234yRo4q/Z7D0hILiA+lIETxQQuPWYXlGYfUqIQpkWWSFSaXXU8gB0VEGLTS2FV 3d1A== X-Forwarded-Encrypted: i=1; AJvYcCWKgCrbKXk83zAecUGmXo8810w1bH82trdedIanOQtjPP15QDq9Nh0mmeJHmJ4+7TfI/swgOS5Sc/pv3g==@lists.infradead.org X-Gm-Message-State: AOJu0Yx4tP4TG85eqZUS0a5jwEtbRPGVg9hqZp1AZr2nIJ++Q/bqaiFR xQrgILcD9ixASIdQbLP7yJhkdt1dyrNE1dqQrYQHYqMsqM6AiZmR3qnBJ13l5Uw= X-Gm-Gg: ASbGncslzV3g+WSEvg5hNgtzhb7Jvfg4DsAP/pj4yyNYjG61PGnIBuowa5jzlxiCzB9 jTcZ40UOWBSatXbvZeaPZP6nmaOzAOIq7LrNcz1KOTfF+4xv8SW0a5CXZvgiBpc3oVYt0DvbaS8 rJvPWRcTEKWZsOPCkjzc4CLm76tbMRncGKqHm2NopTck9CfeAEP8/8m7LNJp+xwORroEFNrzWHe UonrWb61vkjZNOcona47s7brMSZJbh74tMAHs5VhxxqIkLF1/KvbHJ7STwQUyKDHBS67l/6lhbH dG3NipRVE7RXRLeAhn/Xo2EER0bLl3tL+RqhS8WDUISCgQ== X-Google-Smtp-Source: AGHT+IFu79SrTcHr6DQ0LZoB48TuSJ0ALQO1FccV1+6ehx1qbYGTJAEYU8+IrRgycH415AfK45aV/g== X-Received: by 2002:a17:902:f68a:b0:220:bcc5:2845 with SMTP id d9443c01a7336-2242888666bmr164594065ad.7.1741619633926; Mon, 10 Mar 2025 08:13:53 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.13.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:13:53 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 08/17] riscv: misaligned: add a function to check misalign trap delegability Date: Mon, 10 Mar 2025 16:12:15 +0100 Message-ID: <20250310151229.2365992-9-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081354_501908_EA1535D6 X-CRM114-Status: GOOD ( 12.08 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org 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ément Léger --- 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/cpufeature.h index ad7d26788e6a..8b97cba99fc3 100644 --- a/arch/riscv/include/asm/cpufeature.h +++ b/arch/riscv/include/asm/cpufeature.h @@ -69,12 +69,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 bool 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 db31966a834e..a67a6e709a06 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -716,10 +716,10 @@ static int cpu_online_check_unaligned_access_emulated(unsigned int cpu) } #endif -#ifdef CONFIG_RISCV_SBI - static bool misaligned_traps_delegated; +#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) && @@ -761,6 +761,7 @@ static int cpu_online_sbi_unaligned_setup(unsigned int cpu __always_unused) { return 0; } + #endif int cpu_online_unaligned_access_init(unsigned int cpu) @@ -773,3 +774,15 @@ int cpu_online_unaligned_access_init(unsigned int cpu) 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); \ No newline at end of file From patchwork Mon Mar 10 15:12:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010358 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B8677C35FF3 for ; Mon, 10 Mar 2025 15:47:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=LWyN2HA9Zz/Oi6kWmpTIPB2zuBmS30gp46WURUnSLOs=; b=YiC6tXBbB+D9LZ JQxjoAvCv7glRf7zTjKYbW9uoV+hDkCDirEbs5Vyi0uoiw3N3PTwL8oaWCr3o+nytffbLR+ZIBATT dbm4yq3RLyABKnaS/SWKhEC7/U/MtF3Kr76JhFD1rQGJB+jMPAq+07XeO8N8HOh3i6pfDAYJkqy/o 4l9CeZJ0qCcsTD0CpzraacnxVrOqOHv2JJwmiJtmHMlFV8yq7BxHM5cAQm6A+bchMmtIFFLnxkliM r0yKR2cD0veJMDX5GmlgaceBKlSnQoO1YflvJYjpbUhF+Q/HAoh338t3jHaDizX+fr6qFLnMENcBp W2584j2iYPBzCEoziMIg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfLy-00000003G3a-2mtG; Mon, 10 Mar 2025 15:47:42 +0000 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trepP-000000037rS-0yED for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:14:04 +0000 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-224100e9a5cso80779775ad.2 for ; Mon, 10 Mar 2025 08:14:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619642; x=1742224442; darn=lists.infradead.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=z9Vwlc46bZsQyt2QxW9m2l1M9vTOam7Mm6HyDDfLEZk=; b=sIWiSGeaaYiTiz5eDV/+CIVr+sOLZzK9JjZcSvi/YcTMkFZcW468BSAT8yYcxdWmZv MSA2xP5+YWsR0OUOb00/o3v8WUMrB3nWrkgJ69xSh6tD5ZmroLCrjgLQNFq+yKR7gsXW kN+sYbVNDQ+lvsOrYcyeZ7/FNlaXx0xXKZeSpXdW9mWqIeHc9Rw+n6Y5Icfar7W1YCX9 vK1qPpce4Fm2zVZxmDyqAC0m2/8z0lnKN4I3X8RQFvYazHMgwUNaOj3Dz5A8f3swBMoj 5VGLOHSVZ1XZpWVfRoIEWnRk5LeCtOOniLdAd7XYGpizTlgfAt6hkY8daTwpLSOPzvGw J+rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619642; x=1742224442; 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=z9Vwlc46bZsQyt2QxW9m2l1M9vTOam7Mm6HyDDfLEZk=; b=cUf9tj+Df+JbQlhPyjQvEu35S0DRyezD8I0tsHnKXQtFK53ZR410rRQhl2SnZ8bUwr c9VuI18ymmdCaKwLt6SP8D43MM/Jga4sjr8JEWEo5WgYUYRT4LndQD7zmNDZvpZCSo5g XkAG8gh0XRHrJ8ypyV6xLB493P/zUpYpSeR/VMzOwqrGQJ9UjKAeI540NiQtBN1WWuXj 0EAFR9c2bcic+xcNnsfbDI0b5G9K15lSi49mtdRCtV/ZJFYvb3VbcNXVj9353+M0YxPr /uD1bicq6nn0/SqZHlOK6yFNYFlvT6sRkJLIXZbD5jDafsNWebO2hhI/m5zo2iQoZ38V NYrg== X-Forwarded-Encrypted: i=1; AJvYcCXJh2YZWBFaZ8RUa/MwoJrtz0GIpfaiqGUcY+81vnHQpDdpxi0DjMLcnwpNix4legmoIVXxOhDCPrGsMw==@lists.infradead.org X-Gm-Message-State: AOJu0YzthBqgwkBn/XRrr+WE4koAcPHfr1Rn7rdWx612kkeXQMrDwmrX 9+iZQxxPrRxvi7zt06MT4Mz1g1pyqxg8lRqM4LtfIko6mfF2+j+YEjCLZjkLeLM= X-Gm-Gg: ASbGncv+kNruk1KXZaoaB/RduEbVe54rmXA+nup4g866h8IFHyC/kN9/F30MNtcTDqj tE+Dsuf5FnPKoh4uibW7jEBYsuUDObAk1xwpQqAmKjt4IoVAFzX+c4cOnzA43ZRwj48UstF/d8c pLD5aR9irTqXn8IZyAzG4/22H+09SjC/rwlflhaeJMqOuPl8zIR8m7xlKGva3QFbYoha7L35khA qTOJnUuK434uvWCHLjs6bQBihdzNfqkWpVRpVF4MzrsTv1/5TXqwrcRGF44GzlaT2Q1t79j3SMv C8I4kG8agWPXpMdRLZ/+WHlXCRZkf5uOv8rfsL67tuvI9A== X-Google-Smtp-Source: AGHT+IE/Wftdkd3zlZdL/ywUH78DLaDAVcrFF4WfEuA9Q1JYQZM9C8xhDZMPOQ9HkccIr+uMejIbbw== X-Received: by 2002:a17:903:298b:b0:21f:4649:fd49 with SMTP id d9443c01a7336-22428c221dbmr239345965ad.49.1741619642512; Mon, 10 Mar 2025 08:14:02 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.13.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:14:02 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 09/17] riscv: misaligned: factorize trap handling Date: Mon, 10 Mar 2025 16:12:16 +0100 Message-ID: <20250310151229.2365992-10-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081403_262070_2B9397AA X-CRM114-Status: GOOD ( 10.54 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org misaligned accesses traps are not nmi and should be treated as normal one using irqentry_enter()/exit(). Since both load/store and user/kernel should use almost the same path and that we are going to add some code around that, factorize it. Signed-off-by: Clément Léger --- arch/riscv/kernel/traps.c | 49 ++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c index 8ff8e8b36524..55d9f3450398 100644 --- a/arch/riscv/kernel/traps.c +++ b/arch/riscv/kernel/traps.c @@ -198,47 +198,38 @@ asmlinkage __visible __trap_section void do_trap_insn_illegal(struct pt_regs *re DO_ERROR_INFO(do_trap_load_fault, SIGSEGV, SEGV_ACCERR, "load access fault"); -asmlinkage __visible __trap_section void do_trap_load_misaligned(struct pt_regs *regs) +enum misaligned_access_type { + MISALIGNED_STORE, + MISALIGNED_LOAD, +}; + +static void do_trap_misaligned(struct pt_regs *regs, enum misaligned_access_type type) { - if (user_mode(regs)) { - irqentry_enter_from_user_mode(regs); + irqentry_state_t state = irqentry_enter(regs); + if (type == MISALIGNED_LOAD) { if (handle_misaligned_load(regs)) do_trap_error(regs, SIGBUS, BUS_ADRALN, regs->epc, - "Oops - load address misaligned"); - - irqentry_exit_to_user_mode(regs); + "Oops - load address misaligned"); } else { - irqentry_state_t state = irqentry_nmi_enter(regs); - - if (handle_misaligned_load(regs)) + if (handle_misaligned_store(regs)) do_trap_error(regs, SIGBUS, BUS_ADRALN, regs->epc, - "Oops - load address misaligned"); - - irqentry_nmi_exit(regs, state); + "Oops - store (or AMO) address misaligned"); } + + irqentry_exit(regs, state); } -asmlinkage __visible __trap_section void do_trap_store_misaligned(struct pt_regs *regs) +asmlinkage __visible __trap_section void do_trap_load_misaligned(struct pt_regs *regs) { - if (user_mode(regs)) { - irqentry_enter_from_user_mode(regs); - - if (handle_misaligned_store(regs)) - do_trap_error(regs, SIGBUS, BUS_ADRALN, regs->epc, - "Oops - store (or AMO) address misaligned"); - - irqentry_exit_to_user_mode(regs); - } else { - irqentry_state_t state = irqentry_nmi_enter(regs); - - if (handle_misaligned_store(regs)) - do_trap_error(regs, SIGBUS, BUS_ADRALN, regs->epc, - "Oops - store (or AMO) address misaligned"); + do_trap_misaligned(regs, MISALIGNED_LOAD); +} - irqentry_nmi_exit(regs, state); - } +asmlinkage __visible __trap_section void do_trap_store_misaligned(struct pt_regs *regs) +{ + do_trap_misaligned(regs, MISALIGNED_STORE); } + DO_ERROR_INFO(do_trap_store_fault, SIGSEGV, SEGV_ACCERR, "store (or AMO) access fault"); DO_ERROR_INFO(do_trap_ecall_s, From patchwork Mon Mar 10 15:12:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010359 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A3013C282EC for ; Mon, 10 Mar 2025 15:47:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=6OzlSLmEDxmTZGGOWjgBQ1lVLRqdyG9JO3abRrCdyvI=; b=TxnRosY7cWb3Xu J+b0pFPcDeLuAH+LHpdWd8P0OhvGVdHDajg3AjFSZRiGcp5wARophtgMQAjesfxF5ldXzWCjjCLWt GtUjeTCHVX0f8cohvqZy17e667E9dRRXT2zjjdEqYXgUWyBySMfAWNO7bSCXiuzBbpYmkJzg9dCFq IUpesNkD0+2rWp62o6O+vcnqY+saM4MoBSx8WlC+V+iBM5+i/PgGumOsDeKDovjkQIzbjHAo7uv/+ 2WkC2+ZePFYqnjmPb/I0GY8SKkbdi1qck1AyAl+Y7lzWe5F5pPNyrYMO5GMqGuUA0iz0Es5YPPp24 yDfLvMRPNDXxyx62WXUQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfM0-00000003G57-0386; Mon, 10 Mar 2025 15:47:44 +0000 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trepX-000000037uU-2PiP for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:14:12 +0000 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-224171d6826so64657555ad.3 for ; Mon, 10 Mar 2025 08:14:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619651; x=1742224451; darn=lists.infradead.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=NTEMNxwWUDdJDHTSWR5BaYosnBDapUg7Ev6g031TeV8=; b=vzcM28pMTpXkhcHmcZMbN2IN45ck0WszXVk1M1epcpQo4mbTBXF8SUPZRoLusYJqwb 6bIau4KoFN2xPqFtmAb4Rfljv5Rhlu8Cl2kcHSH4XnNljo+4tHysaacZuUFijadXUWW+ fkMUbdwA4mapF3zhYWcmrxKlbnmsxb5SzCNtNdg7WkeUqGrZTFNaSBmOg/GGLLaR+p05 4DqTypIeEy028tNiC0ub97pGyOpF+1kt7RxFBKOVL60eh5+ohVTLP4pFd/0rXS8QPdrO /R712on6+oMXgBGU5uX2oL1tdll5LAGI7xeqx0DOepYZ1TuJ9Is1fMktPDHwowKLU1Cz wuAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619651; x=1742224451; 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=NTEMNxwWUDdJDHTSWR5BaYosnBDapUg7Ev6g031TeV8=; b=G/Si9B/T6MVul8EG67xuZ3h+gGnLtkNmAkYR2zRZ56O9Pr8YHVCjKpedCCsYIesvfJ gAHUrdVDdFBaoS+BtoKfzz3LutYVMp4FCEFPlULGLQYE8onE4QhWnjsaXDouLVuEi2Wb Kz+jGt+RSrYtWmLZGy73/0r5VSlgqKLao6dsmJ9j6b5GrDd90RLuuleWhqwP0Jfn++6u Q1bZwGpiY4Toz5uDJTBeqGEGxCjJn1v5bbE4jujbwOrRvaB6YITz3Ls/hLGwERo1MkwX l0V7UUnaCCEwAK4ThSsRXEoJwtoArndQ7yKIvjlzKiyDKmACMj0NPYH/e+1BMGhy88vE xWUw== X-Forwarded-Encrypted: i=1; AJvYcCVwETMPNEiWo++6HH6Nze2OJRitEAT9t5BgUGwIgFoMydn/h4HBXBovngnsxrZC1nRd/qhkM1zYHAXqUg==@lists.infradead.org X-Gm-Message-State: AOJu0YxRjRxGZRQM1Xc6opE/BI35pal2CshgvUN8QGhPlvX8KkJYjjO2 BylKH+JGn81svI5sSbJft8HCnJYSvTSymNzT7g17aE9w8zNVv3ZYgiQXDZSXIks= X-Gm-Gg: ASbGncuO93soNp2htBvfS3ytQ67yL2XHMnkrU0qZwS9488V4uGgNUtkbhQ0nwD7FVua 7ZmqGEW8YYcdpQsF66rDsUS+jisI+B1fG5yfEhYnCXtbjsIOcG/XFAdbuMy/ITg/F1lTJ33eJUA 7+LJYAlkYCT0ijxsRrpVbc1g6ai/h8utSQl9u73SF2lrt0jKB6p2TQHY0bBHrhQnu+xDYKhBYfK +WTTamCn1PTVH7IUqYSKg6Acl+Yl/cFtzdW1wEQke6WL0DKk7Nt06M5FYrg4IkpZPgY+ng6G3J3 EffqpoMdUKcc4ce3QChXIQr4H7hO2HbIteM/gha8hZ5NTQ== X-Google-Smtp-Source: AGHT+IFrDg0cMkxcg3xxzzqPCaOQUBTnQwFpZHXCVcuWzC1x8fPkcfYHuG4bXSCleAdszR5qGgJy/A== X-Received: by 2002:a17:902:d54e:b0:224:1ce1:a3f4 with SMTP id d9443c01a7336-2242887b415mr253277735ad.1.1741619651099; Mon, 10 Mar 2025 08:14:11 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.14.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:14:10 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 10/17] riscv: misaligned: enable IRQs while handling misaligned accesses Date: Mon, 10 Mar 2025 16:12:17 +0100 Message-ID: <20250310151229.2365992-11-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081411_613761_16BC0456 X-CRM114-Status: GOOD ( 10.70 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org We can safely reenable IRQs if they were enabled in the previous context. This allows to access user memory that could potentially trigger a page fault. Signed-off-by: Clément Léger --- arch/riscv/kernel/traps.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c index 55d9f3450398..3eecc2addc41 100644 --- a/arch/riscv/kernel/traps.c +++ b/arch/riscv/kernel/traps.c @@ -206,6 +206,11 @@ enum misaligned_access_type { static void do_trap_misaligned(struct pt_regs *regs, enum misaligned_access_type type) { irqentry_state_t state = irqentry_enter(regs); + bool enable_irqs = !regs_irqs_disabled(regs); + + /* Enable interrupts if they were enabled in the interrupted context. */ + if (enable_irqs) + local_irq_enable(); if (type == MISALIGNED_LOAD) { if (handle_misaligned_load(regs)) @@ -217,6 +222,9 @@ static void do_trap_misaligned(struct pt_regs *regs, enum misaligned_access_type "Oops - store (or AMO) address misaligned"); } + if (enable_irqs) + local_irq_disable(); + irqentry_exit(regs, state); } From patchwork Mon Mar 10 15:12:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010360 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 32919C35FF1 for ; Mon, 10 Mar 2025 15:47:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=AO0MS0BtwQ5nKS4Z/oRoqLEm/IMjOjn2q8Fn0I2FceE=; b=QIP5V1AOoMNjJG iXuoYQ4VA5s8yP+OTZqnINWK68Y5ZAdn0jUEastRu+x5dDRPM/gy9C2eKhsNoHQU2kZcTv88UXoWJ olIYXIHxDTQwG3PsUsC3h5tzJuSDYa4gD69c6xICKqJiWwhNMlCvJZqd49Z1KmZw1vO7Y9XAmJV58 xMZw1p62ZPr9ok+qrb8qD1bLeyoLQJnUQdZK4BV24CcmtynggAIS7XEYcs3A/ldzABY72KkyfzsmX C7S/Z2FCILAJbkHl2RKTnWaSHnAzJXOe7AJeHnlxubc7z24McEwaj0UotrnmaKpTUGtjn4JctWEG6 EgoWqIbCGQeZr0ZUkRbA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfM3-00000003GAH-04iw; Mon, 10 Mar 2025 15:47:47 +0000 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trepg-000000037wu-0wUG for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:14:21 +0000 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-2239c066347so74904195ad.2 for ; Mon, 10 Mar 2025 08:14:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619659; x=1742224459; darn=lists.infradead.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=0Ne6qRsQBgMn6Z9TbFB4C5/y3IwlTc1J69dL1IhT4E0=; b=NSt01MNwp10AUTotyuJ9t+XlMVEyGZ8sKFcjEW9b3UURIFU3v6157YqvcHXI8pNZjk uOnyrMuGgqkH1rHp0lMvHeKf4PxFNNn7od4BZEvXolLdGkCoeT5qAZcvbHSEiii5j0kN uUsEyTEEZpEXoEZQv3soZeOGt0Lg5aWlyRtJatu1noGqzflzGkafNNkof3FsN8peDbs3 WTuhktlI8qGXjEDfkv04lnFXmCo0EcmPn4cLfPkZ+T3m6y6XLrkMBWB3xGZlvDUd3PYo NF/Ovb/yTeyzPVbYWH88qapwA1QrgHLlpoD/qWhRaqlyObkXqiD1gOcJhXXZ0WrrmAuD J6+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619659; x=1742224459; 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=0Ne6qRsQBgMn6Z9TbFB4C5/y3IwlTc1J69dL1IhT4E0=; b=qJI008BwhL/tP6mcyNfsfR6WbnObzK25EDVr81a8UMgiHdxTjBF9cqAqisOn+FVkWp s/jurmWcFK4oaZMeL1fydzDsNcwO3DxrX4tLJ6OmhKxBbHgYpb8o/axLVRYlEIaVMu2o nDfW5UrbSRJqGBfaSmEhrKGwdtonnjFVXQkGKM5KLXVTY8dvxEQrrSiPKqXLKZT7Jhry y/+1LLb+iH3oj5DIsqGzVNSOn3WERkSnEdG5wZEEE6Z5bTNUJ7Azwr9lM9Xp1qJ92i0o 6HohSToBomrNftn8VVo444wtXNJit+mQzwAY4iETWnDGdW2JVVJcZAJsBFHrMtr7l2kn cYpg== X-Forwarded-Encrypted: i=1; AJvYcCX9kwEN3ocsoSTh/1MF5OK/NbR6sAwQv8iIZ1hSEhy92XAd9Lk41h2ybn4FefF4Cxi1jjUrfdx2Z2Yq1w==@lists.infradead.org X-Gm-Message-State: AOJu0Yy6uEFwYeCR4S3o6JvpTI55plEtglSmkGqQe9b4aGrvdoCdhhsZ 4jxygbzSX+vREOPB++6OySKzCNvmR0mQcJl0ypMQdYg7Uod3M8DzkQ1+Kv/WQV4= X-Gm-Gg: ASbGncvz8/pRbIsQ/izLE/O7CUI+gpbaYEGX2M40tduwW5bAi+lNpBwbae6MWBPcKTQ w4X2lI66jrHjE6jQun2pQFpioSzlV4C/aMQFA+b6WE67L0MEEXJ9kNpmqvOGWTyYKAfEnN/hB7o 8MHiUwPovnhhdC2XcxuxhdZLV/8sevXFoQDZfHe/SHnjhZEp8r/JERoW0rfXO68SLxOwe1EIRZ4 XYNoqUK1BXyUiErZgy6IMwetF1muvU0WCuSix6uvVE3r7iIh6PVuhMYM2hX6w3yNniW8KKzi+Zt KIDlLSljvcgDFJXcM7cuov+SM0kUNaCWiIuiWKwEV7E7rg== X-Google-Smtp-Source: AGHT+IHou97UuMHPx2aRC5ipTZybHeRQW/gREfJF/XOKkR7oov9xPoqimKZKRudGRu1JoJNuk3RSLQ== X-Received: by 2002:a17:903:2405:b0:220:fe51:1aab with SMTP id d9443c01a7336-22428c05613mr273654235ad.38.1741619659507; Mon, 10 Mar 2025 08:14:19 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.14.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:14:18 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 11/17] riscv: misaligned: use get_user() instead of __get_user() Date: Mon, 10 Mar 2025 16:12:18 +0100 Message-ID: <20250310151229.2365992-12-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081420_256783_930A99FB X-CRM114-Status: GOOD ( 12.23 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Now that we can safely handle user memory accesses while in the misaligned access handlers, use get_user() instead of __get_user() to have user memory access checks. Signed-off-by: Clément Léger --- 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 a67a6e709a06..44b9348c80d4 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -269,7 +269,7 @@ static unsigned long get_f32_rs(unsigned long insn, u8 fp_reg_offset, int __ret; \ \ if (user_mode(regs)) { \ - __ret = __get_user(insn, (type __user *) insn_addr); \ + __ret = get_user(insn, (type __user *) insn_addr); \ } else { \ insn = *(type *)insn_addr; \ __ret = 0; \ From patchwork Mon Mar 10 15:12:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010361 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 01179C282EC for ; Mon, 10 Mar 2025 15:47:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=AFrB5LQGyaVxOn3sX7p058CScWU4vV/B8l9c75d4MsE=; b=JNNKsrZ6+sRM1v KGzZyz0BL+lWj20io8sxsGfe8Q0WGwisLWfP8HSZjcDawtHAPdfMBbzmghYKaDRRWtImbp+cN66eX Flfrsk2jZ8PnujocW1+WMJaonJ2+uS1KqThPTKKdTKrsOFVizG2k1Bqt5zBkSrFf1Jtfrnl8fhK4Y YgL7nIxw74Ml/F/tX1eCtAg9id6b9malb7nv1iK75y2rUpz835CLDcEUee3vqviXaiVEmkwtA8R0H g9okoa0zPx2BPteroVwZ8b3iEOzNByQaB6QKR/KX8RiriUA+eRAlEj7oQsP71J8XTPaCbV46+o9DO sTTm1CqE4FAzjuzRb/yA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfM4-00000003GCh-2E3V; Mon, 10 Mar 2025 15:47:48 +0000 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trepo-0000000380H-2A77 for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:14:30 +0000 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-22438c356c8so47844025ad.1 for ; Mon, 10 Mar 2025 08:14:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619668; x=1742224468; darn=lists.infradead.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=wZ6ZtCFLM2HDQCXfIF+4ZGwXAoERFl4mcxOr8+ok9D4=; b=yC+ybaopEaJqXDGp/9K6/1Mujg0DWFIiAQRmv3Y4FGAJQFr+ji9kCBEqqI1aokSWGe l0wp0o87CTWppPKLzvVmqn+faoUshksSKAdCt2bNQPbs/LEdYT0i3tHAIfcuK+8qc15u fhVmJ6vOaDsJhg5xNp7RBTdKF5amdjYgxbRlHer85dJ424SMETiKwzPYLYxHbyYqJSGI JM6nipwTTj/YciGt3lw/XaX/kkRHFxMX9r3GewOGmkL2XJjGVzEb5I6rXcXZyHhVnUK4 u/gPsIAccW77BZ/B9CqYqku4rotiXQVonoL6aig6sVGRexbGII/jYJC1Q3ebeG6BvFUv jhfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619668; x=1742224468; 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=wZ6ZtCFLM2HDQCXfIF+4ZGwXAoERFl4mcxOr8+ok9D4=; b=hhDpCT1cqR97XgKaaA/nCTJhuB+x9fCZkM1VSvt+ECn2D2QgK7tEfadBrf4U9p5i+t r09nySyWkiiVZP0YggIg5xY5xCkmnCEU00Z7ZE6i3MiP0ey+D+nGpG7kkLlSSvpWE8On q8fbayaneghg7rJJ3d7dZYIxJ5JRMUOfGMfm/QRCo9xBPxQD8JTTMvIin3A+30j1a3+J 1TpDgfkw++z9VUNF0aDg7QQ/B1A2XjqptBsZbXKarKUdAQCLACo9qWhmYRBxx1rKDJQG rNAXQdVVBox7qD/gC1KxOVBDPVa3X6PYWh0kBxI6YpTvfAU7Vnd3hd8tmu4ka7/zsQFZ jaBw== X-Forwarded-Encrypted: i=1; AJvYcCWApSlRkNxTxr9vUK/le6jVcWuPnXpcqqa7zlkDCQBEnq5X2xTk9Yfr6ialHXL0UX/F18uT/LJwpHfp0Q==@lists.infradead.org X-Gm-Message-State: AOJu0Yx4XeDajQrUXwaNbl4AXegA79SlICJ7tvgnuYAzsMBuiJroT3IO A/XqLxTpL4HZNbd9R+kQ/CrJNboxZyPn8l4tOFCkZQSj38nrqhnHLY/mkHeL+GM= X-Gm-Gg: ASbGnctWy/yf7PjQvX9h7XMharIS6ndWahuDr0TRBYNodnJmUCytTQKn8q43+O/RP1p CtQ/o25wTAXjweQ2josIEgr0Wwki0RYJ40Qwkc2rgaAMWt68KJ7MNkvtztHMj8891ALYR5HYBul URgMEgYdWy8aHoNKspmpKEsC8+xOBLrhY4jNLCmUVUs8wIVR5yDADQGYcXI2fou7jZy6B3gKVnt joiBVtPKxHn96STEwWh0WBd3cbrqbIubZh4c+p7cuZlIbOZ8hfGWs/wdx+8Mwv0cio5wwkYnrNg BBqqoOc2G8LpIU2CNl43PapM8bq2HKQIOAEIcwsDBU3roA== X-Google-Smtp-Source: AGHT+IFtA7ejSY4XIE1Y8FAoh6UcQJS/Qm4jl+kbYc+4FdTVNJHdwGd9aRrsWNeD8S620FnvoI8t0w== X-Received: by 2002:a17:902:eb81:b0:223:5ca1:3b0b with SMTP id d9443c01a7336-22428bd592amr282068535ad.40.1741619667997; Mon, 10 Mar 2025 08:14:27 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.14.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:14:27 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 12/17] Documentation/sysctl: add riscv to unaligned-trap supported archs Date: Mon, 10 Mar 2025 16:12:19 +0100 Message-ID: <20250310151229.2365992-13-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081428_546080_DCF50472 X-CRM114-Status: GOOD ( 10.04 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org riscv supports the "unaligned-trap" sysctl variable, add it to the list of supported architectures. Signed-off-by: Clément Léger --- Documentation/admin-guide/sysctl/kernel.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/admin-guide/sysctl/kernel.rst b/Documentation/admin-guide/sysctl/kernel.rst index a43b78b4b646..ce3f0dd3666e 100644 --- a/Documentation/admin-guide/sysctl/kernel.rst +++ b/Documentation/admin-guide/sysctl/kernel.rst @@ -1584,8 +1584,8 @@ unaligned-trap On architectures where unaligned accesses cause traps, and where this feature is supported (``CONFIG_SYSCTL_ARCH_UNALIGN_ALLOW``; currently, -``arc``, ``parisc`` and ``loongarch``), controls whether unaligned traps -are caught and emulated (instead of failing). +``arc``, ``parisc``, ``loongarch`` and ``riscv``), controls whether unaligned +traps are caught and emulated (instead of failing). = ======================================================== 0 Do not emulate unaligned accesses. From patchwork Mon Mar 10 15:12:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010362 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CBC4DC28B2E for ; Mon, 10 Mar 2025 15:47:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=wVWvRC8/VLO7BYBHF/O5hIm2lfB69o7sAsWj6vtOdtM=; b=f3yfOSl7uUpX+1 zBSMyc9pZiDhbL4TQTGPcjBv0wrEH/gLFTq2ZMdHXQuzY3ISK7iNZkEvkKy0BekIoMuU534RktkL5 JVxnn6mmaWEHSgq0KZWX8DMb0UwC3EA+T6D2wH4xw3INALamS4QDY35k/6s3+yl+bRbIewkk+gGhX bTavVx7vypmjMTxFla9bl3Mg4w7zRXbViAANz3GNZcNsS7FcSGoqFVvDQHtUDRMcbC1IPBO8WayYy qW3yyh2WgEb/Z8ce4FIjsEbdFZpkvd491h+Xhum9bz9pOUzOJNwpfcJg+CmFWaQnl0vjI3Iqr+fWG waHSiNTw5FkNxPFFx/5g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfM6-00000003GFW-0MGH; Mon, 10 Mar 2025 15:47:50 +0000 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trepx-00000003837-1rdS for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:14:39 +0000 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-2243803b776so68780845ad.0 for ; Mon, 10 Mar 2025 08:14:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619677; x=1742224477; darn=lists.infradead.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=VKDplUA2XX/hbzyOxbYWLc7Q9RboQ/w3e3i+SZL4wNg=; b=vroCAGr6EFIyTJVK17P9RUxGj2A65s8ERqEzeNH13BKvXKoIn/yBFIPZiVvfxHf7Qk lagqlZDPMjjZG2toS5hR7DwJ129QIBTba4TtVjw8FxyKlICHfHt+7AEfUDIiNK+MqYTe NkdPhSodiLnO5JZleZiMKbxDXe8joWVvtexBX6VWhnt3UOymlFUwBeFcKAmQZ8y2viTG QOIjX4ZNDIQy25McSAZdRPJXyxr+Gu0spWxcHJqGTV7+wnDrzvn7GTVZ7eZhe3iTkAyg JidBoLhlR/tpPQdp3RHn+jvIn1VU8ZkLFvEQ030rsZgr7aq4i3/TxElBC0sqRbToSzGC bqjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619677; x=1742224477; 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=VKDplUA2XX/hbzyOxbYWLc7Q9RboQ/w3e3i+SZL4wNg=; b=qaXpxFOgoVCOaRP3BLyd+E3S4Rmxcq2kv4ZDiuviRlCpclrgyd8Fx4S9cak+1yLgtl Of76iPGdzYbJanGMoF+4B0pIbbe4lmsvQiDptsFvPaYEC5o4yQzHBILZCyCFFjS9Zsye LMuBLD96xfJmGew+JyUZwqph0rIcRNHzUoEf8VM/Eyr+I7DP7MhSZpIGScI1PvK8lak5 R3E6cmjNZe8PuwpwN7BAUjYiSQIx5g+60hvbBzUHee2vqmsV0eyoqNerdPCURNpSIC2P e7E9obxVScuOcAFnQCc2+xy78g+r+JJhU0RWBWoxMxO65btiKj93iEYHxljDrMwcQmSH SBMA== X-Forwarded-Encrypted: i=1; AJvYcCW/OMlHGsnPZo9nygdFI0KGZFoCrkt2Uf1sUGOC6NZiplnDa+BauuxpsrsSh0xLQIBACcM399d56YNCRQ==@lists.infradead.org X-Gm-Message-State: AOJu0YyqaFN7I+drHQbCzdowJkew5y28Qo6oqVr4bwYgezMvdF07DgU/ z/UTgdJf3S+XBQGX2sG8ZpFLBGnBjYX3SKI2AaAePqjumJxqv+PaTZl16Zk6nF8= X-Gm-Gg: ASbGncsFnI/QShomlGzZX6fdKOR18D6AGdMq4kN6C1nuuVjOFp1YxTHtxttfLOAVYy8 7BAa+tkCti41+ZtYztP0JZEp1JKvNkK20wpJ/MjqP5/AUbvsfUTu29MclMdrxLMS8f5FfIelnDu l6uo1ADHh2oefTqPLeax6xl7KARI0SNqwhRyc69njaJ2/ufMEAzjbGT/tkGNjcE+7EMb9WbX8KC de5iZrqNoEVrTXWAf0MKsDhF2XZrgpm9qMsoRyQyn0TZQ6YCW6pPBZ7g7B3fIBfZFjA4CsKNKFr Z2MHQ1y4DO4j1uz5/R7c4IhHUrOSqm84qOMltcATwFvrEAk4bgNN19Mt X-Google-Smtp-Source: AGHT+IHLPYH9Su/Xk8k0SCej8djbbsIZk7xOmrGvQm5ktmN7qNh0cYjE9gF9O+rc7TRVQLiHHoCCuw== X-Received: by 2002:a17:903:1ca:b0:21b:d105:26b8 with SMTP id d9443c01a7336-2242887b209mr175258155ad.7.1741619676619; Mon, 10 Mar 2025 08:14:36 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.14.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:14:35 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 13/17] selftests: riscv: add misaligned access testing Date: Mon, 10 Mar 2025 16:12:20 +0100 Message-ID: <20250310151229.2365992-14-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081437_490398_907150EC X-CRM114-Status: GOOD ( 19.55 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Now that the kernel can emulate misaligned access and control its behavior, add a selftest for that. This selftest tests all the currently emulated instruction (except for the RV32 compressed ones which are left as a future exercise for a RV32 user). For the FPU instructions, all the FPU registers are tested. Signed-off-by: Clément Léger --- .../selftests/riscv/misaligned/.gitignore | 1 + .../selftests/riscv/misaligned/Makefile | 12 + .../selftests/riscv/misaligned/common.S | 33 +++ .../testing/selftests/riscv/misaligned/fpu.S | 180 +++++++++++++ tools/testing/selftests/riscv/misaligned/gp.S | 103 +++++++ .../selftests/riscv/misaligned/misaligned.c | 254 ++++++++++++++++++ 6 files changed, 583 insertions(+) create mode 100644 tools/testing/selftests/riscv/misaligned/.gitignore create mode 100644 tools/testing/selftests/riscv/misaligned/Makefile create mode 100644 tools/testing/selftests/riscv/misaligned/common.S create mode 100644 tools/testing/selftests/riscv/misaligned/fpu.S create mode 100644 tools/testing/selftests/riscv/misaligned/gp.S create mode 100644 tools/testing/selftests/riscv/misaligned/misaligned.c diff --git a/tools/testing/selftests/riscv/misaligned/.gitignore b/tools/testing/selftests/riscv/misaligned/.gitignore new file mode 100644 index 000000000000..5eff15a1f981 --- /dev/null +++ b/tools/testing/selftests/riscv/misaligned/.gitignore @@ -0,0 +1 @@ +misaligned diff --git a/tools/testing/selftests/riscv/misaligned/Makefile b/tools/testing/selftests/riscv/misaligned/Makefile new file mode 100644 index 000000000000..1aa40110c50d --- /dev/null +++ b/tools/testing/selftests/riscv/misaligned/Makefile @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2021 ARM Limited +# Originally tools/testing/arm64/abi/Makefile + +CFLAGS += -I$(top_srcdir)/tools/include + +TEST_GEN_PROGS := misaligned + +include ../../lib.mk + +$(OUTPUT)/misaligned: misaligned.c fpu.S gp.S + $(CC) -g3 -static -o$@ -march=rv64imafdc $(CFLAGS) $(LDFLAGS) $^ diff --git a/tools/testing/selftests/riscv/misaligned/common.S b/tools/testing/selftests/riscv/misaligned/common.S new file mode 100644 index 000000000000..8fa00035bd5d --- /dev/null +++ b/tools/testing/selftests/riscv/misaligned/common.S @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clément Léger + */ + +.macro lb_sb temp, offset, src, dst + lb \temp, \offset(\src) + sb \temp, \offset(\dst) +.endm + +.macro copy_long_to temp, src, dst + lb_sb \temp, 0, \src, \dst, + lb_sb \temp, 1, \src, \dst, + lb_sb \temp, 2, \src, \dst, + lb_sb \temp, 3, \src, \dst, + lb_sb \temp, 4, \src, \dst, + lb_sb \temp, 5, \src, \dst, + lb_sb \temp, 6, \src, \dst, + lb_sb \temp, 7, \src, \dst, +.endm + +.macro sp_stack_prologue offset + addi sp, sp, -8 + sub sp, sp, \offset +.endm + +.macro sp_stack_epilogue offset + add sp, sp, \offset + addi sp, sp, 8 +.endm diff --git a/tools/testing/selftests/riscv/misaligned/fpu.S b/tools/testing/selftests/riscv/misaligned/fpu.S new file mode 100644 index 000000000000..d008bff58310 --- /dev/null +++ b/tools/testing/selftests/riscv/misaligned/fpu.S @@ -0,0 +1,180 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clément Léger + */ + +#include "common.S" + +#define CASE_ALIGN 4 + +.macro fpu_load_inst fpreg, inst, precision, load_reg +.align CASE_ALIGN + \inst \fpreg, 0(\load_reg) + fmv.\precision fa0, \fpreg + j 2f +.endm + +#define flw(__fpreg) fpu_load_inst __fpreg, flw, s, s1 +#define fld(__fpreg) fpu_load_inst __fpreg, fld, d, s1 +#define c_flw(__fpreg) fpu_load_inst __fpreg, c.flw, s, s1 +#define c_fld(__fpreg) fpu_load_inst __fpreg, c.fld, d, s1 +#define c_fldsp(__fpreg) fpu_load_inst __fpreg, c.fldsp, d, sp + +.macro fpu_store_inst fpreg, inst, precision, store_reg +.align CASE_ALIGN + fmv.\precision \fpreg, fa0 + \inst \fpreg, 0(\store_reg) + j 2f +.endm + +#define fsw(__fpreg) fpu_store_inst __fpreg, fsw, s, s1 +#define fsd(__fpreg) fpu_store_inst __fpreg, fsd, d, s1 +#define c_fsw(__fpreg) fpu_store_inst __fpreg, c.fsw, s, s1 +#define c_fsd(__fpreg) fpu_store_inst __fpreg, c.fsd, d, s1 +#define c_fsdsp(__fpreg) fpu_store_inst __fpreg, c.fsdsp, d, sp + +.macro fp_test_prologue + move s1, a1 + /* + * Compute jump offset to store the correct FP register since we don't + * have indirect FP register access (or at least we don't use this + * extension so that works on all archs) + */ + sll t0, a0, CASE_ALIGN + la t2, 1f + add t0, t0, t2 + jr t0 +.align CASE_ALIGN +1: +.endm + +.macro fp_test_prologue_compressed + /* FP registers for compressed instructions starts from 8 to 16 */ + addi a0, a0, -8 + fp_test_prologue +.endm + +#define fp_test_body_compressed(__inst_func) \ + __inst_func(f8); \ + __inst_func(f9); \ + __inst_func(f10); \ + __inst_func(f11); \ + __inst_func(f12); \ + __inst_func(f13); \ + __inst_func(f14); \ + __inst_func(f15); \ +2: + +#define fp_test_body(__inst_func) \ + __inst_func(f0); \ + __inst_func(f1); \ + __inst_func(f2); \ + __inst_func(f3); \ + __inst_func(f4); \ + __inst_func(f5); \ + __inst_func(f6); \ + __inst_func(f7); \ + __inst_func(f8); \ + __inst_func(f9); \ + __inst_func(f10); \ + __inst_func(f11); \ + __inst_func(f12); \ + __inst_func(f13); \ + __inst_func(f14); \ + __inst_func(f15); \ + __inst_func(f16); \ + __inst_func(f17); \ + __inst_func(f18); \ + __inst_func(f19); \ + __inst_func(f20); \ + __inst_func(f21); \ + __inst_func(f22); \ + __inst_func(f23); \ + __inst_func(f24); \ + __inst_func(f25); \ + __inst_func(f26); \ + __inst_func(f27); \ + __inst_func(f28); \ + __inst_func(f29); \ + __inst_func(f30); \ + __inst_func(f31); \ +2: +.text + +#define __gen_test_inst(__inst, __suffix) \ +.global test_ ## __inst; \ +test_ ## __inst:; \ + fp_test_prologue ## __suffix; \ + fp_test_body ## __suffix(__inst); \ + ret + +#define gen_test_inst_compressed(__inst) \ + .option arch,+c; \ + __gen_test_inst(c_ ## __inst, _compressed) + +#define gen_test_inst(__inst) \ + .balign 16; \ + .option push; \ + .option arch,-c; \ + __gen_test_inst(__inst, ); \ + .option pop + +.macro fp_test_prologue_load_compressed_sp + copy_long_to t0, a1, sp +.endm + +.macro fp_test_epilogue_load_compressed_sp +.endm + +.macro fp_test_prologue_store_compressed_sp +.endm + +.macro fp_test_epilogue_store_compressed_sp + copy_long_to t0, sp, a1 +.endm + +#define gen_inst_compressed_sp(__inst, __type) \ + .global test_c_ ## __inst ## sp; \ + test_c_ ## __inst ## sp:; \ + sp_stack_prologue a2; \ + fp_test_prologue_## __type ## _compressed_sp; \ + fp_test_prologue_compressed; \ + fp_test_body_compressed(c_ ## __inst ## sp); \ + fp_test_epilogue_## __type ## _compressed_sp; \ + sp_stack_epilogue a2; \ + ret + +#define gen_test_load_compressed_sp(__inst) gen_inst_compressed_sp(__inst, load) +#define gen_test_store_compressed_sp(__inst) gen_inst_compressed_sp(__inst, store) + +/* + * float_fsw_reg - Set a FP register from a register containing the value + * a0 = FP register index to be set + * a1 = addr where to store register value + * a2 = address offset + * a3 = value to be store + */ +gen_test_inst(fsw) + +/* + * float_flw_reg - Get a FP register value and return it + * a0 = FP register index to be retrieved + * a1 = addr to load register from + * a2 = address offset + */ +gen_test_inst(flw) + +gen_test_inst(fsd) +#ifdef __riscv_compressed +gen_test_inst_compressed(fsd) +gen_test_store_compressed_sp(fsd) +#endif + +gen_test_inst(fld) +#ifdef __riscv_compressed +gen_test_inst_compressed(fld) +gen_test_load_compressed_sp(fld) +#endif diff --git a/tools/testing/selftests/riscv/misaligned/gp.S b/tools/testing/selftests/riscv/misaligned/gp.S new file mode 100644 index 000000000000..f53f4c6d81dd --- /dev/null +++ b/tools/testing/selftests/riscv/misaligned/gp.S @@ -0,0 +1,103 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clément Léger + */ + +#include "common.S" + +.text + +.macro __gen_test_inst inst, src_reg + \inst a2, 0(\src_reg) + move a0, a2 +.endm + +.macro gen_func_header func_name, rvc + .option arch,\rvc + .global test_\func_name + test_\func_name: +.endm + +.macro gen_test_inst inst + .option push + gen_func_header \inst, -c + __gen_test_inst \inst, a0 + .option pop + ret +.endm + +.macro __gen_test_inst_c name, src_reg + .option push + gen_func_header c_\name, +c + __gen_test_inst c.\name, \src_reg + .option pop + ret +.endm + +.macro gen_test_inst_c name + __gen_test_inst_c \name, a0 +.endm + + +.macro gen_test_inst_load_c_sp name + .option push + gen_func_header c_\name\()sp, +c + sp_stack_prologue a1 + copy_long_to t0, a0, sp + c.ldsp a0, 0(sp) + sp_stack_epilogue a1 + .option pop + ret +.endm + +.macro lb_sp_sb_a0 reg, offset + lb_sb \reg, \offset, sp, a0 +.endm + +.macro gen_test_inst_store_c_sp inst_name + .option push + gen_func_header c_\inst_name\()sp, +c + /* Misalign stack pointer */ + sp_stack_prologue a1 + /* Misalign access */ + c.sdsp a2, 0(sp) + copy_long_to t0, sp, a0 + sp_stack_epilogue a1 + .option pop + ret +.endm + + + /* + * a0 = addr to load from + * a1 = address offset + * a2 = value to be loaded + */ +gen_test_inst lh +gen_test_inst lhu +gen_test_inst lw +gen_test_inst lwu +gen_test_inst ld +#ifdef __riscv_compressed +gen_test_inst_c lw +gen_test_inst_c ld +gen_test_inst_load_c_sp ld +#endif + +/* + * a0 = addr where to store value + * a1 = address offset + * a2 = value to be stored + */ +gen_test_inst sh +gen_test_inst sw +gen_test_inst sd +#ifdef __riscv_compressed +gen_test_inst_c sw +gen_test_inst_c sd +gen_test_inst_store_c_sp sd +#endif + diff --git a/tools/testing/selftests/riscv/misaligned/misaligned.c b/tools/testing/selftests/riscv/misaligned/misaligned.c new file mode 100644 index 000000000000..c66aa87ec03e --- /dev/null +++ b/tools/testing/selftests/riscv/misaligned/misaligned.c @@ -0,0 +1,254 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clément Léger + */ +#include +#include +#include +#include +#include "../../kselftest_harness.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define stringify(s) __stringify(s) +#define __stringify(s) #s + +#define VAL16 0x1234 +#define VAL32 0xDEADBEEF +#define VAL64 0x45674321D00DF789 + +#define VAL_float 78951.234375 +#define VAL_double 567890.512396965789589290 + +static bool float_equal(float a, float b) +{ + float scaled_epsilon; + float difference = fabsf(a - b); + + // Scale to the largest value. + a = fabsf(a); + b = fabsf(b); + if (a > b) + scaled_epsilon = FLT_EPSILON * a; + else + scaled_epsilon = FLT_EPSILON * b; + + return difference <= scaled_epsilon; +} + +static bool double_equal(double a, double b) +{ + double scaled_epsilon; + double difference = fabsf(a - b); + + // Scale to the largest value. + a = fabs(a); + b = fabs(b); + if (a > b) + scaled_epsilon = DBL_EPSILON * a; + else + scaled_epsilon = DBL_EPSILON * b; + + return difference <= scaled_epsilon; +} + +#define fpu_load_proto(__inst, __type) \ +extern __type test_ ## __inst(unsigned long fp_reg, void *addr, unsigned long offset, __type value) + +fpu_load_proto(flw, float); +fpu_load_proto(fld, double); +fpu_load_proto(c_flw, float); +fpu_load_proto(c_fld, double); +fpu_load_proto(c_fldsp, double); + +#define fpu_store_proto(__inst, __type) \ +extern void test_ ## __inst(unsigned long fp_reg, void *addr, unsigned long offset, __type value) + +fpu_store_proto(fsw, float); +fpu_store_proto(fsd, double); +fpu_store_proto(c_fsw, float); +fpu_store_proto(c_fsd, double); +fpu_store_proto(c_fsdsp, double); + +#define gp_load_proto(__inst, __type) \ +extern __type test_ ## __inst(void *addr, unsigned long offset, __type value) + +gp_load_proto(lh, uint16_t); +gp_load_proto(lhu, uint16_t); +gp_load_proto(lw, uint32_t); +gp_load_proto(lwu, uint32_t); +gp_load_proto(ld, uint64_t); +gp_load_proto(c_lw, uint32_t); +gp_load_proto(c_ld, uint64_t); +gp_load_proto(c_ldsp, uint64_t); + +#define gp_store_proto(__inst, __type) \ +extern void test_ ## __inst(void *addr, unsigned long offset, __type value) + +gp_store_proto(sh, uint16_t); +gp_store_proto(sw, uint32_t); +gp_store_proto(sd, uint64_t); +gp_store_proto(c_sw, uint32_t); +gp_store_proto(c_sd, uint64_t); +gp_store_proto(c_sdsp, uint64_t); + +#define TEST_GP_LOAD(__inst, __type_size) \ +TEST(gp_load_ ## __inst) \ +{ \ + int offset, ret; \ + uint8_t buf[16] __attribute__((aligned(16))); \ + \ + ret = prctl(PR_SET_UNALIGN, PR_UNALIGN_NOPRINT); \ + ASSERT_EQ(ret, 0); \ + \ + for (offset = 1; offset < __type_size / 8; offset++) { \ + uint ## __type_size ## _t val = VAL ## __type_size; \ + uint ## __type_size ## _t *ptr = (uint ## __type_size ## _t *) (buf + offset); \ + memcpy(ptr, &val, sizeof(val)); \ + val = test_ ## __inst(ptr, offset, val); \ + EXPECT_EQ(VAL ## __type_size, val); \ + } \ +} + +TEST_GP_LOAD(lh, 16); +TEST_GP_LOAD(lhu, 16); +TEST_GP_LOAD(lw, 32); +TEST_GP_LOAD(lwu, 32); +TEST_GP_LOAD(ld, 64); +#ifdef __riscv_compressed +TEST_GP_LOAD(c_lw, 32); +TEST_GP_LOAD(c_ld, 64); +TEST_GP_LOAD(c_ldsp, 64); +#endif + +#define TEST_GP_STORE(__inst, __type_size) \ +TEST(gp_load_ ## __inst) \ +{ \ + int offset, ret; \ + uint8_t buf[16] __attribute__((aligned(16))); \ + \ + ret = prctl(PR_SET_UNALIGN, PR_UNALIGN_NOPRINT); \ + ASSERT_EQ(ret, 0); \ + \ + for (offset = 1; offset < __type_size / 8; offset++) { \ + uint ## __type_size ## _t val = VAL ## __type_size; \ + uint ## __type_size ## _t *ptr = (uint ## __type_size ## _t *) (buf + offset); \ + memset(ptr, 0, sizeof(val)); \ + test_ ## __inst(ptr, offset, val); \ + memcpy(&val, ptr, sizeof(val)); \ + EXPECT_EQ(VAL ## __type_size, val); \ + } \ +} +TEST_GP_STORE(sh, 16); +TEST_GP_STORE(sw, 32); +TEST_GP_STORE(sd, 64); +#ifdef __riscv_compressed +TEST_GP_STORE(c_sw, 32); +TEST_GP_STORE(c_sd, 64); +TEST_GP_STORE(c_sdsp, 64); +#endif + +#define __TEST_FPU_LOAD(__type, __inst, __reg_start, __reg_end) \ +TEST(fpu_load_ ## __inst) \ +{ \ + int i, ret, offset, fp_reg; \ + uint8_t buf[16] __attribute__((aligned(16))); \ + \ + ret = prctl(PR_SET_UNALIGN, PR_UNALIGN_NOPRINT); \ + ASSERT_EQ(ret, 0); \ + \ + for (fp_reg = __reg_start; fp_reg < __reg_end; fp_reg++) { \ + for (offset = 1; offset < 4; offset++) { \ + void *load_addr = (buf + offset); \ + __type val = VAL_ ## __type ; \ + \ + memcpy(load_addr, &val, sizeof(val)); \ + val = test_ ## __inst(fp_reg, load_addr, offset, val); \ + EXPECT_TRUE(__type ##_equal(val, VAL_## __type)); \ + } \ + } \ +} +#define TEST_FPU_LOAD(__type, __inst) \ + __TEST_FPU_LOAD(__type, __inst, 0, 32) +#define TEST_FPU_LOAD_COMPRESSED(__type, __inst) \ + __TEST_FPU_LOAD(__type, __inst, 8, 16) + +TEST_FPU_LOAD(float, flw) +TEST_FPU_LOAD(double, fld) +#ifdef __riscv_compressed +TEST_FPU_LOAD_COMPRESSED(double, c_fld) +TEST_FPU_LOAD_COMPRESSED(double, c_fldsp) +#endif + +#define __TEST_FPU_STORE(__type, __inst, __reg_start, __reg_end) \ +TEST(fpu_store_ ## __inst) \ +{ \ + int i, ret, offset, fp_reg; \ + uint8_t buf[16] __attribute__((aligned(16))); \ + \ + ret = prctl(PR_SET_UNALIGN, PR_UNALIGN_NOPRINT); \ + ASSERT_EQ(ret, 0); \ + \ + for (fp_reg = __reg_start; fp_reg < __reg_end; fp_reg++) { \ + for (offset = 1; offset < 4; offset++) { \ + \ + void *store_addr = (buf + offset); \ + __type val = VAL_ ## __type ; \ + \ + test_ ## __inst(fp_reg, store_addr, offset, val); \ + memcpy(&val, store_addr, sizeof(val)); \ + EXPECT_TRUE(__type ## _equal(val, VAL_## __type)); \ + } \ + } \ +} +#define TEST_FPU_STORE(__type, __inst) \ + __TEST_FPU_STORE(__type, __inst, 0, 32) +#define TEST_FPU_STORE_COMPRESSED(__type, __inst) \ + __TEST_FPU_STORE(__type, __inst, 8, 16) + +TEST_FPU_STORE(float, fsw) +TEST_FPU_STORE(double, fsd) +#ifdef __riscv_compressed +TEST_FPU_STORE_COMPRESSED(double, c_fsd) +TEST_FPU_STORE_COMPRESSED(double, c_fsdsp) +#endif + +TEST_SIGNAL(gen_sigbus, SIGBUS) +{ + uint32_t *ptr; + uint8_t buf[16] __attribute__((aligned(16))); + int ret; + + ret = prctl(PR_SET_UNALIGN, PR_UNALIGN_SIGBUS); + ASSERT_EQ(ret, 0); + + ptr = (uint32_t *)(buf + 1); + *ptr = 0xDEADBEEFULL; +} + +int main(int argc, char **argv) +{ + int ret, val; + + ret = prctl(PR_GET_UNALIGN, &val); + if (ret == -1 && errno == EINVAL) + ksft_exit_skip("SKIP GET_UNALIGN_CTL not supported\n"); + + exit(test_harness_run(argc, argv)); +} From patchwork Mon Mar 10 15:12:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010363 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3C511C282EC for ; Mon, 10 Mar 2025 15:47:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=YvHI0Xsq8V4lH0iYdntivJhibhPUogzsdbm0bI8CDoE=; b=4MEhrY144rtPZG /nutETQ4xdyPNdMMeCv7iGdFd7izyjJLA+0rqmwbTmeTHryFh5uqo/y2BRWxZgxOt4/BmJwwdmLxr wU1MgAgWU3DOw00EB8TpwTY3djX/EQ/wCUrG4Y/S+GQB6KQLLGAW0KKNANdJ2evZ5gGNBPDqcKEQc apYe16/oWC07hpPdTQAg4UZrLuVVrXBZftAN4eM/OfmYsE+AYdh0Ah4MWJ+PhYptoY29ToVqk3WA1 gnNrA3ZJE1PuY+VK5UlR11M2h/UsamzB+NdE59JPwk33dn49yXIydN+UK77PCTkBIK4HpGxoDIIYw 6ETQEDbpJZKxsCppH/lg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfM8-00000003GIo-04DT; Mon, 10 Mar 2025 15:47:52 +0000 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1treq5-0000000386h-2nFt for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:14:46 +0000 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-22580c9ee0aso13297765ad.2 for ; Mon, 10 Mar 2025 08:14:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619685; x=1742224485; darn=lists.infradead.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=YO198dOv/JV7u6RiN4qQUqM3nesMDxD5mvDVMd+k3NU=; b=oW3wvlfTa18cAbhHPv3vFnuw6Own1lv1iwH8S9iIe+1f52e161sGYXV+AoAlF6fC0b 6TiKVDt2MX/+K+2ZqzWfGVOSMOFvlcHgY5H/RarH5TLEj0j2b6eG37rLYaaCsCtnodDV zus9WGCUqpZWmtrojFNtRDA+P7MFyc0CAok0ySye3eAEIPMSs2T6XsZe4IDe8e5EBUm/ weemXkOgdjD+B1NiyFzyefreTFoghFTEp3BMxqLnTBcdqQRaLGQinzmUYnyYeVlekZMa MB3Aq4kduCPxbuk6nQOgJAk6mXJZ1bO2nBnZyp33b+DlS1bszMfwJc1yly7IXcNzbARt fNTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619685; x=1742224485; 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=YO198dOv/JV7u6RiN4qQUqM3nesMDxD5mvDVMd+k3NU=; b=w34LgHgBFUFN4OG4AaB7meviAHv4do8Vi9f88r/WBydTLmlNSiuiMxj/9FwmP61BaD Rg6nvTwkumO/t5/oQJP5sCYoEJml7b41N3vIR/885I0X3luqu058n2854n7ccLkA2z8B ILdaKlqYyJV9a41pnHkBwUVPi9a1rVBHMG6bn3+3FtyDG8beXd6Z4kagrOBXlhFSF4Y1 hunetxFU2zrcN5l1E0KFVdKeIcAddbgZHgxs0Kgh+Nkcs+EkghumYh9+us5UWW8ECROf EgUcaMcs26qNesI53KJyY5Kh8Zof/Lx3ddrZ8jyIsbP8OMBApqmrhyTukAfnQTdnXmzq G0XQ== X-Forwarded-Encrypted: i=1; AJvYcCW01qZWgh4XxCGIUlNthlEWOljA6oMNUsZxeMY/snF6WXJb1evu1td3Sr3A3E7FZ++oNvZrsv7KSvhjkQ==@lists.infradead.org X-Gm-Message-State: AOJu0YworANcWT0pyJbKVDYCPXhUTk1eaKAmqNuiqjMWT/CErN86oeSS syxFSXlaJn8+ckY8m+ubXc/DCUd7jFtkUF3g7lXtHJeWc4ndGBSG6G+XVdNo8VQ= X-Gm-Gg: ASbGnctrU+0bP+9TbMsNzxWRlCl2j1C2EAu83AavjOGgw//QgDKdBaQdpNXvI4Xw49s Iz6u3YjIfElBjLSrBTG181L0cTXlzbGpXZIgm8aF+MV+h5ncuaRCb7kjZQyxNGqwAecF7Wywv48 cAaHB5FpVy2cnxWeqCnrvjhPhA3GSbhYd/XfBmO8Pm6NsACiVCFvY6lGbEsswXxnwGsgpKQRy1b 6QRUWEqQbyxJMI7VRpFesa9MoG9y60WZqdkJnSoSzZZHQkshZlDi+VozTNt5Tc29AaXzBdi7RL3 Y2FUrENfzxrBSY7lU5bnHT0hMOr1er7krZjNVCIPktg+cg== X-Google-Smtp-Source: AGHT+IGIS2XxIf4TQa/glKSShb2DPMKV2nM+32P/jFh4qY9T5snUhs8ena+pzkKO/eEMPCMRH58+YA== X-Received: by 2002:a17:902:eb81:b0:223:5ca1:3b0b with SMTP id d9443c01a7336-22428bd592amr282084395ad.40.1741619685003; Mon, 10 Mar 2025 08:14:45 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.14.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:14:44 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 14/17] RISC-V: KVM: add SBI extension init()/deinit() functions Date: Mon, 10 Mar 2025 16:12:21 +0100 Message-ID: <20250310151229.2365992-15-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081445_738902_AB25309E X-CRM114-Status: GOOD ( 14.60 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org 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ément Léger --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 9 +++++++++ arch/riscv/kvm/vcpu.c | 2 ++ arch/riscv/kvm/vcpu_sbi.c | 29 +++++++++++++++++++++++++++ 3 files changed, 40 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 { /* 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); }; 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_ext( 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); int kvm_riscv_vcpu_get_reg_sbi_sta(struct kvm_vcpu *vcpu, unsigned long reg_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) 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); diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index d1c83a77735e..858ddefd7e7f 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -505,8 +505,37 @@ void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu) continue; } + if (!ext->default_disabled && ext->init && + ext->init(vcpu) != 0) { + scontext->ext_status[idx] = KVM_RISCV_SBI_EXT_STATUS_UNAVAILABLE; + continue; + } + scontext->ext_status[idx] = ext->default_disabled ? KVM_RISCV_SBI_EXT_STATUS_DISABLED : KVM_RISCV_SBI_EXT_STATUS_ENABLED; } } + +void kvm_riscv_vcpu_sbi_deinit(struct kvm_vcpu *vcpu) +{ + struct kvm_vcpu_sbi_context *scontext = &vcpu->arch.sbi_context; + const struct kvm_riscv_sbi_extension_entry *entry; + const struct kvm_vcpu_sbi_extension *ext; + int idx, i; + + for (i = 0; i < ARRAY_SIZE(sbi_ext); i++) { + entry = &sbi_ext[i]; + ext = entry->ext_ptr; + idx = entry->ext_idx; + + if (idx < 0 || idx >= ARRAY_SIZE(scontext->ext_status)) + continue; + + if (scontext->ext_status[idx] == KVM_RISCV_SBI_EXT_STATUS_UNAVAILABLE || + !ext->deinit) + continue; + + ext->deinit(vcpu); + } +} From patchwork Mon Mar 10 15:12:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010364 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4A322C282DE for ; Mon, 10 Mar 2025 15:47:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=mdlfd5B1HXIY55an97TyErXPrHEXsZycbcWSfh0GX0k=; b=C/DMLgI2Y0Mi54 5sNNuowfhlB1NBBqz5U3tqwfr3y2jD4Y8H29IzFkNXd5mUMdirHJApnv+e3aNz9+gq/+GUTFniKpu /SErlADKn93+oOpxx8mEKKqLW/I6guEvPY7FKQp98x6KIgJrYSnzhCXb6JzDxzMnEPyt4C2f6165p T+Mz0q5ACIiLgPot0vfPRMFuy7iMhKCBJeGHoIQDLg1pZ54WMOmBJ330CckRF+SBxbG+ZL3BDrlXS XseK1dn4y3Z4iHsGulHdvkpRkHwtQVFYMZKm2MwOatuNBG+UIoxS+e1y7AOI3IRxlkQQQKjIYdGkB qVSkzTkAgH42WWPW5mNA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfM9-00000003GKo-1UlG; Mon, 10 Mar 2025 15:47:53 +0000 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1treqD-000000038BS-3rEs for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:14:55 +0000 Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-225477548e1so33388095ad.0 for ; Mon, 10 Mar 2025 08:14:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619693; x=1742224493; darn=lists.infradead.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=6l++jogwQbkZh7dICu4CyxiXIZKEwQKPb1/RHWWp03A=; b=gcC4aScSF1JWDAyz5OEIQPHq5k9LxwhokxZ5+GtzSkBF//n7EjmgSjU8XFmz7NsmKw EENWnkSxErFvYex1LvBvUyoICBapqaV99e/tm8iOmtrSnzH6bDsK3Vrkb4jwlFgjT9Yw 8iHXrwyO8F5RHQstUo8OHcz6MbAixPl8W0u3859zAJaL8tblfhH8EN0nqGDgU0h6Zl8P 3huhXYJVv3+7mdZ/FCCe/OWUpW8oSv+1l9sbEmB80YfuV2yJqsH1cfhnlWf5LeI9wqoU 7rOH0OP9hQKB4IMScsydhI36JNVr/SFqWvfiLI9dbe4m+D3Qt/gSsEHTfE8FI0V27SBx 5nTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619693; x=1742224493; 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=6l++jogwQbkZh7dICu4CyxiXIZKEwQKPb1/RHWWp03A=; b=H1+dXicAHJbc0VU6RLXhInIZ21HBwJaYY3cJ54AgUEajdrQHOaVVKQaC4MUrJvpmSD 3N0pGYLDlDumz4D/Jt3nn0r5Mo57ra5kqb+52WAS+o25KxpMcwyPmWnIa1a6chIBi0Wj BNfQ+cHVmY8wzZSdZCM8z9W0NYaZezdJQAjMpa/U8yJwG+uanrVGsfCFo+iSIejSMu1W hIAsFbRMOC5sRuZxLQoql6Jf67CdeG/hdaB3o3dywU+ICVHePGq/uegMJzLgoX6dnTTU KlwfhT1goLiCUa4bch5N7h4/DPUVJYjnUp1JWQX7jUhw0Uqj2oW3eKDIb45hM+SbmppR DLzw== X-Forwarded-Encrypted: i=1; AJvYcCUNJUHUSY7WHuGjBU/ryy+qgW8OiSz+snXxz0+7yHb73kCqnExaj9PbCilONH72R4kkKU1xPR7LoEo0pA==@lists.infradead.org X-Gm-Message-State: AOJu0YxWT7ZzsQA54o1YX1RHNWR20OcLZJh4YoqtJjGFA4277cXyyntY 1902EPpTNUZYd1BsnRXQKQnbkSn0+wC20LDKBmn20O4hYuHUjjf1iIB9Va6l+Ns= X-Gm-Gg: ASbGncupHSu4+2uor96NV6XSM6fzWi6KT3FzXzunTplqyrirR6XLcUnmsl59F/dgxUq tb9CBB9RbS70aVx2QBwRX9958NzVfowH1cawJ89B2hWNYF2mtj/jpRuh024PZQzeiT/RDfOAm0N PrD6uIgZJ6mdPUX1QS/YJTbJqs2gzcN780/4A3aRlVoB0bRiPX81No8DCGJMe39vLERhiy4JyBs hxQsIiSoSIx1xDqRhRfFP99EHXOnDRKtT6PKG8etzz474v33E8CpGXZBAmtkgVTqmGxI1FSM0qj mdvfolVxF/2//jkpJPK+BssTel5k/kmKfJsv0Ugq8mT5Wf9kt+h90+q2 X-Google-Smtp-Source: AGHT+IGtMqipPUgghWjpfZ6ZkTy1ft1+oxAHrUN4YZ5GS8RdVCB2lFCZnqkm3CMl7QqHMx+cAywiQQ== X-Received: by 2002:a17:902:f648:b0:220:d601:a704 with SMTP id d9443c01a7336-22428a967a4mr207702705ad.18.1741619693398; Mon, 10 Mar 2025 08:14:53 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.14.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:14:52 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 15/17] RISC-V: KVM: add SBI extension reset callback Date: Mon, 10 Mar 2025 16:12:22 +0100 Message-ID: <20250310151229.2365992-16-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081453_960764_E58C9F50 X-CRM114-Status: GOOD ( 17.93 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Currently, oonly 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ément Léger --- 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 cc33e35cd628..bb93d2995ea2 100644 --- a/arch/riscv/include/asm/kvm_host.h +++ b/arch/riscv/include/asm/kvm_host.h @@ -409,7 +409,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); -void kvm_riscv_vcpu_sbi_sta_reset(struct kvm_vcpu *vcpu); void kvm_riscv_vcpu_record_steal_time(struct kvm_vcpu *vcpu); #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); }; 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, 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); +void kvm_riscv_vcpu_sbi_reset(struct kvm_vcpu *vcpu); int kvm_riscv_vcpu_get_reg_sbi_sta(struct kvm_vcpu *vcpu, unsigned long reg_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 = 0; memset(vcpu->arch.hfence_queue, 0, sizeof(vcpu->arch.hfence_queue)); - kvm_riscv_vcpu_sbi_sta_reset(vcpu); + kvm_riscv_vcpu_sbi_reset(vcpu); /* 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 858ddefd7e7f..18726096ef44 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -539,3 +539,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 = &vcpu->arch.sbi_context; + const struct kvm_riscv_sbi_extension_entry *entry; + const struct kvm_vcpu_sbi_extension *ext; + int idx, i; + + for (i = 0; i < ARRAY_SIZE(sbi_ext); i++) { + entry = &sbi_ext[i]; + ext = entry->ext_ptr; + idx = entry->ext_idx; + + if (idx < 0 || idx >= ARRAY_SIZE(scontext->ext_status)) + continue; + + if (scontext->ext_status[idx] != 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 -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 = INVALID_GPA; vcpu->arch.sta.last_steal = 0; @@ -156,6 +156,7 @@ const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_sta = { .extid_end = SBI_EXT_STA, .handler = kvm_sbi_ext_sta_handler, .probe = kvm_sbi_ext_sta_probe, + .reset = kvm_riscv_vcpu_sbi_sta_reset, }; int kvm_riscv_vcpu_get_reg_sbi_sta(struct kvm_vcpu *vcpu, From patchwork Mon Mar 10 15:12:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010365 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 48009C282EC for ; Mon, 10 Mar 2025 15:48:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=6MfW+iFl6xwVc+1M0ZJhAlsFv7erKgV/JTBieTgR58U=; b=cjvYrNP/qINpIb sqfWfaQY0StEkdg1d/NNV+QnHiyuQ5IvsLLD/0HiC9lK4mp8ESlfyhpqbM3qFDO89B/T34ZM1N1xH XAFJmKgytcN3OdZxT5CmoH6cwF1gr1j4lP/x+V9d0zK5hTs2VoKnzELmYS+I19hlavsfaETssl0rq JEFzGMLbN75vnJQBO0lm/c/jXKMsxlV38oBQ4WQ3p9bxkfTr4dicJa9v2CGh5FulVTgi7GJKghPS0 poWvCtdsxvQFXbchT4BqvEfxe9n3ruPJnQPWomleSukSwggXDbQcwHLP1F4nrYeUI866/pqUgXQF0 Dfrap2SCIIHGCEnOFS6w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfMA-00000003GNn-3vA9; Mon, 10 Mar 2025 15:47:54 +0000 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1treqM-000000038Fr-1ovL for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:15:03 +0000 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-224019ad9edso99893895ad.1 for ; Mon, 10 Mar 2025 08:15:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619702; x=1742224502; darn=lists.infradead.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=hOd2k9Vwz3oIUDtJN/qvQUzpTwasFoa+EjUHjoptxP4=; b=h8kw7FkzZeBXwZvf3Kehi2ovzoqmmXbvpuSx6kivI1wlmSZI+eFrwAm8q9Whf/MZro 9TokuvGwlWJSQOac80RDtNn3M3/3PY57qYQEE8h8RtcaJL/gndxAYPXcmw0OAmM07qxL R7ZtZX4YBFFJMbSLzxXLh/JZmbgOUfR/urXTNnVq/Z8lEESZEVH+axUnCYj5gIhSK3j4 4Kidq8tgr500WvQtP3fSbwplHVddFeYN4mphUWVmeHRx2ek/ICHs6qCDKrPQheHpIuDv LL7m7iPVCuKTeKn6+7DkHQCOK6p+8cESohh/ROZ0DhEDpMemN+Kz0Go61SljD2ItaVTP m8PQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619702; x=1742224502; 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=hOd2k9Vwz3oIUDtJN/qvQUzpTwasFoa+EjUHjoptxP4=; b=iS2mw2eIbnunkG4lTU79bwEXnpBTraVESBbwpUb+NRsWeL6J9Ys98FF0H/Jss+MGOz Jyp4kaskC51+j9DRRaZwz9cjNxb3NzziWpkShycVyegK5ny8yDGMIu8mtYmKhvNdjcg9 4NXeaScca12SQwcCQLGJPSlG/Wc4+q40FiMjEfHWo0bL/7dt8wa0xUQ8CvMuvFoubfHb i7U6vPcPyvqSZzOIqq48uO0NWU8u3lN/qrmFKCwKcY5xUsWzELmtZPNdzngwTOmjHr1d hidwi7EGOcIIGMgKBj7O8iZvgzt8lZ8NUPTydAl3u6UAgkIAmxpYCuGHi6JSNWrOyijH 22sA== X-Forwarded-Encrypted: i=1; AJvYcCXOfcV+7hO34tYKpx/YS7BrHR3ayY7bMyBGCUhrH1FZnbPQ5lYmN++l54JA0GJWYEfO8HCKetmxYNOqoQ==@lists.infradead.org X-Gm-Message-State: AOJu0YzptA5LgDWQ1uWH0/Q5o+HpKG2vPj9C69lHwMAToLJaE0I3LpWZ VjdgYHGyitKKbPSlW3EB5hjBZtWELjIaIkF1egZ4WYirkJ2sF5YgCWvANgbxWhk= X-Gm-Gg: ASbGnctQwiwUZ/0Td9ZQLpiinaW6IjL7J1uTa9YYQji/lGOBBypsXEPA9Gp0N9MUWFx 2RH3+pK/hMw590hkO0mDCcH1PVIVzCvYFGGzh0WxQxUiiCyUNiel+qkemgpL0UauXm7UWncBrrJ lDNBsMh4tT82juVwKi3G/mNSt9JrzFX88q2A1bATlKZNIG+zu9AHa7hJAkpUDYNwZ810I2ILags xYSlrwUhoa3rLw1d53SjHKVZ3v2zPj7gjfdSAO0VfFUsnPomxfcwwslkcAJ1WSL0m6bhoTgPko7 cRe7Wuk2fu4l5I7puBdN9BqnqvDijQ+9a7ajC0LNzUeJZg== X-Google-Smtp-Source: AGHT+IHzT9d4a2eYINgey0kceBibGso0f5earoCP/lcsD5F2ll8sbD9jFU+xJVsySTd/60DzZCpM3Q== X-Received: by 2002:a17:903:40cb:b0:215:9642:4d7a with SMTP id d9443c01a7336-22428407b19mr226412835ad.0.1741619701896; Mon, 10 Mar 2025 08:15:01 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.14.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:15:01 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v3 16/17] RISC-V: KVM: add support for FWFT SBI extension Date: Mon, 10 Mar 2025 16:12:23 +0100 Message-ID: <20250310151229.2365992-17-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081502_478870_92721E65 X-CRM114-Status: GOOD ( 25.97 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Add basic infrastructure to support the FWFT extension in KVM. Signed-off-by: Clément Léger --- 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 | 31 +++ 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 | 212 +++++++++++++++++++++ 7 files changed, 254 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 bb93d2995ea2..c0db61ba691a 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 @@ -281,6 +282,9 @@ struct kvm_vcpu_arch { /* Performance monitoring context */ struct kvm_pmu pmu_context; + /* Firmware feature SBI extension context */ + struct kvm_sbi_fwft fwft_context; + /* 'static' configurations which are set only once */ struct kvm_vcpu_config cfg; 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_hsm; 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; diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h b/arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h new file mode 100644 index 000000000000..ec7568e0dc1a --- /dev/null +++ b/arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clément Léger + */ + +#ifndef __KVM_VCPU_RISCV_FWFT_H +#define __KVM_VCPU_RISCV_FWFT_H + +#include + +struct kvm_sbi_fwft_config; +struct kvm_sbi_fwft_feature; +struct kvm_vcpu; + +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/asm/kvm.h index f06bc5efcd79..fa6eee1caf41 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -202,6 +202,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, }; 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 += vcpu_onereg.o kvm-$(CONFIG_RISCV_PMU_SBI) += vcpu_pmu.o kvm-y += vcpu_sbi.o kvm-y += vcpu_sbi_base.o +kvm-y += vcpu_sbi_fwft.o kvm-y += vcpu_sbi_hsm.o kvm-$(CONFIG_RISCV_PMU_SBI) += vcpu_sbi_pmu.o kvm-y += vcpu_sbi_replace.o diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index 18726096ef44..27f22e98c8f8 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_ext[] = { .ext_idx = KVM_RISCV_SBI_EXT_STA, .ext_ptr = &vcpu_sbi_ext_sta, }, + { + .ext_idx = KVM_RISCV_SBI_EXT_FWFT, + .ext_ptr = &vcpu_sbi_ext_fwft, + }, { .ext_idx = KVM_RISCV_SBI_EXT_EXPERIMENTAL, .ext_ptr = &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..cce1e41d5490 --- /dev/null +++ b/arch/riscv/kvm/vcpu_sbi_fwft.c @@ -0,0 +1,212 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clément Léger + */ + +#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 + * + * This callback is mandatory + */ + int (*set)(struct kvm_vcpu *vcpu, struct kvm_sbi_fwft_config *conf, unsigned long value); + + /** + * @get: Get the feature current value + * + * This callback is mandatory + */ + int (*get)(struct kvm_vcpu *vcpu, struct kvm_sbi_fwft_config *conf, unsigned long *value); +}; + +static const enum sbi_fwft_feature_t kvm_fwft_defined_features[] = { + 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 = 0; i < ARRAY_SIZE(kvm_fwft_defined_features); i++) { + if (kvm_fwft_defined_features[i] == feature) + return true; + } + + return false; +} + +static const struct kvm_sbi_fwft_feature features[] = { +}; + +static struct kvm_sbi_fwft_config * +kvm_sbi_fwft_get_config(struct kvm_vcpu *vcpu, enum sbi_fwft_feature_t feature) +{ + int i = 0; + struct kvm_sbi_fwft *fwft = vcpu_to_fwft(vcpu); + + for (i = 0; i < ARRAY_SIZE(features); i++) { + if (fwft->configs[i].feature->id == 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 = 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 = 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 = kvm_fwft_get_feature(vcpu, feature, &conf); + if (ret) + return ret; + + if ((flags & ~SBI_FWFT_SET_FLAG_LOCK) != 0) + return SBI_ERR_INVALID_PARAM; + + if (conf->flags & SBI_FWFT_SET_FLAG_LOCK) + return SBI_ERR_DENIED_LOCKED; + + conf->flags = 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 = 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 = 0; + struct kvm_cpu_context *cp = &vcpu->arch.guest_context; + unsigned long funcid = cp->a6; + + switch (funcid) { + case SBI_EXT_FWFT_SET: + ret = kvm_sbi_fwft_set(vcpu, cp->a0, cp->a1, cp->a2); + break; + case SBI_EXT_FWFT_GET: + ret = kvm_sbi_fwft_get(vcpu, cp->a0, &retdata->out_val); + break; + default: + ret = SBI_ERR_NOT_SUPPORTED; + break; + } + + retdata->err_val = ret; + + return 0; +} + +static int kvm_sbi_ext_fwft_init(struct kvm_vcpu *vcpu) +{ + struct kvm_sbi_fwft *fwft = vcpu_to_fwft(vcpu); + const struct kvm_sbi_fwft_feature *feature; + struct kvm_sbi_fwft_config *conf; + int i; + + fwft->configs = kcalloc(ARRAY_SIZE(features), sizeof(struct kvm_sbi_fwft_config), + GFP_KERNEL); + if (!fwft->configs) + return -ENOMEM; + + for (i = 0; i < ARRAY_SIZE(features); i++) { + feature = &features[i]; + conf = &fwft->configs[i]; + if (feature->supported) + conf->supported = feature->supported(vcpu); + else + conf->supported = true; + + conf->feature = feature; + } + + return 0; +} + +static void kvm_sbi_ext_fwft_deinit(struct kvm_vcpu *vcpu) +{ + struct kvm_sbi_fwft *fwft = vcpu_to_fwft(vcpu); + + kfree(fwft->configs); +} + +static void kvm_sbi_ext_fwft_reset(struct kvm_vcpu *vcpu) +{ + int i = 0; + struct kvm_sbi_fwft *fwft = vcpu_to_fwft(vcpu); + + for (i = 0; i < ARRAY_SIZE(features); i++) + fwft->configs[i].flags = 0; +} + +const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_fwft = { + .extid_start = SBI_EXT_FWFT, + .extid_end = SBI_EXT_FWFT, + .handler = kvm_sbi_ext_fwft_handler, + .init = kvm_sbi_ext_fwft_init, + .deinit = kvm_sbi_ext_fwft_deinit, + .reset = kvm_sbi_ext_fwft_reset, +}; From patchwork Mon Mar 10 15:12:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 14010470 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D263DC35FF3 for ; Mon, 10 Mar 2025 17:50:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=vOYddS0MakKJ5bdhP3oC/Jbfb4xHitJWRosG6hvbjbs=; b=VHvbCF3JNPuGkh 5KmRVeQ1qynt9ZnRhSH2vCJ35s7RJbWlUKL2BoCgQ/jaGwKvpNKwV/eR44l+y79amsKsYesklMHtS kuvQxT1Va+jtmj5PCDbP9hSh9hUmSoOYkSQYIDKso4cahj54IKolo8ocAiO3ycTTC9vd7ByEoiH5V 2S5m5eOfskk4qxblgClPK3/YR0MqsTmSKklgEL2p5f48u5L6ncPz5Da5Rli7dSo5B0/0MlIAw28cO 4wHNlyV1veX03JT7y5soxEEGoowNby+KU4qj6LhCRGHecO48ifpyKTUZvrPUlHsmm3NCgn/dRycMp KLZId+r3QVcOcq/HzPFQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trhGr-00000003WuG-2Cy5; Mon, 10 Mar 2025 17:50:33 +0000 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1treqW-000000038LD-3Gb4 for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:15:14 +0000 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-22438c356c8so47871565ad.1 for ; Mon, 10 Mar 2025 08:15:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619712; x=1742224512; darn=lists.infradead.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=OfJ3/5A+8eTTKYRN2eD83evjq8eHQRgBJnaNQ4fOKIc=; b=RaGZcgSuyZaRNK4dg61HdT9HjX4hr6meHTJ+jGQExnA8MoqybDS3qmzSZ9bjMWRydP dzsU9/9+xdi5pmJnkQWEP2hEIXjE1WLeMnpvNHsnd9/aXvVls74A3IioZyxnc9fWF+8u yYUYYAYhJ4xlqASg+4tgPSuhaOdvg7gNQUYZjk16yVEYGodkPCgJ+uhdBNhLlSfsnMfr 5+B8ZGDBUZcWekg2I5qHpv/8aJrnF2enrFNnwira7tIrs2F1rCHi1bQls+0KXur/7lnR 6U29yCFvnfHGZQXRO49X+XnrlA0NAuk1bsTg2ZO40TMSSa13axjbbsX6AjxmJ3Zyza3d luew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619712; x=1742224512; 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=OfJ3/5A+8eTTKYRN2eD83evjq8eHQRgBJnaNQ4fOKIc=; b=RhZfKuYYEuyGyziSjOYu91rV5Bakzl11oWLzXimU4icC1mUmlH3xl9RLwWFJthL6jv gI/YD0qm5T09CBq70VFLU530ib/XbIGATf3Rt74sCBJtPbqvveo85o1H2bB+51+j/ICK 1ZeRT0clCjh2n2MG/whIdk+/y/ugbCqwM2pJblKLKM7/yW76R4IlK40vsy723wF5Vg3F xKVVVm/Rnyy0NP6T5oCybdDqZdembqf6le6ZhQkKL7Uul7V/B/ivDbTxhWvom3mufcQ/ 1I004Q6QaKsX8alpVQbweEV7AGnObjFk3sDLLFR7JHWQek1k2Rrjq0K7tG+RH9K4/N77 DTEg== X-Forwarded-Encrypted: i=1; AJvYcCXSL9nO61TNv966TV5xfV9caAWet2w3ZnjlDkiD/6np+ppfTM2VXQp5NAXTN/GS79UrC6C607DjzK6qzQ==@lists.infradead.org X-Gm-Message-State: AOJu0YxsSbjkaG9yPbCxyLMG+qRF477Oqwpfre6Mt6qQbkBN6W0iPGCV z24tGur1RaLtp9DrrKmipNR4GvOtSnepv2D+ViivZb/Nff4xWxOureOGbNauq9w= X-Gm-Gg: ASbGncuV3VmauImPdp+jnjr+hhcoDMH6RTkrIcwENWP9N7/s63RE1REgX5c6ko6MmOy kRBxCfpzDsxp10GdgnnkUag+k1VLfYqWiuXlguwdZZYaDevrRsqkIiGIpyUbHRF7xT8kac/i6iO DKj+8syIqjorm7hS8louqvzC5PXbOtRmgVC/xgV0Xo7yF8ZZfyjs7IZtSl8BzqKpqoPJ7tnZV8D DjiJonX0KpvxV5ANnUurcy986MOnHC6I2xTcP7he3UgVLzPjF6l+EPwe3hm5VnIeYhORMz5WbGq 5qCMi1uDW2WB1RrYJfmlkJ5rs1F8n/2gaTN675AshJEmKQ== X-Google-Smtp-Source: AGHT+IFwcAES82fPdZN2juakD/f3DtxEXqN8fLDByuuUWFv0PrmjGf+tQ1Z8z/EN2hDCjCyy0IsnJg== X-Received: by 2002:a17:903:2b0f:b0:21f:8453:7484 with SMTP id d9443c01a7336-22428a9d15dmr204592905ad.30.1741619710747; Mon, 10 Mar 2025 08:15:10 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.15.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:15:10 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= 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?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland , Deepak Gupta Subject: [PATCH v3 17/17] RISC-V: KVM: add support for SBI_FWFT_MISALIGNED_DELEG Date: Mon, 10 Mar 2025 16:12:24 +0100 Message-ID: <20250310151229.2365992-18-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081512_845122_AEF7965C X-CRM114-Status: GOOD ( 13.29 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org 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ément Léger Reviewed-by: Deepak Gupta --- arch/riscv/kvm/vcpu.c | 3 +++ arch/riscv/kvm/vcpu_sbi_fwft.c | 39 ++++++++++++++++++++++++++++++++++ 2 files changed, 42 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 = &vcpu->arch.guest_csr; + struct kvm_vcpu_config *cfg = &vcpu->arch.cfg; vcpu->cpu = -1; @@ -671,6 +672,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) csr->vstval = nacl_csr_read(nsh, CSR_VSTVAL); csr->hvip = nacl_csr_read(nsh, CSR_HVIP); csr->vsatp = nacl_csr_read(nsh, CSR_VSATP); + cfg->hedeleg = nacl_csr_read(nsh, CSR_HEDELEG); } else { csr->vsstatus = csr_read(CSR_VSSTATUS); csr->vsie = csr_read(CSR_VSIE); @@ -681,6 +683,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) csr->vstval = csr_read(CSR_VSTVAL); csr->hvip = csr_read(CSR_HVIP); csr->vsatp = csr_read(CSR_VSATP); + cfg->hedeleg = csr_read(CSR_HEDELEG); } } diff --git a/arch/riscv/kvm/vcpu_sbi_fwft.c b/arch/riscv/kvm/vcpu_sbi_fwft.c index cce1e41d5490..756fda1cf2e7 100644 --- a/arch/riscv/kvm/vcpu_sbi_fwft.c +++ b/arch/riscv/kvm/vcpu_sbi_fwft.c @@ -14,6 +14,8 @@ #include #include +#define MIS_DELEG (BIT_ULL(EXC_LOAD_MISALIGNED) | BIT_ULL(EXC_STORE_MISALIGNED)) + struct kvm_sbi_fwft_feature { /** * @id: Feature ID @@ -64,7 +66,44 @@ static bool kvm_fwft_is_defined_feature(enum sbi_fwft_feature_t feature) return false; } +static bool kvm_sbi_fwft_misaligned_delegation_supported(struct kvm_vcpu *vcpu) +{ + if (!misaligned_traps_can_delegate()) + return false; + + return true; +} + +static int kvm_sbi_fwft_set_misaligned_delegation(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + unsigned long value) +{ + if (value == 1) + csr_set(CSR_HEDELEG, MIS_DELEG); + else if (value == 0) + csr_clear(CSR_HEDELEG, MIS_DELEG); + else + return SBI_ERR_INVALID_PARAM; + + return SBI_SUCCESS; +} + +static int kvm_sbi_fwft_get_misaligned_delegation(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + unsigned long *value) +{ + *value = (csr_read(CSR_HEDELEG) & MIS_DELEG) != 0; + + return SBI_SUCCESS; +} + static const struct kvm_sbi_fwft_feature features[] = { + { + .id = SBI_FWFT_MISALIGNED_EXC_DELEG, + .supported = kvm_sbi_fwft_misaligned_delegation_supported, + .set = kvm_sbi_fwft_set_misaligned_delegation, + .get = kvm_sbi_fwft_get_misaligned_delegation, + }, }; static struct kvm_sbi_fwft_config *