[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH]Enable kvmvapic only when host doesn't support VAPIC
From: |
Xu, Anthony |
Subject: |
[Qemu-devel] [PATCH]Enable kvmvapic only when host doesn't support VAPIC capability in KVM mode |
Date: |
Wed, 5 Apr 2017 00:52:25 +0000 |
In KVM mode, enable kvmvapic only when host doesn't support
VAPIC capability.
Save the time to set up kvmvapic in some hosts.
Signed-off -by: Anthony Xu <address@hidden>
diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c
index c3829e3..d5c53af 100644
--- a/hw/intc/apic_common.c
+++ b/hw/intc/apic_common.c
@@ -317,8 +317,11 @@ static void apic_common_realize(DeviceState *dev, Error
**errp)
info = APIC_COMMON_GET_CLASS(s);
info->realize(dev, errp);
- /* Note: We need at least 1M to map the VAPIC option ROM */
+ /* Note: We need at least 1M to map the VAPIC option ROM,
+ if it is KVM, enable kvmvapic only when KVM doesn't have
+ VAPIC capability */
if (!vapic && s->vapic_control & VAPIC_ENABLE_MASK &&
+ (!kvm_enabled() || (kvm_enabled() && !kvm_has_vapic())) &&
!hax_enabled() && ram_size >= 1024 * 1024) {
vapic = sysbus_create_simple("kvmvapic", -1, NULL);
}
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
index 24281fc..43e0e4c 100644
--- a/include/sysemu/kvm.h
+++ b/include/sysemu/kvm.h
@@ -215,6 +215,7 @@ extern KVMState *kvm_state;
bool kvm_has_free_slot(MachineState *ms);
int kvm_has_sync_mmu(void);
+int kvm_has_vapic(void);
int kvm_has_vcpu_events(void);
int kvm_has_robust_singlestep(void);
int kvm_has_debugregs(void);
diff --git a/kvm-all.c b/kvm-all.c
index 90b8573..edcb6ea 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -2232,6 +2232,10 @@ int kvm_has_sync_mmu(void)
return kvm_check_extension(kvm_state, KVM_CAP_SYNC_MMU);
}
+int kvm_has_vapic(void){
+ return !kvm_check_extension(kvm_state, KVM_CAP_VAPIC);
+}
+
int kvm_has_vcpu_events(void)
{
return kvm_state->vcpu_events;
- [Qemu-devel] [PATCH]Enable kvmvapic only when host doesn't support VAPIC capability in KVM mode,
Xu, Anthony <=