[Cbe-oss-dev] [PATCH] net/ps3: Fix gelic RX DMA restart

David Miller davem at davemloft.net
Fri Jul 15 09:03:40 EST 2011


From: Geoff Levand <geoff at infradead.org>
Date: Thu, 14 Jul 2011 10:15:26 -0700

> Fix the condition where PS3 network RX hangs when no network
> TX is occurring by calling gelic_card_enable_rxdmac() during
> RX_DMA_CHAIN_END event processing.
> 
> The gelic hardware automatically clears its RX_DMA_EN flag when
> it detects an RX_DMA_CHAIN_END event.  In its processing of
> RX_DMA_CHAIN_END the gelic driver is required to set RX_DMA_EN
> (with a call to gelic_card_enable_rxdmac()) to restart RX DMA
> transfers.  The existing gelic driver code does not set
> RX_DMA_EN directly in its processing of the RX_DMA_CHAIN_END
> event, but uses a flag variable card->rx_dma_restart_required
> to schedule the setting of RX_DMA_EN until next inside the
> interrupt handler.
> 
> It seems this delayed setting of RX_DMA_EN causes the hang since
> the next RX interrupt after the RX_DMA_CHAIN_END event where
> RX_DMA_EN is scheduled to be set will not occur since RX_DMA_EN
> was not set.  In the case were network TX is occuring, RX_DMA_EN
> is set in the next TX interrupt and RX processing continues.
> 
> Signed-off-by: Geoff Levand <geoff at infradead.org>

Applied.


More information about the cbe-oss-dev mailing list