]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
nfp: eliminate an if statement in calculation of completed frames
authorJakub Kicinski <jakub.kicinski@netronome.com>
Tue, 16 May 2017 00:55:23 +0000 (17:55 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 16 May 2017 16:59:04 +0000 (12:59 -0400)
Given that our rings are always a power of 2, we can simplify the
calculation of number of completed TX descriptors by using masking
instead of if statement based on whether the index have wrapped
or not.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/netronome/nfp/nfp_net_common.c

index c64514f8ee65b78b2ce7ffcc3ec2ab388665bacf..da83e17b8b2060e8e0b2fa5ed188283580518d1f 100644 (file)
@@ -940,10 +940,7 @@ static void nfp_net_tx_complete(struct nfp_net_tx_ring *tx_ring)
        if (qcp_rd_p == tx_ring->qcp_rd_p)
                return;
 
-       if (qcp_rd_p > tx_ring->qcp_rd_p)
-               todo = qcp_rd_p - tx_ring->qcp_rd_p;
-       else
-               todo = qcp_rd_p + tx_ring->cnt - tx_ring->qcp_rd_p;
+       todo = D_IDX(tx_ring, qcp_rd_p + tx_ring->cnt - tx_ring->qcp_rd_p);
 
        while (todo--) {
                idx = D_IDX(tx_ring, tx_ring->rd_p++);
@@ -1014,10 +1011,7 @@ static bool nfp_net_xdp_complete(struct nfp_net_tx_ring *tx_ring)
        if (qcp_rd_p == tx_ring->qcp_rd_p)
                return true;
 
-       if (qcp_rd_p > tx_ring->qcp_rd_p)
-               todo = qcp_rd_p - tx_ring->qcp_rd_p;
-       else
-               todo = qcp_rd_p + tx_ring->cnt - tx_ring->qcp_rd_p;
+       todo = D_IDX(tx_ring, qcp_rd_p + tx_ring->cnt - tx_ring->qcp_rd_p);
 
        done_all = todo <= NFP_NET_XDP_MAX_COMPLETE;
        todo = min(todo, NFP_NET_XDP_MAX_COMPLETE);