From: Eduardo Valentin <edubezval@gmail.com>
To: Rui Zhang <rui.zhang@intel.com>
Cc: Linux PM <linux-pm@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
Eduardo Valentin <edubezval@gmail.com>
Subject: [PATCHv3 04/48] thermal: core: use dev.groups to manage always present tz attributes
Date: Mon, 30 May 2016 15:15:40 -0700 [thread overview]
Message-ID: <1464646584-14322-5-git-send-email-edubezval@gmail.com> (raw)
In-Reply-To: <1464646584-14322-1-git-send-email-edubezval@gmail.com>
Thermal zones attributes are all being created using
device_create_file(). This has the disadvantage of making the code
complicated and sometimes we may miss the cleanup of them.
This patch starts to move the thermal zone sysfs attributes to the
dev.groups, so Linux device core manage them for us. For now, this patch
only moves those attributes are always present regardless of thermal
zone condition.
This change has also the advantage of cleaning up the thermal zone
parameters sysfs entries that are left unclean after device
registration.
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
---
drivers/thermal/thermal_core.c | 86 ++++++++++++++++--------------------------
1 file changed, 33 insertions(+), 53 deletions(-)
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 3ce7882..926442e 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -989,42 +989,46 @@ create_s32_tzp_attr(slope);
create_s32_tzp_attr(offset);
#undef create_s32_tzp_attr
+/*
+ * These are thermal zone device attributes that will always be present.
+ * All the attributes created for tzp (create_s32_tzp_attr) also are always
+ * present on the sysfs interface.
+ */
static DEVICE_ATTR(type, 0444, type_show, NULL);
static DEVICE_ATTR(temp, 0444, temp_show, NULL);
-static DEVICE_ATTR(mode, 0644, mode_show, mode_store);
-static DEVICE_ATTR(passive, S_IRUGO | S_IWUSR, passive_show, passive_store);
static DEVICE_ATTR(policy, S_IRUGO | S_IWUSR, policy_show, policy_store);
static DEVICE_ATTR(available_policies, S_IRUGO, available_policies_show, NULL);
-static DEVICE_ATTR(emul_temp, S_IWUSR, NULL, emul_temp_store);
static DEVICE_ATTR(sustainable_power, S_IWUSR | S_IRUGO, sustainable_power_show,
sustainable_power_store);
-static struct device_attribute *dev_tzp_attrs[] = {
- &dev_attr_sustainable_power,
- &dev_attr_k_po,
- &dev_attr_k_pu,
- &dev_attr_k_i,
- &dev_attr_k_d,
- &dev_attr_integral_cutoff,
- &dev_attr_slope,
- &dev_attr_offset,
-};
-
-static int create_tzp_attrs(struct device *dev)
-{
- int i;
+/* These thermal zone device attributes are created based on conditions */
+static DEVICE_ATTR(mode, 0644, mode_show, mode_store);
+static DEVICE_ATTR(passive, S_IRUGO | S_IWUSR, passive_show, passive_store);
+static DEVICE_ATTR(emul_temp, S_IWUSR, NULL, emul_temp_store);
- for (i = 0; i < ARRAY_SIZE(dev_tzp_attrs); i++) {
- int ret;
- struct device_attribute *dev_attr = dev_tzp_attrs[i];
+static struct attribute *thermal_zone_dev_attrs[] = {
+ &dev_attr_type.attr,
+ &dev_attr_temp.attr,
+ &dev_attr_policy.attr,
+ &dev_attr_available_policies.attr,
+ &dev_attr_sustainable_power.attr,
+ &dev_attr_k_po.attr,
+ &dev_attr_k_pu.attr,
+ &dev_attr_k_i.attr,
+ &dev_attr_k_d.attr,
+ &dev_attr_integral_cutoff.attr,
+ &dev_attr_slope.attr,
+ &dev_attr_offset.attr,
+};
- ret = device_create_file(dev, dev_attr);
- if (ret)
- return ret;
- }
+static struct attribute_group thermal_zone_attribute_group = {
+ .attrs = thermal_zone_dev_attrs,
+};
- return 0;
-}
+static const struct attribute_group *thermal_zone_attribute_groups[] = {
+ &thermal_zone_attribute_group,
+ NULL
+};
/**
* power_actor_get_max_power() - get the maximum power that a cdev can consume
@@ -1846,6 +1850,9 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type,
tz->trips = trips;
tz->passive_delay = passive_delay;
tz->polling_delay = polling_delay;
+
+ /* Add nodes that are always present via .groups */
+ tz->device.groups = thermal_zone_attribute_groups;
/* A new thermal zone needs to be updated anyway. */
atomic_set(&tz->need_update, 1);
@@ -1892,29 +1899,6 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type,
goto unregister;
}
- result = device_create_file(&tz->device, &dev_attr_type);
- if (result)
- goto unregister;
-
- result = device_create_file(&tz->device, &dev_attr_temp);
- if (result)
- goto unregister;
-
- /* Create policy attribute */
- result = device_create_file(&tz->device, &dev_attr_policy);
- if (result)
- goto unregister;
-
- /* Create available_policies attribute */
- result = device_create_file(&tz->device, &dev_attr_available_policies);
- if (result)
- goto unregister;
-
- /* Add thermal zone params */
- result = create_tzp_attrs(&tz->device);
- if (result)
- goto unregister;
-
/* Update 'this' zone's governor information */
mutex_lock(&thermal_governor_lock);
@@ -2009,12 +1993,8 @@ void thermal_zone_device_unregister(struct thermal_zone_device *tz)
thermal_zone_device_set_polling(tz, 0);
- device_remove_file(&tz->device, &dev_attr_type);
- device_remove_file(&tz->device, &dev_attr_temp);
if (tz->ops->get_mode)
device_remove_file(&tz->device, &dev_attr_mode);
- device_remove_file(&tz->device, &dev_attr_policy);
- device_remove_file(&tz->device, &dev_attr_available_policies);
remove_trip_attrs(tz);
thermal_set_governor(tz, NULL);
--
2.1.4
next prev parent reply other threads:[~2016-05-30 22:15 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-30 22:15 [PATCHv3 00/48] thermal: reorganizing thermal core Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 01/48] thermal: core: prevent zones with no types to be registered Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 02/48] thermal: core: group thermal_zone DEVICE_ATTR's declarations Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 03/48] thermal: core: group device_create_file() calls that are always created Eduardo Valentin
2016-05-30 22:15 ` Eduardo Valentin [this message]
2016-05-31 5:13 ` [PATCHv3 04/48] thermal: core: use dev.groups to manage always present tz attributes Keerthy
2016-05-30 22:15 ` [PATCHv3 05/48] thermal: core: move emul_temp creation to tz->device.groups Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 06/48] thermal: core: move mode attribute " Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 07/48] thermal: core: move passive attr " Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 08/48] thermal: core: improve power actor documentation Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 09/48] thermal: core: move power actor code out of sysfs I/F section Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 10/48] thermal: core: remove useless empty line Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 11/48] thermal: core: fix style on remove_trip_attrs() Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 12/48] thermal: core: move the trip attrs to the tz sysfs I/F section Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 13/48] thermal: core: create tz->device.groups dynamically Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 14/48] thermal: core: move trips attributes to tz->device.groups Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 15/48] thermal: core: remove unnecessary device_remove() calls Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 16/48] thermal: core: split passive_store Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 17/48] thermal: core: split policy_store Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 18/48] thermal: core: split available_policies_show() Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 19/48] thermal: core: move to_thermal_zone() macro to header file Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 20/48] thermal: core: treat correctly the return value of *scanf calls Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 21/48] thermal: core: match parenthesis on code alignment Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 22/48] thermal: core: move thermal_zone sysfs to thermal_sysfs.c Eduardo Valentin
2016-05-30 22:15 ` [PATCHv3 23/48] thermal: core: move to_cooling_device macro to header file Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 24/48] thermal: core: move cooling device sysfs to thermal_sysfs.c Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 25/48] thermal: core: remove a couple of style issues on helpers Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 26/48] thermal: core: introduce thermal_helpers.c Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 27/48] thermal: core: group functions related to governor handling Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 28/48] thermal: core: move idr handling to device management section Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 29/48] thermal: core: small style fix on __unbind() helper Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 30/48] thermal: core: move __unbind() helper to where it is used Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 31/48] thermal: core: move bind_cdev() " Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 32/48] thermal: core: move bind_tz() " Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 33/48] thermal: core: fix couple of style issues on __bind() helper Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 34/48] thermal: core: move __bind() to where it is used Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 35/48] thermal: core: add inline to print_bind_err_msg() Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 36/48] thermal: core: move notify to the zone update section Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 37/48] thermal: core: add a comment describing the main update loop Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 38/48] thermal: core: add a comment describing the power actor section Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 39/48] thermal: core: add a comment describing the device management section Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 40/48] thermal: sysfs: remove symbols of emul_temp when config is disabled Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 41/48] thermal: core: remove FSF address in the GPL notice Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 42/48] thermal: core: small style fix when checking for __find_governor() Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 43/48] thermal: core: standardize line breaking alignment Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 44/48] thermal: core: remove void function return statements Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 45/48] thermal: core: remove style warnings and checks Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 46/48] thermal: core: improve kerneldoc entry of thermal_cooling_device_unregister Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 47/48] thermal: core: use kzalloc(sizeof(*ptr),...) Eduardo Valentin
2016-05-30 22:16 ` [PATCHv3 48/48] thermal: sysfs: use kcalloc() instead of kzalloc() Eduardo Valentin
2016-05-31 4:24 ` [PATCHv3 00/48] thermal: reorganizing thermal core Keerthy
2016-05-31 6:13 ` Eduardo Valentin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1464646584-14322-5-git-send-email-edubezval@gmail.com \
--to=edubezval@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rui.zhang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).