Lines Matching refs:gmfn
106 get_shadow_status(struct domain *d, mfn_t gmfn, u32 shadow_type) in get_shadow_status() argument
109 mfn_t smfn = shadow_hash_lookup(d, mfn_x(gmfn), shadow_type); in get_shadow_status()
127 set_shadow_status(struct domain *d, mfn_t gmfn, u32 shadow_type, mfn_t smfn) in set_shadow_status() argument
133 d->domain_id, mfn_x(gmfn), shadow_type, mfn_x(smfn)); in set_shadow_status()
140 res = get_page(mfn_to_page(gmfn), d); in set_shadow_status()
144 shadow_hash_insert(d, mfn_x(gmfn), shadow_type, smfn); in set_shadow_status()
158 delete_shadow_status(struct domain *d, mfn_t gmfn, u32 shadow_type, mfn_t smfn) in delete_shadow_status() argument
162 d->domain_id, mfn_x(gmfn), shadow_type, mfn_x(smfn)); in delete_shadow_status()
164 shadow_hash_delete(d, mfn_x(gmfn), shadow_type, smfn); in delete_shadow_status()
167 put_page(mfn_to_page(gmfn)); in delete_shadow_status()
374 sh_write_guest_entry(struct vcpu *v, intpte_t *p, intpte_t new, mfn_t gmfn) in sh_write_guest_entry() argument
382 sh_validate_guest_entry(v, gmfn, p, sizeof(new)); in sh_write_guest_entry()
399 intpte_t new, mfn_t gmfn) in sh_cmpxchg_guest_entry() argument
408 sh_validate_guest_entry(v, gmfn, p, sizeof(new)); in sh_cmpxchg_guest_entry()
788 mfn_t gmfn, in l1e_propagate_from_guest() argument
793 if ( !mfn_eq(gmfn, INVALID_MFN) && in l1e_propagate_from_guest()
797 _sh_propagate(v, gl1e.l1, gmfn, sl1e, 1, ft, p2mt); in l1e_propagate_from_guest()
1456 sh_make_shadow(struct vcpu *v, mfn_t gmfn, u32 shadow_type) in sh_make_shadow() argument
1459 mfn_t smfn = shadow_alloc(d, shadow_type, mfn_x(gmfn)); in sh_make_shadow()
1461 mfn_x(gmfn), shadow_type, mfn_x(smfn)); in sh_make_shadow()
1515 init_xen_l4_slots(l4t, gmfn, d, smfn, (!is_pv_32bit_domain(d) && in sh_make_shadow()
1537 shadow_promote(d, gmfn, shadow_type); in sh_make_shadow()
1538 set_shadow_status(d, gmfn, shadow_type, smfn); in sh_make_shadow()
1877 mfn_t gmfn, sl4mfn; in sh_destroy_l4_shadow() local
1884 gmfn = backpointer(sp); in sh_destroy_l4_shadow()
1885 delete_shadow_status(d, gmfn, t, smfn); in sh_destroy_l4_shadow()
1886 shadow_demote(d, gmfn, t); in sh_destroy_l4_shadow()
1907 mfn_t gmfn, sl3mfn; in sh_destroy_l3_shadow() local
1914 gmfn = backpointer(sp); in sh_destroy_l3_shadow()
1915 delete_shadow_status(d, gmfn, t, smfn); in sh_destroy_l3_shadow()
1916 shadow_demote(d, gmfn, t); in sh_destroy_l3_shadow()
1938 mfn_t gmfn, sl2mfn; in sh_destroy_l2_shadow() local
1950 gmfn = backpointer(sp); in sh_destroy_l2_shadow()
1951 delete_shadow_status(d, gmfn, t, smfn); in sh_destroy_l2_shadow()
1952 shadow_demote(d, gmfn, t); in sh_destroy_l2_shadow()
1985 mfn_t gmfn = backpointer(sp); in sh_destroy_l1_shadow() local
1986 delete_shadow_status(d, gmfn, t, smfn); in sh_destroy_l1_shadow()
1987 shadow_demote(d, gmfn, t); in sh_destroy_l1_shadow()
2257 mfn_t gmfn = INVALID_MFN; in validate_gl1e() local
2270 gmfn = get_gfn_query_unlocked(d, gfn_x(gfn), &p2mt); in validate_gl1e()
2273 l1e_propagate_from_guest(v, new_gl1e, gmfn, &new_sl1e, ft_prefetch, p2mt); in validate_gl1e()
2327 mfn_t gmfn = INVALID_MFN; in sh_resync_l1()
2335 gmfn = get_gfn_query_unlocked(d, gfn_x(gfn), &p2mt); in sh_resync_l1()
2338 l1e_propagate_from_guest(v, gl1e, gmfn, &nsl1e, ft_prefetch, p2mt); in sh_resync_l1()
2416 sh_map_and_validate(struct vcpu *v, mfn_t gmfn, in sh_map_and_validate() argument
2436 smfn = get_shadow_status(d, gmfn, sh_type); in sh_map_and_validate()
2547 static inline void check_for_early_unshadow(struct vcpu *v, mfn_t gmfn) in check_for_early_unshadow() argument
2559 && v->arch.paging.shadow.last_emulated_mfn_for_unshadow == mfn_x(gmfn) ) ) in check_for_early_unshadow()
2560 && sh_mfn_is_a_page_table(gmfn) in check_for_early_unshadow()
2562 !(mfn_to_page(gmfn)->shadow_flags in check_for_early_unshadow()
2566 sh_remove_shadows(d, gmfn, 1, 0 /* Fast, can fail to unshadow */ ); in check_for_early_unshadow()
2569 v->arch.paging.shadow.last_emulated_mfn_for_unshadow = mfn_x(gmfn); in check_for_early_unshadow()
2600 mfn_t gmfn; in sh_prefetch() local
2667 gmfn = get_gfn_query_unlocked(d, gfn_x(gfn), &p2mt); in sh_prefetch()
2671 gmfn = INVALID_MFN; in sh_prefetch()
2676 l1e_propagate_from_guest(v, gl1e, gmfn, &sl1e, ft_prefetch, p2mt); in sh_prefetch()
2836 mfn_t gmfn, sl1mfn = _mfn(0); in sh_page_fault() local
2877 gmfn = _mfn(v->arch.paging.shadow.last_emulated_mfn); in sh_page_fault()
2882 if ( mfn_valid(gmfn) && mfn_is_out_of_sync(gmfn) ) in sh_page_fault()
3091 gmfn = get_gfn(d, gfn, &p2mt); in sh_page_fault()
3095 (!p2m_is_mmio(p2mt) && !mfn_valid(gmfn))) ) in sh_page_fault()
3099 gfn_x(gfn), mfn_x(gmfn)); in sh_page_fault()
3190 if ( sh_mfn_is_a_page_table(gmfn) in sh_page_fault()
3192 sh_unsync(v, gmfn); in sh_page_fault()
3217 l1e_propagate_from_guest(v, gw.l1e, gmfn, &sl1e, ft, p2mt); in sh_page_fault()
3242 if ( sh_mfn_is_a_page_table(gmfn) in sh_page_fault()
3246 && !(mfn_is_out_of_sync(gmfn) in sh_page_fault()
3269 va & PAGE_MASK, mfn_x(gmfn)); in sh_page_fault()
3281 && mfn_valid(gmfn) ) in sh_page_fault()
3312 mfn_x(gmfn)); in sh_page_fault()
3314 sh_remove_shadows(d, gmfn, 0 /* thorough */, 1 /* must succeed */); in sh_page_fault()
3328 if ( sh_mfn_is_a_page_table(gmfn) in sh_page_fault()
3329 && (mfn_to_page(gmfn)->shadow_flags & SHF_pagetable_dying) ) in sh_page_fault()
3343 used |= (mfn_to_page(smfn)->v.sh.back == mfn_x(gmfn)); in sh_page_fault()
3350 used = mfn_eq(pagetable_get_mfn(tmp->arch.guest_table), gmfn); in sh_page_fault()
3357 sh_remove_shadows(d, gmfn, 1 /* fast */, 0 /* can fail */); in sh_page_fault()
3394 va, mfn_x(gmfn)); in sh_page_fault()
3395 sh_remove_shadows(d, gmfn, 0 /* thorough */, 1 /* must succeed */); in sh_page_fault()
3448 r, mfn_x(gmfn)); in sh_page_fault()
3452 shadow_remove_all_shadows(d, gmfn); in sh_page_fault()
3468 if ( (r == X86EMUL_OKAY) && sh_mfn_is_a_page_table(gmfn) ) in sh_page_fault()
3473 v->arch.paging.shadow.last_emulated_mfn = mfn_x(gmfn); in sh_page_fault()
3931 mfn_t gmfn, in sh_set_toplevel_shadow() argument
3943 if ( !mfn_valid(gmfn) ) in sh_set_toplevel_shadow()
3950 smfn = get_shadow_status(d, gmfn, root_type); in sh_set_toplevel_shadow()
3956 smfn = sh_make_shadow(v, gmfn, root_type); in sh_set_toplevel_shadow()
3982 mfn_x(gmfn), mfn_x(pagetable_get_mfn(new_entry))); in sh_set_toplevel_shadow()
4015 mfn_t gmfn; in sh_update_cr3() local
4063 gmfn = pagetable_get_mfn(v->arch.guest_table_user); in sh_update_cr3()
4066 gmfn = pagetable_get_mfn(v->arch.guest_table); in sh_update_cr3()
4077 v->arch.paging.shadow.guest_vtable = map_domain_page_global(gmfn); in sh_update_cr3()
4101 gl3e = ((guest_l3e_t *)map_domain_page(gmfn)) + guest_idx; in sh_update_cr3()
4110 v->arch.paging.shadow.guest_vtable = map_domain_page_global(gmfn); in sh_update_cr3()
4130 if ( sh_remove_write_access(d, gmfn, 2, 0) != 0 ) in sh_update_cr3()
4132 sh_set_toplevel_shadow(v, 0, gmfn, SH_type_l2_shadow); in sh_update_cr3()
4174 if ( sh_remove_write_access(d, gmfn, 4, 0) != 0 ) in sh_update_cr3()
4176 sh_set_toplevel_shadow(v, 0, gmfn, SH_type_l4_shadow); in sh_update_cr3()
4289 int sh_rm_write_access_from_sl1p(struct domain *d, mfn_t gmfn, in sh_rm_write_access_from_sl1p() argument
4297 ASSERT(mfn_valid(gmfn)); in sh_rm_write_access_from_sl1p()
4303 = !!(mfn_to_page(gmfn)->shadow_flags & SHF_pagetable_dying); in sh_rm_write_access_from_sl1p()
4317 || (mfn_x(shadow_l1e_get_mfn(sl1e)) != mfn_x(gmfn)) ) in sh_rm_write_access_from_sl1p()
4339 static int sh_guess_wrmap(struct vcpu *v, unsigned long vaddr, mfn_t gmfn) in sh_guess_wrmap() argument
4386 || (mfn_x(shadow_l1e_get_mfn(sl1e)) != mfn_x(gmfn)) ) in sh_guess_wrmap()
4601 mfn_t smfn, gmfn; in sh_pagetable_dying() local
4612 gmfn = get_gfn_query_unlocked(d, gfn_x(guest_l3e_get_gfn(gl3e[i])), in sh_pagetable_dying()
4614 smfn = unlikely(mfn_eq(gmfn, INVALID_MFN)) in sh_pagetable_dying()
4616 : shadow_hash_lookup(d, mfn_x(gmfn), SH_type_l2_pae_shadow); in sh_pagetable_dying()
4621 gmfn = _mfn(mfn_to_page(smfn)->v.sh.back); in sh_pagetable_dying()
4622 mfn_to_page(gmfn)->shadow_flags |= SHF_pagetable_dying; in sh_pagetable_dying()
4647 mfn_t smfn, gmfn; in sh_pagetable_dying() local
4650 gmfn = get_gfn_query(d, _gfn(gpa >> PAGE_SHIFT), &p2mt); in sh_pagetable_dying()
4654 smfn = shadow_hash_lookup(d, mfn_x(gmfn), SH_type_l2_32_shadow); in sh_pagetable_dying()
4656 smfn = shadow_hash_lookup(d, mfn_x(gmfn), SH_type_l4_64_shadow); in sh_pagetable_dying()
4661 mfn_to_page(gmfn)->shadow_flags |= SHF_pagetable_dying; in sh_pagetable_dying()
4852 mfn_t mfn, gmfn, gl1mfn; in sh_audit_l1_table() local
4904 gmfn = get_gfn_query_unlocked(v->domain, gfn_x(gfn), &p2mt); in sh_audit_l1_table()
4905 if ( !p2m_is_grant(p2mt) && mfn_x(gmfn) != mfn_x(mfn) ) in sh_audit_l1_table()
4908 gfn_x(gfn), mfn_x(gmfn), mfn_x(mfn)); in sh_audit_l1_table()
4947 mfn_t mfn, gmfn, gl2mfn; in sh_audit_l2_table() local
4974 gmfn = (guest_l2e_get_flags(*gl2e) & _PAGE_PSE) in sh_audit_l2_table()
4979 if ( mfn_x(gmfn) != mfn_x(mfn) ) in sh_audit_l2_table()
4986 gfn_x(gfn), &p2mt)), mfn_x(gmfn), mfn_x(mfn)); in sh_audit_l2_table()
4999 mfn_t mfn, gmfn, gl3mfn; in sh_audit_l3_table() local
5026 gmfn = get_shadow_status(d, get_gfn_query_unlocked( in sh_audit_l3_table()
5034 if ( mfn_x(gmfn) != mfn_x(mfn) ) in sh_audit_l3_table()
5037 gfn_x(gfn), mfn_x(gmfn), mfn_x(mfn)); in sh_audit_l3_table()
5049 mfn_t mfn, gmfn, gl4mfn; in sh_audit_l4_table() local
5076 gmfn = get_shadow_status(d, get_gfn_query_unlocked( in sh_audit_l4_table()
5079 if ( mfn_x(gmfn) != mfn_x(mfn) ) in sh_audit_l4_table()
5082 gfn_x(gfn), mfn_x(gmfn), mfn_x(mfn)); in sh_audit_l4_table()