sparc32: drop sun4c user stack checking routine

With this we no longer do any run-time patchings of traps.
So drop the function + macro to support this.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Sam Ravnborg 2012-05-11 11:35:13 +00:00 committed by David S. Miller
parent e098ff92f6
commit ef136bc91e
3 changed files with 6 additions and 91 deletions

View file

@ -31,13 +31,6 @@ extern struct tt_entry *sparc_ttable;
#define SPARC_MOV_CONST_L3(const) (0xa6102000 | (const&0xfff))
/* The following assumes that the branch lies before the place we
* are branching to. This is the case for a trap vector...
* You have been warned.
*/
#define SPARC_BRANCH(dest_addr, inst_addr) \
(0x10800000 | (((dest_addr-inst_addr)>>2)&0x3fffff))
#define SPARC_RD_PSR_L0 (0xa1480000)
#define SPARC_RD_WIM_L3 (0xa7500000)
#define SPARC_NOP (0x01000000)

View file

@ -128,13 +128,12 @@ rtrap_patch2: and %glob_tmp, 0xff, %glob_tmp
wr %glob_tmp, 0x0, %wim
/* Here comes the architecture specific
* branch to the user stack checking routine
* for return from traps.
*/
.globl rtrap_mmu_patchme
rtrap_mmu_patchme: b sun4c_rett_stackchk
andcc %fp, 0x7, %g0
/* Here comes the architecture specific
* branch to the user stack checking routine
* for return from traps.
*/
b srmmu_rett_stackchk
andcc %fp, 0x7, %g0
ret_trap_userwins_ok:
LOAD_PT_PRIV(sp, t_psr, t_pc, t_npc)
@ -225,69 +224,6 @@ ret_trap_user_stack_is_bolixed:
b signal_p
ld [%curptr + TI_FLAGS], %g2
sun4c_rett_stackchk:
be 1f
and %fp, 0xfff, %g1 ! delay slot
b ret_trap_user_stack_is_bolixed + 0x4
wr %t_wim, 0x0, %wim
/* See if we have to check the sanity of one page or two */
1:
add %g1, 0x38, %g1
sra %fp, 29, %g2
add %g2, 0x1, %g2
andncc %g2, 0x1, %g0
be 1f
andncc %g1, 0xff8, %g0
/* %sp is in vma hole, yuck */
b ret_trap_user_stack_is_bolixed + 0x4
wr %t_wim, 0x0, %wim
1:
be sun4c_rett_onepage /* Only one page to check */
lda [%fp] ASI_PTE, %g2
sun4c_rett_twopages:
add %fp, 0x38, %g1
sra %g1, 29, %g2
add %g2, 0x1, %g2
andncc %g2, 0x1, %g0
be 1f
lda [%g1] ASI_PTE, %g2
/* Second page is in vma hole */
b ret_trap_user_stack_is_bolixed + 0x4
wr %t_wim, 0x0, %wim
1:
srl %g2, 29, %g2
andcc %g2, 0x4, %g0
bne sun4c_rett_onepage
lda [%fp] ASI_PTE, %g2
/* Second page has bad perms */
b ret_trap_user_stack_is_bolixed + 0x4
wr %t_wim, 0x0, %wim
sun4c_rett_onepage:
srl %g2, 29, %g2
andcc %g2, 0x4, %g0
bne,a 1f
restore %g0, %g0, %g0
/* A page had bad page permissions, losing... */
b ret_trap_user_stack_is_bolixed + 0x4
wr %t_wim, 0x0, %wim
/* Whee, things are ok, load the window and continue. */
1:
LOAD_WINDOW(sp)
b ret_trap_userwins_ok
save %g0, %g0, %g0
.globl srmmu_rett_stackchk
srmmu_rett_stackchk:
bne ret_trap_user_stack_is_bolixed

View file

@ -2134,19 +2134,6 @@ extern unsigned long spwin_mmu_patchme, fwin_mmu_patchme,
extern unsigned long spwin_srmmu_stackchk, srmmu_fwin_stackchk,
tsetup_srmmu_stackchk, srmmu_rett_stackchk;
#define PATCH_BRANCH(insn, dest) do { \
iaddr = &(insn); \
daddr = &(dest); \
*iaddr = SPARC_BRANCH((unsigned long) daddr, (unsigned long) iaddr); \
} while(0)
static void __init patch_window_trap_handlers(void)
{
unsigned long *iaddr, *daddr;
PATCH_BRANCH(rtrap_mmu_patchme, srmmu_rett_stackchk);
}
#ifdef CONFIG_SMP
/* Local cross-calls. */
static void smp_flush_page_for_dma(unsigned long page)
@ -2270,7 +2257,6 @@ void __init ld_mmu_srmmu(void)
BTFIXUPSET_CALL(pgoff_to_pte, srmmu_pgoff_to_pte, BTFIXUPCALL_NORM);
get_srmmu_type();
patch_window_trap_handlers();
#ifdef CONFIG_SMP
/* El switcheroo... */