Lines Matching refs:vcpu
50 uint32_t kvm_mips_get_kernel_asid(struct kvm_vcpu *vcpu) in kvm_mips_get_kernel_asid() argument
52 return vcpu->arch.guest_kernel_asid[smp_processor_id()] & ASID_MASK; in kvm_mips_get_kernel_asid()
55 uint32_t kvm_mips_get_user_asid(struct kvm_vcpu *vcpu) in kvm_mips_get_user_asid() argument
57 return vcpu->arch.guest_user_asid[smp_processor_id()] & ASID_MASK; in kvm_mips_get_user_asid()
60 inline uint32_t kvm_mips_get_commpage_asid(struct kvm_vcpu *vcpu) in kvm_mips_get_commpage_asid() argument
62 return vcpu->kvm->arch.commpage_tlb; in kvm_mips_get_commpage_asid()
116 void kvm_mips_dump_guest_tlbs(struct kvm_vcpu *vcpu) in kvm_mips_dump_guest_tlbs() argument
118 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_mips_dump_guest_tlbs()
126 tlb = vcpu->arch.guest_tlb[i]; in kvm_mips_dump_guest_tlbs()
168 unsigned long kvm_mips_translate_guest_kseg0_to_hpa(struct kvm_vcpu *vcpu, in kvm_mips_translate_guest_kseg0_to_hpa() argument
173 struct kvm *kvm = vcpu->kvm; in kvm_mips_translate_guest_kseg0_to_hpa()
189 if (kvm_mips_map_page(vcpu->kvm, gfn) < 0) in kvm_mips_translate_guest_kseg0_to_hpa()
198 int kvm_mips_host_tlb_write(struct kvm_vcpu *vcpu, unsigned long entryhi, in kvm_mips_host_tlb_write() argument
234 vcpu->arch.pc, idx, read_c0_entryhi(), in kvm_mips_host_tlb_write()
240 ++vcpu->stat.flush_dcache_exits; in kvm_mips_host_tlb_write()
245 ++vcpu->stat.flush_dcache_exits; in kvm_mips_host_tlb_write()
262 struct kvm_vcpu *vcpu) in kvm_mips_handle_kseg0_tlb_fault() argument
269 struct kvm *kvm = vcpu->kvm; in kvm_mips_handle_kseg0_tlb_fault()
288 if (kvm_mips_map_page(vcpu->kvm, gfn) < 0) in kvm_mips_handle_kseg0_tlb_fault()
291 if (kvm_mips_map_page(vcpu->kvm, gfn ^ 0x1) < 0) in kvm_mips_handle_kseg0_tlb_fault()
302 entryhi = (vaddr | kvm_mips_get_kernel_asid(vcpu)); in kvm_mips_handle_kseg0_tlb_fault()
308 return kvm_mips_host_tlb_write(vcpu, entryhi, entrylo0, entrylo1, in kvm_mips_handle_kseg0_tlb_fault()
314 struct kvm_vcpu *vcpu) in kvm_mips_handle_commpage_tlb_fault() argument
320 pfn0 = CPHYSADDR(vcpu->arch.kseg0_commpage) >> PAGE_SHIFT; in kvm_mips_handle_commpage_tlb_fault()
330 write_c0_entryhi(vaddr | kvm_mips_get_kernel_asid(vcpu)); in kvm_mips_handle_commpage_tlb_fault()
336 write_c0_index(kvm_mips_get_commpage_asid(vcpu)); in kvm_mips_handle_commpage_tlb_fault()
343 vcpu->arch.pc, read_c0_index(), read_c0_entryhi(), in kvm_mips_handle_commpage_tlb_fault()
356 int kvm_mips_handle_mapped_seg_tlb_fault(struct kvm_vcpu *vcpu, in kvm_mips_handle_mapped_seg_tlb_fault() argument
362 struct kvm *kvm = vcpu->kvm; in kvm_mips_handle_mapped_seg_tlb_fault()
390 entryhi = (tlb->tlb_hi & VPN2_MASK) | (KVM_GUEST_KERNEL_MODE(vcpu) ? in kvm_mips_handle_mapped_seg_tlb_fault()
391 kvm_mips_get_kernel_asid(vcpu) : in kvm_mips_handle_mapped_seg_tlb_fault()
392 kvm_mips_get_user_asid(vcpu)); in kvm_mips_handle_mapped_seg_tlb_fault()
398 kvm_debug("@ %#lx tlb_lo0: 0x%08lx tlb_lo1: 0x%08lx\n", vcpu->arch.pc, in kvm_mips_handle_mapped_seg_tlb_fault()
401 return kvm_mips_host_tlb_write(vcpu, entryhi, entrylo0, entrylo1, in kvm_mips_handle_mapped_seg_tlb_fault()
406 int kvm_mips_guest_tlb_lookup(struct kvm_vcpu *vcpu, unsigned long entryhi) in kvm_mips_guest_tlb_lookup() argument
410 struct kvm_mips_tlb *tlb = vcpu->arch.guest_tlb; in kvm_mips_guest_tlb_lookup()
427 int kvm_mips_host_tlb_lookup(struct kvm_vcpu *vcpu, unsigned long vaddr) in kvm_mips_host_tlb_lookup() argument
436 if (KVM_GUEST_KERNEL_MODE(vcpu)) in kvm_mips_host_tlb_lookup()
438 kvm_mips_get_kernel_asid(vcpu)); in kvm_mips_host_tlb_lookup()
441 kvm_mips_get_user_asid(vcpu)); in kvm_mips_host_tlb_lookup()
463 int kvm_mips_host_tlb_inv(struct kvm_vcpu *vcpu, unsigned long va) in kvm_mips_host_tlb_inv() argument
472 write_c0_entryhi((va & VPN2_MASK) | kvm_mips_get_user_asid(vcpu)); in kvm_mips_host_tlb_inv()
504 (va & VPN2_MASK) | kvm_mips_get_user_asid(vcpu), idx); in kvm_mips_host_tlb_inv()
511 int kvm_mips_host_tlb_inv_index(struct kvm_vcpu *vcpu, int index) in kvm_mips_host_tlb_inv_index() argument
600 struct kvm_vcpu *vcpu) in kvm_get_new_mmu_context() argument
658 static void kvm_mips_migrate_count(struct kvm_vcpu *vcpu) in kvm_mips_migrate_count() argument
660 if (hrtimer_cancel(&vcpu->arch.comparecount_timer)) in kvm_mips_migrate_count()
661 hrtimer_restart(&vcpu->arch.comparecount_timer); in kvm_mips_migrate_count()
665 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu) in kvm_arch_vcpu_load() argument
670 kvm_debug("%s: vcpu %p, cpu: %d\n", __func__, vcpu, cpu); in kvm_arch_vcpu_load()
676 if (((vcpu->arch. in kvm_arch_vcpu_load()
678 kvm_get_new_mmu_context(&vcpu->arch.guest_kernel_mm, cpu, vcpu); in kvm_arch_vcpu_load()
679 vcpu->arch.guest_kernel_asid[cpu] = in kvm_arch_vcpu_load()
680 vcpu->arch.guest_kernel_mm.context.asid[cpu]; in kvm_arch_vcpu_load()
681 kvm_get_new_mmu_context(&vcpu->arch.guest_user_mm, cpu, vcpu); in kvm_arch_vcpu_load()
682 vcpu->arch.guest_user_asid[cpu] = in kvm_arch_vcpu_load()
683 vcpu->arch.guest_user_mm.context.asid[cpu]; in kvm_arch_vcpu_load()
689 cpu, vcpu->arch.guest_kernel_asid[cpu]); in kvm_arch_vcpu_load()
691 vcpu->arch.guest_user_asid[cpu]); in kvm_arch_vcpu_load()
694 if (vcpu->arch.last_sched_cpu != cpu) { in kvm_arch_vcpu_load()
696 vcpu->arch.last_sched_cpu, cpu, vcpu->vcpu_id); in kvm_arch_vcpu_load()
702 kvm_mips_migrate_count(vcpu); in kvm_arch_vcpu_load()
711 write_c0_entryhi(vcpu->arch. in kvm_arch_vcpu_load()
724 if (KVM_GUEST_KERNEL_MODE(vcpu)) in kvm_arch_vcpu_load()
725 write_c0_entryhi(vcpu->arch. in kvm_arch_vcpu_load()
729 write_c0_entryhi(vcpu->arch. in kvm_arch_vcpu_load()
737 kvm_mips_callbacks->vcpu_set_regs(vcpu); in kvm_arch_vcpu_load()
745 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) in kvm_arch_vcpu_put() argument
754 vcpu->arch.preempt_entryhi = read_c0_entryhi(); in kvm_arch_vcpu_put()
755 vcpu->arch.last_sched_cpu = cpu; in kvm_arch_vcpu_put()
758 kvm_mips_callbacks->vcpu_get_regs(vcpu); in kvm_arch_vcpu_put()
773 uint32_t kvm_get_inst(uint32_t *opc, struct kvm_vcpu *vcpu) in kvm_get_inst() argument
775 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_get_inst()
783 index = kvm_mips_host_tlb_lookup(vcpu, (unsigned long) opc); in kvm_get_inst()
789 index = kvm_mips_guest_tlb_lookup(vcpu, vpn2 | asid); in kvm_get_inst()
792 __func__, opc, vcpu, read_c0_entryhi()); in kvm_get_inst()
797 kvm_mips_handle_mapped_seg_tlb_fault(vcpu, in kvm_get_inst()
798 &vcpu->arch. in kvm_get_inst()
806 kvm_mips_translate_guest_kseg0_to_hpa(vcpu, in kvm_get_inst()