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:
committed by
David S. Miller
parent
e098ff92f6
commit
ef136bc91e
@@ -31,13 +31,6 @@ extern struct tt_entry *sparc_ttable;
|
|||||||
|
|
||||||
#define SPARC_MOV_CONST_L3(const) (0xa6102000 | (const&0xfff))
|
#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_PSR_L0 (0xa1480000)
|
||||||
#define SPARC_RD_WIM_L3 (0xa7500000)
|
#define SPARC_RD_WIM_L3 (0xa7500000)
|
||||||
#define SPARC_NOP (0x01000000)
|
#define SPARC_NOP (0x01000000)
|
||||||
|
@@ -132,8 +132,7 @@ rtrap_patch2: and %glob_tmp, 0xff, %glob_tmp
|
|||||||
* branch to the user stack checking routine
|
* branch to the user stack checking routine
|
||||||
* for return from traps.
|
* for return from traps.
|
||||||
*/
|
*/
|
||||||
.globl rtrap_mmu_patchme
|
b srmmu_rett_stackchk
|
||||||
rtrap_mmu_patchme: b sun4c_rett_stackchk
|
|
||||||
andcc %fp, 0x7, %g0
|
andcc %fp, 0x7, %g0
|
||||||
|
|
||||||
ret_trap_userwins_ok:
|
ret_trap_userwins_ok:
|
||||||
@@ -225,69 +224,6 @@ ret_trap_user_stack_is_bolixed:
|
|||||||
b signal_p
|
b signal_p
|
||||||
ld [%curptr + TI_FLAGS], %g2
|
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
|
.globl srmmu_rett_stackchk
|
||||||
srmmu_rett_stackchk:
|
srmmu_rett_stackchk:
|
||||||
bne ret_trap_user_stack_is_bolixed
|
bne ret_trap_user_stack_is_bolixed
|
||||||
|
@@ -2134,19 +2134,6 @@ extern unsigned long spwin_mmu_patchme, fwin_mmu_patchme,
|
|||||||
extern unsigned long spwin_srmmu_stackchk, srmmu_fwin_stackchk,
|
extern unsigned long spwin_srmmu_stackchk, srmmu_fwin_stackchk,
|
||||||
tsetup_srmmu_stackchk, srmmu_rett_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
|
#ifdef CONFIG_SMP
|
||||||
/* Local cross-calls. */
|
/* Local cross-calls. */
|
||||||
static void smp_flush_page_for_dma(unsigned long page)
|
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);
|
BTFIXUPSET_CALL(pgoff_to_pte, srmmu_pgoff_to_pte, BTFIXUPCALL_NORM);
|
||||||
|
|
||||||
get_srmmu_type();
|
get_srmmu_type();
|
||||||
patch_window_trap_handlers();
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
/* El switcheroo... */
|
/* El switcheroo... */
|
||||||
|
Reference in New Issue
Block a user