diff options
author | Marc Zyngier <marc.zyngier@arm.com> | 2016-03-03 15:43:58 +0000 |
---|---|---|
committer | Marc Zyngier <marc.zyngier@arm.com> | 2016-03-09 04:24:09 +0000 |
commit | 0d98d00b8d80bfdee95cf7e85f20f107377e2662 (patch) | |
tree | 0962d058aec3a40e6e6488856e6a3b4a5f89f2c5 /arch/arm64/kvm | |
parent | 84e8b9c88d5fe9c9a59ed24ae44d7ac0983df92b (diff) | |
download | linux-0d98d00b8d80bfdee95cf7e85f20f107377e2662.tar.gz linux-0d98d00b8d80bfdee95cf7e85f20f107377e2662.tar.bz2 linux-0d98d00b8d80bfdee95cf7e85f20f107377e2662.zip |
arm64: KVM: vgic-v3: Reset LRs at boot time
In order to let the GICv3 code be more lazy in the way it
accesses the LRs, it is necessary to start with a clean slate.
Let's reset the LRs on each CPU when the vgic is probed (which
includes a round trip to EL2...).
Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Diffstat (limited to 'arch/arm64/kvm')
-rw-r--r-- | arch/arm64/kvm/hyp/vgic-v3-sr.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/arm64/kvm/hyp/vgic-v3-sr.c b/arch/arm64/kvm/hyp/vgic-v3-sr.c index 0db426e6c13e..81349479e17c 100644 --- a/arch/arm64/kvm/hyp/vgic-v3-sr.c +++ b/arch/arm64/kvm/hyp/vgic-v3-sr.c @@ -321,6 +321,15 @@ void __hyp_text __vgic_v3_restore_state(struct kvm_vcpu *vcpu) } } +void __hyp_text __vgic_v3_init_lrs(void) +{ + int max_lr_idx = vtr_to_max_lr_idx(read_gicreg(ICH_VTR_EL2)); + int i; + + for (i = 0; i <= max_lr_idx; i++) + __gic_v3_set_lr(0, i); +} + static u64 __hyp_text __vgic_v3_read_ich_vtr_el2(void) { return read_gicreg(ICH_VTR_EL2); |