From patchwork Thu Apr 17 12:19:48 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: 14055471 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 B9CEEC369CF for ; Thu, 17 Apr 2025 12:36: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=Kppsqxsp/y67gEBkQObO53mQ5kam5g3H18Gtr4/bO84=; b=pM1eKM77utcdy8 KYiW8ZKVoymE17T3JirqDmR0wm7uyfJOKxX6bSkBWExPVjlTLPnfYYfxlV6gnyF8Zjs4zJm0aSJxH 0zS8bcsl7LaMIBehJRTn8vnEpBSihWEQBijJE5YIfUwfh7EybL0aX9bK39J0DcL+cpnHGYaglDeHG KuPs/OGfcw+znvfhhUcDMgOpm6jBnjn+JnkKqfnYAP+TFjKDDpH1a+iBhTOD6F+syCt/6k9SUShPn H+KY+H6pABXpsXZKC5pXLp+rIsImNkXmMnMloAmMHBDkC7OC4SVDn4oYDuwukkDKooJDhFbJsWcKZ UuWwQL/UhvTRDzw8maJw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OTO-0000000Cz08-1Gkl; Thu, 17 Apr 2025 12:36:06 +0000 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OHp-0000000CvJz-3Txy for linux-riscv@lists.infradead.org; Thu, 17 Apr 2025 12:24:11 +0000 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-224171d6826so10597815ad.3 for ; Thu, 17 Apr 2025 05:24:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1744892649; x=1745497449; 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=MqV/L1fucoXh0zEq3ZbEkv0iZBTOf63rS7eOzOMDARE=; b=cI6MhCBi5g9l/u7ScbBLWJb7Y67fVFlaiAsDYEwAmur8j2PKjOISSCop1/K2Gbv87n M0JR3fEy/E5lBOepw/VcIoTSoBpkxcMvUbX3cRh7AIJWsWXboCGGhv9l2ICHFnW2azOY J3yNGnz7IE8wo4FK9Dyyi0Rk7ncKQ0C3PuZjCoo8dnn3yALBJ+VD/Cgm/qGTMVgvPQfV myrSPdDWs6OPWmgUZKMZXDHyiYqfsXMwPbGYmyKD9xMi5LCCIwhyq3/UyS52kf6zyKje xtfi1qYHE46GgflmFI6qxndzANqG8Fi1jnojt69OQgSfY8GcioH46FpAcS3ar94vxIOx tyHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744892649; x=1745497449; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MqV/L1fucoXh0zEq3ZbEkv0iZBTOf63rS7eOzOMDARE=; b=LMBACDS/DWxi5eicuCNHCAg3/TY5Jx7xXmbR9uDvE7cCfPAHXdXEHr7gFjepzqdp92 C5chmg0vlCw9Er6hFmUYAnQm8OdgM1b9Y95TqHFSG6vdGGu77OrPA0AC5R2Pv+n7fMFG XvYFV0XqDUnnHMj82DVVuJGUnOV8thiWEMlSYg/L0EfIWwKDEXADDQXJzU7sSlAoT8vG 4T4hH8+l/dVqNodaXmfawVKQb9/6lOGOozc3uCT229S69jAPzd7Whxxw9PEYdGUbmPdv fustdtw5obzyYvZLEIObHV3ent3ts9FqZHXTj6H4MkEuC7A8XMonpaVZnn3MA+iGOQDB +ZIA== X-Forwarded-Encrypted: i=1; AJvYcCWCv3ekNsVkJo4LgirJLTyRdMLj+r/HtSuAG03uvbYydpIkzMAgDesHK6H/kxmz6XB+m3JVdNuroL1haA==@lists.infradead.org X-Gm-Message-State: AOJu0Ywrpc/f30QGLRsYVOVK8jCrM2c6RqBnADevGVwWUJgLSdr6p+b9 ztr4Jj2cusHWq8Y9blqibElLB9dyGk2rXdKhhKvlbJXFrKKQ9LZH0cdURBrIC70= X-Gm-Gg: ASbGncvZve7pR2YJu4j417OF0NT95LNzPGLS7rBSFpBc4MhO6cmtY923h06C2Hpw9Ja YBFJqeZ5s5Gdl93SQKKdo/Ohq5SzWSMy54mX/Yn4ztOEVHDOAG/sodj0EXWO/mD/Zu8RIlc8eFb 2Q4XxU3bVfVsT615RptTMwPIFCBiYZ60cbusEPJA1kc6e/Iml4lYAY+GTHuQwTBREo3RZLrTtI/ ziYpEa1bOWiDWJ4mzaLufdfCM7KNwBelcph77CXh2mzEvAUHwZ+J6+Lb3lZijs5C9n5xCFuL4cs ulEmQgwXJuPhPaKQxLEHmC9kAlfzM1g2/9dv1umCoQ== X-Google-Smtp-Source: AGHT+IFVHOWJJRAXEzH6mdZNYusO/nzJmHfPymZgz+gveEEgUfllUOzI6Ji7vwcW5uJ8Q3EqmqJGfw== X-Received: by 2002:a17:902:e542:b0:21f:f3d:d533 with SMTP id d9443c01a7336-22c358c542fmr78901385ad.2.1744892648939; Thu, 17 Apr 2025 05:24:08 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c3ee1a78dsm18489415ad.253.2025.04.17.05.24.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 05:24: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 , Deepak Gupta Subject: [PATCH v5 01/13] riscv: sbi: add Firmware Feature (FWFT) SBI extensions definitions Date: Thu, 17 Apr 2025 14:19:48 +0200 Message-ID: <20250417122337.547969-2-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250417122337.547969-1-cleger@rivosinc.com> References: <20250417122337.547969-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_052409_866066_BEEE5B3C X-CRM114-Status: UNSURE ( 8.72 ) 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 Thu Apr 17 12:19:49 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: 14055473 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 6E4AFC369D2 for ; Thu, 17 Apr 2025 12:36:13 +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=amIlo3oowrJSwGPhBdy4VEEAYfuKyjYd9HPooj1iBR8=; b=LC9AOaWaHolNS9 6Q/FIPoNaP5bozKsI06vS3qziANCOVc34446oR2BnJGxyMiRvQ/WPE7sxcgkkfNLhhI9UU3emp8AS YiJTDkuWat0EMGReNFlZqhTGygzXtfvoQwJVmy99GNOFM6no+RRKcg+wCo++ByMPAI7c/EUUOLcsP lKp2U22w5Dt5TGTrufUXmaKFNnWBDNoh2Ti+IHFloYyIh9z1Oel64Wo5KIMouzjvAO81vSf6S4OL4 J8RWfMREErNR58NDZ+1G+cAlNkktrYTf0PPZ5WwL3DHJAN1mqwBfSjURQgJmihH/SsdKSAM9Ugcv1 LCA5KImUxGtVIGY3ms2g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OTO-0000000Cz1E-4B66; Thu, 17 Apr 2025 12:36:07 +0000 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OHy-0000000CvMg-2RNX for linux-riscv@lists.infradead.org; Thu, 17 Apr 2025 12:24:19 +0000 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-225df540edcso19426795ad.0 for ; Thu, 17 Apr 2025 05:24:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1744892658; x=1745497458; 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=kJ5IZYf4f1NhGHvFycXXpF/34tAS76qwhFgvuPH97UQ=; b=TpQqG7jKcaTKPvg/7FFRr+TBmlVrq9B/c9HugQScC6HXVNZ91aKgVptNIff46R8B43 P0wiYmwIKOP+jdKAEcz4hFk2aVdSmeiVxwJdv4nV8J1Qz7jI/YZL2wgvbgYw+x1x8l9e TFVb/ivTwJKSZGFBQgUs4Cf1auXdwhNbiwIpSDGYgJE+q5igT5AqXDkS6gdEO5TKI9Px n+2FJBMXBOLrmsPR7te9l2cgvxzXV4KygdeZP0tXqpISEs0xowKRi8EZYHU299OPPKzm 1ingNali6TjWrNcY+3l6rkiRA/Pm3EF/63dbSS6M4WDp/O8/+8VDh+Amd6955jK1eqdV WaaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744892658; x=1745497458; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kJ5IZYf4f1NhGHvFycXXpF/34tAS76qwhFgvuPH97UQ=; b=ANilHHHetLd08MgfRuwWMQbYcNRAxCetB2QP2m4J9M9RyQoDrMnRxajj3+cohUtPrZ NMepyiilqSFlgshJ6d//oGyctsAFnXkABIn8MdpJ7a6O7MHxMzwdYbZ59MnJnjZKsIqW fjYymiGuWY6afQ7Ubytstk+S9AZXeGu5U/DwzDcAB1go8iE4PWW6gxDxeF6SrFt3imQ8 8BI4djsEMhst4ZaTMgvhkIm2tVkToXqg6HYKSfilQX49rf5avKL/aobHlUk7MznC16I3 H+PNOAEEF07w3nvQFhRMVJ1FURd3pbeuYKI/umhdO02NxG52W2pEQA6Q9gwKVfkwD86I M+sg== X-Forwarded-Encrypted: i=1; AJvYcCXClJ/pPf78jaWvIwpF3GZ1l9tqwoMmd01udYub1C4NYCeZYFurKsz8qDFd+xsLwX/QXCU1FJE/vLYxFQ==@lists.infradead.org X-Gm-Message-State: AOJu0YxR6i7lYJP042kRquQxBaW4piu83PnI9Fwm4gBXQ8Zd3Qqvs/S7 ZSaZ8v46u0D9oL+VMo6xsJ+uBTmRCgdwnZTVQ+URcj/8xWVfnmgSHiBexMMeyAQ= X-Gm-Gg: ASbGncu5iPo72dNbNER6X2aDXjTgREghs38SgCdnV7flNIlJeaYuyvkSGZRUfUGE022 UYQ5MvkFBV7WpKbE9/Wv8ltl6AIDzu7G62yEUuxp/nhUIu/3ttFIrycbyo0yRBoblHOPeSe7epd dWf8FLzmiXjm1rBIZecNufGkrt6KYY8G/aL0ZTGDztXihgeRCxpviolKeLIE+sz9+iYOVg2Tidq pPZgdnVDZUIDFb9rmtWroqqgl4WzyajS/0RKZpOI06T4TDtdMkSnG6g19srQhbD4PFFifWpAR6w yH6JiDra8tzJYSYpBR8wLymvb6iGGJGJxvpu8DXq1A== X-Google-Smtp-Source: AGHT+IE0XjCz5TtIm1U/KycHsULkn93MfV8ZJ4DCUOeKjh64BtT2X4MD7ZC1hijUVKkaUKvQHFj5ag== X-Received: by 2002:a17:902:f642:b0:215:9eac:1857 with SMTP id d9443c01a7336-22c4196f564mr40963855ad.5.1744892657640; Thu, 17 Apr 2025 05:24:17 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c3ee1a78dsm18489415ad.253.2025.04.17.05.24.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 05:24: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 v5 02/13] riscv: sbi: add new SBI error mappings Date: Thu, 17 Apr 2025 14:19:49 +0200 Message-ID: <20250417122337.547969-3-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250417122337.547969-1-cleger@rivosinc.com> References: <20250417122337.547969-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_052418_626222_0A69CCFA X-CRM114-Status: UNSURE ( 7.39 ) 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 | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index bb077d0c912f..7ec249fea880 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -536,11 +536,21 @@ static inline int sbi_err_map_linux_errno(int err) case SBI_SUCCESS: return 0; case SBI_ERR_DENIED: + case SBI_ERR_DENIED_LOCKED: return -EPERM; case SBI_ERR_INVALID_PARAM: + case SBI_ERR_INVALID_STATE: return -EINVAL; + case SBI_ERR_BAD_RANGE: + return -ERANGE; case SBI_ERR_INVALID_ADDRESS: return -EFAULT; + case SBI_ERR_NO_SHMEM: + return -ENOMEM; + case SBI_ERR_TIMEOUT: + return -ETIME; + case SBI_ERR_IO: + return -EIO; case SBI_ERR_NOT_SUPPORTED: case SBI_ERR_FAILURE: default: From patchwork Thu Apr 17 12:19:50 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: 14055475 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 F1AF7C369D1 for ; Thu, 17 Apr 2025 12:36:12 +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=y92EBDiGSGDftJK0UUIv86UnZcw4iQ0aBcYPtez6bFU=; b=YXhSiqHnLzJStH OCTfeU4DC2Vp5sKqjF2tHjwh52zF5OxajUlcqkt91OrmFv/Gm4oKxA0UG7/KNNVcYSm8kWk9JUPkQ /RF8VbXWSKvOOJQeZUc1kOS573glB8ZHXHDNQ9yOC0ImZxA7Uf5VlTsIJaeonuhoIlRE8053//EJX vKpQBnTQvLKUC4SwP9bQ28k9N+d6BF23ly+Xdx49XJ8fJTekbGMhX51MqKX+5C5fFnp7Ipl6GgS1/ fzK1WWjKe8ONhEqm6PZwko+QtxJu21WXA86HfRE+oTeidRteix+SNh2+icI/a51Do03RHLtzR+2xb FIU8wF5/be7TvWxSS3/w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OTQ-0000000Cz2r-0bv9; Thu, 17 Apr 2025 12:36:08 +0000 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OI6-0000000CvQG-3YzD for linux-riscv@lists.infradead.org; Thu, 17 Apr 2025 12:24:28 +0000 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-22928d629faso7144765ad.3 for ; Thu, 17 Apr 2025 05:24:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1744892666; x=1745497466; 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=aNrGkE8UCKSxhi8ZHI6AhhtBeoQ1iixkNI02GQVKF+0=; b=DLxF/+cPV1Hqap6vAUQwEZwhOWgUUsq3uO46KUPb79g5I4KwR5xel7lAfZFS6q15EX uLqihRD3Z7bm3g85IegGOKcDqpFafegkZm5XPCygF5dZ+qmGYA3O60G9fTH50oVaDgWo 0MzYEgPwz7yO71o3KikgctuyoKOdWhV8dVxDTFNtMofOejVV+KCZgWxONYrNugKIYktD e7mi3xi0Uk11cBpowaKuc9RgVqBZ04dR0GfhJkb+IDoYXesbYd6L8/F6vG0jEVsSBmO9 LKY7V0sYTplD0wuH9dSqnucl2BF4zGFDwrlSylgs4SLST/D+o+MunuAZRCQQ9QOf5zD5 TsvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744892666; x=1745497466; 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=aNrGkE8UCKSxhi8ZHI6AhhtBeoQ1iixkNI02GQVKF+0=; b=F0dhE4KpmuuoXMj/PsyU39tiBxAAQQVjFplgGCQt8TqlTGajP4XtLY8Cb/XISYHE7t 122g7Atj+Lyc1OgYrB9bUBGMGFakCpqGEBUFdOWOUymuxFZKvXn/CPMrVrdAqDrhZCQf b1cUIj1Z29tIB9CLDmi+w/SiGMi8n4uP5vtm0oawoekwAd4sJ/3rDPPb0CtoDeRxUVLz SeBoUf+12uu4/DYbNju4fxOaBrcPldnT3ppqaEQxSpEQMc38jgPbyZyn3s7P9mZ0ubRB vOHkDz4Qu5VZYUE/AcKqa+eNSah1OinNmmJf9TdnbYMhTiJYCNRa/0teJnrRK2pBO6BW wOrw== X-Forwarded-Encrypted: i=1; AJvYcCUqrso7rtKHW87ycKpEC5msRka6VvdK8XGHU+mmK35xQFBwprsYLFFxiptnoDbRFhjtKlQbH41/iOldeg==@lists.infradead.org X-Gm-Message-State: AOJu0Yy9NZG4lKjJflAGhWCUmnC+XQ0NadOlPrnlfN9j8mbhILNh8BaD yeD9UmPS6Zf90a+6SglDavE+j1tpPHTuDduRkssgUsXDAlDPWaCmqtRXIGooYVg= X-Gm-Gg: ASbGncvUiYXa97rwtmbjIA3UcJ3umlEU7iuSGXH2UpMkL6dr9Fo9wJgRn4JaKs8AbKL 5GrSQrL0xvIyUrdXm/K7ZNDRjSGdXTVKndG90z7mEsJplkYBZWRIlwQ7vlq0O4TPlLMk3/jX72v JI7SVDBISrb3DgcgNvnf9cK2u5fYolv/GocCdm3OmHrgdsXs5GROIseJkfSm1GX3In+QW5JjSem GxqQSlRKjrRQjc8pWeM9lCJ/tbOP51X6/XRtBMllGRkcfl225EUmxfhrNNQOEbHgOk7R9HY9TM6 3bUuSiElju8/WVlnweEOt9dLWGckoB5wsD6Ut4MPKQ== X-Google-Smtp-Source: AGHT+IET2FSN43B29b1iFIUfRnJqfxIL6IKEzFKmLMBZtkj51fE5xgUwJd+gTUEP7A/af82ElzoqFg== X-Received: by 2002:a17:903:1cb:b0:224:721:ed9 with SMTP id d9443c01a7336-22c35981e16mr85524135ad.44.1744892666322; Thu, 17 Apr 2025 05:24:26 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c3ee1a78dsm18489415ad.253.2025.04.17.05.24.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 05:24:25 -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 v5 03/13] riscv: sbi: add FWFT extension interface Date: Thu, 17 Apr 2025 14:19:50 +0200 Message-ID: <20250417122337.547969-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250417122337.547969-1-cleger@rivosinc.com> References: <20250417122337.547969-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_052426_886967_9FF7E53A X-CRM114-Status: GOOD ( 12.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 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 | 17 +++++++++++ arch/riscv/kernel/sbi.c | 57 ++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index 7ec249fea880..c8eab315c80e 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -503,6 +503,23 @@ int sbi_remote_hfence_vvma_asid(const struct cpumask *cpu_mask, unsigned long asid); long sbi_probe_extension(int ext); +int sbi_fwft_set(u32 feature, unsigned long value, unsigned long flags); +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); +} + /* 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..379981c2bb21 100644 --- a/arch/riscv/kernel/sbi.c +++ b/arch/riscv/kernel/sbi.c @@ -299,6 +299,63 @@ static int __sbi_rfence_v02(int fid, const struct cpumask *cpu_mask, return 0; } +/** + * 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_cpumask() - Set a feature for the specified cpumask + * @mask: CPU mask of cpus that need the feature to be set + * @feature: The feature ID to be set + * @value: The feature value to be set + * @flags: FWFT feature set flags + * + * Return: 0 on success, appropriate linux error code otherwise. + */ +int sbi_fwft_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 Thu Apr 17 12:19:51 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: 14055474 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 BD4A6C369D4 for ; Thu, 17 Apr 2025 12:36:13 +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=DYiRAOF+k94LsCPylFYOlY2xdbJ6PalIyqEUBsz5EQU=; b=2k2M8pqpS8FuGY UuoOdLCLOIwsZzaYmTSpKKYx3nEItFcC4oAh6sKUhoLEGiHcRXuK3Tda/1oVy3hVxToHlGcQZt9xG Cx9mycwx2yTYZk21AjDND1fX82SZ3zU5WXtvNeL5ve+/5dtYKka9dWnCEWd1B9fVo7E/qvd+CBRo+ e3HwSXohlEDvqO2dKFHFdJX3n2IQ3fRfKUxba8TOrpGsxCrI2H3FFEda4zknbqHbaQWfISBHFlBF9 Go7sbKKixHWKy54aWb67yBYDF+DfJzi8hzbT/C3TdjnaqqSEIPXKLf0iX62Rujn8CFYrC+MKvPRUu 31GASaJx7nE0GMOPNyrg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OTR-0000000Cz4J-0eLh; Thu, 17 Apr 2025 12:36:09 +0000 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OIG-0000000CvV1-0CKX for linux-riscv@lists.infradead.org; Thu, 17 Apr 2025 12:24:37 +0000 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2295d78b433so7451055ad.2 for ; Thu, 17 Apr 2025 05:24:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1744892675; x=1745497475; 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=DkvRtqiwpGFu2F2LneoosRxgLPIUe40LOw9HI4KIxXc=; b=fBqL45jNz58LsTjvCt0EVqHylmVcV6NOlFR6FHkxLKIAh90goAhPA1kFWw5lP9vcBC zIo8e+XwIglIoo/iIA5B0n0gMbcI1JyNy2ndaxU7ucXJIZFZTW4+sHG3gpYID+HvHFZ4 GC4AFk3FRExfvQiv13/i3wI6oOPfoMYnzEBSrWzDg4YL9NdrLNVDaOjlrHdB/MTbiCs5 SVBoDQRjltijE1Aty2JZODcuKtG6Tvc314TBMAYR4n7HNC6ZPHRO9NSR4XbM2lOIaE9/ zXTegC4xg8lb3yUg6JQIQACkpGjKRdNzlvagZ8UVo5D/YnxNqJy8TFR3rp8ugmOpUb3G xnzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744892675; x=1745497475; 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=DkvRtqiwpGFu2F2LneoosRxgLPIUe40LOw9HI4KIxXc=; b=fynJ4c7MdVR9pewtO+KtI89lUH5SQzQ4nLW94nr5OBnZ9Dr21kP6CAoyDldAPQRn+T jtUN/t7AjzNlnFxBRm+n33zQ8facS0ZJOrCbPz1NprkHMAeilQlb4fF6poLdNY2BltIn CJDDCkQvlesc3uG4V/+vn7nOCekO306SZJO4fgqSvDgzIiG/MkezIaMZ/mXAWhoExLlj hNFizA47mDp9irjnoprGDZr409A62PkUrU5VWTOAZna943vL6VqVUKPeE0hns6OVpZJg B0zdhxLsKJHKJkykDGaVJ9Ofi45APHROZb7BQZjKD6etQtk1hx3hNLnb1V5RALVYlt2o 3fJQ== X-Forwarded-Encrypted: i=1; AJvYcCXnQVKaG82yI9qGBdbrUloXahD7OOO/f8/ybsKA2Y9ll483nbqO8EC2FyqmKbRfyzDOR8k+F2LhaZsOaw==@lists.infradead.org X-Gm-Message-State: AOJu0YwKMsiL/mHPqGbmb6HYfIlQy15CGvv+d8tcHw/uLl4ckrJdhotU 9cclOu0bktg7Ehk41p+WZeZr4Aq2C20HkqQaa+RxilSWTy5lVx+XxkFXb2rmQTE= X-Gm-Gg: ASbGncscmpXY9DlzIUw964ZvMGmP8+EQxu/McKWRgZhPlLY/B8pGbqQnuyjUutGAHkU gQWcRTWnyz+5zzhQ3vlwSOVrlPp3Mqq43fbOHuJozAyTa7Od9PJR2eL4P9hFrPjSEWvc3Vt4Hk5 srCDDqZ711JuilLzyC+UCzX1w5lideRp9tS/Wfa0M0nEdQXJWueTNslqq5yK/P0n53fbmVBopwB M2SiLyRKsVBtZ5No0Bvdvu/SWJrwbThb5fWtJEtBv7az87DcNl2eRvQ1KLI05FmaXeIJWpO5sPH Lpf9Ju4FUpHZgVb5J69rxnQHajXVAEKo36MBc6JGFA== X-Google-Smtp-Source: AGHT+IFwoPNkZRHRLCRUuOqGDF2uiHAGyCvd3q8quDmBUyk1f/F/4WvIpLrbGYXfNhaC6uEF0f4feg== X-Received: by 2002:a17:903:2447:b0:227:eb61:34b8 with SMTP id d9443c01a7336-22c35916f13mr99932925ad.25.1744892675059; Thu, 17 Apr 2025 05:24:35 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c3ee1a78dsm18489415ad.253.2025.04.17.05.24.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 05:24:34 -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 v5 04/13] riscv: sbi: add SBI FWFT extension calls Date: Thu, 17 Apr 2025 14:19:51 +0200 Message-ID: <20250417122337.547969-5-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250417122337.547969-1-cleger@rivosinc.com> References: <20250417122337.547969-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_052436_088584_C8401A4F X-CRM114-Status: GOOD ( 13.11 ) 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 | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/arch/riscv/kernel/sbi.c b/arch/riscv/kernel/sbi.c index 379981c2bb21..7b062189b184 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_set() - Set a feature on the local hart * @feature: The feature ID to be set @@ -309,7 +311,15 @@ static int __sbi_rfence_v02(int fid, const struct cpumask *cpu_mask, */ int sbi_fwft_set(u32 feature, unsigned long value, unsigned long flags) { - return -EOPNOTSUPP; + struct sbiret ret; + + if (!sbi_fwft_supported) + return -EOPNOTSUPP; + + ret = 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 { @@ -348,6 +358,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; @@ -679,6 +692,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 Thu Apr 17 12:19:52 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: 14055476 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 2FB0DC369B2 for ; Thu, 17 Apr 2025 12:36:15 +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=7paJYnIRNGdcSELBZzGDmaz8lSl1CkcAfrw7VeQl7Pc=; b=t1a7VeuUXXvUqd 8BIdKoR9HFI9QcjbDTnGcnnsnDZi1tB3hd8rFCqgNyZpE2gVSY8XhId+bmRJkoQ4FDHfbhZgm13f/ M64dSDIbUstKSLC/tiyde3foyLp6SzcGEIEyomeT/eF3+PmdedxZp3T3xm38AR1FVyYJ1kPEMi7GP YEvpIi/HkGc3NVbSSRJlucNFznRiXieMbGUFYkj7QAK9tKeweBV+0/K8toos7wwBHyLMBrUGpQ3rC cIf1cQZq+vw4bzJp2zmFG3NhhHJQhgFWUESypDuBPwIG1E7GTMK9Zg+q8jPnaF3kYvhqfjab8sA2U uqLKOQMz54d2Zbu0Oa4w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OTS-0000000Cz5n-1GyX; Thu, 17 Apr 2025 12:36:10 +0000 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OIO-0000000CvY5-2TBP for linux-riscv@lists.infradead.org; Thu, 17 Apr 2025 12:24:45 +0000 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-227c7e57da2so6328435ad.0 for ; Thu, 17 Apr 2025 05:24:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1744892684; x=1745497484; 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=ZffLnUvyDxY5lnr7nm4ZxhnqMm5pHoMLqJFCY6yvcnE=; b=T3SKj5jkLCBxUFCmsbZnQU5VYnNNffmOFzHRwDfOLH51UL72+pVk4kdTbSL31dmFY2 qfETM9d9EUHq75wKm01AxEbEeQPDKMHpSzcmnt3sV/0L0zvXuDB8LKKO0Fi4W4ZIKxZy F8049+ztTLm+7JRIgNreE8ynCUQGVvbHTAxs0qh2AVyaxAgfxesXSgXUUaKHJKRWI621 d+qE12LVUAGzIR7hY0uSt6tV9krKuDvVVTnv6tJ6DefMk2nF4OPszq1TbMuRZ+yHnt5e E6D4ni58PkORSSH+IOWtN9dJnqLRVOi3bwoF3jIVFULsIAgKYU4jOvpCvGnypAr+09F3 WAuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744892684; x=1745497484; 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=ZffLnUvyDxY5lnr7nm4ZxhnqMm5pHoMLqJFCY6yvcnE=; b=raeofRLtaPDdvh2zfnazr7EZGZ90KYMDnSnxg0qorO2FqWu4CghYM4BlptmzJSaxpT bGc4w99U2VJBUat9mVHEvyq19Pdu6H7pvMXILkuCxjNCaVXN2TdumjD8fzWYUNTURzE9 3LSPunIDgj1Svddf5VqJ4AWCLY7Mg/GYQFWCS/qGWgtgzcZ1WxAlh4Qjq1MB0wjBtcye qw5P48UK72ogRILA6Do8N30BWnoJ1G2oB1OvF7CR7cw5FGJE9XiVC5V8Z8LZ+QJbEctV u+LBqyH1kKZSjmEiHwDSOXnFH4JmfQ+FXj7Q9bgzQYSRIaJx5bFbjz9yivib00z+WkoD Ijsg== X-Forwarded-Encrypted: i=1; AJvYcCUmvG0/NvPLQUZI/4fRR0zHWPeC8LuOnRjspL3ia17VMyCGkLUpxgzRbWzzbT5cgnVtWuAklGXBzgxMSw==@lists.infradead.org X-Gm-Message-State: AOJu0Yxh0C6NqLSkHOb64VJ/p3EuXjF/uzGpHn5N/bPtac314YzrbU5Z cHywJhXIhZ5xPj0dvDzpB5z/1rWoCaqqY4o2Rz3eQHx3ocsqOUTiPZrxxsKqSNk= X-Gm-Gg: ASbGnctZAAEsp35E8DzpuCSFoe+rYUAx1FZkBBalFgp6CrCkCan3nEW2uR85Bhogeys EN4LF19Go17Dsau2NACExqR4mzz16KChKtrYMmN9VgsuyRWbYrp57gvoX47Yhjccca9dfrOP+fB fWR206ltgSnEN4Zi91SQK2nkN+k4DIr2qnpwBy9i3Y34Z5FLYE9KJ2ND1Jtzvo6I8IziDJooj33 TkWMaDOWIAGbo8AhHq1bdrWIfTvF/Aoaix01LdXQXH4S6hSNNvjoExOsTZcw54MFLKnidYNQ9OL umeT1pnDcoEvR2w3xbVb0l/4b45tjk54S65m+4HqzA== X-Google-Smtp-Source: AGHT+IGh/BYwkefJ9AAON/g15uIjE6Ad6rojhY99Eh6G81EOlK8D2lFOXm78WPt4vUtVQfXYtoHamQ== X-Received: by 2002:a17:903:2f83:b0:21f:2a2:3c8b with SMTP id d9443c01a7336-22c358c5d8fmr81179515ad.11.1744892683747; Thu, 17 Apr 2025 05:24:43 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c3ee1a78dsm18489415ad.253.2025.04.17.05.24.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 05:24:43 -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 v5 05/13] riscv: misaligned: request misaligned exception from SBI Date: Thu, 17 Apr 2025 14:19:52 +0200 Message-ID: <20250417122337.547969-6-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250417122337.547969-1-cleger@rivosinc.com> References: <20250417122337.547969-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_052444_639399_C7F413B5 X-CRM114-Status: GOOD ( 16.40 ) 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 | 71 +++++++++++++++++++++- arch/riscv/kernel/unaligned_access_speed.c | 8 ++- 3 files changed, 77 insertions(+), 5 deletions(-) diff --git a/arch/riscv/include/asm/cpufeature.h b/arch/riscv/include/asm/cpufeature.h index f56b409361fb..dbe5970d4fe6 100644 --- a/arch/riscv/include/asm/cpufeature.h +++ b/arch/riscv/include/asm/cpufeature.h @@ -67,8 +67,9 @@ void __init riscv_user_isa_enable(void); _RISCV_ISA_EXT_DATA(_name, _id, _sub_exts, ARRAY_SIZE(_sub_exts), _validate) bool __init check_unaligned_access_emulated_all_cpus(void); +void unaligned_access_init(void); +int cpu_online_unaligned_access_init(unsigned int cpu); #if defined(CONFIG_RISCV_SCALAR_MISALIGNED) -void check_unaligned_access_emulated(struct work_struct *work __always_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 97c674d7d34f..058a69c30181 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 @@ -629,7 +630,7 @@ bool __init 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); @@ -640,6 +641,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 @@ -648,9 +656,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 __init check_unaligned_access_emulated_all_cpus(void) @@ -682,4 +691,60 @@ bool __init 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; +} + +void unaligned_access_init(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. + */ +} +#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 585d2dcf2dab..a64d51a8da47 100644 --- a/arch/riscv/kernel/unaligned_access_speed.c +++ b/arch/riscv/kernel/unaligned_access_speed.c @@ -236,6 +236,11 @@ arch_initcall_sync(lock_and_set_unaligned_access_static_branch); static int riscv_online_cpu(unsigned int cpu) { + int ret = cpu_online_unaligned_access_init(cpu); + + if (ret) + return ret; + /* We are already set since the last check */ if (per_cpu(misaligned_access_speed, cpu) != RISCV_HWPROBE_MISALIGNED_SCALAR_UNKNOWN) { goto exit; @@ -248,7 +253,6 @@ static int riscv_online_cpu(unsigned int cpu) { static struct page *buf; - check_unaligned_access_emulated(NULL); buf = alloc_pages(GFP_KERNEL, MISALIGNED_BUFFER_ORDER); if (!buf) { pr_warn("Allocation failure, not measuring misaligned performance\n"); @@ -439,6 +443,8 @@ static int __init check_unaligned_access_all_cpus(void) { int cpu; + unaligned_access_init(); + if (unaligned_scalar_speed_param == RISCV_HWPROBE_MISALIGNED_SCALAR_UNKNOWN && !check_unaligned_access_emulated_all_cpus()) { check_unaligned_access_speed_all_cpus(); From patchwork Thu Apr 17 12:19:53 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: 14055477 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 CA8FDC369C9 for ; Thu, 17 Apr 2025 12:36:15 +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=9/l6jsel0OdX2nM9NlLilP7fnnolO8GEtubOSjawvYw=; b=iDHhgzn2G4nMKx ZgFVm7jl/XTGXhxHXiDbmoz1SNEVEb0YnDRgosuZtssZTUO88Saa1zYEfX0GVHG1Ay/oNcTEdgK+j /ssZem7rGIqklKek0CkXBxc5/yojwC3WLCb39JFg2gH53qtDNeXkS5LU9JoF2gFuiuYcnNz3ey5f3 OTr82/yYxx6Mkm/vG9/Zjm7vFR9CCMQnlEQLuFPY4FT611Nr/rRCPerlJze1oJIYZJW5PYsrWYhlX t+u4lcKrNHs+wveI3ogG0JAOan2tF5izn7kF0OZw4lKJaae/ZcpHGSigTMo+w+EW8XZBr2k36PUF0 FJG7XtL86OoqeU2DzqmA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OTT-0000000Cz7L-1sVv; Thu, 17 Apr 2025 12:36:11 +0000 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OIX-0000000CvcX-033s for linux-riscv@lists.infradead.org; Thu, 17 Apr 2025 12:24:54 +0000 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-22423adf751so8195955ad.2 for ; Thu, 17 Apr 2025 05:24:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1744892692; x=1745497492; 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=UzbGeZkhDryHTbPMrJ1IX4plytmQ+QFf0x8BSly6zWo=; b=zBX0wF3tDzTiVf14aObUlhp1Tf19+TosgNNdJf2RRIBAdIdePk58q/LUor8rXforWM 29dnCKSiu+18S8t0pjvmWDhTA6EH5S1CSLXn9drUgEGzZIZJoDmdbAWUcKMjngSVPbvu 2tt4PjZYwpm+36pHNW0RznCzliA5+SCIfY5/jBp16guTR7RIPEpBhrvHIbPOPruk3c6q ghWZofWrOJWdDhNUqCkgkXRp+T8pBzvS0UK0esPiVWuOX8mqBrd7Rw3UvAr/eIWN1871 cSLz8fiETR+j2rvXASkcI79DlLeh7MtIMqOKxvxzhGlH9Wx7eA70mGXQFjmEHLfWDGPm trBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744892692; x=1745497492; 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=UzbGeZkhDryHTbPMrJ1IX4plytmQ+QFf0x8BSly6zWo=; b=cy3G/Eoq++ZrYxNgBJEzubwDmljNMF8cQ8x2qZofBxmbhiwhQJvLWt3BUIDjO9TmOX oUoXuccaSZnEBVXcqQ+OX9hPR2a23n8YMtNKhDKSp6pcCB/AsEZbINtTslLHjrbRdaga IxKYXIxkcZhkacG6Qy2QI7jS1KglJtsuvXLXrG3UbKqp8/Rz2B4IFGIe9EKWaPM6sLYg r3ZSVrYDJsRMB4buU7ZL9ifx0bPrOcqcOOqvoEx9j/MrVxbNxcg4W0AnrRck923Mv2Ku fDsDH0CSjWUgU9JIpB80l6NgmggZuYps4+BnwIOvt0H96VeiSDzdYcPDlUm1aOmMTZUc 1h/Q== X-Forwarded-Encrypted: i=1; AJvYcCWmP6UEYUbH8qdX2F/CvjQsMnBdZtnC+srcshm3e8RCz7gT2PVvsZG/q6BTHWLhDWn4MnmKAUy66XmTXA==@lists.infradead.org X-Gm-Message-State: AOJu0YylsBMXYwEY2UQY6yB2iLKM8sPHorPCh1qf73Yp08V7U/jzHPuJ 1BjWEpywqE9T3m88paR6Pkzho0w+bji+we+y+v1GNcJK8Byx3mgSW1tQ4Tjo8to= X-Gm-Gg: ASbGncuC6xIbM7IXDSr0lTr5+B441f+3Jq8WjBfyMV06kdNd4ZnbMfSQE7yK7C8g9w4 I6L3seB5JS7aE6/ZO1u8/+5OQU5knq51wCAJBfdbGn64FYuAdAjKeXbH24bugHdGYXjH/u9QFwA DAmlljBC016yCFAu8ROFGuitehBi5a6n1m5iZhtSKIGtDbQhMM+qNq9SoHg2sXXI2j/LUAZB2M1 Lh1AeaorEpKLz500Mvk7aAQHoBOUY0pH3/6g44+aYGzuTv9dkOhP1KJcYYwig2RHCRHXOgQSptp 14g/Ovn+ajRk5DH199VGmfMBunyXVj+Txi0g6mhBzw== X-Google-Smtp-Source: AGHT+IG6jlQ44pwh9wX1WCDRI6TvuxV3hUxEozeeET2dKmcHLpN+5Bivs6u3n/jRgCZSuvYV8jlCbA== X-Received: by 2002:a17:902:f642:b0:224:26fd:82e5 with SMTP id d9443c01a7336-22c359a248emr91338345ad.48.1744892692486; Thu, 17 Apr 2025 05:24:52 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c3ee1a78dsm18489415ad.253.2025.04.17.05.24.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 05:24:51 -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 v5 06/13] riscv: misaligned: use on_each_cpu() for scalar misaligned access probing Date: Thu, 17 Apr 2025 14:19:53 +0200 Message-ID: <20250417122337.547969-7-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250417122337.547969-1-cleger@rivosinc.com> References: <20250417122337.547969-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_052453_051063_37246891 X-CRM114-Status: GOOD ( 11.55 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org 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 058a69c30181..fbac0cf1fd30 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -610,6 +610,10 @@ bool __init check_vector_unaligned_access_emulated_all_cpus(void) { int cpu; + /* + * 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) @@ -630,7 +634,7 @@ bool __init 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); @@ -671,7 +675,7 @@ bool __init 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 Thu Apr 17 12:19:54 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: 14055478 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 24CB2C369C2 for ; Thu, 17 Apr 2025 12:36:17 +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=7XjvIu6Yg7HNgTkibli/AwuCFkCQeGipgDuWhS4Ah6E=; b=srgdKyBsFdI6eE MMTeQVGdjkr/5lBYhAfpzmmxyi80y8dc1TbYPNMrKV/d2EbBkfgSUbOErP+H0EqzdCLFEF5fPd9Nd shD8rviph3ORgKjCntUatKHPWtO7oVKgl4wDtaUMM66IR57SNbAYtUipqZQ7QIKgXqS1Aeqv4+hY6 /agUn/ocpH+POHYkpZzLDd7gNqaoXQioMyBYnUGKY/6wIMbSuXy/mnnrzzBltO3zxOxThyQCCSNyy 27qhNW/uuWw7b/9wx5ZAINwDpcVyRMsAv8gC6p8uV6ldYJT8yEI3QsQWsroIjmlQeAw/wuqpvw9P+ N5gFd5EJVfWxdiUK3cig==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OTU-0000000Cz8n-2ChP; Thu, 17 Apr 2025 12:36:12 +0000 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OIf-0000000CvhG-2pEA for linux-riscv@lists.infradead.org; Thu, 17 Apr 2025 12:25:02 +0000 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-2240b4de12bso10097615ad.2 for ; Thu, 17 Apr 2025 05:25:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1744892701; x=1745497501; 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=nIScjDpjhLjkf06YMmBlHqg/pe/+cSuNoY3aF822M2E=; b=e3IUqv1NA+u8d3mSgCs5I9e0TNsDjDuTPkWzWYpZdJSZRJTRcBbwQ6R+SWW8odXac/ eIvTaFNa4+csekPDvxDUaN0rJthdy2NXVbg9Qjiiy2Hm235ZwVOG222/T0hY6KgpJHXB msz4Uc6M6fqaTXo0Ulc6xUPMJiHB9HioQj94X2o6e+2UqT5i3D3dhGcfYzvTuQ2SIOBo i39YGUK3Nyx7fnVjjgtgtdd4gl69TevXmzZks3TFuGaGM+pFYlSZ09iX9VCOKXVXmPyy Uw9WgqHvZL5uKLXFo+fu43pYRZb2Mmzkpw19DyBEdhn05CiL47W0jjd7wnGy8Y+zyfPe NwpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744892701; x=1745497501; 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=nIScjDpjhLjkf06YMmBlHqg/pe/+cSuNoY3aF822M2E=; b=bAt5WOiloWZ55EN65Pzy5iJON9LGRUZCpyJUGhlQRKqW5U72dHu/P0Kqcq0eHm31OF iRmSPkDkfTrrdVigaH0p0UzzSkVdBfr4/m6AqeTFh1ilBzOpUV4pyBpFyeyJo9nIdoAq iq2TP68+0ofBX9WdKIT+n6ZgPEWFYiUrJd4s5vfZLuQ6na3Rr4vlMwdztvnbheqgOkIY 6l3By6JTKMPPx7mBFKMPjjSWxELVqhRKj58uP0KAyaIFMMSKPdaFNDPlaejWF9euMIWy SnGtAUKf2v0i2KO5UcvKDoFUF7BJ6kTM8zQDU25qSMCpurSjksiYQ0SGEvWy20jt9/G4 InBA== X-Forwarded-Encrypted: i=1; AJvYcCUBZDIiDvIwhdJYmzZjGbkAnlfUf6YkfE1S0TVi6Y+A219CWnhc63UViDG0lYU2YMvH99Hu4I8bygpDHA==@lists.infradead.org X-Gm-Message-State: AOJu0YxC6jbaKPwfybz30HWigwQCopuwPILLdozyBlLT3KgJ44qOPqh9 Ou3iZOnvkJvSW3ZH6Gx1izORaOEjtHLGYZseEtkgRYzwsHtOIahh5yv4torhmoM= X-Gm-Gg: ASbGnctRiXyq1HzPO0/W7+WgVKn8OhQJv5GiZzsN+uOfbswWMgY14us+7drx+XoBDoS Xrj4i4LrOMJu5kiaS0SBq6lhHWEAI/poxQ/0oOqDhLLp4NFpgwBob5Ji+VW4h6e3KETKTRxw1AB gL/f61C3cb9srf5zFrtLfhsnHFeis0yIR6h9trgX1OftkJ5y7oX7iYBc1+lijGk7CLuILkbyJBc ym6X7hDCIflX0/x+UHny15tGJXeRiuDrrVaL7dRcNfSEyfMdwVxLJxLH1wZ9IOHEj4vRqDn8YE4 KWKEOySP63nSbH6C6ygrl8FMo2MfrvLnBv1sOj/PtA== X-Google-Smtp-Source: AGHT+IF+QdSHgucK282rG6JIZxJMqqmRWlCOO1zcFo/iz9JeHV9jdYKxWAUM/FMJsou8iVRkgl5odw== X-Received: by 2002:a17:902:d48b:b0:22c:36d1:7a49 with SMTP id d9443c01a7336-22c36d17c11mr92045175ad.53.1744892701180; Thu, 17 Apr 2025 05:25:01 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c3ee1a78dsm18489415ad.253.2025.04.17.05.24.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 05:25:00 -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 v5 07/13] riscv: misaligned: use correct CONFIG_ ifdef for misaligned_access_speed Date: Thu, 17 Apr 2025 14:19:54 +0200 Message-ID: <20250417122337.547969-8-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250417122337.547969-1-cleger@rivosinc.com> References: <20250417122337.547969-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_052501_709986_EE4D6289 X-CRM114-Status: UNSURE ( 9.74 ) 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 fbac0cf1fd30..c99d3c05f356 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 Thu Apr 17 12:19:55 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: 14055479 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 D5162C369CF for ; Thu, 17 Apr 2025 12:36:18 +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=SkDgcK6EEJyxvPg4gAbJD7CTpf6/BrPt4+43F8+CbL0=; b=XsndnWNwvJihvD +BMy2wygW6P9fIif5f15JhQEcxxHShQGn3k4Vv5DlDAN6dtPNWEoSZyJsbZoGZdsnv6bkUzWHut8V vYRmJXjQy4B8Zis7H+R8sqUT7OuybL3fGK79mhA7yzmuRL0QQRvu4E2Qp95K/npH/AbA/TRW1UUEM JjcetIb8hrEsdu6DM3vZIdbHe8fPcjNidrKzClJqNUqdO2pJ0XCN5VsU6/JaKFFFAD2L1dgmhjOUU MwKAk+0D9z36pZ9Uo1WXu0FoUz3b58jjBETIf8L098qKSd9CNBDaNkZpikx4+VUfsQGdJHILBb6qj xS4I6SuWirrJMRuTEjvA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OTV-0000000CzAI-3668; Thu, 17 Apr 2025 12:36:13 +0000 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OIo-0000000Cvle-1yMS for linux-riscv@lists.infradead.org; Thu, 17 Apr 2025 12:25:11 +0000 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-2240b4de12bso10099615ad.2 for ; Thu, 17 Apr 2025 05:25:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1744892710; x=1745497510; 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=QPTklWUDdxW6D5Ost9jmiUOVbTQmyFTBQdSARUhAxLU=; b=vkyC4GpEovjoZx8wJ3GceT/kRvk13Sy3jlbvm3J8vMUBrxn2X4KnfC2731CsRCYh7C xc6ZAgnwYqYlaFeCI6mnpITAQQyiTma0WLypiF5zBUN+4k+tzVImPh/D043AxH2qc5PS l3bsip5kXTnh/221581DznZTElhhRQrcW/bPr6rVWACjSwhkXelET8yJVQYqX9YsIdIQ C5y+cbzRG4BO38R3MsgkT3FSu3wbk3RxzyMpIb3hV7HrNOdayYm9Cijxf/k+fdN4JBZE iU6/GTzR00KNYUzwSb3SCcp1BFuyVbw3tPhZxsv4yCyBhZ1u26Ypc35aG/tGd4aiW7Hv MdSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744892710; x=1745497510; 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=QPTklWUDdxW6D5Ost9jmiUOVbTQmyFTBQdSARUhAxLU=; b=sjh5+cYZZcr3lDdIzqWs9ropudEK1eDB6Qt4tSnmIGa705RyiJYfrMRJHq3k6XRnvr tPByUx2hbMqWNOlplWq1ZgfLj8vKRVxJu+iOnfmSZkKrSS2pG9pzG5S+ss+ouKq2EyHu EJC0hnWLMclc+fE0nOkkP0weF5WuvitBmg+O3JGkmLpQL/NhjiQ5C8BSLGUnvdcc4AOZ NojnJvtNGEKDd5Cpi87sVWBXH9RjIx1IwB7E7HwFCO6QcGqh/FHJGAPSk5x3vp+Ud38g PvF6lSaHgOnmX1BwxWI3+qB0zrQNRins2OaCsKu3DAC4/9+uhhW7KCmoEtEDbnNUKNKP TULQ== X-Forwarded-Encrypted: i=1; AJvYcCWu2Vshv8L/VAtHwRc/DFoLorXGkyx8gwVGiUZZCZKt4hUA/u4/ZIItqZB+KTA+cZTX2EAxdhMqItko7A==@lists.infradead.org X-Gm-Message-State: AOJu0YxVB8iLqakz70cXfbdC9rgcBgt6v3NhJRVoVXqCFTvIWeL3sT1y UYkz+jhRfgjEGT0yYhz5sldAlLu24YCG/r0erSVlQn9xfpvJGna9YlDpJ+N7jxs= X-Gm-Gg: ASbGncvMalbnAkgPs4pvsJJuT041yMoB0rkQLFyQYOoO8CU0RBCfJCbGZnVpMWbQDQJ Tp8Co31GJNhuKx8/tJq3SCh20fH1VuwzU5EdAbFQT1FElM0Me6lpx6Su3GwCs6aop4/uA0EhAuG UrSIHqXTHL1Y47XO5DouTHr0qn+fEYu7MAaw4oVoq6pdkjZqTz7Slv9/2vg1+SG6fzuN7XMHyZi KZ3KXZUJqpBcv5OqL1anoAp/IPMHjRZEfcdwGchYKNtfoQndTmWuMhL1VAH6VxGBXvhETqZ92Ya s0fA4ixna0n4hyEdRI190hE8+UGAZe1559N+FV0sVw== X-Google-Smtp-Source: AGHT+IFHVZ6ZCfLmCo/4Wa4FBs9EaC8NbnVck/zV+hCmYDXn9aie+ex4Lrhj5kJpm3i3DZVuvfUSqQ== X-Received: by 2002:a17:903:2a85:b0:229:1717:8812 with SMTP id d9443c01a7336-22c357b1125mr88299155ad.0.1744892709956; Thu, 17 Apr 2025 05:25:09 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c3ee1a78dsm18489415ad.253.2025.04.17.05.25.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 05:25: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 v5 08/13] riscv: misaligned: move emulated access uniformity check in a function Date: Thu, 17 Apr 2025 14:19:55 +0200 Message-ID: <20250417122337.547969-9-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250417122337.547969-1-cleger@rivosinc.com> References: <20250417122337.547969-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_052510_506472_BCB36BE7 X-CRM114-Status: GOOD ( 11.12 ) 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 c99d3c05f356..a0007552e7a5 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -666,10 +666,20 @@ static int cpu_online_check_unaligned_access_emulated(unsigned int cpu) return 0; } -bool __init 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 __init check_unaligned_access_emulated_all_cpus(void) +{ /* * We can only support PR_UNALIGN controls if all CPUs have misaligned * accesses emulated since tasks requesting such control can run on any @@ -677,10 +687,8 @@ bool __init check_unaligned_access_emulated_all_cpus(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 Thu Apr 17 12:19:56 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: 14055480 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 E424FC369C2 for ; Thu, 17 Apr 2025 12:36:20 +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=N5ONG1Y0HiV1HxniUHBsyK0Nybts+g/LZqZZQboIUgM=; b=ZmYVG05qKeerOM AuBtPEavuDGfv7WVfgUBzjkoEeDi5xDC76Ftr/+PXc0QBOdSa2CfGZQtJYeA0geqaqQI9K12ys4Jd wP2ZAfkEvg1ZqjHA4RVGQgeR2qpf7kr9iv520hjaRsM8bxyTTzFOey9xJOd7npTfLe1OBOzrODnYf FP1U2eXEA+zOezRNbuuH/caSSqde0acypGDy042YB3UB8DlU94hKtWMoxcE7XWdSZ2l0pcH2SZlX1 LYFS8bALoZitdhfFH91uFui5oBb4uMvHDLWPdWK8r5Pn6M73Z0Gub63Ojg2fhZYecn3WqCiKzUpgS 02WhO5roMaQynT4ELdaw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OTY-0000000CzF2-0ut1; Thu, 17 Apr 2025 12:36:16 +0000 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OIx-0000000Cvof-2H1A for linux-riscv@lists.infradead.org; Thu, 17 Apr 2025 12:25:20 +0000 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-22c33ac23edso7575375ad.0 for ; Thu, 17 Apr 2025 05:25:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1744892718; x=1745497518; 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=QZnuSlMP6ZuwANzL9lETdaARYZp01YtNV9fLw8GSKUw=; b=YXZl9uM/PkAL0ltnjfMfVnBoLzbgP0HsQOBJsLnPO0bJ2cFYx5ZK46h9Cj1KcLsCEa cJ/KjN4lKAuSQKhiRlaPLZauiP0LiZQ1A/qyQ8806AqPw1LLdHxCMDGBTgtUbFEpWS4/ ljqLSPKbBRYHiZvXfkwbNZVhODG380xNchpACvcVF8hCBVfrnkB33P6CeptjcR2LfFj2 9oyQKhctrzMVgjPaOBfF9K0251wabCp9aGlbwAvKwFOi3EmlqcpMO5CzahG35LtPQ9tZ 6M2vpVHWK5R9ekR3pCv7t9ae8VKBvmyobtUtVs+AQhyYgm24BkWTD1FMKLF2LS+Im9MH r3mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744892718; x=1745497518; 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=QZnuSlMP6ZuwANzL9lETdaARYZp01YtNV9fLw8GSKUw=; b=mQiNcghSEl8Sz1NtnY+pSAdxzM4dDsCGaQilYqZ2hAzYlEPZGZJOZRafolJiNkIB/S WITL9+5tPocdKCF960PWb3B1+t41zeabaaON+sUj8d6rgcpen/Ndob2y3s+oPYUMPOuG oHI8EoRix/SjxYNKsz2HKG+24MKs8imKhFeH0Oi8THW6JVLMPbKue3Wn9DoO5glvFSEo 4KzPPAvueCUvZrYJOhEJqrIJ2oA5H5RpJmfdSDllpahYx6OTLfPb6UwuoRmjnPsufO2q wSj4G5oN8C2005vH81uUZ8lGfQfwOB8+lxVbgNsazv0DDjXe5up34CcyLymqT8Oa/sHI Ad+A== X-Forwarded-Encrypted: i=1; AJvYcCVEzgNiK2CD9q/l/lFBVu44NLNIAiLcPhVtFzvXsin4h94bXaBPv76bd2xrbjw96ZTIQU/76B9yNL90+Q==@lists.infradead.org X-Gm-Message-State: AOJu0YzPt602QKDOeyfLYjywgu0ekoxtMit80l8bzJfbxJULvuDnS237 wOR7TOQum761lGaSB2ZeCtk5jbiLfyMIgLRy/oJG5tha/p0iENTYW/1Iv39l7+A= X-Gm-Gg: ASbGncvqrGmPlnn1SP8WybKsq2wLF85QVU2VyP7QOUnB8Iu9xAZZMbe9dWw/IjXkNVH qIBYfOEvSSnrgXiP4BJSwGgewTllhsTsRbI1BrVo+dizPIYAEPynVcTySaA0/HOe9CyqsEl9FGC qekted5p6QTx8lDdWudURh/xLFAP8ae/U+Cne0n3d8NhaZIgK9ZOGeR5o60Z0hXtUDMDuvis5l9 kX/AT1T1UNvltAImd337SuKGyFtsfqxXrDig5NeVJwOB7Mze8H8kcgZ0nGCya3ntkeXiRgWXOq9 Y0za4scj/ZFv+l4kGckMc8CNhyhQlirrTvihe3c+ayGxoEExzcVc X-Google-Smtp-Source: AGHT+IFn+UkDwIOY/e3sKBsC4N9k8AEuCmWtLw7UPdTMPKcDNDFZ5/adGOe7oxZT/yFghuiQ5DQrlA== X-Received: by 2002:a17:902:e808:b0:216:2bd7:1c2f with SMTP id d9443c01a7336-22c358db9abmr72649025ad.18.1744892718633; Thu, 17 Apr 2025 05:25:18 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c3ee1a78dsm18489415ad.253.2025.04.17.05.25.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 05:25: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 v5 09/13] riscv: misaligned: add a function to check misalign trap delegability Date: Thu, 17 Apr 2025 14:19:56 +0200 Message-ID: <20250417122337.547969-10-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250417122337.547969-1-cleger@rivosinc.com> References: <20250417122337.547969-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_052519_581866_ED9B9E49 X-CRM114-Status: GOOD ( 11.16 ) 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 dbe5970d4fe6..3a87f612035c 100644 --- a/arch/riscv/include/asm/cpufeature.h +++ b/arch/riscv/include/asm/cpufeature.h @@ -72,12 +72,17 @@ int cpu_online_unaligned_access_init(unsigned int cpu); #if defined(CONFIG_RISCV_SCALAR_MISALIGNED) void unaligned_emulation_finish(void); bool unaligned_ctl_available(void); +bool misaligned_traps_can_delegate(void); DECLARE_PER_CPU(long, misaligned_access_speed); #else static inline bool unaligned_ctl_available(void) { return false; } +static inline bool misaligned_traps_can_delegate(void) +{ + return false; +} #endif bool __init check_vector_unaligned_access_emulated_all_cpus(void); diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps_misaligned.c index a0007552e7a5..7ff1e21f619e 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -709,10 +709,10 @@ static int cpu_online_check_unaligned_access_emulated(unsigned int cpu) } #endif -#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) && @@ -748,6 +748,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) @@ -760,3 +761,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 Thu Apr 17 12:19:57 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: 14055481 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 431EDC369B2 for ; Thu, 17 Apr 2025 12:36:23 +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=KbBKF1ETmadXIXbBnRG33rt/DiFmIM7GRAsd1TzD8uQ=; b=x43s9ke+TGS2U8 b7wc6HGlstjCUA3y4jODF/2s+q/vuwBL6Ap5kvoCy3kK+StTOefMwSUh7zJc6BUm9m4FqUk+HRlr6 qzJCQwqE096zZ0jmmQoxJX/Rtvtfsf8RxNfWJM2x+nZAz0sS2vJeolaV7DSWvZxPPyzm2CEyiqzXF o+Tscmv1aP2/aom77UKoDKyYf/2Dg93mq5MViROH3s15bQCX+GjhRxYeu7FJuAIqqc/ZVWKnfsS9N 2a2ZGV8+SQsfbHQy3x15c0MtKNSlt6VMDEGKY+uf619KwCU41g6Sj2sZIOVIivhWMLFc14FFe5jVP oykfZJXd004i95DD8mmw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OTa-0000000CzJC-2JLY; Thu, 17 Apr 2025 12:36:18 +0000 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OJ5-0000000Cvs8-3VZR for linux-riscv@lists.infradead.org; Thu, 17 Apr 2025 12:25:29 +0000 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-227d6b530d8so7156315ad.3 for ; Thu, 17 Apr 2025 05:25:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1744892727; x=1745497527; 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=/KHThPTp9HBECdAqxs4JY6wN99GqOifsmOPr7rqjaok=; b=hpU+U5lwreyO38ryhi10FQ3BWgwOTywqAlaGyXxZmDCRAVQu1aDxvMwGsrxz9QaWL+ eRp4NBc82ZSOz7yO8bDPW8xjgHjTAQ+vOqINUHIsM57L8EnPYM1OqfrE65GH0LWibLeN oBHZKg3fj3Rg8oAv4MR542tjb85knfUMoPEk6MXCZNTScCbnrKfGvhTlMTQ+/DFR+ecY t00BNA7xBhFG//Pgkug/ln1N44E14n2yuoR6lwHGoPko7pKKtxvKk2jRI0rV9p+zos2/ c03foZfk2tg+tmERxM1GCBeXqBng9Pgnpy9Lv5dGPFyAiLq/l7cMEia5vv9b8+busshZ 75gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744892727; x=1745497527; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/KHThPTp9HBECdAqxs4JY6wN99GqOifsmOPr7rqjaok=; b=t8Y4OYkrPZsdC7tinnJKiv6Pf3hUAlxTQCBA5u//bEBuPgVngC18yD+RMRvMtgg98+ wt6adPOKyVsSIRF9eyNEBvhkuo+waPsl7nZsapMFnQndgmnNOs/9QdgTtpUkXBUFN5Bd JaqSOpfq4VJKObeKJz2PY4rpHuCmU8uYi1B5Rvqo6up2ha35xZXfYWKxS3oz2t+DOnfL i3gR0Rjt/9BqejngoWVw2uMNfG1FpaL4X9hBGpQfRYM/yLJ+ooav29995VjFXKB+fffZ yjUeqnNMAny/5IzLtEQQOySdoxqyKDQB4BNnt01gBgdg/NYe6i5njFBFk1nLG7FQ42UR GOAA== X-Forwarded-Encrypted: i=1; AJvYcCXpfvy35isWUCaEwv6SxD3AnEtL6/kfsHjlEbEbONdTbDkAA4tk21zMgD3In0joGqaGokAFBJjZheLX2Q==@lists.infradead.org X-Gm-Message-State: AOJu0YyJoAZXDaIzj80FBuboTPWXercHhcqWd6vdvsM+43In2b/DCyD7 ngrkTeZyCOijqkY/XAED7GBc+6FbR9eQPDiw7Mfy/2r5W0zcfBtvcHcm3kSsVEmyu+OVPiB7zHy 3 X-Gm-Gg: ASbGnctA5K5I0LN0G+xV4o8XQ0RmNkAQag5PiWsHEFW+i9MMPKbA4a6dKGOcFwIJuNS 4UNxwfwiXFzKHD5X5LTObs5Nw0vUmLkazEMNQKuvfBWgR4z0b1v58ANn6bEk+0aODXwq7vTn6/R 30EzlFk8hAv+5lYI/GTiLN2VKYaFLM/whZx4CssqKQeFPb1AnnvCJA5hx55n2pOYMhm/gWMCRmh zwAQaFqyhD3QNfDjXY/08fXuOgBNTWioFay8o0twpHR7IPaO33w5QYTz5lNwGr5zLgNJ1FXzCiM efqhCJXVw/z9hCxjQTUSD1lD2A4ouLJs2B4ph6sYUA== X-Google-Smtp-Source: AGHT+IEoqy/kqoORsS0UV+1ioB/JireEK12cMki3F6JIxzmrV6R0qu0Yn7V200b2nJAkaxmJUugsbg== X-Received: by 2002:a17:903:1b26:b0:224:13a4:d62e with SMTP id d9443c01a7336-22c3597ec4bmr109539965ad.35.1744892727277; Thu, 17 Apr 2025 05:25:27 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c3ee1a78dsm18489415ad.253.2025.04.17.05.25.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 05:25: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 v5 10/13] RISC-V: KVM: add SBI extension init()/deinit() functions Date: Thu, 17 Apr 2025 14:19:57 +0200 Message-ID: <20250417122337.547969-11-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250417122337.547969-1-cleger@rivosinc.com> References: <20250417122337.547969-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_052527_884133_C8CD2A60 X-CRM114-Status: GOOD ( 13.38 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org 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 Thu Apr 17 12:19:58 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: 14055482 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 B2825C369B2 for ; Thu, 17 Apr 2025 12:36:25 +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=jiVBhwEGBdgDnZyT5xoGcbi7gCcwyPZ+F3Y1fDmLo5Y=; b=VgdQv3PJVMnHvG abXEoNx08ibXet5hfdo982R9FbeLm/ktU/mbN5VeSMuLw30OLpaEhBmrX0h+Lzioe4n8HIpTMZ/lC QcMFpVbVQ1DfD9uTeFMedSXGFQD52vGd4zod7nAowhtjoz0J24b5Of99Kojf0kTp9dT/vn0hAjuMh mpRyScHy9EGtw7zgIlPJ/Rp8ZY2QPh36l8QaidcUMKgBc9m+QierRaUG2nB8haADek4774OBRhmkA vrouuaHG2T8RSFds1L8BUM0wxLI8zzOmHVCilB8YqlsZHJ+MP8a76dWzNbUAFAmSwxTPb2pUkAdQK WMDlLHQLDTkBZNEZII5A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OTc-0000000CzN1-0qUP; Thu, 17 Apr 2025 12:36:20 +0000 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OJE-0000000CvvP-24dE for linux-riscv@lists.infradead.org; Thu, 17 Apr 2025 12:25:37 +0000 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-224191d92e4so7414625ad.3 for ; Thu, 17 Apr 2025 05:25:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1744892736; x=1745497536; 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=RIWI5J13lSlmUc75M0Yyv1OmkFoJoZE6o7hXZ4HO9lg=; b=Jo/hI4zECWAuYNmbkzaV9XPTKCG1JPVZ6b42gvfgaznZptVPO3qwGZLWrH/1sr8aaC RcCX+tbLZyErH53xideUZKxX17R5rXLnANYWN7ocF200u/k7nOPZgUVgCs4OtwBjcnUn ND/NOho+bi62V8UK/BKWO9dOMf12xUerj2kp7USzQs6STpDaiBtmQhmwM3BYomAHNJeI iiXZM2hr6e3i8Dldl2fzk3tL2GFFehmqjKg6erfb0vCizyVu81cmLpXkPA9fImK7/vOk LtIjzu3mxMWZT1q2X7MbGmcEQuAWJ+TDonO37EdqZpZHc8ptiEzbL0D0Z/los/56PPJ/ 9HHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744892736; x=1745497536; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RIWI5J13lSlmUc75M0Yyv1OmkFoJoZE6o7hXZ4HO9lg=; b=BOCVrLozb1r2Qw5G7nngSMG9TOQo5rqN+FdPvK1AqhOU4L58Az/M4VZ2Hi2Ie17ocX Or0Mm87m5m43/1csXhVE4IWd+dlIc8OqMRlQaOi5qpV1XZlwKaJh/kJXnMwge999w+9t IcK1+nwDPStsvxozdTHdWGhTqNbMENEnusDHNrDx7KFWk4zP4gngRURjWfJ/CoWA5qHF BVZSc+GG2YokLZC1rzxsig3X9P4w3RgU3PNU8JdulLvdZ98S8EYmbnFXKztZdaoMem2t U/gNHoIbwt0Aito60n6k0oJKii83pNOPlbSPGGwfyDAzaMxYD99QGOZGtbijkRFtXkgZ CtlA== X-Forwarded-Encrypted: i=1; AJvYcCVgbWDdvzAFMw32HKa5mTQ2nxluInPJwYhK4NRUIa/WInz41NL5FVkVFtp6v8qwF5bXbmA3kXtkWyP1xw==@lists.infradead.org X-Gm-Message-State: AOJu0YwJ0Y1LWichYBXP8CHJ8/haoIBI6hWup8pdLMA8dI4iK5x7dJbz Op3pJHpi8zvICmptAinowT6Ug0zeXXm7oKCxTOvMKvQ2Ob32bWNR8FFh2AWeduI= X-Gm-Gg: ASbGncsTE77JVDxib19wlbzMBePVjW8Gl68p5Kel/9yADqfK7gtitSOiifCsexYK6Ue 3fgvDUf5TaqxyvuxJkTa1ChXHggBnqPFseXd3ZkGZ05dRTG/2dIktriONaqTr3TyYpu8Jh9cAr7 m7NtVCnq8piU7qs+BLd41ce8kIK5APC+IufVCxHfUk9JYjiH58FTDV/YXwJtzyvaJNaxu/8cD6o 4rop2xq0+vKoxH5WEbBWjv+PWxRSkH2bCgsyVVrGGe/8R0OFQpLlCp1bf9ZVP0iU9o2pbO2OHL5 VFSfnlaQ77VSci4frlvKzjyes5pvXcAeJq5KXplgow== X-Google-Smtp-Source: AGHT+IH/XOfIZJN1QIMfxSpPHyEBOL2TQ9imzdZAMvoYmfc/2OhjJtEou81N2JqUbXrpk40zrfv2Kw== X-Received: by 2002:a17:903:1905:b0:224:10b9:357a with SMTP id d9443c01a7336-22c359743ffmr95085905ad.32.1744892735913; Thu, 17 Apr 2025 05:25:35 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c3ee1a78dsm18489415ad.253.2025.04.17.05.25.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 05:25:35 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland , Andrew Jones Subject: [PATCH v5 11/13] RISC-V: KVM: add SBI extension reset callback Date: Thu, 17 Apr 2025 14:19:58 +0200 Message-ID: <20250417122337.547969-12-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250417122337.547969-1-cleger@rivosinc.com> References: <20250417122337.547969-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_052536_529120_19F31991 X-CRM114-Status: GOOD ( 17.08 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org 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 0e9c2fab6378..4fa02e082142 100644 --- a/arch/riscv/include/asm/kvm_host.h +++ b/arch/riscv/include/asm/kvm_host.h @@ -407,7 +407,6 @@ void __kvm_riscv_vcpu_power_on(struct kvm_vcpu *vcpu); void kvm_riscv_vcpu_power_on(struct kvm_vcpu *vcpu); bool kvm_riscv_vcpu_stopped(struct kvm_vcpu *vcpu); -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 Thu Apr 17 12:19:59 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: 14055483 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 A4028C369D0 for ; Thu, 17 Apr 2025 12:36: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=wYJrePHe6en6KFWVI6NCO2VyVn1UGmXUxYRRwRK9Vo4=; b=lsbse8zULhgKPb q9HJ16oU/sVM3ycRws5WvM1BVZ42+B95QY05mYX58b/8WdWPm01LZewYLb9jrGgh2XrELNvKXfaIc 1PLsArAxDr3c+0dyN/rFTNOVol4U1zq1onwx32XfXZ+yXwanOArgLl4JpdHWrnkPHSKcstEYxyANP HQiVeoPgyPHNlRUojrejm+z5vnxNIFPx64UpFaGvobIlbTYe56sF6J749ShKt8HgPcUANeNKIGOrj ot53yfFPQZl78uPT+BOaD2OJwo9TQzQlZtKUmoCXnTx38Alyq/x3tkxKk89QhH2D/EWeVNUff5tgb pIMQ5ok/tkVujeksLpTw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OTd-0000000CzPi-3NiQ; Thu, 17 Apr 2025 12:36:21 +0000 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OJN-0000000Cw0O-272W for linux-riscv@lists.infradead.org; Thu, 17 Apr 2025 12:25:47 +0000 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-22401f4d35aso8575275ad.2 for ; Thu, 17 Apr 2025 05:25:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1744892745; x=1745497545; 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=pIsv+titG4x0ovEMDknM6ko4IiiOufEK1Ymj080VPx4=; b=rprm0DDXmzEsYBTVIrdgRMYV7N5lMIQ/oPJPedSIH1Fnpig/Z+HHK2hDHr8NtlL3Bv GqUAVAnT7mN2kF2zE5d/7xjBA2LfWB6xl5cyt9rwKu0+GcrbvSo2V91vd3JngFJXM5mJ A3Bu6WtzTyGSL+rXu0tBED+CAyVlz0YJ9PB+TQE4aBIdpb/1/f4WgWdQTHEmomsEtdiJ Z35TK50ctxVwgiKdg4YHJBQbcT1oXEZClSk5JDhGldAYWV4jOXwl+jdLyyVo7fs/yGnt DG7CA1EhoEPwYQK5Bl7CiFXA1RLsd56s2DbN1mVnZOyyCtH/9KdQij1iRw1Oh9/CNUeB VsqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744892745; x=1745497545; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pIsv+titG4x0ovEMDknM6ko4IiiOufEK1Ymj080VPx4=; b=ImBqaURrxYD/RPHrAjTi/Ek//U0dq821RCZPzkIHT7e+EJOPUirE6FKx7NTN6f1qbm TrU1+u+NZu1M92O1irDBeJIHqG3vaiRlbUDJ98y/TtcGqPOhZDHBWS4dAwWDWcu7eb77 2GTw5KEDJc+MsJ0Txo/QRgYQ+FP80b1yQB65oesZcvZpKrbheXcB8UXyNGKo4uHGGvU6 6Af1kh+iS8A37c/l7LGHmJnDfSOP+qOH4swT1i2ENIa73Wf7KUcocJ9BBr+bUe+PH1RZ KHFbTw1AmtZ25+kGBR+QHbvJEGp6WC+ktIgtQ0K4CKZzl9yalJfbrzWyzjijeKOMXk1b GsPw== X-Forwarded-Encrypted: i=1; AJvYcCW27A8z3yNsNm7ZYi+tI3mSFWbmvSpcmaA6LpTNW+Ilmw5D8QF+b8wzXmzyVYnWy6mxn/XiNwv/tT1oJw==@lists.infradead.org X-Gm-Message-State: AOJu0YxzYvfhG1KbJPNUFkvNEt/vKf0xy2u43u7+DITNS02ndRBRUFXo NLNkpQ+a3H1P3QQuun2OjM5R0crjDbiku0Ien73XOMbNVULD9dEDvqlX0hn2ntI= X-Gm-Gg: ASbGncvjaozSJVDONWGtj/ofWAh0ZEhgemFJp83aGLtrPsuCdj+RegMGG+phP1D3BxN 7zHsMZ2IdaM8U3vX+Y9zaMzshANpXCIHOAPpW+rLzaR5lLWIhcI1g4qYmJ/xF4+Zw5NVNSAjbQp mBVHLoZhSq7sbKSVo0w6DGK2BuL3m18ZpnwDqAu9SiXTNQqd4dH9DezLa728Dgo9JyYnGKIi+U8 r3CeeRMDWq05JiCPmrR8qar6d5/m5hTVQAZ1Ao4khHqYAD9jgWlQE7QyML18w0ObpZ46c0sddCk 8IC4XWqnwBEUgfKGlNIW114MDSEIn78ywHoTLXO8CA== X-Google-Smtp-Source: AGHT+IGDDihX5lWdOzC9ncwrK/tngZ3TXIjrRmj2gDvm4uw4i9VhaLXbViaOi5GeDmwgRF2C0Uq8jg== X-Received: by 2002:a17:902:dac2:b0:21f:4c8b:c4de with SMTP id d9443c01a7336-22c3596dbe6mr73195675ad.42.1744892744869; Thu, 17 Apr 2025 05:25:44 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c3ee1a78dsm18489415ad.253.2025.04.17.05.25.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 05:25:44 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland , Andrew Jones Subject: [PATCH v5 12/13] RISC-V: KVM: add support for FWFT SBI extension Date: Thu, 17 Apr 2025 14:19:59 +0200 Message-ID: <20250417122337.547969-13-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250417122337.547969-1-cleger@rivosinc.com> References: <20250417122337.547969-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_052545_545695_107B1C54 X-CRM114-Status: GOOD ( 24.64 ) 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 4fa02e082142..c3f880763b9a 100644 --- a/arch/riscv/include/asm/kvm_host.h +++ b/arch/riscv/include/asm/kvm_host.h @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -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 5f59fd226cc5..5ba77a3d9f6e 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -204,6 +204,7 @@ enum KVM_RISCV_SBI_EXT_ID { KVM_RISCV_SBI_EXT_DBCN, KVM_RISCV_SBI_EXT_STA, KVM_RISCV_SBI_EXT_SUSP, + KVM_RISCV_SBI_EXT_FWFT, KVM_RISCV_SBI_EXT_MAX, }; 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..b0f66c7bf010 --- /dev/null +++ b/arch/riscv/kvm/vcpu_sbi_fwft.c @@ -0,0 +1,216 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clé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 Thu Apr 17 12:20:00 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: 14055484 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 159C8C369B2 for ; Thu, 17 Apr 2025 12:36: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=wmiDq0g0F8+qP20t6i+Lfl3hOoEJ0q8ciB4nmgpO6uM=; b=rh8sBb6MsSHT8S yWy2dgxZPWuQXG64M1UTYyaA94lV0VE77vAyeMe2XYDrb7WoKFUXKkFaZu5FaO1GYXMqjnPaufu6t hEpeLye6ErfL+80kYgcEVNDi5W0bhAy19xQnJXq7HmwDJn/2VdfiI95LU9F06TpldDK35oCuWSJwG cNy0gSPFPiMRLFsWhs+a+aymAcU9sQ/Fpr2If9gyshFfYKwCebEVjoCJ3rAfFQmalzvJCTFlfy0JZ AmV4jiXwIMynaCSaGxg2i1PUhgujtEOaevv0Z7yDgeVUpevTP3/Xhj9Zfx1rkNeMOmUZ7ILudI74e KB82uLSVY0x32z9R0c0A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OTg-0000000CzVB-2FQF; Thu, 17 Apr 2025 12:36:24 +0000 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OJW-0000000Cw3t-2IxQ for linux-riscv@lists.infradead.org; Thu, 17 Apr 2025 12:25:55 +0000 Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-22423adf751so8205905ad.2 for ; Thu, 17 Apr 2025 05:25:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1744892754; x=1745497554; 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=uTkrNhYYE9bdipW/NOK/ur2NyEJBzn07+HWKIkSphrw=; b=RG4J9+yhr8I1M4UiXbxBXMLur+lcsR53qGOJNZR8sVPJMCJkiF3WmwEAT9uOR1zFpw hycAbWo99q3Ye5gAdgGiiG1pwmCR/yKAJdJzI/mY4qfYtUF8KWwaVEUoNTun8OuUaj6I uKaShJtwNoHN7Ya5twsTh0EzqxiUbEue1ZB8LGY6JA+wCLGRQrUWB93O2IJ+M/AD+6zs DxtHv2cQm1NxMRjXSCnIrpgUkcCLNsGYUlNCd7mvG9yvxhoKUdTzFGlww51F3U7a2BBF VnurMUDjnR2DYkBYCQSUALn9oycvm72lZtHJtUQzm4Tzbi30VkKQ4hL1fHMllkJ3jgQc 05KQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744892754; x=1745497554; 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=uTkrNhYYE9bdipW/NOK/ur2NyEJBzn07+HWKIkSphrw=; b=lskL1+I/Nv4iHFf4XHBur8zRxc4ZlaqseH4Wr2mWGdahljg+fOw2CAwoKqxNfrZioF LJxINDdire9PcCBjkUJEevN24X0SHSS6XhcoJL8d/7/Va/iUe9BvX/TSiwhp4OHzTemW YnytAt76olAf1rlBdPDvD/RHo0aD/UfDPxIGbEqZyiC4UdLowgkmkoddMzmmH+oCwSoG a7rt8LAQZs1LUDdSRbSfbFoGBJI1Li8mD1ub/hZJ8QK8OoGaaVMaexFgWP62Uw6KgcRj P0kAp+HDOuT0aCbyiPknJGQANR94ynMiXMo/rwd+cOiAD2q8AIeQQkzNjzb33K0eN10z XyQA== X-Forwarded-Encrypted: i=1; AJvYcCX0mLljmwuQDchzhUlDc6EE450y+piFxyxPLl4Z+po1JV0dm/YRyOixRxtTGlX4BIICxeM+BT1leVIlzA==@lists.infradead.org X-Gm-Message-State: AOJu0YzyIfzCwNgfr+bWng1zO4IMSMyLaQtKOuybCK1E9GKfoW92/shY UXZRH5wTKBsA8N7qQt4RZVzK6aZy/9Phf6FAh210o3uA5QaVQuFRHoRjEaNVf6E= X-Gm-Gg: ASbGncsGoLBplo1CZV11SE0JmeLeJb2LvwBZT8N+n8bR8Z0jTfBsr7zoXf4nTgpsRWZ NFJr9Pvphywm0JVK85aDczlaBUjZn4R1UfpvOvLSu+vINnhkuI9YoHdWNEpe5THwMheVbvANKLM I0imc/zdn5/3HRRx6anC8LVLyGvwAI6vQdZq0uEJXzNidk+fQuV/xlF7fgWHtbyKTtQkdqHHSBA daBFxkygkaab45Zg0KCZB+AbDvo5pzcGDcpksByZZ4ivfZqxRC47Zmr43kSa5J+Tsat9Xv4G6tY eZbsLm3qy9F89hov8hNLj60wCmdiin7HZueuCXe3nQ== X-Google-Smtp-Source: AGHT+IGDgb05pPnIfmQYcdZnqSyk1iwUEfpKUkpi5EKOyqIovfUBARsBsLViyCfGV2qgdXRRvN3wqQ== X-Received: by 2002:a17:902:e806:b0:223:5e6a:57ab with SMTP id d9443c01a7336-22c3597ee39mr83719155ad.39.1744892753939; Thu, 17 Apr 2025 05:25:53 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c3ee1a78dsm18489415ad.253.2025.04.17.05.25.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 05:25:53 -0700 (PDT) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland , Andrew Jones , Deepak Gupta Subject: [PATCH v5 13/13] RISC-V: KVM: add support for SBI_FWFT_MISALIGNED_DELEG Date: Thu, 17 Apr 2025 14:20:00 +0200 Message-ID: <20250417122337.547969-14-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250417122337.547969-1-cleger@rivosinc.com> References: <20250417122337.547969-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_052554_587926_CB17B3A9 X-CRM114-Status: GOOD ( 12.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 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 b0f66c7bf010..237edaefa267 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 *