From nobody Sat Jul 25 22:32:23 2026 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2600F234973 for ; Mon, 13 Jul 2026 01:03:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904633; cv=none; b=oEy4BWnOc7hNGuJoZ/fsq0Q3ZaTIdIUneOXGncXvBEje5c1wMkRWAskkna4Bj4NONjmxXoyTBo8APNzJpEszv7kHc6FiJBao42G9tGE7/6ez56AKd43BXlrcaU/rC4+2NpOFs1KMO6AfNH6Iy6vnsVfqUOH/ub/C3lO/W6ayjR8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904633; c=relaxed/simple; bh=FH8Uhgh1pcvytIsiV9o2sHL0nTuhzb9K7bh5qTOi+jE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QyFIMbLuLk9L6MfQ1+peEiZ2B3K0gln1FPyhmqD+VLGoFXrezzXtAJ4MiVC8ve1Q5l90HvdMscwq2xStZ6bzuE0rANFJCda4odMSgqozXnr5kc4LkWcejPAvXgIiB2HY0b0iCqKUnvA2e7HD4aMA85jLCUu53gzfMgvLVT7Nyxg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=I7nObPai; arc=none smtp.client-ip=209.85.216.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="I7nObPai" Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-385ea3ce80dso2887677a91.2 for ; Sun, 12 Jul 2026 18:03:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783904631; x=1784509431; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=4wtNmoMKQodXeWiOSWDyChURk6Jt6lHeZLiT5bWjNnQ=; b=I7nObPaio6bAQg/MOnpS+vXRwvcEzZK6eTCeJ7BQqIuZGbDevBtUOlixJJbHoFhPDV bTTNdu/3cW2DB6bScE/gUcAAZQVGfrur5rkPDrrvauvXhRb0z0z28dj0ADji0laKQlu3 SxPqLXMuorGXDyhnmEptqrX0upJAOKtxcUQe3EzAORyH6FtyR620ntv8BH0CO7117Zsh ybyfR0Uc/j2sIT16ZigB2Yz0unfzBKPEwaBZjFbxA98nrI/nz099aOwzEJMQr3ik2gbX 50kWp+i8cZf3QTLE8uzS+6PVj9rdq7ZM3Dp0CRZZqfAoJsJ+WngLarxQ/d5B6IZOQUnU QQIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783904631; x=1784509431; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=4wtNmoMKQodXeWiOSWDyChURk6Jt6lHeZLiT5bWjNnQ=; b=iJ5vdFRP72NapDrtz+Vql5CrF7DWzzkUvMeNU6OiTWBN/O1N6VQrhoFxEtffot/9/1 kTib1eafb/8U/322sJ8zDxsHv3S3qCV9flK0ttlWiJRXwtVFpW5MvOOI2ezveNqqhyTm XvakXzAO5HSIhNP9nrP5Vm9oxbUhFSxO1LtspUcqwc81/2Y9dVVAzpaU/07xxXtMaKWs OLVX1Ektq4hPd6GJAaR/kriRmwdT0Ik+yvzzp/zX8MMEYnHtmjdN3kiKe55/mtJwdT7P xSLtaxgG6/bPcUtyt6haEL9kgvPYqwZZL7igfvUXBhAliZhZqDVZP7IjPLBChWrVhoFI 9YIQ== X-Forwarded-Encrypted: i=1; AHgh+RqDKTkeVm0Cgap8OCcTLPzUzJOkRRmdtSx1Py71oxdnzuEdoYioUoYqeCReFw+xzwK48SKiZ/+uSRIuWYs=@vger.kernel.org X-Gm-Message-State: AOJu0Yzx+ZiPbReg3xcHJph8EbGB6VN7nghvTAGdOJlLnNsiUmRImTDs VIi1mkzJ4FhpsLgRMskD+n8HAkotTLyU5W8GtrsW3CFaY/7u6Wc8ryvt X-Gm-Gg: AfdE7cmeJQ3mbcEN9cmq/Mb34xEUDcS+mgRte1tt6W6FnHCpwEFjyPydYS3QAXvKiMA DnGYKWcLApfv6N3+jLdpFL4oH1DVmEctOPnbc4QHUv/lm+0WMM3J3J3n2FEg+WmeiJOpmo7Uqku bmwRB6zs4f46qbl/ewhRnXsMSQ9crcM30uMIGIUnfUizMwc5FX5kZPsh+Ih3uaLcOQrhS8JznAt OO/ghllzLQrH/vPa6MhGfmekzq0x9myVXrnZCITF6pL8bm1FW4Gkvg4zmAHHVSLxq0KEkt7D9cv ob2vjYJi0FVmCE1etOFW6YPhsAZq9qu0yW2K4GQqd78PNUKxgfnUZl0FNC4HQ71Z6CltbuTg8Gy X+gA86nfB4pWaFUIQwd/n4tG8ShRT0ZHepoRQi6v1pQxbMLEmjPBUqLKN4HkYAuy/L92/Z59Auz Ciqk5OP/0tIo0= X-Received: by 2002:a17:90b:47:b0:37e:b6a:6cdf with SMTP id 98e67ed59e1d1-38dc77ee830mr7343814a91.20.1783904631435; Sun, 12 Jul 2026 18:03:51 -0700 (PDT) Received: from localhost ([121.250.214.124]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a55a47286sm5549380a91.10.2026.07.12.18.03.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2026 18:03:51 -0700 (PDT) From: Inochi Amaoto To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Anup Patel , Atish Patra , Paolo Bonzini , Shuah Khan , Andy Chiu , Charlie Jenkins , Deepak Gupta , Thomas Huth , Inochi Amaoto , Sergey Matyukevich Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org, Yixun Lan , Longbin Li , Quan Zhou Subject: [PATCH v6 1/8] RISC-V: KVM: Add support for Svadu FWFT features Date: Mon, 13 Jul 2026 09:02:54 +0800 Message-ID: <20260713010302.303278-2-inochiama@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260713010302.303278-1-inochiama@gmail.com> References: <20260713010302.303278-1-inochiama@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Hardware updating of PTE A/D bits is controlled through ADUE bit in henvcfg Expose the feature only if both Svadu and Svade are supported for VS-mode. Allow the VMM to enable/disable this feature by change the ISA extension state in the guest. Assisted-by: YuanSheng:claude-4.7-opus Co-developed-by: Quan Zhou Signed-off-by: Quan Zhou Signed-off-by: Inochi Amaoto --- arch/riscv/include/uapi/asm/kvm.h | 1 + arch/riscv/kvm/vcpu_sbi_fwft.c | 76 +++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/as= m/kvm.h index 504e73305343..7bbea8812d92 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -240,6 +240,7 @@ struct kvm_riscv_sbi_fwft_feature { struct kvm_riscv_sbi_fwft { struct kvm_riscv_sbi_fwft_feature misaligned_deleg; struct kvm_riscv_sbi_fwft_feature pointer_masking; + struct kvm_riscv_sbi_fwft_feature pte_ad_hw_updating; }; =20 /* If you need to interpret the index values, here is the key: */ diff --git a/arch/riscv/kvm/vcpu_sbi_fwft.c b/arch/riscv/kvm/vcpu_sbi_fwft.c index ab39ac464ffd..4d474a439b29 100644 --- a/arch/riscv/kvm/vcpu_sbi_fwft.c +++ b/arch/riscv/kvm/vcpu_sbi_fwft.c @@ -94,6 +94,45 @@ static bool kvm_fwft_is_defined_feature(enum sbi_fwft_fe= ature_t feature) return false; } =20 +static void kvm_sbi_fwft_env_flag_reset_helper(struct kvm_vcpu *vcpu, + u64 flag) +{ + vcpu->arch.cfg.henvcfg &=3D ~flag; +} + +static long kvm_sbi_fwft_env_flag_set_helper(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + bool one_reg_access, + unsigned long value, u64 flag) +{ + struct kvm_vcpu_config *cfg =3D &vcpu->arch.cfg; + + if (value =3D=3D 0) + cfg->henvcfg &=3D ~flag; + else if (value =3D=3D 1) + cfg->henvcfg |=3D flag; + else + return SBI_ERR_INVALID_PARAM; + + if (!one_reg_access) { + csr_write(CSR_HENVCFG, vcpu->arch.cfg.henvcfg); + if (IS_ENABLED(CONFIG_32BIT)) + csr_write(CSR_HENVCFGH, vcpu->arch.cfg.henvcfg >> 32); + } + + return SBI_SUCCESS; +} + +static long kvm_sbi_fwft_env_flag_get_helper(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + bool one_reg_access, + unsigned long *value, u64 flag) +{ + *value =3D (vcpu->arch.cfg.henvcfg & flag) =3D=3D flag; + + return SBI_SUCCESS; +} + static bool kvm_sbi_fwft_misaligned_delegation_supported(struct kvm_vcpu *= vcpu) { return misaligned_traps_can_delegate(); @@ -137,6 +176,34 @@ static long kvm_sbi_fwft_get_misaligned_delegation(str= uct kvm_vcpu *vcpu, return SBI_SUCCESS; } =20 +static bool kvm_sbi_fwft_pte_ad_hw_updating_supported(struct kvm_vcpu *vcp= u) +{ + return riscv_isa_extension_available(vcpu->arch.isa, SVADU) && + riscv_isa_extension_available(vcpu->arch.isa, SVADE); +} + +static void kvm_sbi_fwft_reset_pte_ad_hw_updating(struct kvm_vcpu *vcpu) +{ + if (kvm_sbi_fwft_pte_ad_hw_updating_supported(vcpu)) + kvm_sbi_fwft_env_flag_reset_helper(vcpu, ENVCFG_ADUE); +} + +static long kvm_sbi_fwft_set_pte_ad_hw_updating(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + bool one_reg_access, unsigned long value) +{ + return kvm_sbi_fwft_env_flag_set_helper(vcpu, conf, one_reg_access, + value, ENVCFG_ADUE); +} + +static long kvm_sbi_fwft_get_pte_ad_hw_updating(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + bool one_reg_access, unsigned long *value) +{ + return kvm_sbi_fwft_env_flag_get_helper(vcpu, conf, one_reg_access, + value, ENVCFG_ADUE); +} + #ifndef CONFIG_32BIT =20 static bool try_to_set_pmm(unsigned long value) @@ -246,6 +313,15 @@ static const struct kvm_sbi_fwft_feature features[] = =3D { .set =3D kvm_sbi_fwft_set_misaligned_delegation, .get =3D kvm_sbi_fwft_get_misaligned_delegation, }, + { + .id =3D SBI_FWFT_PTE_AD_HW_UPDATING, + .first_reg_num =3D offsetof(struct kvm_riscv_sbi_fwft, pte_ad_hw_updatin= g.enable) / + sizeof(unsigned long), + .supported =3D kvm_sbi_fwft_pte_ad_hw_updating_supported, + .reset =3D kvm_sbi_fwft_reset_pte_ad_hw_updating, + .set =3D kvm_sbi_fwft_set_pte_ad_hw_updating, + .get =3D kvm_sbi_fwft_get_pte_ad_hw_updating, + }, #ifndef CONFIG_32BIT { .id =3D SBI_FWFT_POINTER_MASKING_PMLEN, --=20 2.55.0 From nobody Sat Jul 25 22:32:23 2026 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 34BC82192FA for ; Mon, 13 Jul 2026 01:03:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904636; cv=none; b=QkVziH4tmXm4SimjwfKq75Frn3vLSr22/bMN5wUfbaWY/7XoWyrTgGu5+K+sEb0gx7MONKxyVuRm05B/UrMjPeWKh5PoFzkKJ9T+0bh8UN/0VROFQmltgWYXXEWvZQVnOnkCtLHNyRbXm+jCgMsUKu+lnEsa3ucn/qly+utGVJY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904636; c=relaxed/simple; bh=jKX7yCJzLXTBm7/RoRGPTwNXXmYDIrIjrn7OXhM9jJQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Upl2DbAsiMTuONLk3J0bW1LZUaOvrqAmobUluyJCIDNH+59G4YBuyKbW7qzo0Gpfbm8TNBPyW26v+HXU8gVKcwdrOVtWXPtO639ZzTVrsxmB1e9feMBwqgiDG4ZYoy36aVIIQfueCUY2KadoT60gG82RhgtcMVnmQpz2vnmAB0Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Z8xM5z2e; arc=none smtp.client-ip=209.85.214.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Z8xM5z2e" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2caed617615so27573765ad.3 for ; Sun, 12 Jul 2026 18:03:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783904634; x=1784509434; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=MI4l7nifRnfxUSWJkRHmALVeDUyVcPjbpLqiu+zme2g=; b=Z8xM5z2el85KExbg2nd2ZXUOuGVt9dtLL+uub/EEgQ3U/bge92iNKmKh/eMNmN3EO8 nV6E0bixZZUYhICn5DeJ65RHLwh2GlF2ZpbZgMsxnueCr8Wez4acScnjgbANWmS1TJyU zwuRy95S42ufRymLRdiBJQy/idVt4xw5otYOWB+8yhb0n8+fW2bNi4XI76aFKd+zIIYV c+TP9OzzwdFVEszAJJDB3cm45N2vDo34ycU3rmWjV3+lER/gDF6Pr+xSuaKNXD7onXA0 Pwlki9zXqrzRKX1Pg9Fwfxgwb24qRsLNxgACqzCHcU/YwycrA223TUxYDi67aIy2oZji 4KIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783904634; x=1784509434; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=MI4l7nifRnfxUSWJkRHmALVeDUyVcPjbpLqiu+zme2g=; b=oDPSNxhTunfOGpsBJ92mG+QTOX7KwYI4jNPhdqE+FenUcpAjaWyOrYkIIUWThhJnue FPOD2THIaHAx0TLs/4c7+vsleqaO4Cmd2IpKAXE3x1M8S6nDefgtZ5Vv7pRbQ4yFjI0A rnmqXfcg/llwah8x7vQByM3EHSBv7jeYx+4hDCeeEE1Z7ds3X3u04KhmSr+L4LKMPdmh Dx7YfXW/H1YtiDXuKX3c07HBgGwhCUeaDCQHA3BDkyZWdrUcus+aFhOIOGXlm9XeSFJJ a6wZ4zP+OuW7YHZnT1j5imnzIR+g413wnmr/gYdMhsBtz1kj9CQW3hn8CoOK73WzfgaP T9jg== X-Forwarded-Encrypted: i=1; AHgh+Rr1EDnmuUP2V3jt3bq7l0KTM33Vs19pSItF3lY/oNkEYRnDJ/ww4qXfMe8ulNa5ptGCaQQq+BBi5HwsHgo=@vger.kernel.org X-Gm-Message-State: AOJu0YzA8xGs+P46OhqU7iviJI6LFotE75+p2oW+enMfXmNSE+Tl9SIu WYRvRb3O+H8Q74WSgYEGNAUTwzf6yZ9T8r2kS6soYZQiYpejlMQ9i6Gf X-Gm-Gg: AfdE7cnrZitBHmGsW7aFAktFKsAHCCUPORXG9hk3LPtlRBLUSVZ0gK/vkS67eVSXcUR j1EVKN1hpPUsywZvJCwPvW42pj9gXnCeEJVQgV8fbqXFzweTj4FzfD1/R6GtYHmDN/e3WeaJp4i pLb/t2Z6D7NPi3MzQwWkoIwsQq2IT7kX10NC1GlKxugwtXAwo1Yb2KegWcGyq8sNFaBUfNalG7p YR20lb0JTn9IwUrZML9WAzvF/zXVkUbMxHqLC7sf/1t+5ncGBwXVH0JBbG5r/jXwsOsKC4AAsvR eHx4dQTOSF8EHNYfxyg33g2j/Oil144hGDPoYX9UGvd0bJUkSv1XchttkS36KI4u50rN7nKsH7I ACrovvjbPT7c6VAwvyVOQCnvXAgILiobC2voPnzQas7LcaWyO7XvKn76qOW7yrGU1/Z9XjpLifT INsQVfo/NfNG4= X-Received: by 2002:a17:902:d546:b0:2c9:cf62:6f61 with SMTP id d9443c01a7336-2ce9eac212bmr74630405ad.17.1783904634295; Sun, 12 Jul 2026 18:03:54 -0700 (PDT) Received: from localhost ([121.250.214.124]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9bf737bsm89409935ad.19.2026.07.12.18.03.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2026 18:03:54 -0700 (PDT) From: Inochi Amaoto To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Anup Patel , Atish Patra , Paolo Bonzini , Shuah Khan , Andy Chiu , Charlie Jenkins , Deepak Gupta , Thomas Huth , Inochi Amaoto , Sergey Matyukevich Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org, Yixun Lan , Longbin Li , Quan Zhou Subject: [PATCH v6 2/8] KVM: riscv: selftests: add Svadu FWFT extension to get-reg-list test Date: Mon, 13 Jul 2026 09:02:55 +0800 Message-ID: <20260713010302.303278-3-inochiama@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260713010302.303278-1-inochiama@gmail.com> References: <20260713010302.303278-1-inochiama@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The KVM RISC-V allows Svadu FWFT for Guest/VM so add this extension to get-reg-list test. Assisted-by: YuanSheng:claude-4.7-opus Co-developed-by: Quan Zhou Signed-off-by: Quan Zhou Signed-off-by: Inochi Amaoto --- .../selftests/kvm/riscv/get-reg-list.c | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tools/testing/selftests/kvm/riscv/get-reg-list.c b/tools/testi= ng/selftests/kvm/riscv/get-reg-list.c index cb86cb6b3635..94e33b2ee796 100644 --- a/tools/testing/selftests/kvm/riscv/get-reg-list.c +++ b/tools/testing/selftests/kvm/riscv/get-reg-list.c @@ -745,6 +745,9 @@ static const char *sbi_fwft_id_to_str(__u64 reg_off) case 3: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(point= er_masking.enable)"; case 4: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(point= er_masking.flags)"; case 5: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(point= er_masking.value)"; + case 6: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(pte_a= d_hw_updating.enable)"; + case 7: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(pte_a= d_hw_updating.flags)"; + case 8: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(pte_a= d_hw_updating.value)"; } return strdup_printf("KVM_REG_RISCV_SBI_FWFT | %lld /* UNKNOWN */", reg_o= ff); } @@ -944,6 +947,13 @@ static __u64 sbi_fwft_pointer_masking_regs[] =3D { KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_STATE | KVM_REG_RI= SCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(pointer_masking.value), }; =20 +static __u64 sbi_fwft_pte_ad_hw_updating_regs[] =3D { + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISC= V_SBI_SINGLE | KVM_RISCV_SBI_EXT_FWFT, + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_STATE | KVM_REG_RI= SCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(pte_ad_hw_updating.enable), + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_STATE | KVM_REG_RI= SCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(pte_ad_hw_updating.flags), + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_STATE | KVM_REG_RI= SCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(pte_ad_hw_updating.value), +}; + static __u64 zicbom_regs[] =3D { KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_CONFIG | KVM_REG_RISCV= _CONFIG_REG(zicbom_block_size), KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_ISA_EXT | KVM_REG_RISC= V_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZICBOM, @@ -1259,6 +1269,16 @@ static struct vcpu_reg_list config_sbi_fwft_pointer_= masking =3D { }, }; =20 +static struct vcpu_reg_list config_sbi_fwft_pte_ad_hw_updating =3D { + .sublists =3D { + SUBLIST_BASE, + SUBLIST_ISA(svade, SVADE), + SUBLIST_ISA(svadu, SVADU), + SUBLIST_SBI(fwft_pte_ad_hw_updating, FWFT), + {0}, + }, +}; + struct vcpu_reg_list *vcpu_configs[] =3D { &config_sbi_base, &config_sbi_sta, @@ -1268,6 +1288,7 @@ struct vcpu_reg_list *vcpu_configs[] =3D { &config_sbi_mpxy, &config_sbi_fwft_misaligned_deleg, &config_sbi_fwft_pointer_masking, + &config_sbi_fwft_pte_ad_hw_updating, &config_aia, &config_fp_f, &config_fp_d, --=20 2.55.0 From nobody Sat Jul 25 22:32:23 2026 Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B9457175A9D for ; Mon, 13 Jul 2026 01:03:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904640; cv=none; b=lVACNvyUNrbjqwRHYmefDLlyh3wCQBDwLRoYn+KXmnAwCJhJBsp6pxtq4lUIc11PkVkp+3hNIOrHapYQOKcTuD/vPjWBrg3VnGsT0WnC/wh8RFzZqBKfdQoF0BjNV9PoKk4HT/ZBj0OYXM74IyD+xC5I5n4DsHxrNWYhtKTeGVs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904640; c=relaxed/simple; bh=BtT0ls6YmM9d9nGGoTkQaPA0Kw5pw1Vw17vs5G6vw7o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VVlKRmsWFWJhFs/abDsLQDHLCaYgCK7w2Rgo5yDQJt4P05UvULln6eW/lrkX1PAPsvHEZODG6ZLCrUTfAjNjE2hyAgzS+B4dTcw8SBjBgGWe4119p3AeiTmcKIN94L+RT1TKnlHpsViIkYhpUjqUoTOU/zUcVofVLXJRv36xwgM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UZ+SJFoC; arc=none smtp.client-ip=209.85.215.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UZ+SJFoC" Received: by mail-pg1-f178.google.com with SMTP id 41be03b00d2f7-c9c26a5fb98so1505510a12.0 for ; Sun, 12 Jul 2026 18:03:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783904637; x=1784509437; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=rwFDdkksbt790fLoy4tClBNp4x5JbRI/xOADu+E9kr0=; b=UZ+SJFoCP7d6Avl9rGmaPJ7E7wong/iaLX+vKvIUfaXE9Td28SM83f8Iq5IDPxmtMp JtF1nHbZvRoa/hnT70limYeT6TMTXpINmJcGJuMSv3X3ys31gORnZxydPCSiL3GI9wrR i3HuB19lFkbtt2zAtglWuR81VOmH8wgQsBV4ObkScZeYTgiygmVQ8HFTxGSI1lyzgzMx 1VgsgNd0DCIy6VywpBCL/SB18mhH0xvL/yikqdhJRsyIHIfd9tOipEDk4xuro1WvYEH7 lw+roRqe77HvCi25A5DxozP4tGYI4n2PgxnoGISXkMuLvOK9rnVc7sDS1ThEeMLYGkE0 /ZbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783904637; x=1784509437; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=rwFDdkksbt790fLoy4tClBNp4x5JbRI/xOADu+E9kr0=; b=ghpdSTAI0pItVoZgCA/1Sa/WExf2X9gQQgohYcOAKXtP3YlcRg9hU6ZGZZ7/RYjUCq qBbwFEXTNrjyAlMxMG28+xLu05n4gzf9AE/JbU2A+99U+OfVtF0Zg9vJASiV2f3HZOpz 8DhBqRn095EuFlO9knha0RxH04o2DZiNrTfwnU7AVPay95iYZHZhcdX2MZkyoz/0MKT8 iIOuEzbYfPFdBuSvH2tWUL+7PsUoOB/uCPXfsxjwp2MBHnMyJGxsIVbc2m3ul0FGhrEj zbBsFRBQIMvyxVg+IUY/CybE7Qp7o+ePbE4BEfJRbIftzd2pNq/oF5svN0Y1TPEY/Spj fDNw== X-Forwarded-Encrypted: i=1; AHgh+Rr3IiwHn2zh7gLvl2E4v7DoaDB8Kf0XQuuZwHiJbLMxIBIjTSTPvvZWo+RixrNgSal+cN1v9v+4xiDtPNs=@vger.kernel.org X-Gm-Message-State: AOJu0YySMDYghx/oJGGCZQ4aT8/+vINUv4rqmNyVEPJx9p8CJ9TZOnUI 0Jgl1zJ4bE8MAlt+IBKXwM8ObB42ByHQrSN07MRCa9uHBsc2aildkYY2 X-Gm-Gg: AfdE7clEZYXjNXSeTfdZ1LBUN1LKpmLxgwmWCjKh3taGkkOEQy91df8uzryip4qx4Rl h99ypaPF334j/Rck/bI1/o3R5AC+wgY7Yg/wGZS64MpVlXAlgZZ+1a5W/tO91rM88/dQPQdW51x iy6/Nc6U/1G/kIO/+R/UVjiN0kDBeyjpb0SN0veeFzfZa7lpw93FtV7BcIJb9cEH1Vgy6SwO7yr G5ReMJ//N1uZfM5iqKmsQWzQsv+AEwzTSPjVerAa74gFRI80+2IJ3EZI9loMwDZnWUIv8FdzOG2 nNp5bR1gY945RdYdf9VDEOhjA+IsrZy0BlFupn9seDCycKHWNMYqg/PJS9KyCeD/Wb2lLopKukm hLI4d/jzpBTneBtAKozilEp2s4/BEJ7OJyfGxd1pJA8XvqHcgqbPTT9Zm/HOcp7m5SqqoN/dGg4 x+Umg7NdRe9Bo= X-Received: by 2002:a05:6a20:431c:b0:3c0:9acb:3fd with SMTP id adf61e73a8af0-3c112e0b020mr6533016637.34.1783904637089; Sun, 12 Jul 2026 18:03:57 -0700 (PDT) Received: from localhost ([121.250.214.124]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ca5b3643cd6sm7790717a12.26.2026.07.12.18.03.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2026 18:03:56 -0700 (PDT) From: Inochi Amaoto To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Anup Patel , Atish Patra , Paolo Bonzini , Shuah Khan , Andy Chiu , Charlie Jenkins , Deepak Gupta , Thomas Huth , Inochi Amaoto , Sergey Matyukevich Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org, Yixun Lan , Longbin Li , Quan Zhou Subject: [PATCH v6 3/8] RISC-V: KVM: Allow Zicfiss/Zicfilp extensions for Guest/VM Date: Mon, 13 Jul 2026 09:02:56 +0800 Message-ID: <20260713010302.303278-4-inochiama@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260713010302.303278-1-inochiama@gmail.com> References: <20260713010302.303278-1-inochiama@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extend the KVM ISA extension array to allow KVM userspace to detect and enable Zicfiss/Zicfilp extensions for Guest/VM. Assisted-by: YuanSheng:claude-4.7-opus Co-developed-by: Quan Zhou Signed-off-by: Quan Zhou Signed-off-by: Inochi Amaoto --- arch/riscv/include/uapi/asm/kvm.h | 2 ++ arch/riscv/kvm/isa.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/as= m/kvm.h index 7bbea8812d92..a27de850fa4c 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -199,6 +199,8 @@ enum KVM_RISCV_ISA_EXT_ID { KVM_RISCV_ISA_EXT_ZCLSD, KVM_RISCV_ISA_EXT_ZILSD, KVM_RISCV_ISA_EXT_ZALASR, + KVM_RISCV_ISA_EXT_ZICFILP, + KVM_RISCV_ISA_EXT_ZICFISS, KVM_RISCV_ISA_EXT_MAX, }; =20 diff --git a/arch/riscv/kvm/isa.c b/arch/riscv/kvm/isa.c index 1132d909cc25..9852a91fdecc 100644 --- a/arch/riscv/kvm/isa.c +++ b/arch/riscv/kvm/isa.c @@ -65,6 +65,8 @@ static const unsigned long kvm_isa_ext_arr[] =3D { KVM_ISA_EXT_ARR(ZICBOP), KVM_ISA_EXT_ARR(ZICBOZ), KVM_ISA_EXT_ARR(ZICCRSE), + KVM_ISA_EXT_ARR(ZICFILP), + KVM_ISA_EXT_ARR(ZICFISS), KVM_ISA_EXT_ARR(ZICNTR), KVM_ISA_EXT_ARR(ZICOND), KVM_ISA_EXT_ARR(ZICSR), --=20 2.55.0 From nobody Sat Jul 25 22:32:23 2026 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B3E972253EB for ; Mon, 13 Jul 2026 01:04:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904642; cv=none; b=P31ufZt+ohd6a/+5FKu6LJXtGSgzWWUyGxPGUaiSJSUliPNv13zHiU63V0sH4FJd1zbBF8JaxbwS40nScqvaU08RJbmA5Wl+kEvdAlyFPNC4WNrTtVkX5Pg6N67DvoDdXTrT0A3qld2MsovDKefYNWXL0vWhaQhESECu26d4KqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904642; c=relaxed/simple; bh=1TOAMox0R4f4M8h31Gdp1/PmYS8QarQWN5OMTFH1paU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dhHZz52cx5BSQligRG25+ZPWMpMQP8h12FD7vH/pDSRWgubYdE31xwnU080AEVbmVi0sZ4TtSIAbVSNuDAkweQ1oTkXBq2lP2W6XA7repTfeFAVUtAqCszMhy5pCcouKzsOx5fSM0n+pl7c1ZSreFcaqceOWmkvcl30l/3hBKkY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DcoEzFK9; arc=none smtp.client-ip=209.85.215.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DcoEzFK9" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-c981c2c37cbso1521767a12.0 for ; Sun, 12 Jul 2026 18:04:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783904640; x=1784509440; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9y30ERfh8jZXt371ovIH8Ihu+zosp/a2nmR6ZkJ+0tQ=; b=DcoEzFK9amuTtoK2xEGpUcwcl3ByleANFUna2vktKqlyu5Ta3CNM9V7SwLTnSmp67V iims0L1gTX8Ni+NukdaP8Uu4NYtdEQalDVrow9D25KQh/3KPADv05em2Q7GyS0uxeXDY bt+luFdpcVjxHMGMxU4pXI7QTZgrYxQ4s/qTU9OQ7LwHWCyc5jil8+NsJCr4S0vWD+7m +X71b06ZW17p+Hrdy1pchEx4YdtvaNsB+xzwunwpx4UUlKYc6L3nEq1scMUzGUWFXVha Pq37pnL0716X2Wj/reUEJEHskpUJW5NhokNY2Br53CAWnFrVbDENbesWlfP6gyJOfjn6 Jd7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783904640; x=1784509440; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=9y30ERfh8jZXt371ovIH8Ihu+zosp/a2nmR6ZkJ+0tQ=; b=lkZnZqzPjQ6ckRXm8xoDvXnvqEPJUw4ohdefiJxYf5DkVYCFXztwSwH6t8PS7TXcG5 4kwTdTuHCnfoTxoc/UalmbqcVFbTWtMFFmhyhq0yK450V/oAaZEcwaSEXxWNf+gE3YhZ xJ8NfBE82W/Aesj45Y1uRvj6mo3M0QzlRq8WiMX8G9YGveg6/16sE8pu2Zqd1WlFJnHJ AoIsPxhxQFz/l1QOmdpnpE35pOmIi91tsLC7lYV2445pjLleh+Ecx7vAU45+VeUti6y+ HoITYIj590nsXpr3JTPhdWBZ1dolpoh4JJ2ETVOLLVcylfpDjDHmtcgD8kn+bFwftDos 6Jsw== X-Forwarded-Encrypted: i=1; AHgh+RqpiOY+L1z6NnvalKXBiOrOfBt8g02bdw/qbOC+VtuquG1is2XvT6pFNVRk3bJCoaSJYycuu8M3w3jJPCU=@vger.kernel.org X-Gm-Message-State: AOJu0YwvckSPBoFSl4Io+eIBAvTpv4GSVu5kYYgjV6sYlK3df+ref8/4 VzERtrOMeKgz0ZTDeAzd3ZP9zT4GJp9dH7NxeG1UdD4rwu+/m5YjR6sl X-Gm-Gg: AfdE7cnoooyIx0iN+shaGCdDqAqrVt05Jtbu4xm5ToiRUJiZ1veT9ICgYeLwvjD/PGm LNtd6ENXcIYrrXtQeGvB6IGuKZ3s14VGCroiAiab7F5gnv+gVxCJ9SCgwtord+GazRnVJuIYeL9 pEGnFKM8ZA5IbHLSu90lJXZOIaH+dw/45ZffRUKAVYOJx2zQpKbc5ME5IOTiXmza6aLZ+mCXsLb XPgjukXXUkGeuUQOPteRDaX7jy7victD4GsPdQ1DsSJ5u6AxnrdyGY8tL3uVs0Z7ha+rk4gatY6 K8OiCMa4kcNfiFCMDxPISWATQ0SthINbm2PukWxFtFUZXCq6El0ZovRBFTIsLP0GQRorqmNNfMO /Lruagbn7lwcSANG4hlVra/xRuC9uO6Lzgu/GBIY0HnZ3cnLDxIHLt7AqESfskrL2jAjnA3qqlS ox1rwgx4xv7Ic= X-Received: by 2002:a05:6a20:9150:b0:3c0:9c18:d5a9 with SMTP id adf61e73a8af0-3c11108e034mr7947303637.70.1783904639839; Sun, 12 Jul 2026 18:03:59 -0700 (PDT) Received: from localhost ([121.250.214.124]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ca5b3a2e420sm7735206a12.29.2026.07.12.18.03.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2026 18:03:59 -0700 (PDT) From: Inochi Amaoto To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Anup Patel , Atish Patra , Paolo Bonzini , Shuah Khan , Andy Chiu , Charlie Jenkins , Deepak Gupta , Thomas Huth , Inochi Amaoto , Sergey Matyukevich Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org, Yixun Lan , Longbin Li Subject: [PATCH v6 4/8] RISC-V: KVM: Add ssp context save/restore Date: Mon, 13 Jul 2026 09:02:57 +0800 Message-ID: <20260713010302.303278-5-inochiama@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260713010302.303278-1-inochiama@gmail.com> References: <20260713010302.303278-1-inochiama@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add ssp context save/restore for guest VCPUs and also add it to the ONE_REG interface to allow its access from user space. Signed-off-by: Inochi Amaoto --- arch/riscv/include/asm/kvm_host.h | 7 ++++ arch/riscv/include/uapi/asm/kvm.h | 8 ++++ arch/riscv/kvm/vcpu.c | 7 ++++ arch/riscv/kvm/vcpu_onereg.c | 68 ++++++++++++++++++++++++++++++- 4 files changed, 88 insertions(+), 2 deletions(-) diff --git a/arch/riscv/include/asm/kvm_host.h b/arch/riscv/include/asm/kvm= _host.h index 60017ceec9d2..e5ed3b0e5a55 100644 --- a/arch/riscv/include/asm/kvm_host.h +++ b/arch/riscv/include/asm/kvm_host.h @@ -163,6 +163,10 @@ struct kvm_vcpu_smstateen_csr { unsigned long sstateen0; }; =20 +struct kvm_vcpu_zicfiss_csr { + unsigned long ssp; +}; + struct kvm_vcpu_reset_state { spinlock_t lock; unsigned long pc; @@ -203,6 +207,9 @@ struct kvm_vcpu_arch { /* CPU Smstateen CSR context of Guest VCPU */ struct kvm_vcpu_smstateen_csr smstateen_csr; =20 + /* CPU Zicfiss CSR context of Guest VCPU */ + struct kvm_vcpu_zicfiss_csr zicfiss_csr; + /* CPU reset state of Guest VCPU */ struct kvm_vcpu_reset_state reset_state; =20 diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/as= m/kvm.h index a27de850fa4c..fd4c81697617 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -102,6 +102,11 @@ struct kvm_riscv_smstateen_csr { unsigned long sstateen0; }; =20 +/* Zicfiss CSR for KVM_GET_ONE_REG and KVM_SET_ONE_REG */ +struct kvm_riscv_zicfiss_csr { + unsigned long ssp; +}; + /* TIMER registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */ struct kvm_riscv_timer { __u64 frequency; @@ -266,12 +271,15 @@ struct kvm_riscv_sbi_fwft { #define KVM_REG_RISCV_CSR_GENERAL (0x0 << KVM_REG_RISCV_SUBTYPE_SHIFT) #define KVM_REG_RISCV_CSR_AIA (0x1 << KVM_REG_RISCV_SUBTYPE_SHIFT) #define KVM_REG_RISCV_CSR_SMSTATEEN (0x2 << KVM_REG_RISCV_SUBTYPE_SHIFT) +#define KVM_REG_RISCV_CSR_ZICFISS (0x3 << KVM_REG_RISCV_SUBTYPE_SHIFT) #define KVM_REG_RISCV_CSR_REG(name) \ (offsetof(struct kvm_riscv_csr, name) / sizeof(unsigned long)) #define KVM_REG_RISCV_CSR_AIA_REG(name) \ (offsetof(struct kvm_riscv_aia_csr, name) / sizeof(unsigned long)) #define KVM_REG_RISCV_CSR_SMSTATEEN_REG(name) \ (offsetof(struct kvm_riscv_smstateen_csr, name) / sizeof(unsigned long)) +#define KVM_REG_RISCV_CSR_ZICFISS_REG(name) \ + (offsetof(struct kvm_riscv_zicfiss_csr, name) / sizeof(unsigned long)) =20 /* Timer registers are mapped as type 4 */ #define KVM_REG_RISCV_TIMER (0x04 << KVM_REG_RISCV_TYPE_SHIFT) diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index cf6e231e76e2..acdb12fcdb69 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -63,6 +63,7 @@ static void kvm_riscv_vcpu_context_reset(struct kvm_vcpu = *vcpu, memset(cntx, 0, sizeof(*cntx)); memset(csr, 0, sizeof(*csr)); memset(&vcpu->arch.smstateen_csr, 0, sizeof(vcpu->arch.smstateen_csr)); + memset(&vcpu->arch.zicfiss_csr, 0, sizeof(vcpu->arch.zicfiss_csr)); =20 /* Restore datap as it's not a part of the guest context. */ cntx->vector.datap =3D vector_datap; @@ -720,6 +721,7 @@ static void kvm_riscv_update_hvip(struct kvm_vcpu *vcpu) =20 static __always_inline void kvm_riscv_vcpu_swap_in_guest_state(struct kvm_= vcpu *vcpu) { + struct kvm_vcpu_zicfiss_csr *zicficsr =3D &vcpu->arch.zicfiss_csr; struct kvm_vcpu_smstateen_csr *smcsr =3D &vcpu->arch.smstateen_csr; struct kvm_vcpu_csr *csr =3D &vcpu->arch.guest_csr; =20 @@ -727,10 +729,13 @@ static __always_inline void kvm_riscv_vcpu_swap_in_gu= est_state(struct kvm_vcpu * vcpu->arch.host_senvcfg =3D csr_swap(CSR_SENVCFG, csr->senvcfg); if (riscv_has_extension_unlikely(RISCV_ISA_EXT_SMSTATEEN)) vcpu->arch.host_sstateen0 =3D csr_swap(CSR_SSTATEEN0, smcsr->sstateen0); + if (riscv_has_extension_unlikely(RISCV_ISA_EXT_ZICFISS)) + csr_write(CSR_SSP, zicficsr->ssp); } =20 static __always_inline void kvm_riscv_vcpu_swap_in_host_state(struct kvm_v= cpu *vcpu) { + struct kvm_vcpu_zicfiss_csr *zicficsr =3D &vcpu->arch.zicfiss_csr; struct kvm_vcpu_smstateen_csr *smcsr =3D &vcpu->arch.smstateen_csr; struct kvm_vcpu_csr *csr =3D &vcpu->arch.guest_csr; =20 @@ -738,6 +743,8 @@ static __always_inline void kvm_riscv_vcpu_swap_in_host= _state(struct kvm_vcpu *v csr->senvcfg =3D csr_swap(CSR_SENVCFG, vcpu->arch.host_senvcfg); if (riscv_has_extension_unlikely(RISCV_ISA_EXT_SMSTATEEN)) smcsr->sstateen0 =3D csr_swap(CSR_SSTATEEN0, vcpu->arch.host_sstateen0); + if (riscv_has_extension_unlikely(RISCV_ISA_EXT_ZICFISS)) + zicficsr->ssp =3D csr_swap(CSR_SSP, 0); } =20 /* diff --git a/arch/riscv/kvm/vcpu_onereg.c b/arch/riscv/kvm/vcpu_onereg.c index bb920e8923c9..dd9519438546 100644 --- a/arch/riscv/kvm/vcpu_onereg.c +++ b/arch/riscv/kvm/vcpu_onereg.c @@ -355,6 +355,44 @@ static int kvm_riscv_vcpu_smstateen_get_csr(struct kvm= _vcpu *vcpu, return 0; } =20 +static inline int kvm_riscv_vcpu_zicfiss_set_csr(struct kvm_vcpu *vcpu, + unsigned long reg_num, + unsigned long reg_val) +{ + struct kvm_vcpu_zicfiss_csr *csr =3D &vcpu->arch.zicfiss_csr; + unsigned long regs_max =3D sizeof(struct kvm_vcpu_zicfiss_csr) / + sizeof(unsigned long); + + if (!riscv_isa_extension_available(vcpu->arch.isa, ZICFISS)) + return -ENOENT; + if (reg_num >=3D regs_max) + return -ENOENT; + + reg_num =3D array_index_nospec(reg_num, regs_max); + + ((unsigned long *)csr)[reg_num] =3D reg_val; + return 0; +} + +static int kvm_riscv_vcpu_zicfiss_get_csr(struct kvm_vcpu *vcpu, + unsigned long reg_num, + unsigned long *out_val) +{ + struct kvm_vcpu_zicfiss_csr *csr =3D &vcpu->arch.zicfiss_csr; + unsigned long regs_max =3D sizeof(struct kvm_vcpu_zicfiss_csr) / + sizeof(unsigned long); + + if (!riscv_isa_extension_available(vcpu->arch.isa, ZICFISS)) + return -ENOENT; + if (reg_num >=3D regs_max) + return -ENOENT; + + reg_num =3D array_index_nospec(reg_num, regs_max); + + *out_val =3D ((unsigned long *)csr)[reg_num]; + return 0; +} + static int kvm_riscv_vcpu_get_reg_csr(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) { @@ -381,6 +419,9 @@ static int kvm_riscv_vcpu_get_reg_csr(struct kvm_vcpu *= vcpu, case KVM_REG_RISCV_CSR_SMSTATEEN: rc =3D kvm_riscv_vcpu_smstateen_get_csr(vcpu, reg_num, ®_val); break; + case KVM_REG_RISCV_CSR_ZICFISS: + rc =3D kvm_riscv_vcpu_zicfiss_get_csr(vcpu, reg_num, ®_val); + break; default: rc =3D -ENOENT; break; @@ -423,6 +464,9 @@ static int kvm_riscv_vcpu_set_reg_csr(struct kvm_vcpu *= vcpu, case KVM_REG_RISCV_CSR_SMSTATEEN: rc =3D kvm_riscv_vcpu_smstateen_set_csr(vcpu, reg_num, reg_val); break; + case KVM_REG_RISCV_CSR_ZICFISS: + rc =3D kvm_riscv_vcpu_zicfiss_set_csr(vcpu, reg_num, reg_val); + break; default: rc =3D -ENOENT; break; @@ -680,6 +724,8 @@ static inline unsigned long num_csr_regs(const struct k= vm_vcpu *vcpu) n +=3D sizeof(struct kvm_riscv_aia_csr) / sizeof(unsigned long); if (riscv_isa_extension_available(vcpu->arch.isa, SMSTATEEN)) n +=3D sizeof(struct kvm_riscv_smstateen_csr) / sizeof(unsigned long); + if (riscv_isa_extension_available(vcpu->arch.isa, ZICFISS)) + n +=3D sizeof(struct kvm_riscv_zicfiss_csr) / sizeof(unsigned long); =20 return n; } @@ -688,7 +734,7 @@ static int copy_csr_reg_indices(const struct kvm_vcpu *= vcpu, u64 __user *uindices) { int n1 =3D sizeof(struct kvm_riscv_csr) / sizeof(unsigned long); - int n2 =3D 0, n3 =3D 0; + int n2 =3D 0, n3 =3D 0, n4 =3D 0; =20 /* copy general csr regs */ for (int i =3D 0; i < n1; i++) { @@ -740,7 +786,25 @@ static int copy_csr_reg_indices(const struct kvm_vcpu = *vcpu, } } =20 - return n1 + n2 + n3; + /* copy Zicfiss csr regs */ + if (riscv_isa_extension_available(vcpu->arch.isa, ZICFISS)) { + n4 =3D sizeof(struct kvm_riscv_zicfiss_csr) / sizeof(unsigned long); + + for (int i =3D 0; i < n4; i++) { + u64 size =3D IS_ENABLED(CONFIG_32BIT) ? + KVM_REG_SIZE_U32 : KVM_REG_SIZE_U64; + u64 reg =3D KVM_REG_RISCV | size | KVM_REG_RISCV_CSR | + KVM_REG_RISCV_CSR_ZICFISS | i; + + if (uindices) { + if (put_user(reg, uindices)) + return -EFAULT; + uindices++; + } + } + } + + return n1 + n2 + n3 + n4; } =20 static inline unsigned long num_timer_regs(void) --=20 2.55.0 From nobody Sat Jul 25 22:32:23 2026 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5CF52238159 for ; Mon, 13 Jul 2026 01:04:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904646; cv=none; b=Zj9BQ6tCwXMgCWTLfX9yXWyOK57uGHiQIn7gMTBP9GPu8b1Liw5F/Cjy6eutmzqeFs26TaKdVohy5rAtWvb0dm8BBZpa76KTD3PYyFSHIpgKsBQli5QKGOVGKt3HWdaLxKemDklAUcNhyyRwbSTs80zzsNjUQFm953TY5SAyiNc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904646; c=relaxed/simple; bh=8W95h9pioucOk6mrrNHL0UllepTkkotEJTZXjD/sveQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UQfWz+FTS9WiGVNMVBk7bEqnrqiD+CGMnXDvF28n356gKpFvAV0fW7qDDyBbLGsGz84kyjpGAHGIt/s5sLpxDVLs4ia2cYypEWlltZnHHLQDxSUtqAFv2uZgsk1dF6gBFQllaEgxAnG/0iwXi+Fjh2w2s+ocpDNxFO3S8fGtbU4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=kD5I4P3r; arc=none smtp.client-ip=209.85.214.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kD5I4P3r" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-2ca64c3ce5fso29552025ad.3 for ; Sun, 12 Jul 2026 18:04:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783904642; x=1784509442; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=rpV1zK6+w2gomPz2kgJsMZZImbuU17m/e3kCCv0XAXs=; b=kD5I4P3rh4PO2aZvQoKIa3PHRjDzWCA0wAJpLokbdZjmWpB8V3gOmYV17tNeMq2bpL mLxQSRArAKNeWPxygg4AvotBdRAM5iNwvpjho0krWmwc8oJHl46LbzzcYvspVS/hK8vf YaPbnvoU1iBCyc3XuZO/Z+MkZxj4QSYeo8H4k4RSU0urpvfF89EcbSCT8RA+uxn0J6JN ZmxX7zQgn/pH2787W1JqbRHdofeFrxvvIyK1amc8OMqCe2Hl4j2QD0ockYhYosXKGf9P 1ZBiEO0De/evJdxNtL1p2TfGQQXFbcQ0H5ZrTqj7Diy1xSMis4EhAVdnp34R2FH3XDS+ 2xjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783904642; x=1784509442; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=rpV1zK6+w2gomPz2kgJsMZZImbuU17m/e3kCCv0XAXs=; b=rLHiUIIFXTcOc5aqz6x+H87wI6kcYXIX8qEe8dnoyaVhBczwv9WizCoC798ZeWq8Wa tLFfNQWIILsf++24xslc4jd2f5veXcV6JjBLsSw4CgtlzSL7LiMzUCCxycyPGQQ0RXzt 9k35OaOQFEMSrU4hnH5O1hqrtwmP85Wn3aAYpLUV5KVSTtNlC58cjegDUvzu0oK2VfTe hTdWaEicMSM9Fz3Qucq/iYNWPKpx0NMljvpl0RU//8wbRriw3C0KKIUYl/mImiWm0Srj 2PAoKa8Hna/OryAgcMQI5BFKBGQ9aFmm8+2HObG6DfJWYd/Bc5PbIzhUDgidVNKhV7Ax eR9w== X-Forwarded-Encrypted: i=1; AHgh+Rrk02Y0r1qOoBQs5PYa/bk34s38FpvzrbwQ1cJ7uCVHkwfma2kEUtHPfgAig6R9lopHm0G5H+XjUoch7CY=@vger.kernel.org X-Gm-Message-State: AOJu0YwETRe+N/UxRSL2Y7B2+GdQDNGmdqcqEQfHVX2EwKJN+Hd1CMml uGxWStjsZNhxCgLfD97GvJcwZEoH1idFlYltcZP+idztW8NWTXwwVAMg X-Gm-Gg: AfdE7ckYDvj38FdDWv73Fj7ywCnfCMyeQQKvVUq/C/8T0s7bdJBCFdvqk6rYCLGH46b U1htAzrvTUjvxvIZb04saQkP0WWofqHojUA+xfcv1XtZUK0Nh2Q/GHp/nduSiVblMd3Ge++ir5G MqvPllDbKAFeJCZ5kCm1mP083q2+tr6AsXNKiGmUTiTcCix95JXDJYRq3i78Ho60l9kHt9KHyjO T3i9X8E6pkHIbP3bMNAdCQpLybzc2QetQtA2orkNpf5t24alydTaHLx7rz9j8hpjoCKrL48Bf39 oLK8fWn4+nel4s5vNQQU2AtzdRKfYg07Ayz6ze/Xxeh3q/4/cuQ1lQokalth7uwVG4HIljizmmk T3KqFSwGa0fri/7NtZJLT8IFb+t/t90Pbi8uNQ2JFx9rsg8cYI3gfJKL1VjGlCo+rlUhsrzfZxd uolwfrobJ0ucw= X-Received: by 2002:a17:902:e806:b0:2ca:619f:9733 with SMTP id d9443c01a7336-2ce9eac58f9mr71900625ad.17.1783904642652; Sun, 12 Jul 2026 18:04:02 -0700 (PDT) Received: from localhost ([121.250.214.124]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9bdb746sm89165375ad.7.2026.07.12.18.04.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2026 18:04:02 -0700 (PDT) From: Inochi Amaoto To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Anup Patel , Atish Patra , Paolo Bonzini , Shuah Khan , Andy Chiu , Charlie Jenkins , Deepak Gupta , Thomas Huth , Inochi Amaoto , Sergey Matyukevich Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org, Yixun Lan , Longbin Li , Quan Zhou Subject: [PATCH v6 5/8] RISC-V: KVM: Handle software-check exits for VCPU Date: Mon, 13 Jul 2026 09:02:58 +0800 Message-ID: <20260713010302.303278-6-inochiama@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260713010302.303278-1-inochiama@gmail.com> References: <20260713010302.303278-1-inochiama@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The extension Zicfiss/Zicfilp introduces a software-check exception to the privilege architecture. Delegate this exception to VS mode when vCPU enable Zicfiss/Zicfilp so the CFI violations in VU/VS could be reported. Assisted-by: YuanSheng:claude-4.7-opus Co-developed-by: Quan Zhou Signed-off-by: Quan Zhou Signed-off-by: Inochi Amaoto --- arch/riscv/include/asm/csr.h | 1 + arch/riscv/kvm/vcpu_exit.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/arch/riscv/include/asm/csr.h b/arch/riscv/include/asm/csr.h index 31b8988f4488..224af9facf1f 100644 --- a/arch/riscv/include/asm/csr.h +++ b/arch/riscv/include/asm/csr.h @@ -117,6 +117,7 @@ #define EXC_INST_PAGE_FAULT 12 #define EXC_LOAD_PAGE_FAULT 13 #define EXC_STORE_PAGE_FAULT 15 +#define EXC_SOFTWARE_CHECK 18 #define EXC_INST_GUEST_PAGE_FAULT 20 #define EXC_LOAD_GUEST_PAGE_FAULT 21 #define EXC_VIRTUAL_INST_FAULT 22 diff --git a/arch/riscv/kvm/vcpu_exit.c b/arch/riscv/kvm/vcpu_exit.c index 0bb0c51e3c89..12eebeabdf14 100644 --- a/arch/riscv/kvm/vcpu_exit.c +++ b/arch/riscv/kvm/vcpu_exit.c @@ -243,6 +243,10 @@ int kvm_riscv_vcpu_exit(struct kvm_vcpu *vcpu, struct = kvm_run *run, run->exit_reason =3D KVM_EXIT_DEBUG; ret =3D 0; break; + case EXC_SOFTWARE_CHECK: + if (vcpu->arch.cfg.henvcfg & (ENVCFG_LPE | ENVCFG_SSE)) + ret =3D vcpu_redirect(vcpu, trap); + break; default: break; } --=20 2.55.0 From nobody Sat Jul 25 22:32:23 2026 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B8F25221DB6 for ; Mon, 13 Jul 2026 01:04:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904651; cv=none; b=M4/Lg3orPZXMU4f4m+P3RfcgEgjUFx+6qUL2RqMUBtimcCYzNp485/PVa4PhUO4UpP2ylnQmaMvRqPal0TeHNfi8rbHxPYNoETuP5EmPv0sZtWR9ujHXkpVJtKxl6KWshrlaUr034jyRGjcpsPuu2dgTtJ39Go6ifIGt/zSBORM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904651; c=relaxed/simple; bh=gGfxTLPCEXSgUtK5WaUX5O/nHFlYsALwKDZ9s87hSwg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nrK/mJAy9g5xYfavMmxnwx+kDPO5yaqG/LkpycSloMsvAaZ+VPWKMYbaBFravCieZbEvqudiaRMOOSyKVgP9EbJ5QH5fekn6RJioJj3sxVBhcfscJkAQ2HQZD4CBLm9iP3/zZ9PJYhe5RuhF/OMjztvPoEK/CwNvWzktBXKxx54= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ioPxYieg; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ioPxYieg" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-2ceb096e675so11960735ad.0 for ; Sun, 12 Jul 2026 18:04:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783904645; x=1784509445; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=nI0CkxxyoH8k0I7InDiV0iYilFi9jdMMJ7m2xkEZwHw=; b=ioPxYiegLCzGWvc7cISXavHNafqRKoVM42PpoNlqovOQhbQjvb4IdApuocZPxfeSHO VL/7I8bjyKZhf+yTWZYHnz4XVyO+j2BasF3jPeYuYHhW7o1Gnw/OQDx1+gqspQLcxdoV eQ6OQPs+OfFWnxlKoAOSsmjRmNYLMcWGDP36y+Y//EW63gFXIU10rTyD7nQkFLxkPr2i tqqV1RgMqfYGMoa997lcL38RkNwndFrmM3d7CJd70diWlrtDUow/zIAvPSyMiTYmnYKY 0NhHdW74JBmyWSqf36qF9+WzFNE2UKReOshay/Y+83SXVWng/c1wDcn4CCgDbJYaZO3B S50Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783904645; x=1784509445; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=nI0CkxxyoH8k0I7InDiV0iYilFi9jdMMJ7m2xkEZwHw=; b=pIfha0Sd3v8zSe791e1oETauCoVcOWWyS9ofmya/yhWeS0uOeTuAxCvM1LY6OWEms1 6ypgIbnk06zNyTfkpd87YzOXU/bSFV5cHA0OP9olKbla0Ltnnh2I38Z/nKM8Eb4svGAs kdRthqw0iS0Tjv74iu9FouklrRDziueidckPExJS4kyzKRtq7Dn9cBihJETJDrIjRYyx q8GmlPkVX96HuxuVHAJBhmu/pPxq+t+VOYuXmJk9lVqVsGQ+0Eth7ysm5IbzdeLqQ3T1 lJg/B9Q8daJmoR0S7TZZF6/uaroVtwfoAXtOD6ghCtZfR7UEpT2G7edtCDHmM5ZCV+et zcWA== X-Forwarded-Encrypted: i=1; AHgh+Rq0aWoyr/LL68YFkRDl2Pr7yrYaHVcxERPsvcU3VoczaXiyhZMdb09lAvVynKPUK1TTBVbj+Ia82XaTrlE=@vger.kernel.org X-Gm-Message-State: AOJu0Ywv0zrDpxgRhN8kw62Q49lxJ1WoPnips/hM8XfE+ESC0rBUwaJY QYOVdTBnFGnrh8c8DXOc3PPixxZqcATr2U9tvqkBIiYvdTkdeiHJObGa X-Gm-Gg: AfdE7cn75zyCPaO+ARFfmhu3m2yY84r/f+QOmPBlYcsdo4maqc3SvyBbhvJryMkReoQ RhEd29lSZrNI+4W9tyxaE21HK1/LuhbNBmG7OfnSwbtuZeiK2XeMGcXtC114M0GAh8JVn0KKCDC g4ZYWrnkTbFlEdNE4IQ7fTdpDPdGfYp0Z/7o4fCNM884+19/SICj5bzyHE+d7dRKHCYd/nwet0R gsCCkRTunoirHxOlHm/kxWpcnMtKtYZwW/2DfinoVJzvgps2O37Wv5t4lmuG/62c0aM4nfWpyTq BCWQT9RX3qKqdQ87POCHezFfr9UvBMSosfyvgmDWWWQ7GI1UUpuLH26HxSrtcqrM9+blKHnCYQX UFaSZppPGpaUo5ouJ/ehD/pofeO68pjj2RVY8Rcw3ZSv2pKe1lzKg3+d4GvpW1R5IzagTdxd3VA CqzruxePA129Q= X-Received: by 2002:a17:902:f708:b0:2cc:98b4:e7d7 with SMTP id d9443c01a7336-2ce9f17913emr69731695ad.45.1783904645152; Sun, 12 Jul 2026 18:04:05 -0700 (PDT) Received: from localhost ([121.250.214.124]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d1e1aesm91755405ad.39.2026.07.12.18.04.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2026 18:04:04 -0700 (PDT) From: Inochi Amaoto To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Anup Patel , Atish Patra , Paolo Bonzini , Shuah Khan , Andy Chiu , Charlie Jenkins , Deepak Gupta , Thomas Huth , Inochi Amaoto , Sergey Matyukevich Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org, Yixun Lan , Longbin Li Subject: [PATCH v6 6/8] RISC-V: KVM: Delegate SPELP bit to VS/VU mode if landing pad is enabled. Date: Mon, 13 Jul 2026 09:02:59 +0800 Message-ID: <20260713010302.303278-7-inochiama@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260713010302.303278-1-inochiama@gmail.com> References: <20260713010302.303278-1-inochiama@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Delegate the newly added SPELP bit from Zicfilp extension to VS/VU mode if it enables landing pad support. Signed-off-by: Inochi Amaoto --- arch/riscv/kvm/vcpu_exit.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/riscv/kvm/vcpu_exit.c b/arch/riscv/kvm/vcpu_exit.c index 12eebeabdf14..92a3ea7c7ffb 100644 --- a/arch/riscv/kvm/vcpu_exit.c +++ b/arch/riscv/kvm/vcpu_exit.c @@ -154,6 +154,13 @@ void kvm_riscv_vcpu_trap_redirect(struct kvm_vcpu *vcp= u, /* Clear Guest SSTATUS.SIE bit */ vsstatus &=3D ~SR_SIE; =20 + /* Change Guest SSTATUS.SPELP bit */ + if (vcpu->arch.cfg.henvcfg & ENVCFG_LPE) { + vsstatus &=3D ~SR_SPELP; + vsstatus |=3D vcpu->arch.guest_context.sstatus & SR_SPELP; + vcpu->arch.guest_context.sstatus &=3D ~SR_SPELP; + } + /* Update Guest SSTATUS */ ncsr_write(CSR_VSSTATUS, vsstatus); =20 --=20 2.55.0 From nobody Sat Jul 25 22:32:23 2026 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7484E23A564 for ; Mon, 13 Jul 2026 01:04:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904653; cv=none; b=IqcAWSdM55PeNErpZ/3ynoQN0Gza3n0/kXP8eCzCYd3GpAYLUHMjI3EIe1iGhvkoDayqqQVvZx75a3S7Q2m0H0dRd0uzlrjmqB497pCPGCgosBl5zQP7n4VXG09WgMP1xBi5h905puVsszZLpwA1vezZ6hR/ChnlclWMRiAwlLM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904653; c=relaxed/simple; bh=HUZff82wa3uDwO/dHSc3LFIupZ3nXKdEiVS1++mcxVc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Xg1rWKLBeF/TQDx/sLaZyEHIsV+CmoQVGTm1hPT38diuDUOJty5NhX4UUxKqNArJ7uNSP/hCHCrdGiJ3Icy8O00BL9yx2ddaj/PcDikk+EDVl3LNWUm64/5zYbp3Y1y/VQij6flPbm1sY5gDlbsaSLOuGMAw2VBDS9U2H2NYfIY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZuV7cubd; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZuV7cubd" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-2caea3f742bso28563615ad.0 for ; Sun, 12 Jul 2026 18:04:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783904648; x=1784509448; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=S43bmofhuYovIEb0xvmNF2puC54J8GURvqWgfbvABiE=; b=ZuV7cubdFnJhXCNHmjSKcaTWr878JMI5AFQFNCF7DPv+vCfjMwGWKJX9+AJtlZfRsu MNfNni5iasLOmkQhgTeL4wwbQtPyrqOhh6tukJkKBrHSKU/TKe8xIV/UkPbikky70OHY Tr4+niG1a468y/N5Q/H2ULw/EehZZqdTj9uWM199nVxLlWE5ZrYYiBi15AybT7accsmI 7ln0OiQNttLJV+KQZdScRe3Xx4wJUuPEUtGmyefQ3uwnSEFNCJeOWVQBcPSaaRQVrF+a xYGu11zJWGtk19+YLA63WEtLfXT6XTEW6cBzwixWZrzlKsejkwIyQ/CBcdDI4F5ya854 YdGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783904648; x=1784509448; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=S43bmofhuYovIEb0xvmNF2puC54J8GURvqWgfbvABiE=; b=e9V+mVyaDYiOqD+wrCPN6/Ee9JZxErwEnlj8hpyJmx/s/RJYXMg1kyNyOGEInAK/zU 8RX8hvQccdzuXNxTzqomCffJlnVEHWzNnvFG/ag9sI6e3BTaqYEbXbZimkxMe23Mfaux 4Y+/WrrnKhpEbW0ss1RNcW8wAVkDsFZOuI+HnnBWA1wegP8tFEwuC3O9z7BzY/5UZbcz rrn7XuAhBlMNYR2UHT0ya5XRfnIkfE4dYNOkZAXt0Q23E+UEVIUt55w7k5alIyDjVdWH 5ppv7kTEtpnQHZpA0avDkbiQfYOrVdADvOotPpXEP0djjy6FWjayfV5fUSrC7Z780X8w enJA== X-Forwarded-Encrypted: i=1; AHgh+Roez6BGPl150LjLl8SwEb99HWmU/xlL2BJxioCo2D8fmnN37+QzOWxxvbzrxVL39F/eJnipX06dntP9dqk=@vger.kernel.org X-Gm-Message-State: AOJu0YwfDYWvnMEVaDoEp4mNz5Mh5snjTsITt7Qb7TyFpWbfuDzUGKxx SyDgMmVMnetxLXBjvRzD/0/QJOMU7i3pRbIEM7HBpg0x4acc7FD1g+51 X-Gm-Gg: AfdE7ckAZncpjrLFkgnHwVYIKoZDXxTmM1Z5LkvsR3BBDjNFm7MKTg7QZPTQv8av3OP JGt9gguzEANaVQxQqRIwOK/VxFEAjww19KRJ4HBTvZsSVZCeE/1wJPZrl0vYynDAGgUwSWSLp/8 /Askdmxm8FRus06cwJXhrdOOyMWwpsTXReNGttDTh0f6OP0OWCKOauBjvtZ9FF+VZmrFZ775uia +/zFCPK0Lep5q/x0QnvmjE3OADTxTA9jsJDyJLHq8kW4K/y3xHh7EXtWZFtXRH/lAGbirhPl2sH eciof9gMSqe1x6fclzZFyR0qbnvCus+ymF1EMw+zwr9UkNtM2/mOPS/+9pXpLGD1Wax9fjj6XGU R1oHGXIZPPoKNZmhBnurM1i8zUoMCd0dhvKEr1GtsFWxIltKXmXMzWtZRv9grInrecW+hKQg5yC oi4/aeEoCLA0M= X-Received: by 2002:a17:903:1b23:b0:2c6:9f66:d573 with SMTP id d9443c01a7336-2ce9e7ac551mr73290545ad.2.1783904647837; Sun, 12 Jul 2026 18:04:07 -0700 (PDT) Received: from localhost ([121.250.214.124]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3d57bsm89843745ad.59.2026.07.12.18.04.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2026 18:04:07 -0700 (PDT) From: Inochi Amaoto To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Anup Patel , Atish Patra , Paolo Bonzini , Shuah Khan , Andy Chiu , Charlie Jenkins , Deepak Gupta , Thomas Huth , Inochi Amaoto , Sergey Matyukevich Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org, Yixun Lan , Longbin Li , Quan Zhou Subject: [PATCH v6 7/8] RISC-V: KVM: Add support for control-flow integrity FWFT features Date: Mon, 13 Jul 2026 09:03:00 +0800 Message-ID: <20260713010302.303278-8-inochiama@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260713010302.303278-1-inochiama@gmail.com> References: <20260713010302.303278-1-inochiama@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Control-flow integrity is controlled through a WARL field in henvcfg. Expose the feature only if the Zicfilp/Zicfiss is supported for VS-mode. Allow the VMM to block access to the feature by disabling the ISA extension in the guest. Assisted-by: YuanSheng:claude-4.7-opus Co-developed-by: Quan Zhou Signed-off-by: Quan Zhou Signed-off-by: Inochi Amaoto --- arch/riscv/include/uapi/asm/kvm.h | 2 + arch/riscv/kvm/vcpu_sbi_fwft.c | 107 ++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/as= m/kvm.h index fd4c81697617..20d9959ca44f 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -248,6 +248,8 @@ struct kvm_riscv_sbi_fwft { struct kvm_riscv_sbi_fwft_feature misaligned_deleg; struct kvm_riscv_sbi_fwft_feature pointer_masking; struct kvm_riscv_sbi_fwft_feature pte_ad_hw_updating; + struct kvm_riscv_sbi_fwft_feature landing_pad; + struct kvm_riscv_sbi_fwft_feature shadow_stack; }; =20 /* If you need to interpret the index values, here is the key: */ diff --git a/arch/riscv/kvm/vcpu_sbi_fwft.c b/arch/riscv/kvm/vcpu_sbi_fwft.c index 4d474a439b29..03153fd8d15f 100644 --- a/arch/riscv/kvm/vcpu_sbi_fwft.c +++ b/arch/riscv/kvm/vcpu_sbi_fwft.c @@ -176,6 +176,95 @@ static long kvm_sbi_fwft_get_misaligned_delegation(str= uct kvm_vcpu *vcpu, return SBI_SUCCESS; } =20 +static long kvm_sbi_fwft_set_cfi(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + bool one_reg_access, unsigned long value, + u64 flag) +{ + struct kvm_vcpu_config *cfg =3D &vcpu->arch.cfg; + + if (value =3D=3D 0) + cfg->henvcfg &=3D ~flag; + else if (value =3D=3D 1) + cfg->henvcfg |=3D flag; + else + return SBI_ERR_INVALID_PARAM; + + if (cfg->henvcfg & (ENVCFG_LPE | ENVCFG_SSE)) + cfg->hedeleg |=3D BIT(EXC_SOFTWARE_CHECK); + else + cfg->hedeleg &=3D ~BIT(EXC_SOFTWARE_CHECK); + + if (!one_reg_access) { + csr_write(CSR_HEDELEG, cfg->hedeleg); + /* + * Both Bit LPE and SSE are in the lower part, so it is safe + * to only write the henvcfg + */ + csr_write(CSR_HENVCFG, vcpu->arch.cfg.henvcfg); + } + + return SBI_SUCCESS; +} + +static bool kvm_sbi_fwft_landing_pad_supported(struct kvm_vcpu *vcpu) +{ + return riscv_isa_extension_available(vcpu->arch.isa, ZICFILP); +} + +static void kvm_sbi_fwft_reset_landing_pad(struct kvm_vcpu *vcpu) +{ + struct kvm_vcpu_config *cfg =3D &vcpu->arch.cfg; + + kvm_sbi_fwft_env_flag_reset_helper(vcpu, ENVCFG_LPE); + if ((cfg->henvcfg & (ENVCFG_LPE | ENVCFG_SSE)) =3D=3D 0) + cfg->hedeleg &=3D ~BIT(EXC_SOFTWARE_CHECK); +} + +static long kvm_sbi_fwft_set_landing_pad(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + bool one_reg_access, unsigned long value) +{ + return kvm_sbi_fwft_set_cfi(vcpu, conf, one_reg_access, value, ENVCFG_LPE= ); +} + +static long kvm_sbi_fwft_get_landing_pad(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + bool one_reg_access, unsigned long *value) +{ + return kvm_sbi_fwft_env_flag_get_helper(vcpu, conf, one_reg_access, + value, ENVCFG_LPE); +} + +static bool kvm_sbi_fwft_shadow_stack_supported(struct kvm_vcpu *vcpu) +{ + return riscv_isa_extension_available(vcpu->arch.isa, ZICFISS); +} + +static void kvm_sbi_fwft_reset_shadow_stack(struct kvm_vcpu *vcpu) +{ + struct kvm_vcpu_config *cfg =3D &vcpu->arch.cfg; + + kvm_sbi_fwft_env_flag_reset_helper(vcpu, ENVCFG_SSE); + if ((cfg->henvcfg & (ENVCFG_LPE | ENVCFG_SSE)) =3D=3D 0) + cfg->hedeleg &=3D ~BIT(EXC_SOFTWARE_CHECK); +} + +static long kvm_sbi_fwft_set_shadow_stack(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + bool one_reg_access, unsigned long value) +{ + return kvm_sbi_fwft_set_cfi(vcpu, conf, one_reg_access, value, ENVCFG_SSE= ); +} + +static long kvm_sbi_fwft_get_shadow_stack(struct kvm_vcpu *vcpu, + struct kvm_sbi_fwft_config *conf, + bool one_reg_access, unsigned long *value) +{ + return kvm_sbi_fwft_env_flag_get_helper(vcpu, conf, one_reg_access, + value, ENVCFG_SSE); +} + static bool kvm_sbi_fwft_pte_ad_hw_updating_supported(struct kvm_vcpu *vcp= u) { return riscv_isa_extension_available(vcpu->arch.isa, SVADU) && @@ -313,6 +402,24 @@ static const struct kvm_sbi_fwft_feature features[] = =3D { .set =3D kvm_sbi_fwft_set_misaligned_delegation, .get =3D kvm_sbi_fwft_get_misaligned_delegation, }, + { + .id =3D SBI_FWFT_LANDING_PAD, + .first_reg_num =3D offsetof(struct kvm_riscv_sbi_fwft, landing_pad.enabl= e) / + sizeof(unsigned long), + .supported =3D kvm_sbi_fwft_landing_pad_supported, + .reset =3D kvm_sbi_fwft_reset_landing_pad, + .set =3D kvm_sbi_fwft_set_landing_pad, + .get =3D kvm_sbi_fwft_get_landing_pad, + }, + { + .id =3D SBI_FWFT_SHADOW_STACK, + .first_reg_num =3D offsetof(struct kvm_riscv_sbi_fwft, shadow_stack.enab= le) / + sizeof(unsigned long), + .supported =3D kvm_sbi_fwft_shadow_stack_supported, + .reset =3D kvm_sbi_fwft_reset_shadow_stack, + .set =3D kvm_sbi_fwft_set_shadow_stack, + .get =3D kvm_sbi_fwft_get_shadow_stack, + }, { .id =3D SBI_FWFT_PTE_AD_HW_UPDATING, .first_reg_num =3D offsetof(struct kvm_riscv_sbi_fwft, pte_ad_hw_updatin= g.enable) / --=20 2.55.0 From nobody Sat Jul 25 22:32:23 2026 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 45DCA22425B for ; Mon, 13 Jul 2026 01:04:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904652; cv=none; b=BV9HXCl4OW3trvKbPIXE8YTDNzNSa8mfMR9hWlQl8hNhVg9N2MYx4yUikYepjmf1+suiD5ivtnu1pn0cRDUY3rTB5HGEJmwq89R5Jvv0+PHBRBVMkgUju72rWebrzINoi3UuDTO8EPe8ZSCp0dXSFa5DPgHymMNDkW7+zLTbHQo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783904652; c=relaxed/simple; bh=gjl7gUKc1kRtb1kcjKYFeFNfSP6BrXVQSH3aaitSBZo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gKhwdKZWI6BPOJJNlhdEmLsZQ+dPaNDmNowvUsF1HvFfDfblHWLsfwjDrjYtDgE6B+fcIc2Th2TnWt/5kv4W4KiIN7mVkvoM4LQQ80qcdJkv+otH9ZWZ1s+BI6deUdyJSOqY3yfs8Ma44o8Rs6WpyG1FtooiMcXxHXY7EaNmOzA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RzRf+PSr; arc=none smtp.client-ip=209.85.214.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RzRf+PSr" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-2caea3f742bso28564065ad.0 for ; Sun, 12 Jul 2026 18:04:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783904651; x=1784509451; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=92dcEhsni7PI6PnlxnEYjFlf9/2MK5LuINXM60q6u5M=; b=RzRf+PSr060Q6XzShPZkwdCAz03uxT0Vy0sXMd7YsCo+m5umUh7n3JSI54QQOxCo9K 0vziAjLB4JRTLncEiDoGH5FxJZ6tI0aIU9e3cbuEvjDsnpkyW71dk1mWgby85M76+aGH jWKKK8iBTVR6QbuSVpzcfuHgfQzamuqEZ0TQ/fLUQuvJ5EoIvXQmaCz6jJemFInxhcy+ vW8tIb/uAXMXwyreE9myTtz0YjWjHrvFPnHl6Cvyklcp9NqWdZKKedu0dcyaZXG8Wwvi 04u1OdSJ2EZUpZYSQCHXyiySQLFPkmLbZEi71oOWcDa9P3bbzh9AUFuOpg65tQLmlLgS UcGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783904651; x=1784509451; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=92dcEhsni7PI6PnlxnEYjFlf9/2MK5LuINXM60q6u5M=; b=biP+D9MIeqzFE70FFjMmL+XAPIndXxqasxeg70jBpGXcoojV4/i0CyeOLzyfLWRLXh l6Sacr+TArJMg44G3YNi0pZOaXouA54fCVmqNMlGpUXk95arbdrCU+dlpOGg7wgqR7H6 bbSc+l1iwIgpM90PihU5CFomb1b01bYylluB2wmwa6ipXO7FL6Lwg13p+CwO4CSzRTfs v9Mjwzsq8fqkA9f5qaEEONEMs2Sh/oIz49WVvgtZiWsIcdp6IurGXUNimfXktk9gsUNK NMKCghAAME/gw71XcU4+zwg6JO0DFoHh37V66UPGHxAC1JgmZYWDxDUxNllQdXsWC2oH zwrg== X-Forwarded-Encrypted: i=1; AHgh+Rq+YRQFJTBeYFMxPfAGSDN5WTkPLgxH5D1lulZv1h+BtbrgXD05eMIihkCarC6ALxEE3uL1/HYwKZryDUc=@vger.kernel.org X-Gm-Message-State: AOJu0YxQ0Fr7IdLlPn2gU1ldd9D6gP/ko0XTJs8x7gNa6kl/yQkrXEm4 Cumi1gRgy0PMLWaYvIV1+2036IiLG7if+1KM4p0iZiWYm5UfC73qqszb X-Gm-Gg: AfdE7cm065h3ZmnMuaxFGag2bfMPYtGPdJbf9CZI/Jtp12g1NrgvhWInHtb1qg1w9vs o/EUK7AQ6yATwNX+p3u0GFrOyOthWKVnAQ1G5fkhFWMgNATpMJoUkM4hkZo8HaCwX/y3B4EV6gn Av2C6evFgppt+XHYu1YjEoOZDG5Uow2zUcifqyYsfRuNyOOUKDXLPAzoWbuqlGLr3HyJjZZ1tNC ni5XuDZ0JrpTypRQLfmQoZ+UQ3KeTYB4Pl/gjxbTvv1m8d9KOO4t+GJbpsHeSJ8c1+9Ao85Gja7 m950grW0GWZflEFL8WgRwv8mP+WcmnypCip4fy/DiD2CiJKfD4mnzDITHhKZMaVtAX8eLS2CPC6 9PCW/O59XPFP2GU2MuoCMzDXYJJWpKHSHHvbgpYN6wJY7sP+HzhjJCFJTxZmJmiv7gOrKhKMY+M Vy90T6H2jVFmk= X-Received: by 2002:a17:903:1b23:b0:2c6:9f66:d573 with SMTP id d9443c01a7336-2ce9e7ac551mr73292325ad.2.1783904650561; Sun, 12 Jul 2026 18:04:10 -0700 (PDT) Received: from localhost ([121.250.214.124]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d1e284sm90725625ad.40.2026.07.12.18.04.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2026 18:04:10 -0700 (PDT) From: Inochi Amaoto To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Anup Patel , Atish Patra , Paolo Bonzini , Shuah Khan , Andy Chiu , Charlie Jenkins , Deepak Gupta , Thomas Huth , Inochi Amaoto , Sergey Matyukevich Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org, Yixun Lan , Longbin Li , Quan Zhou Subject: [PATCH v6 8/8] KVM: riscv: selftests: add Zicfiss/Zicfilp extension to get-reg-list test Date: Mon, 13 Jul 2026 09:03:01 +0800 Message-ID: <20260713010302.303278-9-inochiama@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260713010302.303278-1-inochiama@gmail.com> References: <20260713010302.303278-1-inochiama@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The KVM RISC-V allows Zicfiss/Zicfilp extensions for Guest/VM so add these extensions to get-reg-list test. Assisted-by: YuanSheng:claude-4.7-opus Co-developed-by: Quan Zhou Signed-off-by: Quan Zhou Signed-off-by: Inochi Amaoto --- .../selftests/kvm/riscv/get-reg-list.c | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/tools/testing/selftests/kvm/riscv/get-reg-list.c b/tools/testi= ng/selftests/kvm/riscv/get-reg-list.c index 94e33b2ee796..bf3980e9db12 100644 --- a/tools/testing/selftests/kvm/riscv/get-reg-list.c +++ b/tools/testing/selftests/kvm/riscv/get-reg-list.c @@ -90,6 +90,8 @@ bool filter_reg(__u64 reg) case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT= _ZICBOP: case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT= _ZICBOZ: case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT= _ZICCRSE: + case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT= _ZICFILP: + case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT= _ZICFISS: case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT= _ZICNTR: case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT= _ZICOND: case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT= _ZICSR: @@ -358,6 +360,8 @@ static const char *core_id_to_str(const char *prefix, _= _u64 id) "KVM_REG_RISCV_CSR_AIA | KVM_REG_RISCV_CSR_REG(" #csr ")" #define RISCV_CSR_SMSTATEEN(csr) \ "KVM_REG_RISCV_CSR_SMSTATEEN | KVM_REG_RISCV_CSR_REG(" #csr ")" +#define RISCV_CSR_ZICFISS(csr) \ + "KVM_REG_RISCV_CSR_ZICFISS | KVM_REG_RISCV_CSR_ZICFISS_REG(" #csr ")" =20 static const char *general_csr_id_to_str(__u64 reg_off) { @@ -425,6 +429,18 @@ static const char *smstateen_csr_id_to_str(__u64 reg_o= ff) return NULL; } =20 +static const char *zicfiss_csr_id_to_str(__u64 reg_off) +{ + /* reg_off is the offset into struct kvm_riscv_zicfiss_csr */ + switch (reg_off) { + case KVM_REG_RISCV_CSR_ZICFISS_REG(ssp): + return RISCV_CSR_ZICFISS(ssp); + } + + TEST_FAIL("Unknown zicfiss csr reg: 0x%llx", reg_off); + return NULL; +} + static const char *csr_id_to_str(const char *prefix, __u64 id) { __u64 reg_off =3D id & ~(REG_MASK | KVM_REG_RISCV_CSR); @@ -441,6 +457,8 @@ static const char *csr_id_to_str(const char *prefix, __= u64 id) return aia_csr_id_to_str(reg_off); case KVM_REG_RISCV_CSR_SMSTATEEN: return smstateen_csr_id_to_str(reg_off); + case KVM_REG_RISCV_CSR_ZICFISS: + return zicfiss_csr_id_to_str(reg_off); } =20 return strdup_printf("%lld | %lld /* UNKNOWN */", reg_subtype, reg_off); @@ -585,6 +603,8 @@ static const char *isa_ext_single_id_to_str(__u64 reg_o= ff) KVM_ISA_EXT_ARR(ZICBOP), KVM_ISA_EXT_ARR(ZICBOZ), KVM_ISA_EXT_ARR(ZICCRSE), + KVM_ISA_EXT_ARR(ZICFILP), + KVM_ISA_EXT_ARR(ZICFISS), KVM_ISA_EXT_ARR(ZICNTR), KVM_ISA_EXT_ARR(ZICOND), KVM_ISA_EXT_ARR(ZICSR), @@ -748,6 +768,12 @@ static const char *sbi_fwft_id_to_str(__u64 reg_off) case 6: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(pte_a= d_hw_updating.enable)"; case 7: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(pte_a= d_hw_updating.flags)"; case 8: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(pte_a= d_hw_updating.value)"; + case 9: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(landi= ng_pad.enable)"; + case 10: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(land= ing_pad.flags)"; + case 11: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(land= ing_pad.value)"; + case 12: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(shad= ow_stack.enable)"; + case 13: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(shad= ow_stack.flags)"; + case 14: return "KVM_REG_RISCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(shad= ow_stack.value)"; } return strdup_printf("KVM_REG_RISCV_SBI_FWFT | %lld /* UNKNOWN */", reg_o= ff); } @@ -954,6 +980,20 @@ static __u64 sbi_fwft_pte_ad_hw_updating_regs[] =3D { KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_STATE | KVM_REG_RI= SCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(pte_ad_hw_updating.value), }; =20 +static __u64 sbi_fwft_landing_pad_regs[] =3D { + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISC= V_SBI_SINGLE | KVM_RISCV_SBI_EXT_FWFT, + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_STATE | KVM_REG_RI= SCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(landing_pad.enable), + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_STATE | KVM_REG_RI= SCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(landing_pad.flags), + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_STATE | KVM_REG_RI= SCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(landing_pad.value), +}; + +static __u64 sbi_fwft_shadow_stack_regs[] =3D { + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISC= V_SBI_SINGLE | KVM_RISCV_SBI_EXT_FWFT, + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_STATE | KVM_REG_RI= SCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(shadow_stack.enable), + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_STATE | KVM_REG_RI= SCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(shadow_stack.flags), + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_STATE | KVM_REG_RI= SCV_SBI_FWFT | KVM_REG_RISCV_SBI_FWFT_REG(shadow_stack.value), +}; + static __u64 zicbom_regs[] =3D { KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_CONFIG | KVM_REG_RISCV= _CONFIG_REG(zicbom_block_size), KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_ISA_EXT | KVM_REG_RISC= V_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZICBOM, @@ -969,6 +1009,11 @@ static __u64 zicboz_regs[] =3D { KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_ISA_EXT | KVM_REG_RISC= V_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZICBOZ, }; =20 +static __u64 zicfiss_regs[] =3D { + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_CSR | KVM_REG_RISCV_CS= R_ZICFISS | KVM_REG_RISCV_CSR_ZICFISS_REG(ssp), + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_ISA_EXT | KVM_REG_RISC= V_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZICFISS, +}; + static __u64 aia_regs[] =3D { KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_CSR | KVM_REG_RISCV_CS= R_AIA | KVM_REG_RISCV_CSR_AIA_REG(siselect), KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_CSR | KVM_REG_RISCV_CS= R_AIA | KVM_REG_RISCV_CSR_AIA_REG(iprio1), @@ -1220,6 +1265,8 @@ KVM_ISA_EXT_SUBLIST_CONFIG(zicbom, ZICBOM); KVM_ISA_EXT_SUBLIST_CONFIG(zicbop, ZICBOP); KVM_ISA_EXT_SUBLIST_CONFIG(zicboz, ZICBOZ); KVM_ISA_EXT_SIMPLE_CONFIG(ziccrse, ZICCRSE); +KVM_ISA_EXT_SIMPLE_CONFIG(zicfilp, ZICFILP); +KVM_ISA_EXT_SUBLIST_CONFIG(zicfiss, ZICFISS); KVM_ISA_EXT_SIMPLE_CONFIG(zicntr, ZICNTR); KVM_ISA_EXT_SIMPLE_CONFIG(zicond, ZICOND); KVM_ISA_EXT_SIMPLE_CONFIG(zicsr, ZICSR); @@ -1279,6 +1326,24 @@ static struct vcpu_reg_list config_sbi_fwft_pte_ad_h= w_updating =3D { }, }; =20 +static struct vcpu_reg_list config_sbi_fwft_landing_pad =3D { + .sublists =3D { + SUBLIST_BASE, + SUBLIST_ISA(zicfilp, ZICFILP), + SUBLIST_SBI(fwft_landing_pad, FWFT), + {0}, + }, +}; + +static struct vcpu_reg_list config_sbi_fwft_shadow_stack =3D { + .sublists =3D { + SUBLIST_BASE, + SUBLIST_ISA(zicfiss, ZICFISS), + SUBLIST_SBI(fwft_shadow_stack, FWFT), + {0}, + }, +}; + struct vcpu_reg_list *vcpu_configs[] =3D { &config_sbi_base, &config_sbi_sta, @@ -1289,6 +1354,8 @@ struct vcpu_reg_list *vcpu_configs[] =3D { &config_sbi_fwft_misaligned_deleg, &config_sbi_fwft_pointer_masking, &config_sbi_fwft_pte_ad_hw_updating, + &config_sbi_fwft_landing_pad, + &config_sbi_fwft_shadow_stack, &config_aia, &config_fp_f, &config_fp_d, @@ -1332,6 +1399,8 @@ struct vcpu_reg_list *vcpu_configs[] =3D { &config_zicbop, &config_zicboz, &config_ziccrse, + &config_zicfilp, + &config_zicfiss, &config_zicntr, &config_zicond, &config_zicsr, --=20 2.55.0