mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/arm: move the tlb_flush in create_p2m_entries to the end of the function
Move the flush after the pagetable entry has actually been written to avoid races with other vcpus refreshing the same entriy. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com>
This commit is contained in:
1 parent
b4aae03ce5
commit
11d8866da5
1 file changed
+5
-4
+5
-4
@@ -133,7 +133,7 @@ static int create_p2m_entries(struct domain *d,
|
||||
paddr_t maddr,
|
||||
int mattr)
|
||||
{
|
||||
int rc;
|
||||
int rc, flush;
|
||||
struct p2m_domain *p2m = &d->arch.p2m;
|
||||
lpae_t *first = NULL, *second = NULL, *third = NULL;
|
||||
paddr_t addr;
|
||||
@@ -186,10 +186,8 @@ static int create_p2m_entries(struct domain *d,
|
||||
third = map_domain_page(second[second_table_offset(addr)].p2m.base);
|
||||
cur_second_offset = second_table_offset(addr);
|
||||
}
|
||||
/* else: third already valid */
|
||||
|
||||
if ( third[third_table_offset(addr)].p2m.valid )
|
||||
flush_tlb_all_local();
|
||||
flush = third[third_table_offset(addr)].p2m.valid;
|
||||
|
||||
/* Allocate a new RAM page and attach */
|
||||
switch (op) {
|
||||
@@ -226,6 +224,9 @@ static int create_p2m_entries(struct domain *d,
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if ( flush )
|
||||
flush_tlb_all_local();
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
|
||||