From patchwork Tue Jun 25 11:32:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Lezcano X-Patchwork-Id: 167705 Delivered-To: patch@linaro.org Received: by 2002:a92:4782:0:0:0:0:0 with SMTP id e2csp5431818ilk; Tue, 25 Jun 2019 04:33:03 -0700 (PDT) X-Google-Smtp-Source: APXvYqwlNo7asbEzl5KDHcHB/jUPovqy7G6YYNyrGt6wY6QLiFDYmaIvSCLsZbFigfqM8JzqoAjV X-Received: by 2002:a63:2c43:: with SMTP id s64mr38210097pgs.50.1561462383675; Tue, 25 Jun 2019 04:33:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561462383; cv=none; d=google.com; s=arc-20160816; b=UNvqkzyaLnRPE6FGADNOrMOE/nFmteXe6+OeN4c62nOJCbEK46I5IQsfKTox5EyjxW 1JUpqXbuO9WBPzkbjMsgRpbymcNQwjZPZmam7qf+bhnPyPJNIrfc4aN2q5Z8Gnipt3lj opLmFnY5+ceOmmx3bEudmMImwz1mTR2y538STfQCeUB32afT8NbD5KA4NQBE0tsJdLMb OhOi9twCfOhs+jDEKMlVBqH1wim/lD2PglF3uYzQbzb3b775AKz05sUv5Db3qjpcrkUD W9AL0VbP1ZMFZkn752Y0Y+HWtn2OttbFJ77v9WqMFmgkopVLAniP0znn1TAXxA7AW7zb Uq6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=Jb+mp+rDj9DLSvOVTi217/rhPZn5ckg46P7fvQWw8bI=; b=gfN0VPkayONHtS3i29yH7uw5pjX/DRIDiiwHlkhXdNXUNGGc6tFafjnYiQZx1ZW5RF DMCJmdtUccAJUex66zs5YMOzQ4OSBg9MMnvlCKKQy2KBtgmZgOvrpC7hWsrG9EsLyYE/ No4VgwuxLXzFS+bJwpyRGgcDdOr+bUo2ejuUzi6+1Ju7vOHKu9b0nF661L4B48nYqXhi gT/x9xIHxZJJKyuAp08VidgTqYv3FWp7I+jWBsuVjDZ6wDbkzPkjHIbGYyD4qofMyegw D5h6Oq/eEj8RViQBHMJv4efLkA81mlCRr1S7wZBvDBBNyhpjx7HPvvoQiv8EnVtv19w0 n9gA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=b8O+q8+p; spf=pass (google.com: best guess record for domain of linux-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-pm-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. [209.132.180.67]) by mx.google.com with ESMTP id d36si164513pla.113.2019.06.25.04.33.02; Tue, 25 Jun 2019 04:33:03 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-pm-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=@linaro.org header.s=google header.b=b8O+q8+p; spf=pass (google.com: best guess record for domain of linux-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-pm-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 S1730609AbfFYLdB (ORCPT + 11 others); Tue, 25 Jun 2019 07:33:01 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:40684 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730546AbfFYLdB (ORCPT ); Tue, 25 Jun 2019 07:33:01 -0400 Received: by mail-wr1-f66.google.com with SMTP id p11so17439941wre.7 for ; Tue, 25 Jun 2019 04:33:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=Jb+mp+rDj9DLSvOVTi217/rhPZn5ckg46P7fvQWw8bI=; b=b8O+q8+prWiPegbdgjjfIFOuD5BkeaA7JfC1MHz+Tc9x43b1tRTTjSTLnGoMlFQ6ul 6aPkd4to4AnqNt1LUjRofjOUM3WGxDCGW6r/LDUCpIt71dR8i78wdpcep75jh7hjCjlI NOB//JopuNBp6KX8Nakjz+38eK4WMv6pIjMIUqWF8hSPUTD1zl9rREM4NNJ/IxniZN94 n/GrA2nFH/lMlM8bACKhMEzqvlJT2YsaQ4Vog3WehS2DK6a/hp8sBQEf6hVbGRFkKtFd Ogqz5CUtiy2m8PfP5NtZ5/BgFkvchuk8P0m9F8fe/MyuaH58/HbhixDhKiZf83g5NjSJ 4SXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=Jb+mp+rDj9DLSvOVTi217/rhPZn5ckg46P7fvQWw8bI=; b=Brko5TZzasCi/NvxZDl0pOjK0QYyYLJ3KaUNO4mKKUd8j+/wYrzHfoRtWlTAa8Gh/S 2V+FL9nl7RJSs7jwRNSzuDKy913Dc8SPMi8YEPXCjz6eBfL4bea4SzbpQhwiPYllvaug t5IYJJGE5yJP6FYrpyxG11C2UYaCYV1p8aCZhJg/UCJFWM6G1nNDc8Lvb5KIauSmT9iq gnXUvWzT7iVOaN7tTHPJFUUnyegnlE6TbfppltS7OK1iHbfLcgrfQ4BDoSjLJrh3HLFw Zk3CsSC+1uXtXmSyhW9J3pXwgLSdNDHb4HFgnthMarbXrsHOgbxmC10wYACZngsIOEor lfPA== X-Gm-Message-State: APjAAAVSAZgQevH8cZaVPs2vIcqeSNoaX69+j78bdvTYIlcefB5s6sNF jhQR1IMYlt60hcPjvk29ognzxQ== X-Received: by 2002:adf:b78c:: with SMTP id s12mr49273824wre.264.1561462379160; Tue, 25 Jun 2019 04:32:59 -0700 (PDT) Received: from clegane.local (191.184.66.86.rev.sfr.net. [86.66.184.191]) by smtp.gmail.com with ESMTPSA id j7sm19254284wru.54.2019.06.25.04.32.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 25 Jun 2019 04:32:58 -0700 (PDT) From: Daniel Lezcano To: viresh.kumar@linaro.org Cc: rjw@rjwysocki.net, edubezval@gmail.com, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org (open list:CPU FREQUENCY SCALING FRAMEWORK) Subject: [PATCH V3 1/3] cpufreq: Move the IS_ENABLED(CPU_THERMAL) macro in a stub Date: Tue, 25 Jun 2019 13:32:41 +0200 Message-Id: <20190625113244.18146-1-daniel.lezcano@linaro.org> X-Mailer: git-send-email 2.17.1 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org The cpufreq_online and the cpufreq_offline [un]register the driver as a cooling device. This is done if the driver is flagged as a cooling device in addition with a IS_ENABLED macro to compile out the branching code. Group this test in a stub function added in the cpufreq header instead of having the IS_ENABLED in the code path. Suggested-by: Rafael J. Wysocki Signed-off-by: Daniel Lezcano Acked-by: Viresh Kumar --- drivers/cpufreq/cpufreq.c | 6 ++---- include/linux/cpufreq.h | 6 ++++++ 2 files changed, 8 insertions(+), 4 deletions(-) -- 2.17.1 diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 85ff958e01f1..aee024e42618 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -1378,8 +1378,7 @@ static int cpufreq_online(unsigned int cpu) if (cpufreq_driver->ready) cpufreq_driver->ready(policy); - if (IS_ENABLED(CONFIG_CPU_THERMAL) && - cpufreq_driver->flags & CPUFREQ_IS_COOLING_DEV) + if (cpufreq_thermal_control_enabled(cpufreq_driver)) policy->cdev = of_cpufreq_cooling_register(policy); pr_debug("initialization complete\n"); @@ -1469,8 +1468,7 @@ static int cpufreq_offline(unsigned int cpu) goto unlock; } - if (IS_ENABLED(CONFIG_CPU_THERMAL) && - cpufreq_driver->flags & CPUFREQ_IS_COOLING_DEV) { + if (cpufreq_thermal_control_enabled(cpufreq_driver)) { cpufreq_cooling_unregister(policy->cdev); policy->cdev = NULL; } diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index d01a74fbc4db..a1467aa7f58b 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h @@ -409,6 +409,12 @@ int cpufreq_unregister_driver(struct cpufreq_driver *driver_data); const char *cpufreq_get_current_driver(void); void *cpufreq_get_driver_data(void); +static inline int cpufreq_thermal_control_enabled(struct cpufreq_driver *drv) +{ + return IS_ENABLED(CONFIG_CPU_THERMAL) && + (drv->flags & CPUFREQ_IS_COOLING_DEV); +} + static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy, unsigned int min, unsigned int max) { From patchwork Tue Jun 25 11:32:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Lezcano X-Patchwork-Id: 167706 Delivered-To: patch@linaro.org Received: by 2002:a92:4782:0:0:0:0:0 with SMTP id e2csp5431883ilk; Tue, 25 Jun 2019 04:33:07 -0700 (PDT) X-Google-Smtp-Source: APXvYqyX9Q4C/htB0oN1JawNrwpnLxXvgystD1VrXES2VaEVlBluVq56dN20vHvP0QMEuVNQbed0 X-Received: by 2002:a65:5304:: with SMTP id m4mr38076822pgq.126.1561462386962; Tue, 25 Jun 2019 04:33:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561462386; cv=none; d=google.com; s=arc-20160816; b=TQ049FonCQrtKfwhkrhq82r3Ce5Bfawncb/3+2GN0SA2Stv054fHFlyGGYh1znje8P 7hfnu2wz20hBic6Wl3JolI4Z+vRG6scYue6sy2vKJ/KC5HXbtcRoqOWCRkFKuSR1kryC qEqqy2sEzFRrcSfEwmSHiSyWQXavVE4YF+B9PUeHwuiAMONOsBnXLxzsH2HykeTKAerg x3yYtH4rre15jrUOIb4I6qBH1nQxBcaDFxhI4IeYy29eNHoToqXLM2BTgSYsScXpyC83 d4AI/surcHFsk3f0ATw7IptGtcWjxGXQK0hv8EwkfHmiiu1T6z59WW2yCwjFY2gCy2M/ G7/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=c7CCpWI+/OeSnAZNxPcSfFi2CB+szsEQQpfXaxE/tl0=; b=muMddSvfCDRoxhPcpOkKhhDof0EYtD+0rUi/0ySWvpSBtULxqJpJKhnSP9AQ9VY/uS NC60gSGX79xnc1gT0e9NqzZ1cZTUmw+KJj1R3c7Fm044zVf3TP+k5q2aJunic+R1ctDe gJnP7FD0Bhy+7NZav03+UCMnqzjigIJdPvXnvFjcg5Asx4vxOKcfM4sxVd6tY23bWE/J CsWogb+lRurUVURX/4eOvfsN77JvNqDp+tRxEY7LJIzDVWA7VhX6uLciT5AUWOgvtCLS ZYRQrmKPtCFytx+mRYpsfFM7Z1I++oOwtj6Hmcwx+Luj5NHbgtgQmUBMZDmJkFX6sqcV u1TQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=qTMHxC9C; spf=pass (google.com: best guess record for domain of linux-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-pm-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. [209.132.180.67]) by mx.google.com with ESMTP id d36si164513pla.113.2019.06.25.04.33.06; Tue, 25 Jun 2019 04:33:06 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-pm-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=@linaro.org header.s=google header.b=qTMHxC9C; spf=pass (google.com: best guess record for domain of linux-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-pm-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 S1730839AbfFYLdG (ORCPT + 11 others); Tue, 25 Jun 2019 07:33:06 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:52334 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730803AbfFYLdG (ORCPT ); Tue, 25 Jun 2019 07:33:06 -0400 Received: by mail-wm1-f65.google.com with SMTP id s3so2431927wms.2 for ; Tue, 25 Jun 2019 04:33:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=c7CCpWI+/OeSnAZNxPcSfFi2CB+szsEQQpfXaxE/tl0=; b=qTMHxC9CeRpqDHLaZy4aGrM7ERq5C4/zgdN78ZYqZkF/g3sAqz0sAtrwa2SJHXL32D PEcGuBK+OAehSU7WFB2nNBNTlwvQC0/RLJevxjYrX4EJOPhJWdfEtGih+16h8xLr53y0 ImwdJZYQKD5S4bcWfgtBjcghLHc82l2+cqGJV2ETQvylCnUoyyBg8x2naSt5fMIIi686 uecJ20VM+OoYhOFP0EPxo6Uv7feHcJR7IbpQ9IQ7UK4cHitnpFLWDFUQdyzjr+Z/9BO/ JvDAXjh1zuV+pf5Z4bH49r8bkgDoycap9B7nVIGgWWc6JOQdOwoP7+4M9fNW44SThawA 2Q3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=c7CCpWI+/OeSnAZNxPcSfFi2CB+szsEQQpfXaxE/tl0=; b=YvCOCG+W5Uo2sSpPFxKJNQoDxieN9Op7kekvdhuNxZ7lM+g66ThPqeZbS5skvQ8czb /VPFZLl9auTXiC/+xF02vLqdLCmhdweX5qh8hx1lXT2lYy6bWkJKMv4ggpHp+q3qvEw/ jg4Y9A+hRFJmqsGS0kNKwdwBDxFWeoJn2G3ozZUu0ZBNrRJpkbbKJc21SObVZwEbIsRf FG6YQ5AVRhrjoO2dtJGCEsXqcwu2sYM/L8hFcKKz/xB3NM2Czh9CbZC9DL5jmtzCeduZ bTuxLzq5tZidpGTFv4SGuoNJZmb3DIo5aJrIno35RHouUBdO+if7RlrIHRWJMY7IK788 96BA== X-Gm-Message-State: APjAAAXEM95bzrF9q05CI2bZJUuY8p5BK9eTAh4/5I0mmkdXf/X+7kJg lzD+UvKOXczgpSih5mohXz/stg== X-Received: by 2002:a1c:5f87:: with SMTP id t129mr20868074wmb.150.1561462382516; Tue, 25 Jun 2019 04:33:02 -0700 (PDT) Received: from clegane.local (191.184.66.86.rev.sfr.net. [86.66.184.191]) by smtp.gmail.com with ESMTPSA id j7sm19254284wru.54.2019.06.25.04.33.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 25 Jun 2019 04:33:01 -0700 (PDT) From: Daniel Lezcano To: viresh.kumar@linaro.org Cc: rjw@rjwysocki.net, edubezval@gmail.com, linux-kernel@vger.kernel.org, Sudeep Holla , Amit Daniel Kachhap , Javi Merino , Zhang Rui , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Keerthy , linux-pm@vger.kernel.org (open list:CPU FREQUENCY DRIVERS - ARM BIG LITTLE), linux-arm-kernel@lists.infradead.org (moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE), linux-omap@vger.kernel.org (open list:TI BANDGAP AND THERMAL DRIVER) Subject: [PATCH V3 2/3] thermal/drivers/cpu_cooling: Unregister with the policy Date: Tue, 25 Jun 2019 13:32:42 +0200 Message-Id: <20190625113244.18146-2-daniel.lezcano@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190625113244.18146-1-daniel.lezcano@linaro.org> References: <20190625113244.18146-1-daniel.lezcano@linaro.org> Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Currently the function cpufreq_cooling_register() returns a cooling device pointer which is used back as a pointer to call the function cpufreq_cooling_unregister(). Even if it is correct, it would make sense to not leak the structure inside a cpufreq driver and keep the code thermal code self-encapsulate. Moreover, that forces to add an extra variable in each driver using this function. Instead of passing the cooling device to unregister, pass the policy. Because the cpufreq_cooling_unregister() function uses the policy to unregister itself. The only purpose of the cooling device pointer is to unregister the cpu cooling device. As there is no more need of this pointer, remove it. Signed-off-by: Daniel Lezcano Acked-by: Viresh Kumar --- drivers/cpufreq/arm_big_little.c | 9 +++------ drivers/cpufreq/cpufreq.c | 10 ++++------ drivers/thermal/cpu_cooling.c | 18 ++++++++++-------- drivers/thermal/imx_thermal.c | 12 ++++++------ .../thermal/ti-soc-thermal/ti-thermal-common.c | 10 +++++----- include/linux/cpu_cooling.h | 6 +++--- include/linux/cpufreq.h | 3 --- 7 files changed, 31 insertions(+), 37 deletions(-) -- 2.17.1 diff --git a/drivers/cpufreq/arm_big_little.c b/drivers/cpufreq/arm_big_little.c index 7fe52fcddcf1..718c63231e66 100644 --- a/drivers/cpufreq/arm_big_little.c +++ b/drivers/cpufreq/arm_big_little.c @@ -56,7 +56,6 @@ static bool bL_switching_enabled; #define ACTUAL_FREQ(cluster, freq) ((cluster == A7_CLUSTER) ? freq << 1 : freq) #define VIRT_FREQ(cluster, freq) ((cluster == A7_CLUSTER) ? freq >> 1 : freq) -static struct thermal_cooling_device *cdev[MAX_CLUSTERS]; static const struct cpufreq_arm_bL_ops *arm_bL_ops; static struct clk *clk[MAX_CLUSTERS]; static struct cpufreq_frequency_table *freq_table[MAX_CLUSTERS + 1]; @@ -501,10 +500,8 @@ static int bL_cpufreq_exit(struct cpufreq_policy *policy) struct device *cpu_dev; int cur_cluster = cpu_to_cluster(policy->cpu); - if (cur_cluster < MAX_CLUSTERS) { - cpufreq_cooling_unregister(cdev[cur_cluster]); - cdev[cur_cluster] = NULL; - } + if (cur_cluster < MAX_CLUSTERS) + cpufreq_cooling_unregister(policy); cpu_dev = get_cpu_device(policy->cpu); if (!cpu_dev) { @@ -527,7 +524,7 @@ static void bL_cpufreq_ready(struct cpufreq_policy *policy) if (cur_cluster >= MAX_CLUSTERS) return; - cdev[cur_cluster] = of_cpufreq_cooling_register(policy); + of_cpufreq_cooling_register(policy); } static struct cpufreq_driver bL_cpufreq_driver = { diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index aee024e42618..f07454249fbc 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -1379,8 +1379,8 @@ static int cpufreq_online(unsigned int cpu) cpufreq_driver->ready(policy); if (cpufreq_thermal_control_enabled(cpufreq_driver)) - policy->cdev = of_cpufreq_cooling_register(policy); - + of_cpufreq_cooling_register(policy); + pr_debug("initialization complete\n"); return 0; @@ -1468,10 +1468,8 @@ static int cpufreq_offline(unsigned int cpu) goto unlock; } - if (cpufreq_thermal_control_enabled(cpufreq_driver)) { - cpufreq_cooling_unregister(policy->cdev); - policy->cdev = NULL; - } + if (cpufreq_thermal_control_enabled(cpufreq_driver)) + cpufreq_cooling_unregister(policy); if (cpufreq_driver->stop_cpu) cpufreq_driver->stop_cpu(policy); diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c index 83486775e593..007c7c6bf845 100644 --- a/drivers/thermal/cpu_cooling.c +++ b/drivers/thermal/cpu_cooling.c @@ -78,6 +78,7 @@ struct cpufreq_cooling_device { struct cpufreq_policy *policy; struct list_head node; struct time_in_idle *idle_time; + struct thermal_cooling_device *cdev; }; static DEFINE_IDA(cpufreq_ida); @@ -606,6 +607,7 @@ __cpufreq_cooling_register(struct device_node *np, goto remove_ida; cpufreq_cdev->clipped_freq = get_state_freq(cpufreq_cdev, 0); + cpufreq_cdev->cdev = cdev; mutex_lock(&cooling_list_lock); /* Register the notifier for first cpufreq cooling device */ @@ -699,18 +701,18 @@ EXPORT_SYMBOL_GPL(of_cpufreq_cooling_register); * * This interface function unregisters the "thermal-cpufreq-%x" cooling device. */ -void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev) +void cpufreq_cooling_unregister(struct cpufreq_policy *policy) { struct cpufreq_cooling_device *cpufreq_cdev; bool last; - if (!cdev) - return; - - cpufreq_cdev = cdev->devdata; - mutex_lock(&cooling_list_lock); - list_del(&cpufreq_cdev->node); + list_for_each_entry(cpufreq_cdev, &cpufreq_cdev_list, node) { + if (cpufreq_cdev->policy == policy) { + list_del(&cpufreq_cdev->node); + break; + } + } /* Unregister the notifier for the last cpufreq cooling device */ last = list_empty(&cpufreq_cdev_list); mutex_unlock(&cooling_list_lock); @@ -719,7 +721,7 @@ void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev) cpufreq_unregister_notifier(&thermal_cpufreq_notifier_block, CPUFREQ_POLICY_NOTIFIER); - thermal_cooling_device_unregister(cdev); + thermal_cooling_device_unregister(cpufreq_cdev->cdev); ida_simple_remove(&cpufreq_ida, cpufreq_cdev->id); kfree(cpufreq_cdev->idle_time); kfree(cpufreq_cdev); diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c index bb6754a5342c..021c0948b740 100644 --- a/drivers/thermal/imx_thermal.c +++ b/drivers/thermal/imx_thermal.c @@ -203,7 +203,6 @@ static struct thermal_soc_data thermal_imx7d_data = { struct imx_thermal_data { struct cpufreq_policy *policy; struct thermal_zone_device *tz; - struct thermal_cooling_device *cdev; enum thermal_device_mode mode; struct regmap *tempmon; u32 c1, c2; /* See formula in imx_init_calib() */ @@ -656,6 +655,7 @@ MODULE_DEVICE_TABLE(of, of_imx_thermal_match); static int imx_thermal_register_legacy_cooling(struct imx_thermal_data *data) { struct device_node *np; + struct thermal_cooling_device *cdev; int ret; data->policy = cpufreq_cpu_get(0); @@ -667,9 +667,9 @@ static int imx_thermal_register_legacy_cooling(struct imx_thermal_data *data) np = of_get_cpu_node(data->policy->cpu, NULL); if (!np || !of_find_property(np, "#cooling-cells", NULL)) { - data->cdev = cpufreq_cooling_register(data->policy); - if (IS_ERR(data->cdev)) { - ret = PTR_ERR(data->cdev); + cdev = cpufreq_cooling_register(data->policy); + if (IS_ERR(cdev)) { + ret = PTR_ERR(cdev); cpufreq_cpu_put(data->policy); return ret; } @@ -680,7 +680,7 @@ static int imx_thermal_register_legacy_cooling(struct imx_thermal_data *data) static void imx_thermal_unregister_legacy_cooling(struct imx_thermal_data *data) { - cpufreq_cooling_unregister(data->cdev); + cpufreq_cooling_unregister(data->policy); cpufreq_cpu_put(data->policy); } @@ -872,7 +872,7 @@ static int imx_thermal_remove(struct platform_device *pdev) clk_disable_unprepare(data->thermal_clk); thermal_zone_device_unregister(data->tz); - cpufreq_cooling_unregister(data->cdev); + cpufreq_cooling_unregister(data->policy); cpufreq_cpu_put(data->policy); return 0; diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c index b4f981daeaf2..170b70b6ec61 100644 --- a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c +++ b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c @@ -41,7 +41,6 @@ struct ti_thermal_data { struct cpufreq_policy *policy; struct thermal_zone_device *ti_thermal; struct thermal_zone_device *pcb_tz; - struct thermal_cooling_device *cool_dev; struct ti_bandgap *bgp; enum thermal_device_mode mode; struct work_struct thermal_wq; @@ -233,6 +232,7 @@ int ti_thermal_register_cpu_cooling(struct ti_bandgap *bgp, int id) { struct ti_thermal_data *data; struct device_node *np = bgp->dev->of_node; + struct thermal_cooling_device *cdev; /* * We are assuming here that if one deploys the zone @@ -256,9 +256,9 @@ int ti_thermal_register_cpu_cooling(struct ti_bandgap *bgp, int id) } /* Register cooling device */ - data->cool_dev = cpufreq_cooling_register(data->policy); - if (IS_ERR(data->cool_dev)) { - int ret = PTR_ERR(data->cool_dev); + cdev = cpufreq_cooling_register(data->policy); + if (IS_ERR(cdev)) { + int ret = PTR_ERR(cdev); dev_err(bgp->dev, "Failed to register cpu cooling device %d\n", ret); cpufreq_cpu_put(data->policy); @@ -277,7 +277,7 @@ int ti_thermal_unregister_cpu_cooling(struct ti_bandgap *bgp, int id) data = ti_bandgap_get_sensor_data(bgp, id); if (data) { - cpufreq_cooling_unregister(data->cool_dev); + cpufreq_cooling_unregister(data->policy); if (data->policy) cpufreq_cpu_put(data->policy); } diff --git a/include/linux/cpu_cooling.h b/include/linux/cpu_cooling.h index bae54bb7c048..89f469ee4be4 100644 --- a/include/linux/cpu_cooling.h +++ b/include/linux/cpu_cooling.h @@ -29,9 +29,9 @@ cpufreq_cooling_register(struct cpufreq_policy *policy); /** * cpufreq_cooling_unregister - function to remove cpufreq cooling device. - * @cdev: thermal cooling device pointer. + * @policy: cpufreq policy */ -void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev); +void cpufreq_cooling_unregister(struct cpufreq_policy *policy); #else /* !CONFIG_CPU_THERMAL */ static inline struct thermal_cooling_device * @@ -41,7 +41,7 @@ cpufreq_cooling_register(struct cpufreq_policy *policy) } static inline -void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev) +void cpufreq_cooling_unregister(struct cpufreq_policy *policy) { return; } diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index a1467aa7f58b..ce13204df972 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h @@ -144,9 +144,6 @@ struct cpufreq_policy { /* For cpufreq driver's internal use */ void *driver_data; - - /* Pointer to the cooling device if used for thermal mitigation */ - struct thermal_cooling_device *cdev; }; struct cpufreq_freqs {