x86: Enable in-kernel irqchip before creating PIT
As the kvm api(https://docs.kernel.org/virt/kvm/api.html) reads,
KVM_CREATE_PIT2 call is only valid after enabling in-kernel irqchip
support via KVM_CREATE_IRQCHIP.
Signed-off-by: Tengfei Yu <moehanabichan@gmail.com>
Link: https://lore.kernel.org/r/20240129123310.28118-1-moehanabichan@gmail.com
Signed-off-by: Will Deacon <will@kernel.org>
diff --git a/x86/kvm.c b/x86/kvm.c
index 328fa75..71ebb1e 100644
--- a/x86/kvm.c
+++ b/x86/kvm.c
@@ -150,10 +150,6 @@
if (ret < 0)
die_perror("KVM_SET_TSS_ADDR ioctl");
- ret = ioctl(kvm->vm_fd, KVM_CREATE_PIT2, &pit_config);
- if (ret < 0)
- die_perror("KVM_CREATE_PIT2 ioctl");
-
if (ram_size < KVM_32BIT_GAP_START) {
kvm->ram_size = ram_size;
kvm->ram_start = mmap_anon_or_hugetlbfs(kvm, hugetlbfs_path, ram_size);
@@ -175,6 +171,10 @@
ret = ioctl(kvm->vm_fd, KVM_CREATE_IRQCHIP);
if (ret < 0)
die_perror("KVM_CREATE_IRQCHIP ioctl");
+
+ ret = ioctl(kvm->vm_fd, KVM_CREATE_PIT2, &pit_config);
+ if (ret < 0)
+ die_perror("KVM_CREATE_PIT2 ioctl");
}
void kvm__arch_delete_ram(struct kvm *kvm)