[Cbe-oss-dev] [PATCH] spufs: Avoid restarting MFC in context saving

Jeremy Kerr jk at ozlabs.org
Tue Jul 3 18:00:37 EST 2007


Asayama-san,

Nice catch!

> The current SPU context saving procedure in SPUFS unexpectedly
> restarts MFC when halting decrementer, because MFC_CNTL[Dh] is set
> without MFC_CNTL[Sm].

From reading the CBEA docs, the Dh bit is independent from the Sm bit, 
so I think we should keep them separate, rather than setting both in 
halt_mfc_decr(). Perhaps this bit should be set in suspend_mfc(). Or we 
could just set it in init_priv() and leave it set.

> This bug causes, for example, saving broken DMA  queues.

Could you elaborate on what you've seen happen? I assume the DMA queues 
have continued to be processed during the context switch?

Do you have a testcase that I can use to confirm the fix?

> +#define MFC_CNTL_SUSPEND_DMA_QUEUE_DISABLED	(1ull << 4)

The docs call this a 'Suspend Mask' (setting this bit doesn't 
disbale/suspend the queue, it's the mask for the 0x1 bit). How about 
MFC_CNTL_SUSPEND_MASK?

Cheers,


Jeremy



More information about the cbe-oss-dev mailing list