1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (C) 2012 ARM Ltd. 4 * Author: Marc Zyngier <marc.zyngier@arm.com> 5 */ 6 7 #include <linux/cpu.h> 8 #include <linux/kvm.h> 9 #include <linux/kvm_host.h> 10 #include <linux/interrupt.h> 11 #include <linux/irq.h> 12 #include <linux/irqdomain.h> 13 #include <linux/uaccess.h> 14 15 #include <clocksource/arm_arch_timer.h> 16 #include <asm/arch_timer.h> 17 #include <asm/kvm_emulate.h> 18 #include <asm/kvm_hyp.h> 19 20 #include <kvm/arm_vgic.h> 21 #include <kvm/arm_arch_timer.h> 22 23 #include "trace.h" 24 25 static struct timecounter *timecounter; 26 static unsigned int host_vtimer_irq; 27 static unsigned int host_ptimer_irq; 28 static u32 host_vtimer_irq_flags; 29 static u32 host_ptimer_irq_flags; 30 31 static DEFINE_STATIC_KEY_FALSE(has_gic_active_state); 32 33 static const struct kvm_irq_level default_ptimer_irq = { 34 .irq = 30, 35 .level = 1, 36 }; 37 38 static const struct kvm_irq_level default_vtimer_irq = { 39 .irq = 27, 40 .level = 1, 41 }; 42 43 static bool kvm_timer_irq_can_fire(struct arch_timer_context *timer_ctx); 44 static void kvm_timer_update_irq(struct kvm_vcpu *vcpu, bool new_level, 45 struct arch_timer_context *timer_ctx); 46 static bool kvm_timer_should_fire(struct arch_timer_context *timer_ctx); 47 static void kvm_arm_timer_write(struct kvm_vcpu *vcpu, 48 struct arch_timer_context *timer, 49 enum kvm_arch_timer_regs treg, 50 u64 val); 51 static u64 kvm_arm_timer_read(struct kvm_vcpu *vcpu, 52 struct arch_timer_context *timer, 53 enum kvm_arch_timer_regs treg); 54 55 u32 timer_get_ctl(struct arch_timer_context *ctxt) 56 { 57 struct kvm_vcpu *vcpu = ctxt->vcpu; 58 59 switch(arch_timer_ctx_index(ctxt)) { 60 case TIMER_VTIMER: 61 return __vcpu_sys_reg(vcpu, CNTV_CTL_EL0); 62 case TIMER_PTIMER: 63 return __vcpu_sys_reg(vcpu, CNTP_CTL_EL0); 64 default: 65 WARN_ON(1); 66 return 0; 67 } 68 } 69 70 u64 timer_get_cval(struct arch_timer_context *ctxt) 71 { 72 struct kvm_vcpu *vcpu = ctxt->vcpu; 73 74 switch(arch_timer_ctx_index(ctxt)) { 75 case TIMER_VTIMER: 76 return __vcpu_sys_reg(vcpu, CNTV_CVAL_EL0); 77 case TIMER_PTIMER: 78 return __vcpu_sys_reg(vcpu, CNTP_CVAL_EL0); 79 default: 80 WARN_ON(1); 81 return 0; 82 } 83 } 84 85 static u64 timer_get_offset(struct arch_timer_context *ctxt) 86 { 87 struct kvm_vcpu *vcpu = ctxt->vcpu; 88 89 switch(arch_timer_ctx_index(ctxt)) { 90 case TIMER_VTIMER: 91 return __vcpu_sys_reg(vcpu, CNTVOFF_EL2); 92 default: 93 return 0; 94 } 95 } 96 97 static void timer_set_ctl(struct arch_timer_context *ctxt, u32 ctl) 98 { 99 struct kvm_vcpu *vcpu = ctxt->vcpu; 100 101 switch(arch_timer_ctx_index(ctxt)) { 102 case TIMER_VTIMER: 103 __vcpu_sys_reg(vcpu, CNTV_CTL_EL0) = ctl; 104 break; 105 case TIMER_PTIMER: 106 __vcpu_sys_reg(vcpu, CNTP_CTL_EL0) = ctl; 107 break; 108 default: 109 WARN_ON(1); 110 } 111 } 112 113 static void timer_set_cval(struct arch_timer_context *ctxt, u64 cval) 114 { 115 struct kvm_vcpu *vcpu = ctxt->vcpu; 116 117 switch(arch_timer_ctx_index(ctxt)) { 118 case TIMER_VTIMER: 119 __vcpu_sys_reg(vcpu, CNTV_CVAL_EL0) = cval; 120 break; 121 case TIMER_PTIMER: 122 __vcpu_sys_reg(vcpu, CNTP_CVAL_EL0) = cval; 123 break; 124 default: 125 WARN_ON(1); 126 } 127 } 128 129 static void timer_set_offset(struct arch_timer_context *ctxt, u64 offset) 130 { 131 struct kvm_vcpu *vcpu = ctxt->vcpu; 132 133 switch(arch_timer_ctx_index(ctxt)) { 134 case TIMER_VTIMER: 135 __vcpu_sys_reg(vcpu, CNTVOFF_EL2) = offset; 136 break; 137 default: 138 WARN(offset, "timer %ld\n", arch_timer_ctx_index(ctxt)); 139 } 140 } 141 142 u64 kvm_phys_timer_read(void) 143 { 144 return timecounter->cc->read(timecounter->cc); 145 } 146 147 static void get_timer_map(struct kvm_vcpu *vcpu, struct timer_map *map) 148 { 149 if (has_vhe()) { 150 map->direct_vtimer = vcpu_vtimer(vcpu); 151 map->direct_ptimer = vcpu_ptimer(vcpu); 152 map->emul_ptimer = NULL; 153 } else { 154 map->direct_vtimer = vcpu_vtimer(vcpu); 155 map->direct_ptimer = NULL; 156 map->emul_ptimer = vcpu_ptimer(vcpu); 157 } 158 159 trace_kvm_get_timer_map(vcpu->vcpu_id, map); 160 } 161 162 static inline bool userspace_irqchip(struct kvm *kvm) 163 { 164 return static_branch_unlikely(&userspace_irqchip_in_use) && 165 unlikely(!irqchip_in_kernel(kvm)); 166 } 167 168 static void soft_timer_start(struct hrtimer *hrt, u64 ns) 169 { 170 hrtimer_start(hrt, ktime_add_ns(ktime_get(), ns), 171 HRTIMER_MODE_ABS_HARD); 172 } 173 174 static void soft_timer_cancel(struct hrtimer *hrt) 175 { 176 hrtimer_cancel(hrt); 177 } 178 179 static irqreturn_t kvm_arch_timer_handler(int irq, void *dev_id) 180 { 181 struct kvm_vcpu *vcpu = *(struct kvm_vcpu **)dev_id; 182 struct arch_timer_context *ctx; 183 struct timer_map map; 184 185 /* 186 * We may see a timer interrupt after vcpu_put() has been called which 187 * sets the CPU's vcpu pointer to NULL, because even though the timer 188 * has been disabled in timer_save_state(), the hardware interrupt 189 * signal may not have been retired from the interrupt controller yet. 190 */ 191 if (!vcpu) 192 return IRQ_HANDLED; 193 194 get_timer_map(vcpu, &map); 195 196 if (irq == host_vtimer_irq) 197 ctx = map.direct_vtimer; 198 else 199 ctx = map.direct_ptimer; 200 201 if (kvm_timer_should_fire(ctx)) 202 kvm_timer_update_irq(vcpu, true, ctx); 203 204 if (userspace_irqchip(vcpu->kvm) && 205 !static_branch_unlikely(&has_gic_active_state)) 206 disable_percpu_irq(host_vtimer_irq); 207 208 return IRQ_HANDLED; 209 } 210 211 static u64 kvm_counter_compute_delta(struct arch_timer_context *timer_ctx, 212 u64 val) 213 { 214 u64 now = kvm_phys_timer_read() - timer_get_offset(timer_ctx); 215 216 if (now < val) { 217 u64 ns; 218 219 ns = cyclecounter_cyc2ns(timecounter->cc, 220 val - now, 221 timecounter->mask, 222 &timecounter->frac); 223 return ns; 224 } 225 226 return 0; 227 } 228 229 static u64 kvm_timer_compute_delta(struct arch_timer_context *timer_ctx) 230 { 231 return kvm_counter_compute_delta(timer_ctx, timer_get_cval(timer_ctx)); 232 } 233 234 static bool kvm_timer_irq_can_fire(struct arch_timer_context *timer_ctx) 235 { 236 WARN_ON(timer_ctx && timer_ctx->loaded); 237 return timer_ctx && 238 ((timer_get_ctl(timer_ctx) & 239 (ARCH_TIMER_CTRL_IT_MASK | ARCH_TIMER_CTRL_ENABLE)) == ARCH_TIMER_CTRL_ENABLE); 240 } 241 242 static bool vcpu_has_wfit_active(struct kvm_vcpu *vcpu) 243 { 244 return (cpus_have_final_cap(ARM64_HAS_WFXT) && 245 vcpu_get_flag(vcpu, IN_WFIT)); 246 } 247 248 static u64 wfit_delay_ns(struct kvm_vcpu *vcpu) 249 { 250 struct arch_timer_context *ctx = vcpu_vtimer(vcpu); 251 u64 val = vcpu_get_reg(vcpu, kvm_vcpu_sys_get_rt(vcpu)); 252 253 return kvm_counter_compute_delta(ctx, val); 254 } 255 256 /* 257 * Returns the earliest expiration time in ns among guest timers. 258 * Note that it will return 0 if none of timers can fire. 259 */ 260 static u64 kvm_timer_earliest_exp(struct kvm_vcpu *vcpu) 261 { 262 u64 min_delta = ULLONG_MAX; 263 int i; 264 265 for (i = 0; i < NR_KVM_TIMERS; i++) { 266 struct arch_timer_context *ctx = &vcpu->arch.timer_cpu.timers[i]; 267 268 WARN(ctx->loaded, "timer %d loaded\n", i); 269 if (kvm_timer_irq_can_fire(ctx)) 270 min_delta = min(min_delta, kvm_timer_compute_delta(ctx)); 271 } 272 273 if (vcpu_has_wfit_active(vcpu)) 274 min_delta = min(min_delta, wfit_delay_ns(vcpu)); 275 276 /* If none of timers can fire, then return 0 */ 277 if (min_delta == ULLONG_MAX) 278 return 0; 279 280 return min_delta; 281 } 282 283 static enum hrtimer_restart kvm_bg_timer_expire(struct hrtimer *hrt) 284 { 285 struct arch_timer_cpu *timer; 286 struct kvm_vcpu *vcpu; 287 u64 ns; 288 289 timer = container_of(hrt, struct arch_timer_cpu, bg_timer); 290 vcpu = container_of(timer, struct kvm_vcpu, arch.timer_cpu); 291 292 /* 293 * Check that the timer has really expired from the guest's 294 * PoV (NTP on the host may have forced it to expire 295 * early). If we should have slept longer, restart it. 296 */ 297 ns = kvm_timer_earliest_exp(vcpu); 298 if (unlikely(ns)) { 299 hrtimer_forward_now(hrt, ns_to_ktime(ns)); 300 return HRTIMER_RESTART; 301 } 302 303 kvm_vcpu_wake_up(vcpu); 304 return HRTIMER_NORESTART; 305 } 306 307 static enum hrtimer_restart kvm_hrtimer_expire(struct hrtimer *hrt) 308 { 309 struct arch_timer_context *ctx; 310 struct kvm_vcpu *vcpu; 311 u64 ns; 312 313 ctx = container_of(hrt, struct arch_timer_context, hrtimer); 314 vcpu = ctx->vcpu; 315 316 trace_kvm_timer_hrtimer_expire(ctx); 317 318 /* 319 * Check that the timer has really expired from the guest's 320 * PoV (NTP on the host may have forced it to expire 321 * early). If not ready, schedule for a later time. 322 */ 323 ns = kvm_timer_compute_delta(ctx); 324 if (unlikely(ns)) { 325 hrtimer_forward_now(hrt, ns_to_ktime(ns)); 326 return HRTIMER_RESTART; 327 } 328 329 kvm_timer_update_irq(vcpu, true, ctx); 330 return HRTIMER_NORESTART; 331 } 332 333 static bool kvm_timer_should_fire(struct arch_timer_context *timer_ctx) 334 { 335 enum kvm_arch_timers index; 336 u64 cval, now; 337 338 if (!timer_ctx) 339 return false; 340 341 index = arch_timer_ctx_index(timer_ctx); 342 343 if (timer_ctx->loaded) { 344 u32 cnt_ctl = 0; 345 346 switch (index) { 347 case TIMER_VTIMER: 348 cnt_ctl = read_sysreg_el0(SYS_CNTV_CTL); 349 break; 350 case TIMER_PTIMER: 351 cnt_ctl = read_sysreg_el0(SYS_CNTP_CTL); 352 break; 353 case NR_KVM_TIMERS: 354 /* GCC is braindead */ 355 cnt_ctl = 0; 356 break; 357 } 358 359 return (cnt_ctl & ARCH_TIMER_CTRL_ENABLE) && 360 (cnt_ctl & ARCH_TIMER_CTRL_IT_STAT) && 361 !(cnt_ctl & ARCH_TIMER_CTRL_IT_MASK); 362 } 363 364 if (!kvm_timer_irq_can_fire(timer_ctx)) 365 return false; 366 367 cval = timer_get_cval(timer_ctx); 368 now = kvm_phys_timer_read() - timer_get_offset(timer_ctx); 369 370 return cval <= now; 371 } 372 373 int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) 374 { 375 return vcpu_has_wfit_active(vcpu) && wfit_delay_ns(vcpu) == 0; 376 } 377 378 /* 379 * Reflect the timer output level into the kvm_run structure 380 */ 381 void kvm_timer_update_run(struct kvm_vcpu *vcpu) 382 { 383 struct arch_timer_context *vtimer = vcpu_vtimer(vcpu); 384 struct arch_timer_context *ptimer = vcpu_ptimer(vcpu); 385 struct kvm_sync_regs *regs = &vcpu->run->s.regs; 386 387 /* Populate the device bitmap with the timer states */ 388 regs->device_irq_level &= ~(KVM_ARM_DEV_EL1_VTIMER | 389 KVM_ARM_DEV_EL1_PTIMER); 390 if (kvm_timer_should_fire(vtimer)) 391 regs->device_irq_level |= KVM_ARM_DEV_EL1_VTIMER; 392 if (kvm_timer_should_fire(ptimer)) 393 regs->device_irq_level |= KVM_ARM_DEV_EL1_PTIMER; 394 } 395 396 static void kvm_timer_update_irq(struct kvm_vcpu *vcpu, bool new_level, 397 struct arch_timer_context *timer_ctx) 398 { 399 int ret; 400 401 timer_ctx->irq.level = new_level; 402 trace_kvm_timer_update_irq(vcpu->vcpu_id, timer_ctx->irq.irq, 403 timer_ctx->irq.level); 404 405 if (!userspace_irqchip(vcpu->kvm)) { 406 ret = kvm_vgic_inject_irq(vcpu->kvm, vcpu->vcpu_id, 407 timer_ctx->irq.irq, 408 timer_ctx->irq.level, 409 timer_ctx); 410 WARN_ON(ret); 411 } 412 } 413 414 /* Only called for a fully emulated timer */ 415 static void timer_emulate(struct arch_timer_context *ctx) 416 { 417 bool should_fire = kvm_timer_should_fire(ctx); 418 419 trace_kvm_timer_emulate(ctx, should_fire); 420 421 if (should_fire != ctx->irq.level) { 422 kvm_timer_update_irq(ctx->vcpu, should_fire, ctx); 423 return; 424 } 425 426 /* 427 * If the timer can fire now, we don't need to have a soft timer 428 * scheduled for the future. If the timer cannot fire at all, 429 * then we also don't need a soft timer. 430 */ 431 if (should_fire || !kvm_timer_irq_can_fire(ctx)) 432 return; 433 434 soft_timer_start(&ctx->hrtimer, kvm_timer_compute_delta(ctx)); 435 } 436 437 static void set_cntvoff(u64 cntvoff) 438 { 439 kvm_call_hyp(__kvm_timer_set_cntvoff, cntvoff); 440 } 441 442 static void timer_save_state(struct arch_timer_context *ctx) 443 { 444 struct arch_timer_cpu *timer = vcpu_timer(ctx->vcpu); 445 enum kvm_arch_timers index = arch_timer_ctx_index(ctx); 446 unsigned long flags; 447 448 if (!timer->enabled) 449 return; 450 451 local_irq_save(flags); 452 453 if (!ctx->loaded) 454 goto out; 455 456 switch (index) { 457 case TIMER_VTIMER: 458 timer_set_ctl(ctx, read_sysreg_el0(SYS_CNTV_CTL)); 459 timer_set_cval(ctx, read_sysreg_el0(SYS_CNTV_CVAL)); 460 461 /* Disable the timer */ 462 write_sysreg_el0(0, SYS_CNTV_CTL); 463 isb(); 464 465 /* 466 * The kernel may decide to run userspace after 467 * calling vcpu_put, so we reset cntvoff to 0 to 468 * ensure a consistent read between user accesses to 469 * the virtual counter and kernel access to the 470 * physical counter of non-VHE case. 471 * 472 * For VHE, the virtual counter uses a fixed virtual 473 * offset of zero, so no need to zero CNTVOFF_EL2 474 * register, but this is actually useful when switching 475 * between EL1/vEL2 with NV. 476 * 477 * Do it unconditionally, as this is either unavoidable 478 * or dirt cheap. 479 */ 480 set_cntvoff(0); 481 break; 482 case TIMER_PTIMER: 483 timer_set_ctl(ctx, read_sysreg_el0(SYS_CNTP_CTL)); 484 timer_set_cval(ctx, read_sysreg_el0(SYS_CNTP_CVAL)); 485 486 /* Disable the timer */ 487 write_sysreg_el0(0, SYS_CNTP_CTL); 488 isb(); 489 490 break; 491 case NR_KVM_TIMERS: 492 BUG(); 493 } 494 495 trace_kvm_timer_save_state(ctx); 496 497 ctx->loaded = false; 498 out: 499 local_irq_restore(flags); 500 } 501 502 /* 503 * Schedule the background timer before calling kvm_vcpu_halt, so that this 504 * thread is removed from its waitqueue and made runnable when there's a timer 505 * interrupt to handle. 506 */ 507 static void kvm_timer_blocking(struct kvm_vcpu *vcpu) 508 { 509 struct arch_timer_cpu *timer = vcpu_timer(vcpu); 510 struct timer_map map; 511 512 get_timer_map(vcpu, &map); 513 514 /* 515 * If no timers are capable of raising interrupts (disabled or 516 * masked), then there's no more work for us to do. 517 */ 518 if (!kvm_timer_irq_can_fire(map.direct_vtimer) && 519 !kvm_timer_irq_can_fire(map.direct_ptimer) && 520 !kvm_timer_irq_can_fire(map.emul_ptimer) && 521 !vcpu_has_wfit_active(vcpu)) 522 return; 523 524 /* 525 * At least one guest time will expire. Schedule a background timer. 526 * Set the earliest expiration time among the guest timers. 527 */ 528 soft_timer_start(&timer->bg_timer, kvm_timer_earliest_exp(vcpu)); 529 } 530 531 static void kvm_timer_unblocking(struct kvm_vcpu *vcpu) 532 { 533 struct arch_timer_cpu *timer = vcpu_timer(vcpu); 534 535 soft_timer_cancel(&timer->bg_timer); 536 } 537 538 static void timer_restore_state(struct arch_timer_context *ctx) 539 { 540 struct arch_timer_cpu *timer = vcpu_timer(ctx->vcpu); 541 enum kvm_arch_timers index = arch_timer_ctx_index(ctx); 542 unsigned long flags; 543 544 if (!timer->enabled) 545 return; 546 547 local_irq_save(flags); 548 549 if (ctx->loaded) 550 goto out; 551 552 switch (index) { 553 case TIMER_VTIMER: 554 set_cntvoff(timer_get_offset(ctx)); 555 write_sysreg_el0(timer_get_cval(ctx), SYS_CNTV_CVAL); 556 isb(); 557 write_sysreg_el0(timer_get_ctl(ctx), SYS_CNTV_CTL); 558 break; 559 case TIMER_PTIMER: 560 write_sysreg_el0(timer_get_cval(ctx), SYS_CNTP_CVAL); 561 isb(); 562 write_sysreg_el0(timer_get_ctl(ctx), SYS_CNTP_CTL); 563 break; 564 case NR_KVM_TIMERS: 565 BUG(); 566 } 567 568 trace_kvm_timer_restore_state(ctx); 569 570 ctx->loaded = true; 571 out: 572 local_irq_restore(flags); 573 } 574 575 static inline void set_timer_irq_phys_active(struct arch_timer_context *ctx, bool active) 576 { 577 int r; 578 r = irq_set_irqchip_state(ctx->host_timer_irq, IRQCHIP_STATE_ACTIVE, active); 579 WARN_ON(r); 580 } 581 582 static void kvm_timer_vcpu_load_gic(struct arch_timer_context *ctx) 583 { 584 struct kvm_vcpu *vcpu = ctx->vcpu; 585 bool phys_active = false; 586 587 /* 588 * Update the timer output so that it is likely to match the 589 * state we're about to restore. If the timer expires between 590 * this point and the register restoration, we'll take the 591 * interrupt anyway. 592 */ 593 kvm_timer_update_irq(ctx->vcpu, kvm_timer_should_fire(ctx), ctx); 594 595 if (irqchip_in_kernel(vcpu->kvm)) 596 phys_active = kvm_vgic_map_is_active(vcpu, ctx->irq.irq); 597 598 phys_active |= ctx->irq.level; 599 600 set_timer_irq_phys_active(ctx, phys_active); 601 } 602 603 static void kvm_timer_vcpu_load_nogic(struct kvm_vcpu *vcpu) 604 { 605 struct arch_timer_context *vtimer = vcpu_vtimer(vcpu); 606 607 /* 608 * Update the timer output so that it is likely to match the 609 * state we're about to restore. If the timer expires between 610 * this point and the register restoration, we'll take the 611 * interrupt anyway. 612 */ 613 kvm_timer_update_irq(vcpu, kvm_timer_should_fire(vtimer), vtimer); 614 615 /* 616 * When using a userspace irqchip with the architected timers and a 617 * host interrupt controller that doesn't support an active state, we 618 * must still prevent continuously exiting from the guest, and 619 * therefore mask the physical interrupt by disabling it on the host 620 * interrupt controller when the virtual level is high, such that the 621 * guest can make forward progress. Once we detect the output level 622 * being de-asserted, we unmask the interrupt again so that we exit 623 * from the guest when the timer fires. 624 */ 625 if (vtimer->irq.level) 626 disable_percpu_irq(host_vtimer_irq); 627 else 628 enable_percpu_irq(host_vtimer_irq, host_vtimer_irq_flags); 629 } 630 631 void kvm_timer_vcpu_load(struct kvm_vcpu *vcpu) 632 { 633 struct arch_timer_cpu *timer = vcpu_timer(vcpu); 634 struct timer_map map; 635 636 if (unlikely(!timer->enabled)) 637 return; 638 639 get_timer_map(vcpu, &map); 640 641 if (static_branch_likely(&has_gic_active_state)) { 642 kvm_timer_vcpu_load_gic(map.direct_vtimer); 643 if (map.direct_ptimer) 644 kvm_timer_vcpu_load_gic(map.direct_ptimer); 645 } else { 646 kvm_timer_vcpu_load_nogic(vcpu); 647 } 648 649 kvm_timer_unblocking(vcpu); 650 651 timer_restore_state(map.direct_vtimer); 652 if (map.direct_ptimer) 653 timer_restore_state(map.direct_ptimer); 654 655 if (map.emul_ptimer) 656 timer_emulate(map.emul_ptimer); 657 } 658 659 bool kvm_timer_should_notify_user(struct kvm_vcpu *vcpu) 660 { 661 struct arch_timer_context *vtimer = vcpu_vtimer(vcpu); 662 struct arch_timer_context *ptimer = vcpu_ptimer(vcpu); 663 struct kvm_sync_regs *sregs = &vcpu->run->s.regs; 664 bool vlevel, plevel; 665 666 if (likely(irqchip_in_kernel(vcpu->kvm))) 667 return false; 668 669 vlevel = sregs->device_irq_level & KVM_ARM_DEV_EL1_VTIMER; 670 plevel = sregs->device_irq_level & KVM_ARM_DEV_EL1_PTIMER; 671 672 return kvm_timer_should_fire(vtimer) != vlevel || 673 kvm_timer_should_fire(ptimer) != plevel; 674 } 675 676 void kvm_timer_vcpu_put(struct kvm_vcpu *vcpu) 677 { 678 struct arch_timer_cpu *timer = vcpu_timer(vcpu); 679 struct timer_map map; 680 681 if (unlikely(!timer->enabled)) 682 return; 683 684 get_timer_map(vcpu, &map); 685 686 timer_save_state(map.direct_vtimer); 687 if (map.direct_ptimer) 688 timer_save_state(map.direct_ptimer); 689 690 /* 691 * Cancel soft timer emulation, because the only case where we 692 * need it after a vcpu_put is in the context of a sleeping VCPU, and 693 * in that case we already factor in the deadline for the physical 694 * timer when scheduling the bg_timer. 695 * 696 * In any case, we re-schedule the hrtimer for the physical timer when 697 * coming back to the VCPU thread in kvm_timer_vcpu_load(). 698 */ 699 if (map.emul_ptimer) 700 soft_timer_cancel(&map.emul_ptimer->hrtimer); 701 702 if (kvm_vcpu_is_blocking(vcpu)) 703 kvm_timer_blocking(vcpu); 704 } 705 706 /* 707 * With a userspace irqchip we have to check if the guest de-asserted the 708 * timer and if so, unmask the timer irq signal on the host interrupt 709 * controller to ensure that we see future timer signals. 710 */ 711 static void unmask_vtimer_irq_user(struct kvm_vcpu *vcpu) 712 { 713 struct arch_timer_context *vtimer = vcpu_vtimer(vcpu); 714 715 if (!kvm_timer_should_fire(vtimer)) { 716 kvm_timer_update_irq(vcpu, false, vtimer); 717 if (static_branch_likely(&has_gic_active_state)) 718 set_timer_irq_phys_active(vtimer, false); 719 else 720 enable_percpu_irq(host_vtimer_irq, host_vtimer_irq_flags); 721 } 722 } 723 724 void kvm_timer_sync_user(struct kvm_vcpu *vcpu) 725 { 726 struct arch_timer_cpu *timer = vcpu_timer(vcpu); 727 728 if (unlikely(!timer->enabled)) 729 return; 730 731 if (unlikely(!irqchip_in_kernel(vcpu->kvm))) 732 unmask_vtimer_irq_user(vcpu); 733 } 734 735 int kvm_timer_vcpu_reset(struct kvm_vcpu *vcpu) 736 { 737 struct arch_timer_cpu *timer = vcpu_timer(vcpu); 738 struct timer_map map; 739 740 get_timer_map(vcpu, &map); 741 742 /* 743 * The bits in CNTV_CTL are architecturally reset to UNKNOWN for ARMv8 744 * and to 0 for ARMv7. We provide an implementation that always 745 * resets the timer to be disabled and unmasked and is compliant with 746 * the ARMv7 architecture. 747 */ 748 timer_set_ctl(vcpu_vtimer(vcpu), 0); 749 timer_set_ctl(vcpu_ptimer(vcpu), 0); 750 751 if (timer->enabled) { 752 kvm_timer_update_irq(vcpu, false, vcpu_vtimer(vcpu)); 753 kvm_timer_update_irq(vcpu, false, vcpu_ptimer(vcpu)); 754 755 if (irqchip_in_kernel(vcpu->kvm)) { 756 kvm_vgic_reset_mapped_irq(vcpu, map.direct_vtimer->irq.irq); 757 if (map.direct_ptimer) 758 kvm_vgic_reset_mapped_irq(vcpu, map.direct_ptimer->irq.irq); 759 } 760 } 761 762 if (map.emul_ptimer) 763 soft_timer_cancel(&map.emul_ptimer->hrtimer); 764 765 return 0; 766 } 767 768 /* Make the updates of cntvoff for all vtimer contexts atomic */ 769 static void update_vtimer_cntvoff(struct kvm_vcpu *vcpu, u64 cntvoff) 770 { 771 unsigned long i; 772 struct kvm *kvm = vcpu->kvm; 773 struct kvm_vcpu *tmp; 774 775 mutex_lock(&kvm->lock); 776 kvm_for_each_vcpu(i, tmp, kvm) 777 timer_set_offset(vcpu_vtimer(tmp), cntvoff); 778 779 /* 780 * When called from the vcpu create path, the CPU being created is not 781 * included in the loop above, so we just set it here as well. 782 */ 783 timer_set_offset(vcpu_vtimer(vcpu), cntvoff); 784 mutex_unlock(&kvm->lock); 785 } 786 787 void kvm_timer_vcpu_init(struct kvm_vcpu *vcpu) 788 { 789 struct arch_timer_cpu *timer = vcpu_timer(vcpu); 790 struct arch_timer_context *vtimer = vcpu_vtimer(vcpu); 791 struct arch_timer_context *ptimer = vcpu_ptimer(vcpu); 792 793 vtimer->vcpu = vcpu; 794 ptimer->vcpu = vcpu; 795 796 /* Synchronize cntvoff across all vtimers of a VM. */ 797 update_vtimer_cntvoff(vcpu, kvm_phys_timer_read()); 798 timer_set_offset(ptimer, 0); 799 800 hrtimer_init(&timer->bg_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_HARD); 801 timer->bg_timer.function = kvm_bg_timer_expire; 802 803 hrtimer_init(&vtimer->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_HARD); 804 hrtimer_init(&ptimer->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_HARD); 805 vtimer->hrtimer.function = kvm_hrtimer_expire; 806 ptimer->hrtimer.function = kvm_hrtimer_expire; 807 808 vtimer->irq.irq = default_vtimer_irq.irq; 809 ptimer->irq.irq = default_ptimer_irq.irq; 810 811 vtimer->host_timer_irq = host_vtimer_irq; 812 ptimer->host_timer_irq = host_ptimer_irq; 813 814 vtimer->host_timer_irq_flags = host_vtimer_irq_flags; 815 ptimer->host_timer_irq_flags = host_ptimer_irq_flags; 816 } 817 818 void kvm_timer_cpu_up(void) 819 { 820 enable_percpu_irq(host_vtimer_irq, host_vtimer_irq_flags); 821 if (host_ptimer_irq) 822 enable_percpu_irq(host_ptimer_irq, host_ptimer_irq_flags); 823 } 824 825 void kvm_timer_cpu_down(void) 826 { 827 disable_percpu_irq(host_vtimer_irq); 828 if (host_ptimer_irq) 829 disable_percpu_irq(host_ptimer_irq); 830 } 831 832 int kvm_arm_timer_set_reg(struct kvm_vcpu *vcpu, u64 regid, u64 value) 833 { 834 struct arch_timer_context *timer; 835 836 switch (regid) { 837 case KVM_REG_ARM_TIMER_CTL: 838 timer = vcpu_vtimer(vcpu); 839 kvm_arm_timer_write(vcpu, timer, TIMER_REG_CTL, value); 840 break; 841 case KVM_REG_ARM_TIMER_CNT: 842 timer = vcpu_vtimer(vcpu); 843 update_vtimer_cntvoff(vcpu, kvm_phys_timer_read() - value); 844 break; 845 case KVM_REG_ARM_TIMER_CVAL: 846 timer = vcpu_vtimer(vcpu); 847 kvm_arm_timer_write(vcpu, timer, TIMER_REG_CVAL, value); 848 break; 849 case KVM_REG_ARM_PTIMER_CTL: 850 timer = vcpu_ptimer(vcpu); 851 kvm_arm_timer_write(vcpu, timer, TIMER_REG_CTL, value); 852 break; 853 case KVM_REG_ARM_PTIMER_CVAL: 854 timer = vcpu_ptimer(vcpu); 855 kvm_arm_timer_write(vcpu, timer, TIMER_REG_CVAL, value); 856 break; 857 858 default: 859 return -1; 860 } 861 862 return 0; 863 } 864 865 static u64 read_timer_ctl(struct arch_timer_context *timer) 866 { 867 /* 868 * Set ISTATUS bit if it's expired. 869 * Note that according to ARMv8 ARM Issue A.k, ISTATUS bit is 870 * UNKNOWN when ENABLE bit is 0, so we chose to set ISTATUS bit 871 * regardless of ENABLE bit for our implementation convenience. 872 */ 873 u32 ctl = timer_get_ctl(timer); 874 875 if (!kvm_timer_compute_delta(timer)) 876 ctl |= ARCH_TIMER_CTRL_IT_STAT; 877 878 return ctl; 879 } 880 881 u64 kvm_arm_timer_get_reg(struct kvm_vcpu *vcpu, u64 regid) 882 { 883 switch (regid) { 884 case KVM_REG_ARM_TIMER_CTL: 885 return kvm_arm_timer_read(vcpu, 886 vcpu_vtimer(vcpu), TIMER_REG_CTL); 887 case KVM_REG_ARM_TIMER_CNT: 888 return kvm_arm_timer_read(vcpu, 889 vcpu_vtimer(vcpu), TIMER_REG_CNT); 890 case KVM_REG_ARM_TIMER_CVAL: 891 return kvm_arm_timer_read(vcpu, 892 vcpu_vtimer(vcpu), TIMER_REG_CVAL); 893 case KVM_REG_ARM_PTIMER_CTL: 894 return kvm_arm_timer_read(vcpu, 895 vcpu_ptimer(vcpu), TIMER_REG_CTL); 896 case KVM_REG_ARM_PTIMER_CNT: 897 return kvm_arm_timer_read(vcpu, 898 vcpu_ptimer(vcpu), TIMER_REG_CNT); 899 case KVM_REG_ARM_PTIMER_CVAL: 900 return kvm_arm_timer_read(vcpu, 901 vcpu_ptimer(vcpu), TIMER_REG_CVAL); 902 } 903 return (u64)-1; 904 } 905 906 static u64 kvm_arm_timer_read(struct kvm_vcpu *vcpu, 907 struct arch_timer_context *timer, 908 enum kvm_arch_timer_regs treg) 909 { 910 u64 val; 911 912 switch (treg) { 913 case TIMER_REG_TVAL: 914 val = timer_get_cval(timer) - kvm_phys_timer_read() + timer_get_offset(timer); 915 val = lower_32_bits(val); 916 break; 917 918 case TIMER_REG_CTL: 919 val = read_timer_ctl(timer); 920 break; 921 922 case TIMER_REG_CVAL: 923 val = timer_get_cval(timer); 924 break; 925 926 case TIMER_REG_CNT: 927 val = kvm_phys_timer_read() - timer_get_offset(timer); 928 break; 929 930 default: 931 BUG(); 932 } 933 934 return val; 935 } 936 937 u64 kvm_arm_timer_read_sysreg(struct kvm_vcpu *vcpu, 938 enum kvm_arch_timers tmr, 939 enum kvm_arch_timer_regs treg) 940 { 941 struct arch_timer_context *timer; 942 struct timer_map map; 943 u64 val; 944 945 get_timer_map(vcpu, &map); 946 timer = vcpu_get_timer(vcpu, tmr); 947 948 if (timer == map.emul_ptimer) 949 return kvm_arm_timer_read(vcpu, timer, treg); 950 951 preempt_disable(); 952 timer_save_state(timer); 953 954 val = kvm_arm_timer_read(vcpu, timer, treg); 955 956 timer_restore_state(timer); 957 preempt_enable(); 958 959 return val; 960 } 961 962 static void kvm_arm_timer_write(struct kvm_vcpu *vcpu, 963 struct arch_timer_context *timer, 964 enum kvm_arch_timer_regs treg, 965 u64 val) 966 { 967 switch (treg) { 968 case TIMER_REG_TVAL: 969 timer_set_cval(timer, kvm_phys_timer_read() - timer_get_offset(timer) + (s32)val); 970 break; 971 972 case TIMER_REG_CTL: 973 timer_set_ctl(timer, val & ~ARCH_TIMER_CTRL_IT_STAT); 974 break; 975 976 case TIMER_REG_CVAL: 977 timer_set_cval(timer, val); 978 break; 979 980 default: 981 BUG(); 982 } 983 } 984 985 void kvm_arm_timer_write_sysreg(struct kvm_vcpu *vcpu, 986 enum kvm_arch_timers tmr, 987 enum kvm_arch_timer_regs treg, 988 u64 val) 989 { 990 struct arch_timer_context *timer; 991 struct timer_map map; 992 993 get_timer_map(vcpu, &map); 994 timer = vcpu_get_timer(vcpu, tmr); 995 if (timer == map.emul_ptimer) { 996 soft_timer_cancel(&timer->hrtimer); 997 kvm_arm_timer_write(vcpu, timer, treg, val); 998 timer_emulate(timer); 999 } else { 1000 preempt_disable(); 1001 timer_save_state(timer); 1002 kvm_arm_timer_write(vcpu, timer, treg, val); 1003 timer_restore_state(timer); 1004 preempt_enable(); 1005 } 1006 } 1007 1008 static int timer_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu) 1009 { 1010 if (vcpu) 1011 irqd_set_forwarded_to_vcpu(d); 1012 else 1013 irqd_clr_forwarded_to_vcpu(d); 1014 1015 return 0; 1016 } 1017 1018 static int timer_irq_set_irqchip_state(struct irq_data *d, 1019 enum irqchip_irq_state which, bool val) 1020 { 1021 if (which != IRQCHIP_STATE_ACTIVE || !irqd_is_forwarded_to_vcpu(d)) 1022 return irq_chip_set_parent_state(d, which, val); 1023 1024 if (val) 1025 irq_chip_mask_parent(d); 1026 else 1027 irq_chip_unmask_parent(d); 1028 1029 return 0; 1030 } 1031 1032 static void timer_irq_eoi(struct irq_data *d) 1033 { 1034 if (!irqd_is_forwarded_to_vcpu(d)) 1035 irq_chip_eoi_parent(d); 1036 } 1037 1038 static void timer_irq_ack(struct irq_data *d) 1039 { 1040 d = d->parent_data; 1041 if (d->chip->irq_ack) 1042 d->chip->irq_ack(d); 1043 } 1044 1045 static struct irq_chip timer_chip = { 1046 .name = "KVM", 1047 .irq_ack = timer_irq_ack, 1048 .irq_mask = irq_chip_mask_parent, 1049 .irq_unmask = irq_chip_unmask_parent, 1050 .irq_eoi = timer_irq_eoi, 1051 .irq_set_type = irq_chip_set_type_parent, 1052 .irq_set_vcpu_affinity = timer_irq_set_vcpu_affinity, 1053 .irq_set_irqchip_state = timer_irq_set_irqchip_state, 1054 }; 1055 1056 static int timer_irq_domain_alloc(struct irq_domain *domain, unsigned int virq, 1057 unsigned int nr_irqs, void *arg) 1058 { 1059 irq_hw_number_t hwirq = (uintptr_t)arg; 1060 1061 return irq_domain_set_hwirq_and_chip(domain, virq, hwirq, 1062 &timer_chip, NULL); 1063 } 1064 1065 static void timer_irq_domain_free(struct irq_domain *domain, unsigned int virq, 1066 unsigned int nr_irqs) 1067 { 1068 } 1069 1070 static const struct irq_domain_ops timer_domain_ops = { 1071 .alloc = timer_irq_domain_alloc, 1072 .free = timer_irq_domain_free, 1073 }; 1074 1075 static struct irq_ops arch_timer_irq_ops = { 1076 .get_input_level = kvm_arch_timer_get_input_level, 1077 }; 1078 1079 static void kvm_irq_fixup_flags(unsigned int virq, u32 *flags) 1080 { 1081 *flags = irq_get_trigger_type(virq); 1082 if (*flags != IRQF_TRIGGER_HIGH && *flags != IRQF_TRIGGER_LOW) { 1083 kvm_err("Invalid trigger for timer IRQ%d, assuming level low\n", 1084 virq); 1085 *flags = IRQF_TRIGGER_LOW; 1086 } 1087 } 1088 1089 static int kvm_irq_init(struct arch_timer_kvm_info *info) 1090 { 1091 struct irq_domain *domain = NULL; 1092 1093 if (info->virtual_irq <= 0) { 1094 kvm_err("kvm_arch_timer: invalid virtual timer IRQ: %d\n", 1095 info->virtual_irq); 1096 return -ENODEV; 1097 } 1098 1099 host_vtimer_irq = info->virtual_irq; 1100 kvm_irq_fixup_flags(host_vtimer_irq, &host_vtimer_irq_flags); 1101 1102 if (kvm_vgic_global_state.no_hw_deactivation) { 1103 struct fwnode_handle *fwnode; 1104 struct irq_data *data; 1105 1106 fwnode = irq_domain_alloc_named_fwnode("kvm-timer"); 1107 if (!fwnode) 1108 return -ENOMEM; 1109 1110 /* Assume both vtimer and ptimer in the same parent */ 1111 data = irq_get_irq_data(host_vtimer_irq); 1112 domain = irq_domain_create_hierarchy(data->domain, 0, 1113 NR_KVM_TIMERS, fwnode, 1114 &timer_domain_ops, NULL); 1115 if (!domain) { 1116 irq_domain_free_fwnode(fwnode); 1117 return -ENOMEM; 1118 } 1119 1120 arch_timer_irq_ops.flags |= VGIC_IRQ_SW_RESAMPLE; 1121 WARN_ON(irq_domain_push_irq(domain, host_vtimer_irq, 1122 (void *)TIMER_VTIMER)); 1123 } 1124 1125 if (info->physical_irq > 0) { 1126 host_ptimer_irq = info->physical_irq; 1127 kvm_irq_fixup_flags(host_ptimer_irq, &host_ptimer_irq_flags); 1128 1129 if (domain) 1130 WARN_ON(irq_domain_push_irq(domain, host_ptimer_irq, 1131 (void *)TIMER_PTIMER)); 1132 } 1133 1134 return 0; 1135 } 1136 1137 int __init kvm_timer_hyp_init(bool has_gic) 1138 { 1139 struct arch_timer_kvm_info *info; 1140 int err; 1141 1142 info = arch_timer_get_kvm_info(); 1143 timecounter = &info->timecounter; 1144 1145 if (!timecounter->cc) { 1146 kvm_err("kvm_arch_timer: uninitialized timecounter\n"); 1147 return -ENODEV; 1148 } 1149 1150 err = kvm_irq_init(info); 1151 if (err) 1152 return err; 1153 1154 /* First, do the virtual EL1 timer irq */ 1155 1156 err = request_percpu_irq(host_vtimer_irq, kvm_arch_timer_handler, 1157 "kvm guest vtimer", kvm_get_running_vcpus()); 1158 if (err) { 1159 kvm_err("kvm_arch_timer: can't request vtimer interrupt %d (%d)\n", 1160 host_vtimer_irq, err); 1161 return err; 1162 } 1163 1164 if (has_gic) { 1165 err = irq_set_vcpu_affinity(host_vtimer_irq, 1166 kvm_get_running_vcpus()); 1167 if (err) { 1168 kvm_err("kvm_arch_timer: error setting vcpu affinity\n"); 1169 goto out_free_irq; 1170 } 1171 1172 static_branch_enable(&has_gic_active_state); 1173 } 1174 1175 kvm_debug("virtual timer IRQ%d\n", host_vtimer_irq); 1176 1177 /* Now let's do the physical EL1 timer irq */ 1178 1179 if (info->physical_irq > 0) { 1180 err = request_percpu_irq(host_ptimer_irq, kvm_arch_timer_handler, 1181 "kvm guest ptimer", kvm_get_running_vcpus()); 1182 if (err) { 1183 kvm_err("kvm_arch_timer: can't request ptimer interrupt %d (%d)\n", 1184 host_ptimer_irq, err); 1185 return err; 1186 } 1187 1188 if (has_gic) { 1189 err = irq_set_vcpu_affinity(host_ptimer_irq, 1190 kvm_get_running_vcpus()); 1191 if (err) { 1192 kvm_err("kvm_arch_timer: error setting vcpu affinity\n"); 1193 goto out_free_irq; 1194 } 1195 } 1196 1197 kvm_debug("physical timer IRQ%d\n", host_ptimer_irq); 1198 } else if (has_vhe()) { 1199 kvm_err("kvm_arch_timer: invalid physical timer IRQ: %d\n", 1200 info->physical_irq); 1201 err = -ENODEV; 1202 goto out_free_irq; 1203 } 1204 1205 return 0; 1206 out_free_irq: 1207 free_percpu_irq(host_vtimer_irq, kvm_get_running_vcpus()); 1208 return err; 1209 } 1210 1211 void kvm_timer_vcpu_terminate(struct kvm_vcpu *vcpu) 1212 { 1213 struct arch_timer_cpu *timer = vcpu_timer(vcpu); 1214 1215 soft_timer_cancel(&timer->bg_timer); 1216 } 1217 1218 static bool timer_irqs_are_valid(struct kvm_vcpu *vcpu) 1219 { 1220 int vtimer_irq, ptimer_irq, ret; 1221 unsigned long i; 1222 1223 vtimer_irq = vcpu_vtimer(vcpu)->irq.irq; 1224 ret = kvm_vgic_set_owner(vcpu, vtimer_irq, vcpu_vtimer(vcpu)); 1225 if (ret) 1226 return false; 1227 1228 ptimer_irq = vcpu_ptimer(vcpu)->irq.irq; 1229 ret = kvm_vgic_set_owner(vcpu, ptimer_irq, vcpu_ptimer(vcpu)); 1230 if (ret) 1231 return false; 1232 1233 kvm_for_each_vcpu(i, vcpu, vcpu->kvm) { 1234 if (vcpu_vtimer(vcpu)->irq.irq != vtimer_irq || 1235 vcpu_ptimer(vcpu)->irq.irq != ptimer_irq) 1236 return false; 1237 } 1238 1239 return true; 1240 } 1241 1242 bool kvm_arch_timer_get_input_level(int vintid) 1243 { 1244 struct kvm_vcpu *vcpu = kvm_get_running_vcpu(); 1245 struct arch_timer_context *timer; 1246 1247 if (WARN(!vcpu, "No vcpu context!\n")) 1248 return false; 1249 1250 if (vintid == vcpu_vtimer(vcpu)->irq.irq) 1251 timer = vcpu_vtimer(vcpu); 1252 else if (vintid == vcpu_ptimer(vcpu)->irq.irq) 1253 timer = vcpu_ptimer(vcpu); 1254 else 1255 BUG(); 1256 1257 return kvm_timer_should_fire(timer); 1258 } 1259 1260 int kvm_timer_enable(struct kvm_vcpu *vcpu) 1261 { 1262 struct arch_timer_cpu *timer = vcpu_timer(vcpu); 1263 struct timer_map map; 1264 int ret; 1265 1266 if (timer->enabled) 1267 return 0; 1268 1269 /* Without a VGIC we do not map virtual IRQs to physical IRQs */ 1270 if (!irqchip_in_kernel(vcpu->kvm)) 1271 goto no_vgic; 1272 1273 /* 1274 * At this stage, we have the guarantee that the vgic is both 1275 * available and initialized. 1276 */ 1277 if (!timer_irqs_are_valid(vcpu)) { 1278 kvm_debug("incorrectly configured timer irqs\n"); 1279 return -EINVAL; 1280 } 1281 1282 get_timer_map(vcpu, &map); 1283 1284 ret = kvm_vgic_map_phys_irq(vcpu, 1285 map.direct_vtimer->host_timer_irq, 1286 map.direct_vtimer->irq.irq, 1287 &arch_timer_irq_ops); 1288 if (ret) 1289 return ret; 1290 1291 if (map.direct_ptimer) { 1292 ret = kvm_vgic_map_phys_irq(vcpu, 1293 map.direct_ptimer->host_timer_irq, 1294 map.direct_ptimer->irq.irq, 1295 &arch_timer_irq_ops); 1296 } 1297 1298 if (ret) 1299 return ret; 1300 1301 no_vgic: 1302 timer->enabled = 1; 1303 return 0; 1304 } 1305 1306 /* 1307 * On VHE system, we only need to configure the EL2 timer trap register once, 1308 * not for every world switch. 1309 * The host kernel runs at EL2 with HCR_EL2.TGE == 1, 1310 * and this makes those bits have no effect for the host kernel execution. 1311 */ 1312 void kvm_timer_init_vhe(void) 1313 { 1314 /* When HCR_EL2.E2H ==1, EL1PCEN and EL1PCTEN are shifted by 10 */ 1315 u32 cnthctl_shift = 10; 1316 u64 val; 1317 1318 /* 1319 * VHE systems allow the guest direct access to the EL1 physical 1320 * timer/counter. 1321 */ 1322 val = read_sysreg(cnthctl_el2); 1323 val |= (CNTHCTL_EL1PCEN << cnthctl_shift); 1324 val |= (CNTHCTL_EL1PCTEN << cnthctl_shift); 1325 write_sysreg(val, cnthctl_el2); 1326 } 1327 1328 static void set_timer_irqs(struct kvm *kvm, int vtimer_irq, int ptimer_irq) 1329 { 1330 struct kvm_vcpu *vcpu; 1331 unsigned long i; 1332 1333 kvm_for_each_vcpu(i, vcpu, kvm) { 1334 vcpu_vtimer(vcpu)->irq.irq = vtimer_irq; 1335 vcpu_ptimer(vcpu)->irq.irq = ptimer_irq; 1336 } 1337 } 1338 1339 int kvm_arm_timer_set_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr) 1340 { 1341 int __user *uaddr = (int __user *)(long)attr->addr; 1342 struct arch_timer_context *vtimer = vcpu_vtimer(vcpu); 1343 struct arch_timer_context *ptimer = vcpu_ptimer(vcpu); 1344 int irq; 1345 1346 if (!irqchip_in_kernel(vcpu->kvm)) 1347 return -EINVAL; 1348 1349 if (get_user(irq, uaddr)) 1350 return -EFAULT; 1351 1352 if (!(irq_is_ppi(irq))) 1353 return -EINVAL; 1354 1355 if (vcpu->arch.timer_cpu.enabled) 1356 return -EBUSY; 1357 1358 switch (attr->attr) { 1359 case KVM_ARM_VCPU_TIMER_IRQ_VTIMER: 1360 set_timer_irqs(vcpu->kvm, irq, ptimer->irq.irq); 1361 break; 1362 case KVM_ARM_VCPU_TIMER_IRQ_PTIMER: 1363 set_timer_irqs(vcpu->kvm, vtimer->irq.irq, irq); 1364 break; 1365 default: 1366 return -ENXIO; 1367 } 1368 1369 return 0; 1370 } 1371 1372 int kvm_arm_timer_get_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr) 1373 { 1374 int __user *uaddr = (int __user *)(long)attr->addr; 1375 struct arch_timer_context *timer; 1376 int irq; 1377 1378 switch (attr->attr) { 1379 case KVM_ARM_VCPU_TIMER_IRQ_VTIMER: 1380 timer = vcpu_vtimer(vcpu); 1381 break; 1382 case KVM_ARM_VCPU_TIMER_IRQ_PTIMER: 1383 timer = vcpu_ptimer(vcpu); 1384 break; 1385 default: 1386 return -ENXIO; 1387 } 1388 1389 irq = timer->irq.irq; 1390 return put_user(irq, uaddr); 1391 } 1392 1393 int kvm_arm_timer_has_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr) 1394 { 1395 switch (attr->attr) { 1396 case KVM_ARM_VCPU_TIMER_IRQ_VTIMER: 1397 case KVM_ARM_VCPU_TIMER_IRQ_PTIMER: 1398 return 0; 1399 } 1400 1401 return -ENXIO; 1402 } 1403