Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3654010ybt; Tue, 30 Jun 2020 08:11:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJymCxbqXzArdy2pivfjyjeySaHDnHpSTXURF4m0myKFTb7GnbXMwad44yJuGZ9SmYc0qCXo X-Received: by 2002:a17:906:4f82:: with SMTP id o2mr10491157eju.424.1593529861774; Tue, 30 Jun 2020 08:11:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593529861; cv=none; d=google.com; s=arc-20160816; b=uvKsnpSPeRXUfzVJla6mx4fDmbA9Ci6G8vCxj2ISevI0So6ssrbffvDnWrG5FDi9kM wQEf7HKvfA+zjel+PA4fbqiAKayvH/jSoOkDDg3R6NoHnwssgrKdfwKYU26Fg5Rwn5Yu JvYDOE/+5R3pYq8MSJlYMwd2Y4z9L0F2OSBx2z9iv8mJz+8KSiVDCl7tAzCjyl7D3gDL LU5z7we/vn8BrdH8G1mGquKRC0TzUjRNxBqrbEP5tQVmY/2i6BVR1MaY3V1Vx5zSQzpU Iaadyh7FXII0Zc3kxrsSuIjetbjDz4H23HdQM1WlO7Rr8B72cR93Iet5CnD5vfdCtndL 9U7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:date:cc:to:from:subject:message-id :ironport-sdr:ironport-sdr; bh=Egs3iI+sWk1DDfF4xT+xLQ2sLrHXD/2SBRplJ8h09pg=; b=a3sMK4dhoUGUMfTfMrNxnbtXcvaoc7Qz1ujiLFUG3XdipqsIvBfKTN2hE7ztE3O9E/ jIvHtaSDAWL1GIQGVaptwic46GVkmwJc+FrzIb3UOL5z7Xqize4b23fITV1c2a8LvrmG DLQeRsgO6eoDoZPDNAWgrIGKQjUeuRbdoKXXWAb6mW+xqijexa1fDFfOhbcITY4s6YKt 5jsGH3m//sT2DaDc5AGfToNamYCQgrcltggJ1BSXOIUveq0g0lRt6XiRipkCfx4yOXww EROOuGX0oE4O6D8tLXe/UfRVN1R+TUMTIlDN4XwfWvbxVqo8l+c6CDl+w/6g3lV2VdWY QJIA== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id nk2si1955833ejb.695.2020.06.30.08.10.38; Tue, 30 Jun 2020 08:11:01 -0700 (PDT) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389213AbgF3PJv (ORCPT + 99 others); Tue, 30 Jun 2020 11:09:51 -0400 Received: from mga07.intel.com ([134.134.136.100]:16484 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726087AbgF3PJv (ORCPT ); Tue, 30 Jun 2020 11:09:51 -0400 IronPort-SDR: ydKKbh6B1+NHPB+H4ToQnDJyA5gsPY5oC7mWzUSj4Re3/rtNw5lzOGC6JNRo6HZQ3AW3bGJf9g oVAbx5QF9SJA== X-IronPort-AV: E=McAfee;i="6000,8403,9666"; a="211322148" X-IronPort-AV: E=Sophos;i="5.75,297,1589266800"; d="scan'208";a="211322148" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jun 2020 08:09:50 -0700 IronPort-SDR: O2E+r8o1TpeXh1xwXJHt/LXHo4xYjCmrsie9Kv6jlEax5NdR8GTXi6g7v7M1pAr+/bpJ7i2QKz nsquXpR8BCxg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,297,1589266800"; d="scan'208";a="425236640" Received: from unknown (HELO rzhang1-mobile) ([10.249.168.95]) by orsmga004.jf.intel.com with ESMTP; 30 Jun 2020 08:09:48 -0700 Message-ID: Subject: Re: [PATCH v2 1/5] thermal: core: Add helpers to browse the cdev, tz and governor list From: Zhang Rui To: Amit Kucheria , Daniel Lezcano Cc: Srinivas Pandruvada , Ram Chandrasekar , Linux Kernel Mailing List Date: Tue, 30 Jun 2020 23:09:47 +0800 In-Reply-To: References: <20200625144509.17918-1-daniel.lezcano@linaro.org> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Daniel, seems that you forgot to cc linux-pm mailing list. On Tue, 2020-06-30 at 17:16 +0530, Amit Kucheria wrote: > On Thu, Jun 25, 2020 at 8:15 PM Daniel Lezcano > wrote: > > > > The cdev, tz and governor list, as well as their respective locks > > are > > statically defined in the thermal_core.c file. > > > > In order to give a sane access to these list, like browsing all the > > thermal zones or all the cooling devices, let's define a set of > > helpers where we pass a callback as a parameter to be called for > > each > > thermal entity. > > > > We keep the self-encapsulation and ensure the locks are correctly > > taken when looking at the list. > > > > Signed-off-by: Daniel Lezcano > > --- > > drivers/thermal/thermal_core.c | 51 > > ++++++++++++++++++++++++++++++++++ > > Is the idea to not use thermal_helpers.c from now on? It fits > perfectly with a patch I have to merge all its contents to > thermal_core.c :-) I agree these changes should be in thermal_helper.c thanks, rui > > > > drivers/thermal/thermal_core.h | 9 ++++++ > > 2 files changed, 60 insertions(+) > > > > diff --git a/drivers/thermal/thermal_core.c > > b/drivers/thermal/thermal_core.c > > index 2a3f83265d8b..e2f8d2550ecd 100644 > > --- a/drivers/thermal/thermal_core.c > > +++ b/drivers/thermal/thermal_core.c > > @@ -611,6 +611,57 @@ void > > thermal_zone_device_rebind_exception(struct thermal_zone_device > > *tz, > > mutex_unlock(&thermal_list_lock); > > } > > > > +int for_each_thermal_governor(int (*cb)(struct thermal_governor *, > > void *), > > + void *data) > > > > +{ > > + struct thermal_governor *gov; > > + int ret = 0; > > + > > + mutex_lock(&thermal_governor_lock); > > + list_for_each_entry(gov, &thermal_governor_list, > > governor_list) { > > + ret = cb(gov, data); > > + if (ret) > > + break; > > + } > > + mutex_unlock(&thermal_governor_lock); > > + > > + return ret; > > +} > > + > > +int for_each_thermal_cooling_device(int (*cb)(struct > > thermal_cooling_device *, > > + void *), void *data) > > +{ > > + struct thermal_cooling_device *cdev; > > + int ret = 0; > > + > > + mutex_lock(&thermal_list_lock); > > + list_for_each_entry(cdev, &thermal_cdev_list, node) { > > + ret = cb(cdev, data); > > + if (ret) > > + break; > > + } > > + mutex_unlock(&thermal_list_lock); > > + > > + return ret; > > +} > > + > > +int for_each_thermal_zone(int (*cb)(struct thermal_zone_device *, > > void *), > > + void *data) > > +{ > > + struct thermal_zone_device *tz; > > + int ret = 0; > > + > > + mutex_lock(&thermal_list_lock); > > + list_for_each_entry(tz, &thermal_tz_list, node) { > > + ret = cb(tz, data); > > + if (ret) > > + break; > > + } > > + mutex_unlock(&thermal_list_lock); > > + > > + return ret; > > +} > > + > > void thermal_zone_device_unbind_exception(struct > > thermal_zone_device *tz, > > const char *cdev_type, > > size_t size) > > { > > diff --git a/drivers/thermal/thermal_core.h > > b/drivers/thermal/thermal_core.h > > index 4e271016b7a9..bb8f8aee79eb 100644 > > --- a/drivers/thermal/thermal_core.h > > +++ b/drivers/thermal/thermal_core.h > > @@ -41,6 +41,15 @@ extern struct thermal_governor > > *__governor_thermal_table_end[]; > > __governor < __governor_thermal_table_end; \ > > __governor++) > > > > +int for_each_thermal_zone(int (*cb)(struct thermal_zone_device *, > > void *), > > + void *); > > + > > +int for_each_thermal_cooling_device(int (*cb)(struct > > thermal_cooling_device *, > > + void *), void *); > > + > > +int for_each_thermal_governor(int (*cb)(struct thermal_governor *, > > void *), > > + void *thermal_governor); > > + > > struct thermal_attr { > > struct device_attribute attr; > > char name[THERMAL_NAME_LENGTH]; > > -- > > 2.17.1 > >