@@ -1483,6 +1483,21 @@ void kvm_irqchip_set_qemuirq_gsi(KVMState *s, qemu_irq irq, int gsi)
g_hash_table_insert(s->gsimap, irq, GINT_TO_POINTER(gsi));
}
+static void kvm_vrtc_create(KVMState *s)
+{
+ int ret;
+ if (kvm_check_extension(s, KVM_CAP_VRTC)) {
+ return;
+ }
+
+ ret = kvm_vm_ioctl(s, KVM_CREATE_VRTC);
+
+ if (ret < 0) {
+ fprintf(stderr, "Create kernel vrtc failed: %s\n", strerror(-ret));
+ exit(1);
+ }
+}
+
static void kvm_irqchip_create(MachineState *machine, KVMState *s)
{
int ret;
@@ -1750,6 +1765,8 @@ static int kvm_init(MachineState *ms)
if (machine_kernel_irqchip_allowed(ms)) {
kvm_irqchip_create(ms, s);
}
+
+ kvm_vrtc_create(s);
if (kvm_eventfds_allowed) {
s->memory_listener.listener.eventfd_add = kvm_mem_ioeventfd_add;
@@ -929,6 +929,7 @@ struct kvm_ppc_resize_hpt {
#define KVM_CAP_PPC_SMT_POSSIBLE 147
#define KVM_CAP_HYPERV_SYNIC2 148
#define KVM_CAP_HYPERV_VP_INDEX 149
+#define KVM_CAP_VRTC 150
#ifdef KVM_CAP_IRQ_ROUTING
@@ -1258,7 +1259,7 @@ struct kvm_s390_ucas_mapping {
#define KVM_PPC_CONFIGURE_V3_MMU _IOW(KVMIO, 0xaf, struct kvm_ppc_mmuv3_cfg)
/* Available with KVM_CAP_PPC_RADIX_MMU */
#define KVM_PPC_GET_RMMU_INFO _IOW(KVMIO, 0xb0, struct kvm_ppc_rmmu_info)
-
+#define KVM_CREATE_VRTC _IO(KVMIO, 0xba)
/* ioctl for vm fd */
#define KVM_CREATE_DEVICE _IOWR(KVMIO, 0xe0, struct kvm_create_device)