On Tue, Jul 30, 2019 at 3:04 PM Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote: > > On 29/07/19 13:57, Anup Patel wrote: > > void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu) > > { > > - /* TODO: */ > > + struct kvm_vcpu_csr *csr = &vcpu->arch.guest_csr; > > + > > + csr_write(CSR_HIDELEG, csr->hideleg); > > + csr_write(CSR_HEDELEG, csr->hedeleg); > > Writing HIDELEG and HEDELEG here seems either wrong or inefficient to me. > > I don't remember the spec well enough, but there are two cases: > > 1) either they only matter while the guest runs and then you can set > them in kvm_arch_hardware_enable. KVM common code takes care of doing > this on all CPUs for you. This is a good suggestion. I will use kvm_arch_hardware_enable() for programming HIDELEG and HEDELEG CSRs. > > 2) or they also matter while the host runs and then you need to set them > in vcpu_switch.S. They don't matter in HS-mode so we don't need to access them in vcpu_switch.S Regards, Anup