瀏覽代碼

dmaengine: allow dma support for async_tx to be toggled

Provide a config option for blocking the allocation of dma channels to
the async_tx api.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Dan Williams 16 年之前
父節點
當前提交
729b5d1b8e
共有 3 個文件被更改,包括 32 次插入3 次删除
  1. 3 3
      crypto/async_tx/async_tx.c
  2. 11 0
      drivers/dma/Kconfig
  3. 18 0
      include/linux/dmaengine.h

+ 3 - 3
crypto/async_tx/async_tx.c

@@ -30,7 +30,7 @@
 #ifdef CONFIG_DMA_ENGINE
 #ifdef CONFIG_DMA_ENGINE
 static int __init async_tx_init(void)
 static int __init async_tx_init(void)
 {
 {
-	dmaengine_get();
+	async_dmaengine_get();
 
 
 	printk(KERN_INFO "async_tx: api initialized (async)\n");
 	printk(KERN_INFO "async_tx: api initialized (async)\n");
 
 
@@ -39,7 +39,7 @@ static int __init async_tx_init(void)
 
 
 static void __exit async_tx_exit(void)
 static void __exit async_tx_exit(void)
 {
 {
-	dmaengine_put();
+	async_dmaengine_put();
 }
 }
 
 
 /**
 /**
@@ -56,7 +56,7 @@ __async_tx_find_channel(struct dma_async_tx_descriptor *depend_tx,
 	if (depend_tx &&
 	if (depend_tx &&
 	    dma_has_cap(tx_type, depend_tx->chan->device->cap_mask))
 	    dma_has_cap(tx_type, depend_tx->chan->device->cap_mask))
 		return depend_tx->chan;
 		return depend_tx->chan;
-	return dma_find_channel(tx_type);
+	return async_dma_find_channel(tx_type);
 }
 }
 EXPORT_SYMBOL_GPL(__async_tx_find_channel);
 EXPORT_SYMBOL_GPL(__async_tx_find_channel);
 #else
 #else

+ 11 - 0
drivers/dma/Kconfig

@@ -98,6 +98,17 @@ config NET_DMA
 	  Say Y here if you enabled INTEL_IOATDMA or FSL_DMA, otherwise
 	  Say Y here if you enabled INTEL_IOATDMA or FSL_DMA, otherwise
 	  say N.
 	  say N.
 
 
+config ASYNC_TX_DMA
+	bool "Async_tx: Offload support for the async_tx api"
+	depends on DMA_ENGINE
+	help
+	  This allows the async_tx api to take advantage of offload engines for
+	  memcpy, memset, xor, and raid6 p+q operations.  If your platform has
+	  a dma engine that can perform raid operations and you have enabled
+	  MD_RAID456 say Y.
+
+	  If unsure, say N.
+
 config DMATEST
 config DMATEST
 	tristate "DMA Test client"
 	tristate "DMA Test client"
 	depends on DMA_ENGINE
 	depends on DMA_ENGINE

+ 18 - 0
include/linux/dmaengine.h

@@ -288,6 +288,24 @@ static inline void net_dmaengine_put(void)
 }
 }
 #endif
 #endif
 
 
+#ifdef CONFIG_ASYNC_TX_DMA
+#define async_dmaengine_get()	dmaengine_get()
+#define async_dmaengine_put()	dmaengine_put()
+#define async_dma_find_channel(type) dma_find_channel(type)
+#else
+static inline void async_dmaengine_get(void)
+{
+}
+static inline void async_dmaengine_put(void)
+{
+}
+static inline struct dma_chan *
+async_dma_find_channel(enum dma_transaction_type type)
+{
+	return NULL;
+}
+#endif
+
 dma_cookie_t dma_async_memcpy_buf_to_buf(struct dma_chan *chan,
 dma_cookie_t dma_async_memcpy_buf_to_buf(struct dma_chan *chan,
 	void *dest, void *src, size_t len);
 	void *dest, void *src, size_t len);
 dma_cookie_t dma_async_memcpy_buf_to_pg(struct dma_chan *chan,
 dma_cookie_t dma_async_memcpy_buf_to_pg(struct dma_chan *chan,