Message ID | 1409344310-5441-9-git-send-email-ehabkost@redhat.com |
---|---|
State | New |
Headers | show |
Il 29/08/2014 22:31, Eduardo Habkost ha scritto: > Note that this has an user-visible side-effect: instead of reporting > "KVM is not supported for this target", QEMU binaries not supporting KVM > will report "kvm accelerator does not exist". "does not exist" perhaps is a bit too strong. Perhaps change the message to "not found"? Paolo
Il 29/08/2014 22:31, Eduardo Habkost ha scritto: > Note that this has an user-visible side-effect: instead of reporting > "KVM is not supported for this target", QEMU binaries not supporting KVM > will report "kvm accelerator does not exist". > > As kvm_availble() always return 1 when CONFIG_KVM is enabled, we don't > need to set AccelClass.available anymore. kvm_enabled() is not being > completely removed yet only because qmp_query_kvm() still uses it. > > This also allows us to make kvm_init() static. > > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> > --- > hw/core/accel.c | 18 ------------------ > include/sysemu/kvm.h | 2 -- > kvm-all.c | 26 +++++++++++++++++++++++++- > kvm-stub.c | 5 ----- > 4 files changed, 25 insertions(+), 26 deletions(-) > > diff --git a/hw/core/accel.c b/hw/core/accel.c > index 483bbe8..61dafcb 100644 > --- a/hw/core/accel.c > +++ b/hw/core/accel.c > @@ -149,23 +149,6 @@ static const TypeInfo xen_accel_type = { > .class_init = xen_accel_class_init, > }; > > -static void kvm_accel_class_init(ObjectClass *oc, void *data) > -{ > - AccelClass *ac = ACCEL_CLASS(oc); > - ac->name = "KVM"; > - ac->available = kvm_available; > - ac->init = kvm_init; > - ac->allowed = &kvm_allowed; > -} > - > -#define TYPE_KVM_ACCEL ACCEL_CLASS_NAME("kvm") > - > -static const TypeInfo kvm_accel_type = { > - .name = TYPE_KVM_ACCEL, > - .parent = TYPE_ACCEL, > - .class_init = kvm_accel_class_init, > -}; > - > static void qtest_accel_class_init(ObjectClass *oc, void *data) > { > AccelClass *ac = ACCEL_CLASS(oc); > @@ -188,7 +171,6 @@ static void register_accel_types(void) > type_register_static(&accel_type); > type_register_static(&tcg_accel_type); > type_register_static(&xen_accel_type); > - type_register_static(&kvm_accel_type); > type_register_static(&qtest_accel_type); > } > > diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h > index 174ea36..7b95bfd 100644 > --- a/include/sysemu/kvm.h > +++ b/include/sysemu/kvm.h > @@ -163,8 +163,6 @@ extern KVMState *kvm_state; > > /* external API */ > > -int kvm_init(MachineClass *mc); > - > int kvm_has_sync_mmu(void); > int kvm_has_vcpu_events(void); > int kvm_has_robust_singlestep(void); > diff --git a/kvm-all.c b/kvm-all.c > index b240bf8..7db966e 100644 > --- a/kvm-all.c > +++ b/kvm-all.c > @@ -26,6 +26,7 @@ > #include "qemu/config-file.h" > #include "sysemu/sysemu.h" > #include "hw/hw.h" > +#include "hw/accel.h" > #include "hw/pci/msi.h" > #include "hw/s390x/adapter.h" > #include "exec/gdbstub.h" > @@ -110,6 +111,8 @@ struct KVMState > #endif > }; > > +#define TYPE_KVM_ACCEL ACCEL_CLASS_NAME("kvm") > + > KVMState *kvm_state; > bool kvm_kernel_irqchip; > bool kvm_async_interrupts_allowed; > @@ -1368,7 +1371,7 @@ static int kvm_max_vcpus(KVMState *s) > return (ret) ? ret : kvm_recommended_vcpus(s); > } > > -int kvm_init(MachineClass *mc) > +static int kvm_init(MachineClass *mc) > { > static const char upgrade_note[] = > "Please upgrade to at least kernel 2.6.29 or recent kvm-kmod\n" > @@ -2213,3 +2216,24 @@ int kvm_get_one_reg(CPUState *cs, uint64_t id, void *target) > } > return r; > } > + > +static void kvm_accel_class_init(ObjectClass *oc, void *data) > +{ > + AccelClass *ac = ACCEL_CLASS(oc); > + ac->name = "KVM"; > + ac->init = kvm_init; > + ac->allowed = &kvm_allowed; > +} > + > +static const TypeInfo kvm_accel_type = { > + .name = TYPE_KVM_ACCEL, > + .parent = TYPE_ACCEL, > + .class_init = kvm_accel_class_init, > +}; > + > +static void kvm_type_init(void) > +{ > + type_register_static(&kvm_accel_type); > +} > + > +type_init(kvm_type_init); > diff --git a/kvm-stub.c b/kvm-stub.c > index 8e7737c..43fc0dd 100644 > --- a/kvm-stub.c > +++ b/kvm-stub.c > @@ -35,11 +35,6 @@ int kvm_init_vcpu(CPUState *cpu) > return -ENOSYS; > } > > -int kvm_init(MachineClass *mc) > -{ > - return -ENOSYS; > -} > - > void kvm_flush_coalesced_mmio_buffer(void) > { > } > Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
diff --git a/hw/core/accel.c b/hw/core/accel.c index 483bbe8..61dafcb 100644 --- a/hw/core/accel.c +++ b/hw/core/accel.c @@ -149,23 +149,6 @@ static const TypeInfo xen_accel_type = { .class_init = xen_accel_class_init, }; -static void kvm_accel_class_init(ObjectClass *oc, void *data) -{ - AccelClass *ac = ACCEL_CLASS(oc); - ac->name = "KVM"; - ac->available = kvm_available; - ac->init = kvm_init; - ac->allowed = &kvm_allowed; -} - -#define TYPE_KVM_ACCEL ACCEL_CLASS_NAME("kvm") - -static const TypeInfo kvm_accel_type = { - .name = TYPE_KVM_ACCEL, - .parent = TYPE_ACCEL, - .class_init = kvm_accel_class_init, -}; - static void qtest_accel_class_init(ObjectClass *oc, void *data) { AccelClass *ac = ACCEL_CLASS(oc); @@ -188,7 +171,6 @@ static void register_accel_types(void) type_register_static(&accel_type); type_register_static(&tcg_accel_type); type_register_static(&xen_accel_type); - type_register_static(&kvm_accel_type); type_register_static(&qtest_accel_type); } diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h index 174ea36..7b95bfd 100644 --- a/include/sysemu/kvm.h +++ b/include/sysemu/kvm.h @@ -163,8 +163,6 @@ extern KVMState *kvm_state; /* external API */ -int kvm_init(MachineClass *mc); - int kvm_has_sync_mmu(void); int kvm_has_vcpu_events(void); int kvm_has_robust_singlestep(void); diff --git a/kvm-all.c b/kvm-all.c index b240bf8..7db966e 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -26,6 +26,7 @@ #include "qemu/config-file.h" #include "sysemu/sysemu.h" #include "hw/hw.h" +#include "hw/accel.h" #include "hw/pci/msi.h" #include "hw/s390x/adapter.h" #include "exec/gdbstub.h" @@ -110,6 +111,8 @@ struct KVMState #endif }; +#define TYPE_KVM_ACCEL ACCEL_CLASS_NAME("kvm") + KVMState *kvm_state; bool kvm_kernel_irqchip; bool kvm_async_interrupts_allowed; @@ -1368,7 +1371,7 @@ static int kvm_max_vcpus(KVMState *s) return (ret) ? ret : kvm_recommended_vcpus(s); } -int kvm_init(MachineClass *mc) +static int kvm_init(MachineClass *mc) { static const char upgrade_note[] = "Please upgrade to at least kernel 2.6.29 or recent kvm-kmod\n" @@ -2213,3 +2216,24 @@ int kvm_get_one_reg(CPUState *cs, uint64_t id, void *target) } return r; } + +static void kvm_accel_class_init(ObjectClass *oc, void *data) +{ + AccelClass *ac = ACCEL_CLASS(oc); + ac->name = "KVM"; + ac->init = kvm_init; + ac->allowed = &kvm_allowed; +} + +static const TypeInfo kvm_accel_type = { + .name = TYPE_KVM_ACCEL, + .parent = TYPE_ACCEL, + .class_init = kvm_accel_class_init, +}; + +static void kvm_type_init(void) +{ + type_register_static(&kvm_accel_type); +} + +type_init(kvm_type_init); diff --git a/kvm-stub.c b/kvm-stub.c index 8e7737c..43fc0dd 100644 --- a/kvm-stub.c +++ b/kvm-stub.c @@ -35,11 +35,6 @@ int kvm_init_vcpu(CPUState *cpu) return -ENOSYS; } -int kvm_init(MachineClass *mc) -{ - return -ENOSYS; -} - void kvm_flush_coalesced_mmio_buffer(void) { }
Note that this has an user-visible side-effect: instead of reporting "KVM is not supported for this target", QEMU binaries not supporting KVM will report "kvm accelerator does not exist". As kvm_availble() always return 1 when CONFIG_KVM is enabled, we don't need to set AccelClass.available anymore. kvm_enabled() is not being completely removed yet only because qmp_query_kvm() still uses it. This also allows us to make kvm_init() static. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> --- hw/core/accel.c | 18 ------------------ include/sysemu/kvm.h | 2 -- kvm-all.c | 26 +++++++++++++++++++++++++- kvm-stub.c | 5 ----- 4 files changed, 25 insertions(+), 26 deletions(-)