diff options
author | Benjamin LaHaise <ben.lahaise@neterion.com> | 2009-08-04 06:21:39 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-08-05 16:10:45 -0400 |
commit | 3f23e436d241ac1cf50a659228a5a0e1e6572c1a (patch) | |
tree | eca045a10b9d536362f3a4f654da5c740a416e85 /drivers/net/vxge | |
parent | ff1b974cf30b282f90993ab658e59b73c152c0b8 (diff) |
vxge: prefetch RxD descriptors
This patch prefetches RxD descriptors which helps to lower the latency of a
cache miss in vxge_hw_ring_rxd_next_completed. This lowers the % of CPU
time used by vxge_hw_ring_rxd_next_completed() where the descriptor is
accessed in profiling netperf on a P4 Xeon from 1.5% to 1.0%.
Signed-off-by: Benjamin LaHaise <ben.lahaise@neterion.com>
Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
Signed-off-by: Ramkrishna Vepa <ram.vepa@neterion.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/vxge')
-rw-r--r-- | drivers/net/vxge/vxge-main.c | 1 | ||||
-rw-r--r-- | drivers/net/vxge/vxge-traffic.c | 1 |
2 files changed, 2 insertions, 0 deletions
diff --git a/drivers/net/vxge/vxge-main.c b/drivers/net/vxge/vxge-main.c index 4b22513bed40..e93651c19f59 100644 --- a/drivers/net/vxge/vxge-main.c +++ b/drivers/net/vxge/vxge-main.c | |||
@@ -445,6 +445,7 @@ vxge_rx_1b_compl(struct __vxge_hw_ring *ringh, void *dtr, | |||
445 | vxge_hw_ring_replenish(ringh, 0); | 445 | vxge_hw_ring_replenish(ringh, 0); |
446 | 446 | ||
447 | do { | 447 | do { |
448 | prefetch((char *)dtr + L1_CACHE_BYTES); | ||
448 | rx_priv = vxge_hw_ring_rxd_private_get(dtr); | 449 | rx_priv = vxge_hw_ring_rxd_private_get(dtr); |
449 | skb = rx_priv->skb; | 450 | skb = rx_priv->skb; |
450 | data_size = rx_priv->data_size; | 451 | data_size = rx_priv->data_size; |
diff --git a/drivers/net/vxge/vxge-traffic.c b/drivers/net/vxge/vxge-traffic.c index 0efb769894ef..fe3ae518c69c 100644 --- a/drivers/net/vxge/vxge-traffic.c +++ b/drivers/net/vxge/vxge-traffic.c | |||
@@ -731,6 +731,7 @@ vxge_hw_channel_dtr_try_complete(struct __vxge_hw_channel *channel, void **dtrh) | |||
731 | vxge_assert(channel->compl_index < channel->length); | 731 | vxge_assert(channel->compl_index < channel->length); |
732 | 732 | ||
733 | *dtrh = channel->work_arr[channel->compl_index]; | 733 | *dtrh = channel->work_arr[channel->compl_index]; |
734 | prefetch(*dtrh); | ||
734 | } | 735 | } |
735 | 736 | ||
736 | /* | 737 | /* |