From: Dave Jiang <dave.ji...@intel.com>

Disable DMA usage by default, since the CPU provides much better
performance with write combining.  Provide a module parameter to enable
DMA usage when offloading the memcpy is preferred.

Signed-off-by: Dave Jiang <dave.ji...@intel.com>
Signed-off-by: Allen Hubbe <allen.hu...@emc.com>
---
 drivers/ntb/ntb_transport.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
index 528ea0af6d54..ea237aeca28c 100644
--- a/drivers/ntb/ntb_transport.c
+++ b/drivers/ntb/ntb_transport.c
@@ -88,6 +88,10 @@ static unsigned int copy_bytes = 1024;
 module_param(copy_bytes, uint, 0644);
 MODULE_PARM_DESC(copy_bytes, "Threshold under which NTB will use the CPU to 
copy instead of DMA");
 
+static bool use_dma;
+module_param(use_dma, bool, 0644);
+MODULE_PARM_DESC(use_dma, "Use DMA engine to perform large data copy");
+
 static struct dentry *nt_debugfs_dir;
 
 struct ntb_queue_entry {
@@ -1585,10 +1589,15 @@ ntb_transport_create_queue(void *data, struct device 
*client_dev,
        dma_cap_zero(dma_mask);
        dma_cap_set(DMA_MEMCPY, dma_mask);
 
-       qp->dma_chan = dma_request_channel(dma_mask, ntb_dma_filter_fn,
-                                          (void *)(unsigned long)node);
-       if (!qp->dma_chan)
-               dev_info(&pdev->dev, "Unable to allocate DMA channel, using CPU 
instead\n");
+       if (use_dma) {
+               qp->dma_chan = dma_request_channel(dma_mask, ntb_dma_filter_fn,
+                                                  (void *)(unsigned long)node);
+               if (!qp->dma_chan)
+                       dev_info(&pdev->dev, "Unable to allocate DMA 
channel\n");
+       } else {
+               qp->dma_chan = NULL;
+       }
+       dev_dbg(&pdev->dev, "Using %s memcpy\n", qp->dma_chan ? "DMA" : "CPU");
 
        for (i = 0; i < NTB_QP_DEF_NUM_ENTRIES; i++) {
                entry = kzalloc_node(sizeof(*entry), GFP_ATOMIC, node);
-- 
2.4.0.rc0.43.gcf8a8c6

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to