[PATCH 4.9 059/102] arm64: entry: Explicitly pass exception level to kernel_ventry macro

2018-04-06 Thread Greg Kroah-Hartman
4.9-stable review patch.  If anyone has any objections, please let me know.

--

From: Will Deacon 

commit 5b1f7fe41909 upstream.

We will need to treat exceptions from EL0 differently in kernel_ventry,
so rework the macro to take the exception level as an argument and
construct the branch target using that.

Reviewed-by: Mark Rutland 
Tested-by: Laura Abbott 
Tested-by: Shanker Donthineni 
Signed-off-by: Will Deacon 
Signed-off-by: Alex Shi  [v4.9 backport]
[Mark: avoid dependency on C error handler backport]
Signed-off-by: Mark Rutland  [v4.9 backport]
Tested-by: Will Deacon 
Tested-by: Greg Hackmann 
Signed-off-by: Greg Kroah-Hartman 
---
 arch/arm64/kernel/entry.S |   48 +++---
 1 file changed, 24 insertions(+), 24 deletions(-)

--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -70,10 +70,10 @@
 #define BAD_FIQ2
 #define BAD_ERROR  3
 
-   .macro kernel_ventrylabel
+   .macro kernel_ventry, el, label, regsize = 64
.align 7
sub sp, sp, #S_FRAME_SIZE
-   b   \label
+   b   el\()\el\()_\label
.endm
 
.macro  kernel_entry, el, regsize = 64
@@ -264,31 +264,31 @@ tsk   .reqx28 // current thread_info
 
.align  11
 ENTRY(vectors)
-   kernel_ventry   el1_sync_invalid// Synchronous EL1t
-   kernel_ventry   el1_irq_invalid // IRQ EL1t
-   kernel_ventry   el1_fiq_invalid // FIQ EL1t
-   kernel_ventry   el1_error_invalid   // Error EL1t
-
-   kernel_ventry   el1_sync// Synchronous EL1h
-   kernel_ventry   el1_irq // IRQ EL1h
-   kernel_ventry   el1_fiq_invalid // FIQ EL1h
-   kernel_ventry   el1_error_invalid   // Error EL1h
-
-   kernel_ventry   el0_sync// Synchronous 64-bit 
EL0
-   kernel_ventry   el0_irq // IRQ 64-bit EL0
-   kernel_ventry   el0_fiq_invalid // FIQ 64-bit EL0
-   kernel_ventry   el0_error_invalid   // Error 64-bit EL0
+   kernel_ventry   1, sync_invalid // Synchronous EL1t
+   kernel_ventry   1, irq_invalid  // IRQ EL1t
+   kernel_ventry   1, fiq_invalid  // FIQ EL1t
+   kernel_ventry   1, error_invalid// Error EL1t
+
+   kernel_ventry   1, sync // Synchronous EL1h
+   kernel_ventry   1, irq  // IRQ EL1h
+   kernel_ventry   1, fiq_invalid  // FIQ EL1h
+   kernel_ventry   1, error_invalid// Error EL1h
+
+   kernel_ventry   0, sync // Synchronous 64-bit 
EL0
+   kernel_ventry   0, irq  // IRQ 64-bit EL0
+   kernel_ventry   0, fiq_invalid  // FIQ 64-bit EL0
+   kernel_ventry   0, error_invalid// Error 64-bit EL0
 
 #ifdef CONFIG_COMPAT
-   kernel_ventry   el0_sync_compat // Synchronous 32-bit 
EL0
-   kernel_ventry   el0_irq_compat  // IRQ 32-bit EL0
-   kernel_ventry   el0_fiq_invalid_compat  // FIQ 32-bit EL0
-   kernel_ventry   el0_error_invalid_compat// Error 32-bit EL0
+   kernel_ventry   0, sync_compat, 32  // Synchronous 32-bit 
EL0
+   kernel_ventry   0, irq_compat, 32   // IRQ 32-bit EL0
+   kernel_ventry   0, fiq_invalid_compat, 32   // FIQ 32-bit EL0
+   kernel_ventry   0, error_invalid_compat, 32 // Error 32-bit EL0
 #else
-   kernel_ventry   el0_sync_invalid// Synchronous 32-bit 
EL0
-   kernel_ventry   el0_irq_invalid // IRQ 32-bit EL0
-   kernel_ventry   el0_fiq_invalid // FIQ 32-bit EL0
-   kernel_ventry   el0_error_invalid   // Error 32-bit EL0
+   kernel_ventry   0, sync_invalid, 32 // Synchronous 32-bit 
EL0
+   kernel_ventry   0, irq_invalid, 32  // IRQ 32-bit EL0
+   kernel_ventry   0, fiq_invalid, 32  // FIQ 32-bit EL0
+   kernel_ventry   0, error_invalid, 32// Error 32-bit EL0
 #endif
 END(vectors)
 




[PATCH 4.9 059/102] arm64: entry: Explicitly pass exception level to kernel_ventry macro

2018-04-06 Thread Greg Kroah-Hartman
4.9-stable review patch.  If anyone has any objections, please let me know.

--

From: Will Deacon 

commit 5b1f7fe41909 upstream.

We will need to treat exceptions from EL0 differently in kernel_ventry,
so rework the macro to take the exception level as an argument and
construct the branch target using that.

Reviewed-by: Mark Rutland 
Tested-by: Laura Abbott 
Tested-by: Shanker Donthineni 
Signed-off-by: Will Deacon 
Signed-off-by: Alex Shi  [v4.9 backport]
[Mark: avoid dependency on C error handler backport]
Signed-off-by: Mark Rutland  [v4.9 backport]
Tested-by: Will Deacon 
Tested-by: Greg Hackmann 
Signed-off-by: Greg Kroah-Hartman 
---
 arch/arm64/kernel/entry.S |   48 +++---
 1 file changed, 24 insertions(+), 24 deletions(-)

--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -70,10 +70,10 @@
 #define BAD_FIQ2
 #define BAD_ERROR  3
 
-   .macro kernel_ventrylabel
+   .macro kernel_ventry, el, label, regsize = 64
.align 7
sub sp, sp, #S_FRAME_SIZE
-   b   \label
+   b   el\()\el\()_\label
.endm
 
.macro  kernel_entry, el, regsize = 64
@@ -264,31 +264,31 @@ tsk   .reqx28 // current thread_info
 
.align  11
 ENTRY(vectors)
-   kernel_ventry   el1_sync_invalid// Synchronous EL1t
-   kernel_ventry   el1_irq_invalid // IRQ EL1t
-   kernel_ventry   el1_fiq_invalid // FIQ EL1t
-   kernel_ventry   el1_error_invalid   // Error EL1t
-
-   kernel_ventry   el1_sync// Synchronous EL1h
-   kernel_ventry   el1_irq // IRQ EL1h
-   kernel_ventry   el1_fiq_invalid // FIQ EL1h
-   kernel_ventry   el1_error_invalid   // Error EL1h
-
-   kernel_ventry   el0_sync// Synchronous 64-bit 
EL0
-   kernel_ventry   el0_irq // IRQ 64-bit EL0
-   kernel_ventry   el0_fiq_invalid // FIQ 64-bit EL0
-   kernel_ventry   el0_error_invalid   // Error 64-bit EL0
+   kernel_ventry   1, sync_invalid // Synchronous EL1t
+   kernel_ventry   1, irq_invalid  // IRQ EL1t
+   kernel_ventry   1, fiq_invalid  // FIQ EL1t
+   kernel_ventry   1, error_invalid// Error EL1t
+
+   kernel_ventry   1, sync // Synchronous EL1h
+   kernel_ventry   1, irq  // IRQ EL1h
+   kernel_ventry   1, fiq_invalid  // FIQ EL1h
+   kernel_ventry   1, error_invalid// Error EL1h
+
+   kernel_ventry   0, sync // Synchronous 64-bit 
EL0
+   kernel_ventry   0, irq  // IRQ 64-bit EL0
+   kernel_ventry   0, fiq_invalid  // FIQ 64-bit EL0
+   kernel_ventry   0, error_invalid// Error 64-bit EL0
 
 #ifdef CONFIG_COMPAT
-   kernel_ventry   el0_sync_compat // Synchronous 32-bit 
EL0
-   kernel_ventry   el0_irq_compat  // IRQ 32-bit EL0
-   kernel_ventry   el0_fiq_invalid_compat  // FIQ 32-bit EL0
-   kernel_ventry   el0_error_invalid_compat// Error 32-bit EL0
+   kernel_ventry   0, sync_compat, 32  // Synchronous 32-bit 
EL0
+   kernel_ventry   0, irq_compat, 32   // IRQ 32-bit EL0
+   kernel_ventry   0, fiq_invalid_compat, 32   // FIQ 32-bit EL0
+   kernel_ventry   0, error_invalid_compat, 32 // Error 32-bit EL0
 #else
-   kernel_ventry   el0_sync_invalid// Synchronous 32-bit 
EL0
-   kernel_ventry   el0_irq_invalid // IRQ 32-bit EL0
-   kernel_ventry   el0_fiq_invalid // FIQ 32-bit EL0
-   kernel_ventry   el0_error_invalid   // Error 32-bit EL0
+   kernel_ventry   0, sync_invalid, 32 // Synchronous 32-bit 
EL0
+   kernel_ventry   0, irq_invalid, 32  // IRQ 32-bit EL0
+   kernel_ventry   0, fiq_invalid, 32  // FIQ 32-bit EL0
+   kernel_ventry   0, error_invalid, 32// Error 32-bit EL0
 #endif
 END(vectors)