Commit 0ab09c36818ca88f65c88f4d8c6d067fbf10578d

Authored by Ira Snyder
Committed by Dan Williams
1 parent b158471ef6

fsldma: improve link descriptor debugging

This adds better tracking to link descriptor allocations, callbacks, and
frees. This makes it much easier to track errors with link descriptors.

Signed-off-by: Ira W. Snyder <iws@ovro.caltech.edu>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>

Showing 1 changed file with 15 additions and 6 deletions Side-by-side Diff

drivers/dma/fsldma.c
... ... @@ -420,6 +420,10 @@
420 420 desc->async_tx.tx_submit = fsl_dma_tx_submit;
421 421 desc->async_tx.phys = pdesc;
422 422  
  423 +#ifdef FSL_DMA_LD_DEBUG
  424 + chan_dbg(chan, "LD %p allocated\n", desc);
  425 +#endif
  426 +
423 427 return desc;
424 428 }
425 429  
... ... @@ -470,6 +474,9 @@
470 474  
471 475 list_for_each_entry_safe(desc, _desc, list, node) {
472 476 list_del(&desc->node);
  477 +#ifdef FSL_DMA_LD_DEBUG
  478 + chan_dbg(chan, "LD %p free\n", desc);
  479 +#endif
473 480 dma_pool_free(chan->desc_pool, desc, desc->async_tx.phys);
474 481 }
475 482 }
... ... @@ -481,6 +488,9 @@
481 488  
482 489 list_for_each_entry_safe_reverse(desc, _desc, list, node) {
483 490 list_del(&desc->node);
  491 +#ifdef FSL_DMA_LD_DEBUG
  492 + chan_dbg(chan, "LD %p free\n", desc);
  493 +#endif
484 494 dma_pool_free(chan->desc_pool, desc, desc->async_tx.phys);
485 495 }
486 496 }
... ... @@ -557,9 +567,6 @@
557 567 chan_err(chan, "%s\n", msg_ld_oom);
558 568 goto fail;
559 569 }
560   -#ifdef FSL_DMA_LD_DEBUG
561   - chan_dbg(chan, "new link desc alloc %p\n", new);
562   -#endif
563 570  
564 571 copy = min(len, (size_t)FSL_DMA_BCR_MAX_CNT);
565 572  
... ... @@ -645,9 +652,6 @@
645 652 chan_err(chan, "%s\n", msg_ld_oom);
646 653 goto fail;
647 654 }
648   -#ifdef FSL_DMA_LD_DEBUG
649   - chan_dbg(chan, "new link desc alloc %p\n", new);
650   -#endif
651 655  
652 656 set_desc_cnt(chan, &new->hw, len);
653 657 set_desc_src(chan, &new->hw, src);
654 658  
655 659  
... ... @@ -882,13 +886,18 @@
882 886 callback_param = desc->async_tx.callback_param;
883 887 if (callback) {
884 888 spin_unlock_irqrestore(&chan->desc_lock, flags);
  889 +#ifdef FSL_DMA_LD_DEBUG
885 890 chan_dbg(chan, "LD %p callback\n", desc);
  891 +#endif
886 892 callback(callback_param);
887 893 spin_lock_irqsave(&chan->desc_lock, flags);
888 894 }
889 895  
890 896 /* Run any dependencies, then free the descriptor */
891 897 dma_run_dependencies(&desc->async_tx);
  898 +#ifdef FSL_DMA_LD_DEBUG
  899 + chan_dbg(chan, "LD %p free\n", desc);
  900 +#endif
892 901 dma_pool_free(chan->desc_pool, desc, desc->async_tx.phys);
893 902 }
894 903