diff options
author | Arnd Bergmann <arnd@arndb.de> | 2006-11-20 12:45:03 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-12-04 04:39:54 -0500 |
commit | 453d9f72a91d798c3e3c4b4bed26210926dfb57b (patch) | |
tree | 8d7530350a18f43df4ec017c649e182e5481b787 /arch | |
parent | 0021550c0199b2bf5e434eda0216144074537fc7 (diff) |
[POWERPC] spufs: Return correct event for data storage interrupt
When we attempt an MFC DMA to an unmapped address, the event
returned from spu_run should be SPE_EVENT_SPE_DATA_STORAGE,
not SPE_EVENT_INVALID_DMA.
Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/platforms/cell/spu_base.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/cell/spufs/run.c | 1 |
2 files changed, 2 insertions, 1 deletions
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c index 56ff8b36103d..d4f4f396288f 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c | |||
@@ -507,7 +507,7 @@ int spu_irq_class_1_bottom(struct spu *spu) | |||
507 | if (!error) { | 507 | if (!error) { |
508 | spu_restart_dma(spu); | 508 | spu_restart_dma(spu); |
509 | } else { | 509 | } else { |
510 | __spu_trap_invalid_dma(spu); | 510 | spu->dma_callback(spu, SPE_EVENT_SPE_DATA_STORAGE); |
511 | } | 511 | } |
512 | return ret; | 512 | return ret; |
513 | } | 513 | } |
diff --git a/arch/powerpc/platforms/cell/spufs/run.c b/arch/powerpc/platforms/cell/spufs/run.c index a4a0080c2233..88a41d83a79b 100644 --- a/arch/powerpc/platforms/cell/spufs/run.c +++ b/arch/powerpc/platforms/cell/spufs/run.c | |||
@@ -26,6 +26,7 @@ void spufs_dma_callback(struct spu *spu, int type) | |||
26 | } else { | 26 | } else { |
27 | switch (type) { | 27 | switch (type) { |
28 | case SPE_EVENT_DMA_ALIGNMENT: | 28 | case SPE_EVENT_DMA_ALIGNMENT: |
29 | case SPE_EVENT_SPE_DATA_STORAGE: | ||
29 | case SPE_EVENT_INVALID_DMA: | 30 | case SPE_EVENT_INVALID_DMA: |
30 | force_sig(SIGBUS, /* info, */ current); | 31 | force_sig(SIGBUS, /* info, */ current); |
31 | break; | 32 | break; |