Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754062AbcLISRz (ORCPT ); Fri, 9 Dec 2016 13:17:55 -0500 Received: from mga11.intel.com ([192.55.52.93]:23966 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754014AbcLISRx (ORCPT ); Fri, 9 Dec 2016 13:17:53 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,324,1477983600"; d="scan'208";a="40688872" Date: Fri, 9 Dec 2016 23:47:15 +0530 From: Vinod Koul To: Mason Cc: Sebastian Frias , Mans Rullgard , Russell King , dmaengine@vger.kernel.org, Linus Walleij , Dan Williams , LKML , Linux ARM , Jon Mason , Mark Brown , Lars-Peter Clausen , Lee Jones , Laurent Pinchart , Arnd Bergmann , Maxime Ripard , Dave Jiang , Peter Ujfalusi , Bartlomiej Zolnierkiewicz , Thibaud Cornic Subject: Re: Tearing down DMA transfer setup after DMA client has finished Message-ID: <20161209181715.GN6408@localhost> References: <20161208103921.GC6408@localhost> <91b0d10c-1bc2-c3e1-4088-f4ad9adcd6c0@free.fr> <20161208163755.GH6408@localhost> <20161209065955.GJ6408@localhost> <6ce1ea97-1d68-2203-c7b4-73315e801655@laposte.net> <20161209171727.GK6408@localhost> <20161209175606.GM6408@localhost> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161209175606.GM6408@localhost> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2499 Lines: 57 On Fri, Dec 09, 2016 at 11:26:06PM +0530, Vinod Koul wrote: > On Fri, Dec 09, 2016 at 06:34:15PM +0100, Mason wrote: > > On 09/12/2016 18:17, Vinod Koul wrote: > > > > > On Fri, Dec 09, 2016 at 11:25:57AM +0100, Sebastian Frias wrote: > > >> > > >> What concrete solution do you propose? > > > > > > I have already proposed two solutions. > > > > > > A) Request a channel only when you need it. Obviously we can't do virtual > > > channels with this (though we should still use virt-channels framework). > > > The sbox setup and teardown can be done as part of channel request and > > > freeup. PL08x already does this. > > > > > > Downside is that we can only have as many consumers at a time as channels. > > > > > > I have not heard any technical reason for not doing this apart from drivers > > > grab the channel at probe, which is incorrect and needs to be fixed > > > irrespective of the problem at hand. > > > > > > This is my preferred option. > > > > There is one important drawback with this solution. If a driver calls > > dma_request_chan() when no channels are currently available, it will > > get -EBUSY. If there were a flag in dma_request_chan to be put to > > sleep (with timeout) until a channel is available, then it would > > work. But busy waiting in the client driver is a waste of power. > > Right, but in that case the fallback would be PIO mode, and if that is > not availble (IIRC some f your devices don't) then reject the usage with > EAGAIN. Alternatively I can think of one more way. If there is fixed delay or maximum delay predicted between ISR being fired and transaction being completed from client, then we can use that magic value and degrade the performance a bit but make a simpler system than other two suggestions. The idea here is that typically the subsequent transaction should be issued as soon as possible, best case being in the ISR. But we can degrade that performance a bit and issue in the tasklet. But that can be done after introducing a delay, that too only in the case where new sbox configuration is different from previous one (so performance degrade is only on the switch and not for txn for same setup). You can possible optimize even further by issuing in ISR for same sbox setup and issuing in tasklet if configuration is different. Yes this is bit iffy and adds more burden on driver, but lets us get away with decent performance and being able to handle the hardware condition. Would that work for your case...? -- ~Vinod