All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhang Rui <rui.zhang@intel.com>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: linux-acpi@vger.kernel.org, linux-pm@vger.kernel.org,
	Matthew Garrett <mjg@redhat.com>, Len Brown <lenb@kernel.org>,
	R Durgadoss <durgadoss.r@intel.com>,
	Eduardo Valentin <eduardo.valentin@intel.com>,
	Amit Kachhap <amit.kachhap@linaro.org>, Wei Ni <wni@nvidia.com>
Subject: Re: [PATCH 01/16] Thermal: Make Thermal trip points writeable
Date: Mon, 23 Jul 2012 16:22:25 +0800	[thread overview]
Message-ID: <1343031745.1682.328.camel@rui.sh.intel.com> (raw)
In-Reply-To: <201207192227.13357.rjw@sisk.pl>

On 四, 2012-07-19 at 22:27 +0200, Rafael J. Wysocki wrote:
> On Thursday, July 19, 2012, Zhang Rui wrote:
> > From: Durgadoss R <dugardoss.r@intel.com>
> > 
> > Some of the thermal drivers using the Generic Thermal Framework
> > require (all/some) trip points to be writeable. This patch makes
> > the trip point temperatures writeable on a per-trip point basis,
> > and modifies the required function call in thermal.c. This patch
> > also updates the Documentation to reflect the new change.
> > 
> > Signed-off-by: Durgadoss R <durgadoss.r@intel.com>
> > Signed-off-by: Zhang Rui <rui.zhang@intel.com>
> > ---
> >  Documentation/thermal/sysfs-api.txt      |    4 +-
> >  drivers/acpi/thermal.c                   |    4 +-
> >  drivers/platform/x86/acerhdf.c           |    2 +-
> >  drivers/platform/x86/intel_mid_thermal.c |    2 +-
> >  drivers/thermal/spear_thermal.c          |    2 +-
> >  drivers/thermal/thermal_sys.c            |  147 +++++++++++++++++++++---------
> >  include/linux/thermal.h                  |   15 ++-
> >  7 files changed, 125 insertions(+), 51 deletions(-)
> > 
> > diff --git a/Documentation/thermal/sysfs-api.txt b/Documentation/thermal/sysfs-api.txt
> > index 1733ab9..0c7c423 100644
> > --- a/Documentation/thermal/sysfs-api.txt
> > +++ b/Documentation/thermal/sysfs-api.txt
> > @@ -32,7 +32,8 @@ temperature) and throttle appropriate devices.
> >  
> >  1.1 thermal zone device interface
> >  1.1.1 struct thermal_zone_device *thermal_zone_device_register(char *name,
> > -		int trips, void *devdata, struct thermal_zone_device_ops *ops)
> > +		int trips, int flag, void *devdata,
> 
> The 'flags' argument should rather be called 'mask', or even 'writable_mask'.
> 
Agreed.

> >  #define to_cooling_device(_dev)	\
> >  	container_of(_dev, struct thermal_cooling_device, device)
> > @@ -1089,9 +1084,83 @@ void thermal_zone_device_update(struct thermal_zone_device *tz)
> >  EXPORT_SYMBOL(thermal_zone_device_update);
> >  >  /**
> > + * create_trip_attrs - create attributes for trip points
> > + * @tz:		the thermal zone device
> > + * @flag:	Writeable trip point bitmap.
> > + */
> > +static int create_trip_attrs(struct thermal_zone_device *tz, int flag)
> > +{
> > +	int indx;
> > +	int writeable;
> > +
> > +	tz->trip_type_attrs =
> > +		kzalloc(sizeof(struct thermal_attr) * tz->trips, GFP_KERNEL);
> > +	if (!tz->trip_type_attrs)
> > +		return -ENOMEM;
> > +
> > +	tz->trip_temp_attrs =
> > +		kzalloc(sizeof(struct thermal_attr) * tz->trips, GFP_KERNEL);
> > +	if (!tz->trip_temp_attrs) {
> > +		kfree(tz->trip_type_attrs);
> > +		return -ENOMEM;
> > +	}
> > +
> > +	for (indx = 0; indx < tz->trips; indx++) {
> > +
> > +		/* create trip type attribute */
> > +		snprintf(tz->trip_type_attrs[indx].name, THERMAL_NAME_LENGTH,
> > +			 "trip_point_%d_type", indx);
> 
> If this really truncates the name, we'll run into problems in _show() and _store().
> Is there any solution to that?
> 
as THERMAL_MAX_TRIP is smaller than 100, so the answer is no.

> > +
> > +		sysfs_attr_init(&tz->trip_type_attrs[count].attr.attr);
> > +		tz->trip_type_attrs[indx].attr.attr.name =
> > +						tz->trip_type_attrs[indx].name;
> > +		tz->trip_type_attrs[indx].attr.attr.mode = S_IRUGO;
> > +		tz->trip_type_attrs[indx].attr.show = trip_point_type_show;
> > +
> > +		device_create_file(&tz->device,
> > +				   &tz->trip_type_attrs[indx].attr);
> > +
> > +		/* create trip temp attribute */
> > +		writeable = flag & (1 << indx);
> > +		snprintf(tz->trip_temp_attrs[indx].name, THERMAL_NAME_LENGTH,
> > +			 "trip_point_%d_temp", indx);
> > +
> > +		sysfs_attr_init(&tz->trip_temp_attrs[indx].attr.attr);
> > +		tz->trip_temp_attrs[indx].attr.attr.name =
> > +						tz->trip_temp_attrs[indx].name;
> > +		tz->trip_temp_attrs[indx].attr.attr.mode = S_IRUGO;
> > +		tz->trip_temp_attrs[indx].attr.show = trip_point_temp_show;
> > +		if (writeable) {
> 
> Why don't you put the "flag & (1 << indx)" here directly instead of 'writable'?
> 
agreed.

> > +			tz->trip_temp_attrs[indx].attr.attr.mode |= S_IWUSR;
> > +			tz->trip_temp_attrs[indx].attr.store =
> > +							trip_point_temp_store;
> > +		}
> > +
> > +		device_create_file(&tz->device,
> > +				   &tz->trip_temp_attrs[indx].attr);
> > +	}
> > +	return 0;
> > +}
> > +
> > +static void remove_trip_attrs(struct thermal_zone_device *tz)
> > +{
> > +	int indx;
> > +
> > +	for (indx = 0; indx < tz->trips; indx++) {
> > +		device_remove_file(&tz->device,
> > +				   &tz->trip_type_attrs[indx].attr);
> > +		device_remove_file(&tz->device,
> > +				   &tz->trip_temp_attrs[indx].attr);
> > +	}
> > +	kfree(tz->trip_type_attrs);
> > +	kfree(tz->trip_temp_attrs);
> > +}
> > +
> > +/**
> >   * thermal_zone_device_register - register a new thermal zone device
> >   * @type:	the thermal zone device type
> >   * @trips:	the number of trip points the thermal zone support
> > + * @flag:	a bit string indicating the writeablility of trip points
> >   * @devdata:	private device data
> >   * @ops:	standard thermal zone device callbacks
> >   * @tc1:	thermal coefficient 1 for passive calculations
> > @@ -1107,7 +1176,7 @@ EXPORT_SYMBOL(thermal_zone_device_update);
> >   * section 11.1.5.1 of the ACPI specification 3.0.
> >   */
> >  struct thermal_zone_device *thermal_zone_device_register(char *type,
> > -	int trips, void *devdata,
> > +	int trips, int flag, void *devdata,
> >  	const struct thermal_zone_device_ops *ops,
> >  	int tc1, int tc2, int passive_delay, int polling_delay)
> >  {
> > @@ -1124,6 +1193,9 @@ struct thermal_zone_device *thermal_zone_device_register(char *type,
> >  	if (trips > THERMAL_MAX_TRIPS || trips < 0)
> >  		return ERR_PTR(-EINVAL);
> >  
> > +	if (flag >> trips)
> > +		return ERR_PTR(-EINVAL);
> 
> I'm not sure if this check is necessary.  Does it actually matter is someone
> passes ones in the unused bit positions?
> 
I do not think we can trust this value if the caller even wants to set
writable mask for a non-exist trip point.

thanks,
rui

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2012-07-23  8:21 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-19  6:31 [PATCH 00/16] Thermal: generic thermal layer enhancement Zhang Rui
2012-07-19  6:31 ` [PATCH 01/16] Thermal: Make Thermal trip points writeable Zhang Rui
2012-07-19 10:35   ` R, Durgadoss
2012-07-19 19:38   ` Rafael J. Wysocki
2012-07-23  8:11     ` Zhang Rui
2012-07-19 20:27   ` Rafael J. Wysocki
2012-07-23  8:22     ` Zhang Rui [this message]
2012-07-23 10:25       ` Rafael J. Wysocki
2012-07-19  6:31 ` [PATCH 02/16] Thermal: Add Hysteresis attributes Zhang Rui
2012-07-19 10:40   ` R, Durgadoss
2012-07-19 20:00     ` Rafael J. Wysocki
2012-07-19  6:31 ` [PATCH 03/16] Thermal: Documentation update Zhang Rui
2012-07-19 10:51   ` R, Durgadoss
2012-07-23  8:36     ` Zhang Rui
2012-07-19  6:31 ` [PATCH 04/16] Thermal: Introduce multiple cooling states support Zhang Rui
2012-07-19  6:31 ` [PATCH 05/16] Thermal: Introduce cooling states range support Zhang Rui
2012-07-19  6:31 ` [PATCH 06/16] Thermal: set upper and lower limits Zhang Rui
2012-07-19 20:55   ` Rafael J. Wysocki
2012-07-23  8:45     ` Zhang Rui
2012-07-23 19:15       ` Rafael J. Wysocki
2012-07-19  6:31 ` [PATCH 07/16] Thermal: Introduce .get_trend() callback Zhang Rui
2012-07-19 21:13   ` Rafael J. Wysocki
2012-07-24  1:42     ` Zhang Rui
2012-07-24  9:22       ` Rafael J. Wysocki
2012-07-19 22:09   ` Jacob Pan
2012-07-20  9:53     ` Rafael J. Wysocki
2012-07-20 16:12       ` Jacob Pan
2012-07-19  6:31 ` [PATCH 08/16] Thermal: Remove tc1/tc2 in generic thermal layer Zhang Rui
2012-07-19  6:31 ` [PATCH 09/16] Thermal: Introduce thermal_zone_trip_update() Zhang Rui
2012-07-19 21:19   ` Rafael J. Wysocki
2012-07-24  1:47     ` Zhang Rui
2012-07-24  9:27       ` Rafael J. Wysocki
2012-07-25  1:38         ` Zhang Rui
2012-07-25 11:07           ` Rafael J. Wysocki
2012-07-26  0:49             ` Zhang Rui
     [not found]   ` <CAK44p21hNYGH4YkH5E+XK-pM2upingQbvm77WkJbttCRp6ZamQ@mail.gmail.com>
2012-07-24  7:11     ` Zhang Rui
2012-07-24  8:06       ` Amit Kachhap
2012-07-26  5:08         ` Zhang Rui
2012-07-26  6:01           ` R, Durgadoss
2012-07-24  7:57   ` Amit Kachhap
2012-07-19  6:31 ` [PATCH 10/16] Thermal: rename structure thermal_cooling_device_instance to thermal_instance Zhang Rui
2012-07-19  6:31 ` [PATCH 11/16] Thermal: Rename thermal_zone_device.cooling_devices to thermal_zone_device.instances Zhang Rui
2012-07-19 21:22   ` Rafael J. Wysocki
2012-07-24  1:48     ` Zhang Rui
2012-07-19  6:31 ` [PATCH 12/16] Thermal: Rename thermal_instance.node to thermal_instance.tz_node Zhang Rui
2012-07-19  6:31 ` [PATCH 13/16] Thermal: List thermal_instance in thermal_cooling_device Zhang Rui
2012-07-19 21:25   ` Rafael J. Wysocki
2012-07-24  1:48     ` Zhang Rui
2012-07-19  6:31 ` [PATCH 14/16] Thermal: Introduce simple arbitrator for setting device cooling state Zhang Rui
2012-07-19 21:39   ` Rafael J. Wysocki
2012-07-24  1:49     ` Zhang Rui
2012-07-19  6:31 ` [PATCH 15/16] Thermal: Unify the code for both active and passive cooling Zhang Rui
2012-07-19  6:31 ` [PATCH 16/16] Thermal: use plist instead of list Zhang Rui
2012-07-19 21:45   ` Rafael J. Wysocki
2012-07-24  2:13     ` Zhang Rui
2012-07-19  6:37 ` [PATCH 00/16] Thermal: generic thermal layer enhancement Zhang Rui

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=1343031745.1682.328.camel@rui.sh.intel.com \
    --to=rui.zhang@intel.com \
    --cc=amit.kachhap@linaro.org \
    --cc=durgadoss.r@intel.com \
    --cc=eduardo.valentin@intel.com \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mjg@redhat.com \
    --cc=rjw@sisk.pl \
    --cc=wni@nvidia.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.