Skip to content

Commit

Permalink
xtensa: fix fast_syscall_spill_registers
Browse files Browse the repository at this point in the history
The original implementation could clobber registers under certain conditions.

The Xtensa processor architecture uses windowed registers and the original
implementation was using a4 as a temporary register, which under certain
conditions could be register a0 of the oldest window frame, and didn't always
restore the content correctly.

By moving the _spill_registers routine inside the fast system call, it frees
up one more register (the return address is not required anymore) for the
spill routine.

Signed-off-by: Chris Zankel <chris@zankel.net>
  • Loading branch information
Chris Zankel committed Jan 29, 2014
1 parent 6b5a1f7 commit c0e50d4
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 3 deletions.
2 changes: 1 addition & 1 deletion arch/xtensa/kernel/vectors.S
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ ENTRY(_DoubleExceptionVector)

/* Check for overflow/underflow exception, jump if overflow. */

_bbci.l a0, 6, _DoubleExceptionVector_WindowOverflow
bbci.l a0, 6, _DoubleExceptionVector_WindowOverflow

/*
* Restart window underflow exception.
Expand Down
2 changes: 0 additions & 2 deletions arch/xtensa/kernel/xtensa_ksyms.c
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,7 @@ EXPORT_SYMBOL(insw);
EXPORT_SYMBOL(insl);

extern long common_exception_return;
extern long _spill_registers;
EXPORT_SYMBOL(common_exception_return);
EXPORT_SYMBOL(_spill_registers);

#ifdef CONFIG_FUNCTION_TRACER
EXPORT_SYMBOL(_mcount);
Expand Down

0 comments on commit c0e50d4

Please sign in to comment.