diff options
| -rw-r--r-- | drivers/dma/ioat/dma.c | 7 | ||||
| -rw-r--r-- | drivers/dma/ioat/dma.h | 3 |
2 files changed, 6 insertions, 4 deletions
diff --git a/drivers/dma/ioat/dma.c b/drivers/dma/ioat/dma.c index 17a518d0386f..21527b89590c 100644 --- a/drivers/dma/ioat/dma.c +++ b/drivers/dma/ioat/dma.c | |||
| @@ -251,12 +251,12 @@ static dma_cookie_t ioat1_tx_submit(struct dma_async_tx_descriptor *tx) | |||
| 251 | dev_dbg(to_dev(&ioat->base), "%s: cookie: %d\n", __func__, cookie); | 251 | dev_dbg(to_dev(&ioat->base), "%s: cookie: %d\n", __func__, cookie); |
| 252 | 252 | ||
| 253 | /* write address into NextDescriptor field of last desc in chain */ | 253 | /* write address into NextDescriptor field of last desc in chain */ |
| 254 | first = to_ioat_desc(tx->tx_list.next); | 254 | first = to_ioat_desc(desc->tx_list.next); |
| 255 | chain_tail = to_ioat_desc(ioat->used_desc.prev); | 255 | chain_tail = to_ioat_desc(ioat->used_desc.prev); |
| 256 | /* make descriptor updates globally visible before chaining */ | 256 | /* make descriptor updates globally visible before chaining */ |
| 257 | wmb(); | 257 | wmb(); |
| 258 | chain_tail->hw->next = first->txd.phys; | 258 | chain_tail->hw->next = first->txd.phys; |
| 259 | list_splice_tail_init(&tx->tx_list, &ioat->used_desc); | 259 | list_splice_tail_init(&desc->tx_list, &ioat->used_desc); |
| 260 | dump_desc_dbg(ioat, chain_tail); | 260 | dump_desc_dbg(ioat, chain_tail); |
| 261 | dump_desc_dbg(ioat, first); | 261 | dump_desc_dbg(ioat, first); |
| 262 | 262 | ||
| @@ -297,6 +297,7 @@ ioat_dma_alloc_descriptor(struct ioat_dma_chan *ioat, gfp_t flags) | |||
| 297 | 297 | ||
| 298 | memset(desc, 0, sizeof(*desc)); | 298 | memset(desc, 0, sizeof(*desc)); |
| 299 | 299 | ||
| 300 | INIT_LIST_HEAD(&desc_sw->tx_list); | ||
| 300 | dma_async_tx_descriptor_init(&desc_sw->txd, &ioat->base.common); | 301 | dma_async_tx_descriptor_init(&desc_sw->txd, &ioat->base.common); |
| 301 | desc_sw->txd.tx_submit = ioat1_tx_submit; | 302 | desc_sw->txd.tx_submit = ioat1_tx_submit; |
| 302 | desc_sw->hw = desc; | 303 | desc_sw->hw = desc; |
| @@ -521,7 +522,7 @@ ioat1_dma_prep_memcpy(struct dma_chan *c, dma_addr_t dma_dest, | |||
| 521 | 522 | ||
| 522 | desc->txd.flags = flags; | 523 | desc->txd.flags = flags; |
| 523 | desc->len = total_len; | 524 | desc->len = total_len; |
| 524 | list_splice(&chain, &desc->txd.tx_list); | 525 | list_splice(&chain, &desc->tx_list); |
| 525 | hw->ctl_f.int_en = !!(flags & DMA_PREP_INTERRUPT); | 526 | hw->ctl_f.int_en = !!(flags & DMA_PREP_INTERRUPT); |
| 526 | hw->ctl_f.compl_write = 1; | 527 | hw->ctl_f.compl_write = 1; |
| 527 | hw->tx_cnt = tx_cnt; | 528 | hw->tx_cnt = tx_cnt; |
diff --git a/drivers/dma/ioat/dma.h b/drivers/dma/ioat/dma.h index d9d6a7e3cd76..8966fa5453a7 100644 --- a/drivers/dma/ioat/dma.h +++ b/drivers/dma/ioat/dma.h | |||
| @@ -157,7 +157,7 @@ ioat_is_complete(struct dma_chan *c, dma_cookie_t cookie, | |||
| 157 | * struct ioat_desc_sw - wrapper around hardware descriptor | 157 | * struct ioat_desc_sw - wrapper around hardware descriptor |
| 158 | * @hw: hardware DMA descriptor | 158 | * @hw: hardware DMA descriptor |
| 159 | * @node: this descriptor will either be on the free list, | 159 | * @node: this descriptor will either be on the free list, |
| 160 | * or attached to a transaction list (async_tx.tx_list) | 160 | * or attached to a transaction list (tx_list) |
| 161 | * @txd: the generic software descriptor for all engines | 161 | * @txd: the generic software descriptor for all engines |
| 162 | * @id: identifier for debug | 162 | * @id: identifier for debug |
| 163 | */ | 163 | */ |
| @@ -165,6 +165,7 @@ struct ioat_desc_sw { | |||
| 165 | struct ioat_dma_descriptor *hw; | 165 | struct ioat_dma_descriptor *hw; |
| 166 | struct list_head node; | 166 | struct list_head node; |
| 167 | size_t len; | 167 | size_t len; |
| 168 | struct list_head tx_list; | ||
| 168 | struct dma_async_tx_descriptor txd; | 169 | struct dma_async_tx_descriptor txd; |
| 169 | #ifdef DEBUG | 170 | #ifdef DEBUG |
| 170 | int id; | 171 | int id; |
