From: James Morse <james.mo...@arm.com>

Most of the hyp-stub's vector entries are invalid. These are each
a unique function that branches to itself. To move these into the
vectors, merge the ventry and invalid_vector macros and give each
one a unique name.

This means we can copy the hyp-stub as it is self contained within
its vectors.

Signed-off-by: James Morse <james.mo...@arm.com>

[Fixed merging issues]

Signed-off-by: Pavel Tatashin <pasha.tatas...@soleen.com>
---
 arch/arm64/kernel/hyp-stub.S | 56 +++++++++++++++---------------------
 1 file changed, 23 insertions(+), 33 deletions(-)

diff --git a/arch/arm64/kernel/hyp-stub.S b/arch/arm64/kernel/hyp-stub.S
index 572b28646005..ff329c5c074d 100644
--- a/arch/arm64/kernel/hyp-stub.S
+++ b/arch/arm64/kernel/hyp-stub.S
@@ -16,31 +16,38 @@
 #include <asm/ptrace.h>
 #include <asm/virt.h>
 
+.macro invalid_vector  label
+SYM_CODE_START_LOCAL(\label)
+       .align 7
+       b       \label
+SYM_CODE_END(\label)
+.endm
+
        .text
        .pushsection    .hyp.text, "ax"
 
        .align 11
 
 SYM_CODE_START(__hyp_stub_vectors)
-       ventry  el2_sync_invalid                // Synchronous EL2t
-       ventry  el2_irq_invalid                 // IRQ EL2t
-       ventry  el2_fiq_invalid                 // FIQ EL2t
-       ventry  el2_error_invalid               // Error EL2t
+       invalid_vector  hyp_stub_el2t_sync_invalid      // Synchronous EL2t
+       invalid_vector  hyp_stub_el2t_irq_invalid       // IRQ EL2t
+       invalid_vector  hyp_stub_el2t_fiq_invalid       // FIQ EL2t
+       invalid_vector  hyp_stub_el2t_error_invalid     // Error EL2t
 
-       ventry  el2_sync_invalid                // Synchronous EL2h
-       ventry  el2_irq_invalid                 // IRQ EL2h
-       ventry  el2_fiq_invalid                 // FIQ EL2h
-       ventry  el2_error_invalid               // Error EL2h
+       invalid_vector  hyp_stub_el2h_sync_invalid      // Synchronous EL2h
+       invalid_vector  hyp_stub_el2h_irq_invalid       // IRQ EL2h
+       invalid_vector  hyp_stub_el2h_fiq_invalid       // FIQ EL2h
+       invalid_vector  hyp_stub_el2h_error_invalid     // Error EL2h
 
        ventry  el1_sync                        // Synchronous 64-bit EL1
-       ventry  el1_irq_invalid                 // IRQ 64-bit EL1
-       ventry  el1_fiq_invalid                 // FIQ 64-bit EL1
-       ventry  el1_error_invalid               // Error 64-bit EL1
-
-       ventry  el1_sync_invalid                // Synchronous 32-bit EL1
-       ventry  el1_irq_invalid                 // IRQ 32-bit EL1
-       ventry  el1_fiq_invalid                 // FIQ 32-bit EL1
-       ventry  el1_error_invalid               // Error 32-bit EL1
+       invalid_vector  hyp_stub_el1_irq_invalid        // IRQ 64-bit EL1
+       invalid_vector  hyp_stub_el1_fiq_invalid        // FIQ 64-bit EL1
+       invalid_vector  hyp_stub_el1_error_invalid      // Error 64-bit EL1
+
+       invalid_vector  hyp_stub_32b_el1_sync_invalid   // Synchronous 32-bit 
EL1
+       invalid_vector  hyp_stub_32b_el1_irq_invalid    // IRQ 32-bit EL1
+       invalid_vector  hyp_stub_32b_el1_fiq_invalid    // FIQ 32-bit EL1
+       invalid_vector  hyp_stub_32b_el1_error_invalid  // Error 32-bit EL1
        .align 11
 SYM_INNER_LABEL(__hyp_stub_vectors_end, SYM_L_LOCAL)
 SYM_CODE_END(__hyp_stub_vectors)
@@ -173,23 +180,6 @@ SYM_CODE_END(enter_vhe)
 
        .popsection
 
-.macro invalid_vector  label
-SYM_CODE_START_LOCAL(\label)
-       b \label
-SYM_CODE_END(\label)
-.endm
-
-       invalid_vector  el2_sync_invalid
-       invalid_vector  el2_irq_invalid
-       invalid_vector  el2_fiq_invalid
-       invalid_vector  el2_error_invalid
-       invalid_vector  el1_sync_invalid
-       invalid_vector  el1_irq_invalid
-       invalid_vector  el1_fiq_invalid
-       invalid_vector  el1_error_invalid
-
-       .popsection
-
 /*
  * __hyp_set_vectors: Call this after boot to set the initial hypervisor
  * vectors as part of hypervisor installation.  On an SMP system, this should
-- 
2.25.1


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to