svn commit: r332383 - head/sys/powerpc/booke

Justin Hibbits jhibbits at FreeBSD.org
Tue Apr 10 17:32:28 UTC 2018


Author: jhibbits
Date: Tue Apr 10 17:32:27 2018
New Revision: 332383
URL: https://svnweb.freebsd.org/changeset/base/332383

Log:
  Call through powerpc_interrupt for all Book-E interrupts
  
  Make int_external_input, int_decrementer, and int_performance_counter all
  now use trap_common, just like on AIM.  The effects of this are:
  
  * All traps are now properly displayed in ddb.  Previously traps from
    external input, decrementer, and performance counters, would display as
    just basic stack traces.  Now the frame is displayed.
  
  * External interrupts are now handled with interrupts enabled, so handling
    can be preempted.  This seems to fix a hang found post-r329882.

Modified:
  head/sys/powerpc/booke/trap_subr.S

Modified: head/sys/powerpc/booke/trap_subr.S
==============================================================================
--- head/sys/powerpc/booke/trap_subr.S	Tue Apr 10 17:00:37 2018	(r332382)
+++ head/sys/powerpc/booke/trap_subr.S	Tue Apr 10 17:32:27 2018	(r332383)
@@ -563,11 +563,7 @@ INTERRUPT(int_instr_storage)
 INTERRUPT(int_external_input)
 	STANDARD_PROLOG(SPR_SPRG1, PC_TEMPSAVE, SPR_SRR0, SPR_SRR1)
 	FRAME_SETUP(SPR_SPRG1, PC_TEMPSAVE, EXC_EXI)
-	GET_TOCBASE(%r2)
-	addi	%r3, %r1, CALLSIZE
-	bl	CNAME(powerpc_interrupt)
-	TOC_RESTORE
-	b	trapexit
+	b	trap_common
 
 
 INTERRUPT(int_alignment)
@@ -603,11 +599,7 @@ INTERRUPT(int_syscall)
 INTERRUPT(int_decrementer)
 	STANDARD_PROLOG(SPR_SPRG1, PC_TEMPSAVE, SPR_SRR0, SPR_SRR1)
 	FRAME_SETUP(SPR_SPRG1, PC_TEMPSAVE, EXC_DECR)
-	GET_TOCBASE(%r2)
-	addi	%r3, %r1, CALLSIZE
-	bl	CNAME(powerpc_interrupt)
-	TOC_RESTORE
-	b	trapexit
+	b	trap_common
 
 
 /*****************************************************************************
@@ -653,11 +645,7 @@ INTERRUPT(int_vecast)
 INTERRUPT(int_performance_counter)
 	STANDARD_PROLOG(SPR_SPRG3, PC_TEMPSAVE, SPR_SRR0, SPR_SRR1)
 	FRAME_SETUP(SPR_SPRG3, PC_TEMPSAVE, EXC_PERF)
-	GET_TOCBASE(%r2)
-	addi	%r3, %r1, CALLSIZE
-	bl	CNAME(powerpc_interrupt)
-	TOC_RESTORE
-	b	trapexit
+	b	trap_common
 #endif
 
 
@@ -1002,7 +990,7 @@ trap_common:
 	/* Call C trap dispatcher */
 	GET_TOCBASE(%r2)
 	addi	%r3, %r1, CALLSIZE
-	bl	CNAME(trap)
+	bl	CNAME(powerpc_interrupt)
 	TOC_RESTORE
 
 	.globl	CNAME(trapexit)		/* exported for db_backtrace use */


More information about the svn-src-head mailing list