On Fri, 2024-02-16 at 22:36 +0100, Eric Farman wrote: > The routine ar_translation() can be reached by both the instruction > intercept path (where the access registers had been loaded with the > guest register contents), and the MEM_OP ioctls (which hadn't). > Since this routine saves the current registers to vcpu->run, > this routine erroneously saves host registers into the guest space. > > Introduce a boolean in the kvm_vcpu_arch struct to indicate whether > the registers contain guest contents. If they do (the instruction > intercept path), the save can be performed and the AR translation > is done just as it is today. If they don't (the MEM_OP path), the > AR can be read from vcpu->run without stashing the current contents. > > Signed-off-by: Eric Farman <farman@xxxxxxxxxxxxx> Reviewed-by: Nina Schoetterl-Glausch <nsg@xxxxxxxxxxxxx> > --- > arch/s390/include/asm/kvm_host.h | 1 + > arch/s390/kvm/gaccess.c | 3 ++- > arch/s390/kvm/kvm-s390.c | 3 +++ > 3 files changed, 6 insertions(+), 1 deletion(-) > > diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h > index 52664105a473..c86215eb4ca7 100644 > --- a/arch/s390/include/asm/kvm_host.h > +++ b/arch/s390/include/asm/kvm_host.h > @@ -765,6 +765,7 @@ struct kvm_vcpu_arch { > __u64 cputm_start; > bool gs_enabled; > bool skey_enabled; > + bool acrs_loaded; Not sure how descriptive that name is. Maybe add a comment. > struct kvm_s390_pv_vcpu pv; > union diag318_info diag318_info; > }; [...]