From: Amir Vadai <amirv.mellanox@gmail.com>
To: Francois Romieu <romieu@fr.zoreil.com>
Cc: Amir Vadai <amirv@mellanox.com>,
"David S. Miller" <davem@davemloft.net>,
netdev@vger.kernel.org
Subject: Re: [PATCH net-next 3/3] net/mlx4_en: Fix handling of dma_map failure
Date: Tue, 20 Aug 2013 11:17:36 +0300 [thread overview]
Message-ID: <52132620.6020809@gmail.com> (raw)
In-Reply-To: <20130819204200.GA30818@electric-eye.fr.zoreil.com>
On 19/08/2013 23:42, Francois Romieu wrote:
> Amir Vadai <amirv@mellanox.com> :
> [...]
>> diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
>> index 157bcd1..92d7097 100644
>> --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
>> +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
>> @@ -673,6 +673,64 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
>> tx_info->skb = skb;
>> tx_info->nr_txbb = nr_txbb;
>>
>> + if (lso_header_size)
>> + data = ((void *)&tx_desc->lso + ALIGN(lso_header_size + 4,
>> + DS_SIZE));
>> + else
>> + data = &tx_desc->data;
>> +
>> + /* valid only for none inline segments */
>> + tx_info->data_offset = (void *)data - (void *)tx_desc;
>> +
>> + tx_info->linear = (lso_header_size < skb_headlen(skb) &&
>> + !is_inline(skb, NULL)) ? 1 : 0;
>> +
>> + data += skb_shinfo(skb)->nr_frags + tx_info->linear - 1;
>> +
>> + if (is_inline(skb, &fragptr)) {
>> + tx_info->inl = 1;
>> + } else {
>> + /* Map fragments */
>> + for (i = skb_shinfo(skb)->nr_frags - 1; i >= 0; i--) {
>> + frag = &skb_shinfo(skb)->frags[i];
>> + dma = skb_frag_dma_map(priv->ddev, frag,
>> + 0, skb_frag_size(frag),
>> + DMA_TO_DEVICE);
>> + if (dma_mapping_error(priv->ddev, dma)) {
>
> goto err_unmap_frags;
>
> You have a lot of huge scope variables. At least use these to hide
> the 80 cols problems.
Will try to re-arrange a bit this code - I think I will add another patch.
Split this one into:
1. Code re-arrange
2. Move and handle dma_map_failure
>
>> + for (i++; i < skb_shinfo(skb)->nr_frags; i++) {
>> + frag = &skb_shinfo(skb)->frags[i];
>> + en_err(priv, "DMA mapping error\n");
>> + dma_unmap_page(priv->ddev,
>> + (dma_addr_t) be64_to_cpu(data[i].addr),
>> + skb_frag_size(frag), PCI_DMA_TODEVICE);
>> + }
>> + goto tx_drop;
>> + }
>> +
>> + data->addr = cpu_to_be64(dma);
>> + data->lkey = cpu_to_be32(mdev->mr.key);
>> + wmb();
>> + data->byte_count = cpu_to_be32(skb_frag_size(frag));
>> + --data;
>> + }
>> +
>> + /* Map linear part */
>> + if (tx_info->linear) {
>> + u32 byte_count = skb_headlen(skb) - lso_header_size;
>> + dma = dma_map_single(priv->ddev, skb->data +
>> + lso_header_size, byte_count,
>> + PCI_DMA_TODEVICE);
>> + if (dma_mapping_error(priv->ddev, dma))
>> + goto tx_drop;
>
> (frags dma leak)
Thanks for the catch.
> goto err_unmap_frags;
>
> You may consider a local variable for 'priv->ddev' btw.
Will do
>
Amir.
prev parent reply other threads:[~2013-08-20 8:17 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-19 6:42 [PATCH net-next 0/3] Mellanox driver updates 2013-08-19 Amir Vadai
2013-08-19 6:42 ` [PATCH net-next 1/3] net/mlx4_en: Disable global flow control when PFC enabled Amir Vadai
2013-08-19 6:42 ` [PATCH net-next 2/3] net/mlx4_en: Notify user when TX ring in error state Amir Vadai
2013-08-19 18:49 ` Sergei Shtylyov
2013-08-20 7:55 ` Amir Vadai
2013-08-19 6:42 ` [PATCH net-next 3/3] net/mlx4_en: Fix handling of dma_map failure Amir Vadai
2013-08-19 20:42 ` Francois Romieu
2013-08-20 8:17 ` Amir Vadai [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52132620.6020809@gmail.com \
--to=amirv.mellanox@gmail.com \
--cc=amirv@mellanox.com \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=romieu@fr.zoreil.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.