Commit 14a34396 authored by Kamil Konieczny's avatar Kamil Konieczny Committed by Chanwoo Choi
Browse files

PM / devfreq: Add clearing transitions stats



Add clearing transition table and time in states devfreq statistics
by writing 0 (zero) to trans_stat file in devfreq sysfs. An example use
is like following:

echo 0 > /sys/class/devfreq/devfreqX/trans_stat

Signed-off-by: default avatarKamil Konieczny <k.konieczny@samsung.com>
[cw00.choi: Edit return value if entering the wrong value for reset
 and use arrary3_size() to get the size of 3-dimensional array]
Signed-off-by: default avatarChanwoo Choi <cw00.choi@samsung.com>
parent b76b3479
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -55,12 +55,15 @@ What: /sys/class/devfreq/.../trans_stat
Date:		October 2012
Contact:	MyungJoo Ham <myungjoo.ham@samsung.com>
Description:
		This ABI shows the statistics of devfreq behavior on a
		specific device. It shows the time spent in each state and
		the number of transitions between states.
		This ABI shows or clears the statistics of devfreq behavior
		on a specific device. It shows the time spent in each state
		and the number of transitions between states.
		In order to activate this ABI, the devfreq target device
		driver should provide the list of available frequencies
		with its profile.
		with its profile. If need to reset the statistics of devfreq
		behavior on a specific device, enter 0(zero) to 'trans_stat'
		as following:
			echo 0 > /sys/class/devfreq/.../trans_stat

What:		/sys/class/devfreq/.../userspace/set_freq
Date:		September 2011
+28 −1
Original line number Diff line number Diff line
@@ -1597,7 +1597,34 @@ static ssize_t trans_stat_show(struct device *dev,
					devfreq->total_trans);
	return len;
}
static DEVICE_ATTR_RO(trans_stat);

static ssize_t trans_stat_store(struct device *dev,
				struct device_attribute *attr,
				const char *buf, size_t count)
{
	struct devfreq *df = to_devfreq(dev);
	int err, value;

	if (df->profile->max_state == 0)
		return count;

	err = kstrtoint(buf, 10, &value);
	if (err || value != 0)
		return -EINVAL;

	mutex_lock(&df->lock);
	memset(df->time_in_state, 0, (df->profile->max_state *
					sizeof(*df->time_in_state)));
	memset(df->trans_table, 0, array3_size(sizeof(unsigned int),
					df->profile->max_state,
					df->profile->max_state));
	df->total_trans = 0;
	df->last_stat_updated = get_jiffies_64();
	mutex_unlock(&df->lock);

	return count;
}
static DEVICE_ATTR_RW(trans_stat);

static struct attribute *devfreq_attrs[] = {
	&dev_attr_name.attr,