Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.0-rc5 1144 lines 26 kB view raw
1/* 2 * Copyright (C) 2012 - Virtual Open Systems and Columbia University 3 * Author: Christoffer Dall <c.dall@virtualopensystems.com> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License, version 2, as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 17 */ 18 19#include <linux/cpu.h> 20#include <linux/cpu_pm.h> 21#include <linux/errno.h> 22#include <linux/err.h> 23#include <linux/kvm_host.h> 24#include <linux/module.h> 25#include <linux/vmalloc.h> 26#include <linux/fs.h> 27#include <linux/mman.h> 28#include <linux/sched.h> 29#include <linux/kvm.h> 30#include <trace/events/kvm.h> 31 32#define CREATE_TRACE_POINTS 33#include "trace.h" 34 35#include <asm/uaccess.h> 36#include <asm/ptrace.h> 37#include <asm/mman.h> 38#include <asm/tlbflush.h> 39#include <asm/cacheflush.h> 40#include <asm/virt.h> 41#include <asm/kvm_arm.h> 42#include <asm/kvm_asm.h> 43#include <asm/kvm_mmu.h> 44#include <asm/kvm_emulate.h> 45#include <asm/kvm_coproc.h> 46#include <asm/kvm_psci.h> 47 48#ifdef REQUIRES_VIRT 49__asm__(".arch_extension virt"); 50#endif 51 52static DEFINE_PER_CPU(unsigned long, kvm_arm_hyp_stack_page); 53static kvm_cpu_context_t __percpu *kvm_host_cpu_state; 54static unsigned long hyp_default_vectors; 55 56/* Per-CPU variable containing the currently running vcpu. */ 57static DEFINE_PER_CPU(struct kvm_vcpu *, kvm_arm_running_vcpu); 58 59/* The VMID used in the VTTBR */ 60static atomic64_t kvm_vmid_gen = ATOMIC64_INIT(1); 61static u8 kvm_next_vmid; 62static DEFINE_SPINLOCK(kvm_vmid_lock); 63 64static bool vgic_present; 65 66static void kvm_arm_set_running_vcpu(struct kvm_vcpu *vcpu) 67{ 68 BUG_ON(preemptible()); 69 __this_cpu_write(kvm_arm_running_vcpu, vcpu); 70} 71 72/** 73 * kvm_arm_get_running_vcpu - get the vcpu running on the current CPU. 74 * Must be called from non-preemptible context 75 */ 76struct kvm_vcpu *kvm_arm_get_running_vcpu(void) 77{ 78 BUG_ON(preemptible()); 79 return __this_cpu_read(kvm_arm_running_vcpu); 80} 81 82/** 83 * kvm_arm_get_running_vcpus - get the per-CPU array of currently running vcpus. 84 */ 85struct kvm_vcpu * __percpu *kvm_get_running_vcpus(void) 86{ 87 return &kvm_arm_running_vcpu; 88} 89 90int kvm_arch_hardware_enable(void) 91{ 92 return 0; 93} 94 95int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu) 96{ 97 return kvm_vcpu_exiting_guest_mode(vcpu) == IN_GUEST_MODE; 98} 99 100int kvm_arch_hardware_setup(void) 101{ 102 return 0; 103} 104 105void kvm_arch_check_processor_compat(void *rtn) 106{ 107 *(int *)rtn = 0; 108} 109 110 111/** 112 * kvm_arch_init_vm - initializes a VM data structure 113 * @kvm: pointer to the KVM struct 114 */ 115int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) 116{ 117 int ret = 0; 118 119 if (type) 120 return -EINVAL; 121 122 ret = kvm_alloc_stage2_pgd(kvm); 123 if (ret) 124 goto out_fail_alloc; 125 126 ret = create_hyp_mappings(kvm, kvm + 1); 127 if (ret) 128 goto out_free_stage2_pgd; 129 130 kvm_timer_init(kvm); 131 132 /* Mark the initial VMID generation invalid */ 133 kvm->arch.vmid_gen = 0; 134 135 /* The maximum number of VCPUs is limited by the host's GIC model */ 136 kvm->arch.max_vcpus = kvm_vgic_get_max_vcpus(); 137 138 return ret; 139out_free_stage2_pgd: 140 kvm_free_stage2_pgd(kvm); 141out_fail_alloc: 142 return ret; 143} 144 145int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf) 146{ 147 return VM_FAULT_SIGBUS; 148} 149 150 151/** 152 * kvm_arch_destroy_vm - destroy the VM data structure 153 * @kvm: pointer to the KVM struct 154 */ 155void kvm_arch_destroy_vm(struct kvm *kvm) 156{ 157 int i; 158 159 kvm_free_stage2_pgd(kvm); 160 161 for (i = 0; i < KVM_MAX_VCPUS; ++i) { 162 if (kvm->vcpus[i]) { 163 kvm_arch_vcpu_free(kvm->vcpus[i]); 164 kvm->vcpus[i] = NULL; 165 } 166 } 167 168 kvm_vgic_destroy(kvm); 169} 170 171int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) 172{ 173 int r; 174 switch (ext) { 175 case KVM_CAP_IRQCHIP: 176 r = vgic_present; 177 break; 178 case KVM_CAP_DEVICE_CTRL: 179 case KVM_CAP_USER_MEMORY: 180 case KVM_CAP_SYNC_MMU: 181 case KVM_CAP_DESTROY_MEMORY_REGION_WORKS: 182 case KVM_CAP_ONE_REG: 183 case KVM_CAP_ARM_PSCI: 184 case KVM_CAP_ARM_PSCI_0_2: 185 case KVM_CAP_READONLY_MEM: 186 r = 1; 187 break; 188 case KVM_CAP_COALESCED_MMIO: 189 r = KVM_COALESCED_MMIO_PAGE_OFFSET; 190 break; 191 case KVM_CAP_ARM_SET_DEVICE_ADDR: 192 r = 1; 193 break; 194 case KVM_CAP_NR_VCPUS: 195 r = num_online_cpus(); 196 break; 197 case KVM_CAP_MAX_VCPUS: 198 r = KVM_MAX_VCPUS; 199 break; 200 default: 201 r = kvm_arch_dev_ioctl_check_extension(ext); 202 break; 203 } 204 return r; 205} 206 207long kvm_arch_dev_ioctl(struct file *filp, 208 unsigned int ioctl, unsigned long arg) 209{ 210 return -EINVAL; 211} 212 213 214struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, unsigned int id) 215{ 216 int err; 217 struct kvm_vcpu *vcpu; 218 219 if (irqchip_in_kernel(kvm) && vgic_initialized(kvm)) { 220 err = -EBUSY; 221 goto out; 222 } 223 224 if (id >= kvm->arch.max_vcpus) { 225 err = -EINVAL; 226 goto out; 227 } 228 229 vcpu = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL); 230 if (!vcpu) { 231 err = -ENOMEM; 232 goto out; 233 } 234 235 err = kvm_vcpu_init(vcpu, kvm, id); 236 if (err) 237 goto free_vcpu; 238 239 err = create_hyp_mappings(vcpu, vcpu + 1); 240 if (err) 241 goto vcpu_uninit; 242 243 return vcpu; 244vcpu_uninit: 245 kvm_vcpu_uninit(vcpu); 246free_vcpu: 247 kmem_cache_free(kvm_vcpu_cache, vcpu); 248out: 249 return ERR_PTR(err); 250} 251 252void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu) 253{ 254} 255 256void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu) 257{ 258 kvm_mmu_free_memory_caches(vcpu); 259 kvm_timer_vcpu_terminate(vcpu); 260 kvm_vgic_vcpu_destroy(vcpu); 261 kmem_cache_free(kvm_vcpu_cache, vcpu); 262} 263 264void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu) 265{ 266 kvm_arch_vcpu_free(vcpu); 267} 268 269int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) 270{ 271 return 0; 272} 273 274int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) 275{ 276 /* Force users to call KVM_ARM_VCPU_INIT */ 277 vcpu->arch.target = -1; 278 bitmap_zero(vcpu->arch.features, KVM_VCPU_MAX_FEATURES); 279 280 /* Set up the timer */ 281 kvm_timer_vcpu_init(vcpu); 282 283 return 0; 284} 285 286void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu) 287{ 288 vcpu->cpu = cpu; 289 vcpu->arch.host_cpu_context = this_cpu_ptr(kvm_host_cpu_state); 290 291 kvm_arm_set_running_vcpu(vcpu); 292} 293 294void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) 295{ 296 /* 297 * The arch-generic KVM code expects the cpu field of a vcpu to be -1 298 * if the vcpu is no longer assigned to a cpu. This is used for the 299 * optimized make_all_cpus_request path. 300 */ 301 vcpu->cpu = -1; 302 303 kvm_arm_set_running_vcpu(NULL); 304} 305 306int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, 307 struct kvm_guest_debug *dbg) 308{ 309 return -EINVAL; 310} 311 312 313int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, 314 struct kvm_mp_state *mp_state) 315{ 316 return -EINVAL; 317} 318 319int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, 320 struct kvm_mp_state *mp_state) 321{ 322 return -EINVAL; 323} 324 325/** 326 * kvm_arch_vcpu_runnable - determine if the vcpu can be scheduled 327 * @v: The VCPU pointer 328 * 329 * If the guest CPU is not waiting for interrupts or an interrupt line is 330 * asserted, the CPU is by definition runnable. 331 */ 332int kvm_arch_vcpu_runnable(struct kvm_vcpu *v) 333{ 334 return !!v->arch.irq_lines || kvm_vgic_vcpu_pending_irq(v); 335} 336 337/* Just ensure a guest exit from a particular CPU */ 338static void exit_vm_noop(void *info) 339{ 340} 341 342void force_vm_exit(const cpumask_t *mask) 343{ 344 smp_call_function_many(mask, exit_vm_noop, NULL, true); 345} 346 347/** 348 * need_new_vmid_gen - check that the VMID is still valid 349 * @kvm: The VM's VMID to checkt 350 * 351 * return true if there is a new generation of VMIDs being used 352 * 353 * The hardware supports only 256 values with the value zero reserved for the 354 * host, so we check if an assigned value belongs to a previous generation, 355 * which which requires us to assign a new value. If we're the first to use a 356 * VMID for the new generation, we must flush necessary caches and TLBs on all 357 * CPUs. 358 */ 359static bool need_new_vmid_gen(struct kvm *kvm) 360{ 361 return unlikely(kvm->arch.vmid_gen != atomic64_read(&kvm_vmid_gen)); 362} 363 364/** 365 * update_vttbr - Update the VTTBR with a valid VMID before the guest runs 366 * @kvm The guest that we are about to run 367 * 368 * Called from kvm_arch_vcpu_ioctl_run before entering the guest to ensure the 369 * VM has a valid VMID, otherwise assigns a new one and flushes corresponding 370 * caches and TLBs. 371 */ 372static void update_vttbr(struct kvm *kvm) 373{ 374 phys_addr_t pgd_phys; 375 u64 vmid; 376 377 if (!need_new_vmid_gen(kvm)) 378 return; 379 380 spin_lock(&kvm_vmid_lock); 381 382 /* 383 * We need to re-check the vmid_gen here to ensure that if another vcpu 384 * already allocated a valid vmid for this vm, then this vcpu should 385 * use the same vmid. 386 */ 387 if (!need_new_vmid_gen(kvm)) { 388 spin_unlock(&kvm_vmid_lock); 389 return; 390 } 391 392 /* First user of a new VMID generation? */ 393 if (unlikely(kvm_next_vmid == 0)) { 394 atomic64_inc(&kvm_vmid_gen); 395 kvm_next_vmid = 1; 396 397 /* 398 * On SMP we know no other CPUs can use this CPU's or each 399 * other's VMID after force_vm_exit returns since the 400 * kvm_vmid_lock blocks them from reentry to the guest. 401 */ 402 force_vm_exit(cpu_all_mask); 403 /* 404 * Now broadcast TLB + ICACHE invalidation over the inner 405 * shareable domain to make sure all data structures are 406 * clean. 407 */ 408 kvm_call_hyp(__kvm_flush_vm_context); 409 } 410 411 kvm->arch.vmid_gen = atomic64_read(&kvm_vmid_gen); 412 kvm->arch.vmid = kvm_next_vmid; 413 kvm_next_vmid++; 414 415 /* update vttbr to be used with the new vmid */ 416 pgd_phys = virt_to_phys(kvm_get_hwpgd(kvm)); 417 BUG_ON(pgd_phys & ~VTTBR_BADDR_MASK); 418 vmid = ((u64)(kvm->arch.vmid) << VTTBR_VMID_SHIFT) & VTTBR_VMID_MASK; 419 kvm->arch.vttbr = pgd_phys | vmid; 420 421 spin_unlock(&kvm_vmid_lock); 422} 423 424static int kvm_vcpu_first_run_init(struct kvm_vcpu *vcpu) 425{ 426 struct kvm *kvm = vcpu->kvm; 427 int ret; 428 429 if (likely(vcpu->arch.has_run_once)) 430 return 0; 431 432 vcpu->arch.has_run_once = true; 433 434 /* 435 * Map the VGIC hardware resources before running a vcpu the first 436 * time on this VM. 437 */ 438 if (unlikely(!vgic_ready(kvm))) { 439 ret = kvm_vgic_map_resources(kvm); 440 if (ret) 441 return ret; 442 } 443 444 /* 445 * Enable the arch timers only if we have an in-kernel VGIC 446 * and it has been properly initialized, since we cannot handle 447 * interrupts from the virtual timer with a userspace gic. 448 */ 449 if (irqchip_in_kernel(kvm) && vgic_initialized(kvm)) 450 kvm_timer_enable(kvm); 451 452 return 0; 453} 454 455static void vcpu_pause(struct kvm_vcpu *vcpu) 456{ 457 wait_queue_head_t *wq = kvm_arch_vcpu_wq(vcpu); 458 459 wait_event_interruptible(*wq, !vcpu->arch.pause); 460} 461 462static int kvm_vcpu_initialized(struct kvm_vcpu *vcpu) 463{ 464 return vcpu->arch.target >= 0; 465} 466 467/** 468 * kvm_arch_vcpu_ioctl_run - the main VCPU run function to execute guest code 469 * @vcpu: The VCPU pointer 470 * @run: The kvm_run structure pointer used for userspace state exchange 471 * 472 * This function is called through the VCPU_RUN ioctl called from user space. It 473 * will execute VM code in a loop until the time slice for the process is used 474 * or some emulation is needed from user space in which case the function will 475 * return with return value 0 and with the kvm_run structure filled in with the 476 * required data for the requested emulation. 477 */ 478int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) 479{ 480 int ret; 481 sigset_t sigsaved; 482 483 if (unlikely(!kvm_vcpu_initialized(vcpu))) 484 return -ENOEXEC; 485 486 ret = kvm_vcpu_first_run_init(vcpu); 487 if (ret) 488 return ret; 489 490 if (run->exit_reason == KVM_EXIT_MMIO) { 491 ret = kvm_handle_mmio_return(vcpu, vcpu->run); 492 if (ret) 493 return ret; 494 } 495 496 if (vcpu->sigset_active) 497 sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved); 498 499 ret = 1; 500 run->exit_reason = KVM_EXIT_UNKNOWN; 501 while (ret > 0) { 502 /* 503 * Check conditions before entering the guest 504 */ 505 cond_resched(); 506 507 update_vttbr(vcpu->kvm); 508 509 if (vcpu->arch.pause) 510 vcpu_pause(vcpu); 511 512 kvm_vgic_flush_hwstate(vcpu); 513 kvm_timer_flush_hwstate(vcpu); 514 515 local_irq_disable(); 516 517 /* 518 * Re-check atomic conditions 519 */ 520 if (signal_pending(current)) { 521 ret = -EINTR; 522 run->exit_reason = KVM_EXIT_INTR; 523 } 524 525 if (ret <= 0 || need_new_vmid_gen(vcpu->kvm)) { 526 local_irq_enable(); 527 kvm_timer_sync_hwstate(vcpu); 528 kvm_vgic_sync_hwstate(vcpu); 529 continue; 530 } 531 532 /************************************************************** 533 * Enter the guest 534 */ 535 trace_kvm_entry(*vcpu_pc(vcpu)); 536 kvm_guest_enter(); 537 vcpu->mode = IN_GUEST_MODE; 538 539 ret = kvm_call_hyp(__kvm_vcpu_run, vcpu); 540 541 vcpu->mode = OUTSIDE_GUEST_MODE; 542 kvm_guest_exit(); 543 trace_kvm_exit(kvm_vcpu_trap_get_class(vcpu), *vcpu_pc(vcpu)); 544 /* 545 * We may have taken a host interrupt in HYP mode (ie 546 * while executing the guest). This interrupt is still 547 * pending, as we haven't serviced it yet! 548 * 549 * We're now back in SVC mode, with interrupts 550 * disabled. Enabling the interrupts now will have 551 * the effect of taking the interrupt again, in SVC 552 * mode this time. 553 */ 554 local_irq_enable(); 555 556 /* 557 * Back from guest 558 *************************************************************/ 559 560 kvm_timer_sync_hwstate(vcpu); 561 kvm_vgic_sync_hwstate(vcpu); 562 563 ret = handle_exit(vcpu, run, ret); 564 } 565 566 if (vcpu->sigset_active) 567 sigprocmask(SIG_SETMASK, &sigsaved, NULL); 568 return ret; 569} 570 571static int vcpu_interrupt_line(struct kvm_vcpu *vcpu, int number, bool level) 572{ 573 int bit_index; 574 bool set; 575 unsigned long *ptr; 576 577 if (number == KVM_ARM_IRQ_CPU_IRQ) 578 bit_index = __ffs(HCR_VI); 579 else /* KVM_ARM_IRQ_CPU_FIQ */ 580 bit_index = __ffs(HCR_VF); 581 582 ptr = (unsigned long *)&vcpu->arch.irq_lines; 583 if (level) 584 set = test_and_set_bit(bit_index, ptr); 585 else 586 set = test_and_clear_bit(bit_index, ptr); 587 588 /* 589 * If we didn't change anything, no need to wake up or kick other CPUs 590 */ 591 if (set == level) 592 return 0; 593 594 /* 595 * The vcpu irq_lines field was updated, wake up sleeping VCPUs and 596 * trigger a world-switch round on the running physical CPU to set the 597 * virtual IRQ/FIQ fields in the HCR appropriately. 598 */ 599 kvm_vcpu_kick(vcpu); 600 601 return 0; 602} 603 604int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_level, 605 bool line_status) 606{ 607 u32 irq = irq_level->irq; 608 unsigned int irq_type, vcpu_idx, irq_num; 609 int nrcpus = atomic_read(&kvm->online_vcpus); 610 struct kvm_vcpu *vcpu = NULL; 611 bool level = irq_level->level; 612 613 irq_type = (irq >> KVM_ARM_IRQ_TYPE_SHIFT) & KVM_ARM_IRQ_TYPE_MASK; 614 vcpu_idx = (irq >> KVM_ARM_IRQ_VCPU_SHIFT) & KVM_ARM_IRQ_VCPU_MASK; 615 irq_num = (irq >> KVM_ARM_IRQ_NUM_SHIFT) & KVM_ARM_IRQ_NUM_MASK; 616 617 trace_kvm_irq_line(irq_type, vcpu_idx, irq_num, irq_level->level); 618 619 switch (irq_type) { 620 case KVM_ARM_IRQ_TYPE_CPU: 621 if (irqchip_in_kernel(kvm)) 622 return -ENXIO; 623 624 if (vcpu_idx >= nrcpus) 625 return -EINVAL; 626 627 vcpu = kvm_get_vcpu(kvm, vcpu_idx); 628 if (!vcpu) 629 return -EINVAL; 630 631 if (irq_num > KVM_ARM_IRQ_CPU_FIQ) 632 return -EINVAL; 633 634 return vcpu_interrupt_line(vcpu, irq_num, level); 635 case KVM_ARM_IRQ_TYPE_PPI: 636 if (!irqchip_in_kernel(kvm)) 637 return -ENXIO; 638 639 if (vcpu_idx >= nrcpus) 640 return -EINVAL; 641 642 vcpu = kvm_get_vcpu(kvm, vcpu_idx); 643 if (!vcpu) 644 return -EINVAL; 645 646 if (irq_num < VGIC_NR_SGIS || irq_num >= VGIC_NR_PRIVATE_IRQS) 647 return -EINVAL; 648 649 return kvm_vgic_inject_irq(kvm, vcpu->vcpu_id, irq_num, level); 650 case KVM_ARM_IRQ_TYPE_SPI: 651 if (!irqchip_in_kernel(kvm)) 652 return -ENXIO; 653 654 if (irq_num < VGIC_NR_PRIVATE_IRQS || 655 irq_num > KVM_ARM_IRQ_GIC_MAX) 656 return -EINVAL; 657 658 return kvm_vgic_inject_irq(kvm, 0, irq_num, level); 659 } 660 661 return -EINVAL; 662} 663 664static int kvm_vcpu_set_target(struct kvm_vcpu *vcpu, 665 const struct kvm_vcpu_init *init) 666{ 667 unsigned int i; 668 int phys_target = kvm_target_cpu(); 669 670 if (init->target != phys_target) 671 return -EINVAL; 672 673 /* 674 * Secondary and subsequent calls to KVM_ARM_VCPU_INIT must 675 * use the same target. 676 */ 677 if (vcpu->arch.target != -1 && vcpu->arch.target != init->target) 678 return -EINVAL; 679 680 /* -ENOENT for unknown features, -EINVAL for invalid combinations. */ 681 for (i = 0; i < sizeof(init->features) * 8; i++) { 682 bool set = (init->features[i / 32] & (1 << (i % 32))); 683 684 if (set && i >= KVM_VCPU_MAX_FEATURES) 685 return -ENOENT; 686 687 /* 688 * Secondary and subsequent calls to KVM_ARM_VCPU_INIT must 689 * use the same feature set. 690 */ 691 if (vcpu->arch.target != -1 && i < KVM_VCPU_MAX_FEATURES && 692 test_bit(i, vcpu->arch.features) != set) 693 return -EINVAL; 694 695 if (set) 696 set_bit(i, vcpu->arch.features); 697 } 698 699 vcpu->arch.target = phys_target; 700 701 /* Now we know what it is, we can reset it. */ 702 return kvm_reset_vcpu(vcpu); 703} 704 705 706static int kvm_arch_vcpu_ioctl_vcpu_init(struct kvm_vcpu *vcpu, 707 struct kvm_vcpu_init *init) 708{ 709 int ret; 710 711 ret = kvm_vcpu_set_target(vcpu, init); 712 if (ret) 713 return ret; 714 715 /* 716 * Ensure a rebooted VM will fault in RAM pages and detect if the 717 * guest MMU is turned off and flush the caches as needed. 718 */ 719 if (vcpu->arch.has_run_once) 720 stage2_unmap_vm(vcpu->kvm); 721 722 vcpu_reset_hcr(vcpu); 723 724 /* 725 * Handle the "start in power-off" case by marking the VCPU as paused. 726 */ 727 if (test_bit(KVM_ARM_VCPU_POWER_OFF, vcpu->arch.features)) 728 vcpu->arch.pause = true; 729 else 730 vcpu->arch.pause = false; 731 732 return 0; 733} 734 735long kvm_arch_vcpu_ioctl(struct file *filp, 736 unsigned int ioctl, unsigned long arg) 737{ 738 struct kvm_vcpu *vcpu = filp->private_data; 739 void __user *argp = (void __user *)arg; 740 741 switch (ioctl) { 742 case KVM_ARM_VCPU_INIT: { 743 struct kvm_vcpu_init init; 744 745 if (copy_from_user(&init, argp, sizeof(init))) 746 return -EFAULT; 747 748 return kvm_arch_vcpu_ioctl_vcpu_init(vcpu, &init); 749 } 750 case KVM_SET_ONE_REG: 751 case KVM_GET_ONE_REG: { 752 struct kvm_one_reg reg; 753 754 if (unlikely(!kvm_vcpu_initialized(vcpu))) 755 return -ENOEXEC; 756 757 if (copy_from_user(&reg, argp, sizeof(reg))) 758 return -EFAULT; 759 if (ioctl == KVM_SET_ONE_REG) 760 return kvm_arm_set_reg(vcpu, &reg); 761 else 762 return kvm_arm_get_reg(vcpu, &reg); 763 } 764 case KVM_GET_REG_LIST: { 765 struct kvm_reg_list __user *user_list = argp; 766 struct kvm_reg_list reg_list; 767 unsigned n; 768 769 if (unlikely(!kvm_vcpu_initialized(vcpu))) 770 return -ENOEXEC; 771 772 if (copy_from_user(&reg_list, user_list, sizeof(reg_list))) 773 return -EFAULT; 774 n = reg_list.n; 775 reg_list.n = kvm_arm_num_regs(vcpu); 776 if (copy_to_user(user_list, &reg_list, sizeof(reg_list))) 777 return -EFAULT; 778 if (n < reg_list.n) 779 return -E2BIG; 780 return kvm_arm_copy_reg_indices(vcpu, user_list->reg); 781 } 782 default: 783 return -EINVAL; 784 } 785} 786 787/** 788 * kvm_vm_ioctl_get_dirty_log - get and clear the log of dirty pages in a slot 789 * @kvm: kvm instance 790 * @log: slot id and address to which we copy the log 791 * 792 * Steps 1-4 below provide general overview of dirty page logging. See 793 * kvm_get_dirty_log_protect() function description for additional details. 794 * 795 * We call kvm_get_dirty_log_protect() to handle steps 1-3, upon return we 796 * always flush the TLB (step 4) even if previous step failed and the dirty 797 * bitmap may be corrupt. Regardless of previous outcome the KVM logging API 798 * does not preclude user space subsequent dirty log read. Flushing TLB ensures 799 * writes will be marked dirty for next log read. 800 * 801 * 1. Take a snapshot of the bit and clear it if needed. 802 * 2. Write protect the corresponding page. 803 * 3. Copy the snapshot to the userspace. 804 * 4. Flush TLB's if needed. 805 */ 806int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log) 807{ 808 bool is_dirty = false; 809 int r; 810 811 mutex_lock(&kvm->slots_lock); 812 813 r = kvm_get_dirty_log_protect(kvm, log, &is_dirty); 814 815 if (is_dirty) 816 kvm_flush_remote_tlbs(kvm); 817 818 mutex_unlock(&kvm->slots_lock); 819 return r; 820} 821 822static int kvm_vm_ioctl_set_device_addr(struct kvm *kvm, 823 struct kvm_arm_device_addr *dev_addr) 824{ 825 unsigned long dev_id, type; 826 827 dev_id = (dev_addr->id & KVM_ARM_DEVICE_ID_MASK) >> 828 KVM_ARM_DEVICE_ID_SHIFT; 829 type = (dev_addr->id & KVM_ARM_DEVICE_TYPE_MASK) >> 830 KVM_ARM_DEVICE_TYPE_SHIFT; 831 832 switch (dev_id) { 833 case KVM_ARM_DEVICE_VGIC_V2: 834 if (!vgic_present) 835 return -ENXIO; 836 return kvm_vgic_addr(kvm, type, &dev_addr->addr, true); 837 default: 838 return -ENODEV; 839 } 840} 841 842long kvm_arch_vm_ioctl(struct file *filp, 843 unsigned int ioctl, unsigned long arg) 844{ 845 struct kvm *kvm = filp->private_data; 846 void __user *argp = (void __user *)arg; 847 848 switch (ioctl) { 849 case KVM_CREATE_IRQCHIP: { 850 if (vgic_present) 851 return kvm_vgic_create(kvm, KVM_DEV_TYPE_ARM_VGIC_V2); 852 else 853 return -ENXIO; 854 } 855 case KVM_ARM_SET_DEVICE_ADDR: { 856 struct kvm_arm_device_addr dev_addr; 857 858 if (copy_from_user(&dev_addr, argp, sizeof(dev_addr))) 859 return -EFAULT; 860 return kvm_vm_ioctl_set_device_addr(kvm, &dev_addr); 861 } 862 case KVM_ARM_PREFERRED_TARGET: { 863 int err; 864 struct kvm_vcpu_init init; 865 866 err = kvm_vcpu_preferred_target(&init); 867 if (err) 868 return err; 869 870 if (copy_to_user(argp, &init, sizeof(init))) 871 return -EFAULT; 872 873 return 0; 874 } 875 default: 876 return -EINVAL; 877 } 878} 879 880static void cpu_init_hyp_mode(void *dummy) 881{ 882 phys_addr_t boot_pgd_ptr; 883 phys_addr_t pgd_ptr; 884 unsigned long hyp_stack_ptr; 885 unsigned long stack_page; 886 unsigned long vector_ptr; 887 888 /* Switch from the HYP stub to our own HYP init vector */ 889 __hyp_set_vectors(kvm_get_idmap_vector()); 890 891 boot_pgd_ptr = kvm_mmu_get_boot_httbr(); 892 pgd_ptr = kvm_mmu_get_httbr(); 893 stack_page = __this_cpu_read(kvm_arm_hyp_stack_page); 894 hyp_stack_ptr = stack_page + PAGE_SIZE; 895 vector_ptr = (unsigned long)__kvm_hyp_vector; 896 897 __cpu_init_hyp_mode(boot_pgd_ptr, pgd_ptr, hyp_stack_ptr, vector_ptr); 898} 899 900static int hyp_init_cpu_notify(struct notifier_block *self, 901 unsigned long action, void *cpu) 902{ 903 switch (action) { 904 case CPU_STARTING: 905 case CPU_STARTING_FROZEN: 906 if (__hyp_get_vectors() == hyp_default_vectors) 907 cpu_init_hyp_mode(NULL); 908 break; 909 } 910 911 return NOTIFY_OK; 912} 913 914static struct notifier_block hyp_init_cpu_nb = { 915 .notifier_call = hyp_init_cpu_notify, 916}; 917 918#ifdef CONFIG_CPU_PM 919static int hyp_init_cpu_pm_notifier(struct notifier_block *self, 920 unsigned long cmd, 921 void *v) 922{ 923 if (cmd == CPU_PM_EXIT && 924 __hyp_get_vectors() == hyp_default_vectors) { 925 cpu_init_hyp_mode(NULL); 926 return NOTIFY_OK; 927 } 928 929 return NOTIFY_DONE; 930} 931 932static struct notifier_block hyp_init_cpu_pm_nb = { 933 .notifier_call = hyp_init_cpu_pm_notifier, 934}; 935 936static void __init hyp_cpu_pm_init(void) 937{ 938 cpu_pm_register_notifier(&hyp_init_cpu_pm_nb); 939} 940#else 941static inline void hyp_cpu_pm_init(void) 942{ 943} 944#endif 945 946/** 947 * Inits Hyp-mode on all online CPUs 948 */ 949static int init_hyp_mode(void) 950{ 951 int cpu; 952 int err = 0; 953 954 /* 955 * Allocate Hyp PGD and setup Hyp identity mapping 956 */ 957 err = kvm_mmu_init(); 958 if (err) 959 goto out_err; 960 961 /* 962 * It is probably enough to obtain the default on one 963 * CPU. It's unlikely to be different on the others. 964 */ 965 hyp_default_vectors = __hyp_get_vectors(); 966 967 /* 968 * Allocate stack pages for Hypervisor-mode 969 */ 970 for_each_possible_cpu(cpu) { 971 unsigned long stack_page; 972 973 stack_page = __get_free_page(GFP_KERNEL); 974 if (!stack_page) { 975 err = -ENOMEM; 976 goto out_free_stack_pages; 977 } 978 979 per_cpu(kvm_arm_hyp_stack_page, cpu) = stack_page; 980 } 981 982 /* 983 * Map the Hyp-code called directly from the host 984 */ 985 err = create_hyp_mappings(__kvm_hyp_code_start, __kvm_hyp_code_end); 986 if (err) { 987 kvm_err("Cannot map world-switch code\n"); 988 goto out_free_mappings; 989 } 990 991 /* 992 * Map the Hyp stack pages 993 */ 994 for_each_possible_cpu(cpu) { 995 char *stack_page = (char *)per_cpu(kvm_arm_hyp_stack_page, cpu); 996 err = create_hyp_mappings(stack_page, stack_page + PAGE_SIZE); 997 998 if (err) { 999 kvm_err("Cannot map hyp stack\n"); 1000 goto out_free_mappings; 1001 } 1002 } 1003 1004 /* 1005 * Map the host CPU structures 1006 */ 1007 kvm_host_cpu_state = alloc_percpu(kvm_cpu_context_t); 1008 if (!kvm_host_cpu_state) { 1009 err = -ENOMEM; 1010 kvm_err("Cannot allocate host CPU state\n"); 1011 goto out_free_mappings; 1012 } 1013 1014 for_each_possible_cpu(cpu) { 1015 kvm_cpu_context_t *cpu_ctxt; 1016 1017 cpu_ctxt = per_cpu_ptr(kvm_host_cpu_state, cpu); 1018 err = create_hyp_mappings(cpu_ctxt, cpu_ctxt + 1); 1019 1020 if (err) { 1021 kvm_err("Cannot map host CPU state: %d\n", err); 1022 goto out_free_context; 1023 } 1024 } 1025 1026 /* 1027 * Execute the init code on each CPU. 1028 */ 1029 on_each_cpu(cpu_init_hyp_mode, NULL, 1); 1030 1031 /* 1032 * Init HYP view of VGIC 1033 */ 1034 err = kvm_vgic_hyp_init(); 1035 if (err) 1036 goto out_free_context; 1037 1038#ifdef CONFIG_KVM_ARM_VGIC 1039 vgic_present = true; 1040#endif 1041 1042 /* 1043 * Init HYP architected timer support 1044 */ 1045 err = kvm_timer_hyp_init(); 1046 if (err) 1047 goto out_free_mappings; 1048 1049#ifndef CONFIG_HOTPLUG_CPU 1050 free_boot_hyp_pgd(); 1051#endif 1052 1053 kvm_perf_init(); 1054 1055 kvm_info("Hyp mode initialized successfully\n"); 1056 1057 return 0; 1058out_free_context: 1059 free_percpu(kvm_host_cpu_state); 1060out_free_mappings: 1061 free_hyp_pgds(); 1062out_free_stack_pages: 1063 for_each_possible_cpu(cpu) 1064 free_page(per_cpu(kvm_arm_hyp_stack_page, cpu)); 1065out_err: 1066 kvm_err("error initializing Hyp mode: %d\n", err); 1067 return err; 1068} 1069 1070static void check_kvm_target_cpu(void *ret) 1071{ 1072 *(int *)ret = kvm_target_cpu(); 1073} 1074 1075struct kvm_vcpu *kvm_mpidr_to_vcpu(struct kvm *kvm, unsigned long mpidr) 1076{ 1077 struct kvm_vcpu *vcpu; 1078 int i; 1079 1080 mpidr &= MPIDR_HWID_BITMASK; 1081 kvm_for_each_vcpu(i, vcpu, kvm) { 1082 if (mpidr == kvm_vcpu_get_mpidr_aff(vcpu)) 1083 return vcpu; 1084 } 1085 return NULL; 1086} 1087 1088/** 1089 * Initialize Hyp-mode and memory mappings on all CPUs. 1090 */ 1091int kvm_arch_init(void *opaque) 1092{ 1093 int err; 1094 int ret, cpu; 1095 1096 if (!is_hyp_mode_available()) { 1097 kvm_err("HYP mode not available\n"); 1098 return -ENODEV; 1099 } 1100 1101 for_each_online_cpu(cpu) { 1102 smp_call_function_single(cpu, check_kvm_target_cpu, &ret, 1); 1103 if (ret < 0) { 1104 kvm_err("Error, CPU %d not supported!\n", cpu); 1105 return -ENODEV; 1106 } 1107 } 1108 1109 cpu_notifier_register_begin(); 1110 1111 err = init_hyp_mode(); 1112 if (err) 1113 goto out_err; 1114 1115 err = __register_cpu_notifier(&hyp_init_cpu_nb); 1116 if (err) { 1117 kvm_err("Cannot register HYP init CPU notifier (%d)\n", err); 1118 goto out_err; 1119 } 1120 1121 cpu_notifier_register_done(); 1122 1123 hyp_cpu_pm_init(); 1124 1125 kvm_coproc_table_init(); 1126 return 0; 1127out_err: 1128 cpu_notifier_register_done(); 1129 return err; 1130} 1131 1132/* NOP: Compiling as a module not supported */ 1133void kvm_arch_exit(void) 1134{ 1135 kvm_perf_teardown(); 1136} 1137 1138static int arm_init(void) 1139{ 1140 int rc = kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE); 1141 return rc; 1142} 1143 1144module_init(arm_init);