Message ID | 20191021100515.6978-1-david@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] s390x/kvm: Set default cpu model for all machine classes | expand |
On Mon, 21 Oct 2019 12:05:15 +0200 David Hildenbrand <david@redhat.com> wrote: > We have to set the default model of all machine classes, not just for > the active one. Otherwise, "query-machines" will indicate the wrong > CPU model ("qemu-s390x-cpu" instead of "host-s390x-cpu") as > "default-cpu-type". > > Doing a > {"execute":"query-machines"} > under KVM now results in > {"return": [ > { > "hotpluggable-cpus": true, > "name": "s390-ccw-virtio-4.0", > "numa-mem-supported": false, > "default-cpu-type": "host-s390x-cpu", > "cpu-max": 248, > "deprecated": false}, > { > "hotpluggable-cpus": true, > "name": "s390-ccw-virtio-2.7", > "numa-mem-supported": false, > "default-cpu-type": "host-s390x-cpu", > "cpu-max": 248, > "deprecated": false > } ... > > Libvirt probes all machines via "-machine none,accel=kvm:tcg" and will > currently see the wrong CPU model under KVM. > > Reported-by: Jiri Denemark <jdenemar@redhat.com> > Reviewed-by: Thomas Huth <thuth@redhat.com> > Fixes: b6805e127c6b ("s390x: use generic cpu_model parsing") > Cc: Igor Mammedov <imammedo@redhat.com> > Signed-off-by: David Hildenbrand <david@redhat.com> > --- > > v1 -> v2: > - Added a sentence how libvirt probes the machines/default cpu models > - klass -> oc > > --- > target/s390x/kvm.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) Thanks, applied.
diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index c24c869e77..0c9d14b4b1 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -320,11 +320,17 @@ void kvm_s390_set_max_pagesize(uint64_t pagesize, Error **errp) cap_hpage_1m = 1; } -int kvm_arch_init(MachineState *ms, KVMState *s) +static void ccw_machine_class_foreach(ObjectClass *oc, void *opaque) { - MachineClass *mc = MACHINE_GET_CLASS(ms); + MachineClass *mc = MACHINE_CLASS(oc); mc->default_cpu_type = S390_CPU_TYPE_NAME("host"); +} + +int kvm_arch_init(MachineState *ms, KVMState *s) +{ + object_class_foreach(ccw_machine_class_foreach, TYPE_S390_CCW_MACHINE, + false, NULL); if (!kvm_check_extension(kvm_state, KVM_CAP_DEVICE_CTRL)) { error_report("KVM is missing capability KVM_CAP_DEVICE_CTRL - "