From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755347Ab2IRUxP (ORCPT ); Tue, 18 Sep 2012 16:53:15 -0400 Received: from caramon.arm.linux.org.uk ([78.32.30.218]:35369 "EHLO caramon.arm.linux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755083Ab2IRUxN (ORCPT ); Tue, 18 Sep 2012 16:53:13 -0400 Date: Tue, 18 Sep 2012 21:52:48 +0100 From: Russell King - ARM Linux To: Linus Walleij Cc: Vinod Koul , linux-kernel@vger.kernel.org, Dan Williams , Arnd Bergmann , Jon Hunter , Stephen Warren , Benoit Cousson , Shawn Guo , Guennadi Liakhovetski , Sascha Hauer , Kukjin Kim , viresh kumar , Paul Mundt , Per Forlin , Rabin VINCENT Subject: Re: [PATCH] dmaengine: add dmanegine slave map api's Message-ID: <20120918205248.GZ12245@n2100.arm.linux.org.uk> References: <1347615189-27052-1-git-send-email-vinod.koul@linux.intel.com> <20120914094155.GC12245@n2100.arm.linux.org.uk> <1347619868.1943.113.camel@vkoul-udesk3> <20120914111842.GD12245@n2100.arm.linux.org.uk> <1347853223.1943.136.camel@vkoul-udesk3> <20120917083654.GO12245@n2100.arm.linux.org.uk> <1347875429.1943.141.camel@vkoul-udesk3> <20120917215753.GS12245@n2100.arm.linux.org.uk> <1347938307.1943.166.camel@vkoul-udesk3> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.19 (2009-01-05) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Sep 18, 2012 at 02:20:53PM +0200, Linus Walleij wrote: > But we're probably the odd exception here so nevermind. > One day we may test to rip out the logical channel handling and > use Russell's virtual channel lib to run the show as an experiment. Note that I'm beginning to add support for the async_tx API stuff into the virtual channel DMA support, so it can handle the inter-dependencies between descriptors that async_tx needs. I'm currently trying to get the design of this right, as the async_tx needs yet-another-list of descriptors which have been submitted, may have been processed and completed, but for whatever reason have not been acknowledged. Such descriptors can not be freed because the async_tx API may hold a reference to them, and may dereference them at any moment to check the dependency situation. There's a clue in that paragraph about how the DMA engine TX descriptors _should_ be handled. "hold a reference" is the clue. Or another way to say it, a kref should be embedded in the structure, providing us with proper reference counting - and descriptors should only be 'freed' (whether that means actually freeing them or placing them into a free list) when the last reference is dropped. That's _much_ better to understand than this DMA_CTRL_ACK business... I think switching stuff over to that may simplify things, but it's going to be absolute hell modifying all the existing DMA engine drivers, many of which I have no way to test (and probably as Dan has left Intel, we have a pile of totally untestable drivers now.)