Lines Matching refs:kvm

93 	int lpid = vcpu->kvm->arch.lpid;  in kvmhv_copy_tofrom_guest_radix()
135 struct kvm *kvm = vcpu->kvm; in kvmppc_mmu_walk_radix_tree() local
167 vcpu->srcu_idx = srcu_read_lock(&kvm->srcu); in kvmppc_mmu_walk_radix_tree()
168 ret = kvm_read_guest(kvm, addr, &rpte, sizeof(rpte)); in kvmppc_mmu_walk_radix_tree()
169 srcu_read_unlock(&kvm->srcu, vcpu->srcu_idx); in kvmppc_mmu_walk_radix_tree()
230 struct kvm *kvm = vcpu->kvm; in kvmppc_mmu_radix_translate_table() local
245 vcpu->srcu_idx = srcu_read_lock(&kvm->srcu); in kvmppc_mmu_radix_translate_table()
246 ret = kvm_read_guest(kvm, ptbl, &entry, sizeof(entry)); in kvmppc_mmu_radix_translate_table()
247 srcu_read_unlock(&kvm->srcu, vcpu->srcu_idx); in kvmppc_mmu_radix_translate_table()
277 vcpu->kvm->arch.process_table, pid, &pte); in kvmppc_mmu_radix_xlate()
303 void kvmppc_radix_tlbie_page(struct kvm *kvm, unsigned long addr, in kvmppc_radix_tlbie_page() argument
341 static void kvmppc_radix_flush_pwc(struct kvm *kvm, unsigned int lpid) in kvmppc_radix_flush_pwc() argument
362 static unsigned long kvmppc_radix_update_pte(struct kvm *kvm, pte_t *ptep, in kvmppc_radix_update_pte() argument
369 static void kvmppc_radix_set_pte_at(struct kvm *kvm, unsigned long addr, in kvmppc_radix_set_pte_at() argument
372 radix__set_pte_at(kvm->mm, addr, ptep, pte, 0); in kvmppc_radix_set_pte_at()
411 void kvmppc_unmap_pte(struct kvm *kvm, pte_t *pte, unsigned long gpa, in kvmppc_unmap_pte() argument
422 old = kvmppc_radix_update_pte(kvm, pte, ~0UL, 0, gpa, shift); in kvmppc_unmap_pte()
423 kvmppc_radix_tlbie_page(kvm, gpa, shift, lpid); in kvmppc_unmap_pte()
426 if (lpid != kvm->arch.lpid) in kvmppc_unmap_pte()
430 memslot = gfn_to_memslot(kvm, gfn); in kvmppc_unmap_pte()
437 kvm->stat.num_2M_pages--; in kvmppc_unmap_pte()
439 kvm->stat.num_1G_pages--; in kvmppc_unmap_pte()
444 kvmhv_remove_nest_rmap_range(kvm, memslot, gpa, hpa, page_size); in kvmppc_unmap_pte()
464 static void kvmppc_unmap_free_pte(struct kvm *kvm, pte_t *pte, bool full, in kvmppc_unmap_free_pte() argument
476 kvmppc_unmap_pte(kvm, p, in kvmppc_unmap_free_pte()
485 static void kvmppc_unmap_free_pmd(struct kvm *kvm, pmd_t *pmd, bool full, in kvmppc_unmap_free_pmd() argument
499 kvmppc_unmap_pte(kvm, (pte_t *)p, in kvmppc_unmap_free_pmd()
507 kvmppc_unmap_free_pte(kvm, pte, full, lpid); in kvmppc_unmap_free_pmd()
514 static void kvmppc_unmap_free_pud(struct kvm *kvm, pud_t *pud, in kvmppc_unmap_free_pud() argument
529 kvmppc_unmap_free_pmd(kvm, pmd, true, lpid); in kvmppc_unmap_free_pud()
533 pud_free(kvm->mm, pud); in kvmppc_unmap_free_pud()
536 void kvmppc_free_pgtable_radix(struct kvm *kvm, pgd_t *pgd, unsigned int lpid) in kvmppc_free_pgtable_radix() argument
547 kvmppc_unmap_free_pud(kvm, pud, lpid); in kvmppc_free_pgtable_radix()
552 void kvmppc_free_radix(struct kvm *kvm) in kvmppc_free_radix() argument
554 if (kvm->arch.pgtable) { in kvmppc_free_radix()
555 kvmppc_free_pgtable_radix(kvm, kvm->arch.pgtable, in kvmppc_free_radix()
556 kvm->arch.lpid); in kvmppc_free_radix()
557 pgd_free(kvm->mm, kvm->arch.pgtable); in kvmppc_free_radix()
558 kvm->arch.pgtable = NULL; in kvmppc_free_radix()
562 static void kvmppc_unmap_free_pmd_entry_table(struct kvm *kvm, pmd_t *pmd, in kvmppc_unmap_free_pmd_entry_table() argument
573 kvmppc_radix_flush_pwc(kvm, lpid); in kvmppc_unmap_free_pmd_entry_table()
575 kvmppc_unmap_free_pte(kvm, pte, false, lpid); in kvmppc_unmap_free_pmd_entry_table()
578 static void kvmppc_unmap_free_pud_entry_table(struct kvm *kvm, pud_t *pud, in kvmppc_unmap_free_pud_entry_table() argument
589 kvmppc_radix_flush_pwc(kvm, lpid); in kvmppc_unmap_free_pud_entry_table()
591 kvmppc_unmap_free_pmd(kvm, pmd, false, lpid); in kvmppc_unmap_free_pud_entry_table()
603 int kvmppc_create_pte(struct kvm *kvm, pgd_t *pgtable, pte_t pte, in kvmppc_create_pte() argument
623 new_pud = pud_alloc_one(kvm->mm, gpa); in kvmppc_create_pte()
635 spin_lock(&kvm->mmu_lock); in kvmppc_create_pte()
637 if (mmu_notifier_retry(kvm, mmu_seq)) in kvmppc_create_pte()
645 p4d_populate(kvm->mm, p4d, new_pud); in kvmppc_create_pte()
661 kvmppc_radix_update_pte(kvm, (pte_t *)pud, in kvmppc_create_pte()
675 kvmppc_unmap_pte(kvm, (pte_t *)pud, hgpa, PUD_SHIFT, NULL, in kvmppc_create_pte()
685 kvmppc_unmap_free_pud_entry_table(kvm, pud, gpa, lpid); in kvmppc_create_pte()
687 kvmppc_radix_set_pte_at(kvm, gpa, (pte_t *)pud, pte); in kvmppc_create_pte()
689 kvmhv_insert_nest_rmap(kvm, rmapp, n_rmap); in kvmppc_create_pte()
696 pud_populate(kvm->mm, pud, new_pmd); in kvmppc_create_pte()
712 kvmppc_radix_update_pte(kvm, pmdp_ptep(pmd), in kvmppc_create_pte()
727 kvmppc_unmap_pte(kvm, pmdp_ptep(pmd), lgpa, PMD_SHIFT, NULL, in kvmppc_create_pte()
737 kvmppc_unmap_free_pmd_entry_table(kvm, pmd, gpa, lpid); in kvmppc_create_pte()
739 kvmppc_radix_set_pte_at(kvm, gpa, pmdp_ptep(pmd), pte); in kvmppc_create_pte()
741 kvmhv_insert_nest_rmap(kvm, rmapp, n_rmap); in kvmppc_create_pte()
748 pmd_populate(kvm->mm, pmd, new_ptep); in kvmppc_create_pte()
761 kvmppc_radix_update_pte(kvm, ptep, 0, pte_val(pte), gpa, 0); in kvmppc_create_pte()
765 kvmppc_radix_set_pte_at(kvm, gpa, ptep, pte); in kvmppc_create_pte()
767 kvmhv_insert_nest_rmap(kvm, rmapp, n_rmap); in kvmppc_create_pte()
771 spin_unlock(&kvm->mmu_lock); in kvmppc_create_pte()
773 pud_free(kvm->mm, new_pud); in kvmppc_create_pte()
781 bool kvmppc_hv_handle_set_rc(struct kvm *kvm, bool nested, bool writing, in kvmppc_hv_handle_set_rc() argument
798 ptep = find_kvm_nested_guest_pte(kvm, lpid, gpa, &shift); in kvmppc_hv_handle_set_rc()
800 ptep = find_kvm_secondary_pte(kvm, gpa, &shift); in kvmppc_hv_handle_set_rc()
803 kvmppc_radix_update_pte(kvm, ptep, 0, pgflags, gpa, shift); in kvmppc_hv_handle_set_rc()
815 struct kvm *kvm = vcpu->kvm; in kvmppc_book3s_instantiate_page() local
827 mmu_seq = kvm->mmu_notifier_seq; in kvmppc_book3s_instantiate_page()
859 spin_lock(&kvm->mmu_lock); in kvmppc_book3s_instantiate_page()
860 ptep = find_kvm_host_pte(kvm, mmu_seq, hva, &shift); in kvmppc_book3s_instantiate_page()
864 spin_unlock(&kvm->mmu_lock); in kvmppc_book3s_instantiate_page()
909 ret = kvmppc_create_pte(kvm, kvm->arch.pgtable, pte, gpa, level, in kvmppc_book3s_instantiate_page()
910 mmu_seq, kvm->arch.lpid, NULL, NULL); in kvmppc_book3s_instantiate_page()
925 kvm->stat.num_2M_pages++; in kvmppc_book3s_instantiate_page()
927 kvm->stat.num_1G_pages++; in kvmppc_book3s_instantiate_page()
936 struct kvm *kvm = vcpu->kvm; in kvmppc_book3s_radix_page_fault() local
962 if (kvm->arch.secure_guest & KVMPPC_SECURE_INIT_DONE) in kvmppc_book3s_radix_page_fault()
963 return kvmppc_send_page_to_uv(kvm, gfn); in kvmppc_book3s_radix_page_fault()
966 memslot = gfn_to_memslot(kvm, gfn); in kvmppc_book3s_radix_page_fault()
994 spin_lock(&kvm->mmu_lock); in kvmppc_book3s_radix_page_fault()
995 if (kvmppc_hv_handle_set_rc(kvm, false, writing, in kvmppc_book3s_radix_page_fault()
996 gpa, kvm->arch.lpid)) in kvmppc_book3s_radix_page_fault()
998 spin_unlock(&kvm->mmu_lock); in kvmppc_book3s_radix_page_fault()
1015 void kvm_unmap_radix(struct kvm *kvm, struct kvm_memory_slot *memslot, in kvm_unmap_radix() argument
1022 if (kvm->arch.secure_guest & KVMPPC_SECURE_INIT_DONE) { in kvm_unmap_radix()
1023 uv_page_inval(kvm->arch.lpid, gpa, PAGE_SHIFT); in kvm_unmap_radix()
1027 ptep = find_kvm_secondary_pte(kvm, gpa, &shift); in kvm_unmap_radix()
1029 kvmppc_unmap_pte(kvm, ptep, gpa, shift, memslot, in kvm_unmap_radix()
1030 kvm->arch.lpid); in kvm_unmap_radix()
1034 bool kvm_age_radix(struct kvm *kvm, struct kvm_memory_slot *memslot, in kvm_age_radix() argument
1043 if (kvm->arch.secure_guest & KVMPPC_SECURE_INIT_DONE) in kvm_age_radix()
1046 ptep = find_kvm_secondary_pte(kvm, gpa, &shift); in kvm_age_radix()
1048 old = kvmppc_radix_update_pte(kvm, ptep, _PAGE_ACCESSED, 0, in kvm_age_radix()
1053 kvmhv_update_nest_rmap_rc_list(kvm, rmapp, _PAGE_ACCESSED, 0, in kvm_age_radix()
1062 bool kvm_test_age_radix(struct kvm *kvm, struct kvm_memory_slot *memslot, in kvm_test_age_radix() argument
1071 if (kvm->arch.secure_guest & KVMPPC_SECURE_INIT_DONE) in kvm_test_age_radix()
1074 ptep = find_kvm_secondary_pte(kvm, gpa, &shift); in kvm_test_age_radix()
1081 static int kvm_radix_test_clear_dirty(struct kvm *kvm, in kvm_radix_test_clear_dirty() argument
1091 if (kvm->arch.secure_guest & KVMPPC_SECURE_INIT_DONE) in kvm_radix_test_clear_dirty()
1098 ptep = find_kvm_secondary_pte_unlocked(kvm, gpa, &shift); in kvm_radix_test_clear_dirty()
1104 spin_lock(&kvm->mmu_lock); in kvm_radix_test_clear_dirty()
1116 spin_unlock(&kvm->mmu_lock); in kvm_radix_test_clear_dirty()
1123 old = kvmppc_radix_update_pte(kvm, ptep, _PAGE_DIRTY, 0, in kvm_radix_test_clear_dirty()
1125 kvmppc_radix_tlbie_page(kvm, gpa, shift, kvm->arch.lpid); in kvm_radix_test_clear_dirty()
1128 kvmhv_update_nest_rmap_rc_list(kvm, rmapp, _PAGE_DIRTY, 0, in kvm_radix_test_clear_dirty()
1131 spin_unlock(&kvm->mmu_lock); in kvm_radix_test_clear_dirty()
1136 long kvmppc_hv_get_dirty_log_radix(struct kvm *kvm, in kvmppc_hv_get_dirty_log_radix() argument
1143 npages = kvm_radix_test_clear_dirty(kvm, memslot, i); in kvmppc_hv_get_dirty_log_radix()
1161 void kvmppc_radix_flush_memslot(struct kvm *kvm, in kvmppc_radix_flush_memslot() argument
1169 if (kvm->arch.secure_guest & KVMPPC_SECURE_INIT_START) in kvmppc_radix_flush_memslot()
1170 kvmppc_uvmem_drop_pages(memslot, kvm, true); in kvmppc_radix_flush_memslot()
1172 if (kvm->arch.secure_guest & KVMPPC_SECURE_INIT_DONE) in kvmppc_radix_flush_memslot()
1176 spin_lock(&kvm->mmu_lock); in kvmppc_radix_flush_memslot()
1178 ptep = find_kvm_secondary_pte(kvm, gpa, &shift); in kvmppc_radix_flush_memslot()
1180 kvmppc_unmap_pte(kvm, ptep, gpa, shift, memslot, in kvmppc_radix_flush_memslot()
1181 kvm->arch.lpid); in kvmppc_radix_flush_memslot()
1188 kvm->mmu_notifier_seq++; in kvmppc_radix_flush_memslot()
1189 spin_unlock(&kvm->mmu_lock); in kvmppc_radix_flush_memslot()
1202 int kvmhv_get_rmmu_info(struct kvm *kvm, struct kvm_ppc_rmmu_info *info) in kvmhv_get_rmmu_info() argument
1229 int kvmppc_init_vm_radix(struct kvm *kvm) in kvmppc_init_vm_radix() argument
1231 kvm->arch.pgtable = pgd_alloc(kvm->mm); in kvmppc_init_vm_radix()
1232 if (!kvm->arch.pgtable) in kvmppc_init_vm_radix()
1248 struct kvm *kvm; member
1260 struct kvm *kvm = inode->i_private; in debugfs_radix_open() local
1267 kvm_get_kvm(kvm); in debugfs_radix_open()
1268 p->kvm = kvm; in debugfs_radix_open()
1279 kvm_put_kvm(p->kvm); in debugfs_radix_release()
1290 struct kvm *kvm; in debugfs_radix_read() local
1302 kvm = p->kvm; in debugfs_radix_read()
1303 if (!kvm_is_radix(kvm)) in debugfs_radix_read()
1339 p->lpid = kvmhv_nested_next_lpid(kvm, p->lpid); in debugfs_radix_read()
1346 pgt = kvm->arch.pgtable; in debugfs_radix_read()
1348 nested = kvmhv_get_nested(kvm, p->lpid, false); in debugfs_radix_read()
1451 void kvmhv_radix_debugfs_init(struct kvm *kvm) in kvmhv_radix_debugfs_init() argument
1453 debugfs_create_file("radix", 0400, kvm->arch.debugfs_dir, kvm, in kvmhv_radix_debugfs_init()