91
91
int kvm_arch_put_registers(CPUS390XState *env, int level)
93
struct kvm_sregs sregs;
93
94
struct kvm_regs regs;
97
ret = kvm_vcpu_ioctl(env, KVM_GET_REGS, ®s);
102
for (i = 0; i < 16; i++) {
103
regs.gprs[i] = env->regs[i];
106
ret = kvm_vcpu_ioctl(env, KVM_SET_REGS, ®s);
98
/* always save the PSW and the GPRS*/
111
99
env->kvm_run->psw_addr = env->psw.addr;
112
100
env->kvm_run->psw_mask = env->psw.mask;
102
if (cap_sync_regs && env->kvm_run->kvm_valid_regs & KVM_SYNC_GPRS) {
103
for (i = 0; i < 16; i++) {
104
env->kvm_run->s.regs.gprs[i] = env->regs[i];
105
env->kvm_run->kvm_dirty_regs |= KVM_SYNC_GPRS;
108
for (i = 0; i < 16; i++) {
109
regs.gprs[i] = env->regs[i];
111
ret = kvm_vcpu_ioctl(env, KVM_SET_REGS, ®s);
117
/* Do we need to save more than that? */
118
if (level == KVM_PUT_RUNTIME_STATE) {
123
env->kvm_run->kvm_valid_regs & KVM_SYNC_ACRS &&
124
env->kvm_run->kvm_valid_regs & KVM_SYNC_CRS) {
125
for (i = 0; i < 16; i++) {
126
env->kvm_run->s.regs.acrs[i] = env->aregs[i];
127
env->kvm_run->s.regs.crs[i] = env->cregs[i];
129
env->kvm_run->kvm_dirty_regs |= KVM_SYNC_ACRS;
130
env->kvm_run->kvm_dirty_regs |= KVM_SYNC_CRS;
132
for (i = 0; i < 16; i++) {
133
sregs.acrs[i] = env->aregs[i];
134
sregs.crs[i] = env->cregs[i];
136
ret = kvm_vcpu_ioctl(env, KVM_SET_SREGS, &sregs);
142
/* Finally the prefix */
143
if (cap_sync_regs && env->kvm_run->kvm_valid_regs & KVM_SYNC_PREFIX) {
144
env->kvm_run->s.regs.prefix = env->psa;
145
env->kvm_run->kvm_dirty_regs |= KVM_SYNC_PREFIX;
147
/* prefix is only supported via sync regs */
117
152
int kvm_arch_get_registers(CPUS390XState *env)
154
struct kvm_sregs sregs;
155
struct kvm_regs regs;
120
struct kvm_regs regs;
123
ret = kvm_vcpu_ioctl(env, KVM_GET_REGS, ®s);
128
for (i = 0; i < 16; i++) {
129
env->regs[i] = regs.gprs[i];
132
160
env->psw.addr = env->kvm_run->psw_addr;
133
161
env->psw.mask = env->kvm_run->psw_mask;
164
if (cap_sync_regs && env->kvm_run->kvm_valid_regs & KVM_SYNC_GPRS) {
165
for (i = 0; i < 16; i++) {
166
env->regs[i] = env->kvm_run->s.regs.gprs[i];
169
ret = kvm_vcpu_ioctl(env, KVM_GET_REGS, ®s);
173
for (i = 0; i < 16; i++) {
174
env->regs[i] = regs.gprs[i];
178
/* The ACRS and CRS */
180
env->kvm_run->kvm_valid_regs & KVM_SYNC_ACRS &&
181
env->kvm_run->kvm_valid_regs & KVM_SYNC_CRS) {
182
for (i = 0; i < 16; i++) {
183
env->aregs[i] = env->kvm_run->s.regs.acrs[i];
184
env->cregs[i] = env->kvm_run->s.regs.crs[i];
187
ret = kvm_vcpu_ioctl(env, KVM_GET_SREGS, &sregs);
191
for (i = 0; i < 16; i++) {
192
env->aregs[i] = sregs.acrs[i];
193
env->cregs[i] = sregs.crs[i];
197
/* Finally the prefix */
198
if (cap_sync_regs && env->kvm_run->kvm_valid_regs & KVM_SYNC_PREFIX) {
199
env->psa = env->kvm_run->s.regs.prefix;
201
/* no prefix without sync regs */