Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp1157739pxb; Fri, 6 Nov 2020 02:28:15 -0800 (PST) X-Google-Smtp-Source: ABdhPJys4qz9d7XnS5LfNuamTuYoIQWAfoH1vmiud5ivjDPlXlFxmxCT239GEPjRW/VpskcbHspu X-Received: by 2002:a17:906:2a09:: with SMTP id j9mr1280663eje.355.1604658495129; Fri, 06 Nov 2020 02:28:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604658495; cv=none; d=google.com; s=arc-20160816; b=te0ClXaVFUOHMayS+qn2zrzTULthUNnrckUko18I36EYhoQ0unNX5sY8zKhA1uBbP2 9X830pxgGqh1oircw/yUGYERzKvKOTfXicCWg/WxsulPlwLoKqTaHJ0dccysh5DVx7XB Hb0woUMfub4SPqYgr2Z5/sUGF7cBtvoJSg/InH0aJmgzpAClupo618B5pqsasv/Nibu2 Qqc/4K4Seuk4+oFqExooP+0RKO9013SyNGhkOuzoQJKj6mQyPze7+xGSQT+FevbbrFsw YsTPfEDpFarJFHZfYu99DUC6JQ3Zh5aFJgySuYIQ0vWsqAvDOXuiVyu0Ct8fjHDrgoWD k07A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=HSC97YNOlN2kUh5wdqOB/lybRqmpts3XhUMXVzBRpuU=; b=cSbL0fm80imu6MHv1ktf0xamOqlqqitMzge8vEqC4z0c/pX5+ZFQRxUeL6nrV/n3Di VPHIRZ6W6uhYidvDcoiRh4P8RnW9lcuH15p3FpSWHHIvIDvu+ttKivIjqQPhyiC+ED21 H8LVR/mg92ui8J71cYoj+n96G2d/BQMxm9lLtJM9QaLKNwS12ziQ3xkGrRpReRyOcPzj idzxVd+U69OlTBD76G50BO4ITMG35DxpGdvS59nULVbtW+ibaibwdvSujahmZoG2B7i7 8aqgBJQRk0MT2Q2YVfHEx/UJflUqP2/5Mycc/hYs2iydppefK0iJsl8rB4EgpmLGr668 r5WQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=WVh1sV7y; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d22si508557ejr.471.2020.11.06.02.27.49; Fri, 06 Nov 2020 02:28:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=WVh1sV7y; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727100AbgKFK0H (ORCPT + 99 others); Fri, 6 Nov 2020 05:26:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33810 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727105AbgKFK0F (ORCPT ); Fri, 6 Nov 2020 05:26:05 -0500 Received: from mail-vk1-xa42.google.com (mail-vk1-xa42.google.com [IPv6:2607:f8b0:4864:20::a42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 68987C0613D3 for ; Fri, 6 Nov 2020 02:26:04 -0800 (PST) Received: by mail-vk1-xa42.google.com with SMTP id w123so135200vka.4 for ; Fri, 06 Nov 2020 02:26:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=HSC97YNOlN2kUh5wdqOB/lybRqmpts3XhUMXVzBRpuU=; b=WVh1sV7yTyGnxFKwH/kCFJLI0h+xKJLCEKlfhXMjzg8UywCK08uPFzALrz6uq9v7rg x+XpUNuSHdsZJCwYaK4K1KknKsNCC05506QxKcbMSr6MfzBOOjqvzzdOGZWg9fTZKPK0 hBkFJs3I6pjmGsbpA1/V5mShpiM1BPXboGdbn//dpAMyFEWLt2WkYa6ErIHd0X+UGA1e pGPA/JhWGaCiamS3+eVyGQUuVYA38sq3AYFWm0gyO5qxzhD/jzFAhBhmuOW5SiLEmWI0 vXmP8C/EAzW9gR8Y6mJx/r+GKeuTiIdQkWKKpAVFiXt0igDVfmI0iRBZlozAcFQPJT4d 2gNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=HSC97YNOlN2kUh5wdqOB/lybRqmpts3XhUMXVzBRpuU=; b=MffPxB3cvBukgBuGtk6Jyqp+tgSclfDcd9pkiE/hXU+Qk413dvaMLnNF/WGX7Tj5LQ X4pOqTfngL1Kx6a6dcPH+AwADODGmmor+93Esg9Dds0v2WqnLa+4RXIpRle3jwE9vqIj xZRSo09vKD7LGNLaTy8XpAmKbHtfJHbsD7OtiIf/VD9Re6SD+WaKUB9TYwoglFHrRoTx ML/2dVAmB612JOiubZX7WAf2IN2nKZ3ZQgYYySeWh4a0Hv0oQOzjPV/ZxWxa39ht/Dks h8l9KtkOtO3GT9xDRrynY/0CpW1iMvbAFygnMUxtphCVofmiLt4Y/X/2B8JpOTUKh2rW axvQ== X-Gm-Message-State: AOAM532OUMy1/dhLMVgfZiQPq/3EvdtD6Tvk4xg4AcfPan3cQGUPMYrJ Av6oy08mXI4LTHbsOqXpcwTgR8S+uuvvdeB0tWYudKN6lno= X-Received: by 2002:a05:6122:10eb:: with SMTP id m11mr518387vko.8.1604658363558; Fri, 06 Nov 2020 02:26:03 -0800 (PST) MIME-Version: 1.0 References: <684ff01900180c0a40ec307dacc673b24eab593b.1604643714.git.viresh.kumar@linaro.org> <1012a98950355bd5a52424668050a17c3430cbe0.1604643714.git.viresh.kumar@linaro.org> In-Reply-To: <1012a98950355bd5a52424668050a17c3430cbe0.1604643714.git.viresh.kumar@linaro.org> From: Ulf Hansson Date: Fri, 6 Nov 2020 11:25:27 +0100 Message-ID: Subject: Re: [PATCH 2/2] opp: Don't create an OPP table from dev_pm_opp_get_opp_table() To: Viresh Kumar Cc: "Rafael J. Wysocki" , Kevin Hilman , Len Brown , Pavel Machek , Greg Kroah-Hartman , Viresh Kumar , Nishanth Menon , Stephen Boyd , Linux PM , Vincent Guittot , Dmitry Osipenko , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 6 Nov 2020 at 07:25, Viresh Kumar wrote: > > It has been found that some users (like cpufreq-dt and others on LKML) > have abused the helper dev_pm_opp_get_opp_table() to create the OPP > table instead of just finding it, which is the wrong thing to do. This > routine was meant for OPP core's internal working and exposed the whole > functionality by mistake. > > Change the scope of dev_pm_opp_get_opp_table() to only finding the > table. The internal helpers _opp_get_opp_table*() are thus renamed to > _add_opp_table*(), dev_pm_opp_get_opp_table_indexed() is removed (as we > don't need the index field for finding the OPP table) and so the only > user, genpd, is updated. > > Note that the prototype of _add_opp_table() was already left in opp.h by > mistake when it was removed earlier and so we weren't required to add it > now. > > Signed-off-by: Viresh Kumar Acked-by: Ulf Hansson Kind regards Uffe > --- > drivers/base/power/domain.c | 2 +- > drivers/opp/core.c | 27 +++++++++++++-------------- > drivers/opp/of.c | 4 ++-- > drivers/opp/opp.h | 1 + > include/linux/pm_opp.h | 1 - > 5 files changed, 17 insertions(+), 18 deletions(-) > > diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c > index 743268996336..92b750b865d5 100644 > --- a/drivers/base/power/domain.c > +++ b/drivers/base/power/domain.c > @@ -2249,7 +2249,7 @@ int of_genpd_add_provider_onecell(struct device_node *np, > * Save table for faster processing while setting > * performance state. > */ > - genpd->opp_table = dev_pm_opp_get_opp_table_indexed(&genpd->dev, i); > + genpd->opp_table = dev_pm_opp_get_opp_table(&genpd->dev); > WARN_ON(IS_ERR(genpd->opp_table)); > } > > diff --git a/drivers/opp/core.c b/drivers/opp/core.c > index 9915e8487f0b..b24f685823ae 100644 > --- a/drivers/opp/core.c > +++ b/drivers/opp/core.c > @@ -1138,7 +1138,7 @@ void _get_opp_table_kref(struct opp_table *opp_table) > * uses the opp_tables_busy flag to indicate if another creator is in the middle > * of adding an OPP table and others should wait for it to finish. > */ > -static struct opp_table *_opp_get_opp_table(struct device *dev, int index) > +struct opp_table *_add_opp_table_indexed(struct device *dev, int index) > { > struct opp_table *opp_table; > > @@ -1188,17 +1188,16 @@ static struct opp_table *_opp_get_opp_table(struct device *dev, int index) > return opp_table; > } > > -struct opp_table *dev_pm_opp_get_opp_table(struct device *dev) > +struct opp_table *_add_opp_table(struct device *dev) > { > - return _opp_get_opp_table(dev, 0); > + return _add_opp_table_indexed(dev, 0); > } > -EXPORT_SYMBOL_GPL(dev_pm_opp_get_opp_table); > > -struct opp_table *dev_pm_opp_get_opp_table_indexed(struct device *dev, > - int index) > +struct opp_table *dev_pm_opp_get_opp_table(struct device *dev) > { > - return _opp_get_opp_table(dev, index); > + return _find_opp_table(dev); > } > +EXPORT_SYMBOL_GPL(dev_pm_opp_get_opp_table); > > static void _opp_table_kref_release(struct kref *kref) > { > @@ -1627,7 +1626,7 @@ struct opp_table *dev_pm_opp_set_supported_hw(struct device *dev, > { > struct opp_table *opp_table; > > - opp_table = dev_pm_opp_get_opp_table(dev); > + opp_table = _add_opp_table(dev); > if (IS_ERR(opp_table)) > return opp_table; > > @@ -1686,7 +1685,7 @@ struct opp_table *dev_pm_opp_set_prop_name(struct device *dev, const char *name) > { > struct opp_table *opp_table; > > - opp_table = dev_pm_opp_get_opp_table(dev); > + opp_table = _add_opp_table(dev); > if (IS_ERR(opp_table)) > return opp_table; > > @@ -1779,7 +1778,7 @@ struct opp_table *dev_pm_opp_set_regulators(struct device *dev, > struct regulator *reg; > int ret, i; > > - opp_table = dev_pm_opp_get_opp_table(dev); > + opp_table = _add_opp_table(dev); > if (IS_ERR(opp_table)) > return opp_table; > > @@ -1887,7 +1886,7 @@ struct opp_table *dev_pm_opp_set_clkname(struct device *dev, const char *name) > struct opp_table *opp_table; > int ret; > > - opp_table = dev_pm_opp_get_opp_table(dev); > + opp_table = _add_opp_table(dev); > if (IS_ERR(opp_table)) > return opp_table; > > @@ -1955,7 +1954,7 @@ struct opp_table *dev_pm_opp_register_set_opp_helper(struct device *dev, > if (!set_opp) > return ERR_PTR(-EINVAL); > > - opp_table = dev_pm_opp_get_opp_table(dev); > + opp_table = _add_opp_table(dev); > if (IS_ERR(opp_table)) > return opp_table; > > @@ -2039,7 +2038,7 @@ struct opp_table *dev_pm_opp_attach_genpd(struct device *dev, > int index = 0, ret = -EINVAL; > const char **name = names; > > - opp_table = dev_pm_opp_get_opp_table(dev); > + opp_table = _add_opp_table(dev); > if (IS_ERR(opp_table)) > return opp_table; > > @@ -2204,7 +2203,7 @@ int dev_pm_opp_add(struct device *dev, unsigned long freq, unsigned long u_volt) > struct opp_table *opp_table; > int ret; > > - opp_table = dev_pm_opp_get_opp_table(dev); > + opp_table = _add_opp_table(dev); > if (IS_ERR(opp_table)) > return PTR_ERR(opp_table); > > diff --git a/drivers/opp/of.c b/drivers/opp/of.c > index 9faeb83e4b32..c718092757d9 100644 > --- a/drivers/opp/of.c > +++ b/drivers/opp/of.c > @@ -974,7 +974,7 @@ int dev_pm_opp_of_add_table(struct device *dev) > struct opp_table *opp_table; > int ret; > > - opp_table = dev_pm_opp_get_opp_table_indexed(dev, 0); > + opp_table = _add_opp_table_indexed(dev, 0); > if (IS_ERR(opp_table)) > return PTR_ERR(opp_table); > > @@ -1029,7 +1029,7 @@ int dev_pm_opp_of_add_table_indexed(struct device *dev, int index) > index = 0; > } > > - opp_table = dev_pm_opp_get_opp_table_indexed(dev, index); > + opp_table = _add_opp_table_indexed(dev, index); > if (IS_ERR(opp_table)) > return PTR_ERR(opp_table); > > diff --git a/drivers/opp/opp.h b/drivers/opp/opp.h > index ebd930e0b3ca..4ced7ffa8158 100644 > --- a/drivers/opp/opp.h > +++ b/drivers/opp/opp.h > @@ -224,6 +224,7 @@ int _opp_add(struct device *dev, struct dev_pm_opp *new_opp, struct opp_table *o > int _opp_add_v1(struct opp_table *opp_table, struct device *dev, unsigned long freq, long u_volt, bool dynamic); > void _dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask, int last_cpu); > struct opp_table *_add_opp_table(struct device *dev); > +struct opp_table *_add_opp_table_indexed(struct device *dev, int index); > void _put_opp_list_kref(struct opp_table *opp_table); > > #ifdef CONFIG_OF > diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h > index dbb484524f82..1435c054016a 100644 > --- a/include/linux/pm_opp.h > +++ b/include/linux/pm_opp.h > @@ -90,7 +90,6 @@ struct dev_pm_set_opp_data { > #if defined(CONFIG_PM_OPP) > > struct opp_table *dev_pm_opp_get_opp_table(struct device *dev); > -struct opp_table *dev_pm_opp_get_opp_table_indexed(struct device *dev, int index); > void dev_pm_opp_put_opp_table(struct opp_table *opp_table); > > unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp); > -- > 2.25.0.rc1.19.g042ed3e048af >