From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751407AbbEGJHe (ORCPT ); Thu, 7 May 2015 05:07:34 -0400 Received: from static.88-198-71-155.clients.your-server.de ([88.198.71.155]:38220 "EHLO socrates.bennee.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751169AbbEGJHb (ORCPT ); Thu, 7 May 2015 05:07:31 -0400 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= To: kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, christoffer.dall@linaro.org, marc.zyngier@arm.com, peter.maydell@linaro.org, agraf@suse.de, drjones@redhat.com, pbonzini@redhat.com, zhichao.huang@linaro.org Cc: jan.kiszka@siemens.com, dahi@linux.vnet.ibm.com, r65777@freescale.com, bp@suse.de, =?UTF-8?q?Alex=20Benn=C3=A9e?= , Catalin Marinas , Will Deacon , Gleb Natapov , Ard Biesheuvel , Andre Przywara , Richard Weinberger , Lorenzo Pieralisi , linux-kernel@vger.kernel.org (open list) Subject: [PATCH v3 08/12] KVM: arm64: re-factor hyp.S debug register code Date: Thu, 7 May 2015 10:07:11 +0100 Message-Id: <1430989647-22501-1-git-send-email-alex.bennee@linaro.org> X-Mailer: git-send-email 2.3.5 In-Reply-To: <1430929407-3487-1-git-send-email-alex.bennee@linaro.org> References: <1430929407-3487-1-git-send-email-alex.bennee@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: alex.bennee@linaro.org X-SA-Exim-Scanned: No (on socrates.bennee.com); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is a pre-cursor to sharing the code with the guest debug support. This replaces the big macro that fishes data out of a fixed location with a more general helper macro to restore a set of debug registers. It uses macro substitution so it can be re-used for debug control and value registers. It does however rely on the debug registers being 64 bit aligned (as they happen to be in the hyp ABI). Signed-off-by: Alex Bennée --- v3: - return to the patch series - add save and restore targets - change register use and document diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c index dfb25a2..ce7b7dd 100644 --- a/arch/arm64/kernel/asm-offsets.c +++ b/arch/arm64/kernel/asm-offsets.c @@ -116,6 +116,10 @@ int main(void) DEFINE(VCPU_FAR_EL2, offsetof(struct kvm_vcpu, arch.fault.far_el2)); DEFINE(VCPU_HPFAR_EL2, offsetof(struct kvm_vcpu, arch.fault.hpfar_el2)); DEFINE(VCPU_DEBUG_FLAGS, offsetof(struct kvm_vcpu, arch.debug_flags)); + DEFINE(DEBUG_BCR, offsetof(struct kvm_guest_debug_arch, dbg_bcr)); + DEFINE(DEBUG_BVR, offsetof(struct kvm_guest_debug_arch, dbg_bvr)); + DEFINE(DEBUG_WCR, offsetof(struct kvm_guest_debug_arch, dbg_wcr)); + DEFINE(DEBUG_WVR, offsetof(struct kvm_guest_debug_arch, dbg_wvr)); DEFINE(VCPU_HCR_EL2, offsetof(struct kvm_vcpu, arch.hcr_el2)); DEFINE(VCPU_MDCR_EL2, offsetof(struct kvm_vcpu, arch.mdcr_el2)); DEFINE(VCPU_IRQ_LINES, offsetof(struct kvm_vcpu, arch.irq_lines)); diff --git a/arch/arm64/kvm/hyp.S b/arch/arm64/kvm/hyp.S index 15159aa..dd51fb1 100644 --- a/arch/arm64/kvm/hyp.S +++ b/arch/arm64/kvm/hyp.S @@ -228,199 +228,52 @@ stp x24, x25, [x3, #160] .endm -.macro save_debug - // x2: base address for cpu context - // x3: tmp register - - mrs x26, id_aa64dfr0_el1 - ubfx x24, x26, #12, #4 // Extract BRPs - ubfx x25, x26, #20, #4 // Extract WRPs - mov w26, #15 - sub w24, w26, w24 // How many BPs to skip - sub w25, w26, w25 // How many WPs to skip - - add x3, x2, #CPU_SYSREG_OFFSET(DBGBCR0_EL1) - - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 -1: - mrs x20, dbgbcr15_el1 - mrs x19, dbgbcr14_el1 - mrs x18, dbgbcr13_el1 - mrs x17, dbgbcr12_el1 - mrs x16, dbgbcr11_el1 - mrs x15, dbgbcr10_el1 - mrs x14, dbgbcr9_el1 - mrs x13, dbgbcr8_el1 - mrs x12, dbgbcr7_el1 - mrs x11, dbgbcr6_el1 - mrs x10, dbgbcr5_el1 - mrs x9, dbgbcr4_el1 - mrs x8, dbgbcr3_el1 - mrs x7, dbgbcr2_el1 - mrs x6, dbgbcr1_el1 - mrs x5, dbgbcr0_el1 - - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 - -1: - str x20, [x3, #(15 * 8)] - str x19, [x3, #(14 * 8)] - str x18, [x3, #(13 * 8)] - str x17, [x3, #(12 * 8)] - str x16, [x3, #(11 * 8)] - str x15, [x3, #(10 * 8)] - str x14, [x3, #(9 * 8)] - str x13, [x3, #(8 * 8)] - str x12, [x3, #(7 * 8)] - str x11, [x3, #(6 * 8)] - str x10, [x3, #(5 * 8)] - str x9, [x3, #(4 * 8)] - str x8, [x3, #(3 * 8)] - str x7, [x3, #(2 * 8)] - str x6, [x3, #(1 * 8)] - str x5, [x3, #(0 * 8)] - - add x3, x2, #CPU_SYSREG_OFFSET(DBGBVR0_EL1) - - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 +.macro save_debug_registers type + // x4: pointer to register set + // x5: number of registers to copy + // x6..x22 trashed + + adr x22, 1f + add x22, x22, x5, lsl #2 + br x22 1: - mrs x20, dbgbvr15_el1 - mrs x19, dbgbvr14_el1 - mrs x18, dbgbvr13_el1 - mrs x17, dbgbvr12_el1 - mrs x16, dbgbvr11_el1 - mrs x15, dbgbvr10_el1 - mrs x14, dbgbvr9_el1 - mrs x13, dbgbvr8_el1 - mrs x12, dbgbvr7_el1 - mrs x11, dbgbvr6_el1 - mrs x10, dbgbvr5_el1 - mrs x9, dbgbvr4_el1 - mrs x8, dbgbvr3_el1 - mrs x7, dbgbvr2_el1 - mrs x6, dbgbvr1_el1 - mrs x5, dbgbvr0_el1 - - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 - -1: - str x20, [x3, #(15 * 8)] - str x19, [x3, #(14 * 8)] - str x18, [x3, #(13 * 8)] - str x17, [x3, #(12 * 8)] - str x16, [x3, #(11 * 8)] - str x15, [x3, #(10 * 8)] - str x14, [x3, #(9 * 8)] - str x13, [x3, #(8 * 8)] - str x12, [x3, #(7 * 8)] - str x11, [x3, #(6 * 8)] - str x10, [x3, #(5 * 8)] - str x9, [x3, #(4 * 8)] - str x8, [x3, #(3 * 8)] - str x7, [x3, #(2 * 8)] - str x6, [x3, #(1 * 8)] - str x5, [x3, #(0 * 8)] - - add x3, x2, #CPU_SYSREG_OFFSET(DBGWCR0_EL1) - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 -1: - mrs x20, dbgwcr15_el1 - mrs x19, dbgwcr14_el1 - mrs x18, dbgwcr13_el1 - mrs x17, dbgwcr12_el1 - mrs x16, dbgwcr11_el1 - mrs x15, dbgwcr10_el1 - mrs x14, dbgwcr9_el1 - mrs x13, dbgwcr8_el1 - mrs x12, dbgwcr7_el1 - mrs x11, dbgwcr6_el1 - mrs x10, dbgwcr5_el1 - mrs x9, dbgwcr4_el1 - mrs x8, dbgwcr3_el1 - mrs x7, dbgwcr2_el1 - mrs x6, dbgwcr1_el1 - mrs x5, dbgwcr0_el1 - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 - + mrs x21, \type\()15_el1 + mrs x20, \type\()14_el1 + mrs x19, \type\()13_el1 + mrs x18, \type\()12_el1 + mrs x17, \type\()11_el1 + mrs x16, \type\()10_el1 + mrs x15, \type\()9_el1 + mrs x14, \type\()8_el1 + mrs x13, \type\()7_el1 + mrs x12, \type\()6_el1 + mrs x11, \type\()5_el1 + mrs x10, \type\()4_el1 + mrs x9, \type\()3_el1 + mrs x8, \type\()2_el1 + mrs x7, \type\()1_el1 + mrs x6, \type\()0_el1 + + adr x22, 1f + add x22, x22, x5, lsl #2 + br x22 1: - str x20, [x3, #(15 * 8)] - str x19, [x3, #(14 * 8)] - str x18, [x3, #(13 * 8)] - str x17, [x3, #(12 * 8)] - str x16, [x3, #(11 * 8)] - str x15, [x3, #(10 * 8)] - str x14, [x3, #(9 * 8)] - str x13, [x3, #(8 * 8)] - str x12, [x3, #(7 * 8)] - str x11, [x3, #(6 * 8)] - str x10, [x3, #(5 * 8)] - str x9, [x3, #(4 * 8)] - str x8, [x3, #(3 * 8)] - str x7, [x3, #(2 * 8)] - str x6, [x3, #(1 * 8)] - str x5, [x3, #(0 * 8)] - - add x3, x2, #CPU_SYSREG_OFFSET(DBGWVR0_EL1) - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 -1: - mrs x20, dbgwvr15_el1 - mrs x19, dbgwvr14_el1 - mrs x18, dbgwvr13_el1 - mrs x17, dbgwvr12_el1 - mrs x16, dbgwvr11_el1 - mrs x15, dbgwvr10_el1 - mrs x14, dbgwvr9_el1 - mrs x13, dbgwvr8_el1 - mrs x12, dbgwvr7_el1 - mrs x11, dbgwvr6_el1 - mrs x10, dbgwvr5_el1 - mrs x9, dbgwvr4_el1 - mrs x8, dbgwvr3_el1 - mrs x7, dbgwvr2_el1 - mrs x6, dbgwvr1_el1 - mrs x5, dbgwvr0_el1 - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 - -1: - str x20, [x3, #(15 * 8)] - str x19, [x3, #(14 * 8)] - str x18, [x3, #(13 * 8)] - str x17, [x3, #(12 * 8)] - str x16, [x3, #(11 * 8)] - str x15, [x3, #(10 * 8)] - str x14, [x3, #(9 * 8)] - str x13, [x3, #(8 * 8)] - str x12, [x3, #(7 * 8)] - str x11, [x3, #(6 * 8)] - str x10, [x3, #(5 * 8)] - str x9, [x3, #(4 * 8)] - str x8, [x3, #(3 * 8)] - str x7, [x3, #(2 * 8)] - str x6, [x3, #(1 * 8)] - str x5, [x3, #(0 * 8)] - - mrs x21, mdccint_el1 - str x21, [x2, #CPU_SYSREG_OFFSET(MDCCINT_EL1)] + str x21, [x4, #(15 * 8)] + str x20, [x4, #(14 * 8)] + str x19, [x4, #(13 * 8)] + str x18, [x4, #(12 * 8)] + str x17, [x4, #(11 * 8)] + str x16, [x4, #(10 * 8)] + str x15, [x4, #(9 * 8)] + str x14, [x4, #(8 * 8)] + str x13, [x4, #(7 * 8)] + str x12, [x4, #(6 * 8)] + str x11, [x4, #(5 * 8)] + str x10, [x4, #(4 * 8)] + str x9, [x4, #(3 * 8)] + str x8, [x4, #(2 * 8)] + str x7, [x4, #(1 * 8)] + str x6, [x4, #(0 * 8)] .endm .macro restore_sysregs @@ -465,195 +318,52 @@ msr mdscr_el1, x25 .endm -.macro restore_debug - // x2: base address for cpu context - // x3: tmp register - - mrs x26, id_aa64dfr0_el1 - ubfx x24, x26, #12, #4 // Extract BRPs - ubfx x25, x26, #20, #4 // Extract WRPs - mov w26, #15 - sub w24, w26, w24 // How many BPs to skip - sub w25, w26, w25 // How many WPs to skip - - add x3, x2, #CPU_SYSREG_OFFSET(DBGBCR0_EL1) +.macro setup_debug_registers type + // x4: pointer to register set + // x5: number of registers to copy + // x6..x22 trashed - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 -1: - ldr x20, [x3, #(15 * 8)] - ldr x19, [x3, #(14 * 8)] - ldr x18, [x3, #(13 * 8)] - ldr x17, [x3, #(12 * 8)] - ldr x16, [x3, #(11 * 8)] - ldr x15, [x3, #(10 * 8)] - ldr x14, [x3, #(9 * 8)] - ldr x13, [x3, #(8 * 8)] - ldr x12, [x3, #(7 * 8)] - ldr x11, [x3, #(6 * 8)] - ldr x10, [x3, #(5 * 8)] - ldr x9, [x3, #(4 * 8)] - ldr x8, [x3, #(3 * 8)] - ldr x7, [x3, #(2 * 8)] - ldr x6, [x3, #(1 * 8)] - ldr x5, [x3, #(0 * 8)] - - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 + adr x22, 1f + add x22, x22, x5, lsl #2 + br x22 1: - msr dbgbcr15_el1, x20 - msr dbgbcr14_el1, x19 - msr dbgbcr13_el1, x18 - msr dbgbcr12_el1, x17 - msr dbgbcr11_el1, x16 - msr dbgbcr10_el1, x15 - msr dbgbcr9_el1, x14 - msr dbgbcr8_el1, x13 - msr dbgbcr7_el1, x12 - msr dbgbcr6_el1, x11 - msr dbgbcr5_el1, x10 - msr dbgbcr4_el1, x9 - msr dbgbcr3_el1, x8 - msr dbgbcr2_el1, x7 - msr dbgbcr1_el1, x6 - msr dbgbcr0_el1, x5 - - add x3, x2, #CPU_SYSREG_OFFSET(DBGBVR0_EL1) - - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 + ldr x21, [x4, #(15 * 8)] + ldr x20, [x4, #(14 * 8)] + ldr x19, [x4, #(13 * 8)] + ldr x18, [x4, #(12 * 8)] + ldr x17, [x4, #(11 * 8)] + ldr x16, [x4, #(10 * 8)] + ldr x15, [x4, #(9 * 8)] + ldr x14, [x4, #(8 * 8)] + ldr x13, [x4, #(7 * 8)] + ldr x12, [x4, #(6 * 8)] + ldr x11, [x4, #(5 * 8)] + ldr x10, [x4, #(4 * 8)] + ldr x9, [x4, #(3 * 8)] + ldr x8, [x4, #(2 * 8)] + ldr x7, [x4, #(1 * 8)] + ldr x6, [x4, #(0 * 8)] + + adr x22, 1f + add x22, x22, x5, lsl #2 + br x22 1: - ldr x20, [x3, #(15 * 8)] - ldr x19, [x3, #(14 * 8)] - ldr x18, [x3, #(13 * 8)] - ldr x17, [x3, #(12 * 8)] - ldr x16, [x3, #(11 * 8)] - ldr x15, [x3, #(10 * 8)] - ldr x14, [x3, #(9 * 8)] - ldr x13, [x3, #(8 * 8)] - ldr x12, [x3, #(7 * 8)] - ldr x11, [x3, #(6 * 8)] - ldr x10, [x3, #(5 * 8)] - ldr x9, [x3, #(4 * 8)] - ldr x8, [x3, #(3 * 8)] - ldr x7, [x3, #(2 * 8)] - ldr x6, [x3, #(1 * 8)] - ldr x5, [x3, #(0 * 8)] - - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 -1: - msr dbgbvr15_el1, x20 - msr dbgbvr14_el1, x19 - msr dbgbvr13_el1, x18 - msr dbgbvr12_el1, x17 - msr dbgbvr11_el1, x16 - msr dbgbvr10_el1, x15 - msr dbgbvr9_el1, x14 - msr dbgbvr8_el1, x13 - msr dbgbvr7_el1, x12 - msr dbgbvr6_el1, x11 - msr dbgbvr5_el1, x10 - msr dbgbvr4_el1, x9 - msr dbgbvr3_el1, x8 - msr dbgbvr2_el1, x7 - msr dbgbvr1_el1, x6 - msr dbgbvr0_el1, x5 - - add x3, x2, #CPU_SYSREG_OFFSET(DBGWCR0_EL1) - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 -1: - ldr x20, [x3, #(15 * 8)] - ldr x19, [x3, #(14 * 8)] - ldr x18, [x3, #(13 * 8)] - ldr x17, [x3, #(12 * 8)] - ldr x16, [x3, #(11 * 8)] - ldr x15, [x3, #(10 * 8)] - ldr x14, [x3, #(9 * 8)] - ldr x13, [x3, #(8 * 8)] - ldr x12, [x3, #(7 * 8)] - ldr x11, [x3, #(6 * 8)] - ldr x10, [x3, #(5 * 8)] - ldr x9, [x3, #(4 * 8)] - ldr x8, [x3, #(3 * 8)] - ldr x7, [x3, #(2 * 8)] - ldr x6, [x3, #(1 * 8)] - ldr x5, [x3, #(0 * 8)] - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 -1: - msr dbgwcr15_el1, x20 - msr dbgwcr14_el1, x19 - msr dbgwcr13_el1, x18 - msr dbgwcr12_el1, x17 - msr dbgwcr11_el1, x16 - msr dbgwcr10_el1, x15 - msr dbgwcr9_el1, x14 - msr dbgwcr8_el1, x13 - msr dbgwcr7_el1, x12 - msr dbgwcr6_el1, x11 - msr dbgwcr5_el1, x10 - msr dbgwcr4_el1, x9 - msr dbgwcr3_el1, x8 - msr dbgwcr2_el1, x7 - msr dbgwcr1_el1, x6 - msr dbgwcr0_el1, x5 - - add x3, x2, #CPU_SYSREG_OFFSET(DBGWVR0_EL1) - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 -1: - ldr x20, [x3, #(15 * 8)] - ldr x19, [x3, #(14 * 8)] - ldr x18, [x3, #(13 * 8)] - ldr x17, [x3, #(12 * 8)] - ldr x16, [x3, #(11 * 8)] - ldr x15, [x3, #(10 * 8)] - ldr x14, [x3, #(9 * 8)] - ldr x13, [x3, #(8 * 8)] - ldr x12, [x3, #(7 * 8)] - ldr x11, [x3, #(6 * 8)] - ldr x10, [x3, #(5 * 8)] - ldr x9, [x3, #(4 * 8)] - ldr x8, [x3, #(3 * 8)] - ldr x7, [x3, #(2 * 8)] - ldr x6, [x3, #(1 * 8)] - ldr x5, [x3, #(0 * 8)] - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 -1: - msr dbgwvr15_el1, x20 - msr dbgwvr14_el1, x19 - msr dbgwvr13_el1, x18 - msr dbgwvr12_el1, x17 - msr dbgwvr11_el1, x16 - msr dbgwvr10_el1, x15 - msr dbgwvr9_el1, x14 - msr dbgwvr8_el1, x13 - msr dbgwvr7_el1, x12 - msr dbgwvr6_el1, x11 - msr dbgwvr5_el1, x10 - msr dbgwvr4_el1, x9 - msr dbgwvr3_el1, x8 - msr dbgwvr2_el1, x7 - msr dbgwvr1_el1, x6 - msr dbgwvr0_el1, x5 - - ldr x21, [x2, #CPU_SYSREG_OFFSET(MDCCINT_EL1)] - msr mdccint_el1, x21 + msr \type\()15_el1, x21 + msr \type\()14_el1, x20 + msr \type\()13_el1, x19 + msr \type\()12_el1, x18 + msr \type\()11_el1, x17 + msr \type\()10_el1, x16 + msr \type\()9_el1, x15 + msr \type\()8_el1, x14 + msr \type\()7_el1, x13 + msr \type\()6_el1, x12 + msr \type\()5_el1, x11 + msr \type\()4_el1, x10 + msr \type\()3_el1, x9 + msr \type\()2_el1, x8 + msr \type\()1_el1, x7 + msr \type\()0_el1, x6 .endm .macro skip_32bit_state tmp, target @@ -887,12 +597,65 @@ __restore_sysregs: restore_sysregs ret +/* Save debug state */ __save_debug: - save_debug + // x0: base address for vcpu context + // x2: ptr to current CPU context + // x3: ptr to debug registers + // x4/x5: trashed + + mrs x26, id_aa64dfr0_el1 + ubfx x24, x26, #12, #4 // Extract BRPs + ubfx x25, x26, #20, #4 // Extract WRPs + mov w26, #15 + sub w24, w26, w24 // How many BPs to skip + sub w25, w26, w25 // How many WPs to skip + + mov x5, x24 + add x4, x3, #DEBUG_BCR + save_debug_registers dbgbcr + add x4, x3, #DEBUG_BVR + save_debug_registers dbgbvr + + mov x5, x25 + add x4, x3, #DEBUG_WCR + save_debug_registers dbgwcr + add x4, x3, #DEBUG_WVR + save_debug_registers dbgwvr + + mrs x21, mdccint_el1 + str x21, [x2, #CPU_SYSREG_OFFSET(MDCCINT_EL1)] ret +/* Restore debug state */ __restore_debug: - restore_debug + // x0: base address for cpu context + // x2: ptr to current CPU context + // x3: ptr to debug registers + // x4/x5: trashed + + mrs x26, id_aa64dfr0_el1 + ubfx x24, x26, #12, #4 // Extract BRPs + ubfx x25, x26, #20, #4 // Extract WRPs + mov w26, #15 + sub w24, w26, w24 // How many BPs to skip + sub w25, w26, w25 // How many WPs to skip + + mov x5, x24 + add x4, x3, #DEBUG_BCR + setup_debug_registers dbgbcr + add x4, x3, #DEBUG_BVR + setup_debug_registers dbgbvr + + mov x5, x25 + add x4, x3, #DEBUG_WCR + setup_debug_registers dbgwcr + add x4, x3, #DEBUG_WVR + setup_debug_registers dbgwvr + + ldr x21, [x2, #CPU_SYSREG_OFFSET(MDCCINT_EL1)] + msr mdccint_el1, x21 + ret __save_fpsimd: @@ -927,6 +690,7 @@ ENTRY(__kvm_vcpu_run) bl __save_sysregs compute_debug_state 1f + add x3, x2, #CPU_SYSREG_OFFSET(DBGBCR0_EL1) bl __save_debug 1: activate_traps @@ -942,6 +706,7 @@ ENTRY(__kvm_vcpu_run) bl __restore_fpsimd skip_debug_state x3, 1f + add x3, x2, #CPU_SYSREG_OFFSET(DBGBCR0_EL1) bl __restore_debug 1: restore_guest_32bit_state @@ -962,6 +727,7 @@ __kvm_vcpu_return: bl __save_sysregs skip_debug_state x3, 1f + add x3, x2, #CPU_SYSREG_OFFSET(DBGBCR0_EL1) bl __save_debug 1: save_guest_32bit_state @@ -984,6 +750,7 @@ __kvm_vcpu_return: // already been saved. Note that we nuke the whole 64bit word. // If we ever add more flags, we'll have to be more careful... str xzr, [x0, #VCPU_DEBUG_FLAGS] + add x3, x2, #CPU_SYSREG_OFFSET(DBGBCR0_EL1) bl __restore_debug 1: restore_host_regs -- 2.3.5 From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [PATCH v3 08/12] KVM: arm64: re-factor hyp.S debug register code Date: Thu, 7 May 2015 10:07:11 +0100 Message-ID: <1430989647-22501-1-git-send-email-alex.bennee@linaro.org> References: <1430929407-3487-1-git-send-email-alex.bennee@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Lorenzo Pieralisi , Catalin Marinas , Richard Weinberger , Ard Biesheuvel , Gleb Natapov , jan.kiszka@siemens.com, Will Deacon , open list , dahi@linux.vnet.ibm.com, Andre Przywara , r65777@freescale.com, bp@suse.de To: kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, christoffer.dall@linaro.org, marc.zyngier@arm.com, peter.maydell@linaro.org, agraf@suse.de, drjones@redhat.com, pbonzini@redhat.com, zhichao.huang@linaro.org Return-path: In-Reply-To: <1430929407-3487-1-git-send-email-alex.bennee@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu List-Id: kvm.vger.kernel.org VGhpcyBpcyBhIHByZS1jdXJzb3IgdG8gc2hhcmluZyB0aGUgY29kZSB3aXRoIHRoZSBndWVzdCBk ZWJ1ZyBzdXBwb3J0LgpUaGlzIHJlcGxhY2VzIHRoZSBiaWcgbWFjcm8gdGhhdCBmaXNoZXMgZGF0 YSBvdXQgb2YgYSBmaXhlZCBsb2NhdGlvbgp3aXRoIGEgbW9yZSBnZW5lcmFsIGhlbHBlciBtYWNy byB0byByZXN0b3JlIGEgc2V0IG9mIGRlYnVnIHJlZ2lzdGVycy4gSXQKdXNlcyBtYWNybyBzdWJz dGl0dXRpb24gc28gaXQgY2FuIGJlIHJlLXVzZWQgZm9yIGRlYnVnIGNvbnRyb2wgYW5kIHZhbHVl CnJlZ2lzdGVycy4gSXQgZG9lcyBob3dldmVyIHJlbHkgb24gdGhlIGRlYnVnIHJlZ2lzdGVycyBi ZWluZyA2NCBiaXQKYWxpZ25lZCAoYXMgdGhleSBoYXBwZW4gdG8gYmUgaW4gdGhlIGh5cCBBQkkp LgoKU2lnbmVkLW9mZi1ieTogQWxleCBCZW5uw6llIDxhbGV4LmJlbm5lZUBsaW5hcm8ub3JnPgoK LS0tCnYzOgogIC0gcmV0dXJuIHRvIHRoZSBwYXRjaCBzZXJpZXMKICAtIGFkZCBzYXZlIGFuZCBy ZXN0b3JlIHRhcmdldHMKICAtIGNoYW5nZSByZWdpc3RlciB1c2UgYW5kIGRvY3VtZW50CgpkaWZm IC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvYXJtNjQva2Vy bmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggZGZiMjVhMi4uY2U3YjdkZCAxMDA2NDQKLS0tIGEvYXJj aC9hcm02NC9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9hc20t b2Zmc2V0cy5jCkBAIC0xMTYsNiArMTE2LDEwIEBAIGludCBtYWluKHZvaWQpCiAgIERFRklORShW Q1BVX0ZBUl9FTDIsCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guZmF1bHQuZmFyX2Vs MikpOwogICBERUZJTkUoVkNQVV9IUEZBUl9FTDIsCW9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwg YXJjaC5mYXVsdC5ocGZhcl9lbDIpKTsKICAgREVGSU5FKFZDUFVfREVCVUdfRkxBR1MsCW9mZnNl dG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5kZWJ1Z19mbGFncykpOworICBERUZJTkUoREVCVUdf QkNSLCAJCW9mZnNldG9mKHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCwgZGJnX2JjcikpOwor ICBERUZJTkUoREVCVUdfQlZSLCAJCW9mZnNldG9mKHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJj aCwgZGJnX2J2cikpOworICBERUZJTkUoREVCVUdfV0NSLCAJCW9mZnNldG9mKHN0cnVjdCBrdm1f Z3Vlc3RfZGVidWdfYXJjaCwgZGJnX3djcikpOworICBERUZJTkUoREVCVUdfV1ZSLCAJCW9mZnNl dG9mKHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCwgZGJnX3d2cikpOwogICBERUZJTkUoVkNQ VV9IQ1JfRUwyLAkJb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmhjcl9lbDIpKTsKICAg REVGSU5FKFZDUFVfTURDUl9FTDIsCW9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5tZGNy X2VsMikpOwogICBERUZJTkUoVkNQVV9JUlFfTElORVMsCW9mZnNldG9mKHN0cnVjdCBrdm1fdmNw dSwgYXJjaC5pcnFfbGluZXMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC5TIGIv YXJjaC9hcm02NC9rdm0vaHlwLlMKaW5kZXggMTUxNTlhYS4uZGQ1MWZiMSAxMDA2NDQKLS0tIGEv YXJjaC9hcm02NC9rdm0vaHlwLlMKKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwLlMKQEAgLTIyOCwx OTkgKzIyOCw1MiBAQAogCXN0cAl4MjQsIHgyNSwgW3gzLCAjMTYwXQogLmVuZG0KIAotLm1hY3Jv IHNhdmVfZGVidWcKLQkvLyB4MjogYmFzZSBhZGRyZXNzIGZvciBjcHUgY29udGV4dAotCS8vIHgz OiB0bXAgcmVnaXN0ZXIKLQotCW1ycwl4MjYsIGlkX2FhNjRkZnIwX2VsMQotCXViZngJeDI0LCB4 MjYsICMxMiwgIzQJLy8gRXh0cmFjdCBCUlBzCi0JdWJmeAl4MjUsIHgyNiwgIzIwLCAjNAkvLyBF eHRyYWN0IFdSUHMKLQltb3YJdzI2LCAjMTUKLQlzdWIJdzI0LCB3MjYsIHcyNAkJLy8gSG93IG1h bnkgQlBzIHRvIHNraXAKLQlzdWIJdzI1LCB3MjYsIHcyNQkJLy8gSG93IG1hbnkgV1BzIHRvIHNr aXAKLQotCWFkZAl4MywgeDIsICNDUFVfU1lTUkVHX09GRlNFVChEQkdCQ1IwX0VMMSkKLQotCWFk cgl4MjYsIDFmCi0JYWRkCXgyNiwgeDI2LCB4MjQsIGxzbCAjMgotCWJyCXgyNgotMToKLQltcnMJ eDIwLCBkYmdiY3IxNV9lbDEKLQltcnMJeDE5LCBkYmdiY3IxNF9lbDEKLQltcnMJeDE4LCBkYmdi Y3IxM19lbDEKLQltcnMJeDE3LCBkYmdiY3IxMl9lbDEKLQltcnMJeDE2LCBkYmdiY3IxMV9lbDEK LQltcnMJeDE1LCBkYmdiY3IxMF9lbDEKLQltcnMJeDE0LCBkYmdiY3I5X2VsMQotCW1ycwl4MTMs IGRiZ2JjcjhfZWwxCi0JbXJzCXgxMiwgZGJnYmNyN19lbDEKLQltcnMJeDExLCBkYmdiY3I2X2Vs MQotCW1ycwl4MTAsIGRiZ2JjcjVfZWwxCi0JbXJzCXg5LCBkYmdiY3I0X2VsMQotCW1ycwl4OCwg ZGJnYmNyM19lbDEKLQltcnMJeDcsIGRiZ2JjcjJfZWwxCi0JbXJzCXg2LCBkYmdiY3IxX2VsMQot CW1ycwl4NSwgZGJnYmNyMF9lbDEKLQotCWFkcgl4MjYsIDFmCi0JYWRkCXgyNiwgeDI2LCB4MjQs IGxzbCAjMgotCWJyCXgyNgotCi0xOgotCXN0cgl4MjAsIFt4MywgIygxNSAqIDgpXQotCXN0cgl4 MTksIFt4MywgIygxNCAqIDgpXQotCXN0cgl4MTgsIFt4MywgIygxMyAqIDgpXQotCXN0cgl4MTcs IFt4MywgIygxMiAqIDgpXQotCXN0cgl4MTYsIFt4MywgIygxMSAqIDgpXQotCXN0cgl4MTUsIFt4 MywgIygxMCAqIDgpXQotCXN0cgl4MTQsIFt4MywgIyg5ICogOCldCi0Jc3RyCXgxMywgW3gzLCAj KDggKiA4KV0KLQlzdHIJeDEyLCBbeDMsICMoNyAqIDgpXQotCXN0cgl4MTEsIFt4MywgIyg2ICog OCldCi0Jc3RyCXgxMCwgW3gzLCAjKDUgKiA4KV0KLQlzdHIJeDksIFt4MywgIyg0ICogOCldCi0J c3RyCXg4LCBbeDMsICMoMyAqIDgpXQotCXN0cgl4NywgW3gzLCAjKDIgKiA4KV0KLQlzdHIJeDYs IFt4MywgIygxICogOCldCi0Jc3RyCXg1LCBbeDMsICMoMCAqIDgpXQotCi0JYWRkCXgzLCB4Miwg I0NQVV9TWVNSRUdfT0ZGU0VUKERCR0JWUjBfRUwxKQotCi0JYWRyCXgyNiwgMWYKLQlhZGQJeDI2 LCB4MjYsIHgyNCwgbHNsICMyCi0JYnIJeDI2CisubWFjcm8gc2F2ZV9kZWJ1Z19yZWdpc3RlcnMg dHlwZQorCS8vIHg0OiBwb2ludGVyIHRvIHJlZ2lzdGVyIHNldAorCS8vIHg1OiBudW1iZXIgb2Yg cmVnaXN0ZXJzIHRvIGNvcHkKKwkvLyB4Ni4ueDIyIHRyYXNoZWQKKworCWFkcgl4MjIsIDFmCisJ YWRkCXgyMiwgeDIyLCB4NSwgbHNsICMyCisJYnIJeDIyCiAxOgotCW1ycwl4MjAsIGRiZ2J2cjE1 X2VsMQotCW1ycwl4MTksIGRiZ2J2cjE0X2VsMQotCW1ycwl4MTgsIGRiZ2J2cjEzX2VsMQotCW1y cwl4MTcsIGRiZ2J2cjEyX2VsMQotCW1ycwl4MTYsIGRiZ2J2cjExX2VsMQotCW1ycwl4MTUsIGRi Z2J2cjEwX2VsMQotCW1ycwl4MTQsIGRiZ2J2cjlfZWwxCi0JbXJzCXgxMywgZGJnYnZyOF9lbDEK LQltcnMJeDEyLCBkYmdidnI3X2VsMQotCW1ycwl4MTEsIGRiZ2J2cjZfZWwxCi0JbXJzCXgxMCwg ZGJnYnZyNV9lbDEKLQltcnMJeDksIGRiZ2J2cjRfZWwxCi0JbXJzCXg4LCBkYmdidnIzX2VsMQot CW1ycwl4NywgZGJnYnZyMl9lbDEKLQltcnMJeDYsIGRiZ2J2cjFfZWwxCi0JbXJzCXg1LCBkYmdi dnIwX2VsMQotCi0JYWRyCXgyNiwgMWYKLQlhZGQJeDI2LCB4MjYsIHgyNCwgbHNsICMyCi0JYnIJ eDI2Ci0KLTE6Ci0Jc3RyCXgyMCwgW3gzLCAjKDE1ICogOCldCi0Jc3RyCXgxOSwgW3gzLCAjKDE0 ICogOCldCi0Jc3RyCXgxOCwgW3gzLCAjKDEzICogOCldCi0Jc3RyCXgxNywgW3gzLCAjKDEyICog OCldCi0Jc3RyCXgxNiwgW3gzLCAjKDExICogOCldCi0Jc3RyCXgxNSwgW3gzLCAjKDEwICogOCld Ci0Jc3RyCXgxNCwgW3gzLCAjKDkgKiA4KV0KLQlzdHIJeDEzLCBbeDMsICMoOCAqIDgpXQotCXN0 cgl4MTIsIFt4MywgIyg3ICogOCldCi0Jc3RyCXgxMSwgW3gzLCAjKDYgKiA4KV0KLQlzdHIJeDEw LCBbeDMsICMoNSAqIDgpXQotCXN0cgl4OSwgW3gzLCAjKDQgKiA4KV0KLQlzdHIJeDgsIFt4Mywg IygzICogOCldCi0Jc3RyCXg3LCBbeDMsICMoMiAqIDgpXQotCXN0cgl4NiwgW3gzLCAjKDEgKiA4 KV0KLQlzdHIJeDUsIFt4MywgIygwICogOCldCi0KLQlhZGQJeDMsIHgyLCAjQ1BVX1NZU1JFR19P RkZTRVQoREJHV0NSMF9FTDEpCi0KLQlhZHIJeDI2LCAxZgotCWFkZAl4MjYsIHgyNiwgeDI1LCBs c2wgIzIKLQlicgl4MjYKLTE6Ci0JbXJzCXgyMCwgZGJnd2NyMTVfZWwxCi0JbXJzCXgxOSwgZGJn d2NyMTRfZWwxCi0JbXJzCXgxOCwgZGJnd2NyMTNfZWwxCi0JbXJzCXgxNywgZGJnd2NyMTJfZWwx Ci0JbXJzCXgxNiwgZGJnd2NyMTFfZWwxCi0JbXJzCXgxNSwgZGJnd2NyMTBfZWwxCi0JbXJzCXgx NCwgZGJnd2NyOV9lbDEKLQltcnMJeDEzLCBkYmd3Y3I4X2VsMQotCW1ycwl4MTIsIGRiZ3djcjdf ZWwxCi0JbXJzCXgxMSwgZGJnd2NyNl9lbDEKLQltcnMJeDEwLCBkYmd3Y3I1X2VsMQotCW1ycwl4 OSwgZGJnd2NyNF9lbDEKLQltcnMJeDgsIGRiZ3djcjNfZWwxCi0JbXJzCXg3LCBkYmd3Y3IyX2Vs MQotCW1ycwl4NiwgZGJnd2NyMV9lbDEKLQltcnMJeDUsIGRiZ3djcjBfZWwxCi0KLQlhZHIJeDI2 LCAxZgotCWFkZAl4MjYsIHgyNiwgeDI1LCBsc2wgIzIKLQlicgl4MjYKLQorCW1ycwl4MjEsIFx0 eXBlXCgpMTVfZWwxCisJbXJzCXgyMCwgXHR5cGVcKCkxNF9lbDEKKwltcnMJeDE5LCBcdHlwZVwo KTEzX2VsMQorCW1ycwl4MTgsIFx0eXBlXCgpMTJfZWwxCisJbXJzCXgxNywgXHR5cGVcKCkxMV9l bDEKKwltcnMJeDE2LCBcdHlwZVwoKTEwX2VsMQorCW1ycwl4MTUsIFx0eXBlXCgpOV9lbDEKKwlt cnMJeDE0LCBcdHlwZVwoKThfZWwxCisJbXJzCXgxMywgXHR5cGVcKCk3X2VsMQorCW1ycwl4MTIs IFx0eXBlXCgpNl9lbDEKKwltcnMJeDExLCBcdHlwZVwoKTVfZWwxCisJbXJzCXgxMCwgXHR5cGVc KCk0X2VsMQorCW1ycwl4OSwgXHR5cGVcKCkzX2VsMQorCW1ycwl4OCwgXHR5cGVcKCkyX2VsMQor CW1ycwl4NywgXHR5cGVcKCkxX2VsMQorCW1ycwl4NiwgXHR5cGVcKCkwX2VsMQorCisJYWRyCXgy MiwgMWYKKwlhZGQJeDIyLCB4MjIsIHg1LCBsc2wgIzIKKwlicgl4MjIKIDE6Ci0Jc3RyCXgyMCwg W3gzLCAjKDE1ICogOCldCi0Jc3RyCXgxOSwgW3gzLCAjKDE0ICogOCldCi0Jc3RyCXgxOCwgW3gz LCAjKDEzICogOCldCi0Jc3RyCXgxNywgW3gzLCAjKDEyICogOCldCi0Jc3RyCXgxNiwgW3gzLCAj KDExICogOCldCi0Jc3RyCXgxNSwgW3gzLCAjKDEwICogOCldCi0Jc3RyCXgxNCwgW3gzLCAjKDkg KiA4KV0KLQlzdHIJeDEzLCBbeDMsICMoOCAqIDgpXQotCXN0cgl4MTIsIFt4MywgIyg3ICogOCld Ci0Jc3RyCXgxMSwgW3gzLCAjKDYgKiA4KV0KLQlzdHIJeDEwLCBbeDMsICMoNSAqIDgpXQotCXN0 cgl4OSwgW3gzLCAjKDQgKiA4KV0KLQlzdHIJeDgsIFt4MywgIygzICogOCldCi0Jc3RyCXg3LCBb eDMsICMoMiAqIDgpXQotCXN0cgl4NiwgW3gzLCAjKDEgKiA4KV0KLQlzdHIJeDUsIFt4MywgIygw ICogOCldCi0KLQlhZGQJeDMsIHgyLCAjQ1BVX1NZU1JFR19PRkZTRVQoREJHV1ZSMF9FTDEpCi0K LQlhZHIJeDI2LCAxZgotCWFkZAl4MjYsIHgyNiwgeDI1LCBsc2wgIzIKLQlicgl4MjYKLTE6Ci0J bXJzCXgyMCwgZGJnd3ZyMTVfZWwxCi0JbXJzCXgxOSwgZGJnd3ZyMTRfZWwxCi0JbXJzCXgxOCwg ZGJnd3ZyMTNfZWwxCi0JbXJzCXgxNywgZGJnd3ZyMTJfZWwxCi0JbXJzCXgxNiwgZGJnd3ZyMTFf ZWwxCi0JbXJzCXgxNSwgZGJnd3ZyMTBfZWwxCi0JbXJzCXgxNCwgZGJnd3ZyOV9lbDEKLQltcnMJ eDEzLCBkYmd3dnI4X2VsMQotCW1ycwl4MTIsIGRiZ3d2cjdfZWwxCi0JbXJzCXgxMSwgZGJnd3Zy Nl9lbDEKLQltcnMJeDEwLCBkYmd3dnI1X2VsMQotCW1ycwl4OSwgZGJnd3ZyNF9lbDEKLQltcnMJ eDgsIGRiZ3d2cjNfZWwxCi0JbXJzCXg3LCBkYmd3dnIyX2VsMQotCW1ycwl4NiwgZGJnd3ZyMV9l bDEKLQltcnMJeDUsIGRiZ3d2cjBfZWwxCi0KLQlhZHIJeDI2LCAxZgotCWFkZAl4MjYsIHgyNiwg eDI1LCBsc2wgIzIKLQlicgl4MjYKLQotMToKLQlzdHIJeDIwLCBbeDMsICMoMTUgKiA4KV0KLQlz dHIJeDE5LCBbeDMsICMoMTQgKiA4KV0KLQlzdHIJeDE4LCBbeDMsICMoMTMgKiA4KV0KLQlzdHIJ eDE3LCBbeDMsICMoMTIgKiA4KV0KLQlzdHIJeDE2LCBbeDMsICMoMTEgKiA4KV0KLQlzdHIJeDE1 LCBbeDMsICMoMTAgKiA4KV0KLQlzdHIJeDE0LCBbeDMsICMoOSAqIDgpXQotCXN0cgl4MTMsIFt4 MywgIyg4ICogOCldCi0Jc3RyCXgxMiwgW3gzLCAjKDcgKiA4KV0KLQlzdHIJeDExLCBbeDMsICMo NiAqIDgpXQotCXN0cgl4MTAsIFt4MywgIyg1ICogOCldCi0Jc3RyCXg5LCBbeDMsICMoNCAqIDgp XQotCXN0cgl4OCwgW3gzLCAjKDMgKiA4KV0KLQlzdHIJeDcsIFt4MywgIygyICogOCldCi0Jc3Ry CXg2LCBbeDMsICMoMSAqIDgpXQotCXN0cgl4NSwgW3gzLCAjKDAgKiA4KV0KLQotCW1ycwl4MjEs IG1kY2NpbnRfZWwxCi0Jc3RyCXgyMSwgW3gyLCAjQ1BVX1NZU1JFR19PRkZTRVQoTURDQ0lOVF9F TDEpXQorCXN0cgl4MjEsIFt4NCwgIygxNSAqIDgpXQorCXN0cgl4MjAsIFt4NCwgIygxNCAqIDgp XQorCXN0cgl4MTksIFt4NCwgIygxMyAqIDgpXQorCXN0cgl4MTgsIFt4NCwgIygxMiAqIDgpXQor CXN0cgl4MTcsIFt4NCwgIygxMSAqIDgpXQorCXN0cgl4MTYsIFt4NCwgIygxMCAqIDgpXQorCXN0 cgl4MTUsIFt4NCwgIyg5ICogOCldCisJc3RyCXgxNCwgW3g0LCAjKDggKiA4KV0KKwlzdHIJeDEz LCBbeDQsICMoNyAqIDgpXQorCXN0cgl4MTIsIFt4NCwgIyg2ICogOCldCisJc3RyCXgxMSwgW3g0 LCAjKDUgKiA4KV0KKwlzdHIJeDEwLCBbeDQsICMoNCAqIDgpXQorCXN0cgl4OSwgW3g0LCAjKDMg KiA4KV0KKwlzdHIJeDgsIFt4NCwgIygyICogOCldCisJc3RyCXg3LCBbeDQsICMoMSAqIDgpXQor CXN0cgl4NiwgW3g0LCAjKDAgKiA4KV0KIC5lbmRtCiAKIC5tYWNybyByZXN0b3JlX3N5c3JlZ3MK QEAgLTQ2NSwxOTUgKzMxOCw1MiBAQAogCW1zcgltZHNjcl9lbDEsCXgyNQogLmVuZG0KIAotLm1h Y3JvIHJlc3RvcmVfZGVidWcKLQkvLyB4MjogYmFzZSBhZGRyZXNzIGZvciBjcHUgY29udGV4dAot CS8vIHgzOiB0bXAgcmVnaXN0ZXIKLQotCW1ycwl4MjYsIGlkX2FhNjRkZnIwX2VsMQotCXViZngJ eDI0LCB4MjYsICMxMiwgIzQJLy8gRXh0cmFjdCBCUlBzCi0JdWJmeAl4MjUsIHgyNiwgIzIwLCAj NAkvLyBFeHRyYWN0IFdSUHMKLQltb3YJdzI2LCAjMTUKLQlzdWIJdzI0LCB3MjYsIHcyNAkJLy8g SG93IG1hbnkgQlBzIHRvIHNraXAKLQlzdWIJdzI1LCB3MjYsIHcyNQkJLy8gSG93IG1hbnkgV1Bz IHRvIHNraXAKLQotCWFkZAl4MywgeDIsICNDUFVfU1lTUkVHX09GRlNFVChEQkdCQ1IwX0VMMSkK Ky5tYWNybyBzZXR1cF9kZWJ1Z19yZWdpc3RlcnMgdHlwZQorICAgICAgICAvLyB4NDogcG9pbnRl ciB0byByZWdpc3RlciBzZXQKKyAgICAgICAgLy8geDU6IG51bWJlciBvZiByZWdpc3RlcnMgdG8g Y29weQorCS8vIHg2Li54MjIgdHJhc2hlZAogCi0JYWRyCXgyNiwgMWYKLQlhZGQJeDI2LCB4MjYs IHgyNCwgbHNsICMyCi0JYnIJeDI2Ci0xOgotCWxkcgl4MjAsIFt4MywgIygxNSAqIDgpXQotCWxk cgl4MTksIFt4MywgIygxNCAqIDgpXQotCWxkcgl4MTgsIFt4MywgIygxMyAqIDgpXQotCWxkcgl4 MTcsIFt4MywgIygxMiAqIDgpXQotCWxkcgl4MTYsIFt4MywgIygxMSAqIDgpXQotCWxkcgl4MTUs IFt4MywgIygxMCAqIDgpXQotCWxkcgl4MTQsIFt4MywgIyg5ICogOCldCi0JbGRyCXgxMywgW3gz LCAjKDggKiA4KV0KLQlsZHIJeDEyLCBbeDMsICMoNyAqIDgpXQotCWxkcgl4MTEsIFt4MywgIyg2 ICogOCldCi0JbGRyCXgxMCwgW3gzLCAjKDUgKiA4KV0KLQlsZHIJeDksIFt4MywgIyg0ICogOCld Ci0JbGRyCXg4LCBbeDMsICMoMyAqIDgpXQotCWxkcgl4NywgW3gzLCAjKDIgKiA4KV0KLQlsZHIJ eDYsIFt4MywgIygxICogOCldCi0JbGRyCXg1LCBbeDMsICMoMCAqIDgpXQotCi0JYWRyCXgyNiwg MWYKLQlhZGQJeDI2LCB4MjYsIHgyNCwgbHNsICMyCi0JYnIJeDI2CisJYWRyCXgyMiwgMWYKKwlh ZGQJeDIyLCB4MjIsIHg1LCBsc2wgIzIKKwlicgl4MjIKIDE6Ci0JbXNyCWRiZ2JjcjE1X2VsMSwg eDIwCi0JbXNyCWRiZ2JjcjE0X2VsMSwgeDE5Ci0JbXNyCWRiZ2JjcjEzX2VsMSwgeDE4Ci0JbXNy CWRiZ2JjcjEyX2VsMSwgeDE3Ci0JbXNyCWRiZ2JjcjExX2VsMSwgeDE2Ci0JbXNyCWRiZ2JjcjEw X2VsMSwgeDE1Ci0JbXNyCWRiZ2JjcjlfZWwxLCB4MTQKLQltc3IJZGJnYmNyOF9lbDEsIHgxMwot CW1zcglkYmdiY3I3X2VsMSwgeDEyCi0JbXNyCWRiZ2JjcjZfZWwxLCB4MTEKLQltc3IJZGJnYmNy NV9lbDEsIHgxMAotCW1zcglkYmdiY3I0X2VsMSwgeDkKLQltc3IJZGJnYmNyM19lbDEsIHg4Ci0J bXNyCWRiZ2JjcjJfZWwxLCB4NwotCW1zcglkYmdiY3IxX2VsMSwgeDYKLQltc3IJZGJnYmNyMF9l bDEsIHg1Ci0KLQlhZGQJeDMsIHgyLCAjQ1BVX1NZU1JFR19PRkZTRVQoREJHQlZSMF9FTDEpCi0K LQlhZHIJeDI2LCAxZgotCWFkZAl4MjYsIHgyNiwgeDI0LCBsc2wgIzIKLQlicgl4MjYKKwlsZHIJ eDIxLCBbeDQsICMoMTUgKiA4KV0KKwlsZHIJeDIwLCBbeDQsICMoMTQgKiA4KV0KKwlsZHIJeDE5 LCBbeDQsICMoMTMgKiA4KV0KKwlsZHIJeDE4LCBbeDQsICMoMTIgKiA4KV0KKwlsZHIJeDE3LCBb eDQsICMoMTEgKiA4KV0KKwlsZHIJeDE2LCBbeDQsICMoMTAgKiA4KV0KKwlsZHIJeDE1LCBbeDQs ICMoOSAqIDgpXQorCWxkcgl4MTQsIFt4NCwgIyg4ICogOCldCisJbGRyCXgxMywgW3g0LCAjKDcg KiA4KV0KKwlsZHIJeDEyLCBbeDQsICMoNiAqIDgpXQorCWxkcgl4MTEsIFt4NCwgIyg1ICogOCld CisJbGRyCXgxMCwgW3g0LCAjKDQgKiA4KV0KKwlsZHIJeDksIFt4NCwgIygzICogOCldCisJbGRy CXg4LCBbeDQsICMoMiAqIDgpXQorCWxkcgl4NywgW3g0LCAjKDEgKiA4KV0KKwlsZHIJeDYsIFt4 NCwgIygwICogOCldCisKKwlhZHIJeDIyLCAxZgorCWFkZAl4MjIsIHgyMiwgeDUsIGxzbCAjMgor CWJyCXgyMgogMToKLQlsZHIJeDIwLCBbeDMsICMoMTUgKiA4KV0KLQlsZHIJeDE5LCBbeDMsICMo MTQgKiA4KV0KLQlsZHIJeDE4LCBbeDMsICMoMTMgKiA4KV0KLQlsZHIJeDE3LCBbeDMsICMoMTIg KiA4KV0KLQlsZHIJeDE2LCBbeDMsICMoMTEgKiA4KV0KLQlsZHIJeDE1LCBbeDMsICMoMTAgKiA4 KV0KLQlsZHIJeDE0LCBbeDMsICMoOSAqIDgpXQotCWxkcgl4MTMsIFt4MywgIyg4ICogOCldCi0J bGRyCXgxMiwgW3gzLCAjKDcgKiA4KV0KLQlsZHIJeDExLCBbeDMsICMoNiAqIDgpXQotCWxkcgl4 MTAsIFt4MywgIyg1ICogOCldCi0JbGRyCXg5LCBbeDMsICMoNCAqIDgpXQotCWxkcgl4OCwgW3gz LCAjKDMgKiA4KV0KLQlsZHIJeDcsIFt4MywgIygyICogOCldCi0JbGRyCXg2LCBbeDMsICMoMSAq IDgpXQotCWxkcgl4NSwgW3gzLCAjKDAgKiA4KV0KLQotCWFkcgl4MjYsIDFmCi0JYWRkCXgyNiwg eDI2LCB4MjQsIGxzbCAjMgotCWJyCXgyNgotMToKLQltc3IJZGJnYnZyMTVfZWwxLCB4MjAKLQlt c3IJZGJnYnZyMTRfZWwxLCB4MTkKLQltc3IJZGJnYnZyMTNfZWwxLCB4MTgKLQltc3IJZGJnYnZy MTJfZWwxLCB4MTcKLQltc3IJZGJnYnZyMTFfZWwxLCB4MTYKLQltc3IJZGJnYnZyMTBfZWwxLCB4 MTUKLQltc3IJZGJnYnZyOV9lbDEsIHgxNAotCW1zcglkYmdidnI4X2VsMSwgeDEzCi0JbXNyCWRi Z2J2cjdfZWwxLCB4MTIKLQltc3IJZGJnYnZyNl9lbDEsIHgxMQotCW1zcglkYmdidnI1X2VsMSwg eDEwCi0JbXNyCWRiZ2J2cjRfZWwxLCB4OQotCW1zcglkYmdidnIzX2VsMSwgeDgKLQltc3IJZGJn YnZyMl9lbDEsIHg3Ci0JbXNyCWRiZ2J2cjFfZWwxLCB4NgotCW1zcglkYmdidnIwX2VsMSwgeDUK LQotCWFkZAl4MywgeDIsICNDUFVfU1lTUkVHX09GRlNFVChEQkdXQ1IwX0VMMSkKLQotCWFkcgl4 MjYsIDFmCi0JYWRkCXgyNiwgeDI2LCB4MjUsIGxzbCAjMgotCWJyCXgyNgotMToKLQlsZHIJeDIw LCBbeDMsICMoMTUgKiA4KV0KLQlsZHIJeDE5LCBbeDMsICMoMTQgKiA4KV0KLQlsZHIJeDE4LCBb eDMsICMoMTMgKiA4KV0KLQlsZHIJeDE3LCBbeDMsICMoMTIgKiA4KV0KLQlsZHIJeDE2LCBbeDMs ICMoMTEgKiA4KV0KLQlsZHIJeDE1LCBbeDMsICMoMTAgKiA4KV0KLQlsZHIJeDE0LCBbeDMsICMo OSAqIDgpXQotCWxkcgl4MTMsIFt4MywgIyg4ICogOCldCi0JbGRyCXgxMiwgW3gzLCAjKDcgKiA4 KV0KLQlsZHIJeDExLCBbeDMsICMoNiAqIDgpXQotCWxkcgl4MTAsIFt4MywgIyg1ICogOCldCi0J bGRyCXg5LCBbeDMsICMoNCAqIDgpXQotCWxkcgl4OCwgW3gzLCAjKDMgKiA4KV0KLQlsZHIJeDcs IFt4MywgIygyICogOCldCi0JbGRyCXg2LCBbeDMsICMoMSAqIDgpXQotCWxkcgl4NSwgW3gzLCAj KDAgKiA4KV0KLQotCWFkcgl4MjYsIDFmCi0JYWRkCXgyNiwgeDI2LCB4MjUsIGxzbCAjMgotCWJy CXgyNgotMToKLQltc3IJZGJnd2NyMTVfZWwxLCB4MjAKLQltc3IJZGJnd2NyMTRfZWwxLCB4MTkK LQltc3IJZGJnd2NyMTNfZWwxLCB4MTgKLQltc3IJZGJnd2NyMTJfZWwxLCB4MTcKLQltc3IJZGJn d2NyMTFfZWwxLCB4MTYKLQltc3IJZGJnd2NyMTBfZWwxLCB4MTUKLQltc3IJZGJnd2NyOV9lbDEs IHgxNAotCW1zcglkYmd3Y3I4X2VsMSwgeDEzCi0JbXNyCWRiZ3djcjdfZWwxLCB4MTIKLQltc3IJ ZGJnd2NyNl9lbDEsIHgxMQotCW1zcglkYmd3Y3I1X2VsMSwgeDEwCi0JbXNyCWRiZ3djcjRfZWwx LCB4OQotCW1zcglkYmd3Y3IzX2VsMSwgeDgKLQltc3IJZGJnd2NyMl9lbDEsIHg3Ci0JbXNyCWRi Z3djcjFfZWwxLCB4NgotCW1zcglkYmd3Y3IwX2VsMSwgeDUKLQotCWFkZAl4MywgeDIsICNDUFVf U1lTUkVHX09GRlNFVChEQkdXVlIwX0VMMSkKLQotCWFkcgl4MjYsIDFmCi0JYWRkCXgyNiwgeDI2 LCB4MjUsIGxzbCAjMgotCWJyCXgyNgotMToKLQlsZHIJeDIwLCBbeDMsICMoMTUgKiA4KV0KLQls ZHIJeDE5LCBbeDMsICMoMTQgKiA4KV0KLQlsZHIJeDE4LCBbeDMsICMoMTMgKiA4KV0KLQlsZHIJ eDE3LCBbeDMsICMoMTIgKiA4KV0KLQlsZHIJeDE2LCBbeDMsICMoMTEgKiA4KV0KLQlsZHIJeDE1 LCBbeDMsICMoMTAgKiA4KV0KLQlsZHIJeDE0LCBbeDMsICMoOSAqIDgpXQotCWxkcgl4MTMsIFt4 MywgIyg4ICogOCldCi0JbGRyCXgxMiwgW3gzLCAjKDcgKiA4KV0KLQlsZHIJeDExLCBbeDMsICMo NiAqIDgpXQotCWxkcgl4MTAsIFt4MywgIyg1ICogOCldCi0JbGRyCXg5LCBbeDMsICMoNCAqIDgp XQotCWxkcgl4OCwgW3gzLCAjKDMgKiA4KV0KLQlsZHIJeDcsIFt4MywgIygyICogOCldCi0JbGRy CXg2LCBbeDMsICMoMSAqIDgpXQotCWxkcgl4NSwgW3gzLCAjKDAgKiA4KV0KLQotCWFkcgl4MjYs IDFmCi0JYWRkCXgyNiwgeDI2LCB4MjUsIGxzbCAjMgotCWJyCXgyNgotMToKLQltc3IJZGJnd3Zy MTVfZWwxLCB4MjAKLQltc3IJZGJnd3ZyMTRfZWwxLCB4MTkKLQltc3IJZGJnd3ZyMTNfZWwxLCB4 MTgKLQltc3IJZGJnd3ZyMTJfZWwxLCB4MTcKLQltc3IJZGJnd3ZyMTFfZWwxLCB4MTYKLQltc3IJ ZGJnd3ZyMTBfZWwxLCB4MTUKLQltc3IJZGJnd3ZyOV9lbDEsIHgxNAotCW1zcglkYmd3dnI4X2Vs MSwgeDEzCi0JbXNyCWRiZ3d2cjdfZWwxLCB4MTIKLQltc3IJZGJnd3ZyNl9lbDEsIHgxMQotCW1z cglkYmd3dnI1X2VsMSwgeDEwCi0JbXNyCWRiZ3d2cjRfZWwxLCB4OQotCW1zcglkYmd3dnIzX2Vs MSwgeDgKLQltc3IJZGJnd3ZyMl9lbDEsIHg3Ci0JbXNyCWRiZ3d2cjFfZWwxLCB4NgotCW1zcglk Ymd3dnIwX2VsMSwgeDUKLQotCWxkcgl4MjEsIFt4MiwgI0NQVV9TWVNSRUdfT0ZGU0VUKE1EQ0NJ TlRfRUwxKV0KLQltc3IJbWRjY2ludF9lbDEsIHgyMQorCW1zcglcdHlwZVwoKTE1X2VsMSwgeDIx CisJbXNyCVx0eXBlXCgpMTRfZWwxLCB4MjAKKwltc3IJXHR5cGVcKCkxM19lbDEsIHgxOQorCW1z cglcdHlwZVwoKTEyX2VsMSwgeDE4CisJbXNyCVx0eXBlXCgpMTFfZWwxLCB4MTcKKwltc3IJXHR5 cGVcKCkxMF9lbDEsIHgxNgorCW1zcglcdHlwZVwoKTlfZWwxLCB4MTUKKwltc3IJXHR5cGVcKCk4 X2VsMSwgeDE0CisJbXNyCVx0eXBlXCgpN19lbDEsIHgxMworCW1zcglcdHlwZVwoKTZfZWwxLCB4 MTIKKwltc3IJXHR5cGVcKCk1X2VsMSwgeDExCisJbXNyCVx0eXBlXCgpNF9lbDEsIHgxMAorCW1z cglcdHlwZVwoKTNfZWwxLCB4OQorCW1zcglcdHlwZVwoKTJfZWwxLCB4OAorCW1zcglcdHlwZVwo KTFfZWwxLCB4NworCW1zcglcdHlwZVwoKTBfZWwxLCB4NgogLmVuZG0KIAogLm1hY3JvIHNraXBf MzJiaXRfc3RhdGUgdG1wLCB0YXJnZXQKQEAgLTg4NywxMiArNTk3LDY1IEBAIF9fcmVzdG9yZV9z eXNyZWdzOgogCXJlc3RvcmVfc3lzcmVncwogCXJldAogCisvKiBTYXZlIGRlYnVnIHN0YXRlICov CiBfX3NhdmVfZGVidWc6Ci0Jc2F2ZV9kZWJ1ZworCS8vIHgwOiBiYXNlIGFkZHJlc3MgZm9yIHZj cHUgY29udGV4dAorCS8vIHgyOiBwdHIgdG8gY3VycmVudCBDUFUgY29udGV4dAorCS8vIHgzOiBw dHIgdG8gZGVidWcgcmVnaXN0ZXJzCisJLy8geDQveDU6IHRyYXNoZWQKKworCW1ycwl4MjYsIGlk X2FhNjRkZnIwX2VsMQorCXViZngJeDI0LCB4MjYsICMxMiwgIzQJLy8gRXh0cmFjdCBCUlBzCisJ dWJmeAl4MjUsIHgyNiwgIzIwLCAjNAkvLyBFeHRyYWN0IFdSUHMKKwltb3YJdzI2LCAjMTUKKwlz dWIJdzI0LCB3MjYsIHcyNAkJLy8gSG93IG1hbnkgQlBzIHRvIHNraXAKKwlzdWIJdzI1LCB3MjYs IHcyNQkJLy8gSG93IG1hbnkgV1BzIHRvIHNraXAKKworCW1vdiAgICAgeDUsIHgyNAorCWFkZAl4 NCwgeDMsICNERUJVR19CQ1IKKwlzYXZlX2RlYnVnX3JlZ2lzdGVycyBkYmdiY3IKKwlhZGQJeDQs IHgzLCAjREVCVUdfQlZSCisJc2F2ZV9kZWJ1Z19yZWdpc3RlcnMgZGJnYnZyCisKKwltb3YgICAg IHg1LCB4MjUKKwlhZGQJeDQsIHgzLCAjREVCVUdfV0NSCisJc2F2ZV9kZWJ1Z19yZWdpc3RlcnMg ZGJnd2NyCisJYWRkCXg0LCB4MywgI0RFQlVHX1dWUgorCXNhdmVfZGVidWdfcmVnaXN0ZXJzIGRi Z3d2cgorCisJbXJzCXgyMSwgbWRjY2ludF9lbDEKKwlzdHIJeDIxLCBbeDIsICNDUFVfU1lTUkVH X09GRlNFVChNRENDSU5UX0VMMSldCiAJcmV0CiAKKy8qIFJlc3RvcmUgZGVidWcgc3RhdGUgKi8K IF9fcmVzdG9yZV9kZWJ1ZzoKLQlyZXN0b3JlX2RlYnVnCisJLy8geDA6IGJhc2UgYWRkcmVzcyBm b3IgY3B1IGNvbnRleHQKKwkvLyB4MjogcHRyIHRvIGN1cnJlbnQgQ1BVIGNvbnRleHQKKwkvLyB4 MzogcHRyIHRvIGRlYnVnIHJlZ2lzdGVycworCS8vIHg0L3g1OiB0cmFzaGVkCisKKwltcnMJeDI2 LCBpZF9hYTY0ZGZyMF9lbDEKKwl1YmZ4CXgyNCwgeDI2LCAjMTIsICM0CS8vIEV4dHJhY3QgQlJQ cworCXViZngJeDI1LCB4MjYsICMyMCwgIzQJLy8gRXh0cmFjdCBXUlBzCisJbW92CXcyNiwgIzE1 CisJc3ViCXcyNCwgdzI2LCB3MjQJCS8vIEhvdyBtYW55IEJQcyB0byBza2lwCisJc3ViCXcyNSwg dzI2LCB3MjUJCS8vIEhvdyBtYW55IFdQcyB0byBza2lwCisKKwltb3YgICAgIHg1LCB4MjQKKwlh ZGQJeDQsIHgzLCAjREVCVUdfQkNSCisJc2V0dXBfZGVidWdfcmVnaXN0ZXJzIGRiZ2JjcgorCWFk ZAl4NCwgeDMsICNERUJVR19CVlIKKwlzZXR1cF9kZWJ1Z19yZWdpc3RlcnMgZGJnYnZyCisKKwlt b3YgICAgIHg1LCB4MjUKKwlhZGQJeDQsIHgzLCAjREVCVUdfV0NSCisJc2V0dXBfZGVidWdfcmVn aXN0ZXJzIGRiZ3djcgorCWFkZAl4NCwgeDMsICNERUJVR19XVlIKKwlzZXR1cF9kZWJ1Z19yZWdp c3RlcnMgZGJnd3ZyCisKKwlsZHIJeDIxLCBbeDIsICNDUFVfU1lTUkVHX09GRlNFVChNRENDSU5U X0VMMSldCisJbXNyCW1kY2NpbnRfZWwxLCB4MjEKKwogCXJldAogCiBfX3NhdmVfZnBzaW1kOgpA QCAtOTI3LDYgKzY5MCw3IEBAIEVOVFJZKF9fa3ZtX3ZjcHVfcnVuKQogCWJsIF9fc2F2ZV9zeXNy ZWdzCiAKIAljb21wdXRlX2RlYnVnX3N0YXRlIDFmCisJYWRkCXgzLCB4MiwgI0NQVV9TWVNSRUdf T0ZGU0VUKERCR0JDUjBfRUwxKQogCWJsCV9fc2F2ZV9kZWJ1ZwogMToKIAlhY3RpdmF0ZV90cmFw cwpAQCAtOTQyLDYgKzcwNiw3IEBAIEVOVFJZKF9fa3ZtX3ZjcHVfcnVuKQogCWJsIF9fcmVzdG9y ZV9mcHNpbWQKIAogCXNraXBfZGVidWdfc3RhdGUgeDMsIDFmCisJYWRkCXgzLCB4MiwgI0NQVV9T WVNSRUdfT0ZGU0VUKERCR0JDUjBfRUwxKQogCWJsCV9fcmVzdG9yZV9kZWJ1ZwogMToKIAlyZXN0 b3JlX2d1ZXN0XzMyYml0X3N0YXRlCkBAIC05NjIsNiArNzI3LDcgQEAgX19rdm1fdmNwdV9yZXR1 cm46CiAJYmwgX19zYXZlX3N5c3JlZ3MKIAogCXNraXBfZGVidWdfc3RhdGUgeDMsIDFmCisJYWRk CXgzLCB4MiwgI0NQVV9TWVNSRUdfT0ZGU0VUKERCR0JDUjBfRUwxKQogCWJsCV9fc2F2ZV9kZWJ1 ZwogMToKIAlzYXZlX2d1ZXN0XzMyYml0X3N0YXRlCkBAIC05ODQsNiArNzUwLDcgQEAgX19rdm1f dmNwdV9yZXR1cm46CiAJLy8gYWxyZWFkeSBiZWVuIHNhdmVkLiBOb3RlIHRoYXQgd2UgbnVrZSB0 aGUgd2hvbGUgNjRiaXQgd29yZC4KIAkvLyBJZiB3ZSBldmVyIGFkZCBtb3JlIGZsYWdzLCB3ZSds bCBoYXZlIHRvIGJlIG1vcmUgY2FyZWZ1bC4uLgogCXN0cgl4enIsIFt4MCwgI1ZDUFVfREVCVUdf RkxBR1NdCisJYWRkCXgzLCB4MiwgI0NQVV9TWVNSRUdfT0ZGU0VUKERCR0JDUjBfRUwxKQogCWJs CV9fcmVzdG9yZV9kZWJ1ZwogMToKIAlyZXN0b3JlX2hvc3RfcmVncwotLSAKMi4zLjUKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmt2bWFybSBtYWlsaW5n IGxpc3QKa3ZtYXJtQGxpc3RzLmNzLmNvbHVtYmlhLmVkdQpodHRwczovL2xpc3RzLmNzLmNvbHVt YmlhLmVkdS9tYWlsbWFuL2xpc3RpbmZvL2t2bWFybQo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: alex.bennee@linaro.org (=?UTF-8?q?Alex=20Benn=C3=A9e?=) Date: Thu, 7 May 2015 10:07:11 +0100 Subject: [PATCH v3 08/12] KVM: arm64: re-factor hyp.S debug register code In-Reply-To: <1430929407-3487-1-git-send-email-alex.bennee@linaro.org> References: <1430929407-3487-1-git-send-email-alex.bennee@linaro.org> Message-ID: <1430989647-22501-1-git-send-email-alex.bennee@linaro.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org This is a pre-cursor to sharing the code with the guest debug support. This replaces the big macro that fishes data out of a fixed location with a more general helper macro to restore a set of debug registers. It uses macro substitution so it can be re-used for debug control and value registers. It does however rely on the debug registers being 64 bit aligned (as they happen to be in the hyp ABI). Signed-off-by: Alex Benn?e --- v3: - return to the patch series - add save and restore targets - change register use and document diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c index dfb25a2..ce7b7dd 100644 --- a/arch/arm64/kernel/asm-offsets.c +++ b/arch/arm64/kernel/asm-offsets.c @@ -116,6 +116,10 @@ int main(void) DEFINE(VCPU_FAR_EL2, offsetof(struct kvm_vcpu, arch.fault.far_el2)); DEFINE(VCPU_HPFAR_EL2, offsetof(struct kvm_vcpu, arch.fault.hpfar_el2)); DEFINE(VCPU_DEBUG_FLAGS, offsetof(struct kvm_vcpu, arch.debug_flags)); + DEFINE(DEBUG_BCR, offsetof(struct kvm_guest_debug_arch, dbg_bcr)); + DEFINE(DEBUG_BVR, offsetof(struct kvm_guest_debug_arch, dbg_bvr)); + DEFINE(DEBUG_WCR, offsetof(struct kvm_guest_debug_arch, dbg_wcr)); + DEFINE(DEBUG_WVR, offsetof(struct kvm_guest_debug_arch, dbg_wvr)); DEFINE(VCPU_HCR_EL2, offsetof(struct kvm_vcpu, arch.hcr_el2)); DEFINE(VCPU_MDCR_EL2, offsetof(struct kvm_vcpu, arch.mdcr_el2)); DEFINE(VCPU_IRQ_LINES, offsetof(struct kvm_vcpu, arch.irq_lines)); diff --git a/arch/arm64/kvm/hyp.S b/arch/arm64/kvm/hyp.S index 15159aa..dd51fb1 100644 --- a/arch/arm64/kvm/hyp.S +++ b/arch/arm64/kvm/hyp.S @@ -228,199 +228,52 @@ stp x24, x25, [x3, #160] .endm -.macro save_debug - // x2: base address for cpu context - // x3: tmp register - - mrs x26, id_aa64dfr0_el1 - ubfx x24, x26, #12, #4 // Extract BRPs - ubfx x25, x26, #20, #4 // Extract WRPs - mov w26, #15 - sub w24, w26, w24 // How many BPs to skip - sub w25, w26, w25 // How many WPs to skip - - add x3, x2, #CPU_SYSREG_OFFSET(DBGBCR0_EL1) - - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 -1: - mrs x20, dbgbcr15_el1 - mrs x19, dbgbcr14_el1 - mrs x18, dbgbcr13_el1 - mrs x17, dbgbcr12_el1 - mrs x16, dbgbcr11_el1 - mrs x15, dbgbcr10_el1 - mrs x14, dbgbcr9_el1 - mrs x13, dbgbcr8_el1 - mrs x12, dbgbcr7_el1 - mrs x11, dbgbcr6_el1 - mrs x10, dbgbcr5_el1 - mrs x9, dbgbcr4_el1 - mrs x8, dbgbcr3_el1 - mrs x7, dbgbcr2_el1 - mrs x6, dbgbcr1_el1 - mrs x5, dbgbcr0_el1 - - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 - -1: - str x20, [x3, #(15 * 8)] - str x19, [x3, #(14 * 8)] - str x18, [x3, #(13 * 8)] - str x17, [x3, #(12 * 8)] - str x16, [x3, #(11 * 8)] - str x15, [x3, #(10 * 8)] - str x14, [x3, #(9 * 8)] - str x13, [x3, #(8 * 8)] - str x12, [x3, #(7 * 8)] - str x11, [x3, #(6 * 8)] - str x10, [x3, #(5 * 8)] - str x9, [x3, #(4 * 8)] - str x8, [x3, #(3 * 8)] - str x7, [x3, #(2 * 8)] - str x6, [x3, #(1 * 8)] - str x5, [x3, #(0 * 8)] - - add x3, x2, #CPU_SYSREG_OFFSET(DBGBVR0_EL1) - - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 +.macro save_debug_registers type + // x4: pointer to register set + // x5: number of registers to copy + // x6..x22 trashed + + adr x22, 1f + add x22, x22, x5, lsl #2 + br x22 1: - mrs x20, dbgbvr15_el1 - mrs x19, dbgbvr14_el1 - mrs x18, dbgbvr13_el1 - mrs x17, dbgbvr12_el1 - mrs x16, dbgbvr11_el1 - mrs x15, dbgbvr10_el1 - mrs x14, dbgbvr9_el1 - mrs x13, dbgbvr8_el1 - mrs x12, dbgbvr7_el1 - mrs x11, dbgbvr6_el1 - mrs x10, dbgbvr5_el1 - mrs x9, dbgbvr4_el1 - mrs x8, dbgbvr3_el1 - mrs x7, dbgbvr2_el1 - mrs x6, dbgbvr1_el1 - mrs x5, dbgbvr0_el1 - - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 - -1: - str x20, [x3, #(15 * 8)] - str x19, [x3, #(14 * 8)] - str x18, [x3, #(13 * 8)] - str x17, [x3, #(12 * 8)] - str x16, [x3, #(11 * 8)] - str x15, [x3, #(10 * 8)] - str x14, [x3, #(9 * 8)] - str x13, [x3, #(8 * 8)] - str x12, [x3, #(7 * 8)] - str x11, [x3, #(6 * 8)] - str x10, [x3, #(5 * 8)] - str x9, [x3, #(4 * 8)] - str x8, [x3, #(3 * 8)] - str x7, [x3, #(2 * 8)] - str x6, [x3, #(1 * 8)] - str x5, [x3, #(0 * 8)] - - add x3, x2, #CPU_SYSREG_OFFSET(DBGWCR0_EL1) - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 -1: - mrs x20, dbgwcr15_el1 - mrs x19, dbgwcr14_el1 - mrs x18, dbgwcr13_el1 - mrs x17, dbgwcr12_el1 - mrs x16, dbgwcr11_el1 - mrs x15, dbgwcr10_el1 - mrs x14, dbgwcr9_el1 - mrs x13, dbgwcr8_el1 - mrs x12, dbgwcr7_el1 - mrs x11, dbgwcr6_el1 - mrs x10, dbgwcr5_el1 - mrs x9, dbgwcr4_el1 - mrs x8, dbgwcr3_el1 - mrs x7, dbgwcr2_el1 - mrs x6, dbgwcr1_el1 - mrs x5, dbgwcr0_el1 - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 - + mrs x21, \type\()15_el1 + mrs x20, \type\()14_el1 + mrs x19, \type\()13_el1 + mrs x18, \type\()12_el1 + mrs x17, \type\()11_el1 + mrs x16, \type\()10_el1 + mrs x15, \type\()9_el1 + mrs x14, \type\()8_el1 + mrs x13, \type\()7_el1 + mrs x12, \type\()6_el1 + mrs x11, \type\()5_el1 + mrs x10, \type\()4_el1 + mrs x9, \type\()3_el1 + mrs x8, \type\()2_el1 + mrs x7, \type\()1_el1 + mrs x6, \type\()0_el1 + + adr x22, 1f + add x22, x22, x5, lsl #2 + br x22 1: - str x20, [x3, #(15 * 8)] - str x19, [x3, #(14 * 8)] - str x18, [x3, #(13 * 8)] - str x17, [x3, #(12 * 8)] - str x16, [x3, #(11 * 8)] - str x15, [x3, #(10 * 8)] - str x14, [x3, #(9 * 8)] - str x13, [x3, #(8 * 8)] - str x12, [x3, #(7 * 8)] - str x11, [x3, #(6 * 8)] - str x10, [x3, #(5 * 8)] - str x9, [x3, #(4 * 8)] - str x8, [x3, #(3 * 8)] - str x7, [x3, #(2 * 8)] - str x6, [x3, #(1 * 8)] - str x5, [x3, #(0 * 8)] - - add x3, x2, #CPU_SYSREG_OFFSET(DBGWVR0_EL1) - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 -1: - mrs x20, dbgwvr15_el1 - mrs x19, dbgwvr14_el1 - mrs x18, dbgwvr13_el1 - mrs x17, dbgwvr12_el1 - mrs x16, dbgwvr11_el1 - mrs x15, dbgwvr10_el1 - mrs x14, dbgwvr9_el1 - mrs x13, dbgwvr8_el1 - mrs x12, dbgwvr7_el1 - mrs x11, dbgwvr6_el1 - mrs x10, dbgwvr5_el1 - mrs x9, dbgwvr4_el1 - mrs x8, dbgwvr3_el1 - mrs x7, dbgwvr2_el1 - mrs x6, dbgwvr1_el1 - mrs x5, dbgwvr0_el1 - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 - -1: - str x20, [x3, #(15 * 8)] - str x19, [x3, #(14 * 8)] - str x18, [x3, #(13 * 8)] - str x17, [x3, #(12 * 8)] - str x16, [x3, #(11 * 8)] - str x15, [x3, #(10 * 8)] - str x14, [x3, #(9 * 8)] - str x13, [x3, #(8 * 8)] - str x12, [x3, #(7 * 8)] - str x11, [x3, #(6 * 8)] - str x10, [x3, #(5 * 8)] - str x9, [x3, #(4 * 8)] - str x8, [x3, #(3 * 8)] - str x7, [x3, #(2 * 8)] - str x6, [x3, #(1 * 8)] - str x5, [x3, #(0 * 8)] - - mrs x21, mdccint_el1 - str x21, [x2, #CPU_SYSREG_OFFSET(MDCCINT_EL1)] + str x21, [x4, #(15 * 8)] + str x20, [x4, #(14 * 8)] + str x19, [x4, #(13 * 8)] + str x18, [x4, #(12 * 8)] + str x17, [x4, #(11 * 8)] + str x16, [x4, #(10 * 8)] + str x15, [x4, #(9 * 8)] + str x14, [x4, #(8 * 8)] + str x13, [x4, #(7 * 8)] + str x12, [x4, #(6 * 8)] + str x11, [x4, #(5 * 8)] + str x10, [x4, #(4 * 8)] + str x9, [x4, #(3 * 8)] + str x8, [x4, #(2 * 8)] + str x7, [x4, #(1 * 8)] + str x6, [x4, #(0 * 8)] .endm .macro restore_sysregs @@ -465,195 +318,52 @@ msr mdscr_el1, x25 .endm -.macro restore_debug - // x2: base address for cpu context - // x3: tmp register - - mrs x26, id_aa64dfr0_el1 - ubfx x24, x26, #12, #4 // Extract BRPs - ubfx x25, x26, #20, #4 // Extract WRPs - mov w26, #15 - sub w24, w26, w24 // How many BPs to skip - sub w25, w26, w25 // How many WPs to skip - - add x3, x2, #CPU_SYSREG_OFFSET(DBGBCR0_EL1) +.macro setup_debug_registers type + // x4: pointer to register set + // x5: number of registers to copy + // x6..x22 trashed - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 -1: - ldr x20, [x3, #(15 * 8)] - ldr x19, [x3, #(14 * 8)] - ldr x18, [x3, #(13 * 8)] - ldr x17, [x3, #(12 * 8)] - ldr x16, [x3, #(11 * 8)] - ldr x15, [x3, #(10 * 8)] - ldr x14, [x3, #(9 * 8)] - ldr x13, [x3, #(8 * 8)] - ldr x12, [x3, #(7 * 8)] - ldr x11, [x3, #(6 * 8)] - ldr x10, [x3, #(5 * 8)] - ldr x9, [x3, #(4 * 8)] - ldr x8, [x3, #(3 * 8)] - ldr x7, [x3, #(2 * 8)] - ldr x6, [x3, #(1 * 8)] - ldr x5, [x3, #(0 * 8)] - - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 + adr x22, 1f + add x22, x22, x5, lsl #2 + br x22 1: - msr dbgbcr15_el1, x20 - msr dbgbcr14_el1, x19 - msr dbgbcr13_el1, x18 - msr dbgbcr12_el1, x17 - msr dbgbcr11_el1, x16 - msr dbgbcr10_el1, x15 - msr dbgbcr9_el1, x14 - msr dbgbcr8_el1, x13 - msr dbgbcr7_el1, x12 - msr dbgbcr6_el1, x11 - msr dbgbcr5_el1, x10 - msr dbgbcr4_el1, x9 - msr dbgbcr3_el1, x8 - msr dbgbcr2_el1, x7 - msr dbgbcr1_el1, x6 - msr dbgbcr0_el1, x5 - - add x3, x2, #CPU_SYSREG_OFFSET(DBGBVR0_EL1) - - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 + ldr x21, [x4, #(15 * 8)] + ldr x20, [x4, #(14 * 8)] + ldr x19, [x4, #(13 * 8)] + ldr x18, [x4, #(12 * 8)] + ldr x17, [x4, #(11 * 8)] + ldr x16, [x4, #(10 * 8)] + ldr x15, [x4, #(9 * 8)] + ldr x14, [x4, #(8 * 8)] + ldr x13, [x4, #(7 * 8)] + ldr x12, [x4, #(6 * 8)] + ldr x11, [x4, #(5 * 8)] + ldr x10, [x4, #(4 * 8)] + ldr x9, [x4, #(3 * 8)] + ldr x8, [x4, #(2 * 8)] + ldr x7, [x4, #(1 * 8)] + ldr x6, [x4, #(0 * 8)] + + adr x22, 1f + add x22, x22, x5, lsl #2 + br x22 1: - ldr x20, [x3, #(15 * 8)] - ldr x19, [x3, #(14 * 8)] - ldr x18, [x3, #(13 * 8)] - ldr x17, [x3, #(12 * 8)] - ldr x16, [x3, #(11 * 8)] - ldr x15, [x3, #(10 * 8)] - ldr x14, [x3, #(9 * 8)] - ldr x13, [x3, #(8 * 8)] - ldr x12, [x3, #(7 * 8)] - ldr x11, [x3, #(6 * 8)] - ldr x10, [x3, #(5 * 8)] - ldr x9, [x3, #(4 * 8)] - ldr x8, [x3, #(3 * 8)] - ldr x7, [x3, #(2 * 8)] - ldr x6, [x3, #(1 * 8)] - ldr x5, [x3, #(0 * 8)] - - adr x26, 1f - add x26, x26, x24, lsl #2 - br x26 -1: - msr dbgbvr15_el1, x20 - msr dbgbvr14_el1, x19 - msr dbgbvr13_el1, x18 - msr dbgbvr12_el1, x17 - msr dbgbvr11_el1, x16 - msr dbgbvr10_el1, x15 - msr dbgbvr9_el1, x14 - msr dbgbvr8_el1, x13 - msr dbgbvr7_el1, x12 - msr dbgbvr6_el1, x11 - msr dbgbvr5_el1, x10 - msr dbgbvr4_el1, x9 - msr dbgbvr3_el1, x8 - msr dbgbvr2_el1, x7 - msr dbgbvr1_el1, x6 - msr dbgbvr0_el1, x5 - - add x3, x2, #CPU_SYSREG_OFFSET(DBGWCR0_EL1) - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 -1: - ldr x20, [x3, #(15 * 8)] - ldr x19, [x3, #(14 * 8)] - ldr x18, [x3, #(13 * 8)] - ldr x17, [x3, #(12 * 8)] - ldr x16, [x3, #(11 * 8)] - ldr x15, [x3, #(10 * 8)] - ldr x14, [x3, #(9 * 8)] - ldr x13, [x3, #(8 * 8)] - ldr x12, [x3, #(7 * 8)] - ldr x11, [x3, #(6 * 8)] - ldr x10, [x3, #(5 * 8)] - ldr x9, [x3, #(4 * 8)] - ldr x8, [x3, #(3 * 8)] - ldr x7, [x3, #(2 * 8)] - ldr x6, [x3, #(1 * 8)] - ldr x5, [x3, #(0 * 8)] - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 -1: - msr dbgwcr15_el1, x20 - msr dbgwcr14_el1, x19 - msr dbgwcr13_el1, x18 - msr dbgwcr12_el1, x17 - msr dbgwcr11_el1, x16 - msr dbgwcr10_el1, x15 - msr dbgwcr9_el1, x14 - msr dbgwcr8_el1, x13 - msr dbgwcr7_el1, x12 - msr dbgwcr6_el1, x11 - msr dbgwcr5_el1, x10 - msr dbgwcr4_el1, x9 - msr dbgwcr3_el1, x8 - msr dbgwcr2_el1, x7 - msr dbgwcr1_el1, x6 - msr dbgwcr0_el1, x5 - - add x3, x2, #CPU_SYSREG_OFFSET(DBGWVR0_EL1) - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 -1: - ldr x20, [x3, #(15 * 8)] - ldr x19, [x3, #(14 * 8)] - ldr x18, [x3, #(13 * 8)] - ldr x17, [x3, #(12 * 8)] - ldr x16, [x3, #(11 * 8)] - ldr x15, [x3, #(10 * 8)] - ldr x14, [x3, #(9 * 8)] - ldr x13, [x3, #(8 * 8)] - ldr x12, [x3, #(7 * 8)] - ldr x11, [x3, #(6 * 8)] - ldr x10, [x3, #(5 * 8)] - ldr x9, [x3, #(4 * 8)] - ldr x8, [x3, #(3 * 8)] - ldr x7, [x3, #(2 * 8)] - ldr x6, [x3, #(1 * 8)] - ldr x5, [x3, #(0 * 8)] - - adr x26, 1f - add x26, x26, x25, lsl #2 - br x26 -1: - msr dbgwvr15_el1, x20 - msr dbgwvr14_el1, x19 - msr dbgwvr13_el1, x18 - msr dbgwvr12_el1, x17 - msr dbgwvr11_el1, x16 - msr dbgwvr10_el1, x15 - msr dbgwvr9_el1, x14 - msr dbgwvr8_el1, x13 - msr dbgwvr7_el1, x12 - msr dbgwvr6_el1, x11 - msr dbgwvr5_el1, x10 - msr dbgwvr4_el1, x9 - msr dbgwvr3_el1, x8 - msr dbgwvr2_el1, x7 - msr dbgwvr1_el1, x6 - msr dbgwvr0_el1, x5 - - ldr x21, [x2, #CPU_SYSREG_OFFSET(MDCCINT_EL1)] - msr mdccint_el1, x21 + msr \type\()15_el1, x21 + msr \type\()14_el1, x20 + msr \type\()13_el1, x19 + msr \type\()12_el1, x18 + msr \type\()11_el1, x17 + msr \type\()10_el1, x16 + msr \type\()9_el1, x15 + msr \type\()8_el1, x14 + msr \type\()7_el1, x13 + msr \type\()6_el1, x12 + msr \type\()5_el1, x11 + msr \type\()4_el1, x10 + msr \type\()3_el1, x9 + msr \type\()2_el1, x8 + msr \type\()1_el1, x7 + msr \type\()0_el1, x6 .endm .macro skip_32bit_state tmp, target @@ -887,12 +597,65 @@ __restore_sysregs: restore_sysregs ret +/* Save debug state */ __save_debug: - save_debug + // x0: base address for vcpu context + // x2: ptr to current CPU context + // x3: ptr to debug registers + // x4/x5: trashed + + mrs x26, id_aa64dfr0_el1 + ubfx x24, x26, #12, #4 // Extract BRPs + ubfx x25, x26, #20, #4 // Extract WRPs + mov w26, #15 + sub w24, w26, w24 // How many BPs to skip + sub w25, w26, w25 // How many WPs to skip + + mov x5, x24 + add x4, x3, #DEBUG_BCR + save_debug_registers dbgbcr + add x4, x3, #DEBUG_BVR + save_debug_registers dbgbvr + + mov x5, x25 + add x4, x3, #DEBUG_WCR + save_debug_registers dbgwcr + add x4, x3, #DEBUG_WVR + save_debug_registers dbgwvr + + mrs x21, mdccint_el1 + str x21, [x2, #CPU_SYSREG_OFFSET(MDCCINT_EL1)] ret +/* Restore debug state */ __restore_debug: - restore_debug + // x0: base address for cpu context + // x2: ptr to current CPU context + // x3: ptr to debug registers + // x4/x5: trashed + + mrs x26, id_aa64dfr0_el1 + ubfx x24, x26, #12, #4 // Extract BRPs + ubfx x25, x26, #20, #4 // Extract WRPs + mov w26, #15 + sub w24, w26, w24 // How many BPs to skip + sub w25, w26, w25 // How many WPs to skip + + mov x5, x24 + add x4, x3, #DEBUG_BCR + setup_debug_registers dbgbcr + add x4, x3, #DEBUG_BVR + setup_debug_registers dbgbvr + + mov x5, x25 + add x4, x3, #DEBUG_WCR + setup_debug_registers dbgwcr + add x4, x3, #DEBUG_WVR + setup_debug_registers dbgwvr + + ldr x21, [x2, #CPU_SYSREG_OFFSET(MDCCINT_EL1)] + msr mdccint_el1, x21 + ret __save_fpsimd: @@ -927,6 +690,7 @@ ENTRY(__kvm_vcpu_run) bl __save_sysregs compute_debug_state 1f + add x3, x2, #CPU_SYSREG_OFFSET(DBGBCR0_EL1) bl __save_debug 1: activate_traps @@ -942,6 +706,7 @@ ENTRY(__kvm_vcpu_run) bl __restore_fpsimd skip_debug_state x3, 1f + add x3, x2, #CPU_SYSREG_OFFSET(DBGBCR0_EL1) bl __restore_debug 1: restore_guest_32bit_state @@ -962,6 +727,7 @@ __kvm_vcpu_return: bl __save_sysregs skip_debug_state x3, 1f + add x3, x2, #CPU_SYSREG_OFFSET(DBGBCR0_EL1) bl __save_debug 1: save_guest_32bit_state @@ -984,6 +750,7 @@ __kvm_vcpu_return: // already been saved. Note that we nuke the whole 64bit word. // If we ever add more flags, we'll have to be more careful... str xzr, [x0, #VCPU_DEBUG_FLAGS] + add x3, x2, #CPU_SYSREG_OFFSET(DBGBCR0_EL1) bl __restore_debug 1: restore_host_regs -- 2.3.5