diff options
author | Benjamin LaHaise <ben.lahaise@neterion.com> | 2009-08-04 10:21:39 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-08-05 13:10:45 -0700 |
commit | 3f23e436d241ac1cf50a659228a5a0e1e6572c1a (patch) | |
tree | eca045a10b9d536362f3a4f654da5c740a416e85 /drivers/net/vxge | |
parent | ff1b974cf30b282f90993ab658e59b73c152c0b8 (diff) | |
download | op-kernel-dev-3f23e436d241ac1cf50a659228a5a0e1e6572c1a.zip op-kernel-dev-3f23e436d241ac1cf50a659228a5a0e1e6572c1a.tar.gz |
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 4b22513..e93651c 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, vxge_hw_ring_replenish(ringh, 0); do { + prefetch((char *)dtr + L1_CACHE_BYTES); rx_priv = vxge_hw_ring_rxd_private_get(dtr); skb = rx_priv->skb; data_size = rx_priv->data_size; diff --git a/drivers/net/vxge/vxge-traffic.c b/drivers/net/vxge/vxge-traffic.c index 0efb769..fe3ae51 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) vxge_assert(channel->compl_index < channel->length); *dtrh = channel->work_arr[channel->compl_index]; + prefetch(*dtrh); } /* |