Re: [PATCH v4 3/4] dmaengine: Add Broadcom SBA RAID driver
From: Anup Patel <hidden>
Date: 2017-02-15 07:03:12
Also in:
linux-arm-kernel, linux-crypto, linux-raid, lkml
On Wed, Feb 15, 2017 at 12:13 PM, Dan Williams [off-list ref] wrote:
On Tue, Feb 14, 2017 at 10:25 PM, Anup Patel [off-list ref] wrote:quoted
On Tue, Feb 14, 2017 at 10:04 PM, Dan Williams [off-list ref] wrote:quoted
On Mon, Feb 13, 2017 at 10:51 PM, Anup Patel [off-list ref] wrote:quoted
The Broadcom stream buffer accelerator (SBA) provides offloading capabilities for RAID operations. This SBA offload engine is accessible via Broadcom SoC specific ring manager. This patch adds Broadcom SBA RAID driver which provides one DMA device with RAID capabilities using one or more Broadcom SoC specific ring manager channels. The SBA RAID driver in its current shape implements memcpy, xor, and pq operations. Signed-off-by: Anup Patel <redacted> Reviewed-by: Ray Jui <redacted> --- drivers/dma/Kconfig | 13 + drivers/dma/Makefile | 1 + drivers/dma/bcm-sba-raid.c | 1694 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1708 insertions(+) create mode 100644 drivers/dma/bcm-sba-raid.cdiff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig index 263495d..bf8fb84 100644 --- a/drivers/dma/Kconfig +++ b/drivers/dma/Kconfig@@ -99,6 +99,19 @@ config AXI_DMAC controller is often used in Analog Device's reference designs for FPGA platforms. +config BCM_SBA_RAID + tristate "Broadcom SBA RAID engine support" + depends on (ARM64 && MAILBOX && RAID6_PQ) || COMPILE_TEST + select DMA_ENGINE + select DMA_ENGINE_RAID + select ASYNC_TX_ENABLE_CHANNEL_SWITCHI thought you agreed to drop this. Its usage is broken.If ASYNC_TX_ENABLE_CHANNEL_SWITCH is not selected then async_dma_find_channel() will only try to find channel with DMA_ASYNC_TX capability. The DMA_ASYNC_TX capability is set by dma_async_device_register() when all Async Tx capabilities are supported by a DMA devices namely DMA_INTERRUPT, DMA_MEMCPY, DMA_XOR, DMA_XOR_VAL, DMA_PQ, and DMA_PQ_VAL. We only support DMA_MEMCPY, DMA_XOR, and DMA_PQ capabilities in BCM-SBA-RAID driver so DMA_ASYNC_TX capability is never set for the DMA device registered by BCM-SBA-RAID driver. Due to above, if ASYNC_TX_ENABLE_CHANNEL_SWITCH is not selected then Async Tx APIs fail to find DMA channel provided by BCM-SBA-RAID hence the option ASYNC_TX_ENABLE_CHANNEL_SWITCH is required for BCM-SBA-RAID. The DMA mappings are violated by channel switching only if we switch form DMA channel A to DMA channel B and both these DMA channels have different underlying "struct device". In most of the cases DMA mappings are not violated because DMA channels having Async Tx capabilities are provided using same underlying "struct device".No, fix the infrastructure. Do not put local hack in your driver for this global problem [1].
There is no hack in the driver. We need ASYNC_TX_ENABLE_CHANNEL_SWITCH based on current state of dmaengine framework. The framework should be fixed as separate patchset. We have other RAID drivers such as xgene-dma and mv_xor_v2 who also require ASYNC_TX_ENABLE_CHANNEL_SWITCH due to same reason. Fixing the framework and improving framework is a ongoing process. I don't see why that should stop this patchset. Regards, Anup