diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-24 11:37:29 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-24 11:37:29 -0400 |
| commit | e270b51df657011983241ec61a1fc7de186e16cd (patch) | |
| tree | 3397be4cbf31676ca6ebb187903e8cfc2218f223 /arch/sparc64/kernel/rtrap.S | |
| parent | 8fa82790fb9dfe57aeafc8de6b6a5c1df63efa06 (diff) | |
| parent | 227739bf4c110bbd02d0c0f13b272c32de406e4c (diff) | |
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: (23 commits)
sparc: sunzilog uart order
[SPARC64]: Detect trap frames in stack backtraces.
[SPARC64]: %l6 trap return handling no longer necessary.
[SPARC64]: Use trap type stored in pt_regs to handle syscall restart.
[SPARC64]: Store magic cookie and trap type in pt_regs.
[SPARC64]: PROM debug console can be CON_ANYTIME.
sparc64: cleanup after SunOS/Solaris binary emulation removal
sparc: cleanup after SunOS binary emulation removal
[SPARC64]: Add NUMA support.
[SPARC64]: Allocate TSB node-local.
[SPARC64]: NUMA device infrastructure.
[SPARC64]: Kill pci_iommu_table_init() declaration.
[SPARC64]: Once we have the boot cmdline, call parse_early_param()
[SPARC64]: Remove unused asm-sparc64/numnodes.h
[SPARC64]: Decrease SECTION_SIZE_BITS to 30.
[SPARC64]: Initialize MDESC earlier and use lmb_alloc()
[SPARC64]: Use lmb_alloc() for PROM device tree.
[SPARC64]: Call real_setup_per_cpu_areas() earlier and use lmb_alloc().
[SPARC64]: Fully use LMB information in bootmem_init().
[SPARC64]: Start using LMB information in bootmem_init().
...
Diffstat (limited to 'arch/sparc64/kernel/rtrap.S')
| -rw-r--r-- | arch/sparc64/kernel/rtrap.S | 21 |
1 files changed, 4 insertions, 17 deletions
diff --git a/arch/sparc64/kernel/rtrap.S b/arch/sparc64/kernel/rtrap.S index 079d18a11d24..ecf6753b204a 100644 --- a/arch/sparc64/kernel/rtrap.S +++ b/arch/sparc64/kernel/rtrap.S | |||
| @@ -18,12 +18,6 @@ | |||
| 18 | #define RTRAP_PSTATE_IRQOFF (PSTATE_RMO|PSTATE_PEF|PSTATE_PRIV) | 18 | #define RTRAP_PSTATE_IRQOFF (PSTATE_RMO|PSTATE_PEF|PSTATE_PRIV) |
| 19 | #define RTRAP_PSTATE_AG_IRQOFF (PSTATE_RMO|PSTATE_PEF|PSTATE_PRIV|PSTATE_AG) | 19 | #define RTRAP_PSTATE_AG_IRQOFF (PSTATE_RMO|PSTATE_PEF|PSTATE_PRIV|PSTATE_AG) |
| 20 | 20 | ||
| 21 | /* Register %l6 keeps track of whether we are returning | ||
| 22 | * from a system call or not. It is cleared if we call | ||
| 23 | * do_notify_resume, and it must not be otherwise modified | ||
| 24 | * until we fully commit to returning to userspace. | ||
| 25 | */ | ||
| 26 | |||
| 27 | .text | 21 | .text |
| 28 | .align 32 | 22 | .align 32 |
| 29 | __handle_softirq: | 23 | __handle_softirq: |
| @@ -56,14 +50,12 @@ __handle_user_windows: | |||
| 56 | be,pt %xcc, __handle_user_windows_continue | 50 | be,pt %xcc, __handle_user_windows_continue |
| 57 | nop | 51 | nop |
| 58 | mov %l5, %o1 | 52 | mov %l5, %o1 |
| 59 | mov %l6, %o2 | ||
| 60 | add %sp, PTREGS_OFF, %o0 | 53 | add %sp, PTREGS_OFF, %o0 |
| 61 | mov %l0, %o3 | 54 | mov %l0, %o2 |
| 62 | 55 | ||
| 63 | call do_notify_resume | 56 | call do_notify_resume |
| 64 | wrpr %g0, RTRAP_PSTATE, %pstate | 57 | wrpr %g0, RTRAP_PSTATE, %pstate |
| 65 | wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate | 58 | wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate |
| 66 | clr %l6 | ||
| 67 | /* Signal delivery can modify pt_regs tstate, so we must | 59 | /* Signal delivery can modify pt_regs tstate, so we must |
| 68 | * reload it. | 60 | * reload it. |
| 69 | */ | 61 | */ |
| @@ -99,14 +91,12 @@ __handle_perfctrs: | |||
| 99 | be,pt %xcc, __handle_perfctrs_continue | 91 | be,pt %xcc, __handle_perfctrs_continue |
| 100 | sethi %hi(TSTATE_PEF), %o0 | 92 | sethi %hi(TSTATE_PEF), %o0 |
| 101 | mov %l5, %o1 | 93 | mov %l5, %o1 |
| 102 | mov %l6, %o2 | ||
| 103 | add %sp, PTREGS_OFF, %o0 | 94 | add %sp, PTREGS_OFF, %o0 |
| 104 | mov %l0, %o3 | 95 | mov %l0, %o2 |
| 105 | call do_notify_resume | 96 | call do_notify_resume |
| 106 | 97 | ||
| 107 | wrpr %g0, RTRAP_PSTATE, %pstate | 98 | wrpr %g0, RTRAP_PSTATE, %pstate |
| 108 | wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate | 99 | wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate |
| 109 | clr %l6 | ||
| 110 | /* Signal delivery can modify pt_regs tstate, so we must | 100 | /* Signal delivery can modify pt_regs tstate, so we must |
| 111 | * reload it. | 101 | * reload it. |
| 112 | */ | 102 | */ |
| @@ -127,13 +117,11 @@ __handle_userfpu: | |||
| 127 | 117 | ||
| 128 | __handle_signal: | 118 | __handle_signal: |
| 129 | mov %l5, %o1 | 119 | mov %l5, %o1 |
| 130 | mov %l6, %o2 | ||
| 131 | add %sp, PTREGS_OFF, %o0 | 120 | add %sp, PTREGS_OFF, %o0 |
| 132 | mov %l0, %o3 | 121 | mov %l0, %o2 |
| 133 | call do_notify_resume | 122 | call do_notify_resume |
| 134 | wrpr %g0, RTRAP_PSTATE, %pstate | 123 | wrpr %g0, RTRAP_PSTATE, %pstate |
| 135 | wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate | 124 | wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate |
| 136 | clr %l6 | ||
| 137 | 125 | ||
| 138 | /* Signal delivery can modify pt_regs tstate, so we must | 126 | /* Signal delivery can modify pt_regs tstate, so we must |
| 139 | * reload it. | 127 | * reload it. |
| @@ -145,9 +133,8 @@ __handle_signal: | |||
| 145 | andn %l1, %l4, %l1 | 133 | andn %l1, %l4, %l1 |
| 146 | 134 | ||
| 147 | .align 64 | 135 | .align 64 |
| 148 | .globl rtrap_irq, rtrap_clr_l6, rtrap, irqsz_patchme, rtrap_xcall | 136 | .globl rtrap_irq, rtrap, irqsz_patchme, rtrap_xcall |
| 149 | rtrap_irq: | 137 | rtrap_irq: |
| 150 | rtrap_clr_l6: clr %l6 | ||
| 151 | rtrap: | 138 | rtrap: |
| 152 | #ifndef CONFIG_SMP | 139 | #ifndef CONFIG_SMP |
| 153 | sethi %hi(per_cpu____cpu_data), %l0 | 140 | sethi %hi(per_cpu____cpu_data), %l0 |
