.usr_regs.ARM_cpsr = SVC_MODE | PSR_A_BIT | PSR_I_BIT | PSR_F_BIT,
 };
 
-static const struct kvm_irq_level cortexa_ptimer_irq = {
-       { .irq = 30 },
-       .level = 1,
-};
-
-static const struct kvm_irq_level cortexa_vtimer_irq = {
-       { .irq = 27 },
-       .level = 1,
-};
-
 
 /*******************************************************************************
  * Exported reset function
 int kvm_reset_vcpu(struct kvm_vcpu *vcpu)
 {
        struct kvm_regs *reset_regs;
-       const struct kvm_irq_level *cpu_vtimer_irq;
-       const struct kvm_irq_level *cpu_ptimer_irq;
 
        switch (vcpu->arch.target) {
        case KVM_ARM_TARGET_CORTEX_A7:
        case KVM_ARM_TARGET_CORTEX_A15:
                reset_regs = &cortexa_regs_reset;
                vcpu->arch.midr = read_cpuid_id();
-               cpu_vtimer_irq = &cortexa_vtimer_irq;
-               cpu_ptimer_irq = &cortexa_ptimer_irq;
                break;
        default:
                return -ENODEV;
        kvm_reset_coprocs(vcpu);
 
        /* Reset arch_timer context */
-       return kvm_timer_vcpu_reset(vcpu, cpu_vtimer_irq, cpu_ptimer_irq);
+       return kvm_timer_vcpu_reset(vcpu);
 }
 
                        COMPAT_PSR_I_BIT | COMPAT_PSR_F_BIT),
 };
 
-static const struct kvm_irq_level default_ptimer_irq = {
-       .irq    = 30,
-       .level  = 1,
-};
-
-static const struct kvm_irq_level default_vtimer_irq = {
-       .irq    = 27,
-       .level  = 1,
-};
-
 static bool cpu_has_32bit_el1(void)
 {
        u64 pfr0;
  */
 int kvm_reset_vcpu(struct kvm_vcpu *vcpu)
 {
-       const struct kvm_irq_level *cpu_vtimer_irq;
-       const struct kvm_irq_level *cpu_ptimer_irq;
        const struct kvm_regs *cpu_reset;
 
        switch (vcpu->arch.target) {
                        cpu_reset = &default_regs_reset;
                }
 
-               cpu_vtimer_irq = &default_vtimer_irq;
-               cpu_ptimer_irq = &default_ptimer_irq;
                break;
        }
 
        kvm_pmu_vcpu_reset(vcpu);
 
        /* Reset timer */
-       return kvm_timer_vcpu_reset(vcpu, cpu_vtimer_irq, cpu_ptimer_irq);
+       return kvm_timer_vcpu_reset(vcpu);
 }
 
 
 int kvm_timer_hyp_init(void);
 int kvm_timer_enable(struct kvm_vcpu *vcpu);
-int kvm_timer_vcpu_reset(struct kvm_vcpu *vcpu,
-                        const struct kvm_irq_level *virt_irq,
-                        const struct kvm_irq_level *phys_irq);
+int kvm_timer_vcpu_reset(struct kvm_vcpu *vcpu);
 void kvm_timer_vcpu_init(struct kvm_vcpu *vcpu);
 void kvm_timer_flush_hwstate(struct kvm_vcpu *vcpu);
 void kvm_timer_sync_hwstate(struct kvm_vcpu *vcpu);
 
 static unsigned int host_vtimer_irq;
 static u32 host_vtimer_irq_flags;
 
+static const struct kvm_irq_level default_ptimer_irq = {
+       .irq    = 30,
+       .level  = 1,
+};
+
+static const struct kvm_irq_level default_vtimer_irq = {
+       .irq    = 27,
+       .level  = 1,
+};
+
 void kvm_timer_vcpu_put(struct kvm_vcpu *vcpu)
 {
        vcpu_vtimer(vcpu)->active_cleared_last = false;
        kvm_timer_update_state(vcpu);
 }
 
-int kvm_timer_vcpu_reset(struct kvm_vcpu *vcpu,
-                        const struct kvm_irq_level *virt_irq,
-                        const struct kvm_irq_level *phys_irq)
+int kvm_timer_vcpu_reset(struct kvm_vcpu *vcpu)
 {
        struct arch_timer_context *vtimer = vcpu_vtimer(vcpu);
        struct arch_timer_context *ptimer = vcpu_ptimer(vcpu);
 
-       /*
-        * The vcpu timer irq number cannot be determined in
-        * kvm_timer_vcpu_init() because it is called much before
-        * kvm_vcpu_set_target(). To handle this, we determine
-        * vcpu timer irq number when the vcpu is reset.
-        */
-       vtimer->irq.irq = virt_irq->irq;
-       ptimer->irq.irq = phys_irq->irq;
-
        /*
         * The bits in CNTV_CTL are architecturally reset to UNKNOWN for ARMv8
         * and to 0 for ARMv7.  We provide an implementation that always
 void kvm_timer_vcpu_init(struct kvm_vcpu *vcpu)
 {
        struct arch_timer_cpu *timer = &vcpu->arch.timer_cpu;
+       struct arch_timer_context *vtimer = vcpu_vtimer(vcpu);
+       struct arch_timer_context *ptimer = vcpu_ptimer(vcpu);
 
        /* Synchronize cntvoff across all vtimers of a VM. */
        update_vtimer_cntvoff(vcpu, kvm_phys_timer_read());
        INIT_WORK(&timer->expired, kvm_timer_inject_irq_work);
        hrtimer_init(&timer->timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
        timer->timer.function = kvm_timer_expire;
+
+       vtimer->irq.irq = default_vtimer_irq.irq;
+       ptimer->irq.irq = default_ptimer_irq.irq;
 }
 
 static void kvm_timer_init_interrupt(void *info)