From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932190AbbDJIE1 (ORCPT ); Fri, 10 Apr 2015 04:04:27 -0400 Received: from smtp-out-032.synserver.de ([212.40.185.32]:1067 "EHLO smtp-out-032.synserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754502AbbDJIER (ORCPT ); Fri, 10 Apr 2015 04:04:17 -0400 X-SynServer-TrustedSrc: 1 X-SynServer-AuthUser: lars@metafoo.de X-SynServer-PPID: 30145 Message-ID: <552783F8.2080506@metafoo.de> Date: Fri, 10 Apr 2015 10:04:08 +0200 From: Lars-Peter Clausen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.6.0 MIME-Version: 1.0 To: Robert Baldyga , vinod.koul@intel.com CC: dan.j.williams@intel.com, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, m.szyprowski@samsung.com, k.kozlowski@samsung.com Subject: Re: [PATCH] dmaengine: pl330: get rid of pm_runtime_irq_safe() References: <1428649045-26444-1-git-send-email-r.baldyga@samsung.com> In-Reply-To: <1428649045-26444-1-git-send-email-r.baldyga@samsung.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 04/10/2015 08:57 AM, Robert Baldyga wrote: > As using pm_runtime_irq_safe() causes power domain is always enabled, > we want to get rid of it to reach better power efficiency. For this purpose > we call pm_runtime_get()/pm_runtime_put() only in DMA channel allocate/free > code. DMA channels are always requested and freed in non-atomic context, > so we don't need pm_runtime_irq_safe(). I wonder how useful this is considering that pretty much always a channel is requested. I think we need an extension to the dmaengine API that allows a channel consumer to notify the driver that the channel that it requested is currently not in use. E.g. something like dmaengine_pm_{get,put}(struct dma_chan *). These functions would have the restriction that they can only be called from a non-atomic context, whereas issue_pending() and friends can still be called from a atomic context. So dmaengine_pm_get() would kind of be a notification that consumer intends to do something in the near future whereas dmaengine_pm_put() would be a notification that it is not going to use the channel in the near future. E.g. for audio DMA the audio driver could call dmaengine_pm_get() when the PCM device is opened and dmaengine_pm_put() when it is closed. Whereas issue_pending is called when the audio is started. - Lars