mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00

There are (at least) three different vCPU ID number spaces. One is the internal KVM vCPU index, based purely on which vCPU was chronologically created in the kernel first. If userspace threads are all spawned and create their KVM vCPUs in essentially random order, then the KVM indices are basically random too. The second number space is the APIC ID space, which is consistent and useful for referencing vCPUs. MSIs will specify the target vCPU using the APIC ID, for example, and the KVM Xen APIs also take an APIC ID from userspace whenever a vCPU needs to be specified (as opposed to just using the appropriate vCPU fd). The third number space is not normally relevant to the kernel, and is the ACPI/MADT/Xen CPU number which corresponds to cs->cpu_index. But Xen timer hypercalls use it, and Xen timer hypercalls *really* want to be accelerated in the kernel rather than handled in userspace, so the kernel needs to be told. Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Reviewed-by: Paul Durrant <paul@xen.org>
29 lines
869 B
C
29 lines
869 B
C
/*
|
|
* Xen HVM emulation support in KVM
|
|
*
|
|
* Copyright © 2019 Oracle and/or its affiliates. All rights reserved.
|
|
* Copyright © 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
* See the COPYING file in the top-level directory.
|
|
*
|
|
*/
|
|
|
|
#ifndef QEMU_I386_KVM_XEN_EMU_H
|
|
#define QEMU_I386_KVM_XEN_EMU_H
|
|
|
|
#define XEN_HYPERCALL_MSR 0x40000000
|
|
#define XEN_HYPERCALL_MSR_HYPERV 0x40000200
|
|
|
|
#define XEN_CPUID_SIGNATURE 0
|
|
#define XEN_CPUID_VENDOR 1
|
|
#define XEN_CPUID_HVM_MSR 2
|
|
#define XEN_CPUID_TIME 3
|
|
#define XEN_CPUID_HVM 4
|
|
|
|
#define XEN_VERSION(maj, min) ((maj) << 16 | (min))
|
|
|
|
int kvm_xen_init(KVMState *s, uint32_t hypercall_msr);
|
|
int kvm_xen_init_vcpu(CPUState *cs);
|
|
|
|
#endif /* QEMU_I386_KVM_XEN_EMU_H */
|