Skip to content

Commit

Permalink
ARM: KVM: Bugfix: vgic_bytemap_get_reg per cpu regs
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
chazy authored and Gleb Natapov committed Aug 30, 2013
1 parent 6545eae commit 8d98915
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion virt/kvm/arm/vgic.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ static u32 *vgic_bytemap_get_reg(struct vgic_bytemap *x, int cpuid, u32 offset)
{
offset >>= 2;
BUG_ON(offset > (VGIC_NR_IRQS / 4));
if (offset < 4)
if (offset < 8)
return x->percpu[cpuid] + offset;
else
return x->shared + offset - 8;
Expand Down

0 comments on commit 8d98915

Please sign in to comment.