diff options
author | Xiaoyao Li <xiaoyao.li@intel.com> | 2019-12-28 18:43:26 +0800 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2020-01-07 12:08:39 +0100 |
commit | d1972be13fd7125ca86a6aaf2690539cf9196ea1 (patch) | |
tree | c405927f8d6242173e45de6cfc75e5c5fe7f7d72 /accel/kvm | |
parent | 8f54bbd0b4d9218e7c56a3a9c572b70943579e22 (diff) |
accel/kvm: Make "kernel_irqchip" default on
Commit 11bc4a13d1f4 ("kvm: convert "-machine kernel_irqchip" to an
accelerator property") moves kernel_irqchip property from "-machine" to
"-accel kvm", but it forgets to set the default value of
kernel_irqchip_allowed and kernel_irqchip_split.
Also cleaning up the three useless members (kernel_irqchip_allowed,
kernel_irqchip_required, kernel_irqchip_split) in struct MachineState.
Fixes: 11bc4a13d1f4 ("kvm: convert "-machine kernel_irqchip" to an accelerator property")
Reported-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
Message-Id: <20191228104326.21732-1-xiaoyao.li@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'accel/kvm')
-rw-r--r-- | accel/kvm/kvm-all.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index b2f1a5bcb5..1ada2f4ecb 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -98,7 +98,7 @@ struct KVMState int kvm_shadow_mem; bool kernel_irqchip_allowed; bool kernel_irqchip_required; - bool kernel_irqchip_split; + OnOffAuto kernel_irqchip_split; bool sync_mmu; bool manual_dirty_log_protect; /* The man page (and posix) say ioctl numbers are signed int, but @@ -1783,6 +1783,7 @@ static void kvm_irqchip_create(KVMState *s) { int ret; + assert(s->kernel_irqchip_split != ON_OFF_AUTO_AUTO); if (kvm_check_extension(s, KVM_CAP_IRQCHIP)) { ; } else if (kvm_check_extension(s, KVM_CAP_S390_IRQCHIP)) { @@ -1799,7 +1800,7 @@ static void kvm_irqchip_create(KVMState *s) * in-kernel irqchip for us */ ret = kvm_arch_irqchip_create(s); if (ret == 0) { - if (s->kernel_irqchip_split) { + if (s->kernel_irqchip_split == ON_OFF_AUTO_ON) { perror("Split IRQ chip mode not supported."); exit(1); } else { @@ -2070,6 +2071,10 @@ static int kvm_init(MachineState *ms) goto err; } + if (s->kernel_irqchip_split == ON_OFF_AUTO_AUTO) { + s->kernel_irqchip_split = mc->default_kernel_irqchip_split ? ON_OFF_AUTO_ON : ON_OFF_AUTO_OFF; + } + if (s->kernel_irqchip_allowed) { kvm_irqchip_create(s); } @@ -3005,17 +3010,17 @@ static void kvm_set_kernel_irqchip(Object *obj, Visitor *v, case ON_OFF_SPLIT_ON: s->kernel_irqchip_allowed = true; s->kernel_irqchip_required = true; - s->kernel_irqchip_split = false; + s->kernel_irqchip_split = ON_OFF_AUTO_OFF; break; case ON_OFF_SPLIT_OFF: s->kernel_irqchip_allowed = false; s->kernel_irqchip_required = false; - s->kernel_irqchip_split = false; + s->kernel_irqchip_split = ON_OFF_AUTO_OFF; break; case ON_OFF_SPLIT_SPLIT: s->kernel_irqchip_allowed = true; s->kernel_irqchip_required = true; - s->kernel_irqchip_split = true; + s->kernel_irqchip_split = ON_OFF_AUTO_ON; break; default: /* The value was checked in visit_type_OnOffSplit() above. If @@ -3038,7 +3043,7 @@ bool kvm_kernel_irqchip_required(void) bool kvm_kernel_irqchip_split(void) { - return kvm_state->kernel_irqchip_split; + return kvm_state->kernel_irqchip_split == ON_OFF_AUTO_ON; } static void kvm_accel_instance_init(Object *obj) @@ -3046,6 +3051,8 @@ static void kvm_accel_instance_init(Object *obj) KVMState *s = KVM_STATE(obj); s->kvm_shadow_mem = -1; + s->kernel_irqchip_allowed = true; + s->kernel_irqchip_split = ON_OFF_AUTO_AUTO; } static void kvm_accel_class_init(ObjectClass *oc, void *data) |