diff options
author | Marc Zyngier <marc.zyngier@arm.com> | 2016-05-25 10:26:37 -0400 |
---|---|---|
committer | Christoffer Dall <christoffer.dall@linaro.org> | 2016-05-31 10:12:16 -0400 |
commit | b34f2bcbf59fe2d27c37d6553c33611754677103 (patch) | |
tree | 58c1b3b69e484ef9a73c50852d4b2d560db3edb7 | |
parent | 637d122baac7ff386c8e96df38ac88cee1551db9 (diff) |
arm64: KVM: Make ICC_SRE_EL1 access return the configured SRE value
When we trap ICC_SRE_EL1, we handle it as RAZ/WI. It would be
more correct to actual make it RO, and return the configured
value when read.
Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
-rw-r--r-- | arch/arm64/kvm/sys_regs.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 7bbe3ff02602..a57d650f552c 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c | |||
@@ -134,6 +134,17 @@ static bool access_gic_sgi(struct kvm_vcpu *vcpu, | |||
134 | return true; | 134 | return true; |
135 | } | 135 | } |
136 | 136 | ||
137 | static bool access_gic_sre(struct kvm_vcpu *vcpu, | ||
138 | struct sys_reg_params *p, | ||
139 | const struct sys_reg_desc *r) | ||
140 | { | ||
141 | if (p->is_write) | ||
142 | return ignore_write(vcpu, p); | ||
143 | |||
144 | p->regval = vcpu->arch.vgic_cpu.vgic_v3.vgic_sre; | ||
145 | return true; | ||
146 | } | ||
147 | |||
137 | static bool trap_raz_wi(struct kvm_vcpu *vcpu, | 148 | static bool trap_raz_wi(struct kvm_vcpu *vcpu, |
138 | struct sys_reg_params *p, | 149 | struct sys_reg_params *p, |
139 | const struct sys_reg_desc *r) | 150 | const struct sys_reg_desc *r) |
@@ -958,7 +969,7 @@ static const struct sys_reg_desc sys_reg_descs[] = { | |||
958 | access_gic_sgi }, | 969 | access_gic_sgi }, |
959 | /* ICC_SRE_EL1 */ | 970 | /* ICC_SRE_EL1 */ |
960 | { Op0(0b11), Op1(0b000), CRn(0b1100), CRm(0b1100), Op2(0b101), | 971 | { Op0(0b11), Op1(0b000), CRn(0b1100), CRm(0b1100), Op2(0b101), |
961 | trap_raz_wi }, | 972 | access_gic_sre }, |
962 | 973 | ||
963 | /* CONTEXTIDR_EL1 */ | 974 | /* CONTEXTIDR_EL1 */ |
964 | { Op0(0b11), Op1(0b000), CRn(0b1101), CRm(0b0000), Op2(0b001), | 975 | { Op0(0b11), Op1(0b000), CRn(0b1101), CRm(0b0000), Op2(0b001), |