Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 59f8e169 authored by Dave Jones's avatar Dave Jones Committed by David S. Miller
Browse files

via-velocity: Fix DMA mapping length errors on transmit.



From: Dave Jones <davej@redhat.com>

The dma-debug changes caught that this driver uses the
wrong DMA mapping length when skb_padto() does something.

With suggestions from Eric Dumazet.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 855b0993
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -1838,17 +1838,19 @@ static void velocity_free_tx_buf(struct velocity_info *vptr, struct velocity_td_
{
	struct sk_buff *skb = tdinfo->skb;
	int i;
	int pktlen;

	/*
	 *	Don't unmap the pre-allocated tx_bufs
	 */
	if (tdinfo->skb_dma) {

		pktlen = (skb->len > ETH_ZLEN ? : ETH_ZLEN);
		for (i = 0; i < tdinfo->nskb_dma; i++) {
#ifdef VELOCITY_ZERO_COPY_SUPPORT
			pci_unmap_single(vptr->pdev, tdinfo->skb_dma[i], le16_to_cpu(td->tdesc1.len), PCI_DMA_TODEVICE);
#else
			pci_unmap_single(vptr->pdev, tdinfo->skb_dma[i], skb->len, PCI_DMA_TODEVICE);
			pci_unmap_single(vptr->pdev, tdinfo->skb_dma[i], pktlen, PCI_DMA_TODEVICE);
#endif
			tdinfo->skb_dma[i] = 0;
		}
@@ -2080,17 +2082,14 @@ static int velocity_xmit(struct sk_buff *skb, struct net_device *dev)
	struct tx_desc *td_ptr;
	struct velocity_td_info *tdinfo;
	unsigned long flags;
	int pktlen = skb->len;
	int pktlen;
	__le16 len;
	int index;



	if (skb->len < ETH_ZLEN) {
	if (skb_padto(skb, ETH_ZLEN))
		goto out;
		pktlen = ETH_ZLEN;
	}
	pktlen = max_t(unsigned int, skb->len, ETH_ZLEN);

	len = cpu_to_le16(pktlen);