]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 10 Feb 2009 19:48:49 +0000 (11:48 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 10 Feb 2009 19:48:49 +0000 (11:48 -0800)
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
  sparc64: Fix probe_kernel_{read,write}().
  sparc64: Kill .fixup section bloat.
  sparc64: Don't hook up pcr_ops on spitfire chips.
  sparc64: Call dump_stack() in die_nmi().

17 files changed:
arch/sparc/kernel/head_64.S
arch/sparc/kernel/nmi.c
arch/sparc/kernel/pcr.c
arch/sparc/lib/GENbzero.S
arch/sparc/lib/GENcopy_from_user.S
arch/sparc/lib/GENcopy_to_user.S
arch/sparc/lib/NG2copy_from_user.S
arch/sparc/lib/NG2copy_to_user.S
arch/sparc/lib/NGbzero.S
arch/sparc/lib/NGcopy_from_user.S
arch/sparc/lib/NGcopy_to_user.S
arch/sparc/lib/U1copy_from_user.S
arch/sparc/lib/U1copy_to_user.S
arch/sparc/lib/U3copy_from_user.S
arch/sparc/lib/U3copy_to_user.S
arch/sparc/lib/bzero.S
arch/sparc/lib/copy_in_user.S

index 8ffee714f932a026fdeea5d2c2973dbcd724bdb0..a46c3a21e26ded67dc59b816e9c8b8f5f7eade1f 100644 (file)
@@ -891,10 +891,35 @@ prom_tba: .xword  0
 tlb_type:      .word   0       /* Must NOT end up in BSS */
        .section        ".fixup",#alloc,#execinstr
 
-       .globl  __ret_efault, __retl_efault
-__ret_efault:
+       .globl  __ret_efault, __retl_efault, __ret_one, __retl_one
+ENTRY(__ret_efault)
        ret
         restore %g0, -EFAULT, %o0
-__retl_efault:
+ENDPROC(__ret_efault)
+
+ENTRY(__retl_efault)
        retl
         mov    -EFAULT, %o0
+ENDPROC(__retl_efault)
+
+ENTRY(__retl_one)
+       retl
+        mov    1, %o0
+ENDPROC(__retl_one)
+
+ENTRY(__ret_one_asi)
+       wr      %g0, ASI_AIUS, %asi
+       ret
+        restore %g0, 1, %o0
+ENDPROC(__ret_one_asi)
+
+ENTRY(__retl_one_asi)
+       wr      %g0, ASI_AIUS, %asi
+       retl
+        mov    1, %o0
+ENDPROC(__retl_one_asi)
+
+ENTRY(__retl_o1)
+       retl
+        mov    %o1, %o0
+ENDPROC(__retl_o1)
index 09f088ed4a642d1bbbb278358af7f642307681cc..f3577223c8630e2d40002c72026755c72bb3bcfe 100644 (file)
@@ -70,6 +70,7 @@ static void die_nmi(const char *str, struct pt_regs *regs, int do_panic)
        printk(" on CPU%d, ip %08lx, registers:\n",
               smp_processor_id(), regs->tpc);
        show_regs(regs);
+       dump_stack();
 
        bust_spinlocks(0);
 
index 92e0dda141a4a1a68e3ceda6516a712725e2f0bb..1ae8cdd7e70324fab9ee621993f2761a502a221b 100644 (file)
@@ -133,11 +133,16 @@ int __init pcr_arch_init(void)
 
        case cheetah:
        case cheetah_plus:
-       case spitfire:
                pcr_ops = &direct_pcr_ops;
                pcr_enable = PCR_SUN4U_ENABLE;
                break;
 
+       case spitfire:
+               /* UltraSPARC-I/II and derivatives lack a profile
+                * counter overflow interrupt so we can't make use of
+                * their hardware currently.
+                */
+               /* fallthrough */
        default:
                err = -ENODEV;
                goto out_unregister;
index 6a4f956a2f7a4a99d7388d0dafed55e65b506c30..8e7a843ddd88366411de59480377798033d4c0a9 100644 (file)
@@ -6,13 +6,9 @@
 
 #define EX_ST(x,y)             \
 98:    x,y;                    \
-       .section .fixup;        \
-       .align 4;               \
-99:    retl;                   \
-        mov    %o1, %o0;       \
        .section __ex_table,"a";\
        .align 4;               \
-       .word 98b, 99b;         \
+       .word 98b, __retl_o1;   \
        .text;                  \
        .align 4;
 
index 2b9df99e87f9f9190780a47ec534d5173e9d032e..b7d0bd6b14063bc1e62cfed3c0e32f0b43799396 100644 (file)
@@ -5,13 +5,9 @@
 
 #define EX_LD(x)               \
 98:    x;                      \
-       .section .fixup;        \
-       .align 4;               \
-99:    retl;                   \
-        mov    1, %o0;         \
        .section __ex_table,"a";\
        .align 4;               \
-       .word 98b, 99b;         \
+       .word 98b, __retl_one;  \
        .text;                  \
        .align 4;
 
@@ -27,7 +23,7 @@
 #define PREAMBLE                                       \
        rd              %asi, %g1;                      \
        cmp             %g1, ASI_AIUS;                  \
-       bne,pn          %icc, memcpy_user_stub;         \
+       bne,pn          %icc, ___copy_in_user;          \
         nop
 #endif
 
index bb3f7084daf9fb0282f88ad390f6b73551854bc5..780550e1afc74fd6efe38ef16f73a07ea021a8f2 100644 (file)
@@ -5,13 +5,9 @@
 
 #define EX_ST(x)               \
 98:    x;                      \
-       .section .fixup;        \
-       .align 4;               \
-99:    retl;                   \
-        mov    1, %o0;         \
        .section __ex_table,"a";\
        .align 4;               \
-       .word 98b, 99b;         \
+       .word 98b, __retl_one;  \
        .text;                  \
        .align 4;
 
@@ -31,7 +27,7 @@
 #define PREAMBLE                                       \
        rd              %asi, %g1;                      \
        cmp             %g1, ASI_AIUS;                  \
-       bne,pn          %icc, memcpy_user_stub;         \
+       bne,pn          %icc, ___copy_in_user;          \
         nop
 #endif
 
index c77ef5f22102bc25e5db7c869bc6e4c84695d0f3..119ccb9a54f49e2ac2724650060eb7a1d70e8d9e 100644 (file)
@@ -5,14 +5,9 @@
 
 #define EX_LD(x)               \
 98:    x;                      \
-       .section .fixup;        \
-       .align 4;               \
-99:    wr      %g0, ASI_AIUS, %asi;\
-       retl;                   \
-        mov    1, %o0;         \
        .section __ex_table,"a";\
        .align 4;               \
-       .word 98b, 99b;         \
+       .word 98b, __retl_one_asi;\
        .text;                  \
        .align 4;
 
@@ -33,7 +28,7 @@
 #define PREAMBLE                                       \
        rd              %asi, %g1;                      \
        cmp             %g1, ASI_AIUS;                  \
-       bne,pn          %icc, memcpy_user_stub;         \
+       bne,pn          %icc, ___copy_in_user;          \
         nop
 #endif
 
index 4bd4093acbbd561f03199f5d95f86e7dd417edb8..7fe1ccefd9d056a104407c8d1595095c7fc5add8 100644 (file)
@@ -5,14 +5,9 @@
 
 #define EX_ST(x)               \
 98:    x;                      \
-       .section .fixup;        \
-       .align 4;               \
-99:    wr      %g0, ASI_AIUS, %asi;\
-       retl;                   \
-        mov    1, %o0;         \
        .section __ex_table,"a";\
        .align 4;               \
-       .word 98b, 99b;         \
+       .word 98b, __retl_one_asi;\
        .text;                  \
        .align 4;
 
@@ -42,7 +37,7 @@
 #define PREAMBLE                                       \
        rd              %asi, %g1;                      \
        cmp             %g1, ASI_AIUS;                  \
-       bne,pn          %icc, memcpy_user_stub;         \
+       bne,pn          %icc, ___copy_in_user;          \
         nop
 #endif
 
index 814d5f7a45e1c3e9fe132f094d48a5ce7f050e08..beab29bf419b606ae23a7c1e8151e2527bc0943c 100644 (file)
@@ -6,13 +6,9 @@
 
 #define EX_ST(x,y)             \
 98:    x,y;                    \
-       .section .fixup;        \
-       .align 4;               \
-99:    retl;                   \
-        mov    %o1, %o0;       \
        .section __ex_table,"a";\
        .align 4;               \
-       .word 98b, 99b;         \
+       .word 98b, __retl_o1;   \
        .text;                  \
        .align 4;
 
index e7f433f71b42bd473b06e22e7b70e0e40e111c9b..5d1e4d1ac21edf09a664663dc005e1fcae805b6a 100644 (file)
@@ -5,14 +5,9 @@
 
 #define EX_LD(x)               \
 98:    x;                      \
-       .section .fixup;        \
-       .align 4;               \
-99:    wr      %g0, ASI_AIUS, %asi;\
-       ret;                    \
-        restore %g0, 1, %o0;   \
        .section __ex_table,"a";\
        .align 4;               \
-       .word 98b, 99b;         \
+       .word 98b, __ret_one_asi;\
        .text;                  \
        .align 4;
 
@@ -30,7 +25,7 @@
 #define PREAMBLE                                       \
        rd              %asi, %g1;                      \
        cmp             %g1, ASI_AIUS;                  \
-       bne,pn          %icc, memcpy_user_stub;         \
+       bne,pn          %icc, ___copy_in_user;          \
         nop
 #endif
 
index 6ea01c5532a0a87e30f4a737dee0a44b55da3df1..ff630dcb273c9649de6fc9e145fce42e72667787 100644 (file)
@@ -5,14 +5,9 @@
 
 #define EX_ST(x)               \
 98:    x;                      \
-       .section .fixup;        \
-       .align 4;               \
-99:    wr      %g0, ASI_AIUS, %asi;\
-       ret;                    \
-        restore %g0, 1, %o0;   \
        .section __ex_table,"a";\
        .align 4;               \
-       .word 98b, 99b;         \
+       .word 98b, __ret_one_asi;\
        .text;                  \
        .align 4;
 
@@ -33,7 +28,7 @@
 #define PREAMBLE                                       \
        rd              %asi, %g1;                      \
        cmp             %g1, ASI_AIUS;                  \
-       bne,pn          %icc, memcpy_user_stub;         \
+       bne,pn          %icc, ___copy_in_user;          \
         nop
 #endif
 
index 3192b0bf4fab93466ace297240a6b17e50d1e98a..a6ae2ea04bf5dfbffda2884a6a46b051ae2ac2a8 100644 (file)
@@ -5,13 +5,9 @@
 
 #define EX_LD(x)               \
 98:    x;                      \
-       .section .fixup;        \
-       .align 4;               \
-99:    retl;                   \
-        mov    1, %o0;         \
        .section __ex_table,"a";\
        .align 4;               \
-       .word 98b, 99b;         \
+       .word 98b, __retl_one;  \
        .text;                  \
        .align 4;
 
@@ -27,7 +23,7 @@
 #define PREAMBLE                                       \
        rd              %asi, %g1;                      \
        cmp             %g1, ASI_AIUS;                  \
-       bne,pn          %icc, memcpy_user_stub;         \
+       bne,pn          %icc, ___copy_in_user;          \
         nop;                                           \
 
 #include "U1memcpy.S"
index d1210ffb0b82aa444b71079bb617c83025473d6c..f4b970eeb485f838ce23dc5507a5bccd6defd348 100644 (file)
@@ -5,13 +5,9 @@
 
 #define EX_ST(x)               \
 98:    x;                      \
-       .section .fixup;        \
-       .align 4;               \
-99:    retl;                   \
-        mov    1, %o0;         \
        .section __ex_table,"a";\
        .align 4;               \
-       .word 98b, 99b;         \
+       .word 98b, __retl_one;  \
        .text;                  \
        .align 4;
 
@@ -27,7 +23,7 @@
 #define PREAMBLE                                       \
        rd              %asi, %g1;                      \
        cmp             %g1, ASI_AIUS;                  \
-       bne,pn          %icc, memcpy_user_stub;         \
+       bne,pn          %icc, ___copy_in_user;          \
         nop;                                           \
 
 #include "U1memcpy.S"
index f5bfc8d9d216686b031d685aa8f577fab4634324..b1acd1331c338fce1a70e6a13f597509b28501a7 100644 (file)
@@ -5,13 +5,9 @@
 
 #define EX_LD(x)               \
 98:    x;                      \
-       .section .fixup;        \
-       .align 4;               \
-99:    retl;                   \
-        mov    1, %o0;         \
        .section __ex_table,"a";\
        .align 4;               \
-       .word 98b, 99b;         \
+       .word 98b, __retl_one;  \
        .text;                  \
        .align 4;
 
index 2334f111bb0c81c36f4b1016725a238650e28d97..ef1e493afdfa900a1b32863c2bf2995560cbe0cd 100644 (file)
@@ -5,13 +5,9 @@
 
 #define EX_ST(x)               \
 98:    x;                      \
-       .section .fixup;        \
-       .align 4;               \
-99:    retl;                   \
-        mov    1, %o0;         \
        .section __ex_table,"a";\
        .align 4;               \
-       .word 98b, 99b;         \
+       .word 98b, __retl_one;  \
        .text;                  \
        .align 4;
 
@@ -27,7 +23,7 @@
 #define PREAMBLE                                       \
        rd              %asi, %g1;                      \
        cmp             %g1, ASI_AIUS;                  \
-       bne,pn          %icc, memcpy_user_stub;         \
+       bne,pn          %icc, ___copy_in_user;          \
         nop;                                           \
 
 #include "U3memcpy.S"
index c7bbae8c590f479f32d6a38db364840f295785d7..b6557297440f0dbb65a06a8153623be6ad8dc193 100644 (file)
@@ -88,13 +88,9 @@ __bzero_done:
 
 #define EX_ST(x,y)             \
 98:    x,y;                    \
-       .section .fixup;        \
-       .align 4;               \
-99:    retl;                   \
-        mov    %o1, %o0;       \
        .section __ex_table,"a";\
        .align 4;               \
-       .word 98b, 99b;         \
+       .word 98b, __retl_o1;   \
        .text;                  \
        .align 4;
 
index 650af3f21f7860b6c5ad30234f48a04f595e797d..302c0e60dc2ceb48a3212840ac7891f337419d14 100644 (file)
@@ -3,19 +3,16 @@
  * Copyright (C) 1999, 2000, 2004 David S. Miller (davem@redhat.com)
  */
 
+#include <linux/linkage.h>
 #include <asm/asi.h>
 
 #define XCC xcc
 
 #define EX(x,y)                        \
 98:    x,y;                    \
-       .section .fixup;        \
-       .align 4;               \
-99:    retl;                   \
-        mov 1, %o0;            \
        .section __ex_table,"a";\
        .align 4;               \
-       .word 98b, 99b;         \
+       .word 98b, __retl_one;  \
        .text;                  \
        .align 4;
 
         * to copy register windows around during thread cloning.
         */
 
-       .globl          ___copy_in_user
-       .type           ___copy_in_user,#function
-___copy_in_user:       /* %o0=dst, %o1=src, %o2=len */
-       /* Writing to %asi is _expensive_ so we hardcode it.
-        * Reading %asi to check for KERNEL_DS is comparatively
-        * cheap.
-        */
-       rd              %asi, %g1
-       cmp             %g1, ASI_AIUS
-       bne,pn          %icc, memcpy_user_stub
-        nop
-
+ENTRY(___copy_in_user) /* %o0=dst, %o1=src, %o2=len */
        cmp             %o2, 0
        be,pn           %XCC, 85f
         or             %o0, %o1, %o3
@@ -53,22 +39,24 @@ ___copy_in_user:    /* %o0=dst, %o1=src, %o2=len */
        /* 16 < len <= 64 */
        andcc           %o3, 0x7, %g0
        bne,pn          %XCC, 90f
-        sub            %o0, %o1, %o3
+        nop
 
        andn            %o2, 0x7, %o4
        and             %o2, 0x7, %o2
 1:     subcc           %o4, 0x8, %o4
        EX(ldxa [%o1] %asi, %o5)
-       EX(stxa %o5, [%o1 + %o3] ASI_AIUS)
+       EX(stxa %o5, [%o0] %asi)
+       add             %o1, 0x8, %o1
        bgu,pt          %XCC, 1b
-        add            %o1, 0x8, %o1
+        add            %o0, 0x8, %o0
        andcc           %o2, 0x4, %g0
        be,pt           %XCC, 1f
         nop
        sub             %o2, 0x4, %o2
        EX(lduwa [%o1] %asi, %o5)
-       EX(stwa %o5, [%o1 + %o3] ASI_AIUS)
+       EX(stwa %o5, [%o0] %asi)
        add             %o1, 0x4, %o1
+       add             %o0, 0x4, %o0
 1:     cmp             %o2, 0
        be,pt           %XCC, 85f
         nop
@@ -78,14 +66,15 @@ ___copy_in_user:    /* %o0=dst, %o1=src, %o2=len */
 80:    /* 0 < len <= 16 */
        andcc           %o3, 0x3, %g0
        bne,pn          %XCC, 90f
-        sub            %o0, %o1, %o3
+        nop
 
 82:
        subcc           %o2, 4, %o2
        EX(lduwa [%o1] %asi, %g1)
-       EX(stwa %g1, [%o1 + %o3] ASI_AIUS)
+       EX(stwa %g1, [%o0] %asi)
+       add             %o1, 4, %o1
        bgu,pt          %XCC, 82b
-        add            %o1, 4, %o1
+        add            %o0, 4, %o0
 
 85:    retl
         clr            %o0
@@ -94,26 +83,10 @@ ___copy_in_user:    /* %o0=dst, %o1=src, %o2=len */
 90:
        subcc           %o2, 1, %o2
        EX(lduba [%o1] %asi, %g1)
-       EX(stba %g1, [%o1 + %o3] ASI_AIUS)
+       EX(stba %g1, [%o0] %asi)
+       add             %o1, 1, %o1
        bgu,pt          %XCC, 90b
-        add            %o1, 1, %o1
+        add            %o0, 1, %o0
        retl
         clr            %o0
-
-       .size           ___copy_in_user, .-___copy_in_user
-
-       /* Act like copy_{to,in}_user(), ie. return zero instead
-        * of original destination pointer.  This is invoked when
-        * copy_{to,in}_user() finds that %asi is kernel space.
-        */
-       .globl          memcpy_user_stub
-       .type           memcpy_user_stub,#function
-memcpy_user_stub:
-       save            %sp, -192, %sp
-       mov             %i0, %o0
-       mov             %i1, %o1
-       call            memcpy
-        mov            %i2, %o2
-       ret
-        restore        %g0, %g0, %o0
-       .size           memcpy_user_stub, .-memcpy_user_stub
+ENDPROC(___copy_in_user)