Received: by 10.223.164.202 with SMTP id h10csp3486310wrb; Tue, 28 Nov 2017 12:06:04 -0800 (PST) X-Google-Smtp-Source: AGs4zMZmkM3FJjdH9yxVLOd124VtSB5JT+/4FcYiVklSUqWfutZZ1OL/8xtJOaEIychO+U/2FVsj X-Received: by 10.84.133.162 with SMTP id f31mr356979plf.304.1511899563892; Tue, 28 Nov 2017 12:06:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511899563; cv=none; d=google.com; s=arc-20160816; b=i1OULZG69wInIRiU/7rk7Sx909469GNRT3R4amaT0XTvtnZkCaIPWbpANPPk9soea3 pyA36kYe2PEaGlEdHPbudA3O9BsJW1U3n3GLCO/0XnYu2I17xcBWYop4qvLoK2BekaxF lg7MIP6VC4GqlpA5LuYudu42zQkhDdYlXQEH7OCsz4Of0TaW6qd7ktQTTf4KB5/zZC/y DqElTQRq0GDTQbkhdIxYGunHOutG1bRtIx7QFrHV8wY4qM31K1i+z+keAzWn9e7JBkmL 3dNDdGFyhy2NlrG9XVw10hFX0Q8YHUTduRdUVmThe9HVkTFwr9tQykga4dKHtMM8wNeX cagQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=1bTBHhLVcLC50QpO4Z2oQc84IghwX0ft47lvldB30ew=; b=FemHPifZSGpOBxwCM89288x8jL+tlGBR6ngJBldcci9223ogp2LkyHYRWCSlhr0yjb G700+SlIw8bKCHUZ9EFAX1KfNbje69QBJEiwQLWkO+7O7zf+VbZqxySvwd266KENoqGU 9fh1NQvM+I4PfNROWLXhSnv4/4XRclY3+NJfYEgpg6FGQPBrVvcBrLrehzT+GoLArivG swvxwa+JgIHCPCPhFjOJj/lcf5ePPTeR7rHI5T73fWPoHXBRRhwE+y18XG65XNcKQ3sX a/s0h5ouehZ62lf04IoyBTJgX/YADcGbCZAhmAmWEVvGNj915R2x8pJSeDDmRqupVqQD txLw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=jLLpPSUC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v3si25119325pgq.731.2017.11.28.12.05.53; Tue, 28 Nov 2017 12:06:03 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=jLLpPSUC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752756AbdK1UFS (ORCPT + 70 others); Tue, 28 Nov 2017 15:05:18 -0500 Received: from mail-it0-f52.google.com ([209.85.214.52]:35705 "EHLO mail-it0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751648AbdK1UFP (ORCPT ); Tue, 28 Nov 2017 15:05:15 -0500 Received: by mail-it0-f52.google.com with SMTP id f143so1258037itb.0; Tue, 28 Nov 2017 12:05:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=1bTBHhLVcLC50QpO4Z2oQc84IghwX0ft47lvldB30ew=; b=jLLpPSUCoxG9Cwv399kqEj9zMngzq97RaDIxxWzof0JSH2uG2Kzc6UNCJRM1GgYYuN x47arsmKawGt2emkB81O+ZVjpyxiMAC1OawRBHsU/iwhwCfsFJ4MzJpGkpgmP3tPGgl3 n3b0Dyqy3/L9PVhyKAy2zevZSJ0qjdS3IQU2DFEse0v+A8w0ZUBCxtHPD1VDGXeSov2I WQCqznJPOwmlriTas/gK1LRpjBXyOTkMLy2P84hIDpd6b9r7wV6XDqaW+lqkwFVM6NNs WivEOnYKM2FqdqQnNImaULwbc0gXY/8Ymnqexle6kFUItgkwJtwuitOOvKr9mUmUb0cU 2ziw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=1bTBHhLVcLC50QpO4Z2oQc84IghwX0ft47lvldB30ew=; b=Dtr0wNx2Ybmd/3z7FmwG7ko6DHSi4NrrZklUqoQP32pDoTLn49HE5B6+w322BUF/vq lcUsSptlp7sXGNZ8cbpK0q0pOaYlrsAXQp+mOLkn9Mko57nKfRCcQXmmW9anL0cVU66J zJc8BZG43IOqjNITYjFtBWYEfukBoo6MkoCxjW/54V+wyDbPe/AKdXPju8m3c3wjM+e7 Wg42E6nVaxepJzAz/deJ8BGZwXtc2pqUuFT083b7F0UnMa+1u5xyXC1VJK2IWIZCnbUX s9hMPEqFUN9ryySu62m5HWko+nHRsbAus3AeXKyQDlBvGfcYN2MZXXb2Hpcw1MYszgVA To/w== X-Gm-Message-State: AJaThX40SVyGEpaRgFIHYu64KoH2ttQzZdPv/JTGWonOK7kK+dcTYg8g +/vu9GoCHsNFXoH3TkzQ3NdkHjaIbqPmiPOdAOE= X-Received: by 10.36.224.201 with SMTP id c192mr4103640ith.94.1511899514791; Tue, 28 Nov 2017 12:05:14 -0800 (PST) MIME-Version: 1.0 Received: by 10.2.160.135 with HTTP; Tue, 28 Nov 2017 12:05:14 -0800 (PST) In-Reply-To: <3a2f74e9-90cf-d843-d801-15eb614d7abe@codeaurora.org> References: <1499333825-7658-1-git-send-email-vivek.gautam@codeaurora.org> <1499333825-7658-4-git-send-email-vivek.gautam@codeaurora.org> <20170712225459.GZ22780@codeaurora.org> <5ee0bacd-e557-a6c4-a897-844fb12ea6ae@codeaurora.org> <4dbc938c-ac88-9bd4-cf00-458008ae24c1@codeaurora.org> <20171127222238.GF18379@codeaurora.org> <3a2f74e9-90cf-d843-d801-15eb614d7abe@codeaurora.org> From: Rob Clark Date: Tue, 28 Nov 2017 15:05:14 -0500 Message-ID: Subject: Re: [PATCH V4 3/6] iommu/arm-smmu: Invoke pm_runtime during probe, add/remove device To: Vivek Gautam Cc: Stephen Boyd , Robin Murphy , Will Deacon , "Rafael J. Wysocki" , Sricharan R , Joerg Roedel , Rob Herring , Mark Rutland , Marek Szyprowski , "iommu@lists.linux-foundation.org" , "devicetree@vger.kernel.org" , Linux Kernel Mailing List , linux-clk , linux-arm-msm , Stanimir Varbanov , Archit Taneja , "linux-arm-kernel@lists.infradead.org" Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Nov 28, 2017 at 8:43 AM, Vivek Gautam wrote: > > > On 11/28/2017 05:13 AM, Rob Clark wrote: >> >> On Mon, Nov 27, 2017 at 5:22 PM, Stephen Boyd >> wrote: >>> >>> On 11/15, Vivek Gautam wrote: >>>> >>>> Hi, >>>> >>>> >>>> On Mon, Aug 7, 2017 at 5:59 PM, Rob Clark wrote: >>>>> >>>>> On Mon, Aug 7, 2017 at 4:27 AM, Vivek Gautam >>>>> wrote: >>>>>> >>>>>> On Thu, Jul 13, 2017 at 5:20 PM, Rob Clark >>>>>> wrote: >>>>>>> >>>>>>> On Thu, Jul 13, 2017 at 1:35 AM, Sricharan >>>>>>> R wrote: >>>>>>>> >>>>>>>> Hi Vivek, >>>>>>>> >>>>>>>> On 7/13/2017 10:43 AM, Vivek Gautam wrote: >>>>>>>>> >>>>>>>>> Hi Stephen, >>>>>>>>> >>>>>>>>> >>>>>>>>> On 07/13/2017 04:24 AM, Stephen Boyd wrote: >>>>>>>>>> >>>>>>>>>> On 07/06, Vivek Gautam wrote: >>>>>>>>>>> >>>>>>>>>>> @@ -1231,12 +1237,18 @@ static int arm_smmu_map(struct >>>>>>>>>>> iommu_domain *domain, unsigned long iova, >>>>>>>>>>> static size_t arm_smmu_unmap(struct iommu_domain *domain, >>>>>>>>>>> unsigned long iova, >>>>>>>>>>> size_t size) >>>>>>>>>>> { >>>>>>>>>>> - struct io_pgtable_ops *ops = >>>>>>>>>>> to_smmu_domain(domain)->pgtbl_ops; >>>>>>>>>>> + struct arm_smmu_domain *smmu_domain = >>>>>>>>>>> to_smmu_domain(domain); >>>>>>>>>>> + struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops; >>>>>>>>>>> + size_t ret; >>>>>>>>>>> if (!ops) >>>>>>>>>>> return 0; >>>>>>>>>>> - return ops->unmap(ops, iova, size); >>>>>>>>>>> + pm_runtime_get_sync(smmu_domain->smmu->dev); >>>>>>>>>> >>>>>>>>>> Can these map/unmap ops be called from an atomic context? I seem >>>>>>>>>> to recall that being a problem before. >>>>>>>>> >>>>>>>>> That's something which was dropped in the following patch merged in >>>>>>>>> master: >>>>>>>>> 523d7423e21b iommu/arm-smmu: Remove io-pgtable spinlock >>>>>>>>> >>>>>>>>> Looks like we don't need locks here anymore? >>>>>>>> >>>>>>>> Apart from the locking, wonder why a explicit pm_runtime is needed >>>>>>>> from unmap. Somehow looks like some path in the master using that >>>>>>>> should have enabled the pm ? >>>>>>>> >>>>>>> Yes, there are a bunch of scenarios where unmap can happen with >>>>>>> disabled master (but not in atomic context). >>>>>> >>>>>> I would like to understand whether there is a situation where an unmap >>>>>> is >>>>>> called in atomic context without an enabled master? >>>>>> >>>>>> Let's say we have the case where all the unmap calls in atomic context >>>>>> happen >>>>>> only from the master's context (in which case the device link should >>>>>> take care of >>>>>> the pm state of smmu), and the only unmap that happen in non-atomic >>>>>> context >>>>>> is the one with master disabled. In such a case doesn it make sense to >>>>>> distinguish >>>>>> the atomic/non-atomic context and add pm_runtime_get_sync()/put_sync() >>>>>> only >>>>>> for the non-atomic context since that would be the one with master >>>>>> disabled. >>>>>> >>>>> At least drm/msm needs to hold obj->lock (a mutex) in unmap, so it >>>>> won't unmap anything in atomic ctx (but it can unmap w/ master >>>>> disabled). I can't really comment about other non-gpu drivers. It >>>>> seems like a reasonable constraint that either master is enabled or >>>>> not in atomic ctx. >>>>> >>>>> Currently we actually wrap unmap w/ pm_runtime_get/put_sync(), but I'd >>>>> like to drop that to avoid powering up the gpu. >>>> >>>> Since the deferring the TLB maintenance doesn't look like the best >>>> approach [1], >>>> how about if we try to power-up only the smmu from different client >>>> devices such as, >>>> GPU in the unmap path. Then we won't need to add pm_runtime_get/put() >>>> calls in >>>> arm_smmu_unmap(). >>>> >>>> The client device can use something like - pm_runtime_get_supplier() >>>> since >>>> we already have the device link in place with this patch series. This >>>> should >>>> power-on the supplier (which is smmu) without turning on the consumer >>>> (such as GPU). >>>> >>>> pm_runtime_get_supplier() however is not exported at this moment. >>>> Will it be useful to export this API and use it in the drivers. >>>> >>> I'm not sure pm_runtime_get_supplier() is correct either. That >>> feels like we're relying on the GPU driver knowing the internal >>> details of how the device links are configured. >>> >> what does pm_runtime_get_supplier() do if IOMMU driver hasn't setup >> device-link? > > > It will be a no-op. > >> If it is a no-op, then I guess the GPU driver calling >> pm_runtime_get_supplier() seems reasonable, and less annoying than >> having special cases in pm_resume path.. I don't feel too bad about >> having "just in case" get/put_supplier() calls in the unmap path. >> >> Also, presumably we still want to avoid powering up GPU even if we >> short circuit the firmware loading and rest of "booting up the GPU".. >> since presumably the GPU draws somewhat more power than the IOMMU.. >> having the pm_resume/suspend path know about the diff between waking >> up / suspending the iommu and itself doesn't really feel less-bad than >> just doing "just in case" get/put_supplier() calls. > > > If it sounds okay, then i can send a patch that exports the > pm_runtime_get/put_suppliers() APIs. > sounds good to me BR, -R > > Best regards > Vivek > >> BR, >> -R >> >>> Is there some way to have the GPU driver know in its runtime PM >>> resume hook that it doesn't need to be powered on because it >>> isn't actively drawing anything or processing commands? I'm >>> thinking of the code calling pm_runtime_get() as proposed around >>> the IOMMU unmap path in the GPU driver and then having the >>> runtime PM resume hook in the GPU driver return some special >>> value to indicate that it didn't really resume because it didn't >>> need to and to treat the device as runtime suspended but not >>> return an error. Then the runtime PM core can keep track of that >>> and try to power the GPU on again when another pm_runtime_get() >>> is called on the GPU device. >>> >>> This keeps the consumer API the same, always pm_runtime_get(), >>> but leaves the device driver logic of what to do when the GPU >>> doesn't need to power on to the runtime PM hook where the driver >>> has all the information. >>> >>> -- >>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, >>> a Linux Foundation Collaborative Project >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" >> in >> the body of a message tomajordomo@vger.kernel.org >> More majordomo info athttp://vger.kernel.org/majordomo-info.html > > > -- > The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, > > a Linux Foundation Collaborative Project > From 1585317633651000568@xxx Tue Nov 28 13:45:10 +0000 2017 X-GM-THRID: 1572165554236663762 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread