Received: by 10.223.185.116 with SMTP id b49csp5956390wrg; Wed, 7 Mar 2018 22:36:40 -0800 (PST) X-Google-Smtp-Source: AG47ELsr5pT/PXl3MhepEeFl3olpEySD629WSLlMgB7ItMkr3K2NbeQ1cfOw5pL5zIJFukhJoM+m X-Received: by 2002:a17:902:66e6:: with SMTP id e93-v6mr23081535plk.312.1520491000893; Wed, 07 Mar 2018 22:36:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520491000; cv=none; d=google.com; s=arc-20160816; b=YDoVD4OLd0r4xI7ga308RHrTa1zVmZCx+6rPxZfQLB/GnHZ5WZ3c3LgKzGR26YagSz Cinz7GSnw2WAFXv5OO2bWn6UNEZjbOzTXqLCf0n2dzIaSjLRCVvAjmi3y8rX1p0zIfoU LCQbCAFaWT64UKztH7tGkdBy1juhre0zbzc69tKdEnNl5N+ZiE9RwAAf2yRy649cxGVz 8JaHWf5A7MjWyF1yncvN1dJ01sx2uHdjIjl0oEb8qRYCqaEtr1r0U0+JK0Be2NFrzEy0 6xTbUCk/NC91hi2krGyve9HwMYGGw2C14r3/hO2csTc0VLOzZtnGRbVsVvE+CMkcGshI KT+g== 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:dmarc-filter:dkim-signature :dkim-signature:arc-authentication-results; bh=Tjq89jDQ7ljw99GUygTfaZvmSZ8hEyBjUPh4pWvNVDs=; b=aoyc5ThYUczb2bD/VpOy3CBls06Xj8Pmc81DLL181TA/BR2RsHZRk1LRSBPKx5/3q6 /ct5HDYlm8KYG57uz81TmbgL+Zgfk5XNg23laTqLIvThp5AIF36lmpzNubrs1WYrRatd 0Bf48+GOvU+ikLQ/YpZptAU2CbAMHkPQTLEJE5A5wrx4r/9ZgHy2CCfwC8UjdVv1prPv NAm4tx+VNODveE6xEUsOylxIbOMj2+nGQ51eNreNpFTkVG4ORS2aloXYhJ1ZuYVjDEOY 0egcooE0k2Aukre4WSARwfl7UVKv9bBfImlU8ygrzs95G59wrns+NoOR9PTi6MKYFuCT HYkg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=QuCT6TL7; dkim=pass header.i=@codeaurora.org header.s=default header.b=QuCT6TL7; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u91-v6si11226072plb.341.2018.03.07.22.36.26; Wed, 07 Mar 2018 22:36:40 -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=@codeaurora.org header.s=default header.b=QuCT6TL7; dkim=pass header.i=@codeaurora.org header.s=default header.b=QuCT6TL7; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965525AbeCHE75 (ORCPT + 99 others); Wed, 7 Mar 2018 23:59:57 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:43192 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965466AbeCHE7u (ORCPT ); Wed, 7 Mar 2018 23:59:50 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 96593607EF; Thu, 8 Mar 2018 04:59:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1520485189; bh=UmVilyRwxeWGdVBnHVZKaQlxdL4oHmfd/U9bv90Nw08=; h=In-Reply-To:References:From:Date:Subject:To:Cc:From; b=QuCT6TL7yl7R85GkHiONFUOaK9xRDo0PFQgunXbpT8IezUtZCQR2WO7ZL8rqdDQMW Dky6eVroF6Wt6BdhsCX+EfKcvED/y9kp2ojTAXKQFykTXOYfwuORQ4Mz+PJvLTTiwj pE4IGEPx9LdRkTGcWybGX0fx8FYdnx38dCVVc2As= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from mail-qk0-f177.google.com (mail-qk0-f177.google.com [209.85.220.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: vivek.gautam@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id D171260618; Thu, 8 Mar 2018 04:59:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1520485189; bh=UmVilyRwxeWGdVBnHVZKaQlxdL4oHmfd/U9bv90Nw08=; h=In-Reply-To:References:From:Date:Subject:To:Cc:From; b=QuCT6TL7yl7R85GkHiONFUOaK9xRDo0PFQgunXbpT8IezUtZCQR2WO7ZL8rqdDQMW Dky6eVroF6Wt6BdhsCX+EfKcvED/y9kp2ojTAXKQFykTXOYfwuORQ4Mz+PJvLTTiwj pE4IGEPx9LdRkTGcWybGX0fx8FYdnx38dCVVc2As= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org D171260618 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=vivek.gautam@codeaurora.org Received: by mail-qk0-f177.google.com with SMTP id z197so5476217qkb.6; Wed, 07 Mar 2018 20:59:48 -0800 (PST) X-Gm-Message-State: AElRT7GwH31A+ZPGXyE+0awl7pTBrbXbQDa9aIZYeSLUjwHecpBHbwmN uz35mCryqlMbfDuS1X83mxDgp+6WbgrUXSaVhg4= X-Received: by 10.55.188.69 with SMTP id m66mr36256826qkf.118.1520485188046; Wed, 07 Mar 2018 20:59:48 -0800 (PST) MIME-Version: 1.0 Received: by 10.200.83.10 with HTTP; Wed, 7 Mar 2018 20:59:47 -0800 (PST) In-Reply-To: References: <20180302101050.6191-1-vivek.gautam@codeaurora.org> <20180302101050.6191-5-vivek.gautam@codeaurora.org> From: Vivek Gautam Date: Thu, 8 Mar 2018 10:29:47 +0530 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v8 4/5] iommu/arm-smmu: Add the device_link between masters and smmu To: Robin Murphy Cc: "list@263.net:IOMMU DRIVERS , Joerg Roedel ," , "robh+dt" , Mark Rutland , "Rafael J. Wysocki" , Will Deacon , Rob Clark , "list@263.net:IOMMU DRIVERS , Joerg Roedel ," , devicetree@vger.kernel.org, open list , Tomasz Figa , jcrouse@codeaurora.org, Stephen Boyd , Sricharan R , Marek Szyprowski , Archit Taneja , 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, Mar 7, 2018 at 6:17 PM, Robin Murphy wrote: > On 02/03/18 10:10, Vivek Gautam wrote: >> >> From: Sricharan R >> >> Finally add the device link between the master device and >> smmu, so that the smmu gets runtime enabled/disabled only when the >> master needs it. This is done from add_device callback which gets >> called once when the master is added to the smmu. >> >> Signed-off-by: Sricharan R >> Signed-off-by: Vivek Gautam >> --- >> drivers/iommu/arm-smmu.c | 21 +++++++++++++++++++++ >> 1 file changed, 21 insertions(+) >> >> diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c >> index 3d6a1875431f..bb1ea82c1003 100644 >> --- a/drivers/iommu/arm-smmu.c >> +++ b/drivers/iommu/arm-smmu.c >> @@ -217,6 +217,9 @@ struct arm_smmu_device { >> /* IOMMU core code handle */ >> struct iommu_device iommu; >> + >> + /* runtime PM link to master */ >> + struct device_link *link; > > > Just the one? > >> }; >> enum arm_smmu_context_fmt { >> @@ -1470,10 +1473,26 @@ static int arm_smmu_add_device(struct device *dev) >> iommu_device_link(&smmu->iommu, dev); >> + /* >> + * Establish the link between smmu and master, so that the >> + * smmu gets runtime enabled/disabled as per the master's >> + * needs. >> + */ >> + smmu->link = device_link_add(dev, smmu->dev, DL_FLAG_PM_RUNTIME); > > > Maybe I've misunderstood how the API works, but AFAICS the second and > subsequent devices are all just going to overwrite (and leak) the link of > the previous one... Sorry, my bad. Will take care of this. regards Vivek > >> + if (!smmu->link) { >> + dev_warn(smmu->dev, "Unable to create device link between >> %s and %s\n", >> + dev_name(smmu->dev), dev_name(dev)); >> + ret = -ENODEV; >> + goto out_unlink; >> + } >> + >> arm_smmu_rpm_put(smmu); >> return 0; >> +out_unlink: >> + iommu_device_unlink(&smmu->iommu, dev); >> + arm_smmu_master_free_smes(fwspec); >> out_rpm_put: >> arm_smmu_rpm_put(smmu); >> out_cfg_free: >> @@ -1496,6 +1515,8 @@ static void arm_smmu_remove_device(struct device >> *dev) >> cfg = fwspec->iommu_priv; >> smmu = cfg->smmu; >> + device_link_del(smmu->link); > > > ...and equivalently you end up with a double-free (or more) here of a link > which may not have belonged to dev anyway. > > Robin. > > >> + >> ret = arm_smmu_rpm_get(smmu); >> if (ret < 0) >> return; >> > -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation