diff --git a/arch/powerpc/platforms/cell/spufs/backing_ops.c b/arch/powerpc/platforms/cell/spufs/backing_ops.c
index d4495531e5b257f1c61d26df4382805de087b727..50d98a154aaf257ae58a75373c13281874dc40a2 100644
--- a/arch/powerpc/platforms/cell/spufs/backing_ops.c
+++ b/arch/powerpc/platforms/cell/spufs/backing_ops.c
@@ -373,7 +373,7 @@ static int spu_backing_send_mfc_command(struct spu_context *ctx,
 
 static void spu_backing_restart_dma(struct spu_context *ctx)
 {
-	/* nothing to do here */
+	ctx->csa.priv2.mfc_control_RW |= MFC_CNTL_RESTART_DMA_COMMAND;
 }
 
 struct spu_context_ops spu_backing_ops = {
diff --git a/arch/powerpc/platforms/cell/spufs/fault.c b/arch/powerpc/platforms/cell/spufs/fault.c
index 825001c2b0952f208921bc91b3b12d66ab290f07..eff4d291ba855de23099b9ed36ee2183f892f7d6 100644
--- a/arch/powerpc/platforms/cell/spufs/fault.c
+++ b/arch/powerpc/platforms/cell/spufs/fault.c
@@ -53,9 +53,10 @@ static void spufs_handle_event(struct spu_context *ctx,
 		info.si_code = BUS_OBJERR;
 		break;
 	case SPE_EVENT_SPE_DATA_STORAGE:
-		info.si_signo = SIGBUS;
+		info.si_signo = SIGSEGV;
 		info.si_addr = (void __user *)ea;
-		info.si_code = BUS_ADRERR;
+		info.si_code = SEGV_ACCERR;
+		ctx->ops->restart_dma(ctx);
 		break;
 	case SPE_EVENT_DMA_ALIGNMENT:
 		info.si_signo = SIGBUS;