* sparc: Another fix for accurate exception reporting in copy_{from,to}_user
@ 2025-08-28 12:18 Michael Karcher
2025-08-28 12:18 ` [PATCH 1/1] sparc: fix accurate exception reporting in copy_{from_to}_user for M7 Michael Karcher
0 siblings, 1 reply; 10+ messages in thread
From: Michael Karcher @ 2025-08-28 12:18 UTC (permalink / raw)
To: linux-kernel
Cc: sparclinux, Michael Karcher, Andreas Larsson,
John Paul Adrian Glaubitz, Anthony Yznaga
As a follow-up to the series sent earlier to fix accurate exception reporting on UltraSPARC,
UltraSPARC III, Niagara and Niagara 4, here is another patch to fix accurate exception
reporting on M7.
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH 1/1] sparc: fix accurate exception reporting in copy_{from_to}_user for M7 2025-08-28 12:18 sparc: Another fix for accurate exception reporting in copy_{from,to}_user Michael Karcher @ 2025-08-28 12:18 ` Michael Karcher 2025-08-28 12:36 ` John Paul Adrian Glaubitz 2025-09-04 14:19 ` [PATCH 1/1] sparc: fix accurate exception reporting in copy_{from_to}_user " Andreas Larsson 0 siblings, 2 replies; 10+ messages in thread From: Michael Karcher @ 2025-08-28 12:18 UTC (permalink / raw) To: linux-kernel Cc: sparclinux, Michael Karcher, Andreas Larsson, John Paul Adrian Glaubitz, Anthony Yznaga --- arch/sparc/lib/M7memcpy.S | 20 ++++++++++---------- arch/sparc/lib/Memcpy_utils.S | 9 +++++++++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/arch/sparc/lib/M7memcpy.S b/arch/sparc/lib/M7memcpy.S index cbd42ea7c3f7..99357bfa8e82 100644 --- a/arch/sparc/lib/M7memcpy.S +++ b/arch/sparc/lib/M7memcpy.S @@ -696,16 +696,16 @@ FUNC_NAME: EX_LD_FP(LOAD(ldd, %o4+40, %f26), memcpy_retl_o2_plus_o5_plus_40) faligndata %f24, %f26, %f10 EX_ST_FP(STORE(std, %f6, %o0+24), memcpy_retl_o2_plus_o5_plus_40) - EX_LD_FP(LOAD(ldd, %o4+48, %f28), memcpy_retl_o2_plus_o5_plus_40) + EX_LD_FP(LOAD(ldd, %o4+48, %f28), memcpy_retl_o2_plus_o5_plus_32) faligndata %f26, %f28, %f12 - EX_ST_FP(STORE(std, %f8, %o0+32), memcpy_retl_o2_plus_o5_plus_40) + EX_ST_FP(STORE(std, %f8, %o0+32), memcpy_retl_o2_plus_o5_plus_32) add %o4, 64, %o4 - EX_LD_FP(LOAD(ldd, %o4-8, %f30), memcpy_retl_o2_plus_o5_plus_40) + EX_LD_FP(LOAD(ldd, %o4-8, %f30), memcpy_retl_o2_plus_o5_plus_24) faligndata %f28, %f30, %f14 - EX_ST_FP(STORE(std, %f10, %o0+40), memcpy_retl_o2_plus_o5_plus_40) - EX_ST_FP(STORE(std, %f12, %o0+48), memcpy_retl_o2_plus_o5_plus_40) + EX_ST_FP(STORE(std, %f10, %o0+40), memcpy_retl_o2_plus_o5_plus_24) + EX_ST_FP(STORE(std, %f12, %o0+48), memcpy_retl_o2_plus_o5_plus_16) add %o0, 64, %o0 - EX_ST_FP(STORE(std, %f14, %o0-8), memcpy_retl_o2_plus_o5_plus_40) + EX_ST_FP(STORE(std, %f14, %o0-8), memcpy_retl_o2_plus_o5_plus_8) fsrc2 %f30, %f14 bgu,pt %xcc, .Lunalign_sloop prefetch [%o4 + (8 * BLOCK_SIZE)], 20 @@ -728,7 +728,7 @@ FUNC_NAME: add %o4, 8, %o4 faligndata %f0, %f2, %f16 subcc %o5, 8, %o5 - EX_ST_FP(STORE(std, %f16, %o0), memcpy_retl_o2_plus_o5) + EX_ST_FP(STORE(std, %f16, %o0), memcpy_retl_o2_plus_o5_plus_8) fsrc2 %f2, %f0 bgu,pt %xcc, .Lunalign_by8 add %o0, 8, %o0 @@ -772,7 +772,7 @@ FUNC_NAME: subcc %o5, 0x20, %o5 EX_ST(STORE(stx, %o3, %o0 + 0x00), memcpy_retl_o2_plus_o5_plus_32) EX_ST(STORE(stx, %g2, %o0 + 0x08), memcpy_retl_o2_plus_o5_plus_24) - EX_ST(STORE(stx, %g7, %o0 + 0x10), memcpy_retl_o2_plus_o5_plus_24) + EX_ST(STORE(stx, %g7, %o0 + 0x10), memcpy_retl_o2_plus_o5_plus_16) EX_ST(STORE(stx, %o4, %o0 + 0x18), memcpy_retl_o2_plus_o5_plus_8) bne,pt %xcc, 1b add %o0, 0x20, %o0 @@ -804,12 +804,12 @@ FUNC_NAME: brz,pt %o3, 2f sub %o2, %o3, %o2 -1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2), memcpy_retl_o2_plus_g1) +1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2), memcpy_retl_o2_plus_o3) add %o1, 1, %o1 subcc %o3, 1, %o3 add %o0, 1, %o0 bne,pt %xcc, 1b - EX_ST(STORE(stb, %g2, %o0 - 0x01), memcpy_retl_o2_plus_g1_plus_1) + EX_ST(STORE(stb, %g2, %o0 - 0x01), memcpy_retl_o2_plus_o3_plus_1) 2: and %o1, 0x7, %o3 brz,pn %o3, .Lmedium_noprefetch_cp diff --git a/arch/sparc/lib/Memcpy_utils.S b/arch/sparc/lib/Memcpy_utils.S index 64fbac28b3db..207343367bb2 100644 --- a/arch/sparc/lib/Memcpy_utils.S +++ b/arch/sparc/lib/Memcpy_utils.S @@ -137,6 +137,15 @@ ENTRY(memcpy_retl_o2_plus_63_8) ba,pt %xcc, __restore_asi add %o2, 8, %o0 ENDPROC(memcpy_retl_o2_plus_63_8) +ENTRY(memcpy_retl_o2_plus_o3) + ba,pt %xcc, __restore_asi + add %o2, %o3, %o0 +ENDPROC(memcpy_retl_o2_plus_o3) +ENTRY(memcpy_retl_o2_plus_o3_plus_1) + add %o3, 1, %o3 + ba,pt %xcc, __restore_asi + add %o2, %o3, %o0 +ENDPROC(memcpy_retl_o2_plus_o3_plus_1) ENTRY(memcpy_retl_o2_plus_o5) ba,pt %xcc, __restore_asi add %o2, %o5, %o0 -- 2.50.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] sparc: fix accurate exception reporting in copy_{from_to}_user for M7 2025-08-28 12:18 ` [PATCH 1/1] sparc: fix accurate exception reporting in copy_{from_to}_user for M7 Michael Karcher @ 2025-08-28 12:36 ` John Paul Adrian Glaubitz 2025-08-28 13:04 ` [PATCH v2 1/1] sparc: fix accurate exception reporting in copy_{from,to}_user " Michael Karcher 2025-09-04 14:19 ` [PATCH 1/1] sparc: fix accurate exception reporting in copy_{from_to}_user " Andreas Larsson 1 sibling, 1 reply; 10+ messages in thread From: John Paul Adrian Glaubitz @ 2025-08-28 12:36 UTC (permalink / raw) To: Michael Karcher, linux-kernel; +Cc: sparclinux, Andreas Larsson, Anthony Yznaga Hi Michael, On Thu, 2025-08-28 at 14:18 +0200, Michael Karcher wrote: > --- > arch/sparc/lib/M7memcpy.S | 20 ++++++++++---------- > arch/sparc/lib/Memcpy_utils.S | 9 +++++++++ > 2 files changed, 19 insertions(+), 10 deletions(-) > > diff --git a/arch/sparc/lib/M7memcpy.S b/arch/sparc/lib/M7memcpy.S > index cbd42ea7c3f7..99357bfa8e82 100644 > --- a/arch/sparc/lib/M7memcpy.S > +++ b/arch/sparc/lib/M7memcpy.S > @@ -696,16 +696,16 @@ FUNC_NAME: > EX_LD_FP(LOAD(ldd, %o4+40, %f26), memcpy_retl_o2_plus_o5_plus_40) > faligndata %f24, %f26, %f10 > EX_ST_FP(STORE(std, %f6, %o0+24), memcpy_retl_o2_plus_o5_plus_40) > - EX_LD_FP(LOAD(ldd, %o4+48, %f28), memcpy_retl_o2_plus_o5_plus_40) > + EX_LD_FP(LOAD(ldd, %o4+48, %f28), memcpy_retl_o2_plus_o5_plus_32) > faligndata %f26, %f28, %f12 > - EX_ST_FP(STORE(std, %f8, %o0+32), memcpy_retl_o2_plus_o5_plus_40) > + EX_ST_FP(STORE(std, %f8, %o0+32), memcpy_retl_o2_plus_o5_plus_32) > add %o4, 64, %o4 > - EX_LD_FP(LOAD(ldd, %o4-8, %f30), memcpy_retl_o2_plus_o5_plus_40) > + EX_LD_FP(LOAD(ldd, %o4-8, %f30), memcpy_retl_o2_plus_o5_plus_24) > faligndata %f28, %f30, %f14 > - EX_ST_FP(STORE(std, %f10, %o0+40), memcpy_retl_o2_plus_o5_plus_40) > - EX_ST_FP(STORE(std, %f12, %o0+48), memcpy_retl_o2_plus_o5_plus_40) > + EX_ST_FP(STORE(std, %f10, %o0+40), memcpy_retl_o2_plus_o5_plus_24) > + EX_ST_FP(STORE(std, %f12, %o0+48), memcpy_retl_o2_plus_o5_plus_16) > add %o0, 64, %o0 > - EX_ST_FP(STORE(std, %f14, %o0-8), memcpy_retl_o2_plus_o5_plus_40) > + EX_ST_FP(STORE(std, %f14, %o0-8), memcpy_retl_o2_plus_o5_plus_8) > fsrc2 %f30, %f14 > bgu,pt %xcc, .Lunalign_sloop > prefetch [%o4 + (8 * BLOCK_SIZE)], 20 > @@ -728,7 +728,7 @@ FUNC_NAME: > add %o4, 8, %o4 > faligndata %f0, %f2, %f16 > subcc %o5, 8, %o5 > - EX_ST_FP(STORE(std, %f16, %o0), memcpy_retl_o2_plus_o5) > + EX_ST_FP(STORE(std, %f16, %o0), memcpy_retl_o2_plus_o5_plus_8) > fsrc2 %f2, %f0 > bgu,pt %xcc, .Lunalign_by8 > add %o0, 8, %o0 > @@ -772,7 +772,7 @@ FUNC_NAME: > subcc %o5, 0x20, %o5 > EX_ST(STORE(stx, %o3, %o0 + 0x00), memcpy_retl_o2_plus_o5_plus_32) > EX_ST(STORE(stx, %g2, %o0 + 0x08), memcpy_retl_o2_plus_o5_plus_24) > - EX_ST(STORE(stx, %g7, %o0 + 0x10), memcpy_retl_o2_plus_o5_plus_24) > + EX_ST(STORE(stx, %g7, %o0 + 0x10), memcpy_retl_o2_plus_o5_plus_16) > EX_ST(STORE(stx, %o4, %o0 + 0x18), memcpy_retl_o2_plus_o5_plus_8) > bne,pt %xcc, 1b > add %o0, 0x20, %o0 > @@ -804,12 +804,12 @@ FUNC_NAME: > brz,pt %o3, 2f > sub %o2, %o3, %o2 > > -1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2), memcpy_retl_o2_plus_g1) > +1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2), memcpy_retl_o2_plus_o3) > add %o1, 1, %o1 > subcc %o3, 1, %o3 > add %o0, 1, %o0 > bne,pt %xcc, 1b > - EX_ST(STORE(stb, %g2, %o0 - 0x01), memcpy_retl_o2_plus_g1_plus_1) > + EX_ST(STORE(stb, %g2, %o0 - 0x01), memcpy_retl_o2_plus_o3_plus_1) > 2: > and %o1, 0x7, %o3 > brz,pn %o3, .Lmedium_noprefetch_cp > diff --git a/arch/sparc/lib/Memcpy_utils.S b/arch/sparc/lib/Memcpy_utils.S > index 64fbac28b3db..207343367bb2 100644 > --- a/arch/sparc/lib/Memcpy_utils.S > +++ b/arch/sparc/lib/Memcpy_utils.S > @@ -137,6 +137,15 @@ ENTRY(memcpy_retl_o2_plus_63_8) > ba,pt %xcc, __restore_asi > add %o2, 8, %o0 > ENDPROC(memcpy_retl_o2_plus_63_8) > +ENTRY(memcpy_retl_o2_plus_o3) > + ba,pt %xcc, __restore_asi > + add %o2, %o3, %o0 > +ENDPROC(memcpy_retl_o2_plus_o3) > +ENTRY(memcpy_retl_o2_plus_o3_plus_1) > + add %o3, 1, %o3 > + ba,pt %xcc, __restore_asi > + add %o2, %o3, %o0 > +ENDPROC(memcpy_retl_o2_plus_o3_plus_1) > ENTRY(memcpy_retl_o2_plus_o5) > ba,pt %xcc, __restore_asi > add %o2, %o5, %o0 Shouldn't this have: Fixes 34060b8fffa7 ("arch/sparc: Add accurate exception reporting in M7memcpy") ? Adrian -- .''`. John Paul Adrian Glaubitz : :' : Debian Developer `. `' Physicist `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 1/1] sparc: fix accurate exception reporting in copy_{from,to}_user for M7 2025-08-28 12:36 ` John Paul Adrian Glaubitz @ 2025-08-28 13:04 ` Michael Karcher 2025-08-31 23:43 ` John Paul Adrian Glaubitz 2025-09-01 19:15 ` John Paul Adrian Glaubitz 0 siblings, 2 replies; 10+ messages in thread From: Michael Karcher @ 2025-08-28 13:04 UTC (permalink / raw) To: linux-kernel Cc: sparclinux, Michael Karcher, Andreas Larsson, John Paul Adrian Glaubitz, Anthony Yznaga Fixes 34060b8fffa7 ("arch/sparc: Add accurate exception reporting in M7memcpy") Signed-off-by: Michael Karcher <kernel@mkarcher.dialup.fu-berlin.de> --- arch/sparc/lib/M7memcpy.S | 20 ++++++++++---------- arch/sparc/lib/Memcpy_utils.S | 9 +++++++++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/arch/sparc/lib/M7memcpy.S b/arch/sparc/lib/M7memcpy.S index cbd42ea7c3f7..99357bfa8e82 100644 --- a/arch/sparc/lib/M7memcpy.S +++ b/arch/sparc/lib/M7memcpy.S @@ -696,16 +696,16 @@ FUNC_NAME: EX_LD_FP(LOAD(ldd, %o4+40, %f26), memcpy_retl_o2_plus_o5_plus_40) faligndata %f24, %f26, %f10 EX_ST_FP(STORE(std, %f6, %o0+24), memcpy_retl_o2_plus_o5_plus_40) - EX_LD_FP(LOAD(ldd, %o4+48, %f28), memcpy_retl_o2_plus_o5_plus_40) + EX_LD_FP(LOAD(ldd, %o4+48, %f28), memcpy_retl_o2_plus_o5_plus_32) faligndata %f26, %f28, %f12 - EX_ST_FP(STORE(std, %f8, %o0+32), memcpy_retl_o2_plus_o5_plus_40) + EX_ST_FP(STORE(std, %f8, %o0+32), memcpy_retl_o2_plus_o5_plus_32) add %o4, 64, %o4 - EX_LD_FP(LOAD(ldd, %o4-8, %f30), memcpy_retl_o2_plus_o5_plus_40) + EX_LD_FP(LOAD(ldd, %o4-8, %f30), memcpy_retl_o2_plus_o5_plus_24) faligndata %f28, %f30, %f14 - EX_ST_FP(STORE(std, %f10, %o0+40), memcpy_retl_o2_plus_o5_plus_40) - EX_ST_FP(STORE(std, %f12, %o0+48), memcpy_retl_o2_plus_o5_plus_40) + EX_ST_FP(STORE(std, %f10, %o0+40), memcpy_retl_o2_plus_o5_plus_24) + EX_ST_FP(STORE(std, %f12, %o0+48), memcpy_retl_o2_plus_o5_plus_16) add %o0, 64, %o0 - EX_ST_FP(STORE(std, %f14, %o0-8), memcpy_retl_o2_plus_o5_plus_40) + EX_ST_FP(STORE(std, %f14, %o0-8), memcpy_retl_o2_plus_o5_plus_8) fsrc2 %f30, %f14 bgu,pt %xcc, .Lunalign_sloop prefetch [%o4 + (8 * BLOCK_SIZE)], 20 @@ -728,7 +728,7 @@ FUNC_NAME: add %o4, 8, %o4 faligndata %f0, %f2, %f16 subcc %o5, 8, %o5 - EX_ST_FP(STORE(std, %f16, %o0), memcpy_retl_o2_plus_o5) + EX_ST_FP(STORE(std, %f16, %o0), memcpy_retl_o2_plus_o5_plus_8) fsrc2 %f2, %f0 bgu,pt %xcc, .Lunalign_by8 add %o0, 8, %o0 @@ -772,7 +772,7 @@ FUNC_NAME: subcc %o5, 0x20, %o5 EX_ST(STORE(stx, %o3, %o0 + 0x00), memcpy_retl_o2_plus_o5_plus_32) EX_ST(STORE(stx, %g2, %o0 + 0x08), memcpy_retl_o2_plus_o5_plus_24) - EX_ST(STORE(stx, %g7, %o0 + 0x10), memcpy_retl_o2_plus_o5_plus_24) + EX_ST(STORE(stx, %g7, %o0 + 0x10), memcpy_retl_o2_plus_o5_plus_16) EX_ST(STORE(stx, %o4, %o0 + 0x18), memcpy_retl_o2_plus_o5_plus_8) bne,pt %xcc, 1b add %o0, 0x20, %o0 @@ -804,12 +804,12 @@ FUNC_NAME: brz,pt %o3, 2f sub %o2, %o3, %o2 -1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2), memcpy_retl_o2_plus_g1) +1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2), memcpy_retl_o2_plus_o3) add %o1, 1, %o1 subcc %o3, 1, %o3 add %o0, 1, %o0 bne,pt %xcc, 1b - EX_ST(STORE(stb, %g2, %o0 - 0x01), memcpy_retl_o2_plus_g1_plus_1) + EX_ST(STORE(stb, %g2, %o0 - 0x01), memcpy_retl_o2_plus_o3_plus_1) 2: and %o1, 0x7, %o3 brz,pn %o3, .Lmedium_noprefetch_cp diff --git a/arch/sparc/lib/Memcpy_utils.S b/arch/sparc/lib/Memcpy_utils.S index 64fbac28b3db..207343367bb2 100644 --- a/arch/sparc/lib/Memcpy_utils.S +++ b/arch/sparc/lib/Memcpy_utils.S @@ -137,6 +137,15 @@ ENTRY(memcpy_retl_o2_plus_63_8) ba,pt %xcc, __restore_asi add %o2, 8, %o0 ENDPROC(memcpy_retl_o2_plus_63_8) +ENTRY(memcpy_retl_o2_plus_o3) + ba,pt %xcc, __restore_asi + add %o2, %o3, %o0 +ENDPROC(memcpy_retl_o2_plus_o3) +ENTRY(memcpy_retl_o2_plus_o3_plus_1) + add %o3, 1, %o3 + ba,pt %xcc, __restore_asi + add %o2, %o3, %o0 +ENDPROC(memcpy_retl_o2_plus_o3_plus_1) ENTRY(memcpy_retl_o2_plus_o5) ba,pt %xcc, __restore_asi add %o2, %o5, %o0 -- 2.50.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/1] sparc: fix accurate exception reporting in copy_{from,to}_user for M7 2025-08-28 13:04 ` [PATCH v2 1/1] sparc: fix accurate exception reporting in copy_{from,to}_user " Michael Karcher @ 2025-08-31 23:43 ` John Paul Adrian Glaubitz 2025-09-01 7:00 ` Rainer Orth 2025-09-01 19:15 ` John Paul Adrian Glaubitz 1 sibling, 1 reply; 10+ messages in thread From: John Paul Adrian Glaubitz @ 2025-08-31 23:43 UTC (permalink / raw) To: Michael Karcher, linux-kernel Cc: sparclinux, Andreas Larsson, Anthony Yznaga, Rainer Orth Hi Rainer, On Thu, 2025-08-28 at 15:04 +0200, Michael Karcher wrote: > Fixes 34060b8fffa7 ("arch/sparc: Add accurate exception reporting in M7memcpy") > Signed-off-by: Michael Karcher <kernel@mkarcher.dialup.fu-berlin.de> > --- > arch/sparc/lib/M7memcpy.S | 20 ++++++++++---------- > arch/sparc/lib/Memcpy_utils.S | 9 +++++++++ > 2 files changed, 19 insertions(+), 10 deletions(-) > > diff --git a/arch/sparc/lib/M7memcpy.S b/arch/sparc/lib/M7memcpy.S > index cbd42ea7c3f7..99357bfa8e82 100644 > --- a/arch/sparc/lib/M7memcpy.S > +++ b/arch/sparc/lib/M7memcpy.S > @@ -696,16 +696,16 @@ FUNC_NAME: > EX_LD_FP(LOAD(ldd, %o4+40, %f26), memcpy_retl_o2_plus_o5_plus_40) > faligndata %f24, %f26, %f10 > EX_ST_FP(STORE(std, %f6, %o0+24), memcpy_retl_o2_plus_o5_plus_40) > - EX_LD_FP(LOAD(ldd, %o4+48, %f28), memcpy_retl_o2_plus_o5_plus_40) > + EX_LD_FP(LOAD(ldd, %o4+48, %f28), memcpy_retl_o2_plus_o5_plus_32) > faligndata %f26, %f28, %f12 > - EX_ST_FP(STORE(std, %f8, %o0+32), memcpy_retl_o2_plus_o5_plus_40) > + EX_ST_FP(STORE(std, %f8, %o0+32), memcpy_retl_o2_plus_o5_plus_32) > add %o4, 64, %o4 > - EX_LD_FP(LOAD(ldd, %o4-8, %f30), memcpy_retl_o2_plus_o5_plus_40) > + EX_LD_FP(LOAD(ldd, %o4-8, %f30), memcpy_retl_o2_plus_o5_plus_24) > faligndata %f28, %f30, %f14 > - EX_ST_FP(STORE(std, %f10, %o0+40), memcpy_retl_o2_plus_o5_plus_40) > - EX_ST_FP(STORE(std, %f12, %o0+48), memcpy_retl_o2_plus_o5_plus_40) > + EX_ST_FP(STORE(std, %f10, %o0+40), memcpy_retl_o2_plus_o5_plus_24) > + EX_ST_FP(STORE(std, %f12, %o0+48), memcpy_retl_o2_plus_o5_plus_16) > add %o0, 64, %o0 > - EX_ST_FP(STORE(std, %f14, %o0-8), memcpy_retl_o2_plus_o5_plus_40) > + EX_ST_FP(STORE(std, %f14, %o0-8), memcpy_retl_o2_plus_o5_plus_8) > fsrc2 %f30, %f14 > bgu,pt %xcc, .Lunalign_sloop > prefetch [%o4 + (8 * BLOCK_SIZE)], 20 > @@ -728,7 +728,7 @@ FUNC_NAME: > add %o4, 8, %o4 > faligndata %f0, %f2, %f16 > subcc %o5, 8, %o5 > - EX_ST_FP(STORE(std, %f16, %o0), memcpy_retl_o2_plus_o5) > + EX_ST_FP(STORE(std, %f16, %o0), memcpy_retl_o2_plus_o5_plus_8) > fsrc2 %f2, %f0 > bgu,pt %xcc, .Lunalign_by8 > add %o0, 8, %o0 > @@ -772,7 +772,7 @@ FUNC_NAME: > subcc %o5, 0x20, %o5 > EX_ST(STORE(stx, %o3, %o0 + 0x00), memcpy_retl_o2_plus_o5_plus_32) > EX_ST(STORE(stx, %g2, %o0 + 0x08), memcpy_retl_o2_plus_o5_plus_24) > - EX_ST(STORE(stx, %g7, %o0 + 0x10), memcpy_retl_o2_plus_o5_plus_24) > + EX_ST(STORE(stx, %g7, %o0 + 0x10), memcpy_retl_o2_plus_o5_plus_16) > EX_ST(STORE(stx, %o4, %o0 + 0x18), memcpy_retl_o2_plus_o5_plus_8) > bne,pt %xcc, 1b > add %o0, 0x20, %o0 > @@ -804,12 +804,12 @@ FUNC_NAME: > brz,pt %o3, 2f > sub %o2, %o3, %o2 > > -1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2), memcpy_retl_o2_plus_g1) > +1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2), memcpy_retl_o2_plus_o3) > add %o1, 1, %o1 > subcc %o3, 1, %o3 > add %o0, 1, %o0 > bne,pt %xcc, 1b > - EX_ST(STORE(stb, %g2, %o0 - 0x01), memcpy_retl_o2_plus_g1_plus_1) > + EX_ST(STORE(stb, %g2, %o0 - 0x01), memcpy_retl_o2_plus_o3_plus_1) > 2: > and %o1, 0x7, %o3 > brz,pn %o3, .Lmedium_noprefetch_cp > diff --git a/arch/sparc/lib/Memcpy_utils.S b/arch/sparc/lib/Memcpy_utils.S > index 64fbac28b3db..207343367bb2 100644 > --- a/arch/sparc/lib/Memcpy_utils.S > +++ b/arch/sparc/lib/Memcpy_utils.S > @@ -137,6 +137,15 @@ ENTRY(memcpy_retl_o2_plus_63_8) > ba,pt %xcc, __restore_asi > add %o2, 8, %o0 > ENDPROC(memcpy_retl_o2_plus_63_8) > +ENTRY(memcpy_retl_o2_plus_o3) > + ba,pt %xcc, __restore_asi > + add %o2, %o3, %o0 > +ENDPROC(memcpy_retl_o2_plus_o3) > +ENTRY(memcpy_retl_o2_plus_o3_plus_1) > + add %o3, 1, %o3 > + ba,pt %xcc, __restore_asi > + add %o2, %o3, %o0 > +ENDPROC(memcpy_retl_o2_plus_o3_plus_1) > ENTRY(memcpy_retl_o2_plus_o5) > ba,pt %xcc, __restore_asi > add %o2, %o5, %o0 in the past, you reported stability issues with the Linux kernel when running inside an LDOM on SPARC M7/M8. Could you verify whether the patch above fixes these problems or whether at least they don't introduce regressions? Thanks, Adrian -- .''`. John Paul Adrian Glaubitz : :' : Debian Developer `. `' Physicist `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/1] sparc: fix accurate exception reporting in copy_{from,to}_user for M7 2025-08-31 23:43 ` John Paul Adrian Glaubitz @ 2025-09-01 7:00 ` Rainer Orth 2025-09-01 7:05 ` John Paul Adrian Glaubitz 0 siblings, 1 reply; 10+ messages in thread From: Rainer Orth @ 2025-09-01 7:00 UTC (permalink / raw) To: John Paul Adrian Glaubitz Cc: Michael Karcher, linux-kernel, sparclinux, Andreas Larsson, Anthony Yznaga Hi Adrian, > in the past, you reported stability issues with the Linux kernel when running > inside an LDOM on SPARC M7/M8. Could you verify whether the patch above fixes > these problems or whether at least they don't introduce regressions? thanks for the heads-up. Indeed the hangs persist even when the system is idle. However, I've never built a Linux kernel before and have way too much on the plate to try now. Besides, I don't have a reproducer for the issue, so even with a patch I'd have to wait for an extended period of time to see if the issue is gone, so I'll just wait until the patch lands in the Debian/sparc64 repo and see if it helps. Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/1] sparc: fix accurate exception reporting in copy_{from,to}_user for M7 2025-09-01 7:00 ` Rainer Orth @ 2025-09-01 7:05 ` John Paul Adrian Glaubitz 2025-09-01 14:18 ` Rainer Orth 0 siblings, 1 reply; 10+ messages in thread From: John Paul Adrian Glaubitz @ 2025-09-01 7:05 UTC (permalink / raw) To: Rainer Orth Cc: Michael Karcher, linux-kernel, sparclinux, Andreas Larsson, Anthony Yznaga Hi Rainer, On Mon, 2025-09-01 at 09:00 +0200, Rainer Orth wrote: > > in the past, you reported stability issues with the Linux kernel when running > > inside an LDOM on SPARC M7/M8. Could you verify whether the patch above fixes > > these problems or whether at least they don't introduce regressions? > > thanks for the heads-up. Indeed the hangs persist even when the system > is idle. However, I've never built a Linux kernel before and have way > too much on the plate to try now. Besides, I don't have a reproducer > for the issue, so even with a patch I'd have to wait for an extended > period of time to see if the issue is gone, so I'll just wait until the > patch lands in the Debian/sparc64 repo and see if it helps. Would it work if I built a kernel for you plus installation instructions and a quick explanation how to test it? FWIW, we consider the patch already acceptable when it doesn't introduce any regressions. I did some testing on a SPARC S7 yesterday, but the problem is that the support for SPARC S7 in the Linux kernel is incomplete at the moment and I had to add it quickly myself which did actually work but I really would like to verify it on M7 or M8 again to at least not cause regressions. Thanks, Adrian -- .''`. John Paul Adrian Glaubitz : :' : Debian Developer `. `' Physicist `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/1] sparc: fix accurate exception reporting in copy_{from,to}_user for M7 2025-09-01 7:05 ` John Paul Adrian Glaubitz @ 2025-09-01 14:18 ` Rainer Orth 0 siblings, 0 replies; 10+ messages in thread From: Rainer Orth @ 2025-09-01 14:18 UTC (permalink / raw) To: John Paul Adrian Glaubitz Cc: Michael Karcher, linux-kernel, sparclinux, Andreas Larsson, Anthony Yznaga Hi Adrian, > On Mon, 2025-09-01 at 09:00 +0200, Rainer Orth wrote: >> > in the past, you reported stability issues with the Linux kernel when running >> > inside an LDOM on SPARC M7/M8. Could you verify whether the patch above fixes >> > these problems or whether at least they don't introduce regressions? >> >> thanks for the heads-up. Indeed the hangs persist even when the system >> is idle. However, I've never built a Linux kernel before and have way >> too much on the plate to try now. Besides, I don't have a reproducer >> for the issue, so even with a patch I'd have to wait for an extended >> period of time to see if the issue is gone, so I'll just wait until the >> patch lands in the Debian/sparc64 repo and see if it helps. > > Would it work if I built a kernel for you plus installation instructions > and a quick explanation how to test it? I wouldn't mind trying, but as I said it's difficult to say when I can claim success given the lack of a reproducer. All I can report reliably is failure ;-) > FWIW, we consider the patch already acceptable when it doesn't introduce > any regressions. > > I did some testing on a SPARC S7 yesterday, but the problem is that the > support for SPARC S7 in the Linux kernel is incomplete at the moment and > I had to add it quickly myself which did actually work but I really would > like to verify it on M7 or M8 again to at least not cause regressions. The only system that I can test on is S7 (a Netra S7-2 actually). While I also have a T8-1, that's reserved for cfarm work. Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/1] sparc: fix accurate exception reporting in copy_{from,to}_user for M7 2025-08-28 13:04 ` [PATCH v2 1/1] sparc: fix accurate exception reporting in copy_{from,to}_user " Michael Karcher 2025-08-31 23:43 ` John Paul Adrian Glaubitz @ 2025-09-01 19:15 ` John Paul Adrian Glaubitz 1 sibling, 0 replies; 10+ messages in thread From: John Paul Adrian Glaubitz @ 2025-09-01 19:15 UTC (permalink / raw) To: Michael Karcher, linux-kernel Cc: sparclinux, Andreas Larsson, Anthony Yznaga, Tony Rodriguez Hello, On Thu, 2025-08-28 at 15:04 +0200, Michael Karcher wrote: > Fixes 34060b8fffa7 ("arch/sparc: Add accurate exception reporting in M7memcpy") > Signed-off-by: Michael Karcher <kernel@mkarcher.dialup.fu-berlin.de> > --- > arch/sparc/lib/M7memcpy.S | 20 ++++++++++---------- > arch/sparc/lib/Memcpy_utils.S | 9 +++++++++ > 2 files changed, 19 insertions(+), 10 deletions(-) > > diff --git a/arch/sparc/lib/M7memcpy.S b/arch/sparc/lib/M7memcpy.S > index cbd42ea7c3f7..99357bfa8e82 100644 > --- a/arch/sparc/lib/M7memcpy.S > +++ b/arch/sparc/lib/M7memcpy.S > @@ -696,16 +696,16 @@ FUNC_NAME: > EX_LD_FP(LOAD(ldd, %o4+40, %f26), memcpy_retl_o2_plus_o5_plus_40) > faligndata %f24, %f26, %f10 > EX_ST_FP(STORE(std, %f6, %o0+24), memcpy_retl_o2_plus_o5_plus_40) > - EX_LD_FP(LOAD(ldd, %o4+48, %f28), memcpy_retl_o2_plus_o5_plus_40) > + EX_LD_FP(LOAD(ldd, %o4+48, %f28), memcpy_retl_o2_plus_o5_plus_32) > faligndata %f26, %f28, %f12 > - EX_ST_FP(STORE(std, %f8, %o0+32), memcpy_retl_o2_plus_o5_plus_40) > + EX_ST_FP(STORE(std, %f8, %o0+32), memcpy_retl_o2_plus_o5_plus_32) > add %o4, 64, %o4 > - EX_LD_FP(LOAD(ldd, %o4-8, %f30), memcpy_retl_o2_plus_o5_plus_40) > + EX_LD_FP(LOAD(ldd, %o4-8, %f30), memcpy_retl_o2_plus_o5_plus_24) > faligndata %f28, %f30, %f14 > - EX_ST_FP(STORE(std, %f10, %o0+40), memcpy_retl_o2_plus_o5_plus_40) > - EX_ST_FP(STORE(std, %f12, %o0+48), memcpy_retl_o2_plus_o5_plus_40) > + EX_ST_FP(STORE(std, %f10, %o0+40), memcpy_retl_o2_plus_o5_plus_24) > + EX_ST_FP(STORE(std, %f12, %o0+48), memcpy_retl_o2_plus_o5_plus_16) > add %o0, 64, %o0 > - EX_ST_FP(STORE(std, %f14, %o0-8), memcpy_retl_o2_plus_o5_plus_40) > + EX_ST_FP(STORE(std, %f14, %o0-8), memcpy_retl_o2_plus_o5_plus_8) > fsrc2 %f30, %f14 > bgu,pt %xcc, .Lunalign_sloop > prefetch [%o4 + (8 * BLOCK_SIZE)], 20 > @@ -728,7 +728,7 @@ FUNC_NAME: > add %o4, 8, %o4 > faligndata %f0, %f2, %f16 > subcc %o5, 8, %o5 > - EX_ST_FP(STORE(std, %f16, %o0), memcpy_retl_o2_plus_o5) > + EX_ST_FP(STORE(std, %f16, %o0), memcpy_retl_o2_plus_o5_plus_8) > fsrc2 %f2, %f0 > bgu,pt %xcc, .Lunalign_by8 > add %o0, 8, %o0 > @@ -772,7 +772,7 @@ FUNC_NAME: > subcc %o5, 0x20, %o5 > EX_ST(STORE(stx, %o3, %o0 + 0x00), memcpy_retl_o2_plus_o5_plus_32) > EX_ST(STORE(stx, %g2, %o0 + 0x08), memcpy_retl_o2_plus_o5_plus_24) > - EX_ST(STORE(stx, %g7, %o0 + 0x10), memcpy_retl_o2_plus_o5_plus_24) > + EX_ST(STORE(stx, %g7, %o0 + 0x10), memcpy_retl_o2_plus_o5_plus_16) > EX_ST(STORE(stx, %o4, %o0 + 0x18), memcpy_retl_o2_plus_o5_plus_8) > bne,pt %xcc, 1b > add %o0, 0x20, %o0 > @@ -804,12 +804,12 @@ FUNC_NAME: > brz,pt %o3, 2f > sub %o2, %o3, %o2 > > -1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2), memcpy_retl_o2_plus_g1) > +1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2), memcpy_retl_o2_plus_o3) > add %o1, 1, %o1 > subcc %o3, 1, %o3 > add %o0, 1, %o0 > bne,pt %xcc, 1b > - EX_ST(STORE(stb, %g2, %o0 - 0x01), memcpy_retl_o2_plus_g1_plus_1) > + EX_ST(STORE(stb, %g2, %o0 - 0x01), memcpy_retl_o2_plus_o3_plus_1) > 2: > and %o1, 0x7, %o3 > brz,pn %o3, .Lmedium_noprefetch_cp > diff --git a/arch/sparc/lib/Memcpy_utils.S b/arch/sparc/lib/Memcpy_utils.S > index 64fbac28b3db..207343367bb2 100644 > --- a/arch/sparc/lib/Memcpy_utils.S > +++ b/arch/sparc/lib/Memcpy_utils.S > @@ -137,6 +137,15 @@ ENTRY(memcpy_retl_o2_plus_63_8) > ba,pt %xcc, __restore_asi > add %o2, 8, %o0 > ENDPROC(memcpy_retl_o2_plus_63_8) > +ENTRY(memcpy_retl_o2_plus_o3) > + ba,pt %xcc, __restore_asi > + add %o2, %o3, %o0 > +ENDPROC(memcpy_retl_o2_plus_o3) > +ENTRY(memcpy_retl_o2_plus_o3_plus_1) > + add %o3, 1, %o3 > + ba,pt %xcc, __restore_asi > + add %o2, %o3, %o0 > +ENDPROC(memcpy_retl_o2_plus_o3_plus_1) > ENTRY(memcpy_retl_o2_plus_o5) > ba,pt %xcc, __restore_asi > add %o2, %o5, %o0 I have had the chance to test this patch on a SPARC S7 machine. After adding the CPU detection fixes from Oracle's UEK kernel [1][2][3] and making sure that sparc_m7_patch was invoked for SPARC S7 to enable the M7-specific copy_{from,to}_user code, I can confirm that the machine runs stable with the patch above. I even verified that the CPU detection works properly and calls sparc_m7_patch by using the following hack which made the SPARC S7 indeed hang at boot: diff --git a/arch/sparc/kernel/head_64.S b/arch/sparc/kernel/head_64.S index c305486501dc..2de3d5139e1f 100644 --- a/arch/sparc/kernel/head_64.S +++ b/arch/sparc/kernel/head_64.S @@ -613,8 +613,9 @@ niagara_tlb_fixup: cmp %g1, SUN4V_CHIP_SPARC_M8 be,pt %xcc, sparc_m7_patch nop +sparc_s7_loop: cmp %g1, SUN4V_CHIP_SPARC_S7 - be,pt %xcc, sparc_m7_patch + be,pt %xcc, sparc_s7_loop nop call generic_patch_copyops Additionally, the owner of this machine, Tony Rodriguez stress-ng and hardinfo2 tests without any problems. Both passed. Tested-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> Adrian > [1] https://github.com/oracle/linux-uek/commit/71051596a59897d6fe577d92184081fbccada7af > [2] https://github.com/oracle/linux-uek/commit/01bd59051e17dc04785211350a05fd337460b86b > [3] https://github.com/oracle/linux-uek/commit/e3125b871798dcd831daaf70bb05ff3f005277fb -- .''`. John Paul Adrian Glaubitz : :' : Debian Developer `. `' Physicist `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] sparc: fix accurate exception reporting in copy_{from_to}_user for M7 2025-08-28 12:18 ` [PATCH 1/1] sparc: fix accurate exception reporting in copy_{from_to}_user for M7 Michael Karcher 2025-08-28 12:36 ` John Paul Adrian Glaubitz @ 2025-09-04 14:19 ` Andreas Larsson 1 sibling, 0 replies; 10+ messages in thread From: Andreas Larsson @ 2025-09-04 14:19 UTC (permalink / raw) To: Michael Karcher, linux-kernel Cc: sparclinux, John Paul Adrian Glaubitz, Anthony Yznaga On 2025-08-28 14:18, Michael Karcher wrote: > --- > arch/sparc/lib/M7memcpy.S | 20 ++++++++++---------- > arch/sparc/lib/Memcpy_utils.S | 9 +++++++++ > 2 files changed, 19 insertions(+), 10 deletions(-) I think putting this patch together with the first four in the v2 of the "Fix accurate exception reporting in SPARC assembly" series would be good so that they all are under the same cover letter that has the larger context. A lore link in the v2 letter to both these v1 threads would allow tracking back the discussion history for both threads. Cheers, Andreas ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2025-09-04 14:19 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-08-28 12:18 sparc: Another fix for accurate exception reporting in copy_{from,to}_user Michael Karcher
2025-08-28 12:18 ` [PATCH 1/1] sparc: fix accurate exception reporting in copy_{from_to}_user for M7 Michael Karcher
2025-08-28 12:36 ` John Paul Adrian Glaubitz
2025-08-28 13:04 ` [PATCH v2 1/1] sparc: fix accurate exception reporting in copy_{from,to}_user " Michael Karcher
2025-08-31 23:43 ` John Paul Adrian Glaubitz
2025-09-01 7:00 ` Rainer Orth
2025-09-01 7:05 ` John Paul Adrian Glaubitz
2025-09-01 14:18 ` Rainer Orth
2025-09-01 19:15 ` John Paul Adrian Glaubitz
2025-09-04 14:19 ` [PATCH 1/1] sparc: fix accurate exception reporting in copy_{from_to}_user " Andreas Larsson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®