mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
i386/xen: handle VCPUOP_register_vcpu_info
Handle the hypercall to set a per vcpu info, and also wire up the default vcpu_info in the shared_info page for the first 32 vCPUs. To avoid deadlock within KVM a vCPU thread must set its *own* vcpu_info rather than it being set from the context in which the hypercall is invoked. Add the vcpu_info (and default) GPA to the vmstate_x86_cpu for migration, and restore it in kvm_arch_put_registers() appropriately. Signed-off-by: Joao Martins <joao.m.martins@oracle.com> Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Reviewed-by: Paul Durrant <paul@xen.org>
This commit is contained in:
parent
d70bd6a485
commit
c345104cd1
6 changed files with 191 additions and 3 deletions
|
@ -4750,6 +4750,15 @@ int kvm_arch_put_registers(CPUState *cpu, int level)
|
|||
kvm_arch_set_tsc_khz(cpu);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_XEN_EMU
|
||||
if (xen_mode == XEN_EMULATE && level == KVM_PUT_FULL_STATE) {
|
||||
ret = kvm_put_xen_state(cpu);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
ret = kvm_getput_regs(x86_cpu, 1);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
|
@ -4849,6 +4858,14 @@ int kvm_arch_get_registers(CPUState *cs)
|
|||
if (ret < 0) {
|
||||
goto out;
|
||||
}
|
||||
#ifdef CONFIG_XEN_EMU
|
||||
if (xen_mode == XEN_EMULATE) {
|
||||
ret = kvm_get_xen_state(cs);
|
||||
if (ret < 0) {
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
ret = 0;
|
||||
out:
|
||||
cpu_sync_bndcs_hflags(&cpu->env);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue