Received: by 10.223.185.116 with SMTP id b49csp172333wrg; Tue, 13 Feb 2018 19:08:28 -0800 (PST) X-Google-Smtp-Source: AH8x224bo8P5KPxlYPUeWGq4HSoZf5qg8q+cC6jsSi03MV6qTGQPRcG6kuzTjQeE5/Tn+eXj6kTe X-Received: by 2002:a17:902:96a:: with SMTP id 97-v6mr3059033plm.183.1518577707967; Tue, 13 Feb 2018 19:08:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518577707; cv=none; d=google.com; s=arc-20160816; b=QesfV4KHDqS/KTAm2GMmEhjKnWjOZPAAE1czjrN6BTBWo/wylW3HAvOZEFGLkDzL/k d//GD1Tmwzsd1zPZGUEbHYzS1xcaIxkxAF9Tb8FpTdEM8z+Ng7XT73KeE1yqZc2TreLj uvJXFgjt4FrdtY371bCSRK902Jgnqm78MRAe5YcHPfLkGs/FaQvSNqWRSq4yevgAs4va 2pX7wBQpt12F6InZ+54Q6KIEsDBfGaPNi1VY6Sq0jblwXKnloKS6rO5w/C82YXh17A58 QX/5L/svSn1wJboWfSwe94og3nGV4OWpD0kz0fQI04Qr+inqO5awpPVYsJi6vxYONAjP W6bQ== 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=51THLspHM3nV1ghRTyiuxqh15fHInWU+c8bjkF0WZaw=; b=u18gDMUmrkG22JtYVl4TWEiRUmX4VHft9yPp4TSAg40NY3e1LJGLiCPnO3jQ81Q07I BBffI8Nh6Zw86Ec+h2BbllzokcXs100cKuYe1TIcft26GGd8r8tSqCBUDd6zXctSAEYo 8DPUtDk5Q7S5jEdxKOVnk6fSW2bfkIsthJ1JElJ2mniLaEWrgM3h6CzT7aJ+dlWXLPW+ LuvBR+CMIvzyBIIjodN8Av3N0dFg/UozmEz/UjYpsgxD46tXB/ZYRVu+O0EDwQ6W8Ga1 LL1oU0jtiA/xENDiSHrZO6Ap59jfkZg9Vh1vFqinABywGbMTZlhVaOUD8EHe1JLiG/e+ sfiA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=NNJQhlJV; 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=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u23-v6si802308plk.516.2018.02.13.19.08.12; Tue, 13 Feb 2018 19:08:27 -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=@chromium.org header.s=google header.b=NNJQhlJV; 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=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966663AbeBNDHd (ORCPT + 99 others); Tue, 13 Feb 2018 22:07:33 -0500 Received: from mail-vk0-f48.google.com ([209.85.213.48]:40664 "EHLO mail-vk0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S966573AbeBNDHb (ORCPT ); Tue, 13 Feb 2018 22:07:31 -0500 Received: by mail-vk0-f48.google.com with SMTP id o17so4784936vke.7 for ; Tue, 13 Feb 2018 19:07:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=51THLspHM3nV1ghRTyiuxqh15fHInWU+c8bjkF0WZaw=; b=NNJQhlJV9u+g3e3RaufsbbplRbAa6gIgIgECKjZRyvzGvbKl9whDjPspWFSEZgL87b NsY35B7K54uaS6grySXd246mFJSZC+BRvbsCF2tC16U8oxxYIwixPvqDF6ipRoCQcr6A /tApk0l/vEXf0WAEyxYhGAWvs8/c0GnHvoWhg= 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=51THLspHM3nV1ghRTyiuxqh15fHInWU+c8bjkF0WZaw=; b=VEEJ4atz/y2VYuaMiLhupQJ6EEmev9YR4nACcUCDZcVWDoFNrDfsjb2VRQZzCDjU0D NWLTxOfAEpvpqpCMEflilzwXwIi6P+2eXUba/Mtpj/aBFDTqzjxqlyGRBmMKlpm7Jnhk vF7DEZ9KlOKRT/0vG2w/yDMK2rgQj2AbqDIb9HR+aGWLguMw7Pe+3XC2zTopw7ZA+G2G QXga/G0b2QYmOEJqU39H7UO5gg3ojkALFzgrvKvNLqI349T1YmQVq+Sb9VxTRHVWVrJ1 3UN94MWUIPIduJQ+KzRJJjUNCf1YsiyuoCB83GNxT3dQ7B7qm1/dRPGi5EjDwbtqefbe eYlA== X-Gm-Message-State: APf1xPBkhDedjzzOxVG1pi/+O/PBTpTIibVrdzjJy0tJMufDCPcLngr8 4WBxq1Hm3X6IGvmAqjYZq13NOelYRps= X-Received: by 10.31.232.133 with SMTP id f127mr3175029vkh.159.1518577650841; Tue, 13 Feb 2018 19:07:30 -0800 (PST) Received: from mail-vk0-f42.google.com (mail-vk0-f42.google.com. [209.85.213.42]) by smtp.gmail.com with ESMTPSA id c66sm4231127vkd.11.2018.02.13.19.07.30 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 13 Feb 2018 19:07:30 -0800 (PST) Received: by mail-vk0-f42.google.com with SMTP id p74so5897243vkd.1 for ; Tue, 13 Feb 2018 19:07:30 -0800 (PST) X-Received: by 10.31.172.22 with SMTP id v22mr3352378vke.54.1518577288667; Tue, 13 Feb 2018 19:01:28 -0800 (PST) MIME-Version: 1.0 Received: by 10.176.0.68 with HTTP; Tue, 13 Feb 2018 19:01:08 -0800 (PST) In-Reply-To: References: <1517999482-17317-1-git-send-email-vivek.gautam@codeaurora.org> <1517999482-17317-7-git-send-email-vivek.gautam@codeaurora.org> From: Tomasz Figa Date: Wed, 14 Feb 2018 12:01:08 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v7 6/6] drm/msm: iommu: Replace runtime calls with runtime suppliers To: Rob Clark Cc: Vivek Gautam , "list@263.net:IOMMU DRIVERS , Joerg Roedel ," , Rob Herring , Mark Rutland , "Rafael J. Wysocki" , Robin Murphy , Will Deacon , "list@263.net:IOMMU DRIVERS , Joerg Roedel ," , devicetree@vger.kernel.org, Linux Kernel Mailing List , linux-pm@vger.kernel.org, dri-devel , freedreno , David Airlie , Greg KH , Stephen Boyd , linux-arm-msm 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 Wed, Feb 14, 2018 at 11:13 AM, Rob Clark wrote: > On Tue, Feb 13, 2018 at 8:59 PM, Tomasz Figa wrote: >> On Wed, Feb 14, 2018 at 3:03 AM, Rob Clark wrote: >>> On Tue, Feb 13, 2018 at 4:10 AM, Tomasz Figa wrote: >>>> Hi Vivek, >>>> >>>> Thanks for the patch. Please see my comments inline. >>>> >>>> On Wed, Feb 7, 2018 at 7:31 PM, Vivek Gautam >>>> wrote: >>>>> While handling the concerned iommu, there should not be a >>>>> need to power control the drm devices from iommu interface. >>>>> If these drm devices need to be powered around this time, >>>>> the respective drivers should take care of this. >>>>> >>>>> Replace the pm_runtime_get/put_sync() with >>>>> pm_runtime_get/put_suppliers() calls, to power-up >>>>> the connected iommu through the device link interface. >>>>> In case the device link is not setup these get/put_suppliers() >>>>> calls will be a no-op, and the iommu driver should take care of >>>>> powering on its devices accordingly. >>>>> >>>>> Signed-off-by: Vivek Gautam >>>>> --- >>>>> drivers/gpu/drm/msm/msm_iommu.c | 16 ++++++++-------- >>>>> 1 file changed, 8 insertions(+), 8 deletions(-) >>>>> >>>>> diff --git a/drivers/gpu/drm/msm/msm_iommu.c b/drivers/gpu/drm/msm/msm_iommu.c >>>>> index b23d33622f37..1ab629bbee69 100644 >>>>> --- a/drivers/gpu/drm/msm/msm_iommu.c >>>>> +++ b/drivers/gpu/drm/msm/msm_iommu.c >>>>> @@ -40,9 +40,9 @@ static int msm_iommu_attach(struct msm_mmu *mmu, const char * const *names, >>>>> struct msm_iommu *iommu = to_msm_iommu(mmu); >>>>> int ret; >>>>> >>>>> - pm_runtime_get_sync(mmu->dev); >>>>> + pm_runtime_get_suppliers(mmu->dev); >>>>> ret = iommu_attach_device(iommu->domain, mmu->dev); >>>>> - pm_runtime_put_sync(mmu->dev); >>>>> + pm_runtime_put_suppliers(mmu->dev); >>>> >>>> For me, it looks like a wrong place to handle runtime PM of IOMMU >>>> here. iommu_attach_device() calls into IOMMU driver's attach_device() >>>> callback and that's where necessary runtime PM gets should happen, if >>>> any. In other words, driver A (MSM DRM driver) shouldn't be dealing >>>> with power state of device controlled by driver B (ARM SMMU). >>> >>> Note that we end up having to do the same, because of iommu_unmap() >>> while DRM driver is powered off.. it might be cleaner if it was all >>> self contained in the iommu driver, but that would make it so other >>> drivers couldn't call iommu_unmap() from an irq handler, which is >>> apparently something that some of them want to do.. >> >> I'd assume that runtime PM status is already guaranteed to be active >> when the IRQ handler is running, by some other means (e.g. >> pm_runtime_get_sync() called earlier, when queuing some work to the >> hardware). Otherwise, I'm not sure how a powered down device could >> trigger an IRQ. >> >> So, if the master device power is already on, suppliers should be >> powered on as well, thanks to device links. >> > > umm, that is kindof the inverse of the problem.. the problem is > things like gpu driver (and v4l2 drivers that import dma-buf's, > afaict).. they will potentially call iommu->unmap() when device is not > active (due to userspace or things beyond the control of the driver).. > so *they* would want iommu to do pm get/put calls. Which is fine and which is actually already done by one of the patches in this series, not for map/unmap, but probe, add_device, remove_device. Having parts of the API doing it inside the callback and other parts outside sounds at least inconsistent. > But other drivers > trying to unmap from irq ctx would not. Which is the contradictory > requirement that lead to the idea of iommu user powering up iommu for > unmap. Sorry, maybe I wasn't clear. My last message was supposed to show that it's not contradictory at all, because "other drivers trying to unmap from irq ctx" would already have called pm_runtime_get_*() earlier from a non-irq ctx, which would have also done the same on all the linked suppliers, including the IOMMU. The ultimate result would be that the map/unmap() of the IOMMU driver calling pm_runtime_get_sync() would do nothing besides incrementing the reference count. > > There has already been some discussion about this on various earlier > permutations of this patchset. I think we have exhausted all other > options. I guess I should have read those. Let me do that now. Best regards, Tomasz