aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Zyngier <marc.zyngier@arm.com>2015-06-11 13:50:17 -0400
committerMarc Zyngier <marc.zyngier@arm.com>2015-06-17 04:59:55 -0400
commit4642019dc4457486223e1fb75a6a4cba6e0e903a (patch)
tree5bf3859158f850815b990e6ab8c57376d4748250
parentf5a202db12b42aef9543029934681df019d7b749 (diff)
arm/arm64: KVM: vgic: Do not save GICH_HCR / ICH_HCR_EL2
The GIC Hypervisor Configuration Register is used to enable the delivery of virtual interupts to a guest, as well as to define in which conditions maintenance interrupts are delivered to the host. This register doesn't contain any information that we need to read back (the EOIcount is utterly useless for us). So let's save ourselves some cycles, and not save it before writing zero to it. Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
-rw-r--r--arch/arm/kvm/interrupts_head.S3
-rw-r--r--arch/arm64/kvm/vgic-v2-switch.S3
-rw-r--r--arch/arm64/kvm/vgic-v3-switch.S2
3 files changed, 0 insertions, 8 deletions
diff --git a/arch/arm/kvm/interrupts_head.S b/arch/arm/kvm/interrupts_head.S
index 48efe2ee452c..702740d37465 100644
--- a/arch/arm/kvm/interrupts_head.S
+++ b/arch/arm/kvm/interrupts_head.S
@@ -412,7 +412,6 @@ vcpu .req r0 @ vcpu pointer always in r0
412 add r11, vcpu, #VCPU_VGIC_CPU 412 add r11, vcpu, #VCPU_VGIC_CPU
413 413
414 /* Save all interesting registers */ 414 /* Save all interesting registers */
415 ldr r3, [r2, #GICH_HCR]
416 ldr r4, [r2, #GICH_VMCR] 415 ldr r4, [r2, #GICH_VMCR]
417 ldr r5, [r2, #GICH_MISR] 416 ldr r5, [r2, #GICH_MISR]
418 ldr r6, [r2, #GICH_EISR0] 417 ldr r6, [r2, #GICH_EISR0]
@@ -420,7 +419,6 @@ vcpu .req r0 @ vcpu pointer always in r0
420 ldr r8, [r2, #GICH_ELRSR0] 419 ldr r8, [r2, #GICH_ELRSR0]
421 ldr r9, [r2, #GICH_ELRSR1] 420 ldr r9, [r2, #GICH_ELRSR1]
422 ldr r10, [r2, #GICH_APR] 421 ldr r10, [r2, #GICH_APR]
423ARM_BE8(rev r3, r3 )
424ARM_BE8(rev r4, r4 ) 422ARM_BE8(rev r4, r4 )
425ARM_BE8(rev r5, r5 ) 423ARM_BE8(rev r5, r5 )
426ARM_BE8(rev r6, r6 ) 424ARM_BE8(rev r6, r6 )
@@ -429,7 +427,6 @@ ARM_BE8(rev r8, r8 )
429ARM_BE8(rev r9, r9 ) 427ARM_BE8(rev r9, r9 )
430ARM_BE8(rev r10, r10 ) 428ARM_BE8(rev r10, r10 )
431 429
432 str r3, [r11, #VGIC_V2_CPU_HCR]
433 str r4, [r11, #VGIC_V2_CPU_VMCR] 430 str r4, [r11, #VGIC_V2_CPU_VMCR]
434 str r5, [r11, #VGIC_V2_CPU_MISR] 431 str r5, [r11, #VGIC_V2_CPU_MISR]
435#ifdef CONFIG_CPU_ENDIAN_BE8 432#ifdef CONFIG_CPU_ENDIAN_BE8
diff --git a/arch/arm64/kvm/vgic-v2-switch.S b/arch/arm64/kvm/vgic-v2-switch.S
index f002fe1c3700..3f000712a85d 100644
--- a/arch/arm64/kvm/vgic-v2-switch.S
+++ b/arch/arm64/kvm/vgic-v2-switch.S
@@ -47,7 +47,6 @@ __save_vgic_v2_state:
47 add x3, x0, #VCPU_VGIC_CPU 47 add x3, x0, #VCPU_VGIC_CPU
48 48
49 /* Save all interesting registers */ 49 /* Save all interesting registers */
50 ldr w4, [x2, #GICH_HCR]
51 ldr w5, [x2, #GICH_VMCR] 50 ldr w5, [x2, #GICH_VMCR]
52 ldr w6, [x2, #GICH_MISR] 51 ldr w6, [x2, #GICH_MISR]
53 ldr w7, [x2, #GICH_EISR0] 52 ldr w7, [x2, #GICH_EISR0]
@@ -55,7 +54,6 @@ __save_vgic_v2_state:
55 ldr w9, [x2, #GICH_ELRSR0] 54 ldr w9, [x2, #GICH_ELRSR0]
56 ldr w10, [x2, #GICH_ELRSR1] 55 ldr w10, [x2, #GICH_ELRSR1]
57 ldr w11, [x2, #GICH_APR] 56 ldr w11, [x2, #GICH_APR]
58CPU_BE( rev w4, w4 )
59CPU_BE( rev w5, w5 ) 57CPU_BE( rev w5, w5 )
60CPU_BE( rev w6, w6 ) 58CPU_BE( rev w6, w6 )
61CPU_BE( rev w7, w7 ) 59CPU_BE( rev w7, w7 )
@@ -64,7 +62,6 @@ CPU_BE( rev w9, w9 )
64CPU_BE( rev w10, w10 ) 62CPU_BE( rev w10, w10 )
65CPU_BE( rev w11, w11 ) 63CPU_BE( rev w11, w11 )
66 64
67 str w4, [x3, #VGIC_V2_CPU_HCR]
68 str w5, [x3, #VGIC_V2_CPU_VMCR] 65 str w5, [x3, #VGIC_V2_CPU_VMCR]
69 str w6, [x3, #VGIC_V2_CPU_MISR] 66 str w6, [x3, #VGIC_V2_CPU_MISR]
70CPU_LE( str w7, [x3, #VGIC_V2_CPU_EISR] ) 67CPU_LE( str w7, [x3, #VGIC_V2_CPU_EISR] )
diff --git a/arch/arm64/kvm/vgic-v3-switch.S b/arch/arm64/kvm/vgic-v3-switch.S
index 617a012a0107..3c20730ddff5 100644
--- a/arch/arm64/kvm/vgic-v3-switch.S
+++ b/arch/arm64/kvm/vgic-v3-switch.S
@@ -48,13 +48,11 @@
48 dsb st 48 dsb st
49 49
50 // Save all interesting registers 50 // Save all interesting registers
51 mrs_s x4, ICH_HCR_EL2
52 mrs_s x5, ICH_VMCR_EL2 51 mrs_s x5, ICH_VMCR_EL2
53 mrs_s x6, ICH_MISR_EL2 52 mrs_s x6, ICH_MISR_EL2
54 mrs_s x7, ICH_EISR_EL2 53 mrs_s x7, ICH_EISR_EL2
55 mrs_s x8, ICH_ELSR_EL2 54 mrs_s x8, ICH_ELSR_EL2
56 55
57 str w4, [x3, #VGIC_V3_CPU_HCR]
58 str w5, [x3, #VGIC_V3_CPU_VMCR] 56 str w5, [x3, #VGIC_V3_CPU_VMCR]
59 str w6, [x3, #VGIC_V3_CPU_MISR] 57 str w6, [x3, #VGIC_V3_CPU_MISR]
60 str w7, [x3, #VGIC_V3_CPU_EISR] 58 str w7, [x3, #VGIC_V3_CPU_EISR]