Commit af6f2ce8 authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman
Browse files

powerpc/32: Call bad_page_fault() from do_page_fault()



Now that non volatile registers are saved at all time, no
need to split bad_page_fault() out of do_page_fault().

Remove handle_page_fault() and use do_page_fault() directly.

Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/cfb95be8863204cc2bf45a22ea44dd1d0dc16b7f.1615552867.git.christophe.leroy@csgroup.eu
parent e7291556
Loading
Loading
Loading
Loading
+0 −16
Original line number Diff line number Diff line
@@ -220,22 +220,6 @@ ret_from_kernel_thread:
	li	r3,0
	b	ret_from_syscall

/*
 * Top-level page fault handling.
 * This is in assembler because if do_page_fault tells us that
 * it is a bad kernel page fault, we want to save the non-volatile
 * registers before calling bad_page_fault.
 */
	.globl	handle_page_fault
handle_page_fault:
	bl	do_page_fault
	cmpwi	r3,0
	beq+	ret_from_except
	mr	r4,r3		/* err arg for bad_page_fault */
	addi	r3,r1,STACK_FRAME_OVERHEAD
	bl	__bad_page_fault
	b	ret_from_except_full

/*
 * This routine switches between two different tasks.  The process
 * state of one is saved on its kernel stack.  Then the state
+2 −2
Original line number Diff line number Diff line
@@ -207,7 +207,7 @@ _ASM_NOKPROBE_SYMBOL(\name\()_virt)
 */
	START_EXCEPTION(0x0300,	DataStorage)
	EXCEPTION_PROLOG DataStorage handle_dar_dsisr=1
	EXC_XFER_LITE(0x300, handle_page_fault)
	EXC_XFER_LITE(0x300, do_page_fault)

/*
 * 0x0400 - Instruction Storage Exception
@@ -218,7 +218,7 @@ _ASM_NOKPROBE_SYMBOL(\name\()_virt)
	li	r5,0
	stw	r5, _ESR(r11)		/* Zero ESR */
	stw	r12, _DEAR(r11)		/* SRR0 as DEAR */
	EXC_XFER_LITE(0x400, handle_page_fault)
	EXC_XFER_LITE(0x400, do_page_fault)

/* 0x0500 - External Interrupt Exception */
	EXCEPTION(0x0500, HardwareInterrupt, do_IRQ, EXC_XFER_LITE)
+2 −2
Original line number Diff line number Diff line
@@ -301,7 +301,7 @@ instruction_counter:
.Litlbie:
	stw	r12, _DAR(r11)
	stw	r5, _DSISR(r11)
	EXC_XFER_LITE(0x400, handle_page_fault)
	EXC_XFER_LITE(0x400, do_page_fault)

/* This is the data TLB error on the MPC8xx.  This could be due to
 * many reasons, including a dirty update to a pte.  We bail out to
@@ -322,7 +322,7 @@ DARFixed:/* Return from dcbx instruction bug workaround */
	tlbie	r4
.Ldtlbie:
	/* 0x300 is DataAccess exception, needed by bad_page_fault() */
	EXC_XFER_LITE(0x300, handle_page_fault)
	EXC_XFER_LITE(0x300, do_page_fault)

#ifdef CONFIG_VMAP_STACK
	vmap_stack_overflow_exception
+2 −2
Original line number Diff line number Diff line
@@ -299,7 +299,7 @@ ALT_MMU_FTR_SECTION_END_IFSET(MMU_FTR_HPTE_TABLE)
	lwz	r5, _DSISR(r11)
	andis.	r0, r5, DSISR_DABRMATCH@h
	bne-	1f
	EXC_XFER_LITE(0x300, handle_page_fault)
	EXC_XFER_LITE(0x300, do_page_fault)
1:	EXC_XFER_STD(0x300, do_break)


@@ -328,7 +328,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_HPTE_TABLE)
	andis.	r5,r9,DSISR_SRR1_MATCH_32S@h /* Filter relevant SRR1 bits */
	stw	r5, _DSISR(r11)
	stw	r12, _DAR(r11)
	EXC_XFER_LITE(0x400, handle_page_fault)
	EXC_XFER_LITE(0x400, do_page_fault)

/* External interrupt */
	EXCEPTION(0x500, HardwareInterrupt, do_IRQ, EXC_XFER_LITE)
+2 −2
Original line number Diff line number Diff line
@@ -462,7 +462,7 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)
	stw	r5,_ESR(r11);						      \
	mfspr	r4,SPRN_DEAR;		/* Grab the DEAR */		      \
	stw	r4, _DEAR(r11);						      \
	EXC_XFER_LITE(0x0300, handle_page_fault)
	EXC_XFER_LITE(0x0300, do_page_fault)

#define INSTRUCTION_STORAGE_EXCEPTION					      \
	START_EXCEPTION(InstructionStorage)				      \
@@ -470,7 +470,7 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)
	mfspr	r5,SPRN_ESR;		/* Grab the ESR and save it */	      \
	stw	r5,_ESR(r11);						      \
	stw	r12, _DEAR(r11);	/* Pass SRR0 as arg2 */		      \
	EXC_XFER_LITE(0x0400, handle_page_fault)
	EXC_XFER_LITE(0x0400, do_page_fault)

#define ALIGNMENT_EXCEPTION						      \
	START_EXCEPTION(Alignment)					      \
Loading