2025-05-09T15:38:55-07:00, Atish Patra <atish.patra@xxxxxxxxx>: > On 5/8/25 6:32 AM, Radim Krčmář wrote: >> 2025-05-05T14:39:29-07:00, Atish Patra <atishp@xxxxxxxxxxxx>: >>> SENVCFG and SSTATEEN CSRs are controlled by HSENVCFG(62) and >>> SSTATEEN0(63) bits in hstateen. Enable them lazily at runtime >>> instead of bootime. >>> >>> Signed-off-by: Atish Patra <atishp@xxxxxxxxxxxx> >>> --- >>> diff --git a/arch/riscv/kvm/vcpu_insn.c b/arch/riscv/kvm/vcpu_insn.c >>> @@ -256,9 +256,37 @@ int kvm_riscv_vcpu_hstateen_lazy_enable(struct kvm_vcpu *vcpu, unsigned int csr_ >>> return KVM_INSN_CONTINUE_SAME_SEPC; >>> } >>> >>> +static int kvm_riscv_vcpu_hstateen_enable_senvcfg(struct kvm_vcpu *vcpu, >>> + unsigned int csr_num, >>> + unsigned long *val, >>> + unsigned long new_val, >>> + unsigned long wr_mask) >>> +{ >>> + return kvm_riscv_vcpu_hstateen_lazy_enable(vcpu, csr_num, SMSTATEEN0_HSENVCFG); >>> +} >> Basically the same comments as for [1/5]: >> >> Why don't we want to set the ENVCFG bit (62) unconditionally? >> >> It would save us the trap on first access. We don't get anything from >> the trap, so it looks like a net negative to me. > > We want to lazy enablement is to make sure that hypervisor is aware of > the what features > guest is using. We don't want to necessarily enable the architecture > states for the guest if guest doesn't need it. > > We need lazy enablement for CTR like features anyways. This will align > all the the features controlled > by stateen in the same manner. The cost is just a single trap at the > boot time. > > IMO, it's fair trade off. Yeah, as long as we are doing something with the information from the trap.