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 <[email protected]>
---
 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
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to