Lines Matching refs:role
281 kvm_flush_remote_tlbs_gfn(kvm, gfn, sp->role.level); in kvm_flush_remote_tlbs_sptep()
557 int level = sptep_to_sp(sptep)->role.level; in mmu_spte_clear_track_bits()
711 if (sp->role.passthrough) in kvm_mmu_page_get_gfn()
714 if (!sp->role.direct) in kvm_mmu_page_get_gfn()
717 return sp->gfn + (index << ((sp->role.level - 1) * SPTE_LEVEL_BITS)); in kvm_mmu_page_get_gfn()
743 return sp->role.access; in kvm_mmu_page_get_access()
756 sp->role.passthrough ? "passthrough" : "direct", in kvm_mmu_page_set_translation()
761 sp->role.passthrough ? "passthrough" : "direct", in kvm_mmu_page_set_translation()
817 slots = kvm_memslots_for_spte_role(kvm, sp->role); in account_shadowed()
821 if (sp->role.level > PG_LEVEL_4K) in account_shadowed()
866 slots = kvm_memslots_for_spte_role(kvm, sp->role); in unaccount_shadowed()
868 if (sp->role.level > PG_LEVEL_4K) in unaccount_shadowed()
1100 slots = kvm_memslots_for_spte_role(kvm, sp->role); in rmap_remove()
1103 rmap_head = gfn_to_rmap(gfn, sp->role.level, slot); in rmap_remove()
1197 WARN_ON(sp->role.level == PG_LEVEL_4K); in drop_large_spte()
1644 kvm_update_page_stats(kvm, sp->role.level, 1); in __rmap_add()
1646 rmap_head = gfn_to_rmap(gfn, sp->role.level, slot); in __rmap_add()
1653 kvm_flush_remote_tlbs_gfn(kvm, gfn, sp->role.level); in __rmap_add()
1737 if (!sp->role.direct) in kvm_mmu_free_shadow_page()
1898 if (sp->role.direct) in sp_has_gptes()
1901 if (sp->role.passthrough) in sp_has_gptes()
1943 if (sp->role.invalid) in is_obsolete_sp()
1970 int level = sp->role.level; in mmu_pages_next()
1994 level = sp->role.level; in mmu_pages_first()
2085 union kvm_mmu_page_role role) in kvm_mmu_find_shadow_page() argument
2098 if (sp->role.word != role.word) { in kvm_mmu_find_shadow_page()
2108 if (role.level > PG_LEVEL_4K && sp->unsync) in kvm_mmu_find_shadow_page()
2115 if (sp->role.direct) in kvm_mmu_find_shadow_page()
2170 union kvm_mmu_page_role role) in kvm_mmu_alloc_shadow_page() argument
2176 if (!role.direct) in kvm_mmu_alloc_shadow_page()
2193 sp->role = role; in kvm_mmu_alloc_shadow_page()
2206 union kvm_mmu_page_role role) in __kvm_mmu_get_shadow_page() argument
2214 sp = kvm_mmu_find_shadow_page(kvm, vcpu, gfn, sp_list, role); in __kvm_mmu_get_shadow_page()
2217 sp = kvm_mmu_alloc_shadow_page(kvm, caches, gfn, sp_list, role); in __kvm_mmu_get_shadow_page()
2226 union kvm_mmu_page_role role) in kvm_mmu_get_shadow_page() argument
2234 return __kvm_mmu_get_shadow_page(vcpu->kvm, vcpu, &caches, gfn, role); in kvm_mmu_get_shadow_page()
2241 union kvm_mmu_page_role role; in kvm_mmu_child_role() local
2243 role = parent_sp->role; in kvm_mmu_child_role()
2244 role.level--; in kvm_mmu_child_role()
2245 role.access = access; in kvm_mmu_child_role()
2246 role.direct = direct; in kvm_mmu_child_role()
2247 role.passthrough = 0; in kvm_mmu_child_role()
2275 if (role.has_4_byte_gpte) { in kvm_mmu_child_role()
2276 WARN_ON_ONCE(role.level != PG_LEVEL_4K); in kvm_mmu_child_role()
2277 role.quadrant = spte_index(sptep) & 1; in kvm_mmu_child_role()
2280 return role; in kvm_mmu_child_role()
2287 union kvm_mmu_page_role role; in kvm_mmu_get_child_sp() local
2292 role = kvm_mmu_child_role(sptep, direct, access); in kvm_mmu_get_child_sp()
2293 return kvm_mmu_get_shadow_page(vcpu, gfn, role); in kvm_mmu_get_child_sp()
2414 if (child->role.access == direct_access) in validate_direct_spte()
2431 if (is_last_spte(pte, sp->role.level)) { in mmu_page_zap_pte()
2443 child->role.guest_mode && !child->parent_ptes.val) in mmu_page_zap_pte()
2483 if (parent->role.level == PG_LEVEL_4K) in mmu_zap_unsync_children()
2516 if (!sp->role.invalid && sp_has_gptes(sp)) in __kvm_mmu_prepare_zap_page()
2530 if (sp->role.invalid) in __kvm_mmu_prepare_zap_page()
2553 sp->role.invalid = 1; in __kvm_mmu_prepare_zap_page()
2593 WARN_ON(!sp->role.invalid || sp->root_count); in kvm_mmu_commit_zap_page()
2698 sp->role.word); in kvm_mmu_unprotect_page()
2791 WARN_ON(sp->role.level != PG_LEVEL_4K); in mmu_try_to_unsync_pages()
2844 int level = sp->role.level; in mmu_set_spte()
2923 unsigned int access = sp->role.access; in direct_pte_prefetch_many()
2951 WARN_ON(!sp->role.direct); in __direct_pte_prefetch()
2984 if (sp->role.level > PG_LEVEL_4K) in direct_pte_prefetch()
3395 if (!is_last_spte(spte, sp->role.level)) in fast_page_fault()
3448 if (sp->role.level > PG_LEVEL_4K && in fast_page_fault()
3502 else if (!--sp->root_count && sp->role.invalid) in mmu_free_root_page()
3579 to_shadow_page(root_hpa)->role.guest_mode) in kvm_mmu_free_guest_mode_roots()
3603 union kvm_mmu_page_role role = vcpu->arch.mmu->root_role; in mmu_alloc_root() local
3606 role.level = level; in mmu_alloc_root()
3607 role.quadrant = quadrant; in mmu_alloc_root()
3609 WARN_ON_ONCE(quadrant && !role.has_4_byte_gpte); in mmu_alloc_root()
3610 WARN_ON_ONCE(role.direct && role.has_4_byte_gpte); in mmu_alloc_root()
3612 sp = kvm_mmu_get_shadow_page(vcpu, gfn, role); in mmu_alloc_root()
4477 union kvm_mmu_page_role role) in is_root_usable() argument
4479 return (role.direct || pgd == root->pgd) && in is_root_usable()
4481 role.word == to_shadow_page(root->hpa)->role.word; in is_root_usable()
5078 union kvm_cpu_role role = {0}; in kvm_calc_cpu_role() local
5080 role.base.access = ACC_ALL; in kvm_calc_cpu_role()
5081 role.base.smm = is_smm(vcpu); in kvm_calc_cpu_role()
5082 role.base.guest_mode = is_guest_mode(vcpu); in kvm_calc_cpu_role()
5083 role.ext.valid = 1; in kvm_calc_cpu_role()
5086 role.base.direct = 1; in kvm_calc_cpu_role()
5087 return role; in kvm_calc_cpu_role()
5090 role.base.efer_nx = ____is_efer_nx(regs); in kvm_calc_cpu_role()
5091 role.base.cr0_wp = ____is_cr0_wp(regs); in kvm_calc_cpu_role()
5092 role.base.smep_andnot_wp = ____is_cr4_smep(regs) && !____is_cr0_wp(regs); in kvm_calc_cpu_role()
5093 role.base.smap_andnot_wp = ____is_cr4_smap(regs) && !____is_cr0_wp(regs); in kvm_calc_cpu_role()
5094 role.base.has_4_byte_gpte = !____is_cr4_pae(regs); in kvm_calc_cpu_role()
5097 role.base.level = ____is_cr4_la57(regs) ? PT64_ROOT_5LEVEL in kvm_calc_cpu_role()
5100 role.base.level = PT32E_ROOT_LEVEL; in kvm_calc_cpu_role()
5102 role.base.level = PT32_ROOT_LEVEL; in kvm_calc_cpu_role()
5104 role.ext.cr4_smep = ____is_cr4_smep(regs); in kvm_calc_cpu_role()
5105 role.ext.cr4_smap = ____is_cr4_smap(regs); in kvm_calc_cpu_role()
5106 role.ext.cr4_pse = ____is_cr4_pse(regs); in kvm_calc_cpu_role()
5109 role.ext.cr4_pke = ____is_efer_lma(regs) && ____is_cr4_pke(regs); in kvm_calc_cpu_role()
5110 role.ext.cr4_la57 = ____is_efer_lma(regs) && ____is_cr4_la57(regs); in kvm_calc_cpu_role()
5111 role.ext.efer_lma = ____is_efer_lma(regs); in kvm_calc_cpu_role()
5112 return role; in kvm_calc_cpu_role()
5132 union kvm_mmu_page_role role = {0}; in kvm_calc_tdp_mmu_root_page_role() local
5134 role.access = ACC_ALL; in kvm_calc_tdp_mmu_root_page_role()
5135 role.cr0_wp = true; in kvm_calc_tdp_mmu_root_page_role()
5136 role.efer_nx = true; in kvm_calc_tdp_mmu_root_page_role()
5137 role.smm = cpu_role.base.smm; in kvm_calc_tdp_mmu_root_page_role()
5138 role.guest_mode = cpu_role.base.guest_mode; in kvm_calc_tdp_mmu_root_page_role()
5139 role.ad_disabled = !kvm_ad_enabled(); in kvm_calc_tdp_mmu_root_page_role()
5140 role.level = kvm_mmu_get_tdp_level(vcpu); in kvm_calc_tdp_mmu_root_page_role()
5141 role.direct = true; in kvm_calc_tdp_mmu_root_page_role()
5142 role.has_4_byte_gpte = false; in kvm_calc_tdp_mmu_root_page_role()
5144 return role; in kvm_calc_tdp_mmu_root_page_role()
5254 union kvm_cpu_role role = {0}; in kvm_calc_shadow_ept_root_page_role() local
5261 role.base.level = level; in kvm_calc_shadow_ept_root_page_role()
5262 role.base.has_4_byte_gpte = false; in kvm_calc_shadow_ept_root_page_role()
5263 role.base.direct = false; in kvm_calc_shadow_ept_root_page_role()
5264 role.base.ad_disabled = !accessed_dirty; in kvm_calc_shadow_ept_root_page_role()
5265 role.base.guest_mode = true; in kvm_calc_shadow_ept_root_page_role()
5266 role.base.access = ACC_ALL; in kvm_calc_shadow_ept_root_page_role()
5268 role.ext.word = 0; in kvm_calc_shadow_ept_root_page_role()
5269 role.ext.execonly = execonly; in kvm_calc_shadow_ept_root_page_role()
5270 role.ext.valid = 1; in kvm_calc_shadow_ept_root_page_role()
5272 return role; in kvm_calc_shadow_ept_root_page_role()
5531 if (sp->role.level == PG_LEVEL_4K) in detect_write_flooding()
5548 gpa, bytes, sp->role.word); in detect_write_misaligned()
5551 pte_size = sp->role.has_4_byte_gpte ? 4 : 8; in detect_write_misaligned()
5573 level = sp->role.level; in get_written_sptes()
5575 if (sp->role.has_4_byte_gpte) { in get_written_sptes()
5589 if (quadrant != sp->role.quadrant) in get_written_sptes()
5638 if (gentry && sp->role.level != PG_LEVEL_4K) in kvm_mmu_pte_write()
5980 if (WARN_ON(sp->role.invalid)) in kvm_zap_obsolete_pages()
6283 union kvm_mmu_page_role role; in shadow_mmu_get_sp_for_split() local
6296 role = kvm_mmu_child_role(huge_sptep, /*direct=*/true, access); in shadow_mmu_get_sp_for_split()
6303 return __kvm_mmu_get_shadow_page(kvm, NULL, &caches, gfn, role); in shadow_mmu_get_sp_for_split()
6340 flush |= !is_last_spte(*sptep, sp->role.level); in shadow_mmu_split_huge_page()
6344 spte = make_huge_page_split_spte(kvm, huge_spte, sp->role, index); in shadow_mmu_split_huge_page()
6346 __rmap_add(kvm, cache, slot, sptep, gfn, sp->role.access); in shadow_mmu_split_huge_page()
6363 level = huge_sp->role.level; in shadow_mmu_try_split_huge_page()
6405 if (WARN_ON_ONCE(!sp->role.guest_mode)) in shadow_mmu_try_split_huge_pages()
6417 if (sp->role.invalid) in shadow_mmu_try_split_huge_pages()
6527 if (sp->role.direct && in kvm_mmu_zap_collapsible_spte()
6528 sp->role.level < kvm_mmu_max_mapping_level(kvm, slot, sp->gfn, in kvm_mmu_zap_collapsible_spte()
6625 if (WARN_ON(sp->role.invalid)) in kvm_mmu_zap_all()
6966 WARN_ON_ONCE(!sp->role.direct); in kvm_recover_nx_huge_pages()