diff options
author | Christoffer Dall <christoffer.dall@linaro.org> | 2013-08-29 06:08:24 -0400 |
---|---|---|
committer | Gleb Natapov <gleb@redhat.com> | 2013-08-30 09:12:38 -0400 |
commit | 8d98915b6bda499e47d19166101d0bbcfd409c80 (patch) | |
tree | 62da4eebd0391acff74af87586dce14e7852942b /virt/kvm | |
parent | 6545eae3d7a1b6dc2edb8ede9107998aee1207ef (diff) |
ARM: KVM: Bugfix: vgic_bytemap_get_reg per cpu regs
For bytemaps each IRQ field is 1 byte wide, so we pack 4 irq fields in
one word and since there are 32 private (per cpu) irqs, we have 8
private u32 fields on the vgic_bytemap struct. We shift the offset from
the base of the register group right by 2, giving us the word index
instead of the field index. But then there are 8 private words, not 4,
which is also why we subtract 8 words from the offset of the shared
words.
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Gleb Natapov <gleb@redhat.com>
Diffstat (limited to 'virt/kvm')
-rw-r--r-- | virt/kvm/arm/vgic.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/virt/kvm/arm/vgic.c b/virt/kvm/arm/vgic.c index 902789ff4abb..685fc72fc751 100644 --- a/virt/kvm/arm/vgic.c +++ b/virt/kvm/arm/vgic.c | |||
@@ -149,7 +149,7 @@ static u32 *vgic_bytemap_get_reg(struct vgic_bytemap *x, int cpuid, u32 offset) | |||
149 | { | 149 | { |
150 | offset >>= 2; | 150 | offset >>= 2; |
151 | BUG_ON(offset > (VGIC_NR_IRQS / 4)); | 151 | BUG_ON(offset > (VGIC_NR_IRQS / 4)); |
152 | if (offset < 4) | 152 | if (offset < 8) |
153 | return x->percpu[cpuid] + offset; | 153 | return x->percpu[cpuid] + offset; |
154 | else | 154 | else |
155 | return x->shared + offset - 8; | 155 | return x->shared + offset - 8; |