/* User space provided an invalid FPC, let's clear it */
                current->thread.fpu.fpc = 0;
 
-       save_access_regs(vcpu->arch.host_acrs);
-       restore_access_regs(vcpu->run->s.regs.acrs);
        gmap_enable(vcpu->arch.enabled_gmap);
        atomic_or(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
        if (vcpu->arch.cputm_enabled && !is_vcpu_idle(vcpu))
        /* Restore host register state */
        current->thread.fpu.fpc = vcpu->arch.host_fpregs.fpc;
        current->thread.fpu.regs = vcpu->arch.host_fpregs.regs;
-
-       save_access_regs(vcpu->run->s.regs.acrs);
-       restore_access_regs(vcpu->arch.host_acrs);
 }
 
 static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu)
 {
        memcpy(&vcpu->run->s.regs.acrs, &sregs->acrs, sizeof(sregs->acrs));
        memcpy(&vcpu->arch.sie_block->gcr, &sregs->crs, sizeof(sregs->crs));
-       restore_access_regs(vcpu->run->s.regs.acrs);
        return 0;
 }
 
                if (riccb->valid)
                        vcpu->arch.sie_block->ecb3 |= 0x01;
        }
+       save_access_regs(vcpu->arch.host_acrs);
+       restore_access_regs(vcpu->run->s.regs.acrs);
 
        kvm_run->kvm_dirty_regs = 0;
 }
        kvm_run->s.regs.pft = vcpu->arch.pfault_token;
        kvm_run->s.regs.pfs = vcpu->arch.pfault_select;
        kvm_run->s.regs.pfc = vcpu->arch.pfault_compare;
+       save_access_regs(vcpu->run->s.regs.acrs);
+       restore_access_regs(vcpu->arch.host_acrs);
 }
 
 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
 {
        /*
         * The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy
-        * copying in vcpu load/put. Lets update our copies before we save
+        * switch in the run ioctl. Let's update our copies before we save
         * it into the save area
         */
        save_fpu_regs();