On Mon, Dec 07, 2015 at 10:53:20AM +0000, Marc Zyngier wrote: > We store GICv3 LRs in reverse order so that the CPU can save/restore > them in rever order as well (don't ask why, the design is crazy), s/rever/reverse/ > and yet generate memory traffic that doesn't completely suck. > > We need this macro to be available to the C version of save/restore. > > Signed-off-by: Marc Zyngier <marc.zyngier@xxxxxxx> > --- > include/kvm/arm_vgic.h | 6 ++++++ > virt/kvm/arm/vgic-v3.c | 10 ++-------- > 2 files changed, 8 insertions(+), 8 deletions(-) > > diff --git a/include/kvm/arm_vgic.h b/include/kvm/arm_vgic.h > index d2f4147..13a3d53 100644 > --- a/include/kvm/arm_vgic.h > +++ b/include/kvm/arm_vgic.h > @@ -279,6 +279,12 @@ struct vgic_v2_cpu_if { > u32 vgic_lr[VGIC_V2_MAX_LRS]; > }; > > +/* > + * LRs are stored in reverse order in memory. make sure we index them s/make/Make/ or s/\./, > + * correctly. > + */ > +#define VGIC_V3_LR_INDEX(lr) (VGIC_V3_MAX_LRS - 1 - lr) > + > struct vgic_v3_cpu_if { > #ifdef CONFIG_KVM_ARM_VGIC_V3 > u32 vgic_hcr; > diff --git a/virt/kvm/arm/vgic-v3.c b/virt/kvm/arm/vgic-v3.c > index 487d635..3813d23 100644 > --- a/virt/kvm/arm/vgic-v3.c > +++ b/virt/kvm/arm/vgic-v3.c > @@ -36,18 +36,12 @@ > #define GICH_LR_PHYSID_CPUID (7UL << GICH_LR_PHYSID_CPUID_SHIFT) > #define ICH_LR_VIRTUALID_MASK (BIT_ULL(32) - 1) > > -/* > - * LRs are stored in reverse order in memory. make sure we index them > - * correctly. > - */ > -#define LR_INDEX(lr) (VGIC_V3_MAX_LRS - 1 - lr) > - > static u32 ich_vtr_el2; > > static struct vgic_lr vgic_v3_get_lr(const struct kvm_vcpu *vcpu, int lr) > { > struct vgic_lr lr_desc; > - u64 val = vcpu->arch.vgic_cpu.vgic_v3.vgic_lr[LR_INDEX(lr)]; > + u64 val = vcpu->arch.vgic_cpu.vgic_v3.vgic_lr[VGIC_V3_LR_INDEX(lr)]; > > if (vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3) > lr_desc.irq = val & ICH_LR_VIRTUALID_MASK; > @@ -111,7 +105,7 @@ static void vgic_v3_set_lr(struct kvm_vcpu *vcpu, int lr, > lr_val |= ((u64)lr_desc.hwirq) << ICH_LR_PHYS_ID_SHIFT; > } > > - vcpu->arch.vgic_cpu.vgic_v3.vgic_lr[LR_INDEX(lr)] = lr_val; > + vcpu->arch.vgic_cpu.vgic_v3.vgic_lr[VGIC_V3_LR_INDEX(lr)] = lr_val; > > if (!(lr_desc.state & LR_STATE_MASK)) > vcpu->arch.vgic_cpu.vgic_v3.vgic_elrsr |= (1U << lr); > -- > 2.1.4 > Otherwise: Reviewed-by: Christoffer Dall <christoffer.dall@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html