[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 16/20] x86/shadow: Alter sh_rm_write_access_from_???() to take a domain
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CC: Jan Beulich <JBeulich@xxxxxxxx> CC: Tim Deegan <tim@xxxxxxx> --- xen/arch/x86/mm/shadow/common.c | 19 ++++++++++--------- xen/arch/x86/mm/shadow/multi.c | 6 ++---- xen/arch/x86/mm/shadow/multi.h | 4 ++-- xen/arch/x86/mm/shadow/private.h | 2 +- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index 4a9b94b..e10b578 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -587,12 +587,13 @@ static inline void _sh_resync_l1(struct vcpu *v, mfn_t gmfn, mfn_t snpmfn) static inline int oos_fixup_flush_gmfn(struct vcpu *v, mfn_t gmfn, struct oos_fixup *fixup) { + struct domain *d = v->domain; int i; for ( i = 0; i < SHADOW_OOS_FIXUPS; i++ ) { if ( mfn_x(fixup->smfn[i]) != INVALID_MFN ) { - sh_remove_write_access_from_sl1p(v, gmfn, + sh_remove_write_access_from_sl1p(d, gmfn, fixup->smfn[i], fixup->off[i]); fixup->smfn[i] = _mfn(INVALID_MFN); @@ -638,7 +639,7 @@ void oos_fixup_add(struct domain *d, mfn_t gmfn, TRACE_SHADOW_PATH_FLAG(TRCE_SFLAG_OOS_FIXUP_EVICT); /* Reuse this slot and remove current writable mapping. */ - sh_remove_write_access_from_sl1p(v, gmfn, + sh_remove_write_access_from_sl1p(d, gmfn, oos_fixup[idx].smfn[next], oos_fixup[idx].off[next]); perfc_incr(shadow_oos_fixup_evict); @@ -2184,7 +2185,7 @@ int sh_remove_write_access(struct vcpu *v, mfn_t gmfn, unsigned long fault_addr) { /* Dispatch table for getting per-type functions */ - static const hash_vcpu_callback_t callbacks[SH_type_unused] = { + static const hash_domain_callback_t callbacks[SH_type_unused] = { NULL, /* none */ SHADOW_INTERNAL_NAME(sh_rm_write_access_from_l1, 2), /* l1_32 */ SHADOW_INTERNAL_NAME(sh_rm_write_access_from_l1, 2), /* fl1_32 */ @@ -2367,7 +2368,7 @@ int sh_remove_write_access(struct vcpu *v, mfn_t gmfn, int shtype = mfn_to_page(last_smfn)->u.sh.type; if ( callbacks[shtype] ) - callbacks[shtype](curr, last_smfn, gmfn); + callbacks[shtype](d, last_smfn, gmfn); if ( (pg->u.inuse.type_info & PGT_count_mask) != old_count ) perfc_incr(shadow_writeable_h_5); @@ -2384,7 +2385,7 @@ int sh_remove_write_access(struct vcpu *v, mfn_t gmfn, perfc_incr(shadow_writeable_bf_1); else perfc_incr(shadow_writeable_bf); - hash_vcpu_foreach(v, callback_mask, callbacks, gmfn); + hash_domain_foreach(d, callback_mask, callbacks, gmfn); /* If that didn't catch the mapping, then there's some non-pagetable * mapping -- ioreq page, grant mapping, &c. */ @@ -2404,7 +2405,7 @@ int sh_remove_write_access(struct vcpu *v, mfn_t gmfn, } #if (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC) -int sh_remove_write_access_from_sl1p(struct vcpu *v, mfn_t gmfn, +int sh_remove_write_access_from_sl1p(struct domain *d, mfn_t gmfn, mfn_t smfn, unsigned long off) { struct page_info *sp = mfn_to_page(smfn); @@ -2416,16 +2417,16 @@ int sh_remove_write_access_from_sl1p(struct vcpu *v, mfn_t gmfn, || sp->u.sh.type == SH_type_fl1_32_shadow ) { return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p,2) - (v, gmfn, smfn, off); + (d, gmfn, smfn, off); } else if ( sp->u.sh.type == SH_type_l1_pae_shadow || sp->u.sh.type == SH_type_fl1_pae_shadow ) return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p,3) - (v, gmfn, smfn, off); + (d, gmfn, smfn, off); else if ( sp->u.sh.type == SH_type_l1_64_shadow || sp->u.sh.type == SH_type_fl1_64_shadow ) return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p,4) - (v, gmfn, smfn, off); + (d, gmfn, smfn, off); return 0; } diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index 79d8888..0d1021b 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -4177,10 +4177,9 @@ sh_update_cr3(struct vcpu *v, int do_locking) /* Functions to revoke guest rights */ #if SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC -int sh_rm_write_access_from_sl1p(struct vcpu *v, mfn_t gmfn, +int sh_rm_write_access_from_sl1p(struct domain *d, mfn_t gmfn, mfn_t smfn, unsigned long off) { - struct domain *d = v->domain; struct vcpu *curr = current; int r; shadow_l1e_t *sl1p, sl1e; @@ -4280,11 +4279,10 @@ static int sh_guess_wrmap(struct vcpu *v, unsigned long vaddr, mfn_t gmfn) } #endif -int sh_rm_write_access_from_l1(struct vcpu *v, mfn_t sl1mfn, +int sh_rm_write_access_from_l1(struct domain *d, mfn_t sl1mfn, mfn_t readonly_mfn) /* Excises all writeable mappings to readonly_mfn from this l1 shadow table */ { - struct domain *d = v->domain; shadow_l1e_t *sl1e; int done = 0; int flags; diff --git a/xen/arch/x86/mm/shadow/multi.h b/xen/arch/x86/mm/shadow/multi.h index 07dffac..1af9225 100644 --- a/xen/arch/x86/mm/shadow/multi.h +++ b/xen/arch/x86/mm/shadow/multi.h @@ -62,7 +62,7 @@ SHADOW_INTERNAL_NAME(sh_unhook_64b_mappings, GUEST_LEVELS) extern int SHADOW_INTERNAL_NAME(sh_rm_write_access_from_l1, GUEST_LEVELS) - (struct vcpu *v, mfn_t sl1mfn, mfn_t readonly_mfn); + (struct domain *d, mfn_t sl1mfn, mfn_t readonly_mfn); extern int SHADOW_INTERNAL_NAME(sh_rm_mappings_from_l1, GUEST_LEVELS) (struct vcpu *v, mfn_t sl1mfn, mfn_t target_mfn); @@ -127,5 +127,5 @@ SHADOW_INTERNAL_NAME(sh_safe_not_to_sync, GUEST_LEVELS) extern int SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p, GUEST_LEVELS) - (struct vcpu *v, mfn_t gmfn, mfn_t smfn, unsigned long off); + (struct domain *d, mfn_t gmfn, mfn_t smfn, unsigned long off); #endif diff --git a/xen/arch/x86/mm/shadow/private.h b/xen/arch/x86/mm/shadow/private.h index 14f5d45..96b53b9 100644 --- a/xen/arch/x86/mm/shadow/private.h +++ b/xen/arch/x86/mm/shadow/private.h @@ -405,7 +405,7 @@ void sh_resync(struct domain *d, mfn_t gmfn); void oos_fixup_add(struct domain *d, mfn_t gmfn, mfn_t smfn, unsigned long off); -int sh_remove_write_access_from_sl1p(struct vcpu *v, mfn_t gmfn, +int sh_remove_write_access_from_sl1p(struct domain *d, mfn_t gmfn, mfn_t smfn, unsigned long offset); /* Pull all out-of-sync shadows back into sync. If skip != 0, we try -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |