[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/np2m: refactor p2m_get_nestedp2m_locked()
commit cf23c69fdd48e27b09e79e0404b6fc8dcbcdcd70 Author: Sergey Dyasli <sergey.dyasli@xxxxxxxxxx> AuthorDate: Tue Oct 3 16:21:03 2017 +0100 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Fri Oct 6 13:36:43 2017 +0100 x86/np2m: refactor p2m_get_nestedp2m_locked() Remove some code duplication. Suggested-by: George Dunlap <george.dunlap@xxxxxxxxxx> Signed-off-by: Sergey Dyasli <sergey.dyasli@xxxxxxxxxx> Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx> Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: Jun Nakajima <jun.nakajima@xxxxxxxxx> --- xen/arch/x86/mm/p2m.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index 0d47a13..05a6a7d 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -1847,6 +1847,7 @@ p2m_get_nestedp2m_locked(struct vcpu *v) struct p2m_domain *p2m; uint64_t np2m_base = nhvm_vcpu_p2m_base(v); unsigned int i; + bool needs_flush = true; /* Mask out low bits; this avoids collisions with P2M_BASE_EADDR */ np2m_base &= ~(0xfffull); @@ -1863,14 +1864,10 @@ p2m_get_nestedp2m_locked(struct vcpu *v) if ( p2m->np2m_base == np2m_base ) { /* Check if np2m was flushed just before the lock */ - if ( nv->np2m_generation != p2m->np2m_generation ) - nvcpu_flush(v); + if ( nv->np2m_generation == p2m->np2m_generation ) + needs_flush = false; /* np2m is up-to-date */ - p2m->np2m_base = np2m_base; - assign_np2m(v, p2m); - nestedp2m_unlock(d); - - return p2m; + goto found; } else if ( p2m->np2m_base != P2M_BASE_EADDR ) { @@ -1885,15 +1882,10 @@ p2m_get_nestedp2m_locked(struct vcpu *v) { p2m = d->arch.nested_p2m[i]; p2m_lock(p2m); + if ( p2m->np2m_base == np2m_base ) - { - nvcpu_flush(v); - p2m->np2m_base = np2m_base; - assign_np2m(v, p2m); - nestedp2m_unlock(d); + goto found; - return p2m; - } p2m_unlock(p2m); } @@ -1902,8 +1894,11 @@ p2m_get_nestedp2m_locked(struct vcpu *v) p2m = p2m_getlru_nestedp2m(d, NULL); p2m_flush_table(p2m); p2m_lock(p2m); + + found: + if ( needs_flush ) + nvcpu_flush(v); p2m->np2m_base = np2m_base; - nvcpu_flush(v); assign_np2m(v, p2m); nestedp2m_unlock(d); -- 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 |