Lines Matching +full:d +full:- +full:tlb +full:- +full:sets
6 * KVM/MIPS TLB handling, this file is part of the Linux host kernel so that
7 * TLB handlers run from KSEG0
26 #include <asm/tlb.h>
46 struct mm_struct *gpa_mm = &vcpu->kvm->arch.gpa_mm; in kvm_mips_get_root_asid()
57 struct mm_struct *kern_mm = &vcpu->arch.guest_kernel_mm; in kvm_mips_get_kernel_asid()
65 struct mm_struct *user_mm = &vcpu->arch.guest_user_mm; in kvm_mips_get_user_asid()
71 /* Structure defining an tlb entry data set. */
90 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_mips_dump_guest_tlbs()
91 struct kvm_mips_tlb tlb; in kvm_mips_dump_guest_tlbs() local
98 tlb = vcpu->arch.guest_tlb[i]; in kvm_mips_dump_guest_tlbs()
99 kvm_info("TLB%c%3d Hi 0x%08lx ", in kvm_mips_dump_guest_tlbs()
100 (tlb.tlb_lo[0] | tlb.tlb_lo[1]) & ENTRYLO_V in kvm_mips_dump_guest_tlbs()
102 i, tlb.tlb_hi); in kvm_mips_dump_guest_tlbs()
104 (u64) mips3_tlbpfn_to_paddr(tlb.tlb_lo[0]), in kvm_mips_dump_guest_tlbs()
105 (tlb.tlb_lo[0] & ENTRYLO_D) ? 'D' : ' ', in kvm_mips_dump_guest_tlbs()
106 (tlb.tlb_lo[0] & ENTRYLO_G) ? 'G' : ' ', in kvm_mips_dump_guest_tlbs()
107 (tlb.tlb_lo[0] & ENTRYLO_C) >> ENTRYLO_C_SHIFT); in kvm_mips_dump_guest_tlbs()
109 (u64) mips3_tlbpfn_to_paddr(tlb.tlb_lo[1]), in kvm_mips_dump_guest_tlbs()
110 (tlb.tlb_lo[1] & ENTRYLO_D) ? 'D' : ' ', in kvm_mips_dump_guest_tlbs()
111 (tlb.tlb_lo[1] & ENTRYLO_G) ? 'G' : ' ', in kvm_mips_dump_guest_tlbs()
112 (tlb.tlb_lo[1] & ENTRYLO_C) >> ENTRYLO_C_SHIFT, in kvm_mips_dump_guest_tlbs()
113 tlb.tlb_mask); in kvm_mips_dump_guest_tlbs()
121 int index = -1; in kvm_mips_guest_tlb_lookup()
122 struct kvm_mips_tlb *tlb = vcpu->arch.guest_tlb; in kvm_mips_guest_tlb_lookup() local
125 if (TLB_HI_VPN2_HIT(tlb[i], entryhi) && in kvm_mips_guest_tlb_lookup()
126 TLB_HI_ASID_HIT(tlb[i], entryhi)) { in kvm_mips_guest_tlb_lookup()
132 kvm_debug("%s: entryhi: %#lx, index: %d lo0: %#lx, lo1: %#lx\n", in kvm_mips_guest_tlb_lookup()
133 __func__, entryhi, index, tlb[i].tlb_lo[0], tlb[i].tlb_lo[1]); in kvm_mips_guest_tlb_lookup()
171 * maybe-initialized warning when using GCC 6. in kvm_mips_host_tlb_inv()
193 * We don't want to get reserved instruction exceptions for missing tlb in kvm_mips_host_tlb_inv()
200 kvm_debug("%s: Invalidated guest user entryhi %#lx @ idx %d\n", in kvm_mips_host_tlb_inv()
204 kvm_debug("%s: Invalidated guest kernel entryhi %#lx @ idx %d\n", in kvm_mips_host_tlb_inv()
217 * clear_root_gid() - Set GuestCtl1.RID for normal root operation.
228 * set_root_gid_to_guest_gid() - Set GuestCtl1.RID to match GuestCtl1.ID.
230 * Sets the root GuestID to match the current guest GuestID, for TLB operation
231 * on the GPA->RPA mappings in the root TLB.
234 * possibly longer if TLB registers are modified.
259 /* Set root GuestID for root probe and write of guest TLB entry */ in kvm_vz_host_tlb_inv()
275 * We don't want to get reserved instruction exceptions for missing tlb in kvm_vz_host_tlb_inv()
282 kvm_debug("%s: Invalidated root entryhi %#lx @ idx %d\n", in kvm_vz_host_tlb_inv()
291 * kvm_vz_guest_tlb_lookup() - Lookup a guest VZ TLB mapping.
293 * @gpa: Guest virtual address in a TLB mapped guest segment.
296 * Converts a guest virtual address in a guest TLB mapped segment to a guest
297 * physical address, by probing the guest TLB.
299 * Returns: 0 if guest TLB mapping exists for @gva. *@gpa will have been
301 * -EFAULT if no guest TLB mapping exists for @gva. *@gpa may not
313 /* Probe the guest TLB for a mapping */ in kvm_vz_guest_tlb_lookup()
315 /* Set root GuestID for root probe of guest TLB entry */ in kvm_vz_guest_tlb_lookup()
336 return -EFAULT; in kvm_vz_guest_tlb_lookup()
339 /* Match! read the TLB entry */ in kvm_vz_guest_tlb_lookup()
363 pagemaskbit = (pagemask ^ (pagemask & (pagemask - 1))) >> 1; in kvm_vz_guest_tlb_lookup()
367 * TLB entry may have become invalid since TLB probe if physical FTLB in kvm_vz_guest_tlb_lookup()
371 return -EFAULT; in kvm_vz_guest_tlb_lookup()
386 * kvm_vz_local_flush_roottlb_all_guests() - Flush all root TLB entries for
389 * Invalidate all entries in root tlb which are GPA mappings.
409 * Invalidate guest entries in root TLB while leaving root entries in kvm_vz_local_flush_roottlb_all_guests()
418 /* Don't invalidate non-guest (RVA) mappings in the root TLB */ in kvm_vz_local_flush_roottlb_all_guests()
442 * kvm_vz_local_flush_guesttlb_all() - Flush all guest TLB entries.
444 * Invalidate all entries in guest tlb irrespective of guestid.
467 /* Inhibit machine check due to multiple matching TLB entries */ in kvm_vz_local_flush_guesttlb_all()
474 /* Invalidate guest entries in guest TLB */ in kvm_vz_local_flush_guesttlb_all()
503 * kvm_vz_save_guesttlb() - Save a range of guest TLB entries.
504 * @buf: Buffer to write TLB entries into.
508 * Save a range of guest TLB entries. The caller must ensure interrupts are
532 /* Read each entry from guest TLB */ in kvm_vz_save_guesttlb()
543 buf->tlb_hi = UNIQUE_GUEST_ENTRYHI(i); in kvm_vz_save_guesttlb()
544 buf->tlb_lo[0] = 0; in kvm_vz_save_guesttlb()
545 buf->tlb_lo[1] = 0; in kvm_vz_save_guesttlb()
546 buf->tlb_mask = 0; in kvm_vz_save_guesttlb()
549 buf->tlb_hi = read_gc0_entryhi(); in kvm_vz_save_guesttlb()
550 buf->tlb_lo[0] = read_gc0_entrylo0(); in kvm_vz_save_guesttlb()
551 buf->tlb_lo[1] = read_gc0_entrylo1(); in kvm_vz_save_guesttlb()
552 buf->tlb_mask = read_gc0_pagemask(); in kvm_vz_save_guesttlb()
572 * kvm_vz_load_guesttlb() - Save a range of guest TLB entries.
573 * @buf: Buffer to read TLB entries from.
577 * Load a range of guest TLB entries. The caller must ensure interrupts are
598 /* Write each entry to guest TLB */ in kvm_vz_load_guesttlb()
601 write_gc0_entryhi(buf->tlb_hi); in kvm_vz_load_guesttlb()
602 write_gc0_entrylo0(buf->tlb_lo[0]); in kvm_vz_load_guesttlb()
603 write_gc0_entrylo1(buf->tlb_lo[1]); in kvm_vz_load_guesttlb()
604 write_gc0_pagemask(buf->tlb_mask); in kvm_vz_load_guesttlb()
630 /* Set root GuestID for root probe and write of guest TLB entry */ in kvm_loongson_clear_guest_vtlb()
647 /* Set root GuestID for root probe and write of guest TLB entry */ in kvm_loongson_clear_guest_ftlb()
668 * kvm_mips_suspend_mm() - Suspend the active mm.
683 cpumask_clear_cpu(cpu, mm_cpumask(current->active_mm)); in kvm_mips_suspend_mm()
684 current->active_mm = &init_mm; in kvm_mips_suspend_mm()
689 * kvm_mips_resume_mm() - Resume the current process mm.
697 cpumask_set_cpu(cpu, mm_cpumask(current->mm)); in kvm_mips_resume_mm()
698 current->active_mm = current->mm; in kvm_mips_resume_mm()