GICv3 doesn't have an MPIDR register, but it uses the affinity fields from GICR_TYPER, which are also present in the MPIDR_EL1 register, to identify the Redistributor associated with a PE. The macro VGIC_TO_MPIDR() doesn't convert the affinity fields originating from an userspace ioctl into a valid MPIDR_EL1 value like its name would suggest (notably, the RES1 bit is missing); what it does is to shift the affinity fields to the same positions as the fields from the MPIDR_EL1 register. This value is then compared to the result of kvm_vcpu_get_mpidr_aff() to find the corresponding VCPU. Let's rename VGIC_TO_MPIDR() to VGIC_TO_MPIDR_AFF() to avoid any confusion about what the macro does. Signed-off-by: Alexandru Elisei <alexandru.elisei@xxxxxxx> --- arch/arm64/kvm/vgic/vgic-kvm-device.c | 12 ++++++------ arch/arm64/kvm/vgic/vgic.h | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/arch/arm64/kvm/vgic/vgic-kvm-device.c b/arch/arm64/kvm/vgic/vgic-kvm-device.c index 44419679f91a..043eeb264ed8 100644 --- a/arch/arm64/kvm/vgic/vgic-kvm-device.c +++ b/arch/arm64/kvm/vgic/vgic-kvm-device.c @@ -473,18 +473,18 @@ struct kvm_device_ops kvm_arm_vgic_v2_ops = { int vgic_v3_parse_attr(struct kvm_device *dev, struct kvm_device_attr *attr, struct vgic_reg_attr *reg_attr) { - unsigned long vgic_mpidr, mpidr_reg; + unsigned long vgic_aff, mpidr_aff; /* * For KVM_DEV_ARM_VGIC_GRP_DIST_REGS group, - * attr might not hold MPIDR. Hence assume vcpu0. + * attr might not hold MPIDR affinity. Hence assume vcpu0. */ if (attr->group != KVM_DEV_ARM_VGIC_GRP_DIST_REGS) { - vgic_mpidr = (attr->attr & KVM_DEV_ARM_VGIC_V3_MPIDR_MASK) >> - KVM_DEV_ARM_VGIC_V3_MPIDR_SHIFT; + vgic_aff = (attr->attr & KVM_DEV_ARM_VGIC_V3_MPIDR_MASK) >> + KVM_DEV_ARM_VGIC_V3_MPIDR_SHIFT; - mpidr_reg = VGIC_TO_MPIDR(vgic_mpidr); - reg_attr->vcpu = kvm_mpidr_to_vcpu(dev->kvm, mpidr_reg); + mpidr_aff = VGIC_TO_MPIDR_AFF(vgic_aff); + reg_attr->vcpu = kvm_mpidr_to_vcpu(dev->kvm, mpidr_aff); } else { reg_attr->vcpu = kvm_get_vcpu(dev->kvm, 0); } diff --git a/arch/arm64/kvm/vgic/vgic.h b/arch/arm64/kvm/vgic/vgic.h index 64fcd7511110..66525b8e2aa4 100644 --- a/arch/arm64/kvm/vgic/vgic.h +++ b/arch/arm64/kvm/vgic/vgic.h @@ -34,12 +34,12 @@ /* * The Userspace encodes the affinity differently from the MPIDR, - * Below macro converts vgic userspace format to MPIDR reg format. + * Below macro converts vgic userspace format to MPIDR reg affinity format. */ -#define VGIC_TO_MPIDR(val) (VGIC_AFFINITY_LEVEL(val, 0) | \ - VGIC_AFFINITY_LEVEL(val, 1) | \ - VGIC_AFFINITY_LEVEL(val, 2) | \ - VGIC_AFFINITY_LEVEL(val, 3)) +#define VGIC_TO_MPIDR_AFF(val) (VGIC_AFFINITY_LEVEL(val, 0) | \ + VGIC_AFFINITY_LEVEL(val, 1) | \ + VGIC_AFFINITY_LEVEL(val, 2) | \ + VGIC_AFFINITY_LEVEL(val, 3)) /* * As per Documentation/virt/kvm/devices/arm-vgic-v3.rst, -- 2.30.0 _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm