net/mlx4_en: Refactor mlx4_en_free_tx_desc
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>
This commit is contained in:
parent
9573e0d39f
commit
4c07c13240
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue