net: mvneta: prefetch next rx descriptor instead of current one
authorwilly tarreau <w@1wt.eu>
Thu, 16 Jan 2014 07:20:15 +0000 (08:20 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 16 Jan 2014 23:15:42 +0000 (15:15 -0800)
Currently, the mvneta driver tries to prefetch the current Rx
descriptor during read. Tests have shown that prefetching the
next one instead increases general performance by about 1% on
HTTP traffic.

Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Gregory CLEMENT <gregory.clement@free-electrons.com>
Tested-by: Arnaud Ebalard <arno@natisbad.org>
Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/mvneta.c

index aa3a4f7c3f7c121062c5a8c253830bf92ae38000..c7b37e07f870ed105cd54458370db3572eeb4923 100644 (file)
@@ -611,6 +611,7 @@ mvneta_rxq_next_desc_get(struct mvneta_rx_queue *rxq)
        int rx_desc = rxq->next_desc_to_proc;
 
        rxq->next_desc_to_proc = MVNETA_QUEUE_NEXT_DESC(rxq, rx_desc);
+       prefetch(rxq->descs + rxq->next_desc_to_proc);
        return rxq->descs + rx_desc;
 }
 
@@ -1442,7 +1443,6 @@ static int mvneta_rx(struct mvneta_port *pp, int rx_todo,
                u32 rx_status;
                int rx_bytes, err;
 
-               prefetch(rx_desc);
                rx_done++;
                rx_filled++;
                rx_status = rx_desc->status;