* [PATCH 0/2] xtensa queue 2013/10/15 for 3.12
@ 2013-10-14 22:22 Max Filippov
2013-10-14 22:22 ` [PATCH 1/2] xtensa: fix fast_syscall_spill_registers_fixup Max Filippov
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Max Filippov @ 2013-10-14 22:22 UTC (permalink / raw)
To: Chris Zankel
Cc: Marc Gauthier, Baruch Siach, linux-xtensa, linux-arch,
Max Filippov
Hi Chris,
could you please push these two fixes to the 3.12?
One fixes the regression introduced by the a3/excsave conversion in 3.12-rc1,
and the other fixes use of nonexistent alternative signal stack by threads.
You can pull these changes from my git tree,
the following changes since commit 61e6cfa80de5760bbe406f4e815b7739205754d2:
Linux 3.12-rc5 (2013-10-13 15:41:28 -0700)
are available in the git repository at:
git://github.com/jcmvbkbc/linux-xtensa.git xtensa-fixes-for-upstream
Baruch Siach (1):
xtensa: don't use alternate signal stack on threads
Max Filippov (1):
xtensa: fix fast_syscall_spill_registers_fixup
arch/xtensa/kernel/entry.S | 49 ++++++++++++++++++++++++++----------------
arch/xtensa/kernel/signal.c | 2 +-
2 files changed, 31 insertions(+), 20 deletions(-)
--
1.7.7.6
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] xtensa: fix fast_syscall_spill_registers_fixup
2013-10-14 22:22 [PATCH 0/2] xtensa queue 2013/10/15 for 3.12 Max Filippov
@ 2013-10-14 22:22 ` Max Filippov
2013-10-14 22:22 ` [PATCH 2/2] xtensa: don't use alternate signal stack on threads Max Filippov
2013-10-15 17:58 ` [PATCH 0/2] xtensa queue 2013/10/15 for 3.12 Chris Zankel
2 siblings, 0 replies; 5+ messages in thread
From: Max Filippov @ 2013-10-14 22:22 UTC (permalink / raw)
To: Chris Zankel
Cc: Marc Gauthier, Baruch Siach, linux-xtensa, linux-arch,
Max Filippov
fast_syscall_spill_registers_fixup was not correctly updated by the
'keep a3 and excsave1 on entry to exception handlers' patch: it doesn't
preserve a3 that it gets on entry, breaking _spill_registers in case of
page fault on stack during register spilling, leading to unhandled
exception in kernel mode.
Preserve a3 by saving it in the original _spill_registers stack frame's
a3 during exception handling and restoring it afterwards.
Also fix comments and function bounds annotations.
Reported-by: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Tested-by: Baruch Siach <baruch@tkos.co.il>
---
arch/xtensa/kernel/entry.S | 49 ++++++++++++++++++++++++++-----------------
1 files changed, 30 insertions(+), 19 deletions(-)
diff --git a/arch/xtensa/kernel/entry.S b/arch/xtensa/kernel/entry.S
index de1dfa1..21dbe6b 100644
--- a/arch/xtensa/kernel/entry.S
+++ b/arch/xtensa/kernel/entry.S
@@ -1122,7 +1122,7 @@ ENDPROC(fast_syscall_spill_registers)
* a3: exctable, original value in excsave1
*/
-fast_syscall_spill_registers_fixup:
+ENTRY(fast_syscall_spill_registers_fixup)
rsr a2, windowbase # get current windowbase (a2 is saved)
xsr a0, depc # restore depc and a0
@@ -1134,22 +1134,26 @@ fast_syscall_spill_registers_fixup:
*/
xsr a3, excsave1 # get spill-mask
- slli a2, a3, 1 # shift left by one
+ slli a3, a3, 1 # shift left by one
- slli a3, a2, 32-WSBITS
- src a2, a2, a3 # a1 = xxwww1yyxxxwww1yy......
+ slli a2, a3, 32-WSBITS
+ src a2, a3, a2 # a2 = xxwww1yyxxxwww1yy......
wsr a2, windowstart # set corrected windowstart
- rsr a3, excsave1
- l32i a2, a3, EXC_TABLE_DOUBLE_SAVE # restore a2
- l32i a3, a3, EXC_TABLE_PARAM # original WB (in user task)
+ srli a3, a3, 1
+ rsr a2, excsave1
+ l32i a2, a2, EXC_TABLE_DOUBLE_SAVE # restore a2
+ xsr a2, excsave1
+ s32i a3, a2, EXC_TABLE_DOUBLE_SAVE # save a3
+ l32i a3, a2, EXC_TABLE_PARAM # original WB (in user task)
+ xsr a2, excsave1
/* Return to the original (user task) WINDOWBASE.
* We leave the following frame behind:
* a0, a1, a2 same
- * a3: trashed (saved in excsave_1)
+ * a3: trashed (saved in EXC_TABLE_DOUBLE_SAVE)
* depc: depc (we have to return to that address)
- * excsave_1: a3
+ * excsave_1: exctable
*/
wsr a3, windowbase
@@ -1159,9 +1163,9 @@ fast_syscall_spill_registers_fixup:
* a0: return address
* a1: used, stack pointer
* a2: kernel stack pointer
- * a3: available, saved in EXCSAVE_1
+ * a3: available
* depc: exception address
- * excsave: a3
+ * excsave: exctable
* Note: This frame might be the same as above.
*/
@@ -1181,9 +1185,12 @@ fast_syscall_spill_registers_fixup:
rsr a0, exccause
addx4 a0, a0, a3 # find entry in table
l32i a0, a0, EXC_TABLE_FAST_USER # load handler
+ l32i a3, a3, EXC_TABLE_DOUBLE_SAVE
jx a0
-fast_syscall_spill_registers_fixup_return:
+ENDPROC(fast_syscall_spill_registers_fixup)
+
+ENTRY(fast_syscall_spill_registers_fixup_return)
/* When we return here, all registers have been restored (a2: DEPC) */
@@ -1191,13 +1198,13 @@ fast_syscall_spill_registers_fixup_return:
/* Restore fixup handler. */
- xsr a3, excsave1
- movi a2, fast_syscall_spill_registers_fixup
- s32i a2, a3, EXC_TABLE_FIXUP
- s32i a0, a3, EXC_TABLE_DOUBLE_SAVE
- rsr a2, windowbase
- s32i a2, a3, EXC_TABLE_PARAM
- l32i a2, a3, EXC_TABLE_KSTK
+ rsr a2, excsave1
+ s32i a3, a2, EXC_TABLE_DOUBLE_SAVE
+ movi a3, fast_syscall_spill_registers_fixup
+ s32i a3, a2, EXC_TABLE_FIXUP
+ rsr a3, windowbase
+ s32i a3, a2, EXC_TABLE_PARAM
+ l32i a2, a2, EXC_TABLE_KSTK
/* Load WB at the time the exception occurred. */
@@ -1206,8 +1213,12 @@ fast_syscall_spill_registers_fixup_return:
wsr a3, windowbase
rsync
+ rsr a3, excsave1
+ l32i a3, a3, EXC_TABLE_DOUBLE_SAVE
+
rfde
+ENDPROC(fast_syscall_spill_registers_fixup_return)
/*
* spill all registers.
--
1.7.7.6
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] xtensa: don't use alternate signal stack on threads
2013-10-14 22:22 [PATCH 0/2] xtensa queue 2013/10/15 for 3.12 Max Filippov
2013-10-14 22:22 ` [PATCH 1/2] xtensa: fix fast_syscall_spill_registers_fixup Max Filippov
@ 2013-10-14 22:22 ` Max Filippov
2013-10-15 17:58 ` [PATCH 0/2] xtensa queue 2013/10/15 for 3.12 Chris Zankel
2 siblings, 0 replies; 5+ messages in thread
From: Max Filippov @ 2013-10-14 22:22 UTC (permalink / raw)
To: Chris Zankel
Cc: Marc Gauthier, Baruch Siach, linux-xtensa, linux-arch, stable,
Max Filippov
From: Baruch Siach <baruch@tkos.co.il>
According to create_thread(3): "The new thread does not inherit the creating
thread's alternate signal stack". Since commit f9a3879a (Fix sigaltstack
corruption among cloned threads), current->sas_ss_size is set to 0 for cloned
processes sharing VM with their parent. Don't use the (nonexistent) alternate
signal stack in this case. This has been broken since commit 29c4dfd9 ([XTENSA]
Remove non-rt signal handling).
Fixes the SA_ONSTACK part of the nptl/tst-cancel20 test from uClibc.
Cc: <stable@vger.kernel.org>
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
---
arch/xtensa/kernel/signal.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/xtensa/kernel/signal.c b/arch/xtensa/kernel/signal.c
index 718eca1..98b67d5 100644
--- a/arch/xtensa/kernel/signal.c
+++ b/arch/xtensa/kernel/signal.c
@@ -341,7 +341,7 @@ static int setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
sp = regs->areg[1];
- if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && ! on_sig_stack(sp)) {
+ if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && sas_ss_flags(sp) == 0) {
sp = current->sas_ss_sp + current->sas_ss_size;
}
--
1.7.7.6
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] xtensa queue 2013/10/15 for 3.12
2013-10-14 22:22 [PATCH 0/2] xtensa queue 2013/10/15 for 3.12 Max Filippov
2013-10-14 22:22 ` [PATCH 1/2] xtensa: fix fast_syscall_spill_registers_fixup Max Filippov
2013-10-14 22:22 ` [PATCH 2/2] xtensa: don't use alternate signal stack on threads Max Filippov
@ 2013-10-15 17:58 ` Chris Zankel
2013-10-15 18:29 ` Max Filippov
2 siblings, 1 reply; 5+ messages in thread
From: Chris Zankel @ 2013-10-15 17:58 UTC (permalink / raw)
To: Max Filippov; +Cc: Marc Gauthier, Baruch Siach, linux-xtensa, linux-arch
Hi Max,
Thanks for the patches. Is my assumption correct that this fixes memory
faults while in double exception? And, instead of panic-ing, it works
now but registers are likely wrong with ptrace?
Also, should that go in for 3.12 (rc6?) or only in 3.13?
Thanks,
-Chris
On 10/14/2013 03:22 PM, Max Filippov wrote:
> Hi Chris,
>
> could you please push these two fixes to the 3.12?
> One fixes the regression introduced by the a3/excsave conversion in 3.12-rc1,
> and the other fixes use of nonexistent alternative signal stack by threads.
>
> You can pull these changes from my git tree,
> the following changes since commit 61e6cfa80de5760bbe406f4e815b7739205754d2:
>
> Linux 3.12-rc5 (2013-10-13 15:41:28 -0700)
>
> are available in the git repository at:
> git://github.com/jcmvbkbc/linux-xtensa.git xtensa-fixes-for-upstream
>
> Baruch Siach (1):
> xtensa: don't use alternate signal stack on threads
>
> Max Filippov (1):
> xtensa: fix fast_syscall_spill_registers_fixup
>
> arch/xtensa/kernel/entry.S | 49 ++++++++++++++++++++++++++----------------
> arch/xtensa/kernel/signal.c | 2 +-
> 2 files changed, 31 insertions(+), 20 deletions(-)
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] xtensa queue 2013/10/15 for 3.12
2013-10-15 17:58 ` [PATCH 0/2] xtensa queue 2013/10/15 for 3.12 Chris Zankel
@ 2013-10-15 18:29 ` Max Filippov
0 siblings, 0 replies; 5+ messages in thread
From: Max Filippov @ 2013-10-15 18:29 UTC (permalink / raw)
To: Chris Zankel
Cc: Marc Gauthier, Baruch Siach, linux-xtensa@linux-xtensa.org,
Linux-Arch
On Tue, Oct 15, 2013 at 9:58 PM, Chris Zankel <chris@zankel.net> wrote:
> Hi Max,
>
> Thanks for the patches. Is my assumption correct that this fixes memory
> faults while in double exception? And, instead of panic-ing, it works
> now but registers are likely wrong with ptrace?
Well, one of them fixes the fixup handler for register spilling. It is
not functional
in xtensa-2.6.29-smp and I've blindly ported it with a3/excsave
changes. If register
spilling causes an exception current fixup handler messes up registers, which
results in unrecoverable exception with very obscure trace. I don't
think the fix has
any effect on ptrace. This fix is not related to the issue with
delivering signals
generated in double exception, I haven't got chance to fix it it properly yet.
Related ML thread:
http://lists.linux-xtensa.org/pipermail/linux-xtensa/Week-of-Mon-20130909/001198.html
http://lists.linux-xtensa.org/pipermail/linux-xtensa/Week-of-Mon-20130916/001209.html
> Also, should that go in for 3.12 (rc6?) or only in 3.13?
This is for 3.12. I have another (bigger :) pile for 3.13, will send
it in a couple
of days.
> On 10/14/2013 03:22 PM, Max Filippov wrote:
>> Hi Chris,
>>
>> could you please push these two fixes to the 3.12?
>> One fixes the regression introduced by the a3/excsave conversion in 3.12-rc1,
>> and the other fixes use of nonexistent alternative signal stack by threads.
>>
>> You can pull these changes from my git tree,
>> the following changes since commit 61e6cfa80de5760bbe406f4e815b7739205754d2:
>>
>> Linux 3.12-rc5 (2013-10-13 15:41:28 -0700)
>>
>> are available in the git repository at:
>> git://github.com/jcmvbkbc/linux-xtensa.git xtensa-fixes-for-upstream
>>
>> Baruch Siach (1):
>> xtensa: don't use alternate signal stack on threads
>>
>> Max Filippov (1):
>> xtensa: fix fast_syscall_spill_registers_fixup
>>
>> arch/xtensa/kernel/entry.S | 49 ++++++++++++++++++++++++++----------------
>> arch/xtensa/kernel/signal.c | 2 +-
>> 2 files changed, 31 insertions(+), 20 deletions(-)
>>
--
Thanks.
-- Max
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-10-15 18:29 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-14 22:22 [PATCH 0/2] xtensa queue 2013/10/15 for 3.12 Max Filippov
2013-10-14 22:22 ` [PATCH 1/2] xtensa: fix fast_syscall_spill_registers_fixup Max Filippov
2013-10-14 22:22 ` [PATCH 2/2] xtensa: don't use alternate signal stack on threads Max Filippov
2013-10-15 17:58 ` [PATCH 0/2] xtensa queue 2013/10/15 for 3.12 Chris Zankel
2013-10-15 18:29 ` Max Filippov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).