]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
arm/arm64: KVM: vgic: Do not save GICH_HCR / ICH_HCR_EL2
authorMarc Zyngier <marc.zyngier@arm.com>
Thu, 11 Jun 2015 17:50:17 +0000 (18:50 +0100)
committerMarc Zyngier <marc.zyngier@arm.com>
Wed, 17 Jun 2015 08:59:55 +0000 (09:59 +0100)
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>
arch/arm/kvm/interrupts_head.S
arch/arm64/kvm/vgic-v2-switch.S
arch/arm64/kvm/vgic-v3-switch.S

index 48efe2ee452cfa3f8133c80e05e11b7a007281b4..702740d37465c31299b24ccd4b9fed7184267689 100644 (file)
@@ -412,7 +412,6 @@ vcpu        .req    r0              @ vcpu pointer always in r0
        add     r11, vcpu, #VCPU_VGIC_CPU
 
        /* Save all interesting registers */
-       ldr     r3, [r2, #GICH_HCR]
        ldr     r4, [r2, #GICH_VMCR]
        ldr     r5, [r2, #GICH_MISR]
        ldr     r6, [r2, #GICH_EISR0]
@@ -420,7 +419,6 @@ vcpu        .req    r0              @ vcpu pointer always in r0
        ldr     r8, [r2, #GICH_ELRSR0]
        ldr     r9, [r2, #GICH_ELRSR1]
        ldr     r10, [r2, #GICH_APR]
-ARM_BE8(rev    r3, r3  )
 ARM_BE8(rev    r4, r4  )
 ARM_BE8(rev    r5, r5  )
 ARM_BE8(rev    r6, r6  )
@@ -429,7 +427,6 @@ ARM_BE8(rev r8, r8  )
 ARM_BE8(rev    r9, r9  )
 ARM_BE8(rev    r10, r10        )
 
-       str     r3, [r11, #VGIC_V2_CPU_HCR]
        str     r4, [r11, #VGIC_V2_CPU_VMCR]
        str     r5, [r11, #VGIC_V2_CPU_MISR]
 #ifdef CONFIG_CPU_ENDIAN_BE8
index f002fe1c37002aff928e834a3c6c93008a3aa7d1..3f000712a85df9be3926a44fb1f67e9d2310c6eb 100644 (file)
@@ -47,7 +47,6 @@ __save_vgic_v2_state:
        add     x3, x0, #VCPU_VGIC_CPU
 
        /* Save all interesting registers */
-       ldr     w4, [x2, #GICH_HCR]
        ldr     w5, [x2, #GICH_VMCR]
        ldr     w6, [x2, #GICH_MISR]
        ldr     w7, [x2, #GICH_EISR0]
@@ -55,7 +54,6 @@ __save_vgic_v2_state:
        ldr     w9, [x2, #GICH_ELRSR0]
        ldr     w10, [x2, #GICH_ELRSR1]
        ldr     w11, [x2, #GICH_APR]
-CPU_BE(        rev     w4,  w4  )
 CPU_BE(        rev     w5,  w5  )
 CPU_BE(        rev     w6,  w6  )
 CPU_BE(        rev     w7,  w7  )
@@ -64,7 +62,6 @@ CPU_BE(       rev     w9,  w9  )
 CPU_BE(        rev     w10, w10 )
 CPU_BE(        rev     w11, w11 )
 
-       str     w4, [x3, #VGIC_V2_CPU_HCR]
        str     w5, [x3, #VGIC_V2_CPU_VMCR]
        str     w6, [x3, #VGIC_V2_CPU_MISR]
 CPU_LE(        str     w7, [x3, #VGIC_V2_CPU_EISR] )
index 617a012a01078393e806be0daaf068af24c230cd..3c20730ddff53c019998ff98672534ff0a45b1cc 100644 (file)
        dsb     st
 
        // Save all interesting registers
-       mrs_s   x4, ICH_HCR_EL2
        mrs_s   x5, ICH_VMCR_EL2
        mrs_s   x6, ICH_MISR_EL2
        mrs_s   x7, ICH_EISR_EL2
        mrs_s   x8, ICH_ELSR_EL2
 
-       str     w4, [x3, #VGIC_V3_CPU_HCR]
        str     w5, [x3, #VGIC_V3_CPU_VMCR]
        str     w6, [x3, #VGIC_V3_CPU_MISR]
        str     w7, [x3, #VGIC_V3_CPU_EISR]