From: Julien Grall <julien.grall@linaro.org>
To: xen-devel@lists.xen.org
Cc: patches@linaro.org, tim@xen.org, ian.campbell@citrix.com,
Julien Grall <julien.grall@linaro.org>,
Stefano.Stabellini@eu.citrix.com
Subject: [PATCH] xen/arm: Trap the ACTLR register
Date: Thu, 4 Jul 2013 16:01:06 +0100 [thread overview]
Message-ID: <1372950066-14379-1-git-send-email-julien.grall@linaro.org> (raw)
On Cortex-A15 ACTLR is used to set the SMP bit. If the guest has the control on
this register, it can disable SMP support and so TLB broadcast.
Implement the access to ACTRL as read-only register with SMP bit set to one
if the guest has multiple VCPUs.
Signed-off-by: Julien Grall <julien.grall@linaro.org>
---
xen/arch/arm/domain.c | 9 +++++++--
xen/arch/arm/traps.c | 8 +++++++-
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
index f465ab7..6937abf 100644
--- a/xen/arch/arm/domain.c
+++ b/xen/arch/arm/domain.c
@@ -28,6 +28,7 @@
#include <asm/irq.h>
#include <asm/cpufeature.h>
#include <asm/vfp.h>
+#include <asm/processor-ca15.h>
#include <asm/gic.h>
#include "vtimer.h"
@@ -61,7 +62,6 @@ static void ctxt_switch_from(struct vcpu *p)
p->arch.csselr = READ_SYSREG(CSSELR_EL1);
/* Control Registers */
- p->arch.actlr = READ_SYSREG(ACTLR_EL1);
p->arch.sctlr = READ_SYSREG(SCTLR_EL1);
p->arch.cpacr = READ_SYSREG(CPACR_EL1);
@@ -182,7 +182,6 @@ static void ctxt_switch_to(struct vcpu *n)
isb();
/* Control Registers */
- WRITE_SYSREG(n->arch.actlr, ACTLR_EL1);
WRITE_SYSREG(n->arch.sctlr, SCTLR_EL1);
WRITE_SYSREG(n->arch.cpacr, CPACR_EL1);
@@ -452,6 +451,12 @@ int vcpu_initialise(struct vcpu *v)
return rc;
v->arch.sctlr = SCTLR_BASE;
+ v->arch.actlr = READ_SYSREG32(ACTLR_EL1);
+ /* XXX: Handle other than CA15 cpus */
+ if ( v->domain->max_vcpus > 1 )
+ v->arch.actlr |= ACTLR_CA15_SMP;
+ else
+ v->arch.actlr &= ~ACTLR_CA15_SMP;
if ( (rc = vcpu_vgic_init(v)) != 0 )
return rc;
diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
index 398d209..bbd60aa 100644
--- a/xen/arch/arm/traps.c
+++ b/xen/arch/arm/traps.c
@@ -62,7 +62,8 @@ void __cpuinit init_traps(void)
WRITE_SYSREG((vaddr_t)hyp_traps_vector, VBAR_EL2);
/* Setup hypervisor traps */
- WRITE_SYSREG(HCR_PTW|HCR_BSU_OUTER|HCR_AMO|HCR_IMO|HCR_VM|HCR_TWI|HCR_TSC, HCR_EL2);
+ WRITE_SYSREG(HCR_PTW|HCR_BSU_OUTER|HCR_AMO|HCR_IMO|HCR_VM|HCR_TWI|HCR_TSC|
+ HCR_TAC, HCR_EL2);
isb();
}
@@ -836,6 +837,7 @@ static void do_cp15_32(struct cpu_user_regs *regs,
{
struct hsr_cp32 cp32 = hsr.cp32;
uint32_t *r = (uint32_t*)select_user_reg(regs, cp32.reg);
+ struct vcpu *v = current;
if ( !cp32.ccvalid ) {
dprintk(XENLOG_ERR, "cp_15(32): need to handle invalid condition codes\n");
@@ -889,6 +891,10 @@ static void do_cp15_32(struct cpu_user_regs *regs,
domain_crash_synchronous();
}
break;
+ case HSR_CPREG32(ACTLR):
+ if ( cp32.read )
+ *r = v->arch.actlr;
+ break;
default:
printk("%s p15, %d, r%d, cr%d, cr%d, %d @ 0x%"PRIregister"\n",
cp32.read ? "mrc" : "mcr",
--
1.7.10.4
next reply other threads:[~2013-07-04 15:01 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-04 15:01 Julien Grall [this message]
2013-07-17 9:47 ` [PATCH] xen/arm: Trap the ACTLR register Ian Campbell
2013-07-17 13:57 ` Stefano Stabellini
2013-07-17 16:33 ` 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=1372950066-14379-1-git-send-email-julien.grall@linaro.org \
--to=julien.grall@linaro.org \
--cc=Stefano.Stabellini@eu.citrix.com \
--cc=ian.campbell@citrix.com \
--cc=patches@linaro.org \
--cc=tim@xen.org \
--cc=xen-devel@lists.xen.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).