Since the recent cleanups to hide host configuration details from guests, it isn't possible to start an older machine type with HV KVM [*]:
qemu-system-ppc64: KVM doesn't support for base page shift 34 This basically boils down to the fact that it isn't safe to call the kvmppc_hpt_needs_host_contiguous_pages() helper from a class init function because: - KVM isn't initialized yet, and kvm_enabled() always return false in this case. This causes kvmppc_hpt_needs_host_contiguous_pages() to do nothing and we end up choosing a 16G default page size which is not supported by KVM. - even if we drop kvm_enabled() we then have the issue that kvmppc_hpt_needs_host_contiguous_pages() assumes CPUs are created, which isn't the case either. The choice was made to initialize capabilities during machine init before creating the CPUs, and I don't think we should revert to the previous behavior. Let's go forward instead and ensure we can retrieve the MMU information from KVM before CPUs are created. To fix this, we first change kvm_get_smmu_info() so that it doesn't need a CPU object. This allows to stop using first_cpu in kvmppc_hpt_needs_host_contiguous_pages(). Then we delay the setting of the default value to machine init time, so that we're sure that KVM is fully initialized. As a bonus, the last patch is a tentative to be able to detect such misuse of *_enabled() accelerator helpers earlier. Please comment. [*] it also breaks PR KVM actually, but the error is different and I need to dig some more. -- Greg --- Greg Kurz (3): target/ppc/kvm: don't pass cpu to kvm_get_smmu_info() spapr: compute default value of "hpt-max-page-size" later accel: forbid early use of kvm_enabled() and friends accel/accel.c | 7 +++++++ hw/ppc/spapr.c | 25 ++++++++++++++++++------- include/qemu-common.h | 3 ++- include/sysemu/accel.h | 1 + include/sysemu/kvm.h | 3 ++- qom/cpu.c | 1 + stubs/Makefile.objs | 1 + stubs/accel.c | 14 ++++++++++++++ target/i386/hax-all.c | 2 +- target/i386/whpx-all.c | 2 +- target/ppc/kvm.c | 37 ++++++++++++++++++------------------- target/ppc/mmu-hash64.h | 8 +++++++- 12 files changed, 73 insertions(+), 31 deletions(-)