OSDN Git Service

net/mlx4_en: Refactor mlx4_en_free_tx_desc
authorTariq Toukan <tariqt@mellanox.com>
Thu, 15 Jun 2017 11:35:40 +0000 (14:35 +0300)
committerDavid S. Miller <davem@davemloft.net>
Fri, 16 Jun 2017 02:53:23 +0000 (22:53 -0400)
Some code re-ordering, functionally equivalent.

- The !tx_info->inl check is evaluated anyway in both flows
  (common case/end case). Run it first, this might finish
  the flows earlier.
- dma_unmap calls are identical in both flows, get it out
  of the if block into the common area.

Performance tests:
Tested on ConnectX3Pro, Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz

Gain is too small to be measurable, no degradation sensed.
Results are similar for IPv4 and IPv6.

Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
Reviewed-by: Saeed Mahameed <saeedm@mellanox.com>
Cc: kernel-team@fb.com
Cc: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/en_tx.c

index efc4411..7d69d93 100644 (file)
@@ -289,20 +289,20 @@ u32 mlx4_en_free_tx_desc(struct mlx4_en_priv *priv,
                skb_tstamp_tx(skb, &hwts);
        }
 
-       /* Optimize the common case when there are no wraparounds */
-       if (likely((void *)tx_desc +
-                  (tx_info->nr_txbb << LOG_TXBB_SIZE) <= end)) {
-               if (!tx_info->inl) {
-                       if (tx_info->linear)
-                               dma_unmap_single(priv->ddev,
-                                               tx_info->map0_dma,
-                                               tx_info->map0_byte_count,
-                                               PCI_DMA_TODEVICE);
-                       else
-                               dma_unmap_page(priv->ddev,
-                                              tx_info->map0_dma,
-                                              tx_info->map0_byte_count,
-                                              PCI_DMA_TODEVICE);
+       if (!tx_info->inl) {
+               if (tx_info->linear)
+                       dma_unmap_single(priv->ddev,
+                                        tx_info->map0_dma,
+                                        tx_info->map0_byte_count,
+                                        PCI_DMA_TODEVICE);
+               else
+                       dma_unmap_page(priv->ddev,
+                                      tx_info->map0_dma,
+                                      tx_info->map0_byte_count,
+                                      PCI_DMA_TODEVICE);
+               /* Optimize the common case when there are no wraparounds */
+               if (likely((void *)tx_desc +
+                          (tx_info->nr_txbb << LOG_TXBB_SIZE) <= end)) {
                        for (i = 1; i < nr_maps; i++) {
                                data++;
                                dma_unmap_page(priv->ddev,
@@ -310,23 +310,10 @@ u32 mlx4_en_free_tx_desc(struct mlx4_en_priv *priv,
                                        be32_to_cpu(data->byte_count),
                                        PCI_DMA_TODEVICE);
                        }
-               }
-       } else {
-               if (!tx_info->inl) {
-                       if ((void *) data >= end) {
+               } else {
+                       if ((void *)data >= end)
                                data = ring->buf + ((void *)data - end);
-                       }
 
-                       if (tx_info->linear)
-                               dma_unmap_single(priv->ddev,
-                                               tx_info->map0_dma,
-                                               tx_info->map0_byte_count,
-                                               PCI_DMA_TODEVICE);
-                       else
-                               dma_unmap_page(priv->ddev,
-                                              tx_info->map0_dma,
-                                              tx_info->map0_byte_count,
-                                              PCI_DMA_TODEVICE);
                        for (i = 1; i < nr_maps; i++) {
                                data++;
                                /* Check for wraparound before unmapping */