Commit 5579a782 authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
  math-emu: Fix thinko in _FP_DIV
  math-emu: Fix signalling of underflow and inexact while packing result.
  sparc: Add checkstack support
  sparc: correct section of current_pc()
  sparc: correct section of apc_no_idle
  sparc64: Fix race in arch/sparc64/kernel/trampoline.S
parents 969907a9 60b82673
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#define APC_DEVNAME "apc" #define APC_DEVNAME "apc"
static u8 __iomem *regs; static u8 __iomem *regs;
static int apc_no_idle __initdata = 0; static int apc_no_idle __devinitdata = 0;
#define apc_readb(offs) (sbus_readb(regs+offs)) #define apc_readb(offs) (sbus_readb(regs+offs))
#define apc_writeb(val, offs) (sbus_writeb(val, regs+offs)) #define apc_writeb(val, offs) (sbus_writeb(val, regs+offs))
......
...@@ -465,6 +465,7 @@ gokernel: ...@@ -465,6 +465,7 @@ gokernel:
mov %o7, %g4 ! Save %o7 mov %o7, %g4 ! Save %o7
/* Jump to it, and pray... */ /* Jump to it, and pray... */
__INIT
current_pc: current_pc:
call 1f call 1f
nop nop
......
...@@ -328,6 +328,12 @@ after_lock_tlb: ...@@ -328,6 +328,12 @@ after_lock_tlb:
wrpr %g0, 0, %wstate wrpr %g0, 0, %wstate
sethi %hi(prom_entry_lock), %g2
1: ldstub [%g2 + %lo(prom_entry_lock)], %g1
membar #StoreLoad | #StoreStore
brnz,pn %g1, 1b
nop
/* As a hack, put &init_thread_union into %g6. /* As a hack, put &init_thread_union into %g6.
* prom_world() loads from here to restore the %asi * prom_world() loads from here to restore the %asi
* register. * register.
...@@ -337,7 +343,7 @@ after_lock_tlb: ...@@ -337,7 +343,7 @@ after_lock_tlb:
sethi %hi(is_sun4v), %o0 sethi %hi(is_sun4v), %o0
lduw [%o0 + %lo(is_sun4v)], %o0 lduw [%o0 + %lo(is_sun4v)], %o0
brz,pt %o0, 1f brz,pt %o0, 2f
nop nop
TRAP_LOAD_TRAP_BLOCK(%g2, %g3) TRAP_LOAD_TRAP_BLOCK(%g2, %g3)
...@@ -369,10 +375,10 @@ after_lock_tlb: ...@@ -369,10 +375,10 @@ after_lock_tlb:
call %o1 call %o1
add %sp, (2047 + 128), %o0 add %sp, (2047 + 128), %o0
ba,pt %xcc, 2f ba,pt %xcc, 3f
nop nop
1: sethi %hi(sparc64_ttable_tl0), %o0 2: sethi %hi(sparc64_ttable_tl0), %o0
set prom_set_trap_table_name, %g2 set prom_set_trap_table_name, %g2
stx %g2, [%sp + 2047 + 128 + 0x00] stx %g2, [%sp + 2047 + 128 + 0x00]
mov 1, %g2 mov 1, %g2
...@@ -386,7 +392,11 @@ after_lock_tlb: ...@@ -386,7 +392,11 @@ after_lock_tlb:
call %o1 call %o1
add %sp, (2047 + 128), %o0 add %sp, (2047 + 128), %o0
2: ldx [%l0], %g6 3: sethi %hi(prom_entry_lock), %g2
stb %g0, [%g2 + %lo(prom_entry_lock)]
membar #StoreStore | #StoreLoad
ldx [%l0], %g6
ldx [%g6 + TI_TASK], %g4 ldx [%g6 + TI_TASK], %g4
mov 1, %g5 mov 1, %g5
......
...@@ -139,18 +139,27 @@ do { \ ...@@ -139,18 +139,27 @@ do { \
if (X##_e <= _FP_WFRACBITS_##fs) \ if (X##_e <= _FP_WFRACBITS_##fs) \
{ \ { \
_FP_FRAC_SRS_##wc(X, X##_e, _FP_WFRACBITS_##fs); \ _FP_FRAC_SRS_##wc(X, X##_e, _FP_WFRACBITS_##fs); \
_FP_ROUND(wc, X); \
if (_FP_FRAC_HIGH_##fs(X) \ if (_FP_FRAC_HIGH_##fs(X) \
& (_FP_OVERFLOW_##fs >> 1)) \ & (_FP_OVERFLOW_##fs >> 1)) \
{ \ { \
X##_e = 1; \ X##_e = 1; \
_FP_FRAC_SET_##wc(X, _FP_ZEROFRAC_##wc); \ _FP_FRAC_SET_##wc(X, _FP_ZEROFRAC_##wc); \
FP_SET_EXCEPTION(FP_EX_INEXACT); \
} \ } \
else \ else \
{ \ { \
X##_e = 0; \ _FP_ROUND(wc, X); \
_FP_FRAC_SRL_##wc(X, _FP_WORKBITS); \ if (_FP_FRAC_HIGH_##fs(X) \
& (_FP_OVERFLOW_##fs >> 1)) \
{ \
X##_e = 1; \
_FP_FRAC_SET_##wc(X, _FP_ZEROFRAC_##wc); \
FP_SET_EXCEPTION(FP_EX_INEXACT); \
} \
else \
{ \
X##_e = 0; \
_FP_FRAC_SRL_##wc(X, _FP_WORKBITS); \
} \
} \ } \
if ((FP_CUR_EXCEPTIONS & FP_EX_INEXACT) || \ if ((FP_CUR_EXCEPTIONS & FP_EX_INEXACT) || \
(FP_TRAPPING_EXCEPTIONS & FP_EX_UNDERFLOW)) \ (FP_TRAPPING_EXCEPTIONS & FP_EX_UNDERFLOW)) \
...@@ -494,6 +503,8 @@ do { \ ...@@ -494,6 +503,8 @@ do { \
R##_c = FP_CLS_NAN; \ R##_c = FP_CLS_NAN; \
_FP_FRAC_SET_##wc(R, _FP_NANFRAC_##fs); \ _FP_FRAC_SET_##wc(R, _FP_NANFRAC_##fs); \
FP_SET_EXCEPTION(FP_EX_INVALID | FP_EX_INVALID_IDI);\ FP_SET_EXCEPTION(FP_EX_INVALID | FP_EX_INVALID_IDI);\
break; \
\
case _FP_CLS_COMBINE(FP_CLS_ZERO,FP_CLS_ZERO): \ case _FP_CLS_COMBINE(FP_CLS_ZERO,FP_CLS_ZERO): \
R##_s = _FP_NANSIGN_##fs; \ R##_s = _FP_NANSIGN_##fs; \
R##_c = FP_CLS_NAN; \ R##_c = FP_CLS_NAN; \
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
# M68k port by Geert Uytterhoeven and Andreas Schwab # M68k port by Geert Uytterhoeven and Andreas Schwab
# AVR32 port by Haavard Skinnemoen <hskinnemoen@atmel.com> # AVR32 port by Haavard Skinnemoen <hskinnemoen@atmel.com>
# PARISC port by Kyle McMartin <kyle@parisc-linux.org> # PARISC port by Kyle McMartin <kyle@parisc-linux.org>
# sparc port by Martin Habets <errandir_news@mph.eclipse.co.uk>
# #
# Usage: # Usage:
# objdump -d vmlinux | scripts/checkstack.pl [arch] # objdump -d vmlinux | scripts/checkstack.pl [arch]
...@@ -94,6 +95,9 @@ my (@stack, $re, $dre, $x, $xs); ...@@ -94,6 +95,9 @@ my (@stack, $re, $dre, $x, $xs);
} elsif ($arch =~ /^blackfin$/) { } elsif ($arch =~ /^blackfin$/) {
# 0: 00 e8 38 01 LINK 0x4e0; # 0: 00 e8 38 01 LINK 0x4e0;
$re = qr/.*[[:space:]]LINK[[:space:]]*(0x$x{1,8})/o; $re = qr/.*[[:space:]]LINK[[:space:]]*(0x$x{1,8})/o;
} elsif ($arch eq 'sparc' || $arch eq 'sparc64') {
# f0019d10: 9d e3 bf 90 save %sp, -112, %sp
$re = qr/.*save.*%sp, -(([0-9]{2}|[3-9])[0-9]{2}), %sp/o;
} else { } else {
print("wrong or unknown architecture \"$arch\"\n"); print("wrong or unknown architecture \"$arch\"\n");
exit exit
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment