[PATCH 4.11 06/28] sparc64: fix fault handling in NGbzero.S and GENbzero.S

2017-05-11 Thread Greg Kroah-Hartman
4.11-stable review patch.  If anyone has any objections, please let me know.

--

From: Dave Aldridge 

commit 3c7f62212018b904ae17f5636ead18a4dca3a88f upstream.

When any of the functions contained in NGbzero.S and GENbzero.S
vector through *bzero_from_clear_user, we may end up taking a
fault when executing one of the store alternate address space
instructions. If this happens, the exception handler does not
restore the %asi register.

This commit fixes the issue by introducing a new exception
handler that ensures the %asi register is restored when
a fault is handled.

Orabug: 25577560

Signed-off-by: Dave Aldridge 
Reviewed-by: Rob Gardner 
Reviewed-by: Babu Moger 
Signed-off-by: David S. Miller 
Signed-off-by: Greg Kroah-Hartman 

---
 arch/sparc/kernel/head_64.S |6 ++
 arch/sparc/lib/GENbzero.S   |2 +-
 arch/sparc/lib/NGbzero.S|2 +-
 3 files changed, 8 insertions(+), 2 deletions(-)

--- a/arch/sparc/kernel/head_64.S
+++ b/arch/sparc/kernel/head_64.S
@@ -939,3 +939,9 @@ ENTRY(__retl_o1)
retl
 mov%o1, %o0
 ENDPROC(__retl_o1)
+
+ENTRY(__retl_o1_asi)
+   wr  %o5, 0x0, %asi
+   retl
+mov%o1, %o0
+ENDPROC(__retl_o1_asi)
--- a/arch/sparc/lib/GENbzero.S
+++ b/arch/sparc/lib/GENbzero.S
@@ -8,7 +8,7 @@
 98:x,y;\
.section __ex_table,"a";\
.align 4;   \
-   .word 98b, __retl_o1;   \
+   .word 98b, __retl_o1_asi;\
.text;  \
.align 4;
 
--- a/arch/sparc/lib/NGbzero.S
+++ b/arch/sparc/lib/NGbzero.S
@@ -8,7 +8,7 @@
 98:x,y;\
.section __ex_table,"a";\
.align 4;   \
-   .word 98b, __retl_o1;   \
+   .word 98b, __retl_o1_asi;\
.text;  \
.align 4;
 




[PATCH 4.11 06/28] sparc64: fix fault handling in NGbzero.S and GENbzero.S

2017-05-11 Thread Greg Kroah-Hartman
4.11-stable review patch.  If anyone has any objections, please let me know.

--

From: Dave Aldridge 

commit 3c7f62212018b904ae17f5636ead18a4dca3a88f upstream.

When any of the functions contained in NGbzero.S and GENbzero.S
vector through *bzero_from_clear_user, we may end up taking a
fault when executing one of the store alternate address space
instructions. If this happens, the exception handler does not
restore the %asi register.

This commit fixes the issue by introducing a new exception
handler that ensures the %asi register is restored when
a fault is handled.

Orabug: 25577560

Signed-off-by: Dave Aldridge 
Reviewed-by: Rob Gardner 
Reviewed-by: Babu Moger 
Signed-off-by: David S. Miller 
Signed-off-by: Greg Kroah-Hartman 

---
 arch/sparc/kernel/head_64.S |6 ++
 arch/sparc/lib/GENbzero.S   |2 +-
 arch/sparc/lib/NGbzero.S|2 +-
 3 files changed, 8 insertions(+), 2 deletions(-)

--- a/arch/sparc/kernel/head_64.S
+++ b/arch/sparc/kernel/head_64.S
@@ -939,3 +939,9 @@ ENTRY(__retl_o1)
retl
 mov%o1, %o0
 ENDPROC(__retl_o1)
+
+ENTRY(__retl_o1_asi)
+   wr  %o5, 0x0, %asi
+   retl
+mov%o1, %o0
+ENDPROC(__retl_o1_asi)
--- a/arch/sparc/lib/GENbzero.S
+++ b/arch/sparc/lib/GENbzero.S
@@ -8,7 +8,7 @@
 98:x,y;\
.section __ex_table,"a";\
.align 4;   \
-   .word 98b, __retl_o1;   \
+   .word 98b, __retl_o1_asi;\
.text;  \
.align 4;
 
--- a/arch/sparc/lib/NGbzero.S
+++ b/arch/sparc/lib/NGbzero.S
@@ -8,7 +8,7 @@
 98:x,y;\
.section __ex_table,"a";\
.align 4;   \
-   .word 98b, __retl_o1;   \
+   .word 98b, __retl_o1_asi;\
.text;  \
.align 4;