mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
xen/arm: correct flush_tlb_mask behaviour
On ARM, flush_tlb_mask is used in the common code:
- alloc_heap_pages: the flush is only be called if the new allocated
page was used by a domain before. So we need to flush only TLB non-secure
non-hyp inner-shareable.
- common/grant-table.c: every calls to flush_tlb_mask are used with
the current domain. A flush TLB by current VMID inner-shareable is enough.
The current code only flush hypervisor TLB on the current PCPU. For now,
flush TLBs non-secure non-hyp on every PCPUs.
Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
This commit is contained in:
1 parent
9b2691bdb4
commit
8a9ab685be
3 files changed
+24
-1
No files matched your search
+2
-1
@@ -4,11 +4,12 @@
|
||||
#include <asm/cpregs.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/gic.h>
|
||||
#include <asm/flushtlb.h>
|
||||
|
||||
void flush_tlb_mask(const cpumask_t *mask)
|
||||
{
|
||||
/* No need to IPI other processors on ARM, the processor takes care of it. */
|
||||
flush_xen_data_tlb();
|
||||
flush_tlb_all();
|
||||
}
|
||||
|
||||
void smp_send_event_check_mask(const cpumask_t *mask)
|
||||
|
||||
@@ -34,6 +34,17 @@ static inline void flush_tlb_all_local(void)
|
||||
isb();
|
||||
}
|
||||
|
||||
/* Flush innershareable TLBs, all VMIDs, non-hypervisor mode */
|
||||
static inline void flush_tlb_all(void)
|
||||
{
|
||||
dsb();
|
||||
|
||||
WRITE_CP32((uint32_t) 0, TLBIALLNSNHIS);
|
||||
|
||||
dsb();
|
||||
isb();
|
||||
}
|
||||
|
||||
#endif /* __ASM_ARM_ARM32_FLUSHTLB_H__ */
|
||||
/*
|
||||
* Local variables:
|
||||
|
||||
@@ -34,6 +34,17 @@ static inline void flush_tlb_all_local(void)
|
||||
: : : "memory");
|
||||
}
|
||||
|
||||
/* Flush innershareable TLBs, all VMIDs, non-hypervisor mode */
|
||||
static inline void flush_tlb_all(void)
|
||||
{
|
||||
asm volatile(
|
||||
"dsb sy;"
|
||||
"tlbi alle1is;"
|
||||
"dsb sy;"
|
||||
"isb;"
|
||||
: : : "memory");
|
||||
}
|
||||
|
||||
#endif /* __ASM_ARM_ARM64_FLUSHTLB_H__ */
|
||||
/*
|
||||
* Local variables:
|
||||
|
||||