net: systemport: fix dma_unmap_single() len
dma_unmap_single() was called with dma_unmap_len(cb, dma_len), unfortunately we failed to assign this length field in bcm_sysport_rx_refill() or bcm_sysport_alloc_rx_bufs() using dma_unmap_len_set(). This causes packet contents corruption because are we not invoking the cache invalidation routines with the proper length. Fix this by using the full RX buffer size (RX_BUF_LENGTH) because the mappings for the RX bufers are created with that size. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
bd50806574
commit
b1ff53e9fd
|
@ -479,7 +479,7 @@ static unsigned int bcm_sysport_desc_rx(struct bcm_sysport_priv *priv,
|
||||||
cb = &priv->rx_cbs[priv->rx_read_ptr];
|
cb = &priv->rx_cbs[priv->rx_read_ptr];
|
||||||
skb = cb->skb;
|
skb = cb->skb;
|
||||||
dma_unmap_single(kdev, dma_unmap_addr(cb, dma_addr),
|
dma_unmap_single(kdev, dma_unmap_addr(cb, dma_addr),
|
||||||
dma_unmap_len(cb, dma_len), DMA_FROM_DEVICE);
|
RX_BUF_LENGTH, DMA_FROM_DEVICE);
|
||||||
|
|
||||||
/* Extract the Receive Status Block prepended */
|
/* Extract the Receive Status Block prepended */
|
||||||
rsb = (struct rsb *)skb->data;
|
rsb = (struct rsb *)skb->data;
|
||||||
|
|
Loading…
Reference in New Issue