Lines Matching refs:role
536 int level = sptep_to_sp(sptep)->role.level; in mmu_spte_clear_track_bits()
685 if (sp->role.passthrough) in kvm_mmu_page_get_gfn()
688 if (!sp->role.direct) in kvm_mmu_page_get_gfn()
691 return sp->gfn + (index << ((sp->role.level - 1) * SPTE_LEVEL_BITS)); in kvm_mmu_page_get_gfn()
717 return sp->role.access; in kvm_mmu_page_get_access()
730 sp->role.passthrough ? "passthrough" : "direct", in kvm_mmu_page_set_translation()
735 sp->role.passthrough ? "passthrough" : "direct", in kvm_mmu_page_set_translation()
791 slots = kvm_memslots_for_spte_role(kvm, sp->role); in account_shadowed()
795 if (sp->role.level > PG_LEVEL_4K) in account_shadowed()
824 slots = kvm_memslots_for_spte_role(kvm, sp->role); in unaccount_shadowed()
826 if (sp->role.level > PG_LEVEL_4K) in unaccount_shadowed()
1049 slots = kvm_memslots_for_spte_role(kvm, sp->role); in rmap_remove()
1052 rmap_head = gfn_to_rmap(gfn, sp->role.level, slot); in rmap_remove()
1146 WARN_ON(sp->role.level == PG_LEVEL_4K); in drop_large_spte()
1152 KVM_PAGES_PER_HPAGE(sp->role.level)); in drop_large_spte()
1594 kvm_update_page_stats(kvm, sp->role.level, 1); in __rmap_add()
1596 rmap_head = gfn_to_rmap(gfn, sp->role.level, slot); in __rmap_add()
1604 kvm, sp->gfn, KVM_PAGES_PER_HPAGE(sp->role.level)); in __rmap_add()
1688 if (!sp->role.direct) in kvm_mmu_free_shadow_page()
1849 if (sp->role.direct) in sp_has_gptes()
1852 if (sp->role.passthrough) in sp_has_gptes()
1894 if (sp->role.invalid) in is_obsolete_sp()
1921 int level = sp->role.level; in mmu_pages_next()
1945 level = sp->role.level; in mmu_pages_first()
2036 union kvm_mmu_page_role role) in kvm_mmu_find_shadow_page() argument
2049 if (sp->role.word != role.word) { in kvm_mmu_find_shadow_page()
2059 if (role.level > PG_LEVEL_4K && sp->unsync) in kvm_mmu_find_shadow_page()
2066 if (sp->role.direct) in kvm_mmu_find_shadow_page()
2121 union kvm_mmu_page_role role) in kvm_mmu_alloc_shadow_page() argument
2127 if (!role.direct) in kvm_mmu_alloc_shadow_page()
2142 sp->role = role; in kvm_mmu_alloc_shadow_page()
2155 union kvm_mmu_page_role role) in __kvm_mmu_get_shadow_page() argument
2163 sp = kvm_mmu_find_shadow_page(kvm, vcpu, gfn, sp_list, role); in __kvm_mmu_get_shadow_page()
2166 sp = kvm_mmu_alloc_shadow_page(kvm, caches, gfn, sp_list, role); in __kvm_mmu_get_shadow_page()
2175 union kvm_mmu_page_role role) in kvm_mmu_get_shadow_page() argument
2183 return __kvm_mmu_get_shadow_page(vcpu->kvm, vcpu, &caches, gfn, role); in kvm_mmu_get_shadow_page()
2190 union kvm_mmu_page_role role; in kvm_mmu_child_role() local
2192 role = parent_sp->role; in kvm_mmu_child_role()
2193 role.level--; in kvm_mmu_child_role()
2194 role.access = access; in kvm_mmu_child_role()
2195 role.direct = direct; in kvm_mmu_child_role()
2196 role.passthrough = 0; in kvm_mmu_child_role()
2224 if (role.has_4_byte_gpte) { in kvm_mmu_child_role()
2225 WARN_ON_ONCE(role.level != PG_LEVEL_4K); in kvm_mmu_child_role()
2226 role.quadrant = spte_index(sptep) & 1; in kvm_mmu_child_role()
2229 return role; in kvm_mmu_child_role()
2236 union kvm_mmu_page_role role; in kvm_mmu_get_child_sp() local
2241 role = kvm_mmu_child_role(sptep, direct, access); in kvm_mmu_get_child_sp()
2242 return kvm_mmu_get_shadow_page(vcpu, gfn, role); in kvm_mmu_get_child_sp()
2354 if (child->role.access == direct_access) in validate_direct_spte()
2371 if (is_last_spte(pte, sp->role.level)) { in mmu_page_zap_pte()
2383 child->role.guest_mode && !child->parent_ptes.val) in mmu_page_zap_pte()
2423 if (parent->role.level == PG_LEVEL_4K) in mmu_zap_unsync_children()
2456 if (!sp->role.invalid && sp_has_gptes(sp)) in __kvm_mmu_prepare_zap_page()
2470 if (sp->role.invalid) in __kvm_mmu_prepare_zap_page()
2493 sp->role.invalid = 1; in __kvm_mmu_prepare_zap_page()
2533 WARN_ON(!sp->role.invalid || sp->root_count); in kvm_mmu_commit_zap_page()
2638 sp->role.word); in kvm_mmu_unprotect_page()
2731 WARN_ON(sp->role.level != PG_LEVEL_4K); in mmu_try_to_unsync_pages()
2784 int level = sp->role.level; in mmu_set_spte()
2864 unsigned int access = sp->role.access; in direct_pte_prefetch_many()
2892 WARN_ON(!sp->role.direct); in __direct_pte_prefetch()
2925 if (sp->role.level > PG_LEVEL_4K) in direct_pte_prefetch()
3328 if (!is_last_spte(spte, sp->role.level)) in fast_page_fault()
3381 if (sp->role.level > PG_LEVEL_4K && in fast_page_fault()
3432 else if (!--sp->root_count && sp->role.invalid) in mmu_free_root_page()
3509 to_shadow_page(root_hpa)->role.guest_mode) in kvm_mmu_free_guest_mode_roots()
3533 union kvm_mmu_page_role role = vcpu->arch.mmu->root_role; in mmu_alloc_root() local
3536 role.level = level; in mmu_alloc_root()
3537 role.quadrant = quadrant; in mmu_alloc_root()
3539 WARN_ON_ONCE(quadrant && !role.has_4_byte_gpte); in mmu_alloc_root()
3540 WARN_ON_ONCE(role.direct && role.has_4_byte_gpte); in mmu_alloc_root()
3542 sp = kvm_mmu_get_shadow_page(vcpu, gfn, role); in mmu_alloc_root()
4363 union kvm_mmu_page_role role) in is_root_usable() argument
4365 return (role.direct || pgd == root->pgd) && in is_root_usable()
4367 role.word == to_shadow_page(root->hpa)->role.word; in is_root_usable()
4962 union kvm_cpu_role role = {0}; in kvm_calc_cpu_role() local
4964 role.base.access = ACC_ALL; in kvm_calc_cpu_role()
4965 role.base.smm = is_smm(vcpu); in kvm_calc_cpu_role()
4966 role.base.guest_mode = is_guest_mode(vcpu); in kvm_calc_cpu_role()
4967 role.ext.valid = 1; in kvm_calc_cpu_role()
4970 role.base.direct = 1; in kvm_calc_cpu_role()
4971 return role; in kvm_calc_cpu_role()
4974 role.base.efer_nx = ____is_efer_nx(regs); in kvm_calc_cpu_role()
4975 role.base.cr0_wp = ____is_cr0_wp(regs); in kvm_calc_cpu_role()
4976 role.base.smep_andnot_wp = ____is_cr4_smep(regs) && !____is_cr0_wp(regs); in kvm_calc_cpu_role()
4977 role.base.smap_andnot_wp = ____is_cr4_smap(regs) && !____is_cr0_wp(regs); in kvm_calc_cpu_role()
4978 role.base.has_4_byte_gpte = !____is_cr4_pae(regs); in kvm_calc_cpu_role()
4981 role.base.level = ____is_cr4_la57(regs) ? PT64_ROOT_5LEVEL in kvm_calc_cpu_role()
4984 role.base.level = PT32E_ROOT_LEVEL; in kvm_calc_cpu_role()
4986 role.base.level = PT32_ROOT_LEVEL; in kvm_calc_cpu_role()
4988 role.ext.cr4_smep = ____is_cr4_smep(regs); in kvm_calc_cpu_role()
4989 role.ext.cr4_smap = ____is_cr4_smap(regs); in kvm_calc_cpu_role()
4990 role.ext.cr4_pse = ____is_cr4_pse(regs); in kvm_calc_cpu_role()
4993 role.ext.cr4_pke = ____is_efer_lma(regs) && ____is_cr4_pke(regs); in kvm_calc_cpu_role()
4994 role.ext.cr4_la57 = ____is_efer_lma(regs) && ____is_cr4_la57(regs); in kvm_calc_cpu_role()
4995 role.ext.efer_lma = ____is_efer_lma(regs); in kvm_calc_cpu_role()
4996 return role; in kvm_calc_cpu_role()
5016 union kvm_mmu_page_role role = {0}; in kvm_calc_tdp_mmu_root_page_role() local
5018 role.access = ACC_ALL; in kvm_calc_tdp_mmu_root_page_role()
5019 role.cr0_wp = true; in kvm_calc_tdp_mmu_root_page_role()
5020 role.efer_nx = true; in kvm_calc_tdp_mmu_root_page_role()
5021 role.smm = cpu_role.base.smm; in kvm_calc_tdp_mmu_root_page_role()
5022 role.guest_mode = cpu_role.base.guest_mode; in kvm_calc_tdp_mmu_root_page_role()
5023 role.ad_disabled = !kvm_ad_enabled(); in kvm_calc_tdp_mmu_root_page_role()
5024 role.level = kvm_mmu_get_tdp_level(vcpu); in kvm_calc_tdp_mmu_root_page_role()
5025 role.direct = true; in kvm_calc_tdp_mmu_root_page_role()
5026 role.has_4_byte_gpte = false; in kvm_calc_tdp_mmu_root_page_role()
5028 return role; in kvm_calc_tdp_mmu_root_page_role()
5138 union kvm_cpu_role role = {0}; in kvm_calc_shadow_ept_root_page_role() local
5145 role.base.level = level; in kvm_calc_shadow_ept_root_page_role()
5146 role.base.has_4_byte_gpte = false; in kvm_calc_shadow_ept_root_page_role()
5147 role.base.direct = false; in kvm_calc_shadow_ept_root_page_role()
5148 role.base.ad_disabled = !accessed_dirty; in kvm_calc_shadow_ept_root_page_role()
5149 role.base.guest_mode = true; in kvm_calc_shadow_ept_root_page_role()
5150 role.base.access = ACC_ALL; in kvm_calc_shadow_ept_root_page_role()
5152 role.ext.word = 0; in kvm_calc_shadow_ept_root_page_role()
5153 role.ext.execonly = execonly; in kvm_calc_shadow_ept_root_page_role()
5154 role.ext.valid = 1; in kvm_calc_shadow_ept_root_page_role()
5156 return role; in kvm_calc_shadow_ept_root_page_role()
5415 if (sp->role.level == PG_LEVEL_4K) in detect_write_flooding()
5432 gpa, bytes, sp->role.word); in detect_write_misaligned()
5435 pte_size = sp->role.has_4_byte_gpte ? 4 : 8; in detect_write_misaligned()
5457 level = sp->role.level; in get_written_sptes()
5459 if (sp->role.has_4_byte_gpte) { in get_written_sptes()
5473 if (quadrant != sp->role.quadrant) in get_written_sptes()
5522 if (gentry && sp->role.level != PG_LEVEL_4K) in kvm_mmu_pte_write()
5861 if (WARN_ON(sp->role.invalid)) in kvm_zap_obsolete_pages()
6161 union kvm_mmu_page_role role; in shadow_mmu_get_sp_for_split() local
6174 role = kvm_mmu_child_role(huge_sptep, /*direct=*/true, access); in shadow_mmu_get_sp_for_split()
6181 return __kvm_mmu_get_shadow_page(kvm, NULL, &caches, gfn, role); in shadow_mmu_get_sp_for_split()
6218 flush |= !is_last_spte(*sptep, sp->role.level); in shadow_mmu_split_huge_page()
6222 spte = make_huge_page_split_spte(kvm, huge_spte, sp->role, index); in shadow_mmu_split_huge_page()
6224 __rmap_add(kvm, cache, slot, sptep, gfn, sp->role.access); in shadow_mmu_split_huge_page()
6241 level = huge_sp->role.level; in shadow_mmu_try_split_huge_page()
6283 if (WARN_ON_ONCE(!sp->role.guest_mode)) in shadow_mmu_try_split_huge_pages()
6295 if (sp->role.invalid) in shadow_mmu_try_split_huge_pages()
6405 if (sp->role.direct && in kvm_mmu_zap_collapsible_spte()
6406 sp->role.level < kvm_mmu_max_mapping_level(kvm, slot, sp->gfn, in kvm_mmu_zap_collapsible_spte()
6412 KVM_PAGES_PER_HPAGE(sp->role.level)); in kvm_mmu_zap_collapsible_spte()
6504 if (WARN_ON(sp->role.invalid)) in kvm_mmu_zap_all()