• Home
  • Raw
  • Download

Lines Matching full:vcpu

43 static void kvm_timer_update_irq(struct kvm_vcpu *vcpu, bool new_level,
46 static void kvm_arm_timer_write(struct kvm_vcpu *vcpu,
50 static u64 kvm_arm_timer_read(struct kvm_vcpu *vcpu,
56 struct kvm_vcpu *vcpu = ctxt->vcpu; in timer_get_ctl() local
60 return __vcpu_sys_reg(vcpu, CNTV_CTL_EL0); in timer_get_ctl()
62 return __vcpu_sys_reg(vcpu, CNTP_CTL_EL0); in timer_get_ctl()
71 struct kvm_vcpu *vcpu = ctxt->vcpu; in timer_get_cval() local
75 return __vcpu_sys_reg(vcpu, CNTV_CVAL_EL0); in timer_get_cval()
77 return __vcpu_sys_reg(vcpu, CNTP_CVAL_EL0); in timer_get_cval()
86 struct kvm_vcpu *vcpu = ctxt->vcpu; in timer_get_offset() local
90 return __vcpu_sys_reg(vcpu, CNTVOFF_EL2); in timer_get_offset()
98 struct kvm_vcpu *vcpu = ctxt->vcpu; in timer_set_ctl() local
102 __vcpu_sys_reg(vcpu, CNTV_CTL_EL0) = ctl; in timer_set_ctl()
105 __vcpu_sys_reg(vcpu, CNTP_CTL_EL0) = ctl; in timer_set_ctl()
114 struct kvm_vcpu *vcpu = ctxt->vcpu; in timer_set_cval() local
118 __vcpu_sys_reg(vcpu, CNTV_CVAL_EL0) = cval; in timer_set_cval()
121 __vcpu_sys_reg(vcpu, CNTP_CVAL_EL0) = cval; in timer_set_cval()
130 struct kvm_vcpu *vcpu = ctxt->vcpu; in timer_set_offset() local
134 __vcpu_sys_reg(vcpu, CNTVOFF_EL2) = offset; in timer_set_offset()
146 static void get_timer_map(struct kvm_vcpu *vcpu, struct timer_map *map) in get_timer_map() argument
149 map->direct_vtimer = vcpu_vtimer(vcpu); in get_timer_map()
150 map->direct_ptimer = vcpu_ptimer(vcpu); in get_timer_map()
153 map->direct_vtimer = vcpu_vtimer(vcpu); in get_timer_map()
155 map->emul_ptimer = vcpu_ptimer(vcpu); in get_timer_map()
158 trace_kvm_get_timer_map(vcpu->vcpu_id, map); in get_timer_map()
180 struct kvm_vcpu *vcpu = *(struct kvm_vcpu **)dev_id; in kvm_arch_timer_handler() local
186 * sets the CPU's vcpu pointer to NULL, because even though the timer in kvm_arch_timer_handler()
190 if (!vcpu) in kvm_arch_timer_handler()
193 get_timer_map(vcpu, &map); in kvm_arch_timer_handler()
201 kvm_timer_update_irq(vcpu, true, ctx); in kvm_arch_timer_handler()
203 if (userspace_irqchip(vcpu->kvm) && in kvm_arch_timer_handler()
242 static u64 kvm_timer_earliest_exp(struct kvm_vcpu *vcpu) in kvm_timer_earliest_exp() argument
248 struct arch_timer_context *ctx = &vcpu->arch.timer_cpu.timers[i]; in kvm_timer_earliest_exp()
265 struct kvm_vcpu *vcpu; in kvm_bg_timer_expire() local
269 vcpu = container_of(timer, struct kvm_vcpu, arch.timer_cpu); in kvm_bg_timer_expire()
276 ns = kvm_timer_earliest_exp(vcpu); in kvm_bg_timer_expire()
282 kvm_vcpu_wake_up(vcpu); in kvm_bg_timer_expire()
289 struct kvm_vcpu *vcpu; in kvm_hrtimer_expire() local
293 vcpu = ctx->vcpu; in kvm_hrtimer_expire()
308 kvm_timer_update_irq(vcpu, true, ctx); in kvm_hrtimer_expire()
352 bool kvm_timer_is_pending(struct kvm_vcpu *vcpu) in kvm_timer_is_pending() argument
356 get_timer_map(vcpu, &map); in kvm_timer_is_pending()
366 void kvm_timer_update_run(struct kvm_vcpu *vcpu) in kvm_timer_update_run() argument
368 struct arch_timer_context *vtimer = vcpu_vtimer(vcpu); in kvm_timer_update_run()
369 struct arch_timer_context *ptimer = vcpu_ptimer(vcpu); in kvm_timer_update_run()
370 struct kvm_sync_regs *regs = &vcpu->run->s.regs; in kvm_timer_update_run()
381 static void kvm_timer_update_irq(struct kvm_vcpu *vcpu, bool new_level, in kvm_timer_update_irq() argument
387 trace_kvm_timer_update_irq(vcpu->vcpu_id, timer_ctx->irq.irq, in kvm_timer_update_irq()
390 if (!userspace_irqchip(vcpu->kvm)) { in kvm_timer_update_irq()
391 ret = kvm_vgic_inject_irq(vcpu->kvm, vcpu->vcpu_id, in kvm_timer_update_irq()
407 kvm_timer_update_irq(ctx->vcpu, should_fire, ctx); in timer_emulate()
426 struct arch_timer_cpu *timer = vcpu_timer(ctx->vcpu); in timer_save_state()
473 static void kvm_timer_blocking(struct kvm_vcpu *vcpu) in kvm_timer_blocking() argument
475 struct arch_timer_cpu *timer = vcpu_timer(vcpu); in kvm_timer_blocking()
478 get_timer_map(vcpu, &map); in kvm_timer_blocking()
493 soft_timer_start(&timer->bg_timer, kvm_timer_earliest_exp(vcpu)); in kvm_timer_blocking()
496 static void kvm_timer_unblocking(struct kvm_vcpu *vcpu) in kvm_timer_unblocking() argument
498 struct arch_timer_cpu *timer = vcpu_timer(vcpu); in kvm_timer_unblocking()
505 struct arch_timer_cpu *timer = vcpu_timer(ctx->vcpu); in timer_restore_state()
553 struct kvm_vcpu *vcpu = ctx->vcpu; in kvm_timer_vcpu_load_gic() local
562 kvm_timer_update_irq(ctx->vcpu, kvm_timer_should_fire(ctx), ctx); in kvm_timer_vcpu_load_gic()
564 if (irqchip_in_kernel(vcpu->kvm)) in kvm_timer_vcpu_load_gic()
565 phys_active = kvm_vgic_map_is_active(vcpu, ctx->irq.irq); in kvm_timer_vcpu_load_gic()
572 static void kvm_timer_vcpu_load_nogic(struct kvm_vcpu *vcpu) in kvm_timer_vcpu_load_nogic() argument
574 struct arch_timer_context *vtimer = vcpu_vtimer(vcpu); in kvm_timer_vcpu_load_nogic()
582 kvm_timer_update_irq(vcpu, kvm_timer_should_fire(vtimer), vtimer); in kvm_timer_vcpu_load_nogic()
600 void kvm_timer_vcpu_load(struct kvm_vcpu *vcpu) in kvm_timer_vcpu_load() argument
602 struct arch_timer_cpu *timer = vcpu_timer(vcpu); in kvm_timer_vcpu_load()
608 get_timer_map(vcpu, &map); in kvm_timer_vcpu_load()
615 kvm_timer_vcpu_load_nogic(vcpu); in kvm_timer_vcpu_load()
620 kvm_timer_unblocking(vcpu); in kvm_timer_vcpu_load()
630 bool kvm_timer_should_notify_user(struct kvm_vcpu *vcpu) in kvm_timer_should_notify_user() argument
632 struct arch_timer_context *vtimer = vcpu_vtimer(vcpu); in kvm_timer_should_notify_user()
633 struct arch_timer_context *ptimer = vcpu_ptimer(vcpu); in kvm_timer_should_notify_user()
634 struct kvm_sync_regs *sregs = &vcpu->run->s.regs; in kvm_timer_should_notify_user()
637 if (likely(irqchip_in_kernel(vcpu->kvm))) in kvm_timer_should_notify_user()
647 void kvm_timer_vcpu_put(struct kvm_vcpu *vcpu) in kvm_timer_vcpu_put() argument
649 struct arch_timer_cpu *timer = vcpu_timer(vcpu); in kvm_timer_vcpu_put()
651 struct rcuwait *wait = kvm_arch_vcpu_get_wait(vcpu); in kvm_timer_vcpu_put()
656 get_timer_map(vcpu, &map); in kvm_timer_vcpu_put()
664 * need it after a vcpu_put is in the context of a sleeping VCPU, and in kvm_timer_vcpu_put()
669 * coming back to the VCPU thread in kvm_timer_vcpu_load(). in kvm_timer_vcpu_put()
675 kvm_timer_blocking(vcpu); in kvm_timer_vcpu_put()
692 static void unmask_vtimer_irq_user(struct kvm_vcpu *vcpu) in unmask_vtimer_irq_user() argument
694 struct arch_timer_context *vtimer = vcpu_vtimer(vcpu); in unmask_vtimer_irq_user()
697 kvm_timer_update_irq(vcpu, false, vtimer); in unmask_vtimer_irq_user()
705 void kvm_timer_sync_user(struct kvm_vcpu *vcpu) in kvm_timer_sync_user() argument
707 struct arch_timer_cpu *timer = vcpu_timer(vcpu); in kvm_timer_sync_user()
712 if (unlikely(!irqchip_in_kernel(vcpu->kvm))) in kvm_timer_sync_user()
713 unmask_vtimer_irq_user(vcpu); in kvm_timer_sync_user()
716 int kvm_timer_vcpu_reset(struct kvm_vcpu *vcpu) in kvm_timer_vcpu_reset() argument
718 struct arch_timer_cpu *timer = vcpu_timer(vcpu); in kvm_timer_vcpu_reset()
721 get_timer_map(vcpu, &map); in kvm_timer_vcpu_reset()
729 timer_set_ctl(vcpu_vtimer(vcpu), 0); in kvm_timer_vcpu_reset()
730 timer_set_ctl(vcpu_ptimer(vcpu), 0); in kvm_timer_vcpu_reset()
733 kvm_timer_update_irq(vcpu, false, vcpu_vtimer(vcpu)); in kvm_timer_vcpu_reset()
734 kvm_timer_update_irq(vcpu, false, vcpu_ptimer(vcpu)); in kvm_timer_vcpu_reset()
736 if (irqchip_in_kernel(vcpu->kvm)) { in kvm_timer_vcpu_reset()
737 kvm_vgic_reset_mapped_irq(vcpu, map.direct_vtimer->irq.irq); in kvm_timer_vcpu_reset()
739 kvm_vgic_reset_mapped_irq(vcpu, map.direct_ptimer->irq.irq); in kvm_timer_vcpu_reset()
750 static void update_vtimer_cntvoff(struct kvm_vcpu *vcpu, u64 cntvoff) in update_vtimer_cntvoff() argument
753 struct kvm *kvm = vcpu->kvm; in update_vtimer_cntvoff()
761 * When called from the vcpu create path, the CPU being created is not in update_vtimer_cntvoff()
764 timer_set_offset(vcpu_vtimer(vcpu), cntvoff); in update_vtimer_cntvoff()
768 void kvm_timer_vcpu_init(struct kvm_vcpu *vcpu) in kvm_timer_vcpu_init() argument
770 struct arch_timer_cpu *timer = vcpu_timer(vcpu); in kvm_timer_vcpu_init()
771 struct arch_timer_context *vtimer = vcpu_vtimer(vcpu); in kvm_timer_vcpu_init()
772 struct arch_timer_context *ptimer = vcpu_ptimer(vcpu); in kvm_timer_vcpu_init()
774 vtimer->vcpu = vcpu; in kvm_timer_vcpu_init()
775 ptimer->vcpu = vcpu; in kvm_timer_vcpu_init()
778 update_vtimer_cntvoff(vcpu, kvm_phys_timer_read()); in kvm_timer_vcpu_init()
805 int kvm_arm_timer_set_reg(struct kvm_vcpu *vcpu, u64 regid, u64 value) in kvm_arm_timer_set_reg() argument
811 timer = vcpu_vtimer(vcpu); in kvm_arm_timer_set_reg()
812 kvm_arm_timer_write(vcpu, timer, TIMER_REG_CTL, value); in kvm_arm_timer_set_reg()
815 timer = vcpu_vtimer(vcpu); in kvm_arm_timer_set_reg()
816 update_vtimer_cntvoff(vcpu, kvm_phys_timer_read() - value); in kvm_arm_timer_set_reg()
819 timer = vcpu_vtimer(vcpu); in kvm_arm_timer_set_reg()
820 kvm_arm_timer_write(vcpu, timer, TIMER_REG_CVAL, value); in kvm_arm_timer_set_reg()
823 timer = vcpu_ptimer(vcpu); in kvm_arm_timer_set_reg()
824 kvm_arm_timer_write(vcpu, timer, TIMER_REG_CTL, value); in kvm_arm_timer_set_reg()
827 timer = vcpu_ptimer(vcpu); in kvm_arm_timer_set_reg()
828 kvm_arm_timer_write(vcpu, timer, TIMER_REG_CVAL, value); in kvm_arm_timer_set_reg()
854 u64 kvm_arm_timer_get_reg(struct kvm_vcpu *vcpu, u64 regid) in kvm_arm_timer_get_reg() argument
858 return kvm_arm_timer_read(vcpu, in kvm_arm_timer_get_reg()
859 vcpu_vtimer(vcpu), TIMER_REG_CTL); in kvm_arm_timer_get_reg()
861 return kvm_arm_timer_read(vcpu, in kvm_arm_timer_get_reg()
862 vcpu_vtimer(vcpu), TIMER_REG_CNT); in kvm_arm_timer_get_reg()
864 return kvm_arm_timer_read(vcpu, in kvm_arm_timer_get_reg()
865 vcpu_vtimer(vcpu), TIMER_REG_CVAL); in kvm_arm_timer_get_reg()
867 return kvm_arm_timer_read(vcpu, in kvm_arm_timer_get_reg()
868 vcpu_ptimer(vcpu), TIMER_REG_CTL); in kvm_arm_timer_get_reg()
870 return kvm_arm_timer_read(vcpu, in kvm_arm_timer_get_reg()
871 vcpu_ptimer(vcpu), TIMER_REG_CNT); in kvm_arm_timer_get_reg()
873 return kvm_arm_timer_read(vcpu, in kvm_arm_timer_get_reg()
874 vcpu_ptimer(vcpu), TIMER_REG_CVAL); in kvm_arm_timer_get_reg()
879 static u64 kvm_arm_timer_read(struct kvm_vcpu *vcpu, in kvm_arm_timer_read() argument
910 u64 kvm_arm_timer_read_sysreg(struct kvm_vcpu *vcpu, in kvm_arm_timer_read_sysreg() argument
917 kvm_timer_vcpu_put(vcpu); in kvm_arm_timer_read_sysreg()
919 val = kvm_arm_timer_read(vcpu, vcpu_get_timer(vcpu, tmr), treg); in kvm_arm_timer_read_sysreg()
921 kvm_timer_vcpu_load(vcpu); in kvm_arm_timer_read_sysreg()
927 static void kvm_arm_timer_write(struct kvm_vcpu *vcpu, in kvm_arm_timer_write() argument
950 void kvm_arm_timer_write_sysreg(struct kvm_vcpu *vcpu, in kvm_arm_timer_write_sysreg() argument
956 kvm_timer_vcpu_put(vcpu); in kvm_arm_timer_write_sysreg()
958 kvm_arm_timer_write(vcpu, vcpu_get_timer(vcpu, tmr), treg, val); in kvm_arm_timer_write_sysreg()
960 kvm_timer_vcpu_load(vcpu); in kvm_arm_timer_write_sysreg()
1018 kvm_err("kvm_arch_timer: error setting vcpu affinity\n"); in kvm_timer_hyp_init()
1051 kvm_err("kvm_arch_timer: error setting vcpu affinity\n"); in kvm_timer_hyp_init()
1073 void kvm_timer_vcpu_terminate(struct kvm_vcpu *vcpu) in kvm_timer_vcpu_terminate() argument
1075 struct arch_timer_cpu *timer = vcpu_timer(vcpu); in kvm_timer_vcpu_terminate()
1080 static bool timer_irqs_are_valid(struct kvm_vcpu *vcpu) in timer_irqs_are_valid() argument
1085 vtimer_irq = vcpu_vtimer(vcpu)->irq.irq; in timer_irqs_are_valid()
1086 ret = kvm_vgic_set_owner(vcpu, vtimer_irq, vcpu_vtimer(vcpu)); in timer_irqs_are_valid()
1090 ptimer_irq = vcpu_ptimer(vcpu)->irq.irq; in timer_irqs_are_valid()
1091 ret = kvm_vgic_set_owner(vcpu, ptimer_irq, vcpu_ptimer(vcpu)); in timer_irqs_are_valid()
1095 kvm_for_each_vcpu(i, vcpu, vcpu->kvm) { in timer_irqs_are_valid()
1096 if (vcpu_vtimer(vcpu)->irq.irq != vtimer_irq || in timer_irqs_are_valid()
1097 vcpu_ptimer(vcpu)->irq.irq != ptimer_irq) in timer_irqs_are_valid()
1106 struct kvm_vcpu *vcpu = kvm_get_running_vcpu(); in kvm_arch_timer_get_input_level() local
1109 if (vintid == vcpu_vtimer(vcpu)->irq.irq) in kvm_arch_timer_get_input_level()
1110 timer = vcpu_vtimer(vcpu); in kvm_arch_timer_get_input_level()
1111 else if (vintid == vcpu_ptimer(vcpu)->irq.irq) in kvm_arch_timer_get_input_level()
1112 timer = vcpu_ptimer(vcpu); in kvm_arch_timer_get_input_level()
1119 int kvm_timer_enable(struct kvm_vcpu *vcpu) in kvm_timer_enable() argument
1121 struct arch_timer_cpu *timer = vcpu_timer(vcpu); in kvm_timer_enable()
1129 if (!irqchip_in_kernel(vcpu->kvm)) in kvm_timer_enable()
1132 if (!vgic_initialized(vcpu->kvm)) in kvm_timer_enable()
1135 if (!timer_irqs_are_valid(vcpu)) { in kvm_timer_enable()
1140 get_timer_map(vcpu, &map); in kvm_timer_enable()
1142 ret = kvm_vgic_map_phys_irq(vcpu, in kvm_timer_enable()
1150 ret = kvm_vgic_map_phys_irq(vcpu, in kvm_timer_enable()
1188 struct kvm_vcpu *vcpu; in set_timer_irqs() local
1191 kvm_for_each_vcpu(i, vcpu, kvm) { in set_timer_irqs()
1192 vcpu_vtimer(vcpu)->irq.irq = vtimer_irq; in set_timer_irqs()
1193 vcpu_ptimer(vcpu)->irq.irq = ptimer_irq; in set_timer_irqs()
1197 int kvm_arm_timer_set_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr) in kvm_arm_timer_set_attr() argument
1200 struct arch_timer_context *vtimer = vcpu_vtimer(vcpu); in kvm_arm_timer_set_attr()
1201 struct arch_timer_context *ptimer = vcpu_ptimer(vcpu); in kvm_arm_timer_set_attr()
1204 if (!irqchip_in_kernel(vcpu->kvm)) in kvm_arm_timer_set_attr()
1213 if (vcpu->arch.timer_cpu.enabled) in kvm_arm_timer_set_attr()
1218 set_timer_irqs(vcpu->kvm, irq, ptimer->irq.irq); in kvm_arm_timer_set_attr()
1221 set_timer_irqs(vcpu->kvm, vtimer->irq.irq, irq); in kvm_arm_timer_set_attr()
1230 int kvm_arm_timer_get_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr) in kvm_arm_timer_get_attr() argument
1238 timer = vcpu_vtimer(vcpu); in kvm_arm_timer_get_attr()
1241 timer = vcpu_ptimer(vcpu); in kvm_arm_timer_get_attr()
1251 int kvm_arm_timer_has_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr) in kvm_arm_timer_has_attr() argument