Hi Fuad, On Tue, Feb 1, 2022 at 6:14 AM Fuad Tabba <tabba@xxxxxxxxxx> wrote: > > Hi Reiji, > > ... > > > > > +static void feature_amu_trap_activate(struct kvm_vcpu *vcpu) > > > > +{ > > > > + feature_trap_activate(vcpu, VCPU_CPTR_EL2, CPTR_EL2_TAM, 0); > > > > > > Covers the CPTR flags for AMU, but as you mentioned, does not > > > explicitly clear HCR_AMVOFFEN. > > > > In my understanding, clearing HCR_EL2.AMVOFFEN is not necessary as > > CPTR_EL2.TAM == 1 traps the guest's accessing AMEVCNTR0<n>_EL0 and > > AMEVCNTR1<n>_EL0 anyway (HCR_EL2.AMVOFFEN doesn't matter). > > (Or is my understanding wrong ??) > > You're right. However, I think they should be cleared first for > completeness. Also, if I understand correctly, AMVOFFEN is about > enabling and disabling virtualization of the registers, making > indirect reads of the virtual offset registers as zero, so it's not > just about trapping. I understand that AMVOFFEN is making indirect reads of the virtual offset registers as zero. But, in my understanding, enabling and disabling virtualization of the registers doesn't matter as long as CPTR_EL2.TAM == 1 (a value of HCR_EL2.AMVOFFEN doesn't change any behavior because the virtual offset registers won't be used). So, I'm not too keen on adding that so far. Thanks, Reiji