Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

txx9dmac: implement a private tx_list

Drop txx9dmac's use of tx_list from struct dma_async_tx_descriptor in
preparation for removal of this field.

Cc: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>

+12 -13
+11 -13
drivers/dma/txx9dmac.c
··· 180 180 181 181 static struct txx9dmac_desc *txx9dmac_last_child(struct txx9dmac_desc *desc) 182 182 { 183 - if (!list_empty(&desc->txd.tx_list)) 184 - desc = list_entry(desc->txd.tx_list.prev, 185 - struct txx9dmac_desc, desc_node); 183 + if (!list_empty(&desc->tx_list)) 184 + desc = list_entry(desc->tx_list.prev, typeof(*desc), desc_node); 186 185 return desc; 187 186 } 188 187 ··· 196 197 desc = kzalloc(sizeof(*desc), flags); 197 198 if (!desc) 198 199 return NULL; 200 + INIT_LIST_HEAD(&desc->tx_list); 199 201 dma_async_tx_descriptor_init(&desc->txd, &dc->chan); 200 202 desc->txd.tx_submit = txx9dmac_tx_submit; 201 203 /* txd.flags will be overwritten in prep funcs */ ··· 245 245 struct txx9dmac_dev *ddev = dc->ddev; 246 246 struct txx9dmac_desc *child; 247 247 248 - list_for_each_entry(child, &desc->txd.tx_list, desc_node) 248 + list_for_each_entry(child, &desc->tx_list, desc_node) 249 249 dma_sync_single_for_cpu(chan2parent(&dc->chan), 250 250 child->txd.phys, ddev->descsize, 251 251 DMA_TO_DEVICE); ··· 267 267 txx9dmac_sync_desc_for_cpu(dc, desc); 268 268 269 269 spin_lock_bh(&dc->lock); 270 - list_for_each_entry(child, &desc->txd.tx_list, desc_node) 270 + list_for_each_entry(child, &desc->tx_list, desc_node) 271 271 dev_vdbg(chan2dev(&dc->chan), 272 272 "moving child desc %p to freelist\n", 273 273 child); 274 - list_splice_init(&desc->txd.tx_list, &dc->free_list); 274 + list_splice_init(&desc->tx_list, &dc->free_list); 275 275 dev_vdbg(chan2dev(&dc->chan), "moving desc %p to freelist\n", 276 276 desc); 277 277 list_add(&desc->desc_node, &dc->free_list); ··· 429 429 param = txd->callback_param; 430 430 431 431 txx9dmac_sync_desc_for_cpu(dc, desc); 432 - list_splice_init(&txd->tx_list, &dc->free_list); 432 + list_splice_init(&desc->tx_list, &dc->free_list); 433 433 list_move(&desc->desc_node, &dc->free_list); 434 434 435 435 if (!ds) { ··· 571 571 "Bad descriptor submitted for DMA! (cookie: %d)\n", 572 572 bad_desc->txd.cookie); 573 573 txx9dmac_dump_desc(dc, &bad_desc->hwdesc); 574 - list_for_each_entry(child, &bad_desc->txd.tx_list, desc_node) 574 + list_for_each_entry(child, &bad_desc->tx_list, desc_node) 575 575 txx9dmac_dump_desc(dc, &child->hwdesc); 576 576 /* Pretend the descriptor completed successfully */ 577 577 txx9dmac_descriptor_complete(dc, bad_desc); ··· 613 613 return; 614 614 } 615 615 616 - list_for_each_entry(child, &desc->txd.tx_list, desc_node) 616 + list_for_each_entry(child, &desc->tx_list, desc_node) 617 617 if (desc_read_CHAR(dc, child) == chain) { 618 618 /* Currently in progress */ 619 619 if (csr & TXX9_DMA_CSR_ABCHC) ··· 823 823 dma_sync_single_for_device(chan2parent(&dc->chan), 824 824 prev->txd.phys, ddev->descsize, 825 825 DMA_TO_DEVICE); 826 - list_add_tail(&desc->desc_node, 827 - &first->txd.tx_list); 826 + list_add_tail(&desc->desc_node, &first->tx_list); 828 827 } 829 828 prev = desc; 830 829 } ··· 918 919 prev->txd.phys, 919 920 ddev->descsize, 920 921 DMA_TO_DEVICE); 921 - list_add_tail(&desc->desc_node, 922 - &first->txd.tx_list); 922 + list_add_tail(&desc->desc_node, &first->tx_list); 923 923 } 924 924 prev = desc; 925 925 }
+1
drivers/dma/txx9dmac.h
··· 231 231 232 232 /* THEN values for driver housekeeping */ 233 233 struct list_head desc_node ____cacheline_aligned; 234 + struct list_head tx_list; 234 235 struct dma_async_tx_descriptor txd; 235 236 size_t len; 236 237 };