ioat3: disable cacheline-unaligned transfers for raid operations

There are cases where cacheline-unaligned raid operations can hang the
dma channel.  Simply disable these operations by increasing the
alignment constraints published to async_tx.  The raid456 driver always
issues page aligned requests, so the only in-kernel user of the ioatdma
driver that is affected by this change is dmatest.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
Dan Williams 2010-05-01 15:22:56 -07:00
parent 074cc47679
commit 2adfc550b6

View File

@ -1175,7 +1175,7 @@ int __devinit ioat3_dma_probe(struct ioatdma_device *device, int dca)
if (cap & IOAT_CAP_XOR) { if (cap & IOAT_CAP_XOR) {
is_raid_device = true; is_raid_device = true;
dma->max_xor = 8; dma->max_xor = 8;
dma->xor_align = 2; dma->xor_align = 6;
dma_cap_set(DMA_XOR, dma->cap_mask); dma_cap_set(DMA_XOR, dma->cap_mask);
dma->device_prep_dma_xor = ioat3_prep_xor; dma->device_prep_dma_xor = ioat3_prep_xor;
@ -1186,7 +1186,7 @@ int __devinit ioat3_dma_probe(struct ioatdma_device *device, int dca)
if (cap & IOAT_CAP_PQ) { if (cap & IOAT_CAP_PQ) {
is_raid_device = true; is_raid_device = true;
dma_set_maxpq(dma, 8, 0); dma_set_maxpq(dma, 8, 0);
dma->pq_align = 2; dma->pq_align = 6;
dma_cap_set(DMA_PQ, dma->cap_mask); dma_cap_set(DMA_PQ, dma->cap_mask);
dma->device_prep_dma_pq = ioat3_prep_pq; dma->device_prep_dma_pq = ioat3_prep_pq;
@ -1196,7 +1196,7 @@ int __devinit ioat3_dma_probe(struct ioatdma_device *device, int dca)
if (!(cap & IOAT_CAP_XOR)) { if (!(cap & IOAT_CAP_XOR)) {
dma->max_xor = 8; dma->max_xor = 8;
dma->xor_align = 2; dma->xor_align = 6;
dma_cap_set(DMA_XOR, dma->cap_mask); dma_cap_set(DMA_XOR, dma->cap_mask);
dma->device_prep_dma_xor = ioat3_prep_pqxor; dma->device_prep_dma_xor = ioat3_prep_pqxor;