From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.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 C16703FBB5E for ; Wed, 29 Jul 2026 23:25:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.173 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785367546; cv=none; b=qNRYJYYtuFPp3hgv7QJTD1Dy37kmvbRYeeFfLvSKHCqDbtacfPL4NMqsbxW7vpPuv9846v8W7ejz8KBuiYjlG6KIb+R0RRMxFybAkdMz3DYRjdR084SxSsOkGupWX97VpG171RrrmfLw10uqgPlPofr8wZ3KMt51sXokrIZno40= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785367546; c=relaxed/simple; bh=VRKBcrvkkTj50ug1nsBr/nbS1UFJ1XmMlvIvUd69GHY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=o5XIeEfAVJKobjWqB/CWSbUP2n2I6uyp5dtghfJf2DAeM+LirxpeB/+oiLW4JeHXEXOJ5z7yMEbyD2Bpi/37zU08UwVZaN5A8H6oLji+mIJVjL7GB87VhqrELg2KyitehrLQgNIMyMG9E3ulRXRzV//QnULMd+7CcOArYX+R56k= 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=dJ71dAbb; arc=none smtp.client-ip=209.85.210.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="dJ71dAbb" Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-84861fc51f5so1115658b3a.1 for ; Wed, 29 Jul 2026 16:25:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785367542; x=1785972342; 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=b5uwqzdU+bRfmUzUhku7H1r8OyjJF5nGSMJqcdrWCrY=; b=dJ71dAbb2vXWkRrMdWy5XmYnKnDFuMkB+0aYfs6tNbd1ZoptYNLFGotGRl8OiFUy4u Mjw9PTRj0ghZAPwvs8cPDJLUb67a79X+um1VuXUsdco3WnkL2DhjaR/Ugv/XVQ7KEtk7 dhn/XLsWCM2X3bgSwijT91glAqjyKO1wYQCOsKBbwbrRlky/llT1mwPJhWNoRYFSNBnR ITQ+gQJ45V/TlzQCr7qvFFiPjBrxLeOsXJkfpzo9fin9xKjrJriSkLPaxmEINDP0d/ZP O+PesOjJxkHe2t0KS+epHIJFLLd8Uk3LfvPWQWxZmdqTuyIX3wziOZnXk33KNf4Wh3Km lAAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785367542; x=1785972342; 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=b5uwqzdU+bRfmUzUhku7H1r8OyjJF5nGSMJqcdrWCrY=; b=lqIFE4QstCAzQpXoq8BT42hweQbSmNR3RPHKFDxkPllS/4KFCssc2q3VtTcSCd6gOg qmnWI7MnjB4N2rKg93h9AuLccIy5f3PxN2rIVMuq8lHSalgrU7xDOyU4JkLyZr58Asj6 FgfNMUyTYZQlXJpExlkTVaD33JYlKkH/58tGit8uwDagQwjn3Ex4DZbjzrka8z/ASw7u rS6utvmgrmJSVop7gA/pp1Ofjp+i/4qJFN8UkdM18RV9+izispdb113Q/s/vFKI5fMzK ks2w7DqikyptJXDOBKvwybegMMltxDQckuP4SCk/gW+qR24FscKabNlGl/FNHHjxr8Rv lbDw== X-Forwarded-Encrypted: i=1; AHgh+RrwkWsW/cKfhW0YSp1ti9tBwIxgyKupMKabSxctghLxLNobsR+p+XvEdhiJc4/TzfpxZD4bskosinv5b1k=@vger.kernel.org X-Gm-Message-State: AOJu0Yzn58P9TOIJct3jUUI7/nfS/3dsNXMCmYquGPlKiyLkrOMqTta5 iRKq3B05xQVhKgYGAbop9aVzS5PwpmeNg//bTY4zyvUO0InenyIQYNvR X-Gm-Gg: AR+sD12PH/p3lWA4JYyrih4VKvAiFZ8ibJBSxRhBRjlxG5SYDvuC4PimaPUjUIYvC8G hsirKNwqur8bnCwR+/51X9eHmIn+4TOAUQm42DyzyVFM6t1Km9yM+I9qxF4FCfs6HDxqOC/kvas p4XqFHA7rXTd+kBdZufKis37/37UUyfp7j2guFGPLtGnTpBmZlUqac47xD7mwVhV5jJmsYHdEKp P+IQf2WR9b+6SHhW12T6TDfXXjX2XOyTjgkfv9HmrY4ocKobUO5Mwpdym5dbmQ9cX5psC7ZlmEg P+F3/X3ERL6Dt+/rjtiCZqOQ+4ywDcYIMnOc0RrkHaTuZhcbSbhhRcis9AzkU8A9OL9U4z6McgS z4XZq+/6C01hjU3t1Xqfi4Z5R2QxTJ+dQ90sUaJ4jrRYgqUlrQbE09H1MroSjfz7eGVYc0Hkg8X cP8G2gyw52fa7avyAOnXmBhZS+PRiRUji2nyCaB6ZccRAdmHxAS1xdm5WSHyA= X-Received: by 2002:a05:6a00:330e:b0:82f:38df:681c with SMTP id d2e1a72fcca58-84ebc1eb51amr328381b3a.6.1785367542040; Wed, 29 Jul 2026 16:25:42 -0700 (PDT) Received: from localhost ([2001:19f0:8000:3e6e:5400:6ff:fe38:3d01]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84ea02fa474sm1992558b3a.30.2026.07.29.16.25.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Jul 2026 16:25:41 -0700 (PDT) From: Inochi Amaoto To: Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti Cc: Inochi Amaoto , kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Yixun Lan , Longbin Li Subject: [PATCH v3 1/4] RISC-V: KVM: Add SBI extension validate callback Date: Thu, 30 Jul 2026 07:25:22 +0800 Message-ID: <20260729232527.139183-2-inochiama@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260729232527.139183-1-inochiama@gmail.com> References: <20260729232527.139183-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: 8bit When user disable FWFT extension after setting any value of the FWFT feature, the state of vCPU will be broken since the value of disable FWFT feature is still functional. Add the generic SBI extension validate callback so the FWFT extension can fix its parameters before the first run. Signed-off-by: Inochi Amaoto Reviewed-by: Anup Patel --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 4 ++++ arch/riscv/kvm/vcpu_config.c | 2 ++ arch/riscv/kvm/vcpu_sbi.c | 23 +++++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index c1a7e3b40d9c..f01a2860c751 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -60,6 +60,9 @@ struct kvm_vcpu_sbi_extension { void (*reset)(struct kvm_vcpu *vcpu); + /* Allow the extension to correct its parameters before the first run */ + void (*validate)(struct kvm_vcpu *vcpu); + unsigned long state_reg_subtype; unsigned long (*get_state_reg_count)(struct kvm_vcpu *vcpu); int (*get_state_reg_id)(struct kvm_vcpu *vcpu, int index, u64 *reg_id); @@ -93,6 +96,7 @@ 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); +void kvm_riscv_vcpu_sbi_validate(struct kvm_vcpu *vcpu); #ifdef CONFIG_RISCV_SBI_V01 extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_v01; diff --git a/arch/riscv/kvm/vcpu_config.c b/arch/riscv/kvm/vcpu_config.c index 238418fed2b9..b68aa830aaf5 100644 --- a/arch/riscv/kvm/vcpu_config.c +++ b/arch/riscv/kvm/vcpu_config.c @@ -69,6 +69,8 @@ void kvm_riscv_vcpu_config_ran_once(struct kvm_vcpu *vcpu) if (vcpu->guest_debug) cfg->hedeleg &= ~BIT(EXC_BREAKPOINT); + + kvm_riscv_vcpu_sbi_validate(vcpu); } void kvm_riscv_vcpu_config_load(struct kvm_vcpu *vcpu) diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index 46ab7b989432..b737e9a7a12a 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -723,3 +723,26 @@ void kvm_riscv_vcpu_sbi_reset(struct kvm_vcpu *vcpu) ext->reset(vcpu); } } + +void kvm_riscv_vcpu_sbi_validate(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->validate) + continue; + + ext->validate(vcpu); + } +} -- 2.55.0