From patchwork Mon Mar 17 17:06:07 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: 14019754 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 CF015C35FFF for ; Mon, 17 Mar 2025 17:13:05 +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=AXV9kOtcK4t2YWLqlZPnT2bcmHDBpfmtqvEyh2qyufY=; b=EZ3c6Fgd8K41fH IaMZjeDd1ZW8Wk43QxfJ7luxkQHY7vpO2aqw7uyWBufGtGcnQ+IOMZP8ylDS0bl+/8qI9y5npPHmA rS7jK6sXPRVBXX9o3R/igjsV62pCV+Qbgeau0OkAeR8H3ikFkRwWJ+MlwxAgS4UUN8yBVnuP3cVDu 3eITalqQ+DpZrw8t2sESBNHi9FkEHL2AAgZzStseCk55S7EAcbjo1qHO6z4YLsGUGtLZ6pt0j9q1a gl8WUYJ4aqcxCndjXolpds90xKC4KNUNUPY3MmzkZVjHRgFrvHKXkTT4t1EoZufevJ8+TKP5HP+oG FQi/23Qdk5ntN5I9Wc5Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1L-00000003UrY-0w4C; Mon, 17 Mar 2025 17:12:59 +0000 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwf-00000003TLy-24cS for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:10 +0000 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-43d07ca6a80so11473255e9.1 for ; Mon, 17 Mar 2025 10:08:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231288; x=1742836088; 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=CVImGrzi7Si4eY1ElT4GTBjapJa7KEDVy79wJkwRK9M=; b=XgjLuDxVxhIvU5XW7jetxk2Gv2lmEQu5+tZAz2omHVnde3UzFAdMkmgmnJwKAVZccj 4UTwN+aIghx17W6m0zjdvvy93OY1DrHFLrXEZQJ6uzgg+6qDBm6myEzrNT9NHuErapf+ KHZO+4lM1Fhum4Se/7qhM7vImS6T+Rjzg4NvhqJ11DhsmUDpYksuBbP9LOSkHgxy0242 y1Kambu3NRKwpF5Rkax4KBF8EJOQLdXoJYJvVmjek2w0qvXvJLsDKSjKVMsUSiJI3sXm w46lmrIFGhTY8VY50TjvGwQ0YSOvDa+eZQYZdnJP7dBKlyQ9qCZnXs0LTtNZdR3GN6JV kGlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231288; x=1742836088; 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=CVImGrzi7Si4eY1ElT4GTBjapJa7KEDVy79wJkwRK9M=; b=DF8sN6jISOtLafF+I6owvD6+lLiy6PAMvWpSjlTVvEgcpgsB+9UF96AsHlrE3GnbAV WmW5TIWUTVWyFBD28MgJY3DCaptvPXUWAWyVPUGEBdCnreFdpzck3w3XMZV+67yXqQon 5sJHBFzY/+Zz+F3mZWd9GCH9qQ+2bpZNuqaEgsPylzSqTYSoG2RKaI47sixIlIfMhI1p YsKEuKdiV/TP9aMh2EeDzc1VLoW/1KRjIBInX9W6cOcdOAOn6tHAb3tGU7RJqGwNuP3x tmO7YB3jcdQuehHJpOyCffX9RnbzULY50txJ0GI7VBwg0bsn6JAQzGALhcSt7ubkoKR1 v8vQ== X-Forwarded-Encrypted: i=1; AJvYcCUAWLf9fOggHm37KNY9Sw3gJYFut2QnguILTgTFTmQnl+eShew+KYAiGIe+AaETReWoaj632ngTr7NBfw==@lists.infradead.org X-Gm-Message-State: AOJu0Ywk6/wBvr2+bMkfCBefMSQcbsr8b/NCNCwdqpES65Y2K6Zoqz0w TXj1FK2E3VGi7+ezN8eQiLJW7mK6+WfZfsMtF1yXwpde3LQ72KIVU9kXtEnfd54= X-Gm-Gg: ASbGncu/i+RTr9mu8sr967xOny0lDFSBkW7TILZpn6AQDcqNBTHb0+IOhtPFEV3LHM6 iuzz1LmL1Ky5NbXfEpsKlw6bS6yviiGSx4FzCQF4RNJnUtV3iId7aSeRusv9E2ict6/8Lu4EvUO GrAeXMfVbFgnJe+XSZ3S7IdI9e/oy/9lcwPHaAzcgkFGUmxHRa8XxoJH72L5ITKX3lhLQelcyZB yxLtlley+SdDtz5kw6GCTLY+eqdbDibMJiDanvExHSvQPohf96HNT78AY0081XxstzAQ9Xeh92m xHSIyuzb/AkkyLUraHGKe2e5Mf2P6yPnl4oVI8VrR0a70A== X-Google-Smtp-Source: AGHT+IHKMm/vFlG6UDlvbMz7uYFJ/kE1+rhH+pJF0OJXqGvzOjYrzfvpGlP18pd4myenVCv8U+eYbw== X-Received: by 2002:a05:600c:4ed2:b0:43d:cc9:b0a3 with SMTP id 5b1f17b1804b1-43d1ed000fdmr113482925e9.22.1742231287574; Mon, 17 Mar 2025 10:08:07 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08:06 -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 , Andrew Jones , Deepak Gupta Subject: [PATCH v4 01/18] riscv: add Firmware Feature (FWFT) SBI extensions definitions Date: Mon, 17 Mar 2025 18:06:07 +0100 Message-ID: <20250317170625.1142870-2-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100809_538027_8760AA25 X-CRM114-Status: UNSURE ( 8.97 ) 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 Reviewed-by: Andrew Jones --- 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 17 17:06: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: 14019751 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 9E52DC35FF8 for ; Mon, 17 Mar 2025 17:13:05 +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=I24bF1jBZK4gL0Icp3TIA+AN7RxjcJNAq7eE5nUEHjI=; b=gdXxSPwTOJd/Rd H/E4Hi14hY6j+P0ZYyVzdAn1yEb4Vm+Mo4x8uTPFv+u0JXRUr1j0Ooyv3QgErpNTApDcctG4mEXt6 pdcZec1b3NoM2WA+IWwexb4bT2PIovRk4KFrqiUS+fAnKMcsRC6fnH1g2K4cb1pjfcsFKNZeKa7gw Oo2VQY7KKefvBZacGHJpnePnOmfKmopkfDetP1be8902H0oPP24L9j+z/+rkmwA+g9PHETeLVoVZR Bz4R6yIixsk4J7Dx8BKUUY+Qh+r0KRa6xRq3oQGHAh4BA8PJEobeqi9xc6LAMOB9Y9UQNSEOk5V0P 3iLDuprJWqsYNebftUCQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1M-00000003Usf-15ky; Mon, 17 Mar 2025 17:13:00 +0000 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwg-00000003TMO-1qSf for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:11 +0000 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-43cf034d4abso26598325e9.3 for ; Mon, 17 Mar 2025 10:08:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231289; x=1742836089; 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=xMypehTPr85TSV6ycxYis0bFMGhRtQvpG8E21HWF2pk=; b=cDr8GA6MnokNOSmtjVhMo5htLQa8VBItcbETp512FWT985DjIdMcanjr1rZ9bHVYtQ TPq4QnSYloQuSpLimHrnGEzFxM8PKB6iAH69j5sjqNEEV/CTUF/mWbpAPJT5xVA6YjKb l9lWUDaKeVr73M8n3iG+jxYaazVxZF4DM3zRhY9eTEIZGqHT52oc+T834JqKcif++zCP lxkgud/h/9oEBGXVIWSan6U77CDM9Ybq5f6y3MWGBVvjGL/QRu7EWp+zh3IgKBGI592N KpsU7ahSRYdrKGx2iML5dK5mhkB9lW0FXcEgPkLa6ttdIBzmEg3CL2gPy5/a+QikZX+0 ddEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231289; x=1742836089; 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=xMypehTPr85TSV6ycxYis0bFMGhRtQvpG8E21HWF2pk=; b=unPx6Lkbv54sDl5FatbOWPECbXGJr3Km9Q7/bjE/M/wr+u0Uq/2QjfTZdbSfSWlCZy QEm+ytvD6frcYtevgWTgm6dSgFuFkfK55Dxybp0EYTWCmdcAioqenA34jdca8tRGlwho NYWcVPGn8ZgYMOMPy5Oo9gm40oQg5/lK1jZhmHU7FuYp10Pzez6y+6B6KtFMxgaZS0EO djouxKRumbHbIO69ycqqw2iomNylLvrRx1PD76JZyJGEhsktxPqmM7dNtlZILJWHivyY 7MAbZixHXROsEjIuJsTvVrb9HKnMwqL3AtetXioP/oaECPU3LvdXMWpQjcFmVich4cSr wwrA== X-Forwarded-Encrypted: i=1; AJvYcCWoKArVdta9Muw5n8/rPc5JN3e6YPOHdPN30xDQgLgb/1SyOMax7DlzDQ30C73xYKOAP8t0dM4v7xxhYw==@lists.infradead.org X-Gm-Message-State: AOJu0YxbCIdRNs5D1l/M3isNfMPAEMORK5ODjg6XUjXop27ie57r0K6J sLqVlffWrH86TBcaqx5hq+ZAd8lmX/eFju/JbVLZIEcxHHNbAvuKCwxzwxe/xRg= X-Gm-Gg: ASbGncsiz2ysWn3cQHnWeovQpp/36BbH/fMwnjDDqdhYR+D7AW/EyqVAKe1Z2Jr5or/ cNjWVXdI3mdIklztJgmShScqcssNcaxgqCRErqAr/8yOJT54sLE1ZjZc+CYuyZQGUBjjX7UkqHO TFXroC5RcwrrQ3oehSXHlTFpSvx/ZQMA3hzGrMA/Orw4GJBaSvTxD1FAvuf4Roi7Rlif62ftDhu oIYIktCg+HsTUGFsQKU6GrdPkAs8C6x7F3YRWpMRNH7bu0tVewZibTNE0opLta4HcrXQvJxJf5p R85/vWJZHfJCMgp/iAiImwLxqiPyerMekbnToqCXyyAo7w== X-Google-Smtp-Source: AGHT+IHUEfWy8vRElctY1RJYRY/dHWRIdTIpUq+PBDo9gX+Yv3PK1rGyecjDgc1lfv0PGC4CYGx5Ng== X-Received: by 2002:a05:600c:1392:b0:43c:f4b3:b0ad with SMTP id 5b1f17b1804b1-43d389d441dmr5431565e9.19.1742231288764; Mon, 17 Mar 2025 10:08:08 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08:08 -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 , Andrew Jones Subject: [PATCH v4 02/18] riscv: sbi: add new SBI error mappings Date: Mon, 17 Mar 2025 18:06:08 +0100 Message-ID: <20250317170625.1142870-3-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100810_480354_7B8CBEC5 X-CRM114-Status: UNSURE ( 7.36 ) 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 A few new errors have been added with SBI V3.0, maps them as close as possible to errno values. Signed-off-by: Clément Léger Reviewed-by: Andrew Jones --- arch/riscv/include/asm/sbi.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index bb077d0c912f..d11d22717b49 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -536,11 +536,20 @@ static inline int sbi_err_map_linux_errno(int err) case SBI_SUCCESS: return 0; case SBI_ERR_DENIED: + case SBI_ERR_DENIED_LOCKED: return -EPERM; case SBI_ERR_INVALID_PARAM: + case SBI_ERR_INVALID_STATE: + case SBI_ERR_BAD_RANGE: return -EINVAL; case SBI_ERR_INVALID_ADDRESS: return -EFAULT; + case SBI_ERR_NO_SHMEM: + return -ENOMEM; + case SBI_ERR_TIMEOUT: + return -ETIME; + case SBI_ERR_IO: + return -EIO; case SBI_ERR_NOT_SUPPORTED: case SBI_ERR_FAILURE: default: From patchwork Mon Mar 17 17:06: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: 14019752 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 A3A45C35FFB for ; Mon, 17 Mar 2025 17:13:05 +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=Vb7SbCv9WR/TIuIrUmp6gUN3pEPFMvPRGXLbDTBbLi0=; b=dCy+Y+67cs5SBj Z/zjKEMUJY8hKqqTHgrL1Sh5Tw15K2pHOeNIYchWIl5rvdz2ZCM7UQqThIdscqVFMIK9gOOPilMOU WYSizhdhe3TXTHjsl9f3Vztoi9P+9Qz21WdfTzv3dGyJm1SGqlIbAHoLx+uAgPjIRozY/B2bIBOkI Jd8Jbf6+keaq3cPHr2WQIGsAbxh3cmNrYRBYdZn3+PlcNZkUQ2WXQn96VTzebxaXfiR/zV3iK4KNC BOMe08Pej0l1mw1WiIExSntjJun9MAccarWvjsV0xWw7P6WR/zMohmsUI/f8KamC/cSkLVIkuNdqn aLTkX8KyAdn+FhfBBm2A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1N-00000003UtZ-0lVH; Mon, 17 Mar 2025 17:13:01 +0000 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwh-00000003TNy-2Muk for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:12 +0000 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-4394a0c65fcso22361105e9.1 for ; Mon, 17 Mar 2025 10:08:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231290; x=1742836090; 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=WzyfmLdoy3J2d7N3ElT+BcY4glWrhhZZ3MI8rtjNdBk=; b=PC8SMDxg/39rRwF1oy1T82SRYA2SGjrhRwlzN1MOTDWf6EhinxEeepattelVs5vRsS dBF9AzjVS1EivyFXbQ8QVkKgM/phpL2JX5k3Tk76Us4kBqj7ebyBSAXz3Q9+NLAXEtTK jfspf0XDaMHsz4FzzFIG/1d50kic6VbkFAC2717M2C3D3tsKEZwxetGv+A+BmX+2H1Fb 36fDXAbn79rBcBxy+zni/kmQjJwEvvuQwlSGl2w2yxnOose072tPUhEC7qJZhqhS7i5I 5k1xS1BkIBoJ1Ja9ItyNqmiQN+WMx4hgDLW/x/lnDMVviBBxQdeJS7P5XnN7K/C+xMeY V4oA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231290; x=1742836090; 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=WzyfmLdoy3J2d7N3ElT+BcY4glWrhhZZ3MI8rtjNdBk=; b=o8Kg4IgtU/gws1mEZrECUattWePaqQXT6+ysiYq/Tw4Df0JMZYdrsiUl0GgwMp02Xg b8ZGl1BI+iyE7TtoLes0oCWP17C8eawSXkd1cMt4tjlU8ioJgvSVa35x3XIPI+AwyC8X OQISG6Upb39IuBcejODzJ+0wTH35sYB3kZP29vx84osO+iK8ZUmmx++mseU/dF6adZRb pppWobq134kPyMYqhfEAidMQSjGafw5Cif0WgGyOCCAoddltGwPxTs/s4mM1RuOCA9oc VmCn1dQtBOCvX9viQudE43yYW/2pHnq9g/Nqqd+0sUZ+mrbHzD02NqP/g/tTUgD3+rRL DmkA== X-Forwarded-Encrypted: i=1; AJvYcCXcT/eb/koFF/8uSXl58NtElZagOy7tkwJftMcvTDaRZWFORv+Np85eB3QaRGKqe1HkLkkdnocKmkIl0Q==@lists.infradead.org X-Gm-Message-State: AOJu0Yz4EMgJn684AbJRWdLoqylvFdp2D76aStY9UmSJ08E8rX8NQgE3 oJpEu5hyHjiIUb/+erbDxrv9cKg/myPVgomkg2qfXpQoNCfD2HWZdn1Bc5eKD5U= X-Gm-Gg: ASbGncuB7bsrdVfhPfbO9KO4WcM0YBwKIvSdmLzlhRnxwvQ6JageogOENabfveVcmzv QAeCacDKiMoXy7/L2yPAeL3LzV22ef+f/ny579bB1vrg5GBYWsHm4RzsicemXRtkAP/Z+fe1Umt zcWXkm2W0GJwZipE9jqRoT05hfuDLxp6+R7wEua/ROWdlRy77jqzcU7Y4euPAg9HEMehRnzgQRX DdatoqtlQksaKcLYHLXt2GXMoCRY+5MEJsAwitWObOSlX9Gkztufb0cE3Y2tYGPnf6X4reHVPkg WtMpjdjlwbf0mEnkyc4DxQZYyrgWMlmgDFkFJkBzaZCbhA== X-Google-Smtp-Source: AGHT+IEXtMD53rpT5+I6qBlek794Ca+55Nd9V0KPjs7YD1xcg1pmEqFLjYcNNVWjDAHYDrYaGY3dSQ== X-Received: by 2002:a05:600c:3c89:b0:43c:f87c:24ce with SMTP id 5b1f17b1804b1-43d1ecd7adfmr118223885e9.21.1742231290211; Mon, 17 Mar 2025 10:08:10 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08:09 -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 , Andrew Jones Subject: [PATCH v4 03/18] riscv: sbi: add FWFT extension interface Date: Mon, 17 Mar 2025 18:06:09 +0100 Message-ID: <20250317170625.1142870-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100811_626421_1A0E5859 X-CRM114-Status: GOOD ( 13.74 ) 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). Add an interface to set local features for a specific cpu mask as well as for the online cpu mask. Signed-off-by: Clément Léger Reviewed-by: Andrew Jones --- arch/riscv/include/asm/sbi.h | 20 +++++++++++ arch/riscv/kernel/sbi.c | 69 ++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index d11d22717b49..1cecfa82c2e5 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -503,6 +503,26 @@ int sbi_remote_hfence_vvma_asid(const struct cpumask *cpu_mask, unsigned long asid); long sbi_probe_extension(int ext); +int sbi_fwft_local_set_cpumask(const cpumask_t *mask, u32 feature, + unsigned long value, unsigned long flags); +/** + * sbi_fwft_local_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. + */ + static inline int sbi_fwft_local_set(u32 feature, unsigned long value, + unsigned long flags) + { + return sbi_fwft_local_set_cpumask(cpu_online_mask, feature, value, + flags); + } + +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..d41a5642be24 100644 --- a/arch/riscv/kernel/sbi.c +++ b/arch/riscv/kernel/sbi.c @@ -299,6 +299,75 @@ static int __sbi_rfence_v02(int fid, const struct cpumask *cpu_mask, return 0; } +/** + * sbi_fwft_get() - Get a feature for the local hart + * @feature: The feature ID to be set + * @value: Will contain the feature value on success + * + * Return: 0 on success, appropriate linux error code otherwise. + */ +int sbi_fwft_get(u32 feature, unsigned long *value) +{ + return -EOPNOTSUPP; +} + +/** + * sbi_fwft_set() - Set a feature on the local hart + * @feature: The feature ID to be set + * @value: The feature value to be set + * @flags: FWFT feature set flags + * + * Return: 0 on success, appropriate linux error code otherwise. + */ +int sbi_fwft_set(u32 feature, unsigned long value, unsigned long flags) +{ + return -EOPNOTSUPP; +} + +struct fwft_set_req { + u32 feature; + unsigned long value; + unsigned long flags; + atomic_t error; +}; + +static void cpu_sbi_fwft_set(void *arg) +{ + struct fwft_set_req *req = arg; + int ret; + + ret = sbi_fwft_set(req->feature, req->value, req->flags); + if (ret) + atomic_set(&req->error, ret); +} + +/** + * sbi_fwft_local_set() - Set a feature for the specified cpumask + * @mask: CPU mask of cpus that need the feature to be set + * @feature: The feature ID to be set + * @value: The feature value to be set + * @flags: FWFT feature set flags + * + * Return: 0 on success, appropriate linux error code otherwise. + */ +int sbi_fwft_local_set_cpumask(const cpumask_t *mask, u32 feature, + unsigned long value, unsigned long flags) +{ + struct fwft_set_req req = { + .feature = feature, + .value = value, + .flags = flags, + .error = ATOMIC_INIT(0), + }; + + if (feature & SBI_FWFT_GLOBAL_FEATURE_BIT) + return -EINVAL; + + on_each_cpu_mask(mask, cpu_sbi_fwft_set, &req, 1); + + return atomic_read(&req.error); +} + /** * sbi_set_timer() - Program the timer for next timer event. * @stime_value: The value after which next timer event should fire. From patchwork Mon Mar 17 17:06: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: 14019753 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 69F61C35FF9 for ; Mon, 17 Mar 2025 17:13:06 +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=f89PPqFUaTybFeDdfRhnanwn5ZMn3T2hw8F2nXG6hIU=; b=uZh6hgw7wEWzzs MgUmTI9zJWhpURw0v+F97cTR9bKXr0i+fSlBsT3cpqgRCJK/6YWN7Mu5FylsaXgFK9lYkshZi6uLN RyZdhfCYksXwXm5NUUPVyq55buJbU8Wts42+kzteTd0rAMajptoKFs4Q0U00PbCuLsVAwTzz9g9qC r9F+YepP/xOtdtNN3BeIE8ddva29KXkiFN/DMOUrJbKwABYQUYVZ+G//PRNqDKY47aSvuL9vRKnhh jF+aVo4b4I/RzThAjysJdtTTdYEz6qi1mAaFyrJ5D6yaSZfB2Q1QpgzbR8wsdVx1ZutKJ5lJMNwkK 6VvrX3WXe0LZwT5vxA0w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1O-00000003Uua-12EI; Mon, 17 Mar 2025 17:13:02 +0000 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwi-00000003TOY-39Hc for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:13 +0000 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-43cf628cb14so14583545e9.1 for ; Mon, 17 Mar 2025 10:08:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231291; x=1742836091; 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=MnEzy7kWLGCaTTq9cfZB5uZycg5cp6OZgHd6PiXZO0Y=; b=ZN0ANShPDFbUMs1yoZL0JOh0AEykczSmWPJ9zckLFmuHoMRrFO1KcYdBfWY7lLWsob s4vI8YvKPYk4ZvN90i6DdrEAB9UHv2x9TQ5dRQwYHkDgz7fYk0heT86muDT0yETDzShm GdqcUnX+WoCiLCrUZ3CYvCNVtVwIQNXt5TjQYnVZ9noa4/EOgNVJoBZJyw2Kyh+Rx8wm WqCuV3DUuToiDTJA72YVSHkzY2KZffq/65OayL6nRNDVR3Z7XNV7roLlQXXL/S6Q89vT 2K5Tfiy5k2UcpeUUjvcqNIjb5FArLImNDxS8XGFeXk3GbFgrDFaA4ejMQ3PEqGy6blj8 d0gQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231291; x=1742836091; 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=MnEzy7kWLGCaTTq9cfZB5uZycg5cp6OZgHd6PiXZO0Y=; b=etlIwOT4t7MznotZAX6AWz/v98oKc6mkhxNQCW1OWGu5NixaVxO4wJWZrPRp/sdhqF qvJvOFqnWmu3z59KMPJ5eHurIsLrO0KF20ptOjq/p4Uk9u3rMBB6Sn1dQOLGvB4Qtado LWm3ghrZQnMepIgA2s8pbcQlJVLekFIJLSrq7v0NIuM/32qYxBbz7bqn5E5/LcdB0RVK fW08HfvxM4GwBpmegF2c/AeDv/8cHuj93bhF6gm+LGCCValW5YAJSuS8Ebhwq/4LPKAq EyOEm2DL8H394wT0QXrf6gDLH9NGJ1KtAPDrycw0w27i+ocBULrFo0M2Jl1kEeROg7I8 Rt+A== X-Forwarded-Encrypted: i=1; AJvYcCVd9cDjlJQwHoGWSfKlu7fKd/WizcUBUj8ecbx069CgXVqUlSK+ryuNNZGQr5hEdW3Yaja12P/bMMeICQ==@lists.infradead.org X-Gm-Message-State: AOJu0Ywjt7GY8dHKDOgPuErpjNrZ8XEP2cZAvk5R/oIw07gbZxodPOz2 t+dS90+nQ8ZXpuPEeCbgAzjmQ44eVEn0Zj8HWOFNb7JEQSgpPBW8kG60Y5f0DpI= X-Gm-Gg: ASbGnctBLNoJDwvf9QETolyUcfUJdTpN5CkAwsuOH90lj02nzYKD27CWfbMsHb+9F+p we87/qz/p+MjfUp/XGl2/kLdYs28NwYOc12sYRN0zdkNl2QvFNa7G/y5Sn1O9YJOJBlo+lUBPGM Cvt1p5l6V47OeaqsaBsp5yv0uGQg0WAUduUoBlQxCD2nO15DjEe5hZFJ/GPgZcVogU3sFkBVOhE JBa+RYNo+GSpgsNEsNgS6+p9ZBSbb93fkuES0zPZ4nvivjMp70K6DK3aZnuC6ioNaeD8S4bfrGz BkbPXYKNinmp6wl88YrOQQBwxUeeMkMr4vyVMB1/U/rhrw== X-Google-Smtp-Source: AGHT+IEhk9ILCkt1d4miwCrhVE7Pp8SXCLMrmpN073cNBxqpViWwe1YnhF1uSTy7oETuXKPGMPnacQ== X-Received: by 2002:a05:600c:a53:b0:43d:b33:679c with SMTP id 5b1f17b1804b1-43d390976e7mr2112565e9.14.1742231291216; Mon, 17 Mar 2025 10:08:11 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08: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 , Andrew Jones Subject: [PATCH v4 04/18] riscv: sbi: add SBI FWFT extension calls Date: Mon, 17 Mar 2025 18:06:10 +0100 Message-ID: <20250317170625.1142870-5-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100812_796398_CE2647CB X-CRM114-Status: GOOD ( 13.50 ) 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 d41a5642be24..54d9ceb7b723 100644 --- a/arch/riscv/kernel/sbi.c +++ b/arch/riscv/kernel/sbi.c @@ -299,6 +299,8 @@ static int __sbi_rfence_v02(int fid, const struct cpumask *cpu_mask, return 0; } +static bool sbi_fwft_supported; + /** * sbi_fwft_get() - Get a feature for the local hart * @feature: The feature ID to be set @@ -308,7 +310,15 @@ static int __sbi_rfence_v02(int fid, const struct cpumask *cpu_mask, */ 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); } /** @@ -321,7 +331,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 { @@ -360,6 +378,9 @@ int sbi_fwft_local_set_cpumask(const cpumask_t *mask, u32 feature, .error = ATOMIC_INIT(0), }; + if (!sbi_fwft_supported) + return -EOPNOTSUPP; + if (feature & SBI_FWFT_GLOBAL_FEATURE_BIT) return -EINVAL; @@ -691,6 +712,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(3, 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 17 17:06: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: 14019755 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 D443CC35FFC for ; Mon, 17 Mar 2025 17:13:08 +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=cinsuHuOYavEntm8uvEJiUGWRcxHzPUrsTEUj6CzbTQ=; b=Ps3EMF31aFjn6C LDIwRNFfh5pxGQf0Fm6XkaOA5D1czt8oJ1f+i7tsunHOw3LX7pSQk57eO2LKXZgeqBxgMgCI/2mCQ c9yIoF8bYad5r5k3ioUS1t3DtK9z9D22xhCyGTJ+N7tYC2KOGmAWMU/hXGNVxV8dkmlH485XFuM7X AfXbZjU2kyTHSNDh4V4YiC/Tm/he4AdfBF4qjzNicPjqwuxRU1dOSs+HYpmqo7ccHkSbf7GfUaiGQ x99nqk92CJoigFV3gUgIWLiuon+j7TNi9D4EWDqHdRjlNJ5ay/9P8obQEeV3RsBXc9EPHCENZ1XkE gYNuTpw8IFRecOvQWx7A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1P-00000003Uvf-1HN1; Mon, 17 Mar 2025 17:13:03 +0000 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwk-00000003TQ6-00GU for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:15 +0000 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-43cef035a3bso17141405e9.1 for ; Mon, 17 Mar 2025 10:08:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231293; x=1742836093; 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=5k1emOUih8WEclNZ1DDbkx/NdClZ1In2F+3XrsHVDoI=; b=yfnibR/2sqg/hjS1TqiOgjyd32Mo01AVE9b498yRTklo3g/8sglkv2/X1MBDozUxD2 3nW7Lmm3Dl/LzRkk49zR5ZAytTS4uFk0hUlLL6FqyFkStS0RYWujs0Ycmf6fQmPHmwQZ KcxH5x8r2KVqR0fF12v8zkWs9gxz2KM8mN//ZNsmCX9A6jQF1Lux/HIEVeQwPKJGKRnK dT/zHfGvMFB6Vl9VOfY/3QbtyuBBRi/xz/hiKoNXAKixyp1s3MthhL+cCRtLBoquiFqU NyNz1l+6Zq+qj2sCLqBk/IVBGTc6eWyxQ0WcVmKmk6Pyvk7lac7GjO89lnjiG3lPjU5K YHzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231293; x=1742836093; 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=5k1emOUih8WEclNZ1DDbkx/NdClZ1In2F+3XrsHVDoI=; b=HDWG+0uy69+PbaJXn0J+68ZVyBZaPZbTACfCAhmQzXo3Dt4K2Da93h1dwd4jZkURq/ yHHlE30i08sQQ0UBoGVvJ3Ik9l+iX/lUmU9tKZyKEHce2+Q8XnVQyL6mubpJ18rRK6iO 9PlueAKgC+VEgY2SWfyKJgnHzfWvcrV+HQIF6tdq0HXKh6G3ZXcY52NX9wohUnwolPpp 4UJ1ZGCJtIb0D2UDMaR8IKo+DFQrCm1ZQG0Ssy6AxIJshVtt5QNyxwOb2MSaiZML5s9U V4boRC8VGx+QRL0X63Hrpq529q20ITgdOMFEbcB8ok/l792H0pwPmHV7q2Bj5eyKf3Ki c4rQ== X-Forwarded-Encrypted: i=1; AJvYcCVFG5WCEnhsWnebVjAAfh8wNoje9bqu5xMFzJr2p1RjrANQNr6I21UrKNZyayJtbt194euybichB32pgQ==@lists.infradead.org X-Gm-Message-State: AOJu0YzYgsobQ4xQkp5EeqDiDbtOXXNxgbqkMeT8hW2G5hRIKrM7l/nb 6M9c1k0c2ErYxyoSyiUj2XE5+uGSOmOwMCgAMOutv9x6zHQzZABcUo+6692k1ioyupNyHeFvUg3 NQDs= X-Gm-Gg: ASbGncs0blgxmRvC12cYyAcwRK6+0lXw+MdZgA1UiCDazZgKxlE+gnt/l+Mv0ywjf7e KnHgFNNuz5Ya2NTTAavF9mlyllhf+jqM5Uml6XXkh/P9tVzeek5HlwsgCb3LOVfsdDYPGsHi1e9 q6SZ0g2rzAIsLbtZ/CV6fnVarClQx850lPPH/OmaC7Iwz1EMEzmLQmvVOyyPfCDR1y4psCo7anf 4eKM+ewXksuCRDNgM73s3wytgoT45GIrx5lD+TKn2E23Za9ULORkcAHvbApvsDcyER+m6SUtqo4 t/SKWP6L+rsf3H4odHZAqi7A+SbRU3Thnhg+/NWnJw902Q== X-Google-Smtp-Source: AGHT+IGirZlNuMI7AkYZLJxITsbB2mx0iqkOoTwEVui95+l6OuB5d7SYtKlA2CI4i4rX//+fE8Z8jQ== X-Received: by 2002:a05:600c:468a:b0:43c:fb36:d296 with SMTP id 5b1f17b1804b1-43d1ed0e03dmr115529165e9.25.1742231292646; Mon, 17 Mar 2025 10:08:12 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08: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 , Andrew Jones Subject: [PATCH v4 05/18] riscv: misaligned: request misaligned exception from SBI Date: Mon, 17 Mar 2025 18:06:11 +0100 Message-ID: <20250317170625.1142870-6-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100814_048773_95A7F9A0 X-CRM114-Status: GOOD ( 16.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 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 Reviewed-by: Andrew Jones --- 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..fa7f100b95bd 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_local_set(SBI_FWFT_MISALIGNED_EXC_DELEG, 1, 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 17 17:06: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: 14019756 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 82125C35FF8 for ; Mon, 17 Mar 2025 17:13:09 +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=7eD3lbw9ZM+Bz8CoArWyyJdElkxrca2fvJ0LM9Xc8sQ=; b=Xcv3fewfjcH0g0 SRAi7LymASqhJOHxk5umj9hQcQXAyMY083RYaIiTmwNmr7SMoRMqgoRvQMwthQ3SKEKPALShjrT2n 3TddnQ0BzV8e/RPKO3ZY51EF4T3OvAlT+Pqos5cFJWfM33yMppSY45bxc1dcero3ELYjeX1eRzIrx j9UUhGHelnllDYz56MJ9rRDpyR/jMfp415TFHXCFFYhyqF5AkgGJQig7dvO98CTOqVRMMBx/vxg1j IUx8fbUh5fdra5QXi0JamhC02NS6EwUDdYPpNPdeQiafJLgpaPvR5CHHjuUAJ4o4VCm8monEcEo9U n8mqa5ojBvOEUx8MbX+g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1Q-00000003Uxl-3QBJ; Mon, 17 Mar 2025 17:13:04 +0000 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwl-00000003TQv-1Vr3 for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:16 +0000 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-43ce70f9afbso23756835e9.0 for ; Mon, 17 Mar 2025 10:08:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231294; x=1742836094; 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=rjeBRUPbBkNgIlDeDsLglyk/HEJX/vNaDwxAgvCJumI=; b=UCBN4ijVb2YMDeDFFa6h6niW30L0B4VYe6ysEmVufPrCWrRBuxj2UYPXj8uInoS3kT Oa8stRnBb1y6KRrn4VewMEbSBSr8pe+2VwO00dkDZJOOwrnhk3XGv46d1TBvQUGY/g0A LYJ3yPh3m7noCjadcnepQ2dVih0JA3Km85/3H7gYiSKdbMwVsbjvoY8ms/6BSNvlE1kN /rTCXG3dZueknyAKmVvbaSJ7LtoieKn/bJfa3tzyVlBc1dl5PLXf+KgCBXEIPYxwvZAF G2MFBHNCUxFXYDaCd/3ibQNPCmDUSzePxhwxTt5FImbXKZOGhHTXCOPzSdQ+VMtr7e1o b2lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231294; x=1742836094; 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=rjeBRUPbBkNgIlDeDsLglyk/HEJX/vNaDwxAgvCJumI=; b=OUV8yfG8lOnPZiKh010Vd2Ed8yVOVWv11n+gUJMkN5iZRmzs+suMY0Tu14yPT9597y aShDNBrbM2kln1WhWsD7MzthP1VXfSqclHvL3I07yIHrGf9U35pgS7h3jpBoZcMQ7sUp Co2vusIk8Md4NlqbFNSVVa/BsI3SbaLmDDyqUXEBI8vPG9xj0JcgjiTj1iZP6tjQw6Uf p7Fl0DdzDjoBDC+2NXQ3MVb/mFkZnoZz6mmUzJwl/WJUnLNOTx3RR3eiIVegR+NasCoc ECue5mwRQrd2jexPARyRhP1u4D27+9vXDF6/o388yIWqE9xmfdLYATc/71ltS0xSbrlj 0nZw== X-Forwarded-Encrypted: i=1; AJvYcCVVn7rEDhR1hyY6LhWTZFl37TWBU3JXnl55y0FvImPigyWxqnOuIPCuJCCe2Ghil0iOAElywkOt2U6CyA==@lists.infradead.org X-Gm-Message-State: AOJu0Yw5MdXDavHIlwWcnJbsDLv1oWc/HsDjBS6MZJeTgT+j/03mAAZo lkoYoB0ZC9bZ+ShvFUyZSex/hWNDQ4Nec4+RYKMPdxcQhXPAsfteZ1dV+rkLkWo= X-Gm-Gg: ASbGncstgdyBZWHxQJ4i5OLhJlIgs3Q0dTz74ryOQ6SS9WFzZFU+PyGWwr21UYFtxPJ u2ycA6oBDVnVCqeVGDMzUko+mv+ahjh//Es66YALRkf1CQ8ybSs/GHoQR4CLo9gRVSebE66GCUN sawIuFpPoxXGUG3QDbyv4qEEW2AUVCushvRlnaI3Wy185XoPADGGf03Ng6EMpo96Xo/hojSCLFj 27P79Ps6/v6I7nwr258WvCQfokWv/sLmSKxPlp7XQItJcTGuEKOe8BR2CPzE2RnUx10xNBp+UEi JHKwTyZ9kcOdEOKoMFUXBqLyVqAKJ0jNEAaStC/aoaFOxH22e4Sbgq25 X-Google-Smtp-Source: AGHT+IEAV1SSYPsskoq8q0qrPU5Tio7ya8gNR4WNeMxWQDKOPXJ0cX+p31upeUPN82mA8abBVPNApw== X-Received: by 2002:a05:600c:4ed3:b0:43c:fe15:41cb with SMTP id 5b1f17b1804b1-43d1ec80917mr153430805e9.15.1742231293673; Mon, 17 Mar 2025 10:08:13 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08:13 -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 , Andrew Jones Subject: [PATCH v4 06/18] riscv: misaligned: use on_each_cpu() for scalar misaligned access probing Date: Mon, 17 Mar 2025 18:06:12 +0100 Message-ID: <20250317170625.1142870-7-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100815_392947_B2162465 X-CRM114-Status: GOOD ( 11.22 ) 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 Reviewed-by: Andrew Jones --- arch/riscv/kernel/traps_misaligned.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps_misaligned.c index fa7f100b95bd..4584f2e1d39d 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -616,6 +616,10 @@ 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() 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 +640,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 +681,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 17 17:06: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: 14019757 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 413ADC35FF9 for ; Mon, 17 Mar 2025 17:13:11 +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=/zc66dH/dQqU2rsSTkTZVDkgZr2PpvljLZSzMNkZJMY=; b=saS2v/QM3gqAIr YFc32AdD4Es1MTY3K1hzsvgX12kbp/ESpWytXzA1u0pFsiIWlMC1uft09BHSqe21TufTMhDHVv7GQ qe3ZLKmmnGCNFnVlcJZVzTSQnqmu2KSOxtRXBVAjCawVXmXkCj2KjgGcsZq9oCMjlRZUPa7DD9Puw GhwFBOWqYiXjGZG3CL9LUy1wxRl+0ntonY5UsFg+b6POIJ6a2SwBZjRjClmpkcM2yYG5VbSR7Cn5g 05w1iJc+YIZhQxDl3ZnCqEOIg/cYcQInxUbWT7GD5yDJSoCwmU6RLmbJOYu6rTc3CD0goYFgGRYa/ n6SDoMxx1M286EQGQQLw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1S-00000003V0h-2dFn; Mon, 17 Mar 2025 17:13:06 +0000 Received: from mail-wm1-f52.google.com ([209.85.128.52]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwm-00000003TRx-2w0k for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:17 +0000 Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-43948021a45so25174915e9.1 for ; Mon, 17 Mar 2025 10:08:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231295; x=1742836095; 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=0kTF+ccGFA3pCz5oiuUa/A8mZMPFTX0HIKuC7hxXfUI=; b=v/zRCOPmgZ5fjeXN5kkWNwlsgOVBp6z5MRFvR/4fB3IvoSOUDLlv7HY72lvJHAVB7y 3ltQH8FCpEW/zZR9eh4BPcbS2TAyzARhle6ChVs1DThQQRgEFt4yxT34WAZJoeh+ddrV f/bV0SOaxnmSGbT7Pzb8cOX5UC21TI0VVtjNmia5CronyzRvRP8gBljxpQX/zmL7DBrT EgjfGuJyg/blJKz4lOZvDNTZQ+asJSykU36B4jKAmdkqbgaYMnl1GJVcie+xmR7WLR8K z1AV1EItKNDT0Xue2bPkDYxv882aaLqbrTGk8pSKL6jL1VfIiat3iH48itOzJ1NDjCIk sqDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231295; x=1742836095; 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=0kTF+ccGFA3pCz5oiuUa/A8mZMPFTX0HIKuC7hxXfUI=; b=mni1nRRt65gvGbYATney/QH5IRUd9Pp0s8HhpSufY40HdT1PC8/y8FkTGX7aRGhBwV tEc76Z95fQqQOb2UR3IXP3hFhU56cQKEQ9ikGHgkVS+HFwfayug7uS6LWbK1XokAcP+c nKu6ulumFQHpWRr3vkiB1bUmm8Dnr/7JhLp7ETAfGI+p6TzBkIs80dgS8ROW2FFgVvBj ZcIwPrQNxY5VEkVmnjnI1kzuZz+g6B1og3nDFp3RS2fPzXQPclJ6/ZgLnHCiIBZdY5u7 Xfw6PuwU3HeunsOlOgZ2g6FGhA9gnmOtRyhaEWBbp9Wh9H3AxwX7uGEEE8wGXqmq25nt hesQ== X-Forwarded-Encrypted: i=1; AJvYcCV9I2/LsMWaZbX4z2tLed96ex07qztg66fYx0buymes80RBedlBZBrPeVnlptN8Os8OwEEWGMZvrPGwMA==@lists.infradead.org X-Gm-Message-State: AOJu0YxajmRzEVVZeXztw7sgeHVVpaq3QB35hUWjdPK6fvijzi6oBKYL QfklqFjk3UyE9jZD+r+ICnlVqcKkyOe/QCa5j8OY0hwi5UY/rG2oZ5LHTW95jzg= X-Gm-Gg: ASbGncvmu7vWJaoAox2ucFSZrgy9EbygtNT3NwhH1t6FM/oZI7PGgIVfSQyGNL8/QwJ YVimbccU/xSDRSHNSKrcwSyZgdqCuyl8H8YKkeYqyWAqRojLfilQ11efTK9eITfLjzAFF+vCKzX 6SW6lm7qBBGRqCqdBvKhbjP+soaUI31sM123u2wpjQF7BM348zSNiBV6SErvlwVIZeR3fBy2wvr JBLiBnzEFPRnNF3TpVOev0ARObzlHVT0/7F2kamcuw450JohpU4ZhzCVHG7F9Yn7MRHfFJrVccS WiWXtpwP/t39CftuYUUIGLCYr3kwy8kSi3CnLUKbh8L19A== X-Google-Smtp-Source: AGHT+IH4sjX9gto0lgEtyEEfUnQHUD379+GVWmuhA4p7t8yk18Gi55URplLVQo2Ek/+dIEHXcxDHKA== X-Received: by 2002:a05:600c:314b:b0:43c:fbbf:7bf1 with SMTP id 5b1f17b1804b1-43d1ecd894fmr147448025e9.30.1742231294732; Mon, 17 Mar 2025 10:08:14 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08:14 -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 , Andrew Jones Subject: [PATCH v4 07/18] riscv: misaligned: use correct CONFIG_ ifdef for misaligned_access_speed Date: Mon, 17 Mar 2025 18:06:13 +0100 Message-ID: <20250317170625.1142870-8-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100816_734505_AC43B897 X-CRM114-Status: UNSURE ( 9.83 ) 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 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 Reviewed-by: Andrew Jones --- arch/riscv/kernel/traps_misaligned.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps_misaligned.c index 4584f2e1d39d..8175b3449b73 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 17 17:06: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: 14019759 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 22625C35FF9 for ; Mon, 17 Mar 2025 17:13:14 +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=kKI/BsioI2UQQaiZCqLWoBNQg6G5MxfSsT3OH/rkjek=; b=gvfV5wWGSN2HXb ozoHl4J5w+YCUT9kpkPZjQ1G1cN+4fGlvYwA9JqjtpaFLgCAcaOf6feuY3ycf25AKOO2JF3+QQiKW dC56lfK4xFSRpVOZmU9dOuzxeFovG08RRuAwtXcaI3fJkhbTFKZ/flJA8wpcR7ZmR5sUYCShr5Lak 4GQ5BqvrHj/NM5vg5e4ZJTiD6BR1GRL3bnla+AulFME0gJFYXWt9tFnxtt9v6aa3R6lY96sEvbWiC 2EwX3E0FKAWSEXEGYCLFUMBT6qfAomtCome8l+m78H0ePDZtB17gvlViLCqCcD67WgnBwtFzinifc Qkg1hEeZxa9F6bGVGA8g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1U-00000003V42-1nUV; Mon, 17 Mar 2025 17:13:08 +0000 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwn-00000003TSq-1SJd for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:18 +0000 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-43cf06eabdaso23622865e9.2 for ; Mon, 17 Mar 2025 10:08:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231296; x=1742836096; 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=AU7F+Sv/M47Pn2Qo6/tW45mjDMKI8ET1F5gpFniyHfw=; b=XvOqAcqW3EODMwaL38JCt+9VYNoTPC7k1h7c+rESb6sP6w9+OXuoYJUsxIYNd7MRzZ GGJKfSg23AsGOvaKntKUoZh7F2j4FMi5rWbi6ueC0eCgJLraIV0pX3y9rcxLJhZFl4ox svLiXuq6ZYT4Z4EFNeqb6Br0HYIKwLGggPMR93DXFblJ/OF6/gBnKdrJaEj7ES/cgsZS +zawXHGmdR8m/WIKFN0hAhPjLE8xq4uzpSjkrda6DTXBXRuoyrMWXuHxhoYNIG6k9upO 1EhgWCYBRwuchOg3ZKW+gwy+RSxjt4xKPBzX0rNqfjrCKVMDIvJdrIRuMmpLq6m8Xqqw Iuxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231296; x=1742836096; 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=AU7F+Sv/M47Pn2Qo6/tW45mjDMKI8ET1F5gpFniyHfw=; b=Cn8Z4v9UEcV8U2Cm/dk1KY0xiPNZ1d5dYfqrSKJPI7Jnra/M5TT74vz6HCeXVW0a1V STzj3gT37aXYNjecg9YbgvxogemT55gg7CdH9RCJKfd/q/5dz+5XrbOVHfVMk27UMoh8 SHoMdC1jwXJFFZ9ssCeqx6lWsqkS0EcE309/bgnspqjzrTjKhfuowvRWBS8B6c9A/QJU GNzya9eLPxiCZ6yI+J+WslM9/yE5x7LIbkAiJxV8pezYNt/ive1ruLKtI5xSSMXUY6bP heqQJ7NLsn4Vc4XurYpX1HS2B3Cesy5kYvjT5AtKEp0srQeIXgr4dhTrinhEPjejggfZ 57uA== X-Forwarded-Encrypted: i=1; AJvYcCUql93N/6rW010KjZ2j+WVfKJCBG9PYuU8q+49i5qbqycoGZuNvOimscc4u+x4j9/UDOuxOcNyl6xeHGw==@lists.infradead.org X-Gm-Message-State: AOJu0YwR0jBlG1qcLWD7x3OtI0iuv9hPSE9ahh86OC7ChIfl37B4GHlr HZi7fkse1ueENL7LMRXhVm3yqOfpgRocy9++43bIv0g8CFlb/x3GUCEpKDmuKys= X-Gm-Gg: ASbGncvIE8PtR0nIoxtCAM8iVgkGSPtu4cfCWW4I/uFSk+z6XqgAGTOdqoUrHRpO98+ huJ7u+hgqEAWMCq8CQGaop2wiQ4KKnOKPHlM40otMKAqNXy4RecCL31UQiPjuXJ7q5vfFecRlnm LONqdJXnaNwu4grJzpSifQGgFSI/YbccsAxpJoSZsvh464NaqaokeYOwg6/ReK00za3/jYAi6l7 50B45aFndOFeTF9xfYUFhDM18ia6lSJzcQGxVum7f1WaPr2ygR5q2qGhd6Ix35MTPOT3KCS0oEY iCbx68bSGqhoC4WW3ynhhYqNvUVZjm48xX9m9WMKgfm8vQ== X-Google-Smtp-Source: AGHT+IGpDbXWpDYRUzGh2bTIaNirJTVxXi2O+kKj5FZQdCmID2IJ/McRsJVBPF2vymf5U0IMdZpfhQ== X-Received: by 2002:a05:600c:3b9f:b0:43d:94:cff0 with SMTP id 5b1f17b1804b1-43d1ecd83demr128705695e9.19.1742231295702; Mon, 17 Mar 2025 10:08:15 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08:15 -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 , Andrew Jones Subject: [PATCH v4 08/18] riscv: misaligned: move emulated access uniformity check in a function Date: Mon, 17 Mar 2025 18:06:14 +0100 Message-ID: <20250317170625.1142870-9-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100817_382918_8F23077D X-CRM114-Status: GOOD ( 11.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 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 Reviewed-by: Andrew Jones --- arch/riscv/kernel/traps_misaligned.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps_misaligned.c index 8175b3449b73..3c77fc78fe4f 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -672,10 +672,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 @@ -683,10 +693,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 17 17:06: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: 14019760 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 3FC3EC35FFA for ; Mon, 17 Mar 2025 17:13:14 +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=YDQOvO/GH3TUvNprBLHNLAgZGPJSyDdtB/bJMzB/QuQ=; b=loJ/95QylrBnAO yPVcD3gYTfv9shcGOLoBU8izJTHpHgBiiY8BM2itUqDvdrLUcI/ENRg7mF4J49cOkj6GFOEg+RUsc f0VZLQyYzmVLgYFk2q3OYz42bUF3yVbYclFMZSL65rb69Dktt4eVwWNKLd2m+dGqgXjwKWVqfAOJM fV6FlZlGgJqAa7l2ob3RyV4d+cNOMMYMDCcpT5NVirKjDHiDT/IrPATEt2PiuT5d4Q7vWkdRf2U2E rOu8uCVUW/wc8M7RXjYGsU77v4qds4ZtrKVIJ6umaF1LkkkumhFTEe249QitPyEg2TZ3aLheonfT8 OR3GmVNHePE4gjfNwXww==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1V-00000003V6d-3W0x; Mon, 17 Mar 2025 17:13:09 +0000 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwo-00000003TU5-0GN0 for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:19 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-43d0359b1fcso15670615e9.0 for ; Mon, 17 Mar 2025 10:08:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231297; x=1742836097; 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=goQPfqUUhZrDcxyWXuqyDL1Ho5AqcAiizxxMLq8C+LA=; b=RRB2GAS4pT4TAS9+BLMWuAaxwz9n4UnENwCVxdPJtH/POVRI5HKIG2/r1qsbMB/LKq aEXWJzyrFvJbpCzMBILUEYzH4neWeKQsFDFVo8PhjaxWxN2HGSNIntharY98YqnadzeV gH1KJHY9237AA+sCLExpDSM72GT5W0TFxs3K1YYhB5otbnfEiW/5KZ6RFpeJ7fip0tMl eHGqvM4lW927aPj5ChKSKQWjP61WupUXG7ot8SrQuskvmoR+LvbUxL0/HxPV/6RwYCKE hZXgDXBBUiJo598NZ8Due1aT1rPzBw45syJCZFtWuwJiNLchE9DcXVd+wKFb/im1DiZH hJOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231297; x=1742836097; 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=goQPfqUUhZrDcxyWXuqyDL1Ho5AqcAiizxxMLq8C+LA=; b=NlKJZN5nooRYl5bufwda/MS5yw1NI+fgdVkSD33cJBSuRasxLo7DqkcKWeeIgHbUMY sSFsrab0ecOf7BFtXlAv+w3V+ZxRzjhh/XoV3MAKt7raZKRJM+S2kC4opVcaM4jsy5Ri ReI+Jm7aX0vTskVeE+mKmhdMi4RXJlswpXBMGeB3EPksoln0plFX9DJQs8n7uCYNyVj3 hoSZiXycUxqSUGpcizVov8Bux7BQGKzSaBXHK955NVFdhiYSIAr9Kh5iiR98l5HtyaLq cPYip5M9zKLxmHMD3oQbLKawPJyMtIiq0g6DS8EhAL8ZiV1x7d/m8mEkqeHn6tdeZpIZ cOzA== X-Forwarded-Encrypted: i=1; AJvYcCVhclRUvlbjUfA72SDH6X5AATno5ffKpQ/PWnxfCfH6KPa6syJFtTKywU3APyDdGgPcliD+jwDu22DhvA==@lists.infradead.org X-Gm-Message-State: AOJu0YyfZ87V7w5nmArWlM0g9H8Pd2FRW6GRaMlcpZlbS2D1tLg+SHnS kuz1j7FL85f5oQ1jWNXSfaOlNQEtlMDkJGjHqeyLT58BWb2TU7eNUrQU1a7Gwpo= X-Gm-Gg: ASbGncuBxEt6kzScOnEDlJGKY6i7afKo28idZz9NMExtspg7HKgW7pZLzi5qiLOmi0k haE9/PrHnZ4dImUfRaLbkvdk5Q4KP9mqVaVS8rt5yjRpE8gCEBQ9NW+qjITevwfJ91qoxY6dirh tgv/Pq1Oy+76Vlu16LVkjdl9xz2/Wd0+FbqyMOYNl13B4S3QJ7n/JmxhRJqYVeo9zeb0CQnIBEp hh3/sOZnReQQEzWsgalYm2OTce+eHzGcTtTu8vjReLA9qVX8fLRZUPoyqG/NJBp4qlxGXFqPgDd EYS4Q8djEhxiU8VSsQKPRAGhMpID79w4kC3iftJvejUvlw== X-Google-Smtp-Source: AGHT+IFputIgv6zhtm+v7+MGBN3nI7X+BtRN1fT5rRbozYZS+RzAoNXF9CqISuMs9K5H8TPGERcLdQ== X-Received: by 2002:a05:600c:4e51:b0:439:8878:5029 with SMTP id 5b1f17b1804b1-43d38f72af6mr2448325e9.2.1742231296757; Mon, 17 Mar 2025 10:08:16 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08:16 -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 , Andrew Jones Subject: [PATCH v4 09/18] riscv: misaligned: add a function to check misalign trap delegability Date: Mon, 17 Mar 2025 18:06:15 +0100 Message-ID: <20250317170625.1142870-10-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100818_119791_AE7887BC X-CRM114-Status: GOOD ( 11.36 ) 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 Reviewed-by: Andrew Jones --- arch/riscv/include/asm/cpufeature.h | 5 +++++ arch/riscv/kernel/traps_misaligned.c | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/arch/riscv/include/asm/cpufeature.h b/arch/riscv/include/asm/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 3c77fc78fe4f..0fb663ac200f 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -715,10 +715,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) && @@ -760,6 +760,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) @@ -772,3 +773,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); From patchwork Mon Mar 17 17:06: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: 14019758 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 07970C35FFB for ; Mon, 17 Mar 2025 17:13:16 +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=VvGm01aLnT8L4b TpZLV6INmFNdDFP04WqPDV7IYp0oULrhDhUmlPXHgMt6I/oNBwGOA06T53Ko5exZLeKuwn+4uVy9U jGkNKL8dIBgitKEgsdv4dZ9epz5sl6cWacUOM13PvFvkES0XrYaFdDXbDriHgn8TsUuX+4YIblkpv p1gdQXs1r8Pvk+xaN/9ghTUYrxttCy6RjezKT6XATFj0YXKq3o9p2bUoS/KYbyegA1Z70atXgB3Qk C7ddLsc3tRmuDi19g2N3kGFrCRdqwHxNWfL4gX2xGN8AvqGHllcs5JErRHc3CuojAlcwkuSlfESJB tRXHa6zIMYUrRknQiOYA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1X-00000003V9E-1bLy; Mon, 17 Mar 2025 17:13:11 +0000 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwp-00000003TVQ-2h4d for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:20 +0000 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-399676b7c41so700970f8f.3 for ; Mon, 17 Mar 2025 10:08:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231298; x=1742836098; 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=SwwEtTnbCbMEGIJPQwBjpMhLWv0Hwjkh0lMoESGqXETRUUx3c77nNq+Cpl//OFdltj NzC1QpUbXNlmexPK6ps+04iJaN2twYUO9VF2PfbC7H1QWWG7Q5zDCCGCp84s1cqm3CH8 TDsOc3cnuBrXZIMjpfvLseTPI//b3VI9ZlKBz/eEapEef7Ww1TRq60H9Kbgv38VF8Khl Z6zTVpcVpzF/xk2Q3YPkN/Qld+ZijLWa976999GIDfWlK5PvCfwdfKn0V7vPivp6Qw1X THn5FfNkVAPHPXjPjaW1fknfBpPtaqqcQrYozred0lnBU+vQDZswsOj2TOC0YHwJrfCg IN3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231298; x=1742836098; 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=wgjGZPUy1Sjs5C0lzPL+pBZzFOPp7IrLtA727n1iMI5jsbQny3k8sOJ8Ewe26bE2BA Jk0d2tRE0KMtxrxvLR6yKw5hvvtUHMcZET6SGSgf+rTdqfwlRIm/ylh6acmhWlR98iXN nXsZOGWJoKHmDtFjFkibmwXmVZapbou3C7T1AURehYdhoQ6cUQ4r4nx6vXNSsE3NY8tg CVZOqaM4fF5A3Kx1XN0A315DOWkRev+J6qGwJWoRSOoWEosArpCT1JuONNUoRH/5LJ2o UAWKb1JYzD6NyNYhO5DJ/z/Cj/YVGpkRasTEN8tNSKmCTNd6T0YZqo+6uYhQ/8pRGcu5 auFw== X-Forwarded-Encrypted: i=1; AJvYcCXc23w3vENmrHtm2yZL01uBJxjHeYVFoi7cvOFJChHnHa2UvBL9KRMLhkFDBUZRhRcvHb33WtV6b+gDvQ==@lists.infradead.org X-Gm-Message-State: AOJu0YyeM8lBqMQB6QShZfQN2fxC8tJdyedwRlVzEvts/Hd7nICvpiaQ H4EJ/cqLe8Uq9lHCnAZh6M5aRA25npI1hrxSfl+jKjJqKAmusN6H4sySo3iIrQ0= X-Gm-Gg: ASbGncsjOhXmaXnshAUGB/y9CCzw7lukBw4BkDaGwdW6tjvIDJIYGN2F91snpCUOil+ QDkcuwJL5QirDcRUqLS3gsowp4gWsx/+T/c1rNatktxEHAewEYpyoIiUWez1jYifCG4kHFr8SiD KJ52VnsvgMLBaNo2HYXD5DwqITXyfP54Cai9k/118ztkKo97BO0ovEegw8JiwAQAY0tVds73Lpk Wu3tNEBPYnpoKApPdWUxJG+BI6Y8yvdXSi5lZtNwG9viAC1BDlMMAfprDPDmzW25oZrMyClaYZ3 Q8yfyCiH/SkI20ZhXI3VAW3J71KXDtIYkElHcCIQPYC6+A== X-Google-Smtp-Source: AGHT+IGA2Rdk6jf2tb4X7esu4pon4fXkJaTK84F8Y0BwgA61Xp90vVw97TtNBjS5pxzMobEPki6sdQ== X-Received: by 2002:a05:6000:1f8e:b0:391:253b:4046 with SMTP id ffacd0b85a97d-3971d51f3f8mr14939898f8f.16.1742231298143; Mon, 17 Mar 2025 10:08:18 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08:17 -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 , Andrew Jones Subject: [PATCH v4 10/18] riscv: misaligned: factorize trap handling Date: Mon, 17 Mar 2025 18:06:16 +0100 Message-ID: <20250317170625.1142870-11-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100819_682323_98B5F89A X-CRM114-Status: UNSURE ( 9.87 ) 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 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 17 17:06: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: 14019761 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 6CEC3C35FF3 for ; Mon, 17 Mar 2025 17:13:19 +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=UtsNdDJE0FSim2 Yp/lyqdVnypG2aI3xFjef5nUI1VU1Z2On0tpskPg2pKq/43Wl8msi13n41GzAP0yiUt1blcMsn7IQ iVliIDQAs8lSc6LJtOPhEgOs3aflzB1ClsA077WLua8jKbLopgIpsrgMe4PoD/AJElhq/yLYNRUvY 4BgbxAD8fuvfjT7CujoIhAH4czUYsBLsJCUlTwcKASdip1M5qhaKJNWIeK7ccQW9P415B9zMFkI3J sJ8C+6p0GR9Xid1eLQ2yjqvjS0e7SDmcFxocauVz0u+uf8/joDQCEdinFMe7fTF6HIo/+G+UJUHeA uO3iIp2XLSAncQzlD+mA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1a-00000003VDj-0Bkz; Mon, 17 Mar 2025 17:13:14 +0000 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwq-00000003TW0-1lUg for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:22 +0000 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-43cfe574976so14973995e9.1 for ; Mon, 17 Mar 2025 10:08:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231299; x=1742836099; 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=FIMICZKJ8UUIIQ5NAmeV84+1xIiECkOb9RPCS+u+UB0GQ7UzVdyWFdMsaTlGQ6SXds 942oKskxCKT8UUTsKZv6a0QTp75Z5k+YeKFaubKBc6ZP4gXjv+fu/cwcejRwt+RGLUhD tZNfwvylWtatjNvongD3B0Kw8G3HwBocB9+Qu3dRO25OOXWrR7zHq+4fTdKAXeJ5d4Dp hWm4M5FI24c/vJCUGtuvVToBoz64ABHJUKz9Ndh2hxPgfXrM0KZIDCcV8bAV0T9d7fKN uknyeihFhbdWZBN1WP+G13sEh62tejn/QWAIpqUVZosXKunS7FNUeWaEUVHFTbhLBhJJ TrFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231299; x=1742836099; 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=pa4fsczunfxSeVWb5znft2gyimq4GogE+k+3trQ9utYINykRK7eF7d8549SZ2gjCB3 KMzH1FQC2GQYEw65doT3Tj453Qg2zzbEe+SxXSFk70FI9WeWx79ea3W7gNW7kwKCoQCb Sfy2/wjyoUgYB5fJlcHfghwF/nvmyWPYnkGRGuCWV4Z6aUtlK44nChDrbGHX7aDDfAks AuuH6PyRR59AsnE9HLIQKPzdBh6zf1vPSoPBn2tQ+BXgXZ+K72SL6Qx6fTt3xIpJj6X0 l4k5vL/PL8oRQHRPnvITvlshRJcew1DUFFZmsRmds1ElOPQtwFfqRlNgv1m+xs2gaIBW ynvw== X-Forwarded-Encrypted: i=1; AJvYcCV4732Q9PITFfu/SlBfhniPnwGPmDGHwDk18ytuH7f14DZqIZC1ckQWM0n5k4XuiybLRnx6RZpdvCDOag==@lists.infradead.org X-Gm-Message-State: AOJu0YyMlRkEXz5sEfjgS5nJ3pFxMo7hGEBDGL0zhAgTI1jfvWtpVV59 wXQ9uelygJQSb+c2o1s1ufPxqKYDpSN+s4v4zuF4wGyjl/1a8d+mwMlyLPdOm6w= X-Gm-Gg: ASbGnctVqkyKYTFw9gwNpHBQrUWuV51ZR/ZGGCwr0/jo2y+H+bFWl2I13XloWczc+lK kiztbozx7H4rv2yru+zSJgTRrOKschleBrfNkm9P0ceRFiWhQrZIJvrAQEH5MRAsHBVYinhmELu H5GhxaTZbwVUJJ1T930yzwTaAV5yhVU+YWZKqDZxMj7ycDt8EvAgFscNzRNecq7B4DlqYihtpsm 41+PABGjEDESIf8Cq8DTb5fEEOXD/7CSzOCQq1vCfahO4o/+uboXY9AnnB6IywgjjEQISCrIClJ 1Uoo5wJOHJ/blpj+GrrR2/+9RgnRGn/tlh4kZ6kakLO9ow== X-Google-Smtp-Source: AGHT+IF/jPZgtuKO9F2UOB0NNJAFXUmhCJVLus67Lul9R3bvXGZReu7Tw2V0Z3eVtQhps9kA5NlJfg== X-Received: by 2002:a05:600c:4451:b0:43c:fa24:8721 with SMTP id 5b1f17b1804b1-43d1ec8a44cmr134590325e9.17.1742231299101; Mon, 17 Mar 2025 10:08:19 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08: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 , Andrew Jones Subject: [PATCH v4 11/18] riscv: misaligned: enable IRQs while handling misaligned accesses Date: Mon, 17 Mar 2025 18:06:17 +0100 Message-ID: <20250317170625.1142870-12-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100820_455939_F5179B5D X-CRM114-Status: GOOD ( 10.03 ) 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 17 17:06: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: 14019762 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 25B96C282EC for ; Mon, 17 Mar 2025 17:13:21 +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=cBRYyx2hxiBAVdbYxhvgx/gQjVYtt9bIXdebpS/7wOY=; b=NIcVcMgr8/OKA2 1l5QLDO9i9AWFlbiN7jfG7MM/Y/yr8ChUvRU8/Tt67RRb/fIrqo6Nw7u5xqYcM/uiE7eIderyi2Ni YUxDx+gyUjmiX3RoJaQCntN6eTNwn7eAO8LTH4w7UyAyauZwofvOxcf16C3DRgNsSlavav6sAwkCA oEpS8rP+Nmtkb0cshKtWwbEiRarVVo6x2qtPiqKjI7ZSaFDFpKZ9jQYXVc2JJNJ9fRTslCA0+AWy0 ugUK1czdVLHxAUWOkrloD6YKWxFJkTH+0ZT5Mv33l8UEZcrOCJviYE3mHdrQ2fvunApofkJsUMEV6 yMH6FJxrnRO/GzaOiCsw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1c-00000003VHb-1Dpr; Mon, 17 Mar 2025 17:13:16 +0000 Received: from mail-wm1-f42.google.com ([209.85.128.42]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDws-00000003TXI-03JN for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:23 +0000 Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-43ce71582e9so16000495e9.1 for ; Mon, 17 Mar 2025 10:08:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231300; x=1742836100; 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=K8U+T9Diad+CXpLV3u2uHxRVp5OvAkVUCVXAkQQVM7Y=; b=XW0E9zCqWLwSsvJdcNhdH2CPJoiOnYBSpPcCNwqDz986FvKht4dCyCwTco2UJdBpY3 XtSfNBSZ/B7LLQN9LvoIKdXwK0dJDXPeBRhAlowqZ5d+F65+SCDyfuBh3bgLM0lASwqV 7x4qDro4P9YE5vFXmHwbRWTE5vcmt2RUFDaUCcP11YkqYrSrowWnQAY5WjnXRW9EzaOK PtVG7CR5BLIOl/4QlDS2yJLbxtDp4f9As2fRV1c57XeangHkZ5HMzmgWbja5+1XvAary OfvtnRPHrzaLh6FKj7mYaBDI8E54jgaHOUvaIIEojUdnGBG0zsHmvee42qLFn5Cnp1a5 1upQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231300; x=1742836100; 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=K8U+T9Diad+CXpLV3u2uHxRVp5OvAkVUCVXAkQQVM7Y=; b=ac2rGKs584x4jwgH9T9hDS9ghUykiUhyNWifyWff3Z4A5Ty+95t/GzNcjNm2PJhMsP 0TaU4ywPt0TpVAfR23GmBQUIbHWiGHZtMSaNw80097xMrK1dwIPmHO+rHRdhEnDqSHyc t/lx1zKjyFc2SSZ9Pk4bgttnItmqXK285XiYQ1GCY11FnVQ0H99NC3JlpYNKsiEL+YWc dRMn+zObhm0EZ4M+8H0N0SWxtzNohjH4L1KrQyMotlDkAnXQ2HmKGOAjNO8T2hevQ7ty mDqYHouEbeY8v5SQC57Cn1Iunj+zRho//seOofxMn2DuSIWBqMNnuNM9OMAsgdZdJSQr N6VQ== X-Forwarded-Encrypted: i=1; AJvYcCVZSQrle9iIvxeG19c3h1NBTzOsbn2ZF6ne+TeFzoRFghXtsrFNxg26goPUFq4m1WXO9aZTL/R1zBAqYw==@lists.infradead.org X-Gm-Message-State: AOJu0YwShLn+e8RCyvGpyn04vDtFjbWdu1xNn+uEdLdyDNS0dY9yAwlW VSAJIU9WlkFX99IAwcvYyodoWzp+YYPK6fkzAzO91EY7S6Lj4Sh6uJI53dxGYPY= X-Gm-Gg: ASbGncuauv9a0k+QQvT/eWrdKXdTx5aUF90UrdTimXoacy98B94K9QIKRa9Frs9UGv4 ClYL1mC1id+rl6wTWHUkH4pck3Ex2McIzvqR5BW8Sn8yemL43B8fwLN/MHCnZ5EBsxjrvczqUoe SksLwmQ31irogsrr43Vz4xTd76iagvb0WZ+p25nCnzjoHiFFeEst8pWWM9A0rskRh5/nsDdhZUc WQJugfbGNNwFEcPjSJJic2jPPWRA1d/EEAO1VjgJIS0AgNthGICl5PGkB1vJeOAScuvNpneMbRg 9rKayrRqk6UqqJEbEk4rqZtq0ekGlCr6e/U+i00646HkTw== X-Google-Smtp-Source: AGHT+IFmrC4L2BBEGglHCKwEAqKUy9nE7lsKyuSMTJqBTFYq88vyNhKpBkqIwmbEPtXGJrbb0KbkPQ== X-Received: by 2002:a05:600c:4ed0:b0:43d:ed:acd5 with SMTP id 5b1f17b1804b1-43d2a2eca5bmr70290895e9.10.1742231300051; Mon, 17 Mar 2025 10:08:20 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08: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 , Andrew Jones Subject: [PATCH v4 12/18] riscv: misaligned: use get_user() instead of __get_user() Date: Mon, 17 Mar 2025 18:06:18 +0100 Message-ID: <20250317170625.1142870-13-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100822_063618_7FA294B1 X-CRM114-Status: GOOD ( 11.48 ) 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 0fb663ac200f..90466a171f58 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 17 17:06: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: 14019763 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 68DC3C35FF3 for ; Mon, 17 Mar 2025 17:13:22 +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=lErUFwJA6jnsST3RUrOrk2GA9GkEYnSrm/AHP4jyqRM=; b=BaMBy+tTR05d64 E3rO17uhY6kpIrH3lEi1YSmiN5nKImKtPL+kOtvKBUqGYk3Ck2sDS6ftNZebzx91Qc5baVqTEvaUr NUfnRYhNgXxZpKVGQww6KMdlfqG/3YlA65lfsWDmvPYfFwBfYHJo5g9Hz7J+rSGguuoGU85z+T0As ISmd/VjpcOosVogguRz5Rq30T+1zoD3vHeyFV9Ox3CQxQ4RlDQyUIpmFWsy762bUbPE2ttfpL7XbT RSMLDaoQVnAaYg6ARjSmyItmJmO+dZu8X4d0ieQ0MLJFHUPHcMHgfUWab8KcqI4m+J+So51XPE8n2 BSpClsGinDIICDEZ+fDQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1d-00000003VK0-2lTI; Mon, 17 Mar 2025 17:13:17 +0000 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDws-00000003TXl-3Jpc for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:23 +0000 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3914bc3e01aso3154344f8f.2 for ; Mon, 17 Mar 2025 10:08:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231301; x=1742836101; 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=2pNqCCOYMsZxxXyyqHIS5snuORKLAQN1trvRZ+awEuI=; b=dJbyaJ0StGWPHArbgDm2H2SY9xQOJGwEMjU9rhZ29UiEJzCxmhDsyxcrPAIKcO7SRO xRhl2OtPo19D1Iopm+pQgIfrVFsf8zVEP48y2ttZ1bNp778DzOP9ijbEKC0CH862k/7e IzuolLpODyFeLnWqQLt/85yBkk6wgUVv6Ahd4rTDGdYsbXSTMmE6F1CWLWIf1dNKIbf5 gp3zyfUhhdvdW+NaofFScPC8YIAJuvsGPc1TV6K86qZm6le7rKUWX6oThQ3LMYWmPJPP lI1crCbIjDB+5hImHhwNKU4pwwcbJ1q1c0ZH4Mtpz0Y7lmKPxaMYqGgceL+cu0VeMlzF LSqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231301; x=1742836101; 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=2pNqCCOYMsZxxXyyqHIS5snuORKLAQN1trvRZ+awEuI=; b=J3NgMMu1AdTXIxyxT7bDPG45geQcOzL5geVASA/bJeDRgFPDRq4DcmS0WK1/9YUV7E r+Ky2aMLsvvn0oVecgWQbH3poqSGo1SqWmi6cUx1fEbME/lhRe0REuoABpGI5cCOIhcs erlzkOmmkApxtmOJveg90nX5Ay310wCIAlv3q9OiFVO7Jo4e1Dz5f42YQHl3qZZUlXci DbvInD5VuDBOvHhYesUIXZ2WbTAo01a0rFjdjD/0Nnh5cGR2DK0bZgX7qvA19PVXevfM B8lJATFgawjPZUuwnxsaRTzJkmloV9XZCEzW5BvzY14/shspxi1eZyeaftBEGRCa/Nzi Y3Xg== X-Forwarded-Encrypted: i=1; AJvYcCXoqQXIbG0nzUtFlPNLyuIytuNbvRdKznt/EGS95qTWd0WoqGBEM1VPm6oER1MGg5h/yimNVOTdAUx32w==@lists.infradead.org X-Gm-Message-State: AOJu0YzMSIMlHVsiJuJwqOOpy5JG1CaMwKkHloXkTrcK38izIBuOAVwv uWWdc42AsnpmXAPjs5l2Uj3nxg70kXswZbSj/SwE0op9QBiF/ONgcErF9TD7o/8= X-Gm-Gg: ASbGncu7X8fruU0eKa67cigN0mfLbWe34fsodlO56OnUcCIE6vA3EYNNFQ7KfmKHBsC JmtmiF9SlhNZ+lursQe0/Ud0BA0EvdLfhINiHJVmmQ6Dp1q3/0o9vqkAnL3H8bGaRRBofTb1grY az7KIpXN7pYRTP6pMVoUz3/2JThFTDCF8fJYBz74SnBsXwG1VPojQdB+tssxZfuwvB4UogrLUF6 ikaoq6uNpVyAEjnu6shyP9ae/58gQJ+gfbs2obCkMOGnFkw3GCo0k+j3eJONb6KGl/fDd5j3jLr BsjjJS6fxTzP3hnSM+0d1JfJlhS82vU0oiqGZkU7uU1/jQ== X-Google-Smtp-Source: AGHT+IE6X4Zl2SvCnLBWCWxVkBGrawQ8DSM4qV1sZG6LsJ3FF5B07Zi+O2FlbpqV8a0E2j6PRS6VBQ== X-Received: by 2002:adf:b183:0:b0:390:f88c:a6a2 with SMTP id ffacd0b85a97d-3971f12cd8emr13396928f8f.39.1742231301480; Mon, 17 Mar 2025 10:08:21 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08:20 -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 , Andrew Jones Subject: [PATCH v4 13/18] Documentation/sysctl: add riscv to unaligned-trap supported archs Date: Mon, 17 Mar 2025 18:06:19 +0100 Message-ID: <20250317170625.1142870-14-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100822_831718_41AFB4CB X-CRM114-Status: UNSURE ( 9.37 ) 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 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 dd49a89a62d3..a38e91c4d92c 100644 --- a/Documentation/admin-guide/sysctl/kernel.rst +++ b/Documentation/admin-guide/sysctl/kernel.rst @@ -1595,8 +1595,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 17 17:06: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: 14019764 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 16548C35FF3 for ; Mon, 17 Mar 2025 17:13:26 +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=tr+/O15PtiFczH UbF7wecckY+kPYHLmrBMf3OPHKJReQPolZVc/UIV/v4nUWwmpO7ZmsCuxdsGo6i56k6invVh+LRaM 2JDOekQx6dcF2xDxpHcujUg/KSIMjoG8t16eMwO65sHXqi1rg4qD20Q9z4yD8yUwVc8k2rvc2lHvX ODmUkQFIeNpHMaCvNJLd2mlp49WHV9nAVG2aB6k4kImILlSVKXoORvpvLm8s2c5q/7fnkj3lNsf+V 3XSbVKSvgBCQlvR/L2OeApDFDqgmFFniMdt+jIGcRcKT1HtmrSRravxw7TjBl/wHc+iW9z9EX7xju nXRUqKEY/hCCX2OrH0uQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1f-00000003VNf-30cm; Mon, 17 Mar 2025 17:13:19 +0000 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwu-00000003TYn-1L5F for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:25 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-43cec5cd73bso15261085e9.3 for ; Mon, 17 Mar 2025 10:08:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231303; x=1742836103; 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=FOnI8a0VQJxwv+N7VZ/1zdOysoHV+zdFRBsYsLOqtNvZohthNVC9daNLBxFvamD67G sjM/YGZceJAb7+J8EEOpZo4DyvLfXVBVTxvR5sij1rnoTZ84/b37J4Q0VQlWhqdvOhVE FwzQznMbZODZLvfr6N/D4YKI0a2Py4UWwSiiGn4AQX/ZROxoqsZRC1IxmvdPSSpLVoa5 4kjCxdhtnUTIFIR8CCo7LZYP8wwgFQXm9NxLMhPbCLxPv16IpV1CX8HPPoo9nCBCgYmE fsjU/HPlrhQePYahVkpUmxYAKLOPQAkV+6N8za+Qq3UpAcRmzNRKCTv0kxKma3TfcltO 2a4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231303; x=1742836103; 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=tSkbkgK9APU4w6XfFjgUulB2fhpexwPnxPSdzkFXgGrBm9KVUfSSRtk5HBwVTpOhbQ unsNGF0YEiC7olgYjd0oAGbEKelAnNc9LSBhA/VQaewDmJkXdJTHR76w4rBzqyEC6T3r qF4ZoSGZHEwbKcx3G0xiv2nhuDppX1Cj2qz20K2W8Jt0ByxEtS/9TSdMTCpcCpaDadU9 YxPiVfq+xydiPNCsPhCrJmAYhFCmN2tlPJq3DaZS2NksYyvmkN8L5dxXSA2skHjuaaUr Zm6m2QHFlVUSZGNUC7E083Ujf3F01Ven9b78XBT7NrQyfLRMtq2h0s3+C/Ankica/wO4 DONQ== X-Forwarded-Encrypted: i=1; AJvYcCUF0sEJEgIZXLgRtkP1JVwtFNg3vS9Y/QSAc4hdy6w2YKOPHU6fjGf3xDQRslsdugWgXDmS0V4DPulGSg==@lists.infradead.org X-Gm-Message-State: AOJu0YycsMPCk9C/Ro1I67ci5xctzqqUErEzjFyStftr5HHBHBQp9sbe /p2PCZLVhuPQ7UH8n8yF05e9rulD6klvvrFcCjcuXbj6LF2E4asuBx89pn37UGw= X-Gm-Gg: ASbGnctGarCT+ww/T0dXgzf510XGJ5iFmN+pMUtifggl7KZ4uywAwGqpq3kVIvLfaDF oC9resg9/SQ3tbOa9z6UG/RRT0lKiOHPvcWjCVhkpf7ges7Toy+5tt4frJMb1kzCTRm15omhMuK q43Cy/83VIIf+iG7HxTc9b+rRIwzJO7DLeU/3BNZ4xfZ7ekAo3Si6F2l6WQRr4ZT/iYokc1lUa0 40fuNpE/U+iVG1hDvwA1iNL0CKvvI9WHId7dPuCRGRQg+o4Py0WJHBqfSe+LxStOz8t8yN4QmUy /ruyk2cmj5T5hwriOW5s7FGxcVl2liOG+fGw3xzNrVLlfQ== X-Google-Smtp-Source: AGHT+IHYqakxMqLykAu8hVgungq+pEq9jN18lc5kC73JGVKr25cJlS/60mBYd+yEImb3bsX8Hv6BZA== X-Received: by 2002:a05:600c:a00b:b0:43d:cc9:b09d with SMTP id 5b1f17b1804b1-43d3898770amr5615915e9.20.1742231302877; Mon, 17 Mar 2025 10:08:22 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08:21 -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 , Andrew Jones Subject: [PATCH v4 14/18] selftests: riscv: add misaligned access testing Date: Mon, 17 Mar 2025 18:06:20 +0100 Message-ID: <20250317170625.1142870-15-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100824_470138_8A73CC9D X-CRM114-Status: GOOD ( 18.66 ) 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 17 17:06: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: 14019765 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 1BF26C282EC for ; Mon, 17 Mar 2025 17:13:28 +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=Mvhdz0+92wSsKHrVfT9EsTBRyXncFQlkOCICa2nfZZo=; b=MeUfMBXJDvfwFb MBaSP7Xva5DtG4yzEWILEGpUpllvtW+ootMZdXaLJnIxDatXHvjWFZ0tlJyN0rOtHoPz3duBaxkRZ AaO/7bo9VJLlK4DrRaaZvebuvvplB3Ok+fMbYmoC4dsvmoBFimAz9qVpgGbO+25etNiBL1LXg+1zg 5etoS2rkGbXGdGc6Yq99Kt2dAWYJMZvU1sGDF1VaPEvOswZaJsgPGAzpT3TPQs2vJ3idnDtMewT+Y EvHItiXAELBM22WTKASvgnWmgQvhjZOuWDoMb6rgD/1cWg4tHTtCnHhC+zOmTOAVahEBqxKzW6T/8 NoS2xXaRvNjK+f71L2yg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1j-00000003VTr-0Qog; Mon, 17 Mar 2025 17:13:23 +0000 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwv-00000003TZd-242I for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:26 +0000 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-43cfdc2c8c9so13748295e9.2 for ; Mon, 17 Mar 2025 10:08:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231304; x=1742836104; 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=AdADaa+vHUZsa5aS61sZ5FN/C9kboqasJ4Wux/Gk/Z4=; b=r7pu6PsfwyZ/wkICA5qsPheRxetJbOoNM9Y1aAiA95+CqsRen8zgLn7OavoRLCXsMy mQasNl0Mw9tHmSxr0cfvEXdS8PFBHngYggKhKBc/zep/TPUmz2jn8R169dsX7bbkMmFz 3UA6DsYCyLi9XAaYHwA+ecKYpNfidP2d9EqGNEaews5ZM5DDbXEfZrkW/fxEZkcBRmmF vGT6MNgCrChF4dq1Np0z85ifyoBWVHcWao956K0wz1bjkevjRRhZnIQBnRBcEKCq4D7P 8msXlBESMpLYVeOuPVCDnJMlZqvzlO9lM/MB9B2aTOepxdnk6UbGNlR7g5w+M9Ot3YcD cCxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231304; x=1742836104; 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=AdADaa+vHUZsa5aS61sZ5FN/C9kboqasJ4Wux/Gk/Z4=; b=UQ3DSkFOtpg0wlAPuUHWVk98vYafrgNmvex+sIzXAwibX509+yJG15wDH3sBQLPxAB wOjXrO/UzDTgEQhSyY6uS+34sYvJ/BjdT10AxG1TSXkcPWXcweUs+BhqE1picIL7dn9Z XucHd4UYuZz6e4tZgmQpSD4E5tc5wqMSt20/42Eq2q7CM1mFEMOvQNJIPST/NK/lwV/H qNK0Jb9dYwhz5O3NPV0ZFNv2IJ88lDQInCmVBXB3sk/KZFc+uqBw1yvjxAGtD7Hvoxm4 NcazE8GXYCYtESJGV8lXC+IWZay+ayu+dprYCTHhUpqKePHRdHh89ML8eG20yiFZlbzb qzsA== X-Forwarded-Encrypted: i=1; AJvYcCXXg/5sbNokIOjVJBNIUpeeuPEG4xSkjwAYuGl9TDysv4SnFCdYMYoHli++dT33HA6EtN4uk8ZARE5fZg==@lists.infradead.org X-Gm-Message-State: AOJu0YwIB4LPczl8BJhJlFciGDtuKwz/pLWH3WzAWutGvRzjjsRyqX2w aCaqGZoTREWl8tizPik8OpSH7aWG1eUQgLVf75yenm0FYEkPTS3tRBrJAhd85CU= X-Gm-Gg: ASbGncudX9QeeOPc1L7D+wjP6Eg4pG6kAn99MB0XciHDnU+P3WNGEvbgAfm6dzv8EY2 4dyGWkkZOBHBQvTO7hVpPWFjfE+BQdNQ18NW9hf9lo4d1z2K9bUcjTu6CTxReAhv3WNomrf40Vr r0vCfNRK9bQvu/2D9h+iQS8DcAF4FVie2ycOD4r/u380P+EBtboKVX8+tmOOzQ2vO6F06HNs3Iw pIRX/YVeZO1C/9hiHl8SyYWQnTUzTXm8dCfNKjdQZPFykq7MyGi3plNQudircbmWR8jdJSiYCd8 oHcvQ0vuHi2ov2vCwGHHBncB4SokD7uyZHJL58AWsWCvUQ== X-Google-Smtp-Source: AGHT+IGGvUDucTyZhua2TIOWY68n/psfaPPQ4wKaNSWwyNxLgrTgzrMr5DXu7tUeZ+5c3PBxx/axlQ== X-Received: by 2002:a05:600c:450c:b0:43d:609:b305 with SMTP id 5b1f17b1804b1-43d389790acmr6282865e9.17.1742231304068; Mon, 17 Mar 2025 10:08:24 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08:23 -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 , Andrew Jones Subject: [PATCH v4 15/18] RISC-V: KVM: add SBI extension init()/deinit() functions Date: Mon, 17 Mar 2025 18:06:21 +0100 Message-ID: <20250317170625.1142870-16-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100825_525182_8CD62EAE X-CRM114-Status: GOOD ( 13.68 ) 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 Reviewed-by: Andrew Jones --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 9 +++++++++ arch/riscv/kvm/vcpu.c | 2 ++ arch/riscv/kvm/vcpu_sbi.c | 26 ++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index 4ed6203cdd30..bcb90757b149 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -49,6 +49,14 @@ struct kvm_vcpu_sbi_extension { /* 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..3139f171c20f 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -508,5 +508,31 @@ void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu) scontext->ext_status[idx] = ext->default_disabled ? KVM_RISCV_SBI_EXT_STATUS_DISABLED : KVM_RISCV_SBI_EXT_STATUS_ENABLED; + + if (ext->init && ext->init(vcpu) != 0) + scontext->ext_status[idx] = KVM_RISCV_SBI_EXT_STATUS_UNAVAILABLE; + } +} + +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 17 17:06: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: 14019766 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 AE45EC35FF8 for ; Mon, 17 Mar 2025 17:13:29 +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=l0YdBAikJlLuNjOBJCs64LTAnlBok1FysDkGs/r+HW8=; b=jtcnrKQVHbIOA9 JuYkS1seVkrhQASrsT7B2daMKLGtnm3BL5o63EgIZIxhViqW0e1yADURuB2jz7rm/wb8EFjCDSho1 jodZyOYuFhXXP437/CGLUNxRr9uwRmsFxaYoAgOD50QSUOQeiHDoPyxIS74iqn+5IO72uYWXLpdsy vEnk8I/jmpFhBNnAf7azB+ZwjvUhyqh6B882FnkiWLO2Ii/PvVJ4/ZFv32ZPT7r0fmpApREH2K+L0 oDsgOHjiqitSS1JDYC9qYABx9hFnAgKHsKiThRpgjLSGzrIic3yrzAdaAdRUT6RAEo+XhmDKwR1Ey dsuL4wBFAJs6lyYdGzAQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1k-00000003VWA-1w8O; Mon, 17 Mar 2025 17:13:24 +0000 Received: from mail-wm1-f52.google.com ([209.85.128.52]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwx-00000003TbB-0nmZ for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:28 +0000 Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-43ce71582e9so16001345e9.1 for ; Mon, 17 Mar 2025 10:08:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231305; x=1742836105; 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=nBnjzkDoAHCYES1tTH1RlHgMSmamC+5QlhVYnXgdQEI=; b=BDycjAvIJEsPdkZ5pQmwEsGzZ+j10sFKTsl3+AHdR3LCuRvHAueWss9YMqRH4LEgGp cmtL0EcxwGSvr7gV+5AJdC8uSrvQz9yMGE3LehYRmWknAwKeytZR/gMjAx/ZG84+5zrF C240q0su9ykygnMjopwX9dt0IML3/99N0zqxpkcvVBrxRCKZaea7102aUV7KvrcdQMWc TDPbnUjxSQXj92ptNUcnzG5oMYIIeP0qQzbO0kf1WizHmP0xACWRZRgaz/HK5rWIe26p EqyA8knXXA4wg+NAmyV4ssOAsRoB/xPad6jM2T9o/7VISqMN7+v0TZslobYjKddgTCuB tqPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231305; x=1742836105; 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=nBnjzkDoAHCYES1tTH1RlHgMSmamC+5QlhVYnXgdQEI=; b=f65S97ZmRXgVI1riD+KYcnW9r9XVQwdxZ4YIhifZOdPsBejiek5EzOHaBIzaD6kmmR cKk6yPBIlrQ2cZ1WbgHDVMmKDY/cF4kY4VJqpHm/mz259TKKgR/objtVjiv3EW3TnclT H2mhLr/0bzUvX4xqTV6qpDEfY2x3cp2JSSwtTXyM6Tp8y2k/ZoCEU6tfNXPxu26fwng/ iXV3aIbX2TSbFjHH7Iihoj5JCEIoMsu/1ZTWuBwiIRS3upUESyb0saiMLS/pkdKj2SMO RPlWE42Mzefzge47o2Nr0rmA8BkykkyJdoiugBXZFjYREkGvSPyv36xic/pCanWwG56Y GR2g== X-Forwarded-Encrypted: i=1; AJvYcCUXT13PFBAxJDK5Gyh/xHur+zynuinDEGjzh6Pqo+00m6bgaX0F6YDLAMQiQ54RTCKEMbtTslXNosWrzw==@lists.infradead.org X-Gm-Message-State: AOJu0Yys+Chi/QzUNJ0ZeGEEX2OsR3/qrM614wyBU5rtNEyaVjGHpr0K pYoeR1PmmharyOjtcdVvW0j8hHOoY3x1KHMLrVAwVLwT/614rMpiIanSNdUyaN0= X-Gm-Gg: ASbGncu9ThJaHMJC0Z4bYH7p9HkE5Nna60F00BA6iY/KlbNkoiaWZRslRPDygRPuVrP z6idzkvelkgOz/Hu52SZYMi2JeOIl3Xl0Zbi7h6GxS3Z+IoJrJFm54oJ+wn6TRnKMX+5mGd3BuT /RzVHiWTqk0bnrjF2ZJFTpQVAdaVwyrTXV2AGx4Pmkzh7joxYOVNoG/zfiXX2Psoide3VpDTquW RlxPFZ8YRI1jBF9vP+vtNFXJZ4ILpwgI5uTKWk4K845QZLoKZipvJvXTCSVakvcxDwtk9ox8tcH bXU6aCRDNjLJdMtU/8+y8APcTSA2ikHZQcz6tZlweCzqZnTJIXoCjpE2 X-Google-Smtp-Source: AGHT+IEqhdp5dcBzbvbBuH3dLSPFcvLdqKUwlLK3z0GBcZnv77CKTJXWVzz2XGRU3Xp4MOn6/tiCWA== X-Received: by 2002:a05:600c:4ed0:b0:43d:ed:acd5 with SMTP id 5b1f17b1804b1-43d2a2eca5bmr70294645e9.10.1742231305531; Mon, 17 Mar 2025 10:08:25 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08:24 -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 , Andrew Jones Subject: [PATCH v4 16/18] RISC-V: KVM: add SBI extension reset callback Date: Mon, 17 Mar 2025 18:06:22 +0100 Message-ID: <20250317170625.1142870-17-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100827_230321_AEBC8BC7 X-CRM114-Status: GOOD ( 17.27 ) 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, only the STA extension needed a reset function but that's going to be the case for FWFT as well. Add a reset callback that can be implemented by SBI extensions. Signed-off-by: Clément Léger Reviewed-by: Andrew Jones --- 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 3139f171c20f..50be079b5528 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -536,3 +536,27 @@ void kvm_riscv_vcpu_sbi_deinit(struct kvm_vcpu *vcpu) ext->deinit(vcpu); } } + +void kvm_riscv_vcpu_sbi_reset(struct kvm_vcpu *vcpu) +{ + struct kvm_vcpu_sbi_context *scontext = &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 17 17:06: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: 14019767 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 14700C35FF8 for ; Mon, 17 Mar 2025 17:13:33 +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=sA4BgaEkhIpx3A96rEJz0ZTz/gr0hGF7qe7TQP1kLJc=; b=XPQdtwdsp25rKA zZgjuE/rkpJBkKuFvCZ2OAJTqMzn7lTdF1B6SxEmeBlUK+WaeqECpTEUE+LeI2wumJPRvxQAP3BK8 f7XNL7+e2UuIq3lyclymimEqHkG8tVO2MN2QoJnipBVkN7vJjlKii56EjhB1n+JU2RUix6VRtPFhR G3DAF6BiU8S3jnGP+pE7RJ+nhrb7fvoo4GhiwpqQaD5l+wzco5fqNsPVTJEAn5yNlYc8cKFdFkZBm kHf21ZXJAHcNfho546tqpEsUFlefaZhQLYxhl5owSREFZ4Fa4Mxe/FX5j0D0oEEBcLWKF5HAAidxQ blA6R0RkOI5ZvRH5ZXuQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1m-00000003VaL-2yam; Mon, 17 Mar 2025 17:13:26 +0000 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwy-00000003Tbz-16Lr for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:29 +0000 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-43cf848528aso19933155e9.2 for ; Mon, 17 Mar 2025 10:08:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231307; x=1742836107; 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=htANgsmbkNgRMbGQD4e3tcAhU02WYfiaQrP01+RVlsg=; b=GhJS916Dfw25Tla2sQgWSAGu/yZMhwiB1mpUiximd/7l8QgDBV/8W4aYg+ctHdjCPv 0R+LteJhsWXS+hj6qJHjeo1jUkYCeY+HPwNga9+ix83eS7Ivdd0Ar/0wiYXnkmMqn7ZY SBiuk0Q2R3dm/3o6bx52BliDJNw5nrK7KD9Shx8BxI+1bQnE7UlUK5VNpazGClCOzK0L oX+g25UMRKxBpQ4/VcPTDXN0oNrZ5QCELmkvjOxQsSGXHkTQKhnFhHE0cU6XLEOqVgjo dOXru3rWLLkRGPBe49AitV3NliirmMbgOFfcXJZZOtxE5MN6mV/zb77QET9FyG5biX5v VEAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231307; x=1742836107; 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=htANgsmbkNgRMbGQD4e3tcAhU02WYfiaQrP01+RVlsg=; b=LQCXe5FW4UeX86Swsu/Ei2L3gJdXMdWq1EjQKFQbTBCuqN5iSj7X4IcjhNj74W808f Y8EEMV9bXapwJbM4wFMUlZxSqeStRnizsYaxhNu2goKRMW28yc1Pn5VM1lIRoRwnSZ4d fpJWP/HIjHo37yKjRPCNcrtcBXeeEESM0Yg5OCdCkZBXwWqPPSz9x+9SNb1bl4HObJ1H pmGR66xhoHG15Lp+XJmtjg6GIwlgqP8iE2uq6PtKlQuR8ppBNq3sp4NYZtr3vk8Tm5AU sHv9pm/UJEh9YDDFl+PFSnViiDiHB0KsJFLEhDMDywpw+a1KJ1qbzk4C/oqUCuM7p0rU lEkw== X-Forwarded-Encrypted: i=1; AJvYcCWzUN8XZifLyuRGxQFWg5GQ4NdAN/cZ6Icg2OWm62ozMYHHTwKt1Ajo88RC4l8s/+UySXaw9wrBn5So3A==@lists.infradead.org X-Gm-Message-State: AOJu0Yzj1yfE+PkpBNMxmmeNyj+oBL0oOiEIohQvM9jU662GtmK8h9sj DiiBv07nmyWdwCMxuYuxfdBpHVkRpBEswOBCLPVKrAG+1xzZCl1rCrZqeJVkdKc= X-Gm-Gg: ASbGncvjUhapQgzYtkSlqQ46YBkzBUT5QlkXDvrgkoyJ5Xp4TyAr1qGt0A/NfavMc8L 0PWxQldfuwq3YbM0VhjWNG6pxoOzx7zbd3jMdDpGjxAznkJiNpuroKzOAwjeuNQQ2ZJddh/bPW9 pWryHofGE4Q5KtZkd7B10+/sV5gczOUa1TwwQZjfRuhfDwOs866dWE1UZI9eRM73F85r7BTbbLr y7VI4wdmgwS+fmg2WK3ESrTWRiTQ/xQekRh+U5Y1KlGHXFU89nhHTTBm/FDr6+PaQ9kGtN4Lx1T /jxWCfPT59QV3ue85vgTjf0LYZudr7s8oRD42BVidqVFxWHk34HU4QMB X-Google-Smtp-Source: AGHT+IFfYY3GNObYbRkOWr107QkuPT9aClIwdgADGAW00AGW4WvCO631D/hnLE5yPui2XsBly5Wj2g== X-Received: by 2002:a05:6000:4182:b0:390:f6be:af1d with SMTP id ffacd0b85a97d-3996b49903fmr451332f8f.41.1742231306653; Mon, 17 Mar 2025 10:08:26 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08:26 -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 , Andrew Jones Subject: [PATCH v4 17/18] RISC-V: KVM: add support for FWFT SBI extension Date: Mon, 17 Mar 2025 18:06:23 +0100 Message-ID: <20250317170625.1142870-18-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100828_307391_DB612A0C X-CRM114-Status: GOOD ( 25.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 Add basic infrastructure to support the FWFT extension in KVM. Signed-off-by: Clément Léger Reviewed-by: Andrew Jones --- arch/riscv/include/asm/kvm_host.h | 4 + arch/riscv/include/asm/kvm_vcpu_sbi.h | 1 + arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h | 29 +++ arch/riscv/include/uapi/asm/kvm.h | 1 + arch/riscv/kvm/Makefile | 1 + arch/riscv/kvm/vcpu_sbi.c | 4 + arch/riscv/kvm/vcpu_sbi_fwft.c | 216 +++++++++++++++++++++ 7 files changed, 256 insertions(+) create mode 100644 arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h create mode 100644 arch/riscv/kvm/vcpu_sbi_fwft.c diff --git a/arch/riscv/include/asm/kvm_host.h b/arch/riscv/include/asm/kvm_host.h index 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..9ba841355758 --- /dev/null +++ b/arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clément Léger + */ + +#ifndef __KVM_VCPU_RISCV_FWFT_H +#define __KVM_VCPU_RISCV_FWFT_H + +#include + +struct kvm_sbi_fwft_feature; + +struct kvm_sbi_fwft_config { + const struct kvm_sbi_fwft_feature *feature; + bool supported; + unsigned long flags; +}; + +/* FWFT data structure per vcpu */ +struct kvm_sbi_fwft { + struct kvm_sbi_fwft_config *configs; +}; + +#define vcpu_to_fwft(vcpu) (&(vcpu)->arch.fwft_context) + +#endif /* !__KVM_VCPU_RISCV_FWFT_H */ diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/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 50be079b5528..0748810c0252 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -78,6 +78,10 @@ static const struct kvm_riscv_sbi_extension_entry sbi_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..8a7cfe1fe7a7 --- /dev/null +++ b/arch/riscv/kvm/vcpu_sbi_fwft.c @@ -0,0 +1,216 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clé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 + * + * Return SBI_SUCCESS on success or an SBI error (SBI_ERR_*) + * + * This callback is mandatory + */ + long (*set)(struct kvm_vcpu *vcpu, struct kvm_sbi_fwft_config *conf, unsigned long value); + + /** + * @get: Get the feature current value + * + * Return SBI_SUCCESS on success or an SBI error (SBI_ERR_*) + * + * This callback is mandatory + */ + long (*get)(struct kvm_vcpu *vcpu, struct kvm_sbi_fwft_config *conf, 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; + 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; + 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; + 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 17 17:06: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: 14019768 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 DECBAC35FF3 for ; Mon, 17 Mar 2025 17:13:33 +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=oqJDKXzH8MktPmoy0+Daa/Ti6/GSrx3pN53AjEjGV4E=; b=TZQgVOhy2Yv77J IVN/EMpf3OblwtEldOckdGkvVMbJV0xXl20IiTaomAzjOWA7qX1gpUfcYLPzPRCTpGqM9YkywzSTf /XUnQS1qjKxZ8dM9+CH+vhBCKiOH/9uAWTB0ZA1bC7+8M+Hhf6Oiv0HVPYfe5I+dz3HJtI0NGvUd2 Un6nK35Bw4ffVEhUtCvGizUtp/MVp1ACAuj8HbLydc5Zc56AZkOak8eE2p2Ej/TI8RxFEVFIKJi5m rzJs7LoVNdZ2jXLudLnbRXWSQQenK+1PsobNuQDlgF8n/G0y6sqf3Jn+qfA0S7crQXFSRzPxh6nP8 ilghSZmLL5eg8FCmX2tQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1p-00000003Vet-1gZZ; Mon, 17 Mar 2025 17:13:29 +0000 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwz-00000003Td2-1tBq for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:30 +0000 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-43ce71582e9so16001845e9.1 for ; Mon, 17 Mar 2025 10:08:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231308; x=1742836108; 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=P8A8Qnnc9KJsjMpibTJNoHdSMni25LFd1e2ExEX8AcE=; b=BWhp6/ImpS4nu5/EQtMUzRa5W4y8onwS2kO3MR8IW+QmaN5L/dQ9wmQP0qZ3QzeEOU zlpLi4zuo10yC9yOv0Tf5r+4X5+yLwpbE+G0Vz1wC9Uai+Qmf0EPb6eGiDeB3vfYRmmo 77IeiRj0aypqkOqaxsIscOSi9XIRnjM7XxlGC9B1x9PuRbHSC4UbnG5zhYZ+PeQOsesC LcqvTPxBuEZfDAGIhhCCZfqGFtwfS4aVlFLgU5PQHR26QD6gIFPzpnmCuF0znKDphSQn v/NHbHu5vMFUKhJNoN88UMtCwUMABZqMeRI0Uh6xQaP74ZneytEUQaIH28dz6gbueqdd cNUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231308; x=1742836108; 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=P8A8Qnnc9KJsjMpibTJNoHdSMni25LFd1e2ExEX8AcE=; b=LjgYMhjvbVRYBYyT6jWncHhdk9bAA5PQDunRwsuKhYMYk67KvwhHtnsJXUqScc7i+A 7kUWuwevuK6Y9mVDXgK4xb18Cvbr2+kU9Qcw1UFsfADTmw+qPsiWrMPU+45jya5GxRiW w6axk1+GVVIC5Zc9sUHJkd5k8/yrTZLlMnDxSepFuYgz3UM5MELBXBEMGiPO6rjysjkL /Mbd5+JjQPjPIdR5/+JV+0yR58jtE+KoAf3kxTfab8ImwUuQN+hnDNDbdGeeUB9SJqfV 2ZNaPfqMRT6nz+dpRo6riD8mL5bJKiPfE+Pc0rBp9YWrvNIyNBZlfFTXt3dpOTEaqbgu Sckw== X-Forwarded-Encrypted: i=1; AJvYcCUv4vCM7JU4908G1ShhDlfkhhWXqv+Xd2/fNm5Dvn8tolfZPpscAbQMkuzKz2nVeXvSfN2GJFu7N7btSw==@lists.infradead.org X-Gm-Message-State: AOJu0Yy758DPSFWQc+6RQIByxFIxu7xYloYBNQjf3O7Ov0e2K76xydOx YAYEMW/vNHy8M0t44taK93LdB6Zq2ntI/qzlHcnALRDtcY5JO9vrAA2WAmPhF3U= X-Gm-Gg: ASbGnctbAsOceDYtpm4iv3wx15oTok73AUJj2sOvnlG58dJSz3GZia8SlAlPmuFxTOV OcPInrJoKLhoDg2o7TcTmpnDRt7FlReNm9451/okiill7Kt8+3EUWiYHqoHFhWeUE9iPFvzyFYn LhfRmdppgLjjso+9YMi+lSY/jwB+WFKy6Mg3JIKJV3ym9bhafjf6R5TxVK6JYn9m94VudN+b4sC uSdj0EJXWABbCGBYrUupCbBlkGtD+oDzdah+TFsDo82USdckiTD/FE6UPhpiedCXX95c5gd7tl4 tWG6U8Jq8EM4vmNhfkooII6HE7OOkP8ZP76uFLCgdKH/YA== X-Google-Smtp-Source: AGHT+IGdYqlnvEy/PawZt8Sx5CxSE5paeIGe9C/m17bEJMfGQaAbMdJsnw0bGmy+W1Inh7nCACydaQ== X-Received: by 2002:a05:600c:4f0f:b0:43d:683:8caa with SMTP id 5b1f17b1804b1-43d1ec8632dmr150023255e9.15.1742231308146; Mon, 17 Mar 2025 10:08:28 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08: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 , Andrew Jones , Deepak Gupta Subject: [PATCH v4 18/18] RISC-V: KVM: add support for SBI_FWFT_MISALIGNED_DELEG Date: Mon, 17 Mar 2025 18:06:24 +0100 Message-ID: <20250317170625.1142870-19-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100829_501847_E6C86D94 X-CRM114-Status: GOOD ( 12.45 ) 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 Reviewed-by: Andrew Jones --- arch/riscv/kvm/vcpu.c | 3 +++ arch/riscv/kvm/vcpu_sbi_fwft.c | 36 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index 542747e2c7f5..d98e379945c3 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -646,6 +646,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) { void *nsh; struct kvm_vcpu_csr *csr = &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 8a7cfe1fe7a7..b0556d66e775 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 @@ -68,7 +70,41 @@ 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) +{ + return misaligned_traps_can_delegate(); +} + +static long kvm_sbi_fwft_set_misaligned_delegation(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + unsigned long value) +{ + if (value == 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 long 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 *