From: Julien Grall <julien.grall@linaro.org>
To: xen-devel@lists.xenproject.org
Cc: stefano.stabellini@eu.citrix.com, tim@xen.org,
ian.campbell@citrix.com, Julien Grall <julien.grall@linaro.org>,
patches@linaro.org
Subject: [PATCH] xen/arm: p2m: flush TLB by VMID when a new domain is creating
Date: Thu, 14 Nov 2013 17:00:34 +0000 [thread overview]
Message-ID: <1384448434-23183-1-git-send-email-julien.grall@linaro.org> (raw)
Once the VMID is marked unused, a new domain can reuse the VMID for its
own. If the TLB is not flushed, entries can contain wrong translation.
When a new p2m is allocated, switch to the new VMID and flush TLB on
every physical CPUs.
Signed-off-by: Julien Grall <julien.grall@linaro.org>
---
Changes in v2:
- This patch was formerly "xen/arm: p2m: flush TLB when a domain
is destroyed
- Flush TLB by VMID in p2m_alloc_table. It will avoid to flush
all TLBs every domain destruction.
---
xen/arch/arm/p2m.c | 10 ++++++++++
xen/include/asm-arm/arm32/flushtlb.h | 11 +++++++++++
xen/include/asm-arm/arm64/flushtlb.h | 11 +++++++++++
3 files changed, 32 insertions(+)
diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c
index 2d09fef..82dda65 100644
--- a/xen/arch/arm/p2m.c
+++ b/xen/arch/arm/p2m.c
@@ -302,6 +302,15 @@ int p2m_alloc_table(struct domain *d)
d->arch.vttbr = page_to_maddr(p2m->first_level)
| ((uint64_t)p2m->vmid&0xff)<<48;
+ p2m_load_VTTBR(d);
+
+ /* Make sure that all TLBs corresponding to the new VMID are flushed
+ * before using it
+ */
+ flush_tlb();
+
+ p2m_load_VTTBR(current->domain);
+
spin_unlock(&p2m->lock);
return 0;
@@ -357,6 +366,7 @@ static void p2m_free_vmid(struct domain *d)
spin_lock(&vmid_alloc_lock);
if ( p2m->vmid != INVALID_VMID )
clear_bit(p2m->vmid, vmid_mask);
+
spin_unlock(&vmid_alloc_lock);
}
diff --git a/xen/include/asm-arm/arm32/flushtlb.h b/xen/include/asm-arm/arm32/flushtlb.h
index a258f58..ab166f3 100644
--- a/xen/include/asm-arm/arm32/flushtlb.h
+++ b/xen/include/asm-arm/arm32/flushtlb.h
@@ -12,6 +12,17 @@ static inline void flush_tlb_local(void)
isb();
}
+/* Flush inner shareable TLBs, current VMID only */
+static inline void flush_tlb(void)
+{
+ dsb();
+
+ WRITE_CP32((uint32_t) 0, TLBIALLIS);
+
+ dsb();
+ isb();
+}
+
/* Flush local TLBs, all VMIDs, non-hypervisor mode */
static inline void flush_tlb_all_local(void)
{
diff --git a/xen/include/asm-arm/arm64/flushtlb.h b/xen/include/asm-arm/arm64/flushtlb.h
index d0535a0..9ce79a8 100644
--- a/xen/include/asm-arm/arm64/flushtlb.h
+++ b/xen/include/asm-arm/arm64/flushtlb.h
@@ -12,6 +12,17 @@ static inline void flush_tlb_local(void)
: : : "memory");
}
+/* Flush innershareable TLBs, current VMID only */
+static inline void flush_tlb(void)
+{
+ asm volatile(
+ "dsb sy;"
+ "tlbi vmalle1is;"
+ "dsb sy;"
+ "isb;"
+ : : : "memory");
+}
+
/* Flush local TLBs, all VMIDs, non-hypervisor mode */
static inline void flush_tlb_all_local(void)
{
--
1.8.3.1
next reply other threads:[~2013-11-14 17:00 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-14 17:00 Julien Grall [this message]
2013-11-14 18:10 ` [PATCH] xen/arm: p2m: flush TLB by VMID when a new domain is creating Stefano Stabellini
2013-11-14 20:35 ` Julien Grall
2013-11-14 20:41 ` Stefano Stabellini
2013-11-19 14:54 ` Ian Campbell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1384448434-23183-1-git-send-email-julien.grall@linaro.org \
--to=julien.grall@linaro.org \
--cc=ian.campbell@citrix.com \
--cc=patches@linaro.org \
--cc=stefano.stabellini@eu.citrix.com \
--cc=tim@xen.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).