Re: [RFC PATCH 6/7] riscv: kvm: add SBI FWFT support for SBI_FWFT_DOUBLE_TRAP_ENABLE

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, May 14, 2024 at 11:43:15AM +0200, Clément Léger wrote:


On 27/04/2024 03:17, Deepak Gupta wrote:
On Thu, Apr 18, 2024 at 04:26:45PM +0200, Clément Léger wrote:
Add support in KVM SBI FWFT extension to allow VS-mode to request double
trap enabling. Double traps can then be generated by VS-mode, allowing
M-mode to redirect them to S-mode.


+
+    if (value)
+        csr_set(CSR_HENVCFG_DBLTRP, DBLTRP_DTE);
+    else
+        csr_clear(CSR_HENVCFG_DBLTRP, DBLTRP_DTE);

I think vcpu->arch.cfg has `henvcfg` field. Can we reflect it there as
well so that current
`henvcfg` copy in vcpu arch specifci config is consistent? Otherwise
it'll be lost when vCPU
is scheduled out and later scheduled back in (on vcpu load)

henvcfg is restored when loading the vpcu (kvm_arch_vcpu_load()) and
saved when the CPU is put (kvm_arch_vcpu_put()). But I just saw that
this change is included in the next patch. Should have been this one ,
I'll fix that.



Furthermore, lets not do feature specific alias names for CSR.

Instead let's keep consistent 64bit image of henvcfg in vcpu->arch.cfg.

And whenever it's time to pick up the setting, pick up logic either
perform the writes in
henvcfg. And if required it'll perform henvcfgh too (as
`kvm_arch_vcpu_load` already does)

I don't have a strong opinion on that point so if you think it really is
better, I'll switch to that.

Thanks.


Thanks,

Clément


+
+    return SBI_SUCCESS;
+}
+
+static int kvm_sbi_fwft_get_double_trap(struct kvm_vcpu *vcpu,
+                    struct kvm_sbi_fwft_config *conf,
+                    unsigned long *value)
+{
+    if (!riscv_double_trap_enabled())
+        return SBI_ERR_NOT_SUPPORTED;
+
+    *value = (csr_read(CSR_HENVCFG_DBLTRP) & DBLTRP_DTE) != 0;
+
+    return SBI_SUCCESS;
+}
+
static struct kvm_sbi_fwft_config *
kvm_sbi_fwft_get_config(struct kvm_vcpu *vcpu, enum sbi_fwft_feature_t
feature)
{
@@ -111,6 +147,11 @@ static const struct kvm_sbi_fwft_feature
features[] = {
        .id = SBI_FWFT_MISALIGNED_DELEG,
        .set = kvm_sbi_fwft_set_misaligned_delegation,
        .get = kvm_sbi_fwft_get_misaligned_delegation,
+    },
+    {
+        .id = SBI_FWFT_DOUBLE_TRAP_ENABLE,
+        .set = kvm_sbi_fwft_set_double_trap,
+        .get = kvm_sbi_fwft_get_double_trap,
    }
};

-- 
2.43.0






[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux