mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
async_tx: build-time toggling of async_{syndrome,xor}_val dma support
ioat3.2 does not support asynchronous error notifications which makes the driver experience latencies when non-zero pq validate results are expected. Provide a mechanism for turning off async_xor_val and async_syndrome_val via Kconfig. This approach is generally useful for any driver that specifies ASYNC_TX_DISABLE_CHANNEL_SWITCH and would like to force the async_tx api to fall back to the synchronous path for certain operations. Signed-off-by: Dan Williams <[email protected]>
This commit is contained in:
parent
4499a24dec
commit
7b3cc2b1fc
6 changed files with 46 additions and 6 deletions
|
|
@ -26,6 +26,8 @@ config INTEL_IOATDMA
|
|||
select DMA_ENGINE
|
||||
select DCA
|
||||
select ASYNC_TX_DISABLE_CHANNEL_SWITCH
|
||||
select ASYNC_TX_DISABLE_PQ_VAL_DMA
|
||||
select ASYNC_TX_DISABLE_XOR_VAL_DMA
|
||||
help
|
||||
Enable support for the Intel(R) I/OAT DMA engine present
|
||||
in recent Intel Xeon chipsets.
|
||||
|
|
|
|||
|
|
@ -632,16 +632,22 @@ static bool device_has_all_tx_types(struct dma_device *device)
|
|||
#if defined(CONFIG_ASYNC_XOR) || defined(CONFIG_ASYNC_XOR_MODULE)
|
||||
if (!dma_has_cap(DMA_XOR, device->cap_mask))
|
||||
return false;
|
||||
|
||||
#ifndef CONFIG_ASYNC_TX_DISABLE_XOR_VAL_DMA
|
||||
if (!dma_has_cap(DMA_XOR_VAL, device->cap_mask))
|
||||
return false;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ASYNC_PQ) || defined(CONFIG_ASYNC_PQ_MODULE)
|
||||
if (!dma_has_cap(DMA_PQ, device->cap_mask))
|
||||
return false;
|
||||
|
||||
#ifndef CONFIG_ASYNC_TX_DISABLE_PQ_VAL_DMA
|
||||
if (!dma_has_cap(DMA_PQ_VAL, device->cap_mask))
|
||||
return false;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1206,6 +1206,16 @@ int __devinit ioat3_dma_probe(struct ioatdma_device *device, int dca)
|
|||
device->timer_fn = ioat2_timer_event;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ASYNC_TX_DISABLE_PQ_VAL_DMA
|
||||
dma_cap_clear(DMA_PQ_VAL, dma->cap_mask);
|
||||
dma->device_prep_dma_pq_val = NULL;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ASYNC_TX_DISABLE_XOR_VAL_DMA
|
||||
dma_cap_clear(DMA_XOR_VAL, dma->cap_mask);
|
||||
dma->device_prep_dma_xor_val = NULL;
|
||||
#endif
|
||||
|
||||
/* -= IOAT ver.3 workarounds =- */
|
||||
/* Write CHANERRMSK_INT with 3E07h to mask out the errors
|
||||
* that can cause stability issues for IOAT ver.3
|
||||
|
|
|
|||
Loading…
Reference in a new issue