* [PATCH net-next 0/3] Mellanox driver updates 2013-08-19 @ 2013-08-19 6:42 Amir Vadai 2013-08-19 6:42 ` [PATCH net-next 1/3] net/mlx4_en: Disable global flow control when PFC enabled Amir Vadai ` (2 more replies) 0 siblings, 3 replies; 8+ messages in thread From: Amir Vadai @ 2013-08-19 6:42 UTC (permalink / raw) To: David S. Miller; +Cc: netdev, Amir Vadai Hi Dave, This small patchset contains 2 fixes to bad handling of error flows in TX datapath, and a fix to a bug in mlx4_en_dcbnl_ieee_setpfc() where global pause frames were enabled whenever PFC was configured. Thanks, Amir Amir Vadai (2): net/mlx4_en: Notify user when TX ring in error state net/mlx4_en: Fix handling of dma_map failure Eugenia Emantayev (1): net/mlx4_en: Disable global flow control when PFC enabled drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c | 3 +- drivers/net/ethernet/mellanox/mlx4/en_tx.c | 102 ++++++++++++++++--------- 2 files changed, 69 insertions(+), 36 deletions(-) -- 1.8.3.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH net-next 1/3] net/mlx4_en: Disable global flow control when PFC enabled 2013-08-19 6:42 [PATCH net-next 0/3] Mellanox driver updates 2013-08-19 Amir Vadai @ 2013-08-19 6:42 ` 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 6:42 ` [PATCH net-next 3/3] net/mlx4_en: Fix handling of dma_map failure Amir Vadai 2 siblings, 0 replies; 8+ messages in thread From: Amir Vadai @ 2013-08-19 6:42 UTC (permalink / raw) To: David S. Miller; +Cc: netdev, Amir Vadai, Eugenia Emantayev From: Eugenia Emantayev <eugenia@mellanox.com> Fix a bug when FC and PFC are enabled/disabled at the same time. According to ConnectX-3 Programmer Manual these two features are mutial exclusive. So make sure when enabling PFC to turn off global FC and vise versa. Otherwise it hurts the performance. Signed-off-by: Eugenia Emantayev <eugenia@mellanox.com> Signed-off-by: Amir Vadai <amirv@mellanox.com> --- drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c b/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c index 9d4a1ea..fcef764 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c @@ -169,7 +169,8 @@ static int mlx4_en_dcbnl_ieee_setpfc(struct net_device *dev, pfc->mbc, pfc->delay); - priv->prof->rx_pause = priv->prof->tx_pause = !!pfc->pfc_en; + priv->prof->rx_pause = !pfc->pfc_en; + priv->prof->tx_pause = !pfc->pfc_en; priv->prof->rx_ppp = priv->prof->tx_ppp = pfc->pfc_en; err = mlx4_SET_PORT_general(mdev->dev, priv->port, -- 1.8.3.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH net-next 2/3] net/mlx4_en: Notify user when TX ring in error state 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 ` Amir Vadai 2013-08-19 18:49 ` Sergei Shtylyov 2013-08-19 6:42 ` [PATCH net-next 3/3] net/mlx4_en: Fix handling of dma_map failure Amir Vadai 2 siblings, 1 reply; 8+ messages in thread From: Amir Vadai @ 2013-08-19 6:42 UTC (permalink / raw) To: David S. Miller; +Cc: netdev, Amir Vadai When hardware gets into error state, must notify user about it. When QP in error state no traffic will be tx'ed from the attached tx_ring. Driver should know how to recover from this unexpected state. I will send later on the recovery flow, but having the print shouldn't be delayed. Signed-off-by: Amir Vadai <amirv@mellanox.com> --- drivers/net/ethernet/mellanox/mlx4/en_tx.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c index 6dcca98..157bcd1 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c @@ -362,6 +362,14 @@ static void mlx4_en_process_tx_cq(struct net_device *dev, struct mlx4_en_cq *cq) */ rmb(); + if (unlikely((cqe->owner_sr_opcode & MLX4_CQE_OPCODE_MASK) == + MLX4_CQE_OPCODE_ERROR)) { + struct mlx4_err_cqe *cqe_err = (struct mlx4_err_cqe *)cqe; + en_err(priv, "CQE error - vendor syndrom: 0x%x syndrom: 0x%x\n", + cqe_err->vendor_err_syndrome, + cqe_err->syndrome); + } + /* Skip over last polled CQE */ new_index = be16_to_cpu(cqe->wqe_index) & size_mask; -- 1.8.3.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 2/3] net/mlx4_en: Notify user when TX ring in error state 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 0 siblings, 1 reply; 8+ messages in thread From: Sergei Shtylyov @ 2013-08-19 18:49 UTC (permalink / raw) To: Amir Vadai; +Cc: David S. Miller, netdev Hello. On 08/19/2013 10:42 AM, Amir Vadai wrote: > When hardware gets into error state, must notify user about it. > When QP in error state no traffic will be tx'ed from the attached > tx_ring. > Driver should know how to recover from this unexpected state. I will send later > on the recovery flow, but having the print shouldn't be delayed. > Signed-off-by: Amir Vadai <amirv@mellanox.com> > --- > drivers/net/ethernet/mellanox/mlx4/en_tx.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c > index 6dcca98..157bcd1 100644 > --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c > +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c > @@ -362,6 +362,14 @@ static void mlx4_en_process_tx_cq(struct net_device *dev, struct mlx4_en_cq *cq) > */ > rmb(); > > + if (unlikely((cqe->owner_sr_opcode & MLX4_CQE_OPCODE_MASK) == > + MLX4_CQE_OPCODE_ERROR)) { > + struct mlx4_err_cqe *cqe_err = (struct mlx4_err_cqe *)cqe; Empty line wouldn't hurt here, after declaration. > + en_err(priv, "CQE error - vendor syndrom: 0x%x syndrom: 0x%x\n", s/syndrom/syndrome/ as below? > + cqe_err->vendor_err_syndrome, > + cqe_err->syndrome); > + } > + WBR, Sergei ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 2/3] net/mlx4_en: Notify user when TX ring in error state 2013-08-19 18:49 ` Sergei Shtylyov @ 2013-08-20 7:55 ` Amir Vadai 0 siblings, 0 replies; 8+ messages in thread From: Amir Vadai @ 2013-08-20 7:55 UTC (permalink / raw) To: Sergei Shtylyov; +Cc: David S. Miller, netdev On 19/08/2013 21:49, Sergei Shtylyov wrote: > Hello. > > On 08/19/2013 10:42 AM, Amir Vadai wrote: > >> When hardware gets into error state, must notify user about it. >> When QP in error state no traffic will be tx'ed from the attached >> tx_ring. > >> Driver should know how to recover from this unexpected state. I will >> send later >> on the recovery flow, but having the print shouldn't be delayed. > >> Signed-off-by: Amir Vadai <amirv@mellanox.com> >> --- >> drivers/net/ethernet/mellanox/mlx4/en_tx.c | 8 ++++++++ >> 1 file changed, 8 insertions(+) > >> diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c >> b/drivers/net/ethernet/mellanox/mlx4/en_tx.c >> index 6dcca98..157bcd1 100644 >> --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c >> +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c >> @@ -362,6 +362,14 @@ static void mlx4_en_process_tx_cq(struct >> net_device *dev, struct mlx4_en_cq *cq) >> */ >> rmb(); >> >> + if (unlikely((cqe->owner_sr_opcode & MLX4_CQE_OPCODE_MASK) == >> + MLX4_CQE_OPCODE_ERROR)) { >> + struct mlx4_err_cqe *cqe_err = (struct mlx4_err_cqe *)cqe; > > Empty line wouldn't hurt here, after declaration. > >> + en_err(priv, "CQE error - vendor syndrom: 0x%x syndrom: >> 0x%x\n", > > s/syndrom/syndrome/ as below? > >> + cqe_err->vendor_err_syndrome, >> + cqe_err->syndrome); >> + } >> + > > WBR, Sergei > > Thanks - will be fixed for V1 Amir ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH net-next 3/3] net/mlx4_en: Fix handling of dma_map failure 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 6:42 ` Amir Vadai 2013-08-19 20:42 ` Francois Romieu 2 siblings, 1 reply; 8+ messages in thread From: Amir Vadai @ 2013-08-19 6:42 UTC (permalink / raw) To: David S. Miller; +Cc: netdev, Amir Vadai Result of skb_frag_dma_map() and dma_map_single() wasn't checked. Added a check and proper handling in case of failure. Moved the mapping to the beginning of mlx4_en_xmit(), before updating the ring data structure to make error handling easier. Signed-off-by: Amir Vadai <amirv@mellanox.com> --- drivers/net/ethernet/mellanox/mlx4/en_tx.c | 94 +++++++++++++++++++----------- 1 file changed, 59 insertions(+), 35 deletions(-) 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)) { + 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; + + data->addr = cpu_to_be64(dma); + data->lkey = cpu_to_be32(mdev->mr.key); + wmb(); + data->byte_count = cpu_to_be32(byte_count); + } + tx_info->inl = 0; + } + /* * For timestamping add flag to skb_shinfo and * set flag for further reference @@ -719,8 +777,6 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) /* Copy headers; * note that we already verified that it is linear */ memcpy(tx_desc->lso.header, skb->data, lso_header_size); - data = ((void *) &tx_desc->lso + - ALIGN(lso_header_size + 4, DS_SIZE)); priv->port_stats.tso_packets++; i = ((skb->len - lso_header_size) / skb_shinfo(skb)->gso_size) + @@ -732,7 +788,6 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) op_own = cpu_to_be32(MLX4_OPCODE_SEND) | ((ring->prod & ring->size) ? cpu_to_be32(MLX4_EN_BIT_DESC_OWN) : 0); - data = &tx_desc->data; tx_info->nr_bytes = max_t(unsigned int, skb->len, ETH_ZLEN); ring->packets++; @@ -741,38 +796,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) netdev_tx_sent_queue(ring->tx_queue, tx_info->nr_bytes); AVG_PERF_COUNTER(priv->pstats.tx_pktsz_avg, skb->len); - - /* 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)) { - /* 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); - 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) { - dma = dma_map_single(priv->ddev, skb->data + lso_header_size, - skb_headlen(skb) - lso_header_size, PCI_DMA_TODEVICE); - data->addr = cpu_to_be64(dma); - data->lkey = cpu_to_be32(mdev->mr.key); - wmb(); - data->byte_count = cpu_to_be32(skb_headlen(skb) - lso_header_size); - } - tx_info->inl = 0; - } else { + if (tx_info->inl) { build_inline_wqe(tx_desc, skb, real_size, &vlan_tag, tx_ind, fragptr); tx_info->inl = 1; } -- 1.8.3.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 3/3] net/mlx4_en: Fix handling of dma_map failure 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 0 siblings, 1 reply; 8+ messages in thread From: Francois Romieu @ 2013-08-19 20:42 UTC (permalink / raw) To: Amir Vadai; +Cc: David S. Miller, netdev 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. > + 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) goto err_unmap_frags; You may consider a local variable for 'priv->ddev' btw. -- Ueimor ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 3/3] net/mlx4_en: Fix handling of dma_map failure 2013-08-19 20:42 ` Francois Romieu @ 2013-08-20 8:17 ` Amir Vadai 0 siblings, 0 replies; 8+ messages in thread From: Amir Vadai @ 2013-08-20 8:17 UTC (permalink / raw) To: Francois Romieu; +Cc: Amir Vadai, David S. Miller, netdev 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. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-08-20 8:17 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 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 is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).