|
[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 |