Revision 819bd309 target-s390x/kvm.c
b/target-s390x/kvm.c | ||
---|---|---|
87 | 87 |
}; |
88 | 88 |
|
89 | 89 |
static int cap_sync_regs; |
90 |
static int cap_async_pf; |
|
90 | 91 |
|
91 | 92 |
static void *legacy_s390_alloc(size_t size); |
92 | 93 |
|
93 | 94 |
int kvm_arch_init(KVMState *s) |
94 | 95 |
{ |
95 | 96 |
cap_sync_regs = kvm_check_extension(s, KVM_CAP_SYNC_REGS); |
97 |
cap_async_pf = kvm_check_extension(s, KVM_CAP_ASYNC_PF); |
|
96 | 98 |
if (!kvm_check_extension(s, KVM_CAP_S390_GMAP) |
97 | 99 |
|| !kvm_check_extension(s, KVM_CAP_S390_COW)) { |
98 | 100 |
phys_mem_set_alloc(legacy_s390_alloc); |
... | ... | |
178 | 180 |
return ret; |
179 | 181 |
} |
180 | 182 |
|
183 |
if (cap_async_pf) { |
|
184 |
reg.id = KVM_REG_S390_PFTOKEN; |
|
185 |
reg.addr = (__u64)&(env->pfault_token); |
|
186 |
ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, ®); |
|
187 |
if (ret < 0) { |
|
188 |
return ret; |
|
189 |
} |
|
190 |
|
|
191 |
reg.id = KVM_REG_S390_PFCOMPARE; |
|
192 |
reg.addr = (__u64)&(env->pfault_compare); |
|
193 |
ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, ®); |
|
194 |
if (ret < 0) { |
|
195 |
return ret; |
|
196 |
} |
|
197 |
|
|
198 |
reg.id = KVM_REG_S390_PFSELECT; |
|
199 |
reg.addr = (__u64)&(env->pfault_select); |
|
200 |
ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, ®); |
|
201 |
if (ret < 0) { |
|
202 |
return ret; |
|
203 |
} |
|
204 |
} |
|
205 |
|
|
181 | 206 |
if (cap_sync_regs && |
182 | 207 |
cs->kvm_run->kvm_valid_regs & KVM_SYNC_ACRS && |
183 | 208 |
cs->kvm_run->kvm_valid_regs & KVM_SYNC_CRS) { |
... | ... | |
282 | 307 |
return r; |
283 | 308 |
} |
284 | 309 |
|
310 |
if (cap_async_pf) { |
|
311 |
reg.id = KVM_REG_S390_PFTOKEN; |
|
312 |
reg.addr = (__u64)&(env->pfault_token); |
|
313 |
r = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, ®); |
|
314 |
if (r < 0) { |
|
315 |
return r; |
|
316 |
} |
|
317 |
|
|
318 |
reg.id = KVM_REG_S390_PFCOMPARE; |
|
319 |
reg.addr = (__u64)&(env->pfault_compare); |
|
320 |
r = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, ®); |
|
321 |
if (r < 0) { |
|
322 |
return r; |
|
323 |
} |
|
324 |
|
|
325 |
reg.id = KVM_REG_S390_PFSELECT; |
|
326 |
reg.addr = (__u64)&(env->pfault_select); |
|
327 |
r = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, ®); |
|
328 |
if (r < 0) { |
|
329 |
return r; |
|
330 |
} |
|
331 |
} |
|
332 |
|
|
285 | 333 |
return 0; |
286 | 334 |
} |
287 | 335 |
|
Also available in: Unified diff