From patchwork Mon Feb 10 21:35:34 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: 13969386 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 37DADC02198 for ; Mon, 10 Feb 2025 23:55:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=68479llWz/ULtnvqtYiZBF2/0Dbc4coXL1/kwZVM0dk=; b=rRvLUvxDQIJNdB cUzFmeN1e6JH5eufwuSnA4Qv5EMnMuRgsY4wlZfLgn6668WueNij0qNbEnJFHTk2OI31pJs97Vh9L rp3oOa6mEnbxfktfDqAQOq3B/VQCokke9ozh1TIbyVjJVyMA7xxz6CAM51vOJxZlR3pFbsDjLi5ZM 6oK1++k3tMv8dtJ07l31HEOKORG34mnc4gFq5nKG6uykYlFWJ+CWCh9DSNxWVpOlgM/BlkZoZrSk5 fdpqZiO1sa8dlsNHcQfKvbzG6Jz86IqKYekBwmXvPG7pxUGSZ+u+GTgdKCrmujX1WTLYc7Wjo/ewV T/ZpOFuPIt3Be8t4bF6A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thdd1-00000001u3n-1ED7; Mon, 10 Feb 2025 23:55:51 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbS2-00000001VU6-2uiW for linux-riscv@bombadil.infradead.org; Mon, 10 Feb 2025 21:36:22 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Sender:Reply-To:Content-ID:Content-Description; bh=dNygMxZnETinUIbqht3HdG0xEf8Y/zFmGWQC8EBuXhA=; b=d8bSWsjkMx4HasbwFId/h6NI1Z noQtzwo985I13L3ptEGYI3st64uJpPBHAZToFuT1KNiCluNcZQmu9CqNXCpV7oE/nEYvR9rWVU9Wn sSC0X7C9o5aZeDDdtdD06LiuhBAPbOUP8mcWSxD7MGuA611DrekjvhgWtsCfvY34puCRqChTdDp9g 2pRyj6lFLSL2bPOiY4ARn3M8roT9uqkvZz60TacyV2oSpyZ1c8WBwe5ckUOhV4KjWrA4XKEV+HaWz ghpZ9lXv2A4lzxB72ntQ1PmxcGefUF6p3+9InqDornfOXAVXHWdlMm0Bhcv5+/byMKZlhKfieZc+6 u3Swb27Q==; Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by desiato.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbRp-00000000I9K-1LFT for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:17 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-4361f664af5so54351495e9.1 for ; Mon, 10 Feb 2025 13:36:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223364; x=1739828164; 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=dNygMxZnETinUIbqht3HdG0xEf8Y/zFmGWQC8EBuXhA=; b=IKzwSNkzflXv1EL7YKqdeNvHbC/w2i9dq0AgSnqg9jV5uS8wK84zd496p6P1/EbZJK bhO0j/2V72t7qwlQMGPiLuRxJ3bG5X1VsCyxPgQhP6sgLLrAcPQQy5wNZuoXV4Slf4gi 1liVDgVMTiVDew61N0PKfTEXwBXwi1RZEGAbH8VE0ZT+hVLg0Oq5itawIr2NAN7gxiAy kDQSRYRl5b300OWvmLCLg9ajrJIlw9/+kWunPbYu2z9d//Qzgo8etIa6KOyWWz7WqGQS jCeLsZnihuDLQXPWaxqfhjp0YAu4Nj8lFvt7lCH0RNA3Tc3gD0IJHCAwZiaMkUC7GIgE BbIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223364; x=1739828164; 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=dNygMxZnETinUIbqht3HdG0xEf8Y/zFmGWQC8EBuXhA=; b=WEY/xqgLdE2YFIdy+Y3DqPEotxKoxxapncoQXs4IsAPCd0A3J+O4M4uXADm5LidkKa W0AXhatpivglqBs1szY4TvQ8BecfyPe3ShH/+aSErXv3vxpeVxmvEjYv5uW9YC+MNUPF QDreIS6S0mJO1YJj3iGv6h+Tdvs0oCoMBsO0e6vCOjdl4fi9XASBtfMydzIqXHBCLnAQ 046xMItCjaOU+wCQUk96SkuUSQfwmhtocZI74eepExSouRK5MvnF1zeSMRCi7DNXF/+9 9nQOiUlZFUx6smY8GbL/yBO1WBSEpv2gtri3EUFeqgE/F/s1jqhvQVU1vcez/jlAN4VK ZIDA== X-Forwarded-Encrypted: i=1; AJvYcCVJ1r7occKejTh0HcIJjlw4rYh+M5Fk0+i0OwRkPWwb66WrfE8jMI12wzcZ7PuBFuWQZVKqUUmhujp/Cg==@lists.infradead.org X-Gm-Message-State: AOJu0Yw1wNv4PifdVtGxws0zqQrG5FWnd+1X7MWqISCweqa4xXJiBdC4 rZFiYW+kv5/3jgjAbw4OaPpzlL7Tz4MNueebhH4Oa2K0Z0Zk+fPdHb7zc1jrdyc= X-Gm-Gg: ASbGncuq7j/huJF3uDJVrg8GbQ8qc7CPBOwnHryD94o7T/JAOgEuhurkNRTBOB1agRs Fi+Lv2n8V8cOJJ85Kpyr5YB4AsZ03rK8mmsXP0jv4iyuVu9a7ujW5CzHayCxgeOjJ1545OOpWy5 z+D+jd/gQGiND604T6AfHDEFoM5GBtllP8S3qUdFCqZeh1v7rabfhEPdlpW5HPV1rfOJdVJNj9v V60jV7jLQVUNLvROMSJWQ6clk3PFdmm9hAen+QcoosVixWkdjSXWCcU2a04xBMkN3otOez6JORv csMBa3NoCUuppg5A X-Google-Smtp-Source: AGHT+IEAhlsJGIdKtITdkCqcTf1jglZE/SWwXLDChC0QYiT0cR7GNzwUW0cObTxbcQCBuKABIqPOaA== X-Received: by 2002:a05:600c:1f17:b0:436:e8b4:36e7 with SMTP id 5b1f17b1804b1-43924987efbmr120307725e9.8.1739223364575; Mon, 10 Feb 2025 13:36:04 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:03 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 01/15] riscv: add Firmware Feature (FWFT) SBI extensions definitions Date: Mon, 10 Feb 2025 22:35:34 +0100 Message-ID: <20250210213549.1867704-2-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_213615_270516_A2C72486 X-CRM114-Status: UNSURE ( 9.51 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org The Firmware Features extension (FWFT) was added as part of the SBI 3.0 specification. Add SBI definitions to use this extension. Signed-off-by: Clément Léger Reviewed-by: Samuel Holland Tested-by: Samuel Holland Reviewed-by: Deepak Gupta --- arch/riscv/include/asm/sbi.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index 3d250824178b..d373b5c08039 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 (1 << 30) +#define SBI_FWFT_GLOBAL_FEATURE_BIT (1 << 31) + +#define SBI_FWFT_SET_FLAG_LOCK (1 << 0) + /* SBI spec version fields */ #define SBI_SPEC_VERSION_DEFAULT 0x1 #define SBI_SPEC_VERSION_MAJOR_SHIFT 24 @@ -419,6 +447,11 @@ enum sbi_ext_nacl_feature { #define SBI_ERR_ALREADY_STARTED -7 #define SBI_ERR_ALREADY_STOPPED -8 #define SBI_ERR_NO_SHMEM -9 +#define SBI_ERR_INVALID_STATE -10 +#define SBI_ERR_BAD_RANGE -11 +#define SBI_ERR_TIMEOUT -12 +#define SBI_ERR_IO -13 +#define SBI_ERR_DENIED_LOCKED -14 extern unsigned long sbi_spec_version; struct sbiret { From patchwork Mon Feb 10 21:35:35 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: 13969367 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 A5BCDC021A3 for ; Mon, 10 Feb 2025 21:45:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=abDfJO/p+yOnFtiSPiTzFdNqNsj8QP5wzTVEsb5Cdek=; b=wVs37O+vXIrT+y mc93lqFmUKVoF2Kk9VaSKHIXXLsN7RiaMYQF+JT5pQDUUDsS1hJn2PWHHQ09wXBoFPLja5WfSIEnt tTQdQFgOHjB0j+gGHErS72+kaQazpeyIWvrHWTY8mVrFcY6jw6lw+IEl4QjvrtM1PvFkjnnd8OxMy IUIXbfNaQu7j4dN2OnLND4cDCvnmO73ZpLQwtFkgcZf54PbFg/raDTn4QDUOD9NT9UsZEnxlce0cY b0mqNPfbBUJRSldCzYSABM2yrx/OJ5VijVlxlpdg+9eCxTxMDUyOl4Xd1wabsXwu7ZUKofTphtMkR eugjMVPZLIgSKeTfLLeQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thbax-00000001YJK-1DgG; Mon, 10 Feb 2025 21:45:35 +0000 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbRn-00000001VLE-2qnJ for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:08 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-43946b5920cso8575745e9.1 for ; Mon, 10 Feb 2025 13:36:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223366; x=1739828166; 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=t9JWUPguvJXyATshOaEX8SYplIWPzd3JQCRzjjvJvmU=; b=wgGoD7klAEYdjrepDN/YTGlSkbvyh5Xn62zsH0Rr41ADIrYho0ZGntqEoSK2d6G59m m/pthErX3nrDgYMFsc1MWt6SYCcZjxuFxBqHsZ2RbBUYTYRAgr7A/lzqjknk2d4QPuAX zQ4nGZ4MrI6T3ccOSdfNd7L6mGL9SEU71LIj6qaCSmG3UejjAZAKr5o6BUNkxSlwrFYS J2CpKe1z02/awcRHZp5mUAgRfWCrxWqkETxsLo/CgiFUa+wH5E6uhc/kIdPy3rRfEZoE RugU1RKK1YaTOstiqS+vJhLM9RArV/AY6Sl6X9LwEwcOvqgXCcxFdCzakz7h7z28738r z/Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223366; x=1739828166; 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=t9JWUPguvJXyATshOaEX8SYplIWPzd3JQCRzjjvJvmU=; b=gA43AxNE0KyUYJAyG3dle/vN4JsN8uO4LespsG0wpgrWA/1N0Mls4FyJ7lzRMJXjcD mIxyIH/qhPaA7VtdXni3Gt2W0pFSa9m1JtyzGYd5CM2N1ZSaUmYexP4jKfF0J15ndUW0 qgGgmDXHDMht4HrFy/DuaPX5t+3jX54e5mEifdLwMJzEm2EAumSe5Ol/grpDjc3OpjKw h9adqX9fvxwcL3o+6kYNrdleJ83w5H0EhQl0hYHEruCb0qRaDw2b5ivtlVtQZ3un01v5 lnDDTWdZ8n05RBOyhokOJ4Lw/aJ4AXGx13un90Bdnt6t7VJ1VAT3vVjccGOnF7hSrQ4l 6A3w== X-Forwarded-Encrypted: i=1; AJvYcCV6YKVx79CHx6UMAsY1iM1w/969Yijhbg0EVmtlVp9uM1htuMotIBn1Pa5dZLSKDrZofIQaRb7k4EFSRw==@lists.infradead.org X-Gm-Message-State: AOJu0YwPyjtviJQrHrs07Nmhx8y8FhKYXiMBe/GKJjRYsAP76GGiKXuO htqGDQFwwu95g61FAZ7ZCmUDtz0aoz4I2VRAZUkxEWr7DTkeuLNLiE4cjH0VZq8= X-Gm-Gg: ASbGncuKf3Y4+rV75a/Xyn9dWSnWPYE4xEO2L1xVpheZaG6mccAY1vwQ7+LzDW5tT3b 2MO1nRfdGzEj3iY6po38II+3SSD2FuRuSwOmn/RCM1nJGyQ9pwWWPp1nXAAiY6FPbnW7QzY6ujG ifK40T3e3HjY0LcqXkNqlKdQuzs/Fb4HquXtMOGn3Ts3EosMmJNA5Un16IIzTAHmYfB/q99UEKc arRqfWUfVu/JF80SbHnhiiIA4UGFc2MEz9fSbYPZEFLaF6w32VnSbnaYzkgeR/vBoLKS7e+y7+r Reqq6vAs0AWRdM3V X-Google-Smtp-Source: AGHT+IFCUBo5ZJUEfRAM++W2IWKipAW2usGjFmvIL0zfj471rainYZRPFDdB0RmyHu2I/2e1UVroug== X-Received: by 2002:a05:600c:1d86:b0:439:4499:54de with SMTP id 5b1f17b1804b1-439449955c6mr51321255e9.31.1739223365934; Mon, 10 Feb 2025 13:36:05 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:05 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 02/15] riscv: misaligned: request misaligned exception from SBI Date: Mon, 10 Feb 2025 22:35:35 +0100 Message-ID: <20250210213549.1867704-3-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_133607_722361_B05D11D3 X-CRM114-Status: GOOD ( 17.55 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Now that the kernel can handle misaligned accesses in S-mode, request misaligned access exception delegation from SBI. This uses the FWFT SBI extension defined in SBI version 3.0. Signed-off-by: Clément Léger --- arch/riscv/include/asm/cpufeature.h | 3 +- arch/riscv/kernel/traps_misaligned.c | 96 +++++++++++++++++++++- arch/riscv/kernel/unaligned_access_speed.c | 11 ++- 3 files changed, 105 insertions(+), 5 deletions(-) diff --git a/arch/riscv/include/asm/cpufeature.h b/arch/riscv/include/asm/cpufeature.h index 569140d6e639..ad7d26788e6a 100644 --- a/arch/riscv/include/asm/cpufeature.h +++ b/arch/riscv/include/asm/cpufeature.h @@ -64,8 +64,9 @@ void __init riscv_user_isa_enable(void); _RISCV_ISA_EXT_DATA(_name, _id, _sub_exts, ARRAY_SIZE(_sub_exts), _validate) bool check_unaligned_access_emulated_all_cpus(void); +void unaligned_access_init(void); +int cpu_online_unaligned_access_init(unsigned int cpu); #if defined(CONFIG_RISCV_SCALAR_MISALIGNED) -void check_unaligned_access_emulated(struct work_struct *work __always_unused); void unaligned_emulation_finish(void); bool unaligned_ctl_available(void); DECLARE_PER_CPU(long, misaligned_access_speed); diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps_misaligned.c index 7cc108aed74e..66eef398bad4 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #define INSN_MATCH_LB 0x3 @@ -635,7 +636,7 @@ bool check_vector_unaligned_access_emulated_all_cpus(void) static bool unaligned_ctl __read_mostly; -void check_unaligned_access_emulated(struct work_struct *work __always_unused) +static void check_unaligned_access_emulated(struct work_struct *work __always_unused) { int cpu = smp_processor_id(); long *mas_ptr = per_cpu_ptr(&misaligned_access_speed, cpu); @@ -646,6 +647,13 @@ void check_unaligned_access_emulated(struct work_struct *work __always_unused) __asm__ __volatile__ ( " "REG_L" %[tmp], 1(%[ptr])\n" : [tmp] "=r" (tmp_val) : [ptr] "r" (&tmp_var) : "memory"); +} + +static int cpu_online_check_unaligned_access_emulated(unsigned int cpu) +{ + long *mas_ptr = per_cpu_ptr(&misaligned_access_speed, cpu); + + check_unaligned_access_emulated(NULL); /* * If unaligned_ctl is already set, this means that we detected that all @@ -654,9 +662,10 @@ void check_unaligned_access_emulated(struct work_struct *work __always_unused) */ if (unlikely(unaligned_ctl && (*mas_ptr != RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED))) { pr_crit("CPU misaligned accesses non homogeneous (expected all emulated)\n"); - while (true) - cpu_relax(); + return -EINVAL; } + + return 0; } bool check_unaligned_access_emulated_all_cpus(void) @@ -688,4 +697,85 @@ bool check_unaligned_access_emulated_all_cpus(void) { return false; } +static int cpu_online_check_unaligned_access_emulated(unsigned int cpu) +{ + return 0; +} #endif + +#ifdef CONFIG_RISCV_SBI + +struct misaligned_deleg_req { + atomic_t error; +}; + +static int sbi_request_unaligned_delegation(void) +{ + struct sbiret ret; + + ret = sbi_ecall(SBI_EXT_FWFT, SBI_EXT_FWFT_SET, + SBI_FWFT_MISALIGNED_EXC_DELEG, 1, 0, 0, 0, 0); + + return sbi_err_map_linux_errno(ret.error); +} + +static bool misaligned_traps_delegated; + +static int cpu_online_sbi_unaligned_setup(unsigned int cpu) +{ + if (sbi_request_unaligned_delegation() && misaligned_traps_delegated) { + pr_crit("Misaligned trap delegation non homogeneous (expected delegated)"); + return -EINVAL; + } + + return 0; +} + +static void +cpu_unaligned_sbi_request_delegation(void *arg) +{ + struct misaligned_deleg_req *req = arg; + + if (sbi_request_unaligned_delegation()) + atomic_set(&req->error, 1); +} + +static void unaligned_sbi_request_delegation(void) +{ + struct misaligned_deleg_req req = {.error = ATOMIC_INIT(0)}; + + on_each_cpu(cpu_unaligned_sbi_request_delegation, &req, 1); + if (atomic_read(&req.error) == 0) { + pr_info("SBI misaligned access exception delegation ok\n"); + misaligned_traps_delegated = true; + /* + * Note that we don't have to take any specific action here, if + * the delegation is successful, then + * check_unaligned_access_emulated() will verify that indeed the + * platform traps on misaligned accesses. + */ + } +} + +void unaligned_access_init(void) +{ + if (sbi_probe_extension(SBI_EXT_FWFT) > 0) + unaligned_sbi_request_delegation(); +} +#else +void unaligned_access_init(void) {} + +static int cpu_online_sbi_unaligned_setup(unsigned int cpu __always_unused) +{ + return 0; +} +#endif + +int cpu_online_unaligned_access_init(unsigned int cpu) +{ + int ret = cpu_online_sbi_unaligned_setup(cpu); + if (ret) + return ret; + + return cpu_online_check_unaligned_access_emulated(cpu); +} diff --git a/arch/riscv/kernel/unaligned_access_speed.c b/arch/riscv/kernel/unaligned_access_speed.c index 91f189cf1611..2f3aba073297 100644 --- a/arch/riscv/kernel/unaligned_access_speed.c +++ b/arch/riscv/kernel/unaligned_access_speed.c @@ -188,13 +188,20 @@ arch_initcall_sync(lock_and_set_unaligned_access_static_branch); static int riscv_online_cpu(unsigned int cpu) { + int ret; static struct page *buf; /* We are already set since the last check */ if (per_cpu(misaligned_access_speed, cpu) != RISCV_HWPROBE_MISALIGNED_SCALAR_UNKNOWN) goto exit; - check_unaligned_access_emulated(NULL); + ret = cpu_online_unaligned_access_init(cpu); + if (ret) + return ret; + + if (per_cpu(misaligned_access_speed, cpu) == RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED) + goto exit; + buf = alloc_pages(GFP_KERNEL, MISALIGNED_BUFFER_ORDER); if (!buf) { pr_warn("Allocation failure, not measuring misaligned performance\n"); @@ -403,6 +410,8 @@ static int check_unaligned_access_all_cpus(void) { bool all_cpus_emulated, all_cpus_vec_unsupported; + unaligned_access_init(); + all_cpus_emulated = check_unaligned_access_emulated_all_cpus(); all_cpus_vec_unsupported = check_vector_unaligned_access_emulated_all_cpus(); From patchwork Mon Feb 10 21:35:36 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: 13969369 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 237B5C021A7 for ; Mon, 10 Feb 2025 21:45:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=gmkJ5GpvyWo9mxQ4qKoT8qTqn+0hS/nRVUzkASnjbdk=; b=JwUGjCfI8cTDml aCAj2ViKpp6qegRV/fD1I2slFWvslLW5FUkikEZS0ne47KnR0PoNmlqtxHTss5w0KplZxj/+O/LzS WmYDIQ0YyJFv24bTSCryeMwcBpD/Wms+SsaFg6wL9wnpCPbERIMCBqTpE1428gljCYBXXkjSBF+bR jW5C/Jtn677LehLefZxag/++3qPkuXmD0s7ORzJW0RQ2bT8rPEOtl7MpI+X/bE5YLBV6tTcbQDyJe folyMNkx7emG+hXpX+XPqytZYYeoaqyAL4bQG6IIdML4m8UUEK/mP6Ju4+pAE8zT1B5tBpQCj7bB6 IAg91EwHikoXmH9jAsMw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thbax-00000001YK9-482U; Mon, 10 Feb 2025 21:45:35 +0000 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbRo-00000001VLr-3OLb for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:09 +0000 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-43934d41730so22279725e9.2 for ; Mon, 10 Feb 2025 13:36:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223367; x=1739828167; 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=CqCqeIVEP5nChfGSMKDAeePbRakW6SMa+hWr1pO6tWY=; b=qIntPqeeTlJ6DLE4g+NX9vkey2hlNUavTfecCCPDnBCqtYmtcx1sPgYFckMlZu8y+n 7ZXzIqh0UFRlDSFzSkqICewa6TmY/psTkjHhtkZw3mbxrgjFNLhuxxBZ3zd01BMcFMW5 eT0zPpvL3BPy1UudYBNMBWlL5g7/4O8satZBAnYhvx75oz0Ybx1tVSZdD/YwIFkIwcco 2nvDHQdbI+Q/HLb7zQT0WdXPhn+rLgseK3+FPWdhV5TEa/FRl7qjqqWu+qpBDQAfkOCE NFZqDcMpwvBX/HP2JsdCBF4BvpAHTjrOdV6tkaWA8rO53dtaeVl83ej0ucaHank8rMSg v1ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223367; x=1739828167; 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=CqCqeIVEP5nChfGSMKDAeePbRakW6SMa+hWr1pO6tWY=; b=bEdWXXwYE+pPZi/BODefqFFbaUO2+orEkr52e4AGujqPkBI3lD/MMq58NeIBShOupy Top2iqBG66/6fKQpy4Gssz5cYCR3Wj7mawyJGSYyJRC7tYlvvBPeQEHFuKsXeQ3ZwSW1 wBA7gIuZJ1/UYufK2HDt9dMneuPpFdnR3r2W8dk6LHIdWRE4RTP0eSS4Ik6QqB0Ueqba rlmdbX2dQ7pwbSwPo+Ji0jFIQl8r4OAPLw7ClyDGAUC3SIf8uojT+LoqBiS8tNcGUdj1 lN2WJrXldWegP/O5kD9+JxvhXErCLMkOvKxEUeSZPVHj0843IGs698LFyUriwlque/wH N5Rg== X-Forwarded-Encrypted: i=1; AJvYcCWBiB0I3Qe3f07RYyWq+HdqK9xgw2m/LHILIveEwg8N3PCyq3gWdBQM0h+wGYmOxzhskA4pdOb5o0BWhg==@lists.infradead.org X-Gm-Message-State: AOJu0YzhXFsqZbJVbDK/ASdT1SABUtOrzBj+rPjiIArgHWdMBRhYx3vA 2+6Pv8mh6jkqDwy2VymyVQr3BMizT0YSI5BHMwOR/r1Rq/zrAWChAexVPKjUew0= X-Gm-Gg: ASbGnct8Ormxup3mfXoPSUTkIWnRcgxIkbu9yVp3BBN7yCATzJXj1bQaPDLb+P4l5+b WQRM0KZJI5NvHn6cMerSZO+JnwDe+ajeywDv//fsDJmVe+L9nNCux4WWt5LrP0OQGPnNdnIpNIq HlU1uM0ahFWpO2xkZ4c0iKtYLx1e5a2e2DE8HPHlwiVpwnQKRA0HeS0zcayLOWgFFY79RC3e5Oz KMbjLdRYiKxIf9n2BQxyJxMf7gnN1YFugL2/f9copVVBIik8t8LTQfl0H4QoNBBbwVwtchcjF1e vOobh39TwEGsNBFg X-Google-Smtp-Source: AGHT+IEkB0P3P4E3SAwU66eF3MpeeDcKXRF+Ogw0CMtI0RkNe8VhwZ7hlSjtF2j0kGvBWRjmPkWfgw== X-Received: by 2002:a05:600c:4f05:b0:434:f297:8e78 with SMTP id 5b1f17b1804b1-4392498b6c2mr130517545e9.7.1739223367421; Mon, 10 Feb 2025 13:36:07 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:06 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 03/15] riscv: misaligned: use on_each_cpu() for scalar misaligned access probing Date: Mon, 10 Feb 2025 22:35:36 +0100 Message-ID: <20250210213549.1867704-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_133608_851310_54EC0D68 X-CRM114-Status: GOOD ( 12.26 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org schedule_on_each_cpu() was used without any good reason while documented as very slow. This call was in the boot path, so better use on_each_cpu() for scalar misaligned checking. Vector misaligned check still needs to use schedule_on_each_cpu() since it requires irqs to be enabled but that's less of a problem since this code is ran in a kthread. Add a comment to explicit that. Signed-off-by: Clément Léger --- arch/riscv/kernel/traps_misaligned.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps_misaligned.c index 66eef398bad4..eb9157e3af73 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -616,6 +616,11 @@ bool check_vector_unaligned_access_emulated_all_cpus(void) return false; } + /* + * While being documented as very slow, schedule_on_each_cpu() is used + * since kernel_vector_begin() that is called inside the vector code + * expects irqs to be enabled or it will panic(). + */ schedule_on_each_cpu(check_vector_unaligned_access_emulated); for_each_online_cpu(cpu) @@ -636,7 +641,7 @@ bool check_vector_unaligned_access_emulated_all_cpus(void) static bool unaligned_ctl __read_mostly; -static void check_unaligned_access_emulated(struct work_struct *work __always_unused) +static void check_unaligned_access_emulated(void *arg __always_unused) { int cpu = smp_processor_id(); long *mas_ptr = per_cpu_ptr(&misaligned_access_speed, cpu); @@ -677,7 +682,7 @@ bool check_unaligned_access_emulated_all_cpus(void) * accesses emulated since tasks requesting such control can run on any * CPU. */ - schedule_on_each_cpu(check_unaligned_access_emulated); + on_each_cpu(check_unaligned_access_emulated, NULL, 1); for_each_online_cpu(cpu) if (per_cpu(misaligned_access_speed, cpu) From patchwork Mon Feb 10 21:35:37 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: 13969371 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 A85A5C0219E for ; Mon, 10 Feb 2025 21:45:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Qd6470ii4SIruB3HCfMKsK1doYSmXuHkQS2rQVHuI3Y=; b=shxmAQrdFUo1Qf jCf0F33ugkEjQy6g4xqC5kfDNE1HSMGEl3Ahv4+8tHStO8CZBU7G1D2/kPHVZXIfLH2i8xW7YPb09 SmQbOIbfETpA2R0TOPGyEZvlDY5vAXrGjYjoHgr6lvI2y4Lrqnm4TImPj4P8htcrRU07TVs43Rolu QKSkDGx1TN5kPXOR1O7t7tHurUkrFBGzynBmmo+P77M8zLPV0gA3x7mKg1zz2qQgD1EMiXokctHq5 PPw+yIqERzp1Ptt9SF7hNcSpdrtNO0l7u+6FeWNocTQ8QQosMhKw+ny57BrgLY7OXJu/nByloWZyP uGHS0KklQcJkpw5zsjjg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thbaz-00000001YLW-0pF8; Mon, 10 Feb 2025 21:45:37 +0000 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbRq-00000001VMg-2ZPZ for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:11 +0000 Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-38dcb97e8a3so2878618f8f.3 for ; Mon, 10 Feb 2025 13:36:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223369; x=1739828169; 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=8KnDLY3kffZnCGFmPEexJUKlO/NVt183lUvBn/SEPO0=; b=yckjVFBaDxPvJECVvBCYNXrF+7XfZ8qQoP8JjI9lmxtcpCqkx4anjf0XQEW4+0TkPk fHnGvEQSnnKvaNsHPegOPxMM8xns0drnkfKiDXo0WasF0yHVIgZ15YLwJ+4suKRv8DP6 3Y5aLYX1THLKFzUrfrw4MjU286aara8qAFm4T/z9tf6j9ykrO7O3TE0pPRn+PbK0qICh u0tK869mlb8j7JCPrclwZY5Xs9qLitwUlyn+JKVFGkBpC1GMHURnGBFJf9c9z+hsUvHj qxFOHm8pxGnfwjXHqxRZFsXZrp5ocMI3eBR+Z4MpafyiqyUgsm/ULu6IThNCFtzVlcOL ngHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223369; x=1739828169; 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=8KnDLY3kffZnCGFmPEexJUKlO/NVt183lUvBn/SEPO0=; b=MIQ/2fOkXPS/yXTYbm77zipp/jhlQnesWqrkWRoIGgMWrydO/RWw85NQdxQsExCRif AScmaR2uVW/GjO0prJEXv0P1kYQi0OtXzcN5MRaOz6vc51XwEgBNLzNYbQPSvOGltGP0 3W+Np87ShKPtE5gSMfDtWwAHOQusJqiXIHbipcXqgTtkm0Yq4intKSy/2ohG7x4RbmTN Ic8ym9AiH2dYp4Eiq4OInxYUJIt7LU8EbhPiEB372g3mb3jZQ3hYAfhndrYkWyJO1L5A dyg6MioKgVyeFQjk46zHpzhessVzz5MRe+B1RGk/sAaAlQWbquxlP9j1imvJdF8iTyJC chGQ== X-Forwarded-Encrypted: i=1; AJvYcCWWENLDCtEJ+4kdiiPBsMr0Vl8/FIMyxSbaTBFeKqtKdiPjpQN9gWgbbBfzb7CPt0QXgleW0//06s0WgQ==@lists.infradead.org X-Gm-Message-State: AOJu0YxRo8Kfj7PHb4nvTPOfYsNsxf3b6PHuyres1mWjnFUD1LqroaCF GJYDu3aNjxXHRQQq3Gp/sUJDpL4710twvj698+jmRIeJGBl+JHJK7XVNZJaw0yI= X-Gm-Gg: ASbGncvy/P0Ck+irzTqbqzNmsi1E7bEYBscWi2AHKwci2Wca0gko2Dw/QyAqv3ZZpHx 6XaVGg3U0VLrjwWRDgvq1OtfS+0Nq8c0cc8gA5rtliyXGBY4YJEt0Nr1dr2S0xhkmLyfW3F10fe 8lTdG81NnEuDQ366oSlo1btIc5PS7joV2cOL9eAWDA71XJHYq+86qzx22h/bep2I2uGpMX9to2A C5KsPtHpJX/sJ5RN/EfPGgXPxEIHEhmgBXCOwFPVuuwN8MJi4Trpx/0Ur9nA/xRO+ckedqYPbP4 3hBTsTsWREb6rdpX X-Google-Smtp-Source: AGHT+IEE/P9vsQR8DRZBtCxEbVJartmy037BYwcdFf30+Y++Re0XNH996Xl3DeOOL//RGxNKuAEJ9g== X-Received: by 2002:a05:6000:1562:b0:38d:da11:df3c with SMTP id ffacd0b85a97d-38dda11e134mr7050032f8f.48.1739223368915; Mon, 10 Feb 2025 13:36:08 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:08 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 04/15] riscv: misaligned: use correct CONFIG_ ifdef for misaligned_access_speed Date: Mon, 10 Feb 2025 22:35:37 +0100 Message-ID: <20250210213549.1867704-5-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_133610_649171_4800BC38 X-CRM114-Status: GOOD ( 10.56 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org misaligned_access_speed is defined under CONFIG_RISCV_SCALAR_MISALIGNED but was used under CONFIG_RISCV_PROBE_UNALIGNED_ACCESS. Fix that by using the correct config option. Signed-off-by: Clément Léger --- arch/riscv/kernel/traps_misaligned.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps_misaligned.c index eb9157e3af73..57ded7e74dd8 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -362,7 +362,7 @@ static int handle_scalar_misaligned_load(struct pt_regs *regs) perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, addr); -#ifdef CONFIG_RISCV_PROBE_UNALIGNED_ACCESS +#ifdef CONFIG_RISCV_SCALAR_MISALIGNED *this_cpu_ptr(&misaligned_access_speed) = RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED; #endif From patchwork Mon Feb 10 21:35:38 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: 13969370 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 0C014C021A8 for ; Mon, 10 Feb 2025 21:45:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=QnOzHhz8qaCLkngZELQRgoKXDdy+YDHVIXc0e/H6XNw=; b=UUdR19RY7VS/fC dpnj46lw3x6fSSnLiWYron2ig8c105hT83NwqEVfGzw5dI4TS30uM1NloJCmbRin8y+h4la1yFuT7 6JBkJBbt/WH4lR+oFwP9wcXFEIubY0/9xcPX6DIZG3DVjwhP5VYOPIunP10hqHsNDEMLEcd+hDD9L JN7kYNB1NgHn9l05e1N4fjCkOXyrIHmFlrWrhGdyiVDULf20ZDsDKzLTdl6yEGX9DRJu/kdPfCpqy ITs7S/w7xxIn5CHGJ00IdjETW+7VJRPDcf4h7JtvueIBDTolenk+xd+3DouMgjNC3HO4kenHFKBfz rbLV1G+wxJhCKq1dBVYw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thbaz-00000001YMY-3tZW; Mon, 10 Feb 2025 21:45:37 +0000 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbRr-00000001VNK-31DQ for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:12 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-4394036c0efso10719945e9.2 for ; Mon, 10 Feb 2025 13:36:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223370; x=1739828170; 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=FqqX7ElFp9wIqiTogqx4ZkugO9mCs5sfeq9wlnFties=; b=C92dpNh3YKxBw+2lvVm69nMEZ27S+YrmYuaFmXg+E0UkcSRF8hMFyL/DltJ8GkJqc6 1oy0WwLU425NC2k7Z5m8paKAw7RXn5S6IJc/Re3M5H6L1Y9Ohhwy6iXkT6SNWMh+VK1I vb+E/desjOe7w5R7iFIveunCxMWEsXryQYJn9oF/sCqLe8NRmm6nfjPjasPkpT9aReAx qcBxYHERNnQJrWmmj11aP1Oi6Eh/mc3735ghcvOs7eBUofrHGj/A/c4b3yTrZvkTYCS4 pD4Qp8FQ8uR0nkVXtWztPqMj+x0CYiAXzHHnmheVhqJOMtDcg4qIf8G7y8z+zenM/TAE ZDEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223370; x=1739828170; 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=FqqX7ElFp9wIqiTogqx4ZkugO9mCs5sfeq9wlnFties=; b=rlLY68+iiH8NSm5pv6+fAYNrbKZ6TNzCTc7qfoygJ2Emlkm7mWJHWk48Ch8gtqIXyz pRHbiURSk60KdF6hY54SZE3hb+lE8Kjesv5y+gUQQoR+NMPMd/MzD4qeEdlAydIvkDtZ g5Q9LPPqELrx7KdfQlN7DWu7N/h20eoapcUL8eVHHnzttw/TOVuJr5dp+NGJpA1IDNkR bjYvQJW/pwi2YbeM+LlZzROlDmzQmNuTMd/tO1j3vh0RxY3TJ4e3LYKsCaWw632O+/Ju LTZSSMVXwvo6sliuWs+nb8s7C4MSprfriiBA32c/Hy+fo9Afn+o32ohsY8R1V4/D336L oUNw== X-Forwarded-Encrypted: i=1; AJvYcCUQckG6DqoBpDOtzgMexE+04NKMWb1joHQI9un/sDWrGt1t53rQZEtrRMSDQt63pl+OBnklYQDzxdnNjg==@lists.infradead.org X-Gm-Message-State: AOJu0YzS+aE6g7m0eW1MK/jqx8IwUaIoiRUYkz2VFko1u/MTIEIATp8a PrcYk6JXJgVNhh+xEB6Poof8f8kjlxD17Q67r7CzrDIY5uMVTgnz6bi+UxM6iuE= X-Gm-Gg: ASbGncv+ehiFQZNhjcusacghcfG+EQ20md8Uj1tlVW9oPAK1lz2tFi5M+HL4RGksQdp YAD1fLTt3Qt+Nq3Hv6cj4sf7kAQSn8jNFn+EHim/bXlel5Lt/hVmuoRGZq/Rl0YMXI/pDcVMShI RKtXbgyYPsh9LabfGtsz4CjwjrngvQjWSWShi/fancHkw5w8b4IxITHGjHJZeWaWstLE+Qdfukk DsqSxSBN5qVY/NwvvficQ0VKdz1pnKwjCCKMgL2VYtmLhOugs2QVughYxPc8gEihkVfSwQWBbRd qT0ZFsd/dNBMtCKa X-Google-Smtp-Source: AGHT+IEI+PbDSd+iZWI542rdQ+gdbkP59WcT5edYepFvbp4hadsR2YRTr4AHJJDYEwdy2nUI6Xz3fQ== X-Received: by 2002:a05:600c:8706:b0:439:350a:ab52 with SMTP id 5b1f17b1804b1-439350aacbemr92952605e9.30.1739223370401; Mon, 10 Feb 2025 13:36:10 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:09 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 05/15] riscv: misaligned: move emulated access uniformity check in a function Date: Mon, 10 Feb 2025 22:35:38 +0100 Message-ID: <20250210213549.1867704-6-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_133611_796255_BDF19F40 X-CRM114-Status: GOOD ( 11.88 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Split the code that check for the uniformity of misaligned accesses performance on all cpus from check_unaligned_access_emulated_all_cpus() to its own function which will be used for delegation check. No functional changes intended. Signed-off-by: Clément Léger --- arch/riscv/kernel/traps_misaligned.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps_misaligned.c index 57ded7e74dd8..7d6185deea33 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -673,10 +673,20 @@ static int cpu_online_check_unaligned_access_emulated(unsigned int cpu) return 0; } -bool check_unaligned_access_emulated_all_cpus(void) +static bool all_cpus_unaligned_scalar_access_emulated(void) { int cpu; + for_each_online_cpu(cpu) + if (per_cpu(misaligned_access_speed, cpu) != + RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED) + return false; + + return true; +} + +bool check_unaligned_access_emulated_all_cpus(void) +{ /* * We can only support PR_UNALIGN controls if all CPUs have misaligned * accesses emulated since tasks requesting such control can run on any @@ -684,10 +694,8 @@ bool check_unaligned_access_emulated_all_cpus(void) */ on_each_cpu(check_unaligned_access_emulated, NULL, 1); - for_each_online_cpu(cpu) - if (per_cpu(misaligned_access_speed, cpu) - != RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED) - return false; + if (!all_cpus_unaligned_scalar_access_emulated()) + return false; unaligned_ctl = true; return true; From patchwork Mon Feb 10 21:35:39 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: 13969377 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 08877C021A4 for ; Mon, 10 Feb 2025 22:55:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=FnTB84Cs9NlMXw96htNbIHhJy9cx5+7FdrJDwpWaKgg=; b=xjCvMyuKWFwhCx j9ejE45KWhKcBUGEbfg5BgsUU4z7ERg/rVb0hPKbsLD2Mnc2PycRDl4QWZoh5J7XHWVamS/TkAPfI aD8VFh5C5BdAeZqJ46W9Vcib4DHcipy9gu8ibi4Q+FLnHD7TqQXbr7iVTnRdflVgtm2eVMIZ5bxBn jxuyzMR44+GEuYgzxiKCIu2IjC/rBfVsfAnHYd7qjAtHdiU3tNIAEbERelKkzj9MSuFeVZ2h7IRG2 +FCiV3jhHeYHjmBD942g73U0FHkEizRkNCJTCiAfccY/4TQgOkX/CNARZxqYIW83ulxpW4JcoS1t1 Ie5FJXQNvcGQbLRLtBdw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thcgw-00000001kdz-0TZ6; Mon, 10 Feb 2025 22:55:50 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbS9-00000001VWl-2iCV for linux-riscv@bombadil.infradead.org; Mon, 10 Feb 2025 21:36:29 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Sender:Reply-To:Content-ID:Content-Description; bh=Omq0jMe02v0O4r8y1/1Uapc6yttVgCIGxdH7exDcAxo=; b=aRpmsMnKd0FmpM6kBEMGvL/k85 37yTaLZ9ld7RUz9n15FR7oCoJqUbNV1v14jgWoH9Hg0ReM22q07MOrZFR2mrzFMDlakWj1DlaB9Ic KtpKTfjZ6OJWsGpPSvTg8eCgDrbM5CLCQpMzA0DeNwchZmHb10hI5Cxk9YvHcPuEpxHzQ2cSMmyr6 8mRe35q4MpsC+7iaMeY8q35jjKxZxjF//ByPkfZjpOmbX+knMr2hVTIDmyN9g3FKA2zVaMoQiTwwG Wj4c6WDjRBytWntJYbsT3fvL4ve5Ius1sBuoRmtUlk7F5cyrWUKiNWPnUcW9TycrjYPjgN4dFGErT nl55jzhw==; Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by desiato.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbS0-00000000I9T-111n for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:27 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-43937cf2131so14413215e9.2 for ; Mon, 10 Feb 2025 13:36:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223371; x=1739828171; 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=Omq0jMe02v0O4r8y1/1Uapc6yttVgCIGxdH7exDcAxo=; b=dg58qYlT3aNYwONXAxBBhYfBEj31nVCWyNVEFUKKxZSIPPR4NE5+2C521eW7yrnf63 9L37+0MuuxjtGkfh7vIWFCnXK0L/w+Ulj5nnW+SSnAxT8Qy/rtV2cGZ8xfHs3aXJvo8e mWR5zScQw0TiKNRUCTrXYjTgYk0eST1/sEzmHnR4T8z3kEfEyPROixYjV5B//4e12uKb R6lXPAlmV2DDzKJKxHxTzBkqo1WCWnsUfMScN9EpVlkTADQKovTDOaZVCPg8CiNu6st9 ZvyrcPZmFMBMEXRzo/FrjFTdCZ1UxvzwvGz9fK/63oTwf1xNvj5LO/30/InyLj9YTZRC 0JEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223371; x=1739828171; 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=Omq0jMe02v0O4r8y1/1Uapc6yttVgCIGxdH7exDcAxo=; b=Luj091svsxbrKgkvl3II8J8cK4VgCj7M2+a7Qn2iPazoSD3s+YP+Gr0DyTFSgDwE5n 2GfI52/tmyaRHKdpCMM111zM1SZQeQ9YBK4FcCeg1TzlT4AmTdRGzF80nNVYMT9RFVqT FpftuEUFhIQ5GoXQrYegKFjhXADZC2o7aqdJM3qVWuo0gdrxAdmf+RGKhwos/GGIBAwz z2H5vZVKsbXLgUTMpT+iSvcTyrinz1AmhDUXOV3+mopIrxZ+FHrRiJSCIH/nRC1XwFwQ fPH5hpti7jec+mx6EWAdYt7wfCq0aWDckPz8H8CiUdBZpTWPRPYULWyqY9nzt2DJOQ9T nTXA== X-Forwarded-Encrypted: i=1; AJvYcCWRvmYSD1d/k7UGZMnkMEWA37wlxDCxRXFz+LqQCCq8U14WKfW6Dj7tYJ/M/HOtZRWwRhzrkewDVstATw==@lists.infradead.org X-Gm-Message-State: AOJu0YwxwWlKWa+iW0mGMW7ltJlPM2vB78zUCGjf2vlOITtkmfZm/DsH NZkUch77ECPJ45qYPy0RsP7muFQwKmBA0Akc6pzAS+ZQlMV5MeCgHIoGjyn0T7g= X-Gm-Gg: ASbGnct2XfhYWEiKkUC188YUlgw/BWHzLAh2fg+EhIiLPaTxSPwlF0236aZu0JsaC9k MgBc4BqVUuIUql0WeFqBFq5P78AiBvQmpJCfvHPaWgy8DTi6pHx3eP4uW60z/czP/tWtuc6Py9g Ki/JPzdE0+8pMUbZEYNZ7wTZhibh499xpj5TAx0brJ69Cp3IoHfsS+VD15rvPcxbeyH/f3Mk9gL RKbCApx0SvdRkKo9PMz0O3T565suBqZEbUt10HBVO4j2ORIUjjppz2/2XC6+noXmBHL75OTkhOO aAgD242diIw5y/xk X-Google-Smtp-Source: AGHT+IEW4IwiVYF//YV32GNZdcYc01vxx73uhLVhCiMW8eGAxNPBu731uRffpK0oYRexJJNizE9I8g== X-Received: by 2002:a05:600c:510c:b0:434:a4b3:5ebe with SMTP id 5b1f17b1804b1-4394c847ad4mr11919565e9.24.1739223371617; Mon, 10 Feb 2025 13:36:11 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:11 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 06/15] riscv: misaligned: add a function to check misalign trap delegability Date: Mon, 10 Feb 2025 22:35:39 +0100 Message-ID: <20250210213549.1867704-7-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_213622_574755_8667AB08 X-CRM114-Status: GOOD ( 11.94 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Checking for the delegability of the misaligned access trap is needed for the KVM FWFT extension implementation. Add a function to get the delegability of the misaligned trap exception. Signed-off-by: Clément Léger --- arch/riscv/include/asm/cpufeature.h | 5 +++++ arch/riscv/kernel/traps_misaligned.c | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/arch/riscv/include/asm/cpufeature.h b/arch/riscv/include/asm/cpufeature.h index ad7d26788e6a..8b97cba99fc3 100644 --- a/arch/riscv/include/asm/cpufeature.h +++ b/arch/riscv/include/asm/cpufeature.h @@ -69,12 +69,17 @@ int cpu_online_unaligned_access_init(unsigned int cpu); #if defined(CONFIG_RISCV_SCALAR_MISALIGNED) void unaligned_emulation_finish(void); bool unaligned_ctl_available(void); +bool misaligned_traps_can_delegate(void); DECLARE_PER_CPU(long, misaligned_access_speed); #else static inline bool unaligned_ctl_available(void) { return false; } +static inline bool misaligned_traps_can_delegate(void) +{ + return false; +} #endif bool check_vector_unaligned_access_emulated_all_cpus(void); diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps_misaligned.c index 7d6185deea33..1d523cf96ff0 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -716,6 +716,8 @@ static int cpu_online_check_unaligned_access_emulated(unsigned int cpu) } #endif +static bool misaligned_traps_delegated; + #ifdef CONFIG_RISCV_SBI struct misaligned_deleg_req { @@ -732,8 +734,6 @@ static int sbi_request_unaligned_delegation(void) return sbi_err_map_linux_errno(ret.error); } -static bool misaligned_traps_delegated; - static int cpu_online_sbi_unaligned_setup(unsigned int cpu) { if (sbi_request_unaligned_delegation() && misaligned_traps_delegated) { @@ -782,6 +782,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) @@ -792,3 +793,15 @@ int cpu_online_unaligned_access_init(unsigned int cpu) return cpu_online_check_unaligned_access_emulated(cpu); } + +bool misaligned_traps_can_delegate(void) +{ + /* + * Either we successfully requested misaligned traps delegation for all + * CPUS or the SBI does not implemented FWFT extension but delegated the + * exception by default. + */ + return misaligned_traps_delegated || + all_cpus_unaligned_scalar_access_emulated(); +} +EXPORT_SYMBOL_GPL(misaligned_traps_can_delegate); \ No newline at end of file From patchwork Mon Feb 10 21:35:40 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: 13969372 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 EFD2CC021A6 for ; Mon, 10 Feb 2025 21:45:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=LWyN2HA9Zz/Oi6kWmpTIPB2zuBmS30gp46WURUnSLOs=; b=jfasQ0+VIo02fe Lsr/Ub0CRc5BB8xMXsp0ffXMh1zDJKnBWyhc0Bjq8EmNVy40yrclIDXqLJMDmusestuiQWRdI+GvZ UOeJWP15X63mkYWzGQJQbgoUVkec+wLK3qejOnOAuS43K+iNApAuIvaBRbWxIrVFXMqqZB335ywqy Ir0Xf238Be0l84aQ7X6yQvhJE+D3UkY5VPxRyzBTm+O4mQ/0Dwg45ZvRzVZAw76DPsB9/DHyGj/Hq qaZWioP0epoXH1v9RlznWlQX3UUf7WIDEUiT6zJ9DIsTpLiJx5nVBC7y/jhK0+c27PxMPJ4H4Y8hZ fpAcVP17Ror/ts9VkFWA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thbb1-00000001YPH-3Hv4; Mon, 10 Feb 2025 21:45:39 +0000 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbRu-00000001VPF-2a7e for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:16 +0000 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-43932b9b09aso25636285e9.3 for ; Mon, 10 Feb 2025 13:36:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223373; x=1739828173; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=z9Vwlc46bZsQyt2QxW9m2l1M9vTOam7Mm6HyDDfLEZk=; b=UGVeWfQH1jzgIQjTEzb3/Jn4H08G3wuad16+lnHRDs3KtcpUGMa29MFsKvvjGgAsyZ 1rPdiYWJ0wjJ0P1f8Qmxhf124m63pdM/cBuDxfy0OWBWLezKxOWScb5pzuzPjYJUdfmu pM4pkWEJic26XcrpVKD6Gte7gCg+M1uqZox+sBaP8iYeFJaxuZaHKwhdLSPLH3chOolu DQTzgMYqw0jtRoQ5Zm9R5ibe1oQIQkD3ie9ewfEeMVx8Nc/cTklHuS4P4AqD2NFibxnO i1GL7eMJO4dhhiTY3kMCAQKQ3unMjTfboyfJ3BQL6nAKECc3qHVCh7r0zuW7uC96KsRN kJcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223373; x=1739828173; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=z9Vwlc46bZsQyt2QxW9m2l1M9vTOam7Mm6HyDDfLEZk=; b=UkoxV+vUBnZuBQGRWIigHP1BtOwT/hEd8hxL+rc54TdNfN0l0QhsScKCFYLse5qZny dByfPHY7PgismgNJWUXM58Km0/NnKZHFrqtU5Nht1ZMf7H3ZuAuTm2KRMEiXu6o3sZeU LPH4L2kgJ0+4zocrMUiT48kwXQ+/sJnasYnb2DM1eu+dYHUvrPyCMWXXFTmZQr2Bb174 k2MJa326aPA91l5DmgkyrdOzhlfSZzmcdr7Yw8sUeHEdmdrk5428qsraBGC693szhqKm bmy1rQm1pvTvcaz0ghIa0HRvKRjJ6tjeMrpLFlcGxzBhtG5SI144p3W0GJNBgRST3PD8 ub9A== X-Forwarded-Encrypted: i=1; AJvYcCXtFLB37vkxYztPZG68rDRcxgLQnmn1NGbw/v0Qi0p02AJxiYWFEEsZg1WB0aswylgXLf4gz3RXWwZjkg==@lists.infradead.org X-Gm-Message-State: AOJu0YxMJK4W9f6eVk2PrVA8qWBfZnA8ht26dZAnoURBNzXZNE9iYHIY aWf1ccWyMkFv29xvNMi5DbmFL9VuYUxRWBmVCTp/pEsY9rYeefFReXD906QgIuk= X-Gm-Gg: ASbGncsWz5LcSvKRqLjEYaOE1QOWxnzBPgIk2TzKl3LUwQzsGXsyNleqyCv8RCTMVI+ xgds3FQ2kH596uCRQlGsE8B0lyOmekXqhdt1QnLLgMKRUW6iY8oMg3FwZDtc+3+NPsWzFdFZk6D R7VQGKAh6M0KNEr13e+prsmVcb9S25mQWeiITGuoLwkPzwVJoOBlO2RXw909FPhFRb0cMSCk1Mq 8ve33mb6Zvymq79gU4BAOTb6MYSuBGc19WQ1QgARvPdHDNOXgcsEpeMguCWWG82hDnOSn9Xz3JQ E3TbMp8lfeZANXxW X-Google-Smtp-Source: AGHT+IFIy2UHszvgSyStziow4xh4NgDeIiWhARHb24tahmr62iRvzSTuU8RezdSX8BLezNfYx/izdg== X-Received: by 2002:a05:600c:1da8:b0:431:5c3d:1700 with SMTP id 5b1f17b1804b1-439249a7534mr117351975e9.21.1739223372921; Mon, 10 Feb 2025 13:36:12 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:12 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 07/15] riscv: misaligned: factorize trap handling Date: Mon, 10 Feb 2025 22:35:40 +0100 Message-ID: <20250210213549.1867704-8-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_133614_655906_C1588406 X-CRM114-Status: GOOD ( 10.43 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org misaligned accesses traps are not nmi and should be treated as normal one using irqentry_enter()/exit(). Since both load/store and user/kernel should use almost the same path and that we are going to add some code around that, factorize it. Signed-off-by: Clément Léger --- arch/riscv/kernel/traps.c | 49 ++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c index 8ff8e8b36524..55d9f3450398 100644 --- a/arch/riscv/kernel/traps.c +++ b/arch/riscv/kernel/traps.c @@ -198,47 +198,38 @@ asmlinkage __visible __trap_section void do_trap_insn_illegal(struct pt_regs *re DO_ERROR_INFO(do_trap_load_fault, SIGSEGV, SEGV_ACCERR, "load access fault"); -asmlinkage __visible __trap_section void do_trap_load_misaligned(struct pt_regs *regs) +enum misaligned_access_type { + MISALIGNED_STORE, + MISALIGNED_LOAD, +}; + +static void do_trap_misaligned(struct pt_regs *regs, enum misaligned_access_type type) { - if (user_mode(regs)) { - irqentry_enter_from_user_mode(regs); + irqentry_state_t state = irqentry_enter(regs); + if (type == MISALIGNED_LOAD) { if (handle_misaligned_load(regs)) do_trap_error(regs, SIGBUS, BUS_ADRALN, regs->epc, - "Oops - load address misaligned"); - - irqentry_exit_to_user_mode(regs); + "Oops - load address misaligned"); } else { - irqentry_state_t state = irqentry_nmi_enter(regs); - - if (handle_misaligned_load(regs)) + if (handle_misaligned_store(regs)) do_trap_error(regs, SIGBUS, BUS_ADRALN, regs->epc, - "Oops - load address misaligned"); - - irqentry_nmi_exit(regs, state); + "Oops - store (or AMO) address misaligned"); } + + irqentry_exit(regs, state); } -asmlinkage __visible __trap_section void do_trap_store_misaligned(struct pt_regs *regs) +asmlinkage __visible __trap_section void do_trap_load_misaligned(struct pt_regs *regs) { - if (user_mode(regs)) { - irqentry_enter_from_user_mode(regs); - - if (handle_misaligned_store(regs)) - do_trap_error(regs, SIGBUS, BUS_ADRALN, regs->epc, - "Oops - store (or AMO) address misaligned"); - - irqentry_exit_to_user_mode(regs); - } else { - irqentry_state_t state = irqentry_nmi_enter(regs); - - if (handle_misaligned_store(regs)) - do_trap_error(regs, SIGBUS, BUS_ADRALN, regs->epc, - "Oops - store (or AMO) address misaligned"); + do_trap_misaligned(regs, MISALIGNED_LOAD); +} - irqentry_nmi_exit(regs, state); - } +asmlinkage __visible __trap_section void do_trap_store_misaligned(struct pt_regs *regs) +{ + do_trap_misaligned(regs, MISALIGNED_STORE); } + DO_ERROR_INFO(do_trap_store_fault, SIGSEGV, SEGV_ACCERR, "store (or AMO) access fault"); DO_ERROR_INFO(do_trap_ecall_s, From patchwork Mon Feb 10 21:35:41 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: 13969390 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 85A8FC021A5 for ; Tue, 11 Feb 2025 00:10:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=6OzlSLmEDxmTZGGOWjgBQ1lVLRqdyG9JO3abRrCdyvI=; b=FcyO1Js5+Zbttz qCT7KDa6g0v4Sfnmnz/OrQVK3+9TvMn0hQDqF6jCxQxMB3Xf7TdGxYTzMCuCdv9OZZb3DRJwLQvPw bDYly2PuwWyTJrNPcbL2KB2+dhtT0NNRBWhDAYVN2TQYhpc5KeOIcTUOoDftVYUivCynEDlzqbUNH d9k/2bL9wQQLnX2OV4IsQgf8kngAbSzZgLQnPtoS06TKLShfAqIrcZzcqbzBAI4Uojlx2iECkndyz L0GaBBkmlZimvc0qaQAy6RUp3dPSpYr8xDyvpyUJD4Hv/rangt6GBlLIY49/ZRx/iaQNM7K5UTRn8 SdqFgg0+tZJSK5qOQ/dQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thdrZ-00000001w2t-1LvA; Tue, 11 Feb 2025 00:10:53 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbS9-00000001VWm-2kr1 for linux-riscv@bombadil.infradead.org; Mon, 10 Feb 2025 21:36:29 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Sender:Reply-To:Content-ID:Content-Description; bh=NTEMNxwWUDdJDHTSWR5BaYosnBDapUg7Ev6g031TeV8=; b=Tw26OiWB/v6EZDCoBFcd7+afXN MBJNb5jmNlACGdHtAzXRQxXtSLcG7y2EolLJTBP5u/s4IdbH+R/8DwtIeRIUYrNjFe6kFI3Fupz9U q00YQzF6+ZLPldauviizvE2Ac5vDbyyH1rsDhTvzXFHYUBOpBVy6QoHkLEDGJpge0ho2HM/FDrSsy lgJp+28Twm0h2cJE48LfM3Eh0XTD0YgUsrBLs4nkkTvbAcRYByDm579GWfwnzaTzNUDaRRFTHm49B Ywut5sGAHSDQQbfSZu1ruL/kIrlV06NC1CxKdUFFRHsdaRKX6AgqMi0mryRJUpDaqw7To0xLbGCpk GveB75LA==; Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by desiato.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbS0-00000000I9i-1cV9 for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:27 +0000 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-38dcf8009f0so1647768f8f.2 for ; Mon, 10 Feb 2025 13:36:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223374; x=1739828174; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NTEMNxwWUDdJDHTSWR5BaYosnBDapUg7Ev6g031TeV8=; b=dbu+XeA9MAYnScbolaP3CtUclJ44e2xkxUSdbinjC8eghPDi+x33nOQXL2LNQc7twz +vGh8fE3H+jxLRV0G4K+HhrXeGs2p4WOO+IiochBPUldmKcrJrrtlP9PqFZlDCjcdaZG ryaFDprPzu7K1gfamAElAuCMZuP2t4IWqgVepxExxvlgd9aHsQm6fHzI5tDZML82iCty IbGzQXbeGwrhArmeMjVyin03Db3y3EeeZM0z+zEV4bH3PTTTQK1hk/y+a9y6y4mBIFWb 2pMKOQZp5CdA+r92dZX1SwYO4Ad7e7N1WCiP3EBHbGI2IMifDW15LnhDPrt/Z0cI4OiS 0lxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223374; x=1739828174; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NTEMNxwWUDdJDHTSWR5BaYosnBDapUg7Ev6g031TeV8=; b=ULUPEl6TOonEbP/gvGAJD72xWTSOlQoVP43vAkg7Y0UMdmoEVad6eRGpBctmek3Bmz om370yDlPlkXbxdtT7YFSaayGLKtsb+vQUhNKx/e+s8y6rfNUtc1Elr0ATqg8iZ7yY9Y EZ2fhqeYdsEeuZ7fZTGR0ZhYpjyiPk4ZzQHqE7NjUDprKMzHIrG+ZwnzHij2Vmo0b4N2 BZpeJKxYMj62Syb8z9dyUttOI7ZDMVTN7L6E50LEW4rinRVS9uNIo+LIxzkAYWxSZW5U Il0mNJn06PwAzAj8YVCv/DqIJ7IcXDk4eoL7eKOFRSk/kCkRaL/fIvaxNBDb36McK6Gq psiA== X-Forwarded-Encrypted: i=1; AJvYcCWE6ZKNnPNi8ChWBlzhZd/sMRar2jKTeSb7du1QVssDhHNilzYhAy/Ba6mmfiV/OXNusiVKtonvtMUdZw==@lists.infradead.org X-Gm-Message-State: AOJu0YwITnF8mygWyTcnNErw218rvOg0n04V/Au2N0eISxDBuf9zgI4/ lDIT0xFoEznVuZw4GSfot4zOietZ7GSR3biWJxCe7hwrjC1G6jQPFNSRqk+71Lg= X-Gm-Gg: ASbGncu7/p/GvWgmNPz70YGeGrcNDKxkPTJIcgNW6L66Tk4EnrWRAXhvPUibdD1+bVT tOxr4wfO2vd6rRZ9BjnCrTJfjwMMGV2syiXe1h4epRtUuDQV2WEqgIwtiWPLJe+WDnpRs/iZjUZ gO8aPXlcaiRJeOQQEg9VFWttvnN1/asKJWc/oSbLWSKEeNV+5xUBS6VPlKmlSyhCvnBaadD3m4r 5RDBgZKoy98lomoJ3KSwuKgeyW3VFIKqOVuJCjyNHXJt0fM+7DAoCZ8Et3pdst4udIYeNpmtLbi 4DNddPRCTWt2qefm X-Google-Smtp-Source: AGHT+IFeyF81bBn0bup3UjkgQ031iOdpi9/jVXiALJpdAtVQDgUVud0mvsDq+oa8j9/bPhnXjupeow== X-Received: by 2002:a5d:5552:0:b0:38d:c2d7:b5a1 with SMTP id ffacd0b85a97d-38dc8dddd9amr9308427f8f.19.1739223374260; Mon, 10 Feb 2025 13:36:14 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:13 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 08/15] riscv: misaligned: enable IRQs while handling misaligned accesses Date: Mon, 10 Feb 2025 22:35:41 +0100 Message-ID: <20250210213549.1867704-9-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_213622_550326_C57288D3 X-CRM114-Status: GOOD ( 10.54 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org We can safely reenable IRQs if they were enabled in the previous context. This allows to access user memory that could potentially trigger a page fault. Signed-off-by: Clément Léger --- arch/riscv/kernel/traps.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c index 55d9f3450398..3eecc2addc41 100644 --- a/arch/riscv/kernel/traps.c +++ b/arch/riscv/kernel/traps.c @@ -206,6 +206,11 @@ enum misaligned_access_type { static void do_trap_misaligned(struct pt_regs *regs, enum misaligned_access_type type) { irqentry_state_t state = irqentry_enter(regs); + bool enable_irqs = !regs_irqs_disabled(regs); + + /* Enable interrupts if they were enabled in the interrupted context. */ + if (enable_irqs) + local_irq_enable(); if (type == MISALIGNED_LOAD) { if (handle_misaligned_load(regs)) @@ -217,6 +222,9 @@ static void do_trap_misaligned(struct pt_regs *regs, enum misaligned_access_type "Oops - store (or AMO) address misaligned"); } + if (enable_irqs) + local_irq_disable(); + irqentry_exit(regs, state); } From patchwork Mon Feb 10 21:35:42 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: 13969389 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 870F5C0219E for ; Tue, 11 Feb 2025 00:10:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=0xiVpS1UW8E0H1ZjdVQ4S7NN5YMwSv88ePu0cw8LIBg=; b=1q9AgdSK9Zu2Ta aoexYsk7jl5OlQ8fxsuMdsUrLESZM+1yzuCcxusNArq4nwwyg2nY4gjtBGYGxf/GCyN4Xerr8oeOo AF42ZfLoKHniJxp047w3KT5YVJFz5lzGQvTnBm/4cjWKoB02yUMYi+ZA3hG+U7R/Cj4u25FrU8di5 VwffO+V4iqFD/C20l4zP6yTxLbYuAZEoAnK49jwKsjlCKn4gjaw8qQb4DiBCxAOO6axu4PkOjDkqS G+Uq3xuyn4KZSCOqGP9KZyCnOT6qiH3G0c7h0Tc01wsRNDouORhGO5USyeiH9NV1rRONIhb1wTu+J T2ungW1OcDlYmnqOA36w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thdrX-00000001w0t-32PI; Tue, 11 Feb 2025 00:10:51 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbS9-00000001VWR-05TB for linux-riscv@bombadil.infradead.org; Mon, 10 Feb 2025 21:36:29 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Sender:Reply-To:Content-ID:Content-Description; bh=19zTUPAue8uF+l31WbsHm7jesitbh6CalqtCN/NDhL4=; b=I3dHZYzX2Ii2iyjSG/xNI89Esr SK1fPb7QV9ETwI1oc8/Pmi0e4/3bS3y528yy8/gXxXTeyo4Covi0y+7Fgm62Ka9zXO7+3hnANE34k bcpwVjym+iJ9ZngNu5IXV83UWL7rR9L+dgSwwHXuJ0YRydJysBzKyR9X5xS5RDzuBY8q/R7g3kXrB GgAEDuEGCVAwsXfWCNj87vAhlCyOI2QSQjIwwXySwMrlQiNWFz3we+ty5luvGvqnh2alTnZMbD5f2 geMeZ1cZTTWzfzow40Fdh4tAJ55nY11xfQ+pdbTvQokMcf+euTaaXBc/8ZSIwdKsukE5rYmsq0ysH YKzHc0Gg==; Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by desiato.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbS0-00000000IAf-1ckA for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:24 +0000 Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-38dd93a6f0aso1442428f8f.0 for ; Mon, 10 Feb 2025 13:36:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223375; x=1739828175; 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=19zTUPAue8uF+l31WbsHm7jesitbh6CalqtCN/NDhL4=; b=HNk8DocKMuw/W0xB8dDKanuI3claiKI4wT8fJ2GoPzZ4+vs+NDY4+BPxN9tMD2LarW cWTW9j71YKPJjDRA1ENoIrvboPex5Mnu1znPUyL/NZNox/5aZoxoysiKowhmc2gBp7O3 ZFxFqWoOhtPU9HZyBMDmgyeA8829Mv/0469iSdxsunkAiVCVwzematUXtewMrmUoh3kK fmtkusKS50WoaTnO6Dyzwz4T4WLlhow4zAcIboALRVGUCVflzYroDkuSSUBMaDjYtVdH 5lvyKVELw9h8KYXg3sq3/VENqG/9CEH4rBN3H5A6ClYPY1ZrVEdhEKa5iEcCZZnWWEbj RzCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223375; x=1739828175; 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=19zTUPAue8uF+l31WbsHm7jesitbh6CalqtCN/NDhL4=; b=r8DNK14cBMIaAbQkfv16Orb3fjr9cyr19ZOn9FZLK6pba+1E46t0daIjdxYddUoIiE QWWv30cHK5drUDZzBEzdILpxllTDdxCxzux9tS/r/4ejTrQ2cWvSA4vvzeq+riG2A1kV 9EPHBe15WxXn4Lg7yoXG7wyLxeNOPCEpeFX36WPW7yP6WoSkvRNXKOAIWf0300EPmFW0 eM932al4B4Zbmmy4ItnFB8uVbz+CfWEA0/WREXVKLKHk79A2vrW8tYUwM9+Ue9bmn6bi O+ovLlZn1aDQi3/Q0ANkifs2v7nwj0D6MtQ/bcKKLTMxfDpdqyxSlJ6sJn/h+tQTuTxt eISg== X-Forwarded-Encrypted: i=1; AJvYcCXbD+GTlbyIPd2n/n+R9xejwQcU8dlToAIiTOI5I9571SE+hSwXHILp8mESuFTbEHi6A1weskRrB+bcsw==@lists.infradead.org X-Gm-Message-State: AOJu0YxWcOCA3jASGCB5ITjvqPtrfbMFRwJarNmzWY7kcD8nBWIFU6s6 PO+e2oy1Vm3zAr0TVMknuJJFhbuyD47RZqjc9E/8Gpm5pqyTtcbyOVS8EXBPzy8= X-Gm-Gg: ASbGncsNTyVBQugAkTHLz9QOG6OLqOm+lsZNg4vbYVHitFSGb0tDq7n3QfyiStHYtkM tJZaUd7g8Az9TNk3w2C6pBQ9hlhs3f4VXgGgAxatSPjQPzTtlES/Yyb1Kmz8fQXDcNUcJAC9ukJ 79Q2L+oikTYb2rTd5ITZbx73bihXKfsy0ahohn1WtxiKPQW1MgYy3pCbS3nZC7UA5DabIh1NEY1 P+4RET58GdJIzOtL/oSSkMutj04PGVMTDYmrMlz/acmdf9UdPe08tuMGSLFk+hJjjRjjLcgPe0N 5aogJpl6RiBiRxLO X-Google-Smtp-Source: AGHT+IH8mk3UTikqJq637e5ac58oAB2cwKutxDJwkgs3YdoxbObjCQef1GMenNM8qJokTGgudOE/eQ== X-Received: by 2002:a5d:648d:0:b0:38d:d969:39b0 with SMTP id ffacd0b85a97d-38dd9693afbmr6558028f8f.2.1739223375424; Mon, 10 Feb 2025 13:36:15 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:14 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 09/15] riscv: misaligned: use get_user() instead of __get_user() Date: Mon, 10 Feb 2025 22:35:42 +0100 Message-ID: <20250210213549.1867704-10-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_213622_511213_36A90607 X-CRM114-Status: GOOD ( 12.38 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Now that we can safely handle user memory accesses while in the misaligned access handlers, use get_user() instead of __get_user() to have user memory access checks. Signed-off-by: Clément Léger --- arch/riscv/kernel/traps_misaligned.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps_misaligned.c index 1d523cf96ff0..e6685db58bd1 100644 --- a/arch/riscv/kernel/traps_misaligned.c +++ b/arch/riscv/kernel/traps_misaligned.c @@ -269,7 +269,7 @@ static unsigned long get_f32_rs(unsigned long insn, u8 fp_reg_offset, int __ret; \ \ if (user_mode(regs)) { \ - __ret = __get_user(insn, (type __user *) insn_addr); \ + __ret = get_user(insn, (type __user *) insn_addr); \ } else { \ insn = *(type *)insn_addr; \ __ret = 0; \ From patchwork Mon Feb 10 21:35:43 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: 13969384 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 A6499C021A2 for ; Mon, 10 Feb 2025 23:55:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=AFrB5LQGyaVxOn3sX7p058CScWU4vV/B8l9c75d4MsE=; b=mqrBWj4Cb2XOhS FBtyP6Tq0h3iVczCf9NBcbFyI+fM2b/Ybi0MCE01/9FnbRxZn6s8xPTpvX5oznfbcyGKGakJn1XlN BVsGJt4hceje5t5zJCEBOTJD2bne3ZjSM8KdXapt8JSETUTQMuUq0ZHzym4u1LOYE8Hd0VOvpfRpY ejrzgrL1Ux4hcXRzCteip2gIndhotcdcpS1Z7c73KNwsK2MXNH4ykA+DvZ+t7PbTM1ACAaod6oCyx +T7j/LkNz4G7hV7+uskTDsQ/kK2Xa8LaLiqhALTU5kaFaHgYsgEDhokmI6gLNUMXYHqDvdZwp7Q9N 6uZGoGuXS703nxmbMYPA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thdd0-00000001u3f-0sh4; Mon, 10 Feb 2025 23:55:50 +0000 Received: from mail-wr1-f50.google.com ([209.85.221.50]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbRy-00000001VRi-3QQ3 for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:20 +0000 Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-38dc6d55ebaso2314052f8f.1 for ; Mon, 10 Feb 2025 13:36:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223377; x=1739828177; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wZ6ZtCFLM2HDQCXfIF+4ZGwXAoERFl4mcxOr8+ok9D4=; b=t7q+s4vx1KmOCHWUvc+fsjebneFvruK1UrdYDdjxz9mdK+PhERmW3env7/vv074wo8 u9WZY+cA0Tx1+8npCtaQDaEqxp63qfwgJ/p3yXcT3akAbUGtLzFzLhC/1iTzu1RuNr22 eK6Ghkj+rssSsC+YhimZy2oRju2dhmdhBLs7EegWJgI7vkEPlYubZphm0WuJKkcgcvxi rB1HpU9dbmuowAZhdGErA3eoKJGgcw6DqsXRzYQ66ChPOYWaXHNrSEcIalpYxCs0BSDR bflvsgo71BlkTqGPWK4ctrTOKouK+vchRG/1M+rZxTa7CbXzga4WzX1+rXRwduqJRfzi FsuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223377; x=1739828177; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wZ6ZtCFLM2HDQCXfIF+4ZGwXAoERFl4mcxOr8+ok9D4=; b=b1zV8mFmweD6tnLotRHOaPDLfrLtDsbLWCTkU3cF8CMPBU4K4yJy15Al05t5i6rjXz 6+eMdCBfPKZ+4guaHHxEonpx+5q86ZEURc8VJMRnANxUK7bUx+ZownXZs2EvHLJ2FbXa mfRZt8Bq92T7OxOCnbifwTWIfW7Nq5CLu9Ha9P39T4a+I67Mck0CeJfk/RQdUO+c2O0j u+GFa1qoPJicJCT0uNpBrzHRde6K76ZOlV0UBP5XWC23sccSvglEJ/E/I9OiPbg6r3q0 UCb6u4KomokOUv18r4f5R2jd4KoZOtx5j0pu6DRaevnXiRS+i8oy7CoimllmrC8WRclK iRFQ== X-Forwarded-Encrypted: i=1; AJvYcCVZJuDflupeXyvWulrpkcCQWoOPCkoB3HKiGs1sX5IXXeC834mTFrRiYvkcvxcCmP2FiVSiH8RKXrLBig==@lists.infradead.org X-Gm-Message-State: AOJu0YwWp48H63jxPUv6ccatsj4TqLUt+XgOQsA/PWy3uZRmVA3mdedz GaSLAiOqtWQ6btWSlIuJPa3RpCADQsCgJYPh4dEAahaex/qRYnXKArPg5DJea1g= X-Gm-Gg: ASbGnctcQWyvFDFGfrBxH3FsC6VSfePOV6HSgE2GL820FD5PbSzbIpjslwdp9CRNMph AJQM3al8LgudqY8P3z+xpKfRWgWHsU1mYXQQ4RyesSGfdxyJYC28kVdimQ+Sojltmmc0X6JdMNz fqdEqYlR4CfFKPyNwq3iHMaWn5Q/MgOj7zVhydDc630nBHNV1aCa8gM8x5xMPXXquTywhBq4yTn XVBSO2ktgXKxNjqySxjWRUwiQkM2QfpvU0ptvgVj58usYUK9Nwv2ng011ykg7FBHz6Uy2Ot7f5h zq59ekalbct1bJj7 X-Google-Smtp-Source: AGHT+IHl9RCIMbw69DzrfNCBQKqxgwJyioxKnKZwfd1pCQSELzIBzuIUeEudhJAZ8urQjlYc1+XZZg== X-Received: by 2002:a5d:64c4:0:b0:38d:c0c0:b3da with SMTP id ffacd0b85a97d-38de438e603mr681026f8f.2.1739223376894; Mon, 10 Feb 2025 13:36:16 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:16 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 10/15] Documentation/sysctl: add riscv to unaligned-trap supported archs Date: Mon, 10 Feb 2025 22:35:43 +0100 Message-ID: <20250210213549.1867704-11-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_133618_858334_42F3B86E X-CRM114-Status: GOOD ( 10.72 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org riscv supports the "unaligned-trap" sysctl variable, add it to the list of supported architectures. Signed-off-by: Clément Léger --- Documentation/admin-guide/sysctl/kernel.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/admin-guide/sysctl/kernel.rst b/Documentation/admin-guide/sysctl/kernel.rst index a43b78b4b646..ce3f0dd3666e 100644 --- a/Documentation/admin-guide/sysctl/kernel.rst +++ b/Documentation/admin-guide/sysctl/kernel.rst @@ -1584,8 +1584,8 @@ unaligned-trap On architectures where unaligned accesses cause traps, and where this feature is supported (``CONFIG_SYSCTL_ARCH_UNALIGN_ALLOW``; currently, -``arc``, ``parisc`` and ``loongarch``), controls whether unaligned traps -are caught and emulated (instead of failing). +``arc``, ``parisc``, ``loongarch`` and ``riscv``), controls whether unaligned +traps are caught and emulated (instead of failing). = ======================================================== 0 Do not emulate unaligned accesses. From patchwork Mon Feb 10 21:35:44 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: 13969379 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 A1708C021A5 for ; Mon, 10 Feb 2025 22:55:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=dfEB570GWUP8w/SGhDqRs+4jXhgwCeckMbEaazF9llc=; b=boP2YMGPggr9gb rA2fdc/5244MNgGOOxeH0J0ocSBVQBnfSH1xDEoQIKIuTKztKONPZoY9c02fXptGIDW0WQMLH8OMN lvSHdN7QDb36pvKEgI5C9/ap8rw1Yfrafw/oS71WNXJ0gb5/44U6btz+Rq92IbEGDLPUNx0W2PgQy +oPSEU/uYcxuezyZS0kmdqIwyUaOMerjlOM5iK1UAneDc8Mr9GXZq4JOo1YWRVVyqwa6LmKivokyo 8BSdHyHWlpG24SB3dO9uWV0sXC4IDJTDFt/lcP/GSoZ+u7UjsqdL/tFuGRA9KYFByOOiEXgjyrQHC 5VQq0mQtjUKDi8PGVcbw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thcgx-00000001kgs-4AmS; Mon, 10 Feb 2025 22:55:51 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbSC-00000001VXa-04U8 for linux-riscv@bombadil.infradead.org; Mon, 10 Feb 2025 21:36:32 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Sender:Reply-To:Content-ID:Content-Description; bh=RJSUzdndk4ql30HsE/riyh0SU26bZCnMPM5fCg9Yfhc=; b=Ogtg5B88wTVsbR9rj9iNdXVDRy c3hDdDWVR5+87IXqhrvTKsJ+F/VZryxuya60lkn6cjsxCpRayXzCAG/2CGvK395jvtnGbKlLTDrSn UMyPSy8b+bsIVb//zf8B7r4btklSF584wzD2HNhyXcXcMMIE3KtOJtzjHBlhb47neVObV9fRqNv9h tXBsMOVofMTNR54eu2Dl06MdTcw3cjE4CXkSx4443n4HP+xFBdncrbbVWPeCIDIgqTpNgKePABUd7 +YW5WfE0W5dchu8DJbsPjygCO6GQOy0QCRoeXqbzIZz1y+GAZyZZQFrARAy4MTxl1h208qS9uZOPx JloAJEHQ==; Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by desiato.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbS0-00000000IAo-1cxX for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:30 +0000 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-4368a293339so54242175e9.3 for ; Mon, 10 Feb 2025 13:36:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223378; x=1739828178; 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=RJSUzdndk4ql30HsE/riyh0SU26bZCnMPM5fCg9Yfhc=; b=c12zXq/1PnBbHAdGdMkAHy/P82AniGkImarU6A7xDoh5kV/aSQy2fVU/bOYioAcXco v9Mj5Bfr9xMa5t9LFtyNRn3eImcykpFckdW75PCoy6JXA2bGCSY0Ybdf9iiF7W1UuPl6 zhE0ik5DvgqqVlTXZQzNi2J24/YE1+ksmUWNPCLBrXz42HDDfutnhd+6f0RuGoqaNFSy hTxFvYiXRGwZyKyYBv6olNbW3ejOCUzBvGyb+ippHSXSUEHpZ8OA1dEdao0EIh+tkgmh YbRX9vfqLGH2OFwoe7dQ2S3PD3qzVBjurGiil8DfdubUM6qlG6vkLOZx/a0SHsFCe6Z8 bViw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223378; x=1739828178; 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=RJSUzdndk4ql30HsE/riyh0SU26bZCnMPM5fCg9Yfhc=; b=IC9Nk1mvsUZV+PjdYIPJlQxRPCrjB0VcQppJNfOgVmWVDrGf5OyN4aphd6ANmeGhpp Xy2j6snZkMYR3LfVTzsLOCN2rwFX0eaRospztyQ3hwVDFRa2AmT+MdvMHjiqiaEqTj24 Tnmw7M//whj2hQKDE9mwTkdf11MWj1F7giCACgI6JoCtcuT8t7WItJisO+DmDcWO+Jtc 8zOxeCyGK9n/VMLbOmuCalYnZAgG66VyvMfzUIreAC2aW1cVBTuorXkktAi/9kmuD9lO N1fVl2flO5y5IEDGHKnH9SFABPzrbxHvjwX5BxtAMnTcPr6E3kT2szCJh4XsoP7loJeB pzyg== X-Forwarded-Encrypted: i=1; AJvYcCVrWU0qQdNN5fmT5yrrkln8H479ztLlYDzlHIVBE8xQFbS/pMOwP10hqKsqBg5ltbBNnlGNoBusCp6qlQ==@lists.infradead.org X-Gm-Message-State: AOJu0Yz1lEM3SR4QWtpeIOjpt2wDr8yTCqPjp/nm2UEcPzU6tUR4KV2s 9RqatI4f9g6pI0Ink/0+fsyiaCc5+muDlrQnTgaV49vPyvqZUrajUjZY2FTiGPE= X-Gm-Gg: ASbGncvq7wNvpv9mSVkHJQkUPxDYHB5zeoESIp4+qHl+qIf/p0r3YzItaDeN4Jka0yk S7G4QDKqAUH74WddDfBz8z/DeEOMoEtj2d6vTsHPZKNmS/H30UdNUKGo7exNFmZjsQMPewuwZv2 BDHslnisHYN2yw72p+74a7LRRhVjNByw/QXhNcbP0J4fxNk7mHctcARnLpYyGm+1rspAMo7mJFL H7ts9UtSdwKbUFqGXQl5cF7cmjKRTm/5bIn320qseOcbAYujG8l8cvScgw0M5pL1LQoNQrqT50n /IvzGpd6QhxQQK4J X-Google-Smtp-Source: AGHT+IGMDu/bCX9TXIeNn91Z22iDYfD1fXEmRgjm7bZ5TYj7K7V+RigwdaTSt77F20ZWpcrKQ+IWSQ== X-Received: by 2002:a05:600c:3d07:b0:439:4700:9eb3 with SMTP id 5b1f17b1804b1-43947009ff1mr37100025e9.3.1739223378129; Mon, 10 Feb 2025 13:36:18 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:17 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 11/15] selftests: riscv: add misaligned access testing Date: Mon, 10 Feb 2025 22:35:44 +0100 Message-ID: <20250210213549.1867704-12-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_213623_836398_B4376520 X-CRM114-Status: GOOD ( 19.79 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Now that the kernel can emulate misaligned access and control its behavior, add a selftest for that. This selftest tests all the currently emulated instruction (except for the RV32 compressed ones which are left as a future exercise for a RV32 user). For the FPU instructions, all the FPU registers are tested. Signed-off-by: Clément Léger --- .../selftests/riscv/misaligned/.gitignore | 1 + .../selftests/riscv/misaligned/Makefile | 12 + .../selftests/riscv/misaligned/common.S | 33 +++ .../testing/selftests/riscv/misaligned/fpu.S | 180 +++++++++++++ tools/testing/selftests/riscv/misaligned/gp.S | 103 +++++++ .../selftests/riscv/misaligned/misaligned.c | 254 ++++++++++++++++++ 6 files changed, 583 insertions(+) create mode 100644 tools/testing/selftests/riscv/misaligned/.gitignore create mode 100644 tools/testing/selftests/riscv/misaligned/Makefile create mode 100644 tools/testing/selftests/riscv/misaligned/common.S create mode 100644 tools/testing/selftests/riscv/misaligned/fpu.S create mode 100644 tools/testing/selftests/riscv/misaligned/gp.S create mode 100644 tools/testing/selftests/riscv/misaligned/misaligned.c diff --git a/tools/testing/selftests/riscv/misaligned/.gitignore b/tools/testing/selftests/riscv/misaligned/.gitignore new file mode 100644 index 000000000000..5eff15a1f981 --- /dev/null +++ b/tools/testing/selftests/riscv/misaligned/.gitignore @@ -0,0 +1 @@ +misaligned diff --git a/tools/testing/selftests/riscv/misaligned/Makefile b/tools/testing/selftests/riscv/misaligned/Makefile new file mode 100644 index 000000000000..1aa40110c50d --- /dev/null +++ b/tools/testing/selftests/riscv/misaligned/Makefile @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2021 ARM Limited +# Originally tools/testing/arm64/abi/Makefile + +CFLAGS += -I$(top_srcdir)/tools/include + +TEST_GEN_PROGS := misaligned + +include ../../lib.mk + +$(OUTPUT)/misaligned: misaligned.c fpu.S gp.S + $(CC) -g3 -static -o$@ -march=rv64imafdc $(CFLAGS) $(LDFLAGS) $^ diff --git a/tools/testing/selftests/riscv/misaligned/common.S b/tools/testing/selftests/riscv/misaligned/common.S new file mode 100644 index 000000000000..8fa00035bd5d --- /dev/null +++ b/tools/testing/selftests/riscv/misaligned/common.S @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clément Léger + */ + +.macro lb_sb temp, offset, src, dst + lb \temp, \offset(\src) + sb \temp, \offset(\dst) +.endm + +.macro copy_long_to temp, src, dst + lb_sb \temp, 0, \src, \dst, + lb_sb \temp, 1, \src, \dst, + lb_sb \temp, 2, \src, \dst, + lb_sb \temp, 3, \src, \dst, + lb_sb \temp, 4, \src, \dst, + lb_sb \temp, 5, \src, \dst, + lb_sb \temp, 6, \src, \dst, + lb_sb \temp, 7, \src, \dst, +.endm + +.macro sp_stack_prologue offset + addi sp, sp, -8 + sub sp, sp, \offset +.endm + +.macro sp_stack_epilogue offset + add sp, sp, \offset + addi sp, sp, 8 +.endm diff --git a/tools/testing/selftests/riscv/misaligned/fpu.S b/tools/testing/selftests/riscv/misaligned/fpu.S new file mode 100644 index 000000000000..d008bff58310 --- /dev/null +++ b/tools/testing/selftests/riscv/misaligned/fpu.S @@ -0,0 +1,180 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clément Léger + */ + +#include "common.S" + +#define CASE_ALIGN 4 + +.macro fpu_load_inst fpreg, inst, precision, load_reg +.align CASE_ALIGN + \inst \fpreg, 0(\load_reg) + fmv.\precision fa0, \fpreg + j 2f +.endm + +#define flw(__fpreg) fpu_load_inst __fpreg, flw, s, s1 +#define fld(__fpreg) fpu_load_inst __fpreg, fld, d, s1 +#define c_flw(__fpreg) fpu_load_inst __fpreg, c.flw, s, s1 +#define c_fld(__fpreg) fpu_load_inst __fpreg, c.fld, d, s1 +#define c_fldsp(__fpreg) fpu_load_inst __fpreg, c.fldsp, d, sp + +.macro fpu_store_inst fpreg, inst, precision, store_reg +.align CASE_ALIGN + fmv.\precision \fpreg, fa0 + \inst \fpreg, 0(\store_reg) + j 2f +.endm + +#define fsw(__fpreg) fpu_store_inst __fpreg, fsw, s, s1 +#define fsd(__fpreg) fpu_store_inst __fpreg, fsd, d, s1 +#define c_fsw(__fpreg) fpu_store_inst __fpreg, c.fsw, s, s1 +#define c_fsd(__fpreg) fpu_store_inst __fpreg, c.fsd, d, s1 +#define c_fsdsp(__fpreg) fpu_store_inst __fpreg, c.fsdsp, d, sp + +.macro fp_test_prologue + move s1, a1 + /* + * Compute jump offset to store the correct FP register since we don't + * have indirect FP register access (or at least we don't use this + * extension so that works on all archs) + */ + sll t0, a0, CASE_ALIGN + la t2, 1f + add t0, t0, t2 + jr t0 +.align CASE_ALIGN +1: +.endm + +.macro fp_test_prologue_compressed + /* FP registers for compressed instructions starts from 8 to 16 */ + addi a0, a0, -8 + fp_test_prologue +.endm + +#define fp_test_body_compressed(__inst_func) \ + __inst_func(f8); \ + __inst_func(f9); \ + __inst_func(f10); \ + __inst_func(f11); \ + __inst_func(f12); \ + __inst_func(f13); \ + __inst_func(f14); \ + __inst_func(f15); \ +2: + +#define fp_test_body(__inst_func) \ + __inst_func(f0); \ + __inst_func(f1); \ + __inst_func(f2); \ + __inst_func(f3); \ + __inst_func(f4); \ + __inst_func(f5); \ + __inst_func(f6); \ + __inst_func(f7); \ + __inst_func(f8); \ + __inst_func(f9); \ + __inst_func(f10); \ + __inst_func(f11); \ + __inst_func(f12); \ + __inst_func(f13); \ + __inst_func(f14); \ + __inst_func(f15); \ + __inst_func(f16); \ + __inst_func(f17); \ + __inst_func(f18); \ + __inst_func(f19); \ + __inst_func(f20); \ + __inst_func(f21); \ + __inst_func(f22); \ + __inst_func(f23); \ + __inst_func(f24); \ + __inst_func(f25); \ + __inst_func(f26); \ + __inst_func(f27); \ + __inst_func(f28); \ + __inst_func(f29); \ + __inst_func(f30); \ + __inst_func(f31); \ +2: +.text + +#define __gen_test_inst(__inst, __suffix) \ +.global test_ ## __inst; \ +test_ ## __inst:; \ + fp_test_prologue ## __suffix; \ + fp_test_body ## __suffix(__inst); \ + ret + +#define gen_test_inst_compressed(__inst) \ + .option arch,+c; \ + __gen_test_inst(c_ ## __inst, _compressed) + +#define gen_test_inst(__inst) \ + .balign 16; \ + .option push; \ + .option arch,-c; \ + __gen_test_inst(__inst, ); \ + .option pop + +.macro fp_test_prologue_load_compressed_sp + copy_long_to t0, a1, sp +.endm + +.macro fp_test_epilogue_load_compressed_sp +.endm + +.macro fp_test_prologue_store_compressed_sp +.endm + +.macro fp_test_epilogue_store_compressed_sp + copy_long_to t0, sp, a1 +.endm + +#define gen_inst_compressed_sp(__inst, __type) \ + .global test_c_ ## __inst ## sp; \ + test_c_ ## __inst ## sp:; \ + sp_stack_prologue a2; \ + fp_test_prologue_## __type ## _compressed_sp; \ + fp_test_prologue_compressed; \ + fp_test_body_compressed(c_ ## __inst ## sp); \ + fp_test_epilogue_## __type ## _compressed_sp; \ + sp_stack_epilogue a2; \ + ret + +#define gen_test_load_compressed_sp(__inst) gen_inst_compressed_sp(__inst, load) +#define gen_test_store_compressed_sp(__inst) gen_inst_compressed_sp(__inst, store) + +/* + * float_fsw_reg - Set a FP register from a register containing the value + * a0 = FP register index to be set + * a1 = addr where to store register value + * a2 = address offset + * a3 = value to be store + */ +gen_test_inst(fsw) + +/* + * float_flw_reg - Get a FP register value and return it + * a0 = FP register index to be retrieved + * a1 = addr to load register from + * a2 = address offset + */ +gen_test_inst(flw) + +gen_test_inst(fsd) +#ifdef __riscv_compressed +gen_test_inst_compressed(fsd) +gen_test_store_compressed_sp(fsd) +#endif + +gen_test_inst(fld) +#ifdef __riscv_compressed +gen_test_inst_compressed(fld) +gen_test_load_compressed_sp(fld) +#endif diff --git a/tools/testing/selftests/riscv/misaligned/gp.S b/tools/testing/selftests/riscv/misaligned/gp.S new file mode 100644 index 000000000000..f53f4c6d81dd --- /dev/null +++ b/tools/testing/selftests/riscv/misaligned/gp.S @@ -0,0 +1,103 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clément Léger + */ + +#include "common.S" + +.text + +.macro __gen_test_inst inst, src_reg + \inst a2, 0(\src_reg) + move a0, a2 +.endm + +.macro gen_func_header func_name, rvc + .option arch,\rvc + .global test_\func_name + test_\func_name: +.endm + +.macro gen_test_inst inst + .option push + gen_func_header \inst, -c + __gen_test_inst \inst, a0 + .option pop + ret +.endm + +.macro __gen_test_inst_c name, src_reg + .option push + gen_func_header c_\name, +c + __gen_test_inst c.\name, \src_reg + .option pop + ret +.endm + +.macro gen_test_inst_c name + __gen_test_inst_c \name, a0 +.endm + + +.macro gen_test_inst_load_c_sp name + .option push + gen_func_header c_\name\()sp, +c + sp_stack_prologue a1 + copy_long_to t0, a0, sp + c.ldsp a0, 0(sp) + sp_stack_epilogue a1 + .option pop + ret +.endm + +.macro lb_sp_sb_a0 reg, offset + lb_sb \reg, \offset, sp, a0 +.endm + +.macro gen_test_inst_store_c_sp inst_name + .option push + gen_func_header c_\inst_name\()sp, +c + /* Misalign stack pointer */ + sp_stack_prologue a1 + /* Misalign access */ + c.sdsp a2, 0(sp) + copy_long_to t0, sp, a0 + sp_stack_epilogue a1 + .option pop + ret +.endm + + + /* + * a0 = addr to load from + * a1 = address offset + * a2 = value to be loaded + */ +gen_test_inst lh +gen_test_inst lhu +gen_test_inst lw +gen_test_inst lwu +gen_test_inst ld +#ifdef __riscv_compressed +gen_test_inst_c lw +gen_test_inst_c ld +gen_test_inst_load_c_sp ld +#endif + +/* + * a0 = addr where to store value + * a1 = address offset + * a2 = value to be stored + */ +gen_test_inst sh +gen_test_inst sw +gen_test_inst sd +#ifdef __riscv_compressed +gen_test_inst_c sw +gen_test_inst_c sd +gen_test_inst_store_c_sp sd +#endif + diff --git a/tools/testing/selftests/riscv/misaligned/misaligned.c b/tools/testing/selftests/riscv/misaligned/misaligned.c new file mode 100644 index 000000000000..5caa8c1c50bd --- /dev/null +++ b/tools/testing/selftests/riscv/misaligned/misaligned.c @@ -0,0 +1,254 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clément Léger + */ +#include +#include +#include +#include +#include "../../kselftest_harness.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define stringify(s) __stringify(s) +#define __stringify(s) #s + +#define VAL16 0x1234 +#define VAL32 0xDEADBEEF +#define VAL64 0x45674321D00DF789 + +#define VAL_float 78951.234375 +#define VAL_double 567890.512396965789589290 + +static bool float_equal(float a, float b) +{ + float scaled_epsilon; + float difference = fabsf(a - b); + + // Scale to the largest value. + a = fabsf(a); + b = fabsf(b); + if (a > b) + scaled_epsilon = FLT_EPSILON * a; + else + scaled_epsilon = FLT_EPSILON * b; + + return difference <= scaled_epsilon; +} + +static bool double_equal(double a, double b) +{ + double scaled_epsilon; + double difference = fabsf(a - b); + + // Scale to the largest value. + a = fabs(a); + b = fabs(b); + if (a > b) + scaled_epsilon = DBL_EPSILON * a; + else + scaled_epsilon = DBL_EPSILON * b; + + return difference <= scaled_epsilon; +} + +#define fpu_load_proto(__inst, __type) \ +extern __type test_ ## __inst(unsigned long fp_reg, void *addr, unsigned long offset, __type value) + +fpu_load_proto(flw, float); +fpu_load_proto(fld, double); +fpu_load_proto(c_flw, float); +fpu_load_proto(c_fld, double); +fpu_load_proto(c_fldsp, double); + +#define fpu_store_proto(__inst, __type) \ +extern void test_ ## __inst(unsigned long fp_reg, void *addr, unsigned long offset, __type value) + +fpu_store_proto(fsw, float); +fpu_store_proto(fsd, double); +fpu_store_proto(c_fsw, float); +fpu_store_proto(c_fsd, double); +fpu_store_proto(c_fsdsp, double); + +#define gp_load_proto(__inst, __type) \ +extern __type test_ ## __inst(void *addr, unsigned long offset, __type value) + +gp_load_proto(lh, uint16_t); +gp_load_proto(lhu, uint16_t); +gp_load_proto(lw, uint32_t); +gp_load_proto(lwu, uint32_t); +gp_load_proto(ld, uint64_t); +gp_load_proto(c_lw, uint32_t); +gp_load_proto(c_ld, uint64_t); +gp_load_proto(c_ldsp, uint64_t); + +#define gp_store_proto(__inst, __type) \ +extern void test_ ## __inst(void *addr, unsigned long offset, __type value) + +gp_store_proto(sh, uint16_t); +gp_store_proto(sw, uint32_t); +gp_store_proto(sd, uint64_t); +gp_store_proto(c_sw, uint32_t); +gp_store_proto(c_sd, uint64_t); +gp_store_proto(c_sdsp, uint64_t); + +#define TEST_GP_LOAD(__inst, __type_size) \ +TEST(gp_load_ ## __inst) \ +{ \ + int offset, ret; \ + uint8_t buf[16] __attribute__((aligned(16))); \ + \ + ret = prctl(PR_SET_UNALIGN, PR_UNALIGN_NOPRINT); \ + ASSERT_EQ(ret, 0); \ + \ + for (offset = 1; offset < __type_size/8; offset++) { \ + uint ## __type_size ## _t val = VAL ## __type_size; \ + uint ## __type_size ## _t *ptr = (uint ## __type_size ## _t *) (buf + offset); \ + memcpy(ptr, &val, sizeof(val)); \ + val = test_ ## __inst(ptr, offset, val); \ + EXPECT_EQ(VAL ## __type_size, val); \ + } \ +} + +TEST_GP_LOAD(lh, 16); +TEST_GP_LOAD(lhu, 16); +TEST_GP_LOAD(lw, 32); +TEST_GP_LOAD(lwu, 32); +TEST_GP_LOAD(ld, 64); +#ifdef __riscv_compressed +TEST_GP_LOAD(c_lw, 32); +TEST_GP_LOAD(c_ld, 64); +TEST_GP_LOAD(c_ldsp, 64); +#endif + +#define TEST_GP_STORE(__inst, __type_size) \ +TEST(gp_load_ ## __inst) \ +{ \ + int offset, ret; \ + uint8_t buf[16] __attribute__((aligned(16))); \ + \ + ret = prctl(PR_SET_UNALIGN, PR_UNALIGN_NOPRINT); \ + ASSERT_EQ(ret, 0); \ + \ + for (offset = 1; offset < __type_size/8; offset++) { \ + uint ## __type_size ## _t val = VAL ## __type_size; \ + uint ## __type_size ## _t *ptr = (uint ## __type_size ## _t *) (buf + offset); \ + memset(ptr, 0, sizeof(val)); \ + test_ ## __inst(ptr, offset, val); \ + memcpy(&val, ptr, sizeof(val)); \ + EXPECT_EQ(VAL ## __type_size, val); \ + } \ +} +TEST_GP_STORE(sh, 16); +TEST_GP_STORE(sw, 32); +TEST_GP_STORE(sd, 64); +#ifdef __riscv_compressed +TEST_GP_STORE(c_sw, 32); +TEST_GP_STORE(c_sd, 64); +TEST_GP_STORE(c_sdsp, 64); +#endif + +#define __TEST_FPU_LOAD(__type, __inst, __reg_start, __reg_end) \ +TEST(fpu_load_ ## __inst) \ +{ \ + int i, ret, offset, fp_reg; \ + uint8_t buf[16] __attribute__((aligned(16))); \ + \ + ret = prctl(PR_SET_UNALIGN, PR_UNALIGN_NOPRINT); \ + ASSERT_EQ(ret, 0); \ + \ + for (fp_reg = __reg_start; fp_reg < __reg_end; fp_reg++) { \ + for (offset = 1; offset < 4; offset++) { \ + void *load_addr = (buf + offset); \ + __type val = VAL_ ## __type ; \ + \ + memcpy(load_addr, &val, sizeof(val)); \ + val = test_ ## __inst(fp_reg, load_addr, offset, val); \ + EXPECT_TRUE(__type ##_equal(val, VAL_## __type)); \ + } \ + } \ +} +#define TEST_FPU_LOAD(__type, __inst) \ + __TEST_FPU_LOAD(__type, __inst, 0, 32) +#define TEST_FPU_LOAD_COMPRESSED(__type, __inst) \ + __TEST_FPU_LOAD(__type, __inst, 8, 16) + +TEST_FPU_LOAD(float, flw) +TEST_FPU_LOAD(double, fld) +#ifdef __riscv_compressed +TEST_FPU_LOAD_COMPRESSED(double, c_fld) +TEST_FPU_LOAD_COMPRESSED(double, c_fldsp) +#endif + +#define __TEST_FPU_STORE(__type, __inst, __reg_start, __reg_end) \ +TEST(fpu_store_ ## __inst) \ +{ \ + int i, ret, offset, fp_reg; \ + uint8_t buf[16] __attribute__((aligned(16))); \ + \ + ret = prctl(PR_SET_UNALIGN, PR_UNALIGN_NOPRINT); \ + ASSERT_EQ(ret, 0); \ + \ + for (fp_reg = __reg_start; fp_reg < __reg_end; fp_reg++) { \ + for (offset = 1; offset < 4; offset++) { \ + \ + void *store_addr = (buf + offset); \ + __type val = VAL_ ## __type ; \ + \ + test_ ## __inst(fp_reg, store_addr, offset, val); \ + memcpy(&val, store_addr, sizeof(val)); \ + EXPECT_TRUE(__type ## _equal(val, VAL_## __type)); \ + } \ + } \ +} +#define TEST_FPU_STORE(__type, __inst) \ + __TEST_FPU_STORE(__type, __inst, 0, 32) +#define TEST_FPU_STORE_COMPRESSED(__type, __inst) \ + __TEST_FPU_STORE(__type, __inst, 8, 16) + +TEST_FPU_STORE(float, fsw) +TEST_FPU_STORE(double, fsd) +#ifdef __riscv_compressed +TEST_FPU_STORE_COMPRESSED(double, c_fsd) +TEST_FPU_STORE_COMPRESSED(double, c_fsdsp) +#endif + +TEST_SIGNAL(gen_sigbus, SIGBUS) +{ + uint32_t *ptr; + uint8_t buf[16] __attribute__((aligned(16))); + int ret; + + ret = prctl(PR_SET_UNALIGN, PR_UNALIGN_SIGBUS); + ASSERT_EQ(ret, 0); + + ptr = (uint32_t *)(buf + 1); + *ptr = 0xDEADBEEFULL; +} + +int main(int argc, char **argv) +{ + int ret, val; + + ret = prctl(PR_GET_UNALIGN, &val); + if (ret == -1 && errno == EINVAL) + ksft_exit_skip("SKIP GET_UNALIGN_CTL not supported\n"); + + exit(test_harness_run(argc, argv)); +} From patchwork Mon Feb 10 21:35:45 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: 13969385 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 1BC77C0219D for ; Mon, 10 Feb 2025 23:55:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=0LXtYeLRWg9crOLGuuvPE70Yey2z75YjfI46rFJtsgk=; b=XFVv9IIf/+2IvU xAV3Hl7LGwZKaukoHKs0qGaWi1vJfBUOYKUcnTmBHeyploJjjGkl2TcSRBd0alAdkwVY3Gef5P/Sq SghL3a9wJ9ymYnhlI5rtc+ALKIzEx92CLG2n4o9fQLBTZa+czCb891BNReDun/C74Szllkv6aHL2x UyVKG+2WziLyySO4gA/19S/jh7Qxj6biNQqswFzy5ja0rs5XqerUcjB8zRC7hvPXT654eUPQD7kzg nsBh6t1LbK6WWISctK+Gaf1lRVA4ISvD6tqeM4LfbRNlpYnsv2ZmapzIlNcx0cjDtfYBQtp0vdL5+ NgSGYHpgzHBhKJStetfA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thdd0-00000001u3j-39JB; Mon, 10 Feb 2025 23:55:50 +0000 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbS1-00000001VSz-18u7 for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:22 +0000 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-43948f77f1aso7273785e9.0 for ; Mon, 10 Feb 2025 13:36:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223379; x=1739828179; 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=fzMhLGWSVmu+B6UkQbjgF0/C3X18++BVbDb7RHWPhdM=; b=f6iMZ1HSHak2c6UuxsnzILzW/rkwUGK6MhZ2b33nNmeevkg29ZIj2iJ48ASYJQkoZt oRi26nimqFBZfIft8PMzRuXSGjE5dzUsdYtc09/aM7A9OpRcgiKEux19cQW4KHPiyobN iCHIU46cr198O3igjJA1Riu6NppBz3jPQqbMQZFyTAHqVYneFS9h7cQMxs0ySyz7qExi SR0EC/upvjgLYkkQavEvtXqo2SoqSCZWhKbLmUq8W3lZzNcFkF3vBeNsvk29xNNl5326 rEUZyP9HgSC1+sZqng2deqHHQJI/56arFwAK1or7K4Q7SuSvyUBaDV+UzzXwH4GwJ6AA c8tw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223379; x=1739828179; 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=fzMhLGWSVmu+B6UkQbjgF0/C3X18++BVbDb7RHWPhdM=; b=kfmh0cy1jujCdFpFqIs6U6iu8xvfk66Ptq18U2qwSFVcewi1VkVSzl7lEauRulhrHs XGgjoNKgrDELMFnFO/158sImkm1uwxVrxKCPVCyMA2htu9n5ryMfDoXKWgtSHUU7iE8w SpdchD4Me+Z/CiOXFce7Qm+uNAEjdMld1atGK6M4ldgys/rMfAZrZpDu6XjgSBIW8rv4 aH5/NgL7T8eAtLb1eqpoUVK33GbEQFl4lky7HMXPcL79crDUsSM0a3zkcC74tC7ySBIi aafZQ9VL79i8q6Jpl9TzntLMtq9owUz4r6XyaauhGQ9/oueisYPmTosDPERecqaa7ubC cWGg== X-Forwarded-Encrypted: i=1; AJvYcCVly/0oiISpDcYVj2H+BPxgLpKIR2Bn4FU+IDl5P/ZARkiQSBwhcgGmfZD3KNJ1ctQ5N67xIqfqdfykJw==@lists.infradead.org X-Gm-Message-State: AOJu0YzRgUPPtxJpGfrbeR+7tBySXwc1LOG1UDsWneD3wsjcFTqm1sCd ey97osoJHsjBy6WynbcSCFIr79vJk1A3asT8BQZ75UbUgPdP6qDkEQLBHCs746Y= X-Gm-Gg: ASbGncuUWA+Nk3gKgodwCF4x4G0FMTQcM+f2jot5qBl+HYw77r4itiMJIrLG7YTzUwb NduXXBP7xcmndyJNVWlosvUoldjOMzsyKxsVSjZCONxDxc0dA/RDH4PRU4QrZDbcSCvtGQ/1qUs zfTH4sTBDvic01/ZApDN3u1RgrMoH6Iv8UITtxUpLKqTynT/IEwrvS494I1lMxOU9dOX/A8xFPY UYQuKY11vGkT1dVtmimYkGi0/QDd8QfMeT1qNt+9zJ0KITDneLsg/36BMltRwA6NWTBm9LJmteo afBj7u4P/W8rksDc X-Google-Smtp-Source: AGHT+IEdxZi1LVbl9euup4c2vHOS8bchWH6uTAT2rIkrBK2DWGVQXoH4pwkPsigJnMZZocj6TvzXjg== X-Received: by 2002:a5d:6d0e:0:b0:38d:b34a:679 with SMTP id ffacd0b85a97d-38dc9373577mr10353065f8f.37.1739223379602; Mon, 10 Feb 2025 13:36:19 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:18 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 12/15] RISC-V: KVM: add SBI extension init()/deinit() functions Date: Mon, 10 Feb 2025 22:35:45 +0100 Message-ID: <20250210213549.1867704-13-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_133621_309980_9EDED867 X-CRM114-Status: GOOD ( 14.63 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org The FWFT SBI extension will need to dynamically allocate memory and do init time specific initialization. Add an init/deinit callbacks that allows to do so. Signed-off-by: Clément Léger --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 9 ++++++++ arch/riscv/kvm/vcpu.c | 2 ++ arch/riscv/kvm/vcpu_sbi.c | 30 +++++++++++++++++++++++++++ 3 files changed, 41 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..44f551143498 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -505,8 +505,38 @@ void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu) continue; } + if (!ext->default_disabled && ext->init && + ext->init(vcpu) != 0) { + scontext->ext_status[idx] = + KVM_RISCV_SBI_EXT_STATUS_UNAVAILABLE; + continue; + } + scontext->ext_status[idx] = ext->default_disabled ? KVM_RISCV_SBI_EXT_STATUS_DISABLED : KVM_RISCV_SBI_EXT_STATUS_ENABLED; } } + +void kvm_riscv_vcpu_sbi_deinit(struct kvm_vcpu *vcpu) +{ + struct kvm_vcpu_sbi_context *scontext = &vcpu->arch.sbi_context; + const struct kvm_riscv_sbi_extension_entry *entry; + const struct kvm_vcpu_sbi_extension *ext; + int idx, i; + + for (i = 0; i < ARRAY_SIZE(sbi_ext); i++) { + entry = &sbi_ext[i]; + ext = entry->ext_ptr; + idx = entry->ext_idx; + + if (idx < 0 || idx >= ARRAY_SIZE(scontext->ext_status)) + continue; + + if (scontext->ext_status[idx] == KVM_RISCV_SBI_EXT_STATUS_UNAVAILABLE || + !ext->deinit) + continue; + + ext->deinit(vcpu); + } +} From patchwork Mon Feb 10 21:35:46 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: 13969387 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 04AC3C02198 for ; Tue, 11 Feb 2025 00:10:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=vD+h3EdbeIXXOjYpiuBHaRPqs3v/8T+UEW0NALEef5Y=; b=HaFstkj8703TcF GCjR5th/TOjN8TiZx3yb3ftPevJ0W6HtBK1+6ZnAcjBc1eyGORHtJ164Wyu91YyVHj6yRzZQDeUZn T09IQjKrRtagE7anLoiTH6PMf+RF5BQg6STyAY0rvbLwEBtVWUwj5XKVf1i3TDaGhj9FFq6t5xodO edl13xblKwrMnuqlbQwOn97nD0sG6/HEtWr+D7HIVhYdoAKWo1VIIX9oeJRxhI6+Ot1By70HdmB+F 5OKi4O4ptf5FJmalga1L6cSbIO0c1X13tQrw7DZkzzAa7rtxHA+E+0H3oSzpZBHVJxI1tV339A/g+ 3zW1vU5+uKG6MFY9nujg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thdrW-00000001vzd-0jc1; Tue, 11 Feb 2025 00:10:50 +0000 Received: from mail-wm1-f54.google.com ([209.85.128.54]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbS2-00000001VU4-3Vdj for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:23 +0000 Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-43944181e68so16085415e9.0 for ; Mon, 10 Feb 2025 13:36:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223381; x=1739828181; 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=laF+WRFcEPhbPigMR+biZf/NV/ZYQNs3dPPw81Y/wsw=; b=fxR36ZxboIrccYdUHCzM/3Ghs/BhSBfhxRDYbAMeitc9TtQI+B0T+NCMeq0RUFswML /7NSlF+JuZx8vqJwDdMyAr7q78GDnuhA6xGy8KWgKak0CRL3AZ6mrID9RnlVtMdMP9x5 0dyXNZ6ZLgpC9zRni5cAwcgopdk4aEkZCoVsTCHqzU/LKITojOQ4s4a35MuV53Vwlp/V vOm5o1r8AoEY70jWNB8baHvn+B59kYNnC2iVONogmGr17OrVtXjpXkVwXjy1f+84F1bD aonmxHwqMhrF+tPwqgvx3PVhQ5K9bDPulrZe2B7Us1CmlZQhLN+DaZmnSzYDeFy+wMqU +L2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223381; x=1739828181; 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=laF+WRFcEPhbPigMR+biZf/NV/ZYQNs3dPPw81Y/wsw=; b=Gvzk9BfMVBZWcO0vM91TEAlP9Szszjb2/sdPpOvSErBlUpxuPHggLJj5xeaM6a15kf uEWnT4bSV2qzvI4M+CChEPzCv9xcPneOn5R7t0pDxPMRasF1/v+8dFYQ1aUiBsVIO45m c7dYKkRkKi0E3ffn8Y7POUfHdDRQitgQZtAVRnIpXvIdf4e4Sj5zTZo2bIsNOeXKLbmF uUTTJ6ls0txkRw9HXjs8+Us0NmKttOANoK4Z6mKb8Mvnfij4yXnuePLP4/EubuIptpLf hLyMB3B9hwvRLFhTYdeKC5cctUB6fh/u/llHmK7QAP7HgCgMUBS2pU88+mhFGTNUL2TG wcrA== X-Forwarded-Encrypted: i=1; AJvYcCW4tIA0NXUbAUiMTyaTETg/rICWTBlarnlPaSt9XGI5yvAavNl4w6lySqRND9Wpn0jnJ+WZxsCp36aYUw==@lists.infradead.org X-Gm-Message-State: AOJu0YwDMijGS7X8XhMn8hCyBbyDa4Okxyvkf/ec2/ZI+l66BOu4jmf5 2aWCNWg3NR5z4WKWZC1IjRq9CFFbAR7oJwbkAieCayzFp7y+8NETE/efRBkSt2c= X-Gm-Gg: ASbGnctbfsgnZSWkNuaWJs/jGklykLiDHwmu4//5vVKTB1uY+zX7q8dk2K1PUQVPDg9 zopPFUc63Z/MX2uPCbZzSdlz5SGQSQ0+mjH/Q99+dDhQ9Tb4+pcyqycvG6vJqHN8exyIv8j8oil fMPNU8NoLMec1VL1TfbL5L7kPNsZ2G1w+qSHykSj/Ged4/QEwq3QQwtSimfGVUgak9+YwsodXSg qzZ3AQp3fFmx4kAo3DnCGSweRJfx7edC1aqTNbZWwvfa/e9dyo6NFv27jS1DKuMAzLMf2Aphl2W jqsz3oI+bRY/f8mk X-Google-Smtp-Source: AGHT+IFgS/HX5A+kH5PAPBrkqn8fBWMnZmlOER5QhwFIE+HweZ3IE1yWLyw44chbTe5o+iil3uYEhQ== X-Received: by 2002:a05:600c:1c07:b0:436:18d0:aa6e with SMTP id 5b1f17b1804b1-4392497d041mr163575835e9.5.1739223380954; Mon, 10 Feb 2025 13:36:20 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:20 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 13/15] RISC-V: KVM: add SBI extension reset callback Date: Mon, 10 Feb 2025 22:35:46 +0100 Message-ID: <20250210213549.1867704-14-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_133622_887597_4EABFFD6 X-CRM114-Status: GOOD ( 17.72 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Currently, oonly the STA extension needed a reset function but that's going to be the case for FWFT as well. Add a reset callback that can be implemented by SBI extensions. Signed-off-by: Clément Léger --- arch/riscv/include/asm/kvm_host.h | 1 - arch/riscv/include/asm/kvm_vcpu_sbi.h | 2 ++ arch/riscv/kvm/vcpu.c | 2 +- arch/riscv/kvm/vcpu_sbi.c | 24 ++++++++++++++++++++++++ arch/riscv/kvm/vcpu_sbi_sta.c | 3 ++- 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/arch/riscv/include/asm/kvm_host.h b/arch/riscv/include/asm/kvm_host.h index cc33e35cd628..bb93d2995ea2 100644 --- a/arch/riscv/include/asm/kvm_host.h +++ b/arch/riscv/include/asm/kvm_host.h @@ -409,7 +409,6 @@ void __kvm_riscv_vcpu_power_on(struct kvm_vcpu *vcpu); void kvm_riscv_vcpu_power_on(struct kvm_vcpu *vcpu); bool kvm_riscv_vcpu_stopped(struct kvm_vcpu *vcpu); -void kvm_riscv_vcpu_sbi_sta_reset(struct kvm_vcpu *vcpu); void kvm_riscv_vcpu_record_steal_time(struct kvm_vcpu *vcpu); #endif /* __RISCV_KVM_HOST_H__ */ diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index bcb90757b149..cb68b3a57c8f 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -57,6 +57,7 @@ struct kvm_vcpu_sbi_extension { */ int (*init)(struct kvm_vcpu *vcpu); void (*deinit)(struct kvm_vcpu *vcpu); + void (*reset)(struct kvm_vcpu *vcpu); }; void kvm_riscv_vcpu_sbi_forward(struct kvm_vcpu *vcpu, struct kvm_run *run); @@ -78,6 +79,7 @@ bool riscv_vcpu_supports_sbi_ext(struct kvm_vcpu *vcpu, int idx); int kvm_riscv_vcpu_sbi_ecall(struct kvm_vcpu *vcpu, struct kvm_run *run); void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu); void kvm_riscv_vcpu_sbi_deinit(struct kvm_vcpu *vcpu); +void kvm_riscv_vcpu_sbi_reset(struct kvm_vcpu *vcpu); int kvm_riscv_vcpu_get_reg_sbi_sta(struct kvm_vcpu *vcpu, unsigned long reg_num, unsigned long *reg_val); diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index 877bcc85c067..542747e2c7f5 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -94,7 +94,7 @@ static void kvm_riscv_reset_vcpu(struct kvm_vcpu *vcpu) vcpu->arch.hfence_tail = 0; memset(vcpu->arch.hfence_queue, 0, sizeof(vcpu->arch.hfence_queue)); - kvm_riscv_vcpu_sbi_sta_reset(vcpu); + kvm_riscv_vcpu_sbi_reset(vcpu); /* Reset the guest CSRs for hotplug usecase */ if (loaded) diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index 44f551143498..f81f06f82650 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -540,3 +540,27 @@ void kvm_riscv_vcpu_sbi_deinit(struct kvm_vcpu *vcpu) ext->deinit(vcpu); } } + +void kvm_riscv_vcpu_sbi_reset(struct kvm_vcpu *vcpu) +{ + struct kvm_vcpu_sbi_context *scontext = &vcpu->arch.sbi_context; + const struct kvm_riscv_sbi_extension_entry *entry; + const struct kvm_vcpu_sbi_extension *ext; + int idx, i; + + for (i = 0; i < ARRAY_SIZE(sbi_ext); i++) { + entry = &sbi_ext[i]; + ext = entry->ext_ptr; + idx = entry->ext_idx; + + if (idx < 0 || idx >= ARRAY_SIZE(scontext->ext_status)) + continue; + + if (scontext->ext_status[idx] != KVM_RISCV_SBI_EXT_STATUS_ENABLED || + !ext->reset) + continue; + + ext->reset(vcpu); + } +} + diff --git a/arch/riscv/kvm/vcpu_sbi_sta.c b/arch/riscv/kvm/vcpu_sbi_sta.c index 5f35427114c1..cc6cb7c8f0e4 100644 --- a/arch/riscv/kvm/vcpu_sbi_sta.c +++ b/arch/riscv/kvm/vcpu_sbi_sta.c @@ -16,7 +16,7 @@ #include #include -void kvm_riscv_vcpu_sbi_sta_reset(struct kvm_vcpu *vcpu) +static void kvm_riscv_vcpu_sbi_sta_reset(struct kvm_vcpu *vcpu) { vcpu->arch.sta.shmem = INVALID_GPA; vcpu->arch.sta.last_steal = 0; @@ -156,6 +156,7 @@ const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_sta = { .extid_end = SBI_EXT_STA, .handler = kvm_sbi_ext_sta_handler, .probe = kvm_sbi_ext_sta_probe, + .reset = kvm_riscv_vcpu_sbi_sta_reset, }; int kvm_riscv_vcpu_get_reg_sbi_sta(struct kvm_vcpu *vcpu, From patchwork Mon Feb 10 21:35:47 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: 13969378 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 EC710C0219E for ; Mon, 10 Feb 2025 22:55:56 +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=8knTq2ryRgmOySYclFKnuBeyufWQQnUgoBx7xjW/U9U=; b=g87T16lw1ia0iC UdD+T5eupFNZ/41nvo8DpMYKW5DKSz2F6hIzAu/0Zh/V8nu/CI1SIzH4kFcTg1Yjn6EAaQ9fqttj4 SMAvsgJr0ivd8YwXXm0+hCE0bhldStNAcXV9w3Xjkn58fcWQvWo6OIsRF46lier5rxDyIe1yd7tb/ mmHiJRSbCbpvQJHI+PUBjqQQ/ypEDza+fpF0/jJK8hyg/6HfrFFCrmIqtPm/GCJN43ZoirxCMyDjn fAWw2pR3C2urmaEMe4CGuyiQ9JN16O1pMJH05t1NFs3mqAYFKkeHDoWIi75OC+lmI/sidtf7qwnhY EfrWI7f6raWOUDxzvvvA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thcgx-00000001kfO-0zpE; Mon, 10 Feb 2025 22:55:51 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbSB-00000001VXY-0bMc for linux-riscv@bombadil.infradead.org; Mon, 10 Feb 2025 21:36:31 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Sender:Reply-To:Content-ID:Content-Description; bh=fxr85atN+ZkCzXnDiXx5YdkbxPsmbJ9qeIbQy8XmRYw=; b=fgb2qz6nij+6pHpZ26V5acBjwb 8du+x+B34l1DajngolMIUQp8Dbf6TfBNfJrETRm8uLZv35gntLw704T55ZNy/ioQV5veenEy42+Av fvah7q0UeKw8mqU6E9iSWB+D2J6kbsAPyL5WKbLwvN7sY9xEfOqYk3d5Ti6RIOy+E5lyLDnWbt653 iPtT7PvY63Zb2wtx4GibLOCrC3IEACFcszhbL2WAjP+FgCSLdWz7tFnh41cslQM7RrRU5cFkkvSM4 5C+TD085w3zngm+2W+dbs2Ui3ZNBI54RUAqcdY1cQ7yUBnri8KYS10W3ykEs3UN2ZY/Q4VZe0/37G +4rwlg+g==; Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by desiato.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbS6-00000000ICU-1QGH for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:29 +0000 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-43948021a45so11011125e9.1 for ; Mon, 10 Feb 2025 13:36:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223382; x=1739828182; 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=fxr85atN+ZkCzXnDiXx5YdkbxPsmbJ9qeIbQy8XmRYw=; b=e6tUokSKCt1UpctZPNQSvsA9EbHBJd05hLlgnQrtdte7hcZz1Kra1MPjyMzbshAfdh XMdntz+bRjr1O6Hyz8UAMv0/EuA5ODM0rLd4S1Q2K7SixIeygruPLztBqkbxA+c98UtS 629AnvMB9IbGFcKKupN9jFXHWY3RQodc70gzyEyO2XVGi0TwyURmGvFNw91XXtQkSLwh K15RUdYDHzlQCafHfAmRt0bGbsv/AdIXzonFemDNX7ZRBiIiI3365Es5vTxfeb6nDYSh t95+Ny9iNgDH5eHfjcN0DoxlTUNWvviaRCwzxSZVcJ1LaRcXXL0s66p2q8RVPrsD6N+G jPUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223382; x=1739828182; 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=fxr85atN+ZkCzXnDiXx5YdkbxPsmbJ9qeIbQy8XmRYw=; b=bwh7vR/FupQcYWhYKMb6jBMEAZUJHsXJozt29PSXdzALJrcL3ZWjBGPv7dNozXdpli OQ5pRWeE4He+32cmeX6wk1VR7Qb+T6NazRofbvpC6TrejDKpOBJ4bHiaaObMcwxNRpZO luBnoinqW7VuxqafbsuApWbM/DYmq2tBPOcwaGLFzaFf4NCCFrYKnRr19wV2mc+La9Z3 XRUw8OHHaTw8Lvgp33glunuXyZbqJvdVl6k/KoVD78pbGVr+4Rjon2Jf7Cfa9zRG6iUO hs8kEjdnPdHtDYndsdme7TsNgGwga91Nn68oNfDaV4cvmxa9WzFCiM+ln+nhV5GXLXuI HW5w== X-Forwarded-Encrypted: i=1; AJvYcCVUosVygjIw3BY3OYFk4iVqYrt9vH/mgwIV4Q4ED++RacfP8sYOVJr5hUuNFixVxsuKzbZunXMqHlss0w==@lists.infradead.org X-Gm-Message-State: AOJu0YwdpEHg0pEYXMFmcTBG2Dczg6zBP6NgU2JXQtGsDSOPxUmkkzub pPDaeNeGcrYwk5CMiXHwhmObQrK6qMxfc+Pw3rDTW41GyJCxKXyHnQ7owhuIn+I= X-Gm-Gg: ASbGncvxr2CLOlLO33KXeRVnQQaLsEJldm9Rt1a7iFr4y0+/ENcdsxkV3oT6CDfTYCj rs9FTpYnLoinJJ6eKb14gTXn6BEYr30aCbnwCVnCLyvXtfcSagWKngt115+8j0EQomhrKDdozaL QMcQlSaSxLajo41E5o+AO7tiPvRwvHHhB8hrvY1o5scHoeXqrGryHSSjM6e+lQVfHHbozcMfL+z xLxOGKUnQnyH9LIN7umdNIqe/VSidEMbeQcBCi0aXZ2rLyLq/Mtlqi7KfzEK/EN/CIBhX3YZ8VS GuW2YM86l5OraPfN X-Google-Smtp-Source: AGHT+IHGg/B8EKVF0J+QgvWPjq0DmPEbNzLTIhnEjBKTQQ0qKQLdjASqPL4jkM0GM1rnPCqrQ2wmbg== X-Received: by 2002:a05:600c:358f:b0:436:1bbe:f686 with SMTP id 5b1f17b1804b1-439249a83c0mr99453375e9.21.1739223382171; Mon, 10 Feb 2025 13:36:22 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:21 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 14/15] RISC-V: KVM: add support for FWFT SBI extension Date: Mon, 10 Feb 2025 22:35:47 +0100 Message-ID: <20250210213549.1867704-15-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_213628_158718_7E60C0BE X-CRM114-Status: GOOD ( 24.33 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Add basic infrastructure to support the FWFT extension in KVM. Signed-off-by: Clément Léger --- arch/riscv/include/asm/kvm_host.h | 4 + arch/riscv/include/asm/kvm_vcpu_sbi.h | 1 + arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h | 37 ++++ 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 | 187 +++++++++++++++++++++ 7 files changed, 235 insertions(+) create mode 100644 arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h create mode 100644 arch/riscv/kvm/vcpu_sbi_fwft.c diff --git a/arch/riscv/include/asm/kvm_host.h b/arch/riscv/include/asm/kvm_host.h index bb93d2995ea2..c0db61ba691a 100644 --- a/arch/riscv/include/asm/kvm_host.h +++ b/arch/riscv/include/asm/kvm_host.h @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -281,6 +282,9 @@ struct kvm_vcpu_arch { /* Performance monitoring context */ struct kvm_pmu pmu_context; + /* Firmware feature SBI extension context */ + struct kvm_sbi_fwft fwft_context; + /* 'static' configurations which are set only once */ struct kvm_vcpu_config cfg; diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index cb68b3a57c8f..ffd03fed0c06 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -98,6 +98,7 @@ extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_hsm; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_dbcn; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_susp; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_sta; +extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_fwft; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_experimental; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_vendor; diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h b/arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h new file mode 100644 index 000000000000..5782517f6e08 --- /dev/null +++ b/arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clément Léger + */ + +#ifndef __KVM_VCPU_RISCV_FWFT_H +#define __KVM_VCPU_RISCV_FWFT_H + +#include + +struct kvm_sbi_fwft_config; +struct kvm_vcpu; + +struct kvm_sbi_fwft_feature { + enum sbi_fwft_feature_t id; + bool (*supported)(struct kvm_vcpu *vcpu); + int (*set)(struct kvm_vcpu *vcpu, struct kvm_sbi_fwft_config *conf, unsigned long value); + int (*get)(struct kvm_vcpu *vcpu, struct kvm_sbi_fwft_config *conf, unsigned long *value); +}; + +struct kvm_sbi_fwft_config { + const struct kvm_sbi_fwft_feature *feature; + bool supported; + unsigned long flags; +}; + +/* FWFT data structure per vcpu */ +struct kvm_sbi_fwft { + struct kvm_sbi_fwft_config *configs; +}; + +#define vcpu_to_fwft(vcpu) (&(vcpu)->arch.fwft_context) + +#endif /* !__KVM_VCPU_RISCV_FWFT_H */ diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/asm/kvm.h index f06bc5efcd79..fa6eee1caf41 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -202,6 +202,7 @@ enum KVM_RISCV_SBI_EXT_ID { KVM_RISCV_SBI_EXT_DBCN, KVM_RISCV_SBI_EXT_STA, KVM_RISCV_SBI_EXT_SUSP, + KVM_RISCV_SBI_EXT_FWFT, KVM_RISCV_SBI_EXT_MAX, }; diff --git a/arch/riscv/kvm/Makefile b/arch/riscv/kvm/Makefile index 4e0bba91d284..06e2d52a9b88 100644 --- a/arch/riscv/kvm/Makefile +++ b/arch/riscv/kvm/Makefile @@ -26,6 +26,7 @@ kvm-y += vcpu_onereg.o kvm-$(CONFIG_RISCV_PMU_SBI) += vcpu_pmu.o kvm-y += vcpu_sbi.o kvm-y += vcpu_sbi_base.o +kvm-y += vcpu_sbi_fwft.o kvm-y += vcpu_sbi_hsm.o kvm-$(CONFIG_RISCV_PMU_SBI) += vcpu_sbi_pmu.o kvm-y += vcpu_sbi_replace.o diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index f81f06f82650..3b37deaed4e7 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..fe608bf16558 --- /dev/null +++ b/arch/riscv/kvm/vcpu_sbi_fwft.c @@ -0,0 +1,187 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025 Rivos Inc. + * + * Authors: + * Clément Léger + */ + +#include +#include +#include +#include +#include +#include +#include + +static const enum sbi_fwft_feature_t kvm_fwft_defined_features[] = { + SBI_FWFT_MISALIGNED_EXC_DELEG, + SBI_FWFT_LANDING_PAD, + SBI_FWFT_SHADOW_STACK, + SBI_FWFT_DOUBLE_TRAP, + SBI_FWFT_PTE_AD_HW_UPDATING, + SBI_FWFT_POINTER_MASKING_PMLEN, +}; + +static bool kvm_fwft_is_defined_feature(enum sbi_fwft_feature_t feature) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(kvm_fwft_defined_features); i++) { + if (kvm_fwft_defined_features[i] == feature) + return true; + } + + return false; +} + +static const struct kvm_sbi_fwft_feature features[] = { +}; + +static struct kvm_sbi_fwft_config * +kvm_sbi_fwft_get_config(struct kvm_vcpu *vcpu, enum sbi_fwft_feature_t feature) +{ + int i = 0; + struct kvm_sbi_fwft *fwft = vcpu_to_fwft(vcpu); + + for (i = 0; i < ARRAY_SIZE(features); i++) { + if (fwft->configs[i].feature->id == feature) + return &fwft->configs[i]; + } + + return NULL; +} + +static int kvm_fwft_get_feature(struct kvm_vcpu *vcpu, unsigned long feature, + struct kvm_sbi_fwft_config **conf) +{ + struct kvm_sbi_fwft_config *tconf; + + /* Feature are defined as 32 bits identifiers */ + if (feature & ~(BIT_ULL(32) - 1)) + return SBI_ERR_INVALID_PARAM; + + 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, unsigned long feature, + unsigned long value, unsigned long flags) +{ + int ret; + struct kvm_sbi_fwft_config *conf; + + ret = kvm_fwft_get_feature(vcpu, feature, &conf); + if (ret) + return ret; + + if ((flags & ~SBI_FWFT_SET_FLAG_LOCK) != 0) + return SBI_ERR_INVALID_PARAM; + + if (conf->flags & SBI_FWFT_SET_FLAG_LOCK) + return SBI_ERR_DENIED_LOCKED; + + conf->flags = flags; + + return conf->feature->set(vcpu, conf, value); +} + +static int kvm_sbi_fwft_get(struct kvm_vcpu *vcpu, unsigned long feature, + unsigned long *value) +{ + int ret; + struct kvm_sbi_fwft_config *conf; + + ret = kvm_fwft_get_feature(vcpu, feature, &conf); + if (ret) + return ret; + + return conf->feature->get(vcpu, conf, value); +} + +static int kvm_sbi_ext_fwft_handler(struct kvm_vcpu *vcpu, struct kvm_run *run, + struct kvm_vcpu_sbi_return *retdata) +{ + int ret = 0; + struct kvm_cpu_context *cp = &vcpu->arch.guest_context; + unsigned long funcid = cp->a6; + + switch (funcid) { + case SBI_EXT_FWFT_SET: + ret = kvm_sbi_fwft_set(vcpu, cp->a0, cp->a1, cp->a2); + break; + case SBI_EXT_FWFT_GET: + ret = kvm_sbi_fwft_get(vcpu, cp->a0, &retdata->out_val); + break; + default: + ret = SBI_ERR_NOT_SUPPORTED; + break; + } + + retdata->err_val = ret; + + return 0; +} + +static int kvm_sbi_ext_fwft_init(struct kvm_vcpu *vcpu) +{ + struct kvm_sbi_fwft *fwft = vcpu_to_fwft(vcpu); + const struct kvm_sbi_fwft_feature *feature; + struct kvm_sbi_fwft_config *conf; + int i; + + fwft->configs = kcalloc(ARRAY_SIZE(features), sizeof(struct kvm_sbi_fwft_config), + GFP_KERNEL); + if (!fwft->configs) + return -ENOMEM; + + for (i = 0; i < ARRAY_SIZE(features); i++) { + feature = &features[i]; + conf = &fwft->configs[i]; + if (feature->supported) + conf->supported = feature->supported(vcpu); + else + conf->supported = true; + + conf->feature = feature; + } + + return 0; +} + +static void kvm_sbi_ext_fwft_deinit(struct kvm_vcpu *vcpu) +{ + struct kvm_sbi_fwft *fwft = vcpu_to_fwft(vcpu); + + kfree(fwft->configs); +} + +static void kvm_sbi_ext_fwft_reset(struct kvm_vcpu *vcpu) +{ + int i = 0; + struct kvm_sbi_fwft *fwft = vcpu_to_fwft(vcpu); + + for (i = 0; i < ARRAY_SIZE(features); i++) + fwft->configs[i].flags = 0; +} + +const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_fwft = { + .extid_start = SBI_EXT_FWFT, + .extid_end = SBI_EXT_FWFT, + .handler = kvm_sbi_ext_fwft_handler, + .init = kvm_sbi_ext_fwft_init, + .deinit = kvm_sbi_ext_fwft_deinit, + .reset = kvm_sbi_ext_fwft_reset, +}; From patchwork Mon Feb 10 21:35: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: 13969388 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 E3571C021A3 for ; Tue, 11 Feb 2025 00:10:56 +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=6xA6De1R0WSoUSiNpfGLOtw2QdJPjwel4uEX3ihQlyA=; b=X9ZpIdhGuBHW8S 9RbVZOlj2l9kTIUR45ipSq6TNWvTnnA02olhLMkNbHq7kUJ0lGBak4ESjAJ+djXMLGLMj1ZHAuFb4 6C6yqZX1W4ehzGjf8+hZV6MsL72Bwm+dKf3fJXYurDhsmOXdkbfcjr4vv2NVGjTPRD8qh1q1JB3D8 +rAALareNIw8lgmNr/OtCYUqrryxqRdOGa6IsSuqsCpYtqDk8lzC0qyktu3J+vLxd9CmDF4B46arD 3F5tEGqwocxiChUHwhpjs6CgNmMqBuLH/WF6MjpOWWaM3zAm96gevmz96o5e/8Dp9NKgoVFJMidAJ eKFWk/YGgResPDXOTDtA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thdrY-00000001w25-2oPS; Tue, 11 Feb 2025 00:10:52 +0000 Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbS9-00000001VWS-0Hmi for linux-riscv@bombadil.infradead.org; Mon, 10 Feb 2025 21:36:29 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:Content-Type: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender :Reply-To:Content-ID:Content-Description; bh=YLemH8ynfgSfPvc/FNbZdwEa9OOsaEqx6lRijihbbR8=; b=oaGHdhdEyOKEfEHPOXSyvVkuNP YFXNlyD1zYWpm78+V2c42gVqqWga/UhN/HyEPLnwfqRgqiClUbhlA9Dsp77E9jr/pfHSJzhnX8LIj QQ+g1DPYNUPI0twji7oBpY5pmBUlWkTl1slC266zWwfDJBMMh0LdW/GFQTye39EvBDSNVlwbRF1P3 xSMds/vpznavVnuTP+3VehdT38yrIcAazxmym97H+vecNmzzO7p2BddlRWiKiOfgorfYUBUXgJLdx 2tz18HVoBu20H4/Kk4nvC0lM9ubxig2iP7ypNzRnHwXcF9CFpCIt3v66g9tuHMJk/klNOJFAfn1Ac 7bWFYl6w==; Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by casper.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thbS5-0000000GoSS-3Z4R for linux-riscv@lists.infradead.org; Mon, 10 Feb 2025 21:36:27 +0000 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-38dcc6bfbccso1956251f8f.0 for ; Mon, 10 Feb 2025 13:36:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1739223383; x=1739828183; 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=YLemH8ynfgSfPvc/FNbZdwEa9OOsaEqx6lRijihbbR8=; b=WTp7hm6BtoF38h/0Q1noY5l4R8Ysa/DEmJixoqjO8sQxPyOQlkjAD9vV3Cm4cd++CQ EKZDNSQfA7hhSOTHYbTQHmMpZ9sTcBEX2LmyzcpIx9DxCt16uo0Dw0lYzOLGe9qMBT/B MzCgx5FVwXPGtAkDZQiz8FqRdIwA8DIBUsnpNorib6I9TOiZ9ST28I/FYnNmTI6n4oqp QFlhNfX1pSSX1NyHlPi2Qw3RTWA+KjU3ZY5uB8LVeAt7G9qOCghOMNnX7q8BI0Uh0nR9 JnqIsKfI81sDS8Ocp2ZT0EAplUjLP9kUxkFLa/BkHrobj+pZofVFqw6NszshvodcJsnB rwDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739223383; x=1739828183; 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=YLemH8ynfgSfPvc/FNbZdwEa9OOsaEqx6lRijihbbR8=; b=iyldymkWZ1Z0xPR4cEmmBfvlBtUYSwxomjHpuwhmEd3YWhOmUqYszrJvOfrZh0VofP z5t9SBDArfmRWI+Sbcfond+Ve8/TOsPxE2tD5UrwcUe6onBCEqTi1cb5tYWX9CtgkVhZ Nurjv6/I56SFXF0VSrqG0ruLSqrWqhWitbTzXoBe/5YTbG+CRCKlI2VB4FtFUAOHqWNZ 9yX3wtOTvIVcdwuYbI2QjmYm5wDTUEbQSeKjE8jdbug4g7z4XVjeWjNIumn9I01AcWth Q8YR1aUIewKLCORqNsP1IhEeGxTCzcQW8u7IkOtrswmD70hF0R1kg+w/2O2o2jXQxrkY jhQw== X-Forwarded-Encrypted: i=1; AJvYcCXuAmUxIx++Qdaeevjq9hLimAJlpLSY/e81UwmB5jTtKAdCGI0jitXYJ6Gb9necTM6stDGoa5OTDqhVmg==@lists.infradead.org X-Gm-Message-State: AOJu0YxX4L/sjLYDxYydeF/eFW1Qw6Pu20WGDA6a4ZkSXNPMfUPeZFxZ Mr4E0F3kN0Dbs/zv+G92QK3d97wV0+nFNgsVNH/Jqbv5UB3f52H2sDJcUGgXMfw= X-Gm-Gg: ASbGncuQ8z+19sBSe6gWjXm+WDV/lN35QdjrrVFKXeTARLqzlPTBzRXd/rdyswLduIK Bthhp7xM/ZkRcP3TuGUfPb4DG88oD14B8u8/Nh3zdAFUNmhLYvP9BlpAV4IBgmnvkJ9nFPTmFkw d0GnIxE/TJxEgDrJThZuBgvX/uImImGyGUu/EeHQE7OT9GHnSSccToNoYGpl9lcuR0FQWC596GP bb2QpobVsR67gEL7YgI+wBtv9dZlUXhvH1QxWif/FZLG1Bt7jHIsYFOtAxyCDUswKn3viX9OUY4 gmU7FGDPVLhJWwKZ X-Google-Smtp-Source: AGHT+IH2dlYi1O5kUCZJxtYlgHXa+ws9BLhvD6mC+8NX+JeSXuC2kr9vlNuO+zXUNjOhcWWHcNo08w== X-Received: by 2002:adf:efc4:0:b0:38a:4b8b:c57a with SMTP id ffacd0b85a97d-38dc93509damr12435434f8f.44.1739223383507; Mon, 10 Feb 2025 13:36:23 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4394376118esm47541515e9.40.2025.02.10.13.36.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:36:22 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= , Samuel Holland Subject: [PATCH v2 15/15] RISC-V: KVM: add support for SBI_FWFT_MISALIGNED_DELEG Date: Mon, 10 Feb 2025 22:35:48 +0100 Message-ID: <20250210213549.1867704-16-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250210213549.1867704-1-cleger@rivosinc.com> References: <20250210213549.1867704-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250210_213626_118808_B8971120 X-CRM114-Status: GOOD ( 13.25 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org SBI_FWFT_MISALIGNED_DELEG needs hedeleg to be modified to delegate misaligned load/store exceptions. Save and restore it during CPU load/put. Signed-off-by: Clément Léger Reviewed-by: Deepak Gupta --- arch/riscv/kvm/vcpu.c | 3 +++ arch/riscv/kvm/vcpu_sbi_fwft.c | 39 ++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index 542747e2c7f5..d98e379945c3 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -646,6 +646,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) { void *nsh; struct kvm_vcpu_csr *csr = &vcpu->arch.guest_csr; + struct kvm_vcpu_config *cfg = &vcpu->arch.cfg; vcpu->cpu = -1; @@ -671,6 +672,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) csr->vstval = nacl_csr_read(nsh, CSR_VSTVAL); csr->hvip = nacl_csr_read(nsh, CSR_HVIP); csr->vsatp = nacl_csr_read(nsh, CSR_VSATP); + cfg->hedeleg = nacl_csr_read(nsh, CSR_HEDELEG); } else { csr->vsstatus = csr_read(CSR_VSSTATUS); csr->vsie = csr_read(CSR_VSIE); @@ -681,6 +683,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) csr->vstval = csr_read(CSR_VSTVAL); csr->hvip = csr_read(CSR_HVIP); csr->vsatp = csr_read(CSR_VSATP); + cfg->hedeleg = csr_read(CSR_HEDELEG); } } diff --git a/arch/riscv/kvm/vcpu_sbi_fwft.c b/arch/riscv/kvm/vcpu_sbi_fwft.c index fe608bf16558..235a46d553d4 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 (1UL << EXC_LOAD_MISALIGNED | 1UL << EXC_STORE_MISALIGNED) + static const enum sbi_fwft_feature_t kvm_fwft_defined_features[] = { SBI_FWFT_MISALIGNED_EXC_DELEG, SBI_FWFT_LANDING_PAD, @@ -35,7 +37,44 @@ static bool kvm_fwft_is_defined_feature(enum sbi_fwft_feature_t feature) return false; } +static bool kvm_sbi_fwft_misaligned_delegation_supported(struct kvm_vcpu *vcpu) +{ + if (!misaligned_traps_can_delegate()) + return false; + + return true; +} + +static int kvm_sbi_fwft_set_misaligned_delegation(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + unsigned long value) +{ + if (value == 1) + csr_set(CSR_HEDELEG, MIS_DELEG); + else if (value == 0) + csr_clear(CSR_HEDELEG, MIS_DELEG); + else + return SBI_ERR_INVALID_PARAM; + + return SBI_SUCCESS; +} + +static int kvm_sbi_fwft_get_misaligned_delegation(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + unsigned long *value) +{ + *value = (csr_read(CSR_HEDELEG) & MIS_DELEG) != 0; + + return SBI_SUCCESS; +} + static const struct kvm_sbi_fwft_feature features[] = { + { + .id = SBI_FWFT_MISALIGNED_EXC_DELEG, + .supported = kvm_sbi_fwft_misaligned_delegation_supported, + .set = kvm_sbi_fwft_set_misaligned_delegation, + .get = kvm_sbi_fwft_get_misaligned_delegation, + }, }; static struct kvm_sbi_fwft_config *