]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
KVM: arm64: vgic-v3: Add ICV_RPR_EL1 handler
authorMarc Zyngier <marc.zyngier@arm.com>
Fri, 9 Jun 2017 11:49:50 +0000 (12:49 +0100)
committerKleber Sacilotto de Souza <kleber.souza@canonical.com>
Wed, 9 Aug 2017 14:48:01 +0000 (16:48 +0200)
BugLink: https://bugs.launchpad.net/bugs/1673564
Add a handler for reading the guest's view of the ICV_RPR_EL1
register, returning the highest active priority.

Tested-by: Alexander Graf <agraf@suse.de>
Acked-by: David Daney <david.daney@cavium.com>
Acked-by: Christoffer Dall <cdall@linaro.org>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <cdall@linaro.org>
(backported from commit 43515894c06f856b7743145e002591309f60b247)
[ dannf: Drop the SYS_ prefix and move the ICV_RPR_EL1 macro definition
  from asm/sysreg.h to asm/arch_gicv3.h for consistency with code
  prior to 0e9884fe ]
Signed-off-by: dann frazier <dann.frazier@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
Signed-off-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
arch/arm64/include/asm/arch_gicv3.h
virt/kvm/arm/hyp/vgic-v3-sr.c

index 52e97cd88689e02e0d8186872bb78ec5f67be2a4..9cadda9cceff46e0c88cace41ae112772d085d01 100644 (file)
@@ -28,6 +28,7 @@
 #define ICC_AP1Rn_EL1(n)               sys_reg(3, 0, 12, 9, n)
 #define ICC_EOIR1_EL1                  sys_reg(3, 0, 12, 12, 1)
 #define ICC_DIR_EL1                    sys_reg(3, 0, 12, 11, 1)
+#define ICC_RPR_EL1                    sys_reg(3, 0, 12, 11, 3)
 #define ICC_IAR1_EL1                   sys_reg(3, 0, 12, 12, 0)
 #define ICC_SGI1R_EL1                  sys_reg(3, 0, 12, 11, 5)
 #define ICC_PMR_EL1                    sys_reg(3, 0, 4, 6, 0)
index 0351f0a0a49d2e9795ce98ef3bef43a8e3541800..cd9a25233ae4803360a6048152d4aee674363b4a 100644 (file)
@@ -933,6 +933,13 @@ spurious:
        vcpu_set_reg(vcpu, rt, lr_val & ICH_LR_VIRTUAL_ID_MASK);
 }
 
+static void __hyp_text __vgic_v3_read_rpr(struct kvm_vcpu *vcpu,
+                                         u32 vmcr, int rt)
+{
+       u32 val = __vgic_v3_get_highest_active_priority();
+       vcpu_set_reg(vcpu, rt, val);
+}
+
 int __hyp_text __vgic_v3_perform_cpuif_access(struct kvm_vcpu *vcpu)
 {
        int rt;
@@ -1022,6 +1029,9 @@ int __hyp_text __vgic_v3_perform_cpuif_access(struct kvm_vcpu *vcpu)
        case ICC_DIR_EL1:
                fn = __vgic_v3_write_dir;
                break;
+       case ICC_RPR_EL1:
+               fn = __vgic_v3_read_rpr;
+               break;
        default:
                return 0;
        }