dmaengine_get and chan->client_count

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Resending because earlier post rejected for non-ascii chars...
---


To use dma_find_channel, I call dmaengine_get to populate the per cpu channel_table[]...

In dmaengine_get, chan->client_count's for all of the dma channels that it can acquire are all being set to 2.

It is set to 2 because, dmaengine_ref_count is incremented first thing in dmaengine_get. For every non PRIVATE channel, balance_ref_count(chan) is called before dma_chan_get() increments client_count; balance_ref_count(chan) will increment client_count (0) to match the value of dmaengine_ref_count (1) if client_count < dmaengine_ref_count.

        if (!dma_has_cap(DMA_PRIVATE, chan->device->cap_mask))
                balance_ref_count(chan); <<< sets client_count to 1

out:
        chan->client_count++; <<< increment to 2.


Is the value of 2 initially set for the chan->client_count correct?  It seems like the correct value should be 1.

If dmaengine_put were called at some later time to undo what dmaengine_get had done, the dma_chan_put() calls would only be able to decrement the client_count values from 2 to 1 and will not clean up as client_count is not 0. Is there something else I am missing that could be decrementing the client_count (something like balance_ref_count but in the downward direction)?

Thanks

Kit




[Index of Archives]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux PCI]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux