Thread (3 messages) 3 messages, 2 authors, 2014-10-31

Re: [PATCH] net: gianfar: fix dma check map error when DMA_API_DEBUG is enabled

From: Kevin Hao <hidden>
Date: 2014-10-31 03:09:48

On Thu, Oct 30, 2014 at 06:28:01PM +0200, Claudiu Manoil wrote:
On 10/30/2014 12:25 PM, Kevin Hao wrote:

[...]
quoted
@@ -2406,6 +2416,25 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
 	spin_unlock_irqrestore(&tx_queue->txlock, flags);

 	return NETDEV_TX_OK;
+
+dma_map_err:
+	txbdp = next_txbd(txbdp_start, base, tx_queue->tx_ring_size);
+	if (do_tstamp)
+		txbdp = next_txbd(txbdp, base, tx_queue->tx_ring_size);
+	for (i = 0; i < nr_frags; i++) {
+		lstatus = txbdp->lstatus;
+		if (!(lstatus & BD_LFLAG(TXBD_READY)))
+			break;
+
+		txbdp->lstatus = lstatus & ~BD_LFLAG(TXBD_READY);
+		bufaddr = txbdp->bufPtr;
+		dma_unmap_page(priv->dev, bufaddr, txbdp->length,
+			       DMA_TO_DEVICE);
+		txbdp = next_txbd(txbdp, base, tx_queue->tx_ring_size);
+	}
+	gfar_wmb();
Why use the wmb() memory barrier here?
Just want make sure that the update to the txbdp->lstatus is performed before
any possible update to the BD fields later. Maybe this seems a bit redundant.
But this is not in hot path, so we may tolerate this overhead for more safety.

Thanks,
Kevin

Attachments

  • (unnamed) [application/pgp-signature] 473 bytes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help