@@ -155,6 +155,7 @@ static void kvm_reset_vcpu(void *opaque)
abort();
}
}
+#endif
int kvm_irqchip_in_kernel(void)
{
@@ -166,6 +167,7 @@ int kvm_pit_in_kernel(void)
return kvm_state->pit_in_kernel;
}
+#ifdef KVM_UPSTREAM
int kvm_init_vcpu(CPUState *env)
{
@@ -119,13 +119,13 @@ static int kvm_create_pit(kvm_context_t kvm)
#ifdef KVM_CAP_PIT
int r;
- kvm->pit_in_kernel = 0;
+ kvm_state->pit_in_kernel = 0;
if (!kvm->no_pit_creation) {
r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_PIT);
if (r > 0) {
r = kvm_vm_ioctl(kvm_state, KVM_CREATE_PIT);
if (r >= 0)
- kvm->pit_in_kernel = 1;
+ kvm_state->pit_in_kernel = 1;
else {
fprintf(stderr, "Create kernel PIC irqchip failed\n");
return r;
@@ -284,7 +284,7 @@ int kvm_destroy_memory_alias(kvm_context_t kvm, uint64_t phys_start)
int kvm_get_lapic(kvm_vcpu_context_t vcpu, struct kvm_lapic_state *s)
{
int r;
- if (!kvm_irqchip_in_kernel(vcpu->kvm))
+ if (!kvm_irqchip_in_kernel())
return 0;
r = ioctl(vcpu->fd, KVM_GET_LAPIC, s);
if (r == -1) {
@@ -297,7 +297,7 @@ int kvm_get_lapic(kvm_vcpu_context_t vcpu, struct kvm_lapic_state *s)
int kvm_set_lapic(kvm_vcpu_context_t vcpu, struct kvm_lapic_state *s)
{
int r;
- if (!kvm_irqchip_in_kernel(vcpu->kvm))
+ if (!kvm_irqchip_in_kernel())
return 0;
r = ioctl(vcpu->fd, KVM_SET_LAPIC, s);
if (r == -1) {
@@ -313,14 +313,14 @@ int kvm_set_lapic(kvm_vcpu_context_t vcpu, struct kvm_lapic_state *s)
int kvm_get_pit(kvm_context_t kvm, struct kvm_pit_state *s)
{
- if (!kvm->pit_in_kernel)
+ if (!kvm_state->pit_in_kernel)
return 0;
return kvm_vm_ioctl(kvm_state, KVM_GET_PIT, s);
}
int kvm_set_pit(kvm_context_t kvm, struct kvm_pit_state *s)
{
- if (!kvm->pit_in_kernel)
+ if (!kvm_state->pit_in_kernel)
return 0;
return kvm_vm_ioctl(kvm_state, KVM_SET_PIT, s);
}
@@ -328,14 +328,14 @@ int kvm_set_pit(kvm_context_t kvm, struct kvm_pit_state *s)
#ifdef KVM_CAP_PIT_STATE2
int kvm_get_pit2(kvm_context_t kvm, struct kvm_pit_state2 *ps2)
{
- if (!kvm->pit_in_kernel)
+ if (!kvm_state->pit_in_kernel)
return 0;
return kvm_vm_ioctl(kvm_state, KVM_GET_PIT2, ps2);
}
int kvm_set_pit2(kvm_context_t kvm, struct kvm_pit_state2 *ps2)
{
- if (!kvm->pit_in_kernel)
+ if (!kvm_state->pit_in_kernel)
return 0;
return kvm_vm_ioctl(kvm_state, KVM_SET_PIT2, ps2);
}
@@ -1374,7 +1374,7 @@ int kvm_arch_halt(void *opaque, kvm_vcpu_context_t vcpu)
void kvm_arch_pre_kvm_run(void *opaque, CPUState *env)
{
- if (!kvm_irqchip_in_kernel(kvm_context))
+ if (!kvm_irqchip_in_kernel())
kvm_set_cr8(env->kvm_cpu_state.vcpu_ctx, cpu_get_apic_tpr(env));
}
@@ -1448,7 +1448,7 @@ void kvm_arch_cpu_reset(CPUState *env)
{
kvm_arch_load_regs(env);
if (!cpu_is_bsp(env)) {
- if (kvm_irqchip_in_kernel(kvm_context)) {
+ if (kvm_irqchip_in_kernel()) {
#ifdef KVM_CAP_MP_STATE
kvm_reset_mpstate(env->kvm_cpu_state.vcpu_ctx);
#endif
@@ -528,7 +528,7 @@ void kvm_create_irqchip(kvm_context_t kvm)
{
int r;
- kvm->irqchip_in_kernel = 0;
+ kvm_state->irqchip_in_kernel = 0;
#ifdef KVM_CAP_IRQCHIP
if (!kvm->no_irqchip_creation) {
r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_IRQCHIP);
@@ -542,7 +542,7 @@ void kvm_create_irqchip(kvm_context_t kvm)
if (r > 0)
kvm->irqchip_inject_ioctl = KVM_IRQ_LINE_STATUS;
#endif
- kvm->irqchip_in_kernel = 1;
+ kvm_state->irqchip_in_kernel = 1;
}
else
fprintf(stderr, "Create kernel PIC irqchip failed\n");
@@ -714,7 +714,7 @@ int kvm_set_irq_level(kvm_context_t kvm, int irq, int level, int *status)
struct kvm_irq_level event;
int r;
- if (!kvm->irqchip_in_kernel)
+ if (!kvm_state->irqchip_in_kernel)
return 0;
event.level = level;
event.irq = irq;
@@ -738,7 +738,7 @@ int kvm_get_irqchip(kvm_context_t kvm, struct kvm_irqchip *chip)
{
int r;
- if (!kvm->irqchip_in_kernel)
+ if (!kvm_state->irqchip_in_kernel)
return 0;
r = kvm_vm_ioctl(kvm_state, KVM_GET_IRQCHIP, chip);
if (r < 0) {
@@ -751,7 +751,7 @@ int kvm_set_irqchip(kvm_context_t kvm, struct kvm_irqchip *chip)
{
int r;
- if (!kvm->irqchip_in_kernel)
+ if (!kvm_state->irqchip_in_kernel)
return 0;
r = kvm_vm_ioctl(kvm_state, KVM_SET_IRQCHIP, chip);
if (r < 0) {
@@ -958,7 +958,7 @@ int kvm_run(kvm_vcpu_context_t vcpu, void *env)
again:
push_nmi(kvm);
#if !defined(__s390__)
- if (!kvm->irqchip_in_kernel)
+ if (!kvm_state->irqchip_in_kernel)
run->request_interrupt_window = kvm_arch_try_push_interrupts(env);
#endif
r = pre_kvm_run(kvm, env);
@@ -1092,16 +1092,6 @@ int kvm_set_signal_mask(kvm_vcpu_context_t vcpu, const sigset_t *sigset)
return r;
}
-int kvm_irqchip_in_kernel(kvm_context_t kvm)
-{
- return kvm->irqchip_in_kernel;
-}
-
-int kvm_pit_in_kernel(kvm_context_t kvm)
-{
- return kvm->pit_in_kernel;
-}
-
int kvm_has_sync_mmu(void)
{
int r = 0;
@@ -1859,7 +1849,7 @@ static int kvm_main_loop_cpu(CPUState *env)
while (1) {
int run_cpu = !is_cpu_stopped(env);
- if (run_cpu && !kvm_irqchip_in_kernel(kvm_context)) {
+ if (run_cpu && !kvm_irqchip_in_kernel()) {
process_irqchip_events(env);
run_cpu = !env->halted;
}
@@ -57,14 +57,10 @@ struct kvm_context {
int dirty_pages_log_all;
/// do not create in-kernel irqchip if set
int no_irqchip_creation;
- /// in-kernel irqchip status
- int irqchip_in_kernel;
/// ioctl to use to inject interrupts
int irqchip_inject_ioctl;
/// do not create in-kernel pit if set
int no_pit_creation;
- /// in-kernel pit status
- int pit_in_kernel;
/// in-kernel coalesced mmio
int coalesced_mmio;
#ifdef KVM_CAP_IRQ_ROUTING
@@ -553,7 +549,7 @@ int kvm_dirty_pages_log_reset(kvm_context_t kvm);
*
* \param kvm Pointer to the current kvm_context
*/
-int kvm_irqchip_in_kernel(kvm_context_t kvm);
+int kvm_irqchip_in_kernel(void);
#ifdef KVM_CAP_IRQCHIP
/*!
@@ -637,7 +633,7 @@ void kvm_inject_x86_mce(CPUState *cenv, int bank, uint64_t status,
*
* \param kvm Pointer to the current kvm_context
*/
-int kvm_pit_in_kernel(kvm_context_t kvm);
+int kvm_pit_in_kernel(void);
/*!
* \brief Initialize coalesced MMIO
@@ -1099,8 +1095,8 @@ int handle_tpr_access(void *opaque, kvm_vcpu_context_t vcpu,
int kvm_has_sync_mmu(void);
#define kvm_enabled() (kvm_allowed)
-#define qemu_kvm_irqchip_in_kernel() kvm_irqchip_in_kernel(kvm_context)
-#define qemu_kvm_pit_in_kernel() kvm_pit_in_kernel(kvm_context)
+#define qemu_kvm_irqchip_in_kernel() kvm_irqchip_in_kernel()
+#define qemu_kvm_pit_in_kernel() kvm_pit_in_kernel()
#define qemu_kvm_has_gsi_routing() kvm_has_gsi_routing(kvm_context)
#ifdef TARGET_I386
#define qemu_kvm_has_pit_state2() kvm_has_pit_state2(kvm_context)
@@ -1202,6 +1198,8 @@ typedef struct KVMState
#ifdef KVM_CAP_SET_GUEST_DEBUG
struct kvm_sw_breakpoint_head kvm_sw_breakpoints;
#endif
+ int irqchip_in_kernel;
+ int pit_in_kernel;
struct kvm_context kvm_context;
} KVMState;
Upstream gained fields for irqchip_in_kernel and pit_in_kernel in KVMState. Remove them from kvm_context, and use them. Since we are still copying the KVMState structure, add those fields in our copy too. Signed-off-by: Glauber Costa <glommer@redhat.com> --- kvm-all.c | 2 ++ qemu-kvm-x86.c | 20 ++++++++++---------- qemu-kvm.c | 24 +++++++----------------- qemu-kvm.h | 14 ++++++-------- 4 files changed, 25 insertions(+), 35 deletions(-)