From 0b1461f1f5baf679db21f5a454c34bdb35375743 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Thu, 24 Apr 2008 18:15:40 +1000 Subject: [PATCH] --- yaml --- r: 96239 b: refs/heads/master c: 55d7cd74d44e7e0597f95db25c12f3e6c5e7916f h: refs/heads/master i: 96237: 535d09afcf7582dda81724956fcceba5a2ee22c3 96235: b79e0cfb4f8836557217d6e5ad4f0d72185fb89d 96231: cf444e89e5b74d081eec06c0d1632b30eae0b3ab 96223: d75fa7c92c6232107b5269d1f0dee42be72c3cba v: v3 --- [refs] | 2 +- trunk/arch/powerpc/platforms/cell/spufs/switch.c | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index e5947bee6468..7e1fa5b4ccc5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1ca4264ee17745779c341966c5e61ac69bfd17a6 +refs/heads/master: 55d7cd74d44e7e0597f95db25c12f3e6c5e7916f diff --git a/trunk/arch/powerpc/platforms/cell/spufs/switch.c b/trunk/arch/powerpc/platforms/cell/spufs/switch.c index 4131784216bb..53361d0c070f 100644 --- a/trunk/arch/powerpc/platforms/cell/spufs/switch.c +++ b/trunk/arch/powerpc/platforms/cell/spufs/switch.c @@ -250,16 +250,21 @@ static inline void save_spu_status(struct spu_state *csa, struct spu *spu) } } -static inline void save_mfc_decr(struct spu_state *csa, struct spu *spu) +static inline void save_mfc_stopped_status(struct spu_state *csa, + struct spu *spu) { struct spu_priv2 __iomem *priv2 = spu->priv2; + const u64 mask = MFC_CNTL_DECREMENTER_RUNNING | + MFC_CNTL_DMA_QUEUES_EMPTY; /* Save, Step 12: * Read MFC_CNTL[Ds]. Update saved copy of * CSA.MFC_CNTL[Ds]. + * + * update: do the same with MFC_CNTL[Q]. */ - csa->priv2.mfc_control_RW |= - in_be64(&priv2->mfc_control_RW) & MFC_CNTL_DECREMENTER_RUNNING; + csa->priv2.mfc_control_RW &= ~mask; + csa->priv2.mfc_control_RW |= in_be64(&priv2->mfc_control_RW) & mask; } static inline void halt_mfc_decr(struct spu_state *csa, struct spu *spu) @@ -1791,7 +1796,7 @@ static int quiece_spu(struct spu_state *prev, struct spu *spu) save_spu_runcntl(prev, spu); /* Step 9. */ save_mfc_sr1(prev, spu); /* Step 10. */ save_spu_status(prev, spu); /* Step 11. */ - save_mfc_decr(prev, spu); /* Step 12. */ + save_mfc_stopped_status(prev, spu); /* Step 12. */ halt_mfc_decr(prev, spu); /* Step 13. */ save_timebase(prev, spu); /* Step 14. */ remove_other_spu_access(prev, spu); /* Step 15. */