Index: kernel/arch/ppc32/src/interrupt.c
===================================================================
--- kernel/arch/ppc32/src/interrupt.c	(revision 6dbe7f68034b7e32c3421c2992cd5663766d56be)
+++ kernel/arch/ppc32/src/interrupt.c	(revision 6eb957dc03c2cd2c6e13a28a9aa5ec04955bd913)
@@ -112,5 +112,5 @@
 {
 	uint8_t inum;
-	
+
 	while ((inum = pic_get_pending()) != 255) {
 		irq_t *irq = irq_dispatch_and_lock(inum);
@@ -146,4 +146,19 @@
 }
 
+static void exception_fp_unavailable(unsigned int n, istate_t *istate)
+{
+#ifdef CONFIG_FPU_LAZY
+	scheduler_fpu_lazy_request();
+	/*
+	 * Propagate MSR_FP from MSR back to istate's SRR1, which will become
+	 * the next MSR.
+	 */
+	istate->srr1 |= msr_read() & MSR_FP;
+#else
+	fault_if_from_uspace(istate, "FPU fault.");
+	panic_badtrap(istate, n, "FPU fault.");
+#endif
+}
+
 static void exception_decrementer(unsigned int n, istate_t *istate)
 {
@@ -161,4 +176,6 @@
 	exc_register(VECTOR_EXTERNAL, "external", true,
 	    exception_external);
+	exc_register(VECTOR_FP_UNAVAILABLE, "fp_unavailable", true,
+	    exception_fp_unavailable);
 	exc_register(VECTOR_DECREMENTER, "timer", true,
 	    exception_decrementer);
