@@ -2270,37 +2270,37 @@ int kvm_s390_store_status_unloaded(struct kvm_vcpu *vcpu, unsigned long gpa)
22702270 u64 clkcomp ;
22712271 int rc ;
22722272
2273+ px = kvm_s390_get_prefix (vcpu );
22732274 if (gpa == KVM_S390_STORE_STATUS_NOADDR ) {
22742275 if (write_guest_abs (vcpu , 163 , & archmode , 1 ))
22752276 return - EFAULT ;
2276- gpa = SAVE_AREA_BASE ;
2277+ gpa = 0 ;
22772278 } else if (gpa == KVM_S390_STORE_STATUS_PREFIXED ) {
22782279 if (write_guest_real (vcpu , 163 , & archmode , 1 ))
22792280 return - EFAULT ;
2280- gpa = kvm_s390_real_to_abs (vcpu , SAVE_AREA_BASE );
2281- }
2282- rc = write_guest_abs (vcpu , gpa + offsetof(struct save_area , fp_regs ),
2281+ gpa = px ;
2282+ } else
2283+ gpa -= __LC_FPREGS_SAVE_AREA ;
2284+ rc = write_guest_abs (vcpu , gpa + __LC_FPREGS_SAVE_AREA ,
22832285 vcpu -> arch .guest_fpregs .fprs , 128 );
2284- rc |= write_guest_abs (vcpu , gpa + offsetof( struct save_area , gp_regs ) ,
2286+ rc |= write_guest_abs (vcpu , gpa + __LC_GPREGS_SAVE_AREA ,
22852287 vcpu -> run -> s .regs .gprs , 128 );
2286- rc |= write_guest_abs (vcpu , gpa + offsetof( struct save_area , psw ) ,
2288+ rc |= write_guest_abs (vcpu , gpa + __LC_PSW_SAVE_AREA ,
22872289 & vcpu -> arch .sie_block -> gpsw , 16 );
2288- px = kvm_s390_get_prefix (vcpu );
2289- rc |= write_guest_abs (vcpu , gpa + offsetof(struct save_area , pref_reg ),
2290+ rc |= write_guest_abs (vcpu , gpa + __LC_PREFIX_SAVE_AREA ,
22902291 & px , 4 );
2291- rc |= write_guest_abs (vcpu ,
2292- gpa + offsetof(struct save_area , fp_ctrl_reg ),
2292+ rc |= write_guest_abs (vcpu , gpa + __LC_FP_CREG_SAVE_AREA ,
22932293 & vcpu -> arch .guest_fpregs .fpc , 4 );
2294- rc |= write_guest_abs (vcpu , gpa + offsetof( struct save_area , tod_reg ) ,
2294+ rc |= write_guest_abs (vcpu , gpa + __LC_TOD_PROGREG_SAVE_AREA ,
22952295 & vcpu -> arch .sie_block -> todpr , 4 );
2296- rc |= write_guest_abs (vcpu , gpa + offsetof( struct save_area , timer ) ,
2296+ rc |= write_guest_abs (vcpu , gpa + __LC_CPU_TIMER_SAVE_AREA ,
22972297 & vcpu -> arch .sie_block -> cputm , 8 );
22982298 clkcomp = vcpu -> arch .sie_block -> ckc >> 8 ;
2299- rc |= write_guest_abs (vcpu , gpa + offsetof( struct save_area , clk_cmp ) ,
2299+ rc |= write_guest_abs (vcpu , gpa + __LC_CLOCK_COMP_SAVE_AREA ,
23002300 & clkcomp , 8 );
2301- rc |= write_guest_abs (vcpu , gpa + offsetof( struct save_area , acc_regs ) ,
2301+ rc |= write_guest_abs (vcpu , gpa + __LC_AREGS_SAVE_AREA ,
23022302 & vcpu -> run -> s .regs .acrs , 64 );
2303- rc |= write_guest_abs (vcpu , gpa + offsetof( struct save_area , ctrl_regs ) ,
2303+ rc |= write_guest_abs (vcpu , gpa + __LC_CREGS_SAVE_AREA ,
23042304 & vcpu -> arch .sie_block -> gcr , 128 );
23052305 return rc ? - EFAULT : 0 ;
23062306}
0 commit comments