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. Thanks, /fuad > Thanks, > Reiji