diff options
author | Florian Fainelli <f.fainelli@gmail.com> | 2014-05-15 14:33:52 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-05-16 16:41:40 -0400 |
commit | b1ff53e9fd26a11ede97fcad5ff2e9be00b61bf8 (patch) | |
tree | b22bb1dce1a0d697f2ed42369a8f36867dacd063 /drivers/net/ethernet/broadcom/bcmsysport.c | |
parent | bd508065749fcaa99f6eca927530d0d7e019224f (diff) | |
download | op-kernel-dev-b1ff53e9fd26a11ede97fcad5ff2e9be00b61bf8.zip op-kernel-dev-b1ff53e9fd26a11ede97fcad5ff2e9be00b61bf8.tar.gz |
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>
Diffstat (limited to 'drivers/net/ethernet/broadcom/bcmsysport.c')
-rw-r--r-- | drivers/net/ethernet/broadcom/bcmsysport.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c index 8edc098..26030d6 100644 --- a/drivers/net/ethernet/broadcom/bcmsysport.c +++ b/drivers/net/ethernet/broadcom/bcmsysport.c @@ -479,7 +479,7 @@ static unsigned int bcm_sysport_desc_rx(struct bcm_sysport_priv *priv, cb = &priv->rx_cbs[priv->rx_read_ptr]; skb = cb->skb; 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 */ rsb = (struct rsb *)skb->data; |