diff mbox

ravb: do not invalidate cache for RX buffer twice

Message ID 4759713.2ulGRKsd9L@wasted.cogentembedded.com (mailing list archive)
State Accepted
Delegated to: Geert Uytterhoeven
Headers show

Commit Message

Sergei Shtylyov July 14, 2015, 9:56 p.m. UTC
First, dma_sync_single_for_cpu() shouldn't have been called in the first place
(it's a streaming DMA API). dma_unmap_single() should have been called instead.
Second, dma_unmap_single() call after handing the buffer to napi_gro_receive()
makes little sense.

Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>

---
The patch is against Dave Miller's 'net.git' repo.

Don't know why I missed this DMA API misuse while working on the driver. :-<

 drivers/net/ethernet/renesas/ravb_main.c |   10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)


--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Sergei Shtylyov July 15, 2015, 10:45 a.m. UTC | #1
Hello.

On 7/15/2015 12:56 AM, Sergei Shtylyov wrote:

> First, dma_sync_single_for_cpu() shouldn't have been called in the first place
> (it's a streaming DMA API). dma_unmap_single() should have been called instead.
                             ^
    Oops, I meant comma here.

> Second, dma_unmap_single() call after handing the buffer to napi_gro_receive()
> makes little sense.

    Moreover, 'desc->dptr' may not be valid at this point...

> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
>
> ---
> The patch is against Dave Miller's 'net.git' repo.

> Don't know why I missed this DMA API misuse while working on the driver. :-<

    Dave, do you want me to resend the patch with fixed up changelog?

>   drivers/net/ethernet/renesas/ravb_main.c |   10 +++-------
>   1 file changed, 3 insertions(+), 7 deletions(-)
>
> Index: net/drivers/net/ethernet/renesas/ravb_main.c
> ===================================================================
> --- net.orig/drivers/net/ethernet/renesas/ravb_main.c
> +++ net/drivers/net/ethernet/renesas/ravb_main.c
[...]
> @@ -584,9 +583,6 @@ static bool ravb_rx(struct net_device *n
>   			if (!skb)
>   				break;	/* Better luck next round. */
>   			ravb_set_buffer_align(skb);
> -			dma_unmap_single(&ndev->dev, le32_to_cpu(desc->dptr),
> -					 ALIGN(PKT_BUF_SZ, 16),
> -					 DMA_FROM_DEVICE);
>   			dma_addr = dma_map_single(&ndev->dev, skb->data,
>   						  le16_to_cpu(desc->ds_cc),
>   						  DMA_FROM_DEVICE);

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sergei Shtylyov July 15, 2015, 12:11 p.m. UTC | #2
On 7/15/2015 1:45 PM, Sergei Shtylyov wrote:

>> First, dma_sync_single_for_cpu() shouldn't have been called in the first place
>> (it's a streaming DMA API). dma_unmap_single() should have been called instead.
>                            ^
>     Oops, I meant comma here.

>> Second, dma_unmap_single() call after handing the buffer to napi_gro_receive()
>> makes little sense.

>     Moreover, 'desc->dptr' may not be valid at this point...

>> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>

>> ---
>> The patch is against Dave Miller's 'net.git' repo.

>> Don't know why I missed this DMA API misuse while working on the driver. :-<

>     Dave, do you want me to resend the patch with fixed up changelog?

    Oops, forgot to CC Dave. :-(

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller July 17, 2015, 7:11 a.m. UTC | #3
From: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Date: Wed, 15 Jul 2015 00:56:52 +0300

> First, dma_sync_single_for_cpu() shouldn't have been called in the first place
> (it's a streaming DMA API). dma_unmap_single() should have been called instead.
> Second, dma_unmap_single() call after handing the buffer to napi_gro_receive()
> makes little sense.
> 
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>

Applied with fixed up commit log message, thanks.
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

Index: net/drivers/net/ethernet/renesas/ravb_main.c
===================================================================
--- net.orig/drivers/net/ethernet/renesas/ravb_main.c
+++ net/drivers/net/ethernet/renesas/ravb_main.c
@@ -543,10 +543,9 @@  static bool ravb_rx(struct net_device *n
 
 			skb = priv->rx_skb[q][entry];
 			priv->rx_skb[q][entry] = NULL;
-			dma_sync_single_for_cpu(&ndev->dev,
-						le32_to_cpu(desc->dptr),
-						ALIGN(PKT_BUF_SZ, 16),
-						DMA_FROM_DEVICE);
+			dma_unmap_single(&ndev->dev, le32_to_cpu(desc->dptr),
+					 ALIGN(PKT_BUF_SZ, 16),
+					 DMA_FROM_DEVICE);
 			get_ts &= (q == RAVB_NC) ?
 					RAVB_RXTSTAMP_TYPE_V2_L2_EVENT :
 					~RAVB_RXTSTAMP_TYPE_V2_L2_EVENT;
@@ -584,9 +583,6 @@  static bool ravb_rx(struct net_device *n
 			if (!skb)
 				break;	/* Better luck next round. */
 			ravb_set_buffer_align(skb);
-			dma_unmap_single(&ndev->dev, le32_to_cpu(desc->dptr),
-					 ALIGN(PKT_BUF_SZ, 16),
-					 DMA_FROM_DEVICE);
 			dma_addr = dma_map_single(&ndev->dev, skb->data,
 						  le16_to_cpu(desc->ds_cc),
 						  DMA_FROM_DEVICE);