[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] xen/x86/shadow: adjust barriers around gtable_dirty_version.
commit 82d510c88dc12c8aa31aa97bab633b922737bdf4 Author: Tim Deegan <tim@xxxxxxx> AuthorDate: Fri Aug 18 15:23:44 2017 +0100 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Fri Aug 18 19:29:47 2017 +0100 xen/x86/shadow: adjust barriers around gtable_dirty_version. Use the smp_ variants, as we're only synchronizing against other CPUs. Add a write barrier before incrementing the version. x86's memory ordering rules and the presence of various out-of-unit function calls mean that this code worked OK before, and the barriers are mostly decorative. Signed-off-by: Tim Deegan <tim@xxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/mm/shadow/multi.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index c9c2252..f8a8928 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -206,6 +206,7 @@ shadow_check_gwalk(struct vcpu *v, unsigned long va, walk_t *gw, int version) ASSERT(paging_locked_by_me(d)); + /* No need for smp_rmb() here; taking the paging lock was enough. */ if ( version == atomic_read(&d->arch.paging.shadow.gtable_dirty_version) ) return 1; @@ -3112,7 +3113,7 @@ static int sh_page_fault(struct vcpu *v, * will make sure no inconsistent mapping being translated into * shadow page table. */ version = atomic_read(&d->arch.paging.shadow.gtable_dirty_version); - rmb(); + smp_rmb(); walk_ok = sh_walk_guest_tables(v, va, &gw, error_code); #if (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC) @@ -3188,6 +3189,7 @@ static int sh_page_fault(struct vcpu *v, * overlapping with this one may be inconsistent */ perfc_incr(shadow_rm_write_flush_tlb); + smp_wmb(); atomic_inc(&d->arch.paging.shadow.gtable_dirty_version); flush_tlb_mask(d->domain_dirty_cpumask); } -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |