Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ef136bc9 authored by Sam Ravnborg's avatar Sam Ravnborg Committed by David S. Miller
Browse files

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: default avatarSam Ravnborg <sam@ravnborg.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e098ff92
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -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)
+6 −70
Original line number Diff line number Diff line
@@ -132,8 +132,7 @@ rtrap_patch2: and %glob_tmp, 0xff, %glob_tmp
	 * branch to the user stack checking routine
	 * for return from traps.
	 */
				.globl	rtrap_mmu_patchme
rtrap_mmu_patchme:	b	sun4c_rett_stackchk
	b	srmmu_rett_stackchk
	 andcc	%fp, 0x7, %g0

ret_trap_userwins_ok:
@@ -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
+0 −14
Original line number Diff line number Diff line
@@ -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... */