aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaciej Sosnowski <maciej.sosnowski@intel.com>2008-07-22 20:30:57 -0400
committerDan Williams <dan.j.williams@intel.com>2008-07-22 20:30:57 -0400
commit16a37acaaf4aaa631ba3f83710ed6cdb1a597520 (patch)
tree5826c763c70dc6b798c0d12216a80f4596dec284
parent09177e85d6a0bffac8b55afd28ed8b82bd873f0b (diff)
I/OAT: tcp_dma_copybreak default value dependent on I/OAT version
I/OAT DMA performance tuning showed different optimal values of tcp_dma_copybreak for different I/OAT versions (4096 for 1.2 and 2048 for 2.0). This patch lets ioatdma driver set tcp_dma_copybreak value according to these results. [dan.j.williams@intel.com: remove some ifdefs] Signed-off-by: Maciej Sosnowski <maciej.sosnowski@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r--drivers/dma/ioat_dma.c2
-rw-r--r--drivers/dma/ioatdma.h15
-rw-r--r--net/core/user_dma.c1
3 files changed, 18 insertions, 0 deletions
diff --git a/drivers/dma/ioat_dma.c b/drivers/dma/ioat_dma.c
index da572968a7db..ece5a0e3a335 100644
--- a/drivers/dma/ioat_dma.c
+++ b/drivers/dma/ioat_dma.c
@@ -1581,6 +1581,8 @@ struct ioatdma_device *ioat_dma_probe(struct pci_dev *pdev,
1581 if (err) 1581 if (err)
1582 goto err_self_test; 1582 goto err_self_test;
1583 1583
1584 ioat_set_tcp_copy_break(device);
1585
1584 dma_async_device_register(&device->common); 1586 dma_async_device_register(&device->common);
1585 1587
1586 INIT_DELAYED_WORK(&device->work, ioat_dma_chan_watchdog); 1588 INIT_DELAYED_WORK(&device->work, ioat_dma_chan_watchdog);
diff --git a/drivers/dma/ioatdma.h b/drivers/dma/ioatdma.h
index c6ec933f9895..685adb62aa5a 100644
--- a/drivers/dma/ioatdma.h
+++ b/drivers/dma/ioatdma.h
@@ -27,6 +27,7 @@
27#include <linux/dmapool.h> 27#include <linux/dmapool.h>
28#include <linux/cache.h> 28#include <linux/cache.h>
29#include <linux/pci_ids.h> 29#include <linux/pci_ids.h>
30#include <net/tcp.h>
30 31
31#define IOAT_DMA_VERSION "2.18" 32#define IOAT_DMA_VERSION "2.18"
32 33
@@ -129,6 +130,20 @@ struct ioat_desc_sw {
129 struct dma_async_tx_descriptor async_tx; 130 struct dma_async_tx_descriptor async_tx;
130}; 131};
131 132
133static inline void ioat_set_tcp_copy_break(struct ioatdma_device *dev)
134{
135 #ifdef CONFIG_NET_DMA
136 switch (dev->version) {
137 case IOAT_VER_1_2:
138 sysctl_tcp_dma_copybreak = 4096;
139 break;
140 case IOAT_VER_2_0:
141 sysctl_tcp_dma_copybreak = 2048;
142 break;
143 }
144 #endif
145}
146
132#if defined(CONFIG_INTEL_IOATDMA) || defined(CONFIG_INTEL_IOATDMA_MODULE) 147#if defined(CONFIG_INTEL_IOATDMA) || defined(CONFIG_INTEL_IOATDMA_MODULE)
133struct ioatdma_device *ioat_dma_probe(struct pci_dev *pdev, 148struct ioatdma_device *ioat_dma_probe(struct pci_dev *pdev,
134 void __iomem *iobase); 149 void __iomem *iobase);
diff --git a/net/core/user_dma.c b/net/core/user_dma.c
index 0ad1cd57bc39..de760504f6fe 100644
--- a/net/core/user_dma.c
+++ b/net/core/user_dma.c
@@ -34,6 +34,7 @@
34#define NET_DMA_DEFAULT_COPYBREAK 4096 34#define NET_DMA_DEFAULT_COPYBREAK 4096
35 35
36int sysctl_tcp_dma_copybreak = NET_DMA_DEFAULT_COPYBREAK; 36int sysctl_tcp_dma_copybreak = NET_DMA_DEFAULT_COPYBREAK;
37EXPORT_SYMBOL(sysctl_tcp_dma_copybreak);
37 38
38/** 39/**
39 * dma_skb_copy_datagram_iovec - Copy a datagram to an iovec. 40 * dma_skb_copy_datagram_iovec - Copy a datagram to an iovec.