<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.linux.kernel.cpufreq">
    <title>gmane.linux.kernel.cpufreq</title>
    <link>http://blog.gmane.org/gmane.linux.kernel.cpufreq</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/11026"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/11018"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/11000"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10987"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10965"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10937"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10931"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10899"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10875"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10864"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10858"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10840"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10836"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10807"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10785"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10776"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10769"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10766"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10758"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10753"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/11026">
    <title>[PATCH 1/2] cpufreq: Fix minor formatting issues</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/11026</link>
    <description>&lt;pre&gt;There were few noticeable formatting issues present in core cpufreq code. This
patch tries to fix them to make code look better. These are:
- Removing few extra blank lines
- Adding few blank lines
- replacing spaces with tabs
- removing unnecessary spaces
- rearranging code a bit
- Fixing multiline comments
- Break lines longer than 80 columns into multi-line.

At the end it also updates copyright information in cpufreq.c to include my name
for 2013.

Signed-off-by: Viresh Kumar &amp;lt;viresh.kumar&amp;lt; at &amp;gt;linaro.org&amp;gt;
---
 drivers/cpufreq/cpufreq.c             | 61 +++++++++++++++--------------------
 drivers/cpufreq/cpufreq_governor.h    |  4 +--
 drivers/cpufreq/cpufreq_performance.c |  4 ---
 drivers/cpufreq/cpufreq_powersave.c   |  6 ++--
 drivers/cpufreq/cpufreq_stats.c       |  4 +--
 drivers/cpufreq/cpufreq_userspace.c   |  4 ---
 include/linux/cpufreq.h               | 41 ++++++++++++-----------
 7 files changed, 52 insertions(+), 72 deletions(-)

diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 2d53f47..7c38842 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3,6 +3,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  *
  *  Copyright (C) 2001 Russell King
  *            (C) 2002 - 2003 Dominik Brodowski &amp;lt;linux&amp;lt; at &amp;gt;brodo.de&amp;gt;
+ *            (C) 2013 Viresh Kumar &amp;lt;viresh.kumar&amp;lt; at &amp;gt;linaro.org&amp;gt;
  *
  *  Oct 2005 - Ashok Raj &amp;lt;ashok.raj&amp;lt; at &amp;gt;intel.com&amp;gt;
  *Added handling for CPU hotplug
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -12,7 +13,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
  */
 
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -41,11 +41,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  */
 static struct cpufreq_driver *cpufreq_driver;
 static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data);
+static DEFINE_RWLOCK(cpufreq_driver_lock);
+
 #ifdef CONFIG_HOTPLUG_CPU
 /* This one keeps track of the previously set governor of a removed CPU */
 static DEFINE_PER_CPU(char[CPUFREQ_NAME_LEN], cpufreq_cpu_governor);
 #endif
-static DEFINE_RWLOCK(cpufreq_driver_lock);
 
 /*
  * cpu_policy_rwsem is a per CPU reader-writer semaphore designed to cure
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -150,7 +151,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static struct cpufreq_policy *__cpufreq_cpu_get(unsigned int cpu, bool sysfs)
 if (!try_module_get(cpufreq_driver-&amp;gt;owner))
 goto err_out_unlock;
 
-
 /* get the CPU */
 data = per_cpu(cpufreq_cpu_data, cpu);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -220,7 +220,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void cpufreq_cpu_put_sysfs(struct cpufreq_policy *data)
  */
 #ifndef CONFIG_SMP
 static unsigned long l_p_j_ref;
-static unsigned int  l_p_j_ref_freq;
+static unsigned int l_p_j_ref_freq;
 
 static void adjust_jiffies(unsigned long val, struct cpufreq_freqs *ci)
 {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -233,7 +233,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void adjust_jiffies(unsigned long val, struct cpufreq_freqs *ci)
 pr_debug("saving %lu as reference value for loops_per_jiffy; "
 "freq is %u kHz\n", l_p_j_ref, l_p_j_ref_freq);
 }
-if ((val == CPUFREQ_POSTCHANGE  &amp;amp;&amp;amp; ci-&amp;gt;old != ci-&amp;gt;new) ||
+if ((val == CPUFREQ_POSTCHANGE &amp;amp;&amp;amp; ci-&amp;gt;old != ci-&amp;gt;new) ||
     (val == CPUFREQ_RESUMECHANGE || val == CPUFREQ_SUSPENDCHANGE)) {
 loops_per_jiffy = cpufreq_scale(l_p_j_ref, l_p_j_ref_freq,
 ci-&amp;gt;new);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -248,7 +248,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static inline void adjust_jiffies(unsigned long val, struct cpufreq_freqs *ci)
 }
 #endif
 
-
 void __cpufreq_notify_transition(struct cpufreq_policy *policy,
 struct cpufreq_freqs *freqs, unsigned int state)
 {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -294,6 +293,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void __cpufreq_notify_transition(struct cpufreq_policy *policy,
 break;
 }
 }
+
 /**
  * cpufreq_notify_transition - call notifier chain and adjust_jiffies
  * on frequency transition.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -311,7 +311,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void cpufreq_notify_transition(struct cpufreq_policy *policy,
 EXPORT_SYMBOL_GPL(cpufreq_notify_transition);
 
 
-
 /*********************************************************************
  *                          SYSFS INTERFACE                          *
  *********************************************************************/
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -376,7 +375,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; out:
 return err;
 }
 
-
 /**
  * cpufreq_per_cpu_attr_read() / show_##file_name() -
  * print out cpufreq information
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -441,7 +439,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static ssize_t show_cpuinfo_cur_freq(struct cpufreq_policy *policy,
 return sprintf(buf, "%u\n", cur_freq);
 }
 
-
 /**
  * show_scaling_governor - show the current policy for the specified CPU
  */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -457,7 +454,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static ssize_t show_scaling_governor(struct cpufreq_policy *policy, char *buf)
 return -EINVAL;
 }
 
-
 /**
  * store_scaling_governor - store policy for the specified CPU
  */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -480,8 +476,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static ssize_t store_scaling_governor(struct cpufreq_policy *policy,
 &amp;amp;new_policy.governor))
 return -EINVAL;
 
-/* Do not use cpufreq_set_policy here or the user_policy.max
-   will be wrongly overridden */
+/*
+ * Do not use cpufreq_set_policy here or the user_policy.max
+ * will be wrongly overridden
+ */
 ret = __cpufreq_set_policy(policy, &amp;amp;new_policy);
 
 policy-&amp;gt;user_policy.policy = policy-&amp;gt;policy;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1005,7 +1003,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void update_policy_cpu(struct cpufreq_policy *policy, unsigned int cpu)
  * Caller should already have policy_rwsem in write mode for this CPU.
  * This routine frees the rwsem before returning.
  */
-static int __cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif)
+static int __cpufreq_remove_dev(struct device *dev,
+struct subsys_interface *sif)
 {
 unsigned int cpu = dev-&amp;gt;id, ret, cpus;
 unsigned long flags;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1112,7 +1111,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif
 return 0;
 }
 
-
 static int cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif)
 {
 unsigned int cpu = dev-&amp;gt;id;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1125,7 +1123,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif)
 return retval;
 }
 
-
 static void handle_update(struct work_struct *work)
 {
 struct cpufreq_policy *policy =
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1136,7 +1133,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void handle_update(struct work_struct *work)
 }
 
 /**
- *cpufreq_out_of_sync - If actual and saved CPU frequency differs, we're in deep trouble.
+ *cpufreq_out_of_sync - If actual and saved CPU frequency differs, we're
+ *in deep trouble.
  *&amp;lt; at &amp;gt;cpu: cpu number
  *&amp;lt; at &amp;gt;old_freq: CPU frequency the kernel thinks the CPU runs at
  *&amp;lt; at &amp;gt;new_freq: CPU frequency the CPU actually runs at
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1151,7 +1149,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void cpufreq_out_of_sync(unsigned int cpu, unsigned int old_freq,
 struct cpufreq_freqs freqs;
 unsigned long flags;
 
-
 pr_debug("Warning: CPU frequency out of sync: cpufreq and timing "
        "core thinks of %u, is %u kHz.\n", old_freq, new_freq);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1166,7 +1163,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void cpufreq_out_of_sync(unsigned int cpu, unsigned int old_freq,
 cpufreq_notify_transition(policy, &amp;amp;freqs, CPUFREQ_POSTCHANGE);
 }
 
-
 /**
  * cpufreq_quick_get - get the CPU frequency (in kHz) from policy-&amp;gt;cur
  * &amp;lt; at &amp;gt;cpu: CPU number
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1212,7 +1208,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; unsigned int cpufreq_quick_get_max(unsigned int cpu)
 }
 EXPORT_SYMBOL(cpufreq_quick_get_max);
 
-
 static unsigned int __cpufreq_get(unsigned int cpu)
 {
 struct cpufreq_policy *policy = per_cpu(cpufreq_cpu_data, cpu);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1271,7 +1266,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static struct subsys_interface cpufreq_interface = {
 .remove_dev= cpufreq_remove_dev,
 };
 
-
 /**
  * cpufreq_bp_suspend - Prepare the boot CPU for system suspend.
  *
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1408,11 +1402,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int cpufreq_register_notifier(struct notifier_block *nb, unsigned int list)
 }
 EXPORT_SYMBOL(cpufreq_register_notifier);
 
-
 /**
  *cpufreq_unregister_notifier - unregister a driver with cpufreq
  *&amp;lt; at &amp;gt;nb: notifier block to be unregistered
- *      &amp;lt; at &amp;gt;list: CPUFREQ_TRANSITION_NOTIFIER or CPUFREQ_POLICY_NOTIFIER
+ *&amp;lt; at &amp;gt;list: CPUFREQ_TRANSITION_NOTIFIER or CPUFREQ_POLICY_NOTIFIER
  *
  *Remove a driver from the CPU frequency notifier list.
  *
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1448,7 +1441,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; EXPORT_SYMBOL(cpufreq_unregister_notifier);
  *                              GOVERNORS                            *
  *********************************************************************/
 
-
 int __cpufreq_driver_target(struct cpufreq_policy *policy,
     unsigned int target_freq,
     unsigned int relation)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1581,7 +1573,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __cpufreq_governor(struct cpufreq_policy *policy,
 return ret;
 }
 
-
 int cpufreq_register_governor(struct cpufreq_governor *governor)
 {
 int err;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1606,7 +1597,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int cpufreq_register_governor(struct cpufreq_governor *governor)
 }
 EXPORT_SYMBOL_GPL(cpufreq_register_governor);
 
-
 void cpufreq_unregister_governor(struct cpufreq_governor *governor)
 {
 #ifdef CONFIG_HOTPLUG_CPU
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1636,7 +1626,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void cpufreq_unregister_governor(struct cpufreq_governor *governor)
 EXPORT_SYMBOL_GPL(cpufreq_unregister_governor);
 
 
-
 /*********************************************************************
  *                          POLICY INTERFACE                         *
  *********************************************************************/
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1665,7 +1654,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu)
 }
 EXPORT_SYMBOL(cpufreq_get_policy);
 
-
 /*
  * data   : current policy.
  * policy : policy to be set.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1699,8 +1687,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __cpufreq_set_policy(struct cpufreq_policy *data,
 blocking_notifier_call_chain(&amp;amp;cpufreq_policy_notifier_list,
 CPUFREQ_INCOMPATIBLE, policy);
 
-/* verify the cpu speed can be set within this limit,
-   which might be different to the first one */
+/*
+ * verify the cpu speed can be set within this limit, which might be
+ * different to the first one
+ */
 ret = cpufreq_driver-&amp;gt;verify(policy);
 if (ret)
 goto error_out;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1802,8 +1792,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int cpufreq_update_policy(unsigned int cpu)
 policy.policy = data-&amp;gt;user_policy.policy;
 policy.governor = data-&amp;gt;user_policy.governor;
 
-/* BIOS might change freq behind our back
-  -&amp;gt; ask driver for current freq and notify governors about a change */
+/*
+ * BIOS might change freq behind our back
+ * -&amp;gt; ask driver for current freq and notify governors about a change
+ */
 if (cpufreq_driver-&amp;gt;get) {
 policy.cur = cpufreq_driver-&amp;gt;get(cpu);
 if (!data-&amp;gt;cur) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1852,7 +1844,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __cpuinit cpufreq_cpu_callback(struct notifier_block *nfb,
 }
 
 static struct notifier_block __refdata cpufreq_cpu_notifier = {
-    .notifier_call = cpufreq_cpu_callback,
+.notifier_call = cpufreq_cpu_callback,
 };
 
 /*********************************************************************
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1864,7 +1856,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static struct notifier_block __refdata cpufreq_cpu_notifier = {
  * &amp;lt; at &amp;gt;driver_data: A struct cpufreq_driver containing the values#
  * submitted by the CPU Frequency driver.
  *
- *   Registers a CPU Frequency driver to this core code. This code
+ * Registers a CPU Frequency driver to this core code. This code
  * returns zero on success, -EBUSY when another driver got here first
  * (and isn't unregistered in the meantime).
  *
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1931,11 +1923,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; err_null_driver:
 }
 EXPORT_SYMBOL_GPL(cpufreq_register_driver);
 
-
 /**
  * cpufreq_unregister_driver - unregister the current CPUFreq driver
  *
- *    Unregister the current CPUFreq driver. Only call this if you have
+ * Unregister the current CPUFreq driver. Only call this if you have
  * the right to do so, i.e. if you have succeeded in initialising before!
  * Returns zero if successful, and -EINVAL if the cpufreq_driver is
  * currently not initialised.
diff --git a/drivers/cpufreq/cpufreq_governor.h b/drivers/cpufreq/cpufreq_governor.h
index e16a961..72e7994 100644
--- a/drivers/cpufreq/cpufreq_governor.h
+++ b/drivers/cpufreq/cpufreq_governor.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -81,7 +81,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static ssize_t show_##file_name##_gov_sys\
 return sprintf(buf, "%u\n", tuners-&amp;gt;file_name);\
 }\
 \
-static ssize_t show_##file_name##_gov_pol\
+static ssize_t show_##file_name##_gov_pol\
 (struct cpufreq_policy *policy, char *buf)\
 {\
 struct dbs_data *dbs_data = policy-&amp;gt;governor_data;\
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -91,7 +91,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static ssize_t show_##file_name##_gov_pol\
 
 #define store_one(_gov, file_name)\
 static ssize_t store_##file_name##_gov_sys\
-(struct kobject *kobj, struct attribute *attr, const char *buf, size_t count)\
+(struct kobject *kobj, struct attribute *attr, const char *buf, size_t count) \
 {\
 struct dbs_data *dbs_data = _gov##_dbs_cdata.gdbs_data;\
 return store_##file_name(dbs_data, buf, count);\
diff --git a/drivers/cpufreq/cpufreq_performance.c b/drivers/cpufreq/cpufreq_performance.c
index ceee068..9fef7d6 100644
--- a/drivers/cpufreq/cpufreq_performance.c
+++ b/drivers/cpufreq/cpufreq_performance.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -17,7 +17,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include &amp;lt;linux/cpufreq.h&amp;gt;
 #include &amp;lt;linux/init.h&amp;gt;
 
-
 static int cpufreq_governor_performance(struct cpufreq_policy *policy,
 unsigned int event)
 {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -44,19 +43,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct cpufreq_governor cpufreq_gov_performance = {
 .owner= THIS_MODULE,
 };
 
-
 static int __init cpufreq_gov_performance_init(void)
 {
 return cpufreq_register_governor(&amp;amp;cpufreq_gov_performance);
 }
 
-
 static void __exit cpufreq_gov_performance_exit(void)
 {
 cpufreq_unregister_governor(&amp;amp;cpufreq_gov_performance);
 }
 
-
 MODULE_AUTHOR("Dominik Brodowski &amp;lt;linux&amp;lt; at &amp;gt;brodo.de&amp;gt;");
 MODULE_DESCRIPTION("CPUfreq policy governor 'performance'");
 MODULE_LICENSE("GPL");
diff --git a/drivers/cpufreq/cpufreq_powersave.c b/drivers/cpufreq/cpufreq_powersave.c
index 2d948a1..32109a1 100644
--- a/drivers/cpufreq/cpufreq_powersave.c
+++ b/drivers/cpufreq/cpufreq_powersave.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,7 +1,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 /*
- *  linux/drivers/cpufreq/cpufreq_powersave.c
+ * linux/drivers/cpufreq/cpufreq_powersave.c
  *
- *  Copyright (C) 2002 - 2003 Dominik Brodowski &amp;lt;linux&amp;lt; at &amp;gt;brodo.de&amp;gt;
+ * Copyright (C) 2002 - 2003 Dominik Brodowski &amp;lt;linux&amp;lt; at &amp;gt;brodo.de&amp;gt;
  *
  *
  * This program is free software; you can redistribute it and/or modify
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -48,13 +48,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __init cpufreq_gov_powersave_init(void)
 return cpufreq_register_governor(&amp;amp;cpufreq_gov_powersave);
 }
 
-
 static void __exit cpufreq_gov_powersave_exit(void)
 {
 cpufreq_unregister_governor(&amp;amp;cpufreq_gov_powersave);
 }
 
-
 MODULE_AUTHOR("Dominik Brodowski &amp;lt;linux&amp;lt; at &amp;gt;brodo.de&amp;gt;");
 MODULE_DESCRIPTION("CPUfreq policy governor 'powersave'");
 MODULE_LICENSE("GPL");
diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c
index fb65dec..6d35caa 100644
--- a/drivers/cpufreq/cpufreq_stats.c
+++ b/drivers/cpufreq/cpufreq_stats.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -27,7 +27,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static spinlock_t cpufreq_stats_lock;
 struct cpufreq_stats {
 unsigned int cpu;
 unsigned int total_trans;
-unsigned long long  last_time;
+unsigned long long last_time;
 unsigned int max_state;
 unsigned int state_num;
 unsigned int last_index;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -116,7 +116,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static ssize_t show_trans_table(struct cpufreq_policy *policy, char *buf)
 len += snprintf(buf + len, PAGE_SIZE - len, "%9u: ",
 stat-&amp;gt;freq_table[i]);
 
-for (j = 0; j &amp;lt; stat-&amp;gt;state_num; j++)   {
+for (j = 0; j &amp;lt; stat-&amp;gt;state_num; j++) {
 if (len &amp;gt;= PAGE_SIZE)
 break;
 len += snprintf(buf + len, PAGE_SIZE - len, "%9u ",
diff --git a/drivers/cpufreq/cpufreq_userspace.c b/drivers/cpufreq/cpufreq_userspace.c
index bbeb9c0..c4f2dc3 100644
--- a/drivers/cpufreq/cpufreq_userspace.c
+++ b/drivers/cpufreq/cpufreq_userspace.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -104,7 +104,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int cpufreq_set(struct cpufreq_policy *policy, unsigned int freq)
 return ret;
 }
 
-
 static ssize_t show_speed(struct cpufreq_policy *policy, char *buf)
 {
 return sprintf(buf, "%u\n", per_cpu(cpu_cur_freq, policy-&amp;gt;cpu));
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -185,7 +184,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int cpufreq_governor_userspace(struct cpufreq_policy *policy,
 return rc;
 }
 
-
 #ifndef CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE
 static
 #endif
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -202,13 +200,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __init cpufreq_gov_userspace_init(void)
 return cpufreq_register_governor(&amp;amp;cpufreq_gov_userspace);
 }
 
-
 static void __exit cpufreq_gov_userspace_exit(void)
 {
 cpufreq_unregister_governor(&amp;amp;cpufreq_gov_userspace);
 }
 
-
 MODULE_AUTHOR("Dominik Brodowski &amp;lt;linux&amp;lt; at &amp;gt;brodo.de&amp;gt;, "
 "Russell King &amp;lt;rmk&amp;lt; at &amp;gt;arm.linux.org.uk&amp;gt;");
 MODULE_DESCRIPTION("CPUfreq policy governor 'userspace'");
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 037d36a..dc204c3 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,8 +1,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 /*
- *  linux/include/linux/cpufreq.h
+ * linux/include/linux/cpufreq.h
  *
- *  Copyright (C) 2001 Russell King
- *            (C) 2002 - 2003 Dominik Brodowski &amp;lt;linux&amp;lt; at &amp;gt;brodo.de&amp;gt;
+ * Copyright (C) 2001 Russell King
+ *           (C) 2002 - 2003 Dominik Brodowski &amp;lt;linux&amp;lt; at &amp;gt;brodo.de&amp;gt;
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -26,7 +26,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 /* Print length for names. Extra 1 space for accomodating '\n' in prints */
 #define CPUFREQ_NAME_PLEN (CPUFREQ_NAME_LEN + 1)
 
-
 /*********************************************************************
  *                     CPUFREQ NOTIFIER INTERFACE                    *
  *********************************************************************/
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -148,17 +147,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct cpufreq_freqs {
 u8 flags;/* flags of cpufreq_driver, see below. */
 };
 
-
 /**
- * cpufreq_scale - "old * mult / div" calculation for large values (32-bit-arch safe)
+ * cpufreq_scale - "old * mult / div" calculation for large values (32-bit-arch
+ * safe)
  * &amp;lt; at &amp;gt;old:   old value
  * &amp;lt; at &amp;gt;div:   divisor
  * &amp;lt; at &amp;gt;mult:  multiplier
  *
  *
- *    new = old * mult / div
+ * new = old * mult / div
  */
-static inline unsigned long cpufreq_scale(unsigned long old, u_int div, u_int mult)
+static inline unsigned long cpufreq_scale(unsigned long old, u_int div,
+u_int mult)
 {
 #if BITS_PER_LONG == 32
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -211,14 +211,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; extern int __cpufreq_driver_target(struct cpufreq_policy *policy,
    unsigned int target_freq,
    unsigned int relation);
 
-
 extern int __cpufreq_driver_getavg(struct cpufreq_policy *policy,
    unsigned int cpu);
 
 int cpufreq_register_governor(struct cpufreq_governor *governor);
 void cpufreq_unregister_governor(struct cpufreq_governor *governor);
 
-
 /*********************************************************************
  *                      CPUFREQ DRIVER INTERFACE                     *
  *********************************************************************/
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -229,7 +227,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void cpufreq_unregister_governor(struct cpufreq_governor *governor);
 struct freq_attr;
 
 struct cpufreq_driver {
-struct module           *owner;
+struct module*owner;
 charname[CPUFREQ_NAME_LEN];
 u8flags;
 /*
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -277,11 +275,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct cpufreq_driver {
 int cpufreq_register_driver(struct cpufreq_driver *driver_data);
 int cpufreq_unregister_driver(struct cpufreq_driver *driver_data);
 
-
 void cpufreq_notify_transition(struct cpufreq_policy *policy,
 struct cpufreq_freqs *freqs, unsigned int state);
 
-static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy, unsigned int min, unsigned int max)
+static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy,
+unsigned int min, unsigned int max)
 {
 if (policy-&amp;gt;min &amp;lt; min)
 policy-&amp;gt;min = min;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -342,7 +340,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int cpufreq_update_policy(unsigned int cpu);
 bool have_governor_per_policy(void);
 
 #ifdef CONFIG_CPU_FREQ
-/* query the current CPU frequency (in kHz). If zero, cpufreq couldn't detect it */
+/*
+ * query the current CPU frequency (in kHz). If zero, cpufreq couldn't detect it
+ */
 unsigned int cpufreq_get(unsigned int cpu);
 #else
 static inline unsigned int cpufreq_get(unsigned int cpu)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -351,7 +351,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static inline unsigned int cpufreq_get(unsigned int cpu)
 }
 #endif
 
-/* query the last known CPU freq (in kHz). If zero, cpufreq couldn't detect it */
+/*
+ * query the last known CPU freq (in kHz). If zero, cpufreq couldn't detect it
+ */
 #ifdef CONFIG_CPU_FREQ
 unsigned int cpufreq_quick_get(unsigned int cpu);
 unsigned int cpufreq_quick_get_max(unsigned int cpu);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -366,16 +368,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static inline unsigned int cpufreq_quick_get_max(unsigned int cpu)
 }
 #endif
 
-
 /*********************************************************************
  *                       CPUFREQ DEFAULT GOVERNOR                    *
  *********************************************************************/
 
-
 /*
-  Performance governor is fallback governor if any other gov failed to
-  auto load due latency restrictions
-*/
+ * Performance governor is fallback governor if any other gov failed to auto
+ * load due latency restrictions
+ */
 #ifdef CONFIG_CPU_FREQ_GOV_PERFORMANCE
 extern struct cpufreq_governor cpufreq_gov_performance;
 #endif
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -395,7 +395,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; extern struct cpufreq_governor cpufreq_gov_conservative;
 #define CPUFREQ_DEFAULT_GOVERNOR(&amp;amp;cpufreq_gov_conservative)
 #endif
 
-
 /*********************************************************************
  *                     FREQUENCY TABLE HELPERS                       *
  *********************************************************************/
&lt;/pre&gt;</description>
    <dc:creator>Viresh Kumar</dc:creator>
    <dc:date>2013-06-19T08:49:33</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/11018">
    <title>[PATCH v8] Cpufreq: Fix governor start/stop race condition</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/11018</link>
    <description>&lt;pre&gt;Cpufreq governor's stop and start operation should be kept in sequence.
If not, there will be unexpected behavior, for example:

There are 4 CPUs and policy-&amp;gt;cpu=CPU0, CPU1/2/3 are linked to CPU0.
The normal sequence is as below:

1) Current governor is userspace, One application tries to set
governor to ondemand. It will call __cpufreq_set_policy in which it
will stop userspace governor and then start ondemand governor.

2) Current governor is userspace, Now CPU0 hotplugs in CPU3 (put CPU3 online),
It will call cpufreq_add_policy_cpu in which it first stops userspace
governor, and then starts userspace governor.

Now if the sequence of above two cases interleaves, It becomes like below:

1) Application stops userspace governor
2)                                      Hotplug stops userspace governor
3) Application starts ondemand governor
4)                                      Hotplug starts a governor

In step 4, Hotplug is supposed to start userspace governor, But now
the governor has been changed by application to ondemand, So hotplug
starts ondemand governor again !!!!

The solution is: Do not allow stop policy's governor multi-times.
Governor should only be stopped once for one policy, After it is stopped,
No other governor stop operation should be executed. also add one mutex to
protect __cpufreq_governor so governor operation can be kept in sequence.

Change-Id: Ibd384d1f72c6e5e8e59059819a3cc47e914ae036
Signed-off-by: Xiaoguang Chen &amp;lt;chenxg&amp;lt; at &amp;gt;marvell.com&amp;gt;
Acked-by: Viresh Kumar &amp;lt;viresh.kumar&amp;lt; at &amp;gt;linaro.org&amp;gt;
---
 drivers/cpufreq/cpufreq.c | 24 ++++++++++++++++++++++++
 include/linux/cpufreq.h   |  1 +
 2 files changed, 25 insertions(+)

diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 2d53f47..6f5aa6f 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -46,6 +46,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data);
 static DEFINE_PER_CPU(char[CPUFREQ_NAME_LEN], cpufreq_cpu_governor);
 #endif
 static DEFINE_RWLOCK(cpufreq_driver_lock);
+static DEFINE_MUTEX(cpufreq_governor_lock);
 
 /*
  * cpu_policy_rwsem is a per CPU reader-writer semaphore designed to cure
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1562,6 +1563,21 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __cpufreq_governor(struct cpufreq_policy *policy,
 
 pr_debug("__cpufreq_governor for CPU %u, event %u\n",
 policy-&amp;gt;cpu, event);
+
+mutex_lock(&amp;amp;cpufreq_governor_lock);
+if ((!policy-&amp;gt;governor_enabled &amp;amp;&amp;amp; (event == CPUFREQ_GOV_STOP)) ||
+    (policy-&amp;gt;governor_enabled &amp;amp;&amp;amp; (event == CPUFREQ_GOV_START))) {
+mutex_unlock(&amp;amp;cpufreq_governor_lock);
+return -EBUSY;
+}
+
+if (event == CPUFREQ_GOV_STOP)
+policy-&amp;gt;governor_enabled = false;
+else if (event == CPUFREQ_GOV_START)
+policy-&amp;gt;governor_enabled = true;
+
+mutex_unlock(&amp;amp;cpufreq_governor_lock);
+
 ret = policy-&amp;gt;governor-&amp;gt;governor(policy, event);
 
 if (!ret) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1569,6 +1585,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __cpufreq_governor(struct cpufreq_policy *policy,
 policy-&amp;gt;governor-&amp;gt;initialized++;
 else if (event == CPUFREQ_GOV_POLICY_EXIT)
 policy-&amp;gt;governor-&amp;gt;initialized--;
+} else {
+/* Restore original values */
+mutex_lock(&amp;amp;cpufreq_governor_lock);
+if (event == CPUFREQ_GOV_STOP)
+policy-&amp;gt;governor_enabled = true;
+else if (event == CPUFREQ_GOV_START)
+policy-&amp;gt;governor_enabled = false;
+mutex_unlock(&amp;amp;cpufreq_governor_lock);
 }
 
 /* we keep one module reference alive for
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 037d36a..1a81b74 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -107,6 +107,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct cpufreq_policy {
 unsigned intpolicy; /* see above */
 struct cpufreq_governor*governor; /* see below */
 void*governor_data;
+boolgovernor_enabled; /* governor start/stop flag */
 
 struct work_structupdate; /* if update_policy() needs to be
  * called, but you're in IRQ context */
&lt;/pre&gt;</description>
    <dc:creator>Xiaoguang Chen</dc:creator>
    <dc:date>2013-06-19T06:39:54</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/11000">
    <title>3.10-rcX: cpu governor ondemand doesn't scale well after s2ram</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/11000</link>
    <description>&lt;pre&gt;At a stable 32bit Gentoo Linux with a i5 processor (2.6 GHZ max, 3.1 GHz
boost) I've to change the governor after a s2ram all 4 cores from
"ondemand" to "performance" and back to "ondemand", otherwise cpu1 till
cpu3 would stay after s2ram at 2.6 GHz (whilst cpu0 is at the expected
800 MHz if no load is at the system) - FWIW I do set ignore_nice to "1".

3.9.6 is ok, the bug was introduces somewhere in 3.10-rcX.

&lt;/pre&gt;</description>
    <dc:creator>Toralf Förster</dc:creator>
    <dc:date>2013-06-18T15:57:36</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10987">
    <title>(unknown)</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10987</link>
    <description>&lt;pre&gt;


Loan Syndicacion

Am AFG Guaranty Trust Bank, zu strukturieren wir Kreditlinien treffen Sie
unsere
Kunden spezifischen geschäftlichen Anforderungen und einen deutlichen
Mehrwert für unsere
Kunden Unternehmen.
eine Division der AFG Finance und Private Bank plc.

Wenn Sie erwägen, eine große Akquisition oder ein Großprojekt sind, können
Sie
brauchen eine erhebliche Menge an Kredit. AFG Guaranty Trust Bank setzen
können
zusammen das Syndikat, das die gesamte Kredit schnürt für
Sie.


Als Bank mit internationaler Reichweite, sind wir gekommen, um Darlehen zu
identifizieren
Syndizierungen als Teil unseres Kerngeschäfts und durch spitzte diese Zeile
aggressiv sind wir an einem Punkt, wo wir kommen, um als erkannt haben
Hauptakteur in diesem Bereich.


öffnen Sie ein Girokonto heute mit einem Minimum Bankguthaben von 500 £ und
Getup zu £ 10.000 als Darlehen und auch den Hauch einer Chance und gewann
die Sterne
Preis von £ 500.000 in die sparen und gewinnen promo in may.aply jetzt.


mit dem Folowing Informationen über Rechtsanwalt steven lee das Konto
Offizier.


FULL NAME;


Wohnadresse;


E-MAIL-ADRESSE;

Telefonnummer;

Nächsten KINS;

MUTTER MAIDEN NAME;


Familienstand;


BÜROADRESSE;

ALTERNATIVE Telefonnummer;

TO &amp;lt; at &amp;gt; yahoo.com bar.stevenlee
NOTE; ALLE Darlehen sind für 10JAHRE RATE VALID
ANGEBOT ENDET BALD SO JETZT HURRY

--
To unsubscribe from this list: send the line "unsubscribe cpufreq" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>AFG GTBANK LOAN</dc:creator>
    <dc:date>2013-06-17T19:03:48</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10965">
    <title>[Bug 59781] New: intel_pstate synchronizes frequencies on wake from suspend</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10965</link>
    <description>&lt;pre&gt;https://bugzilla.kernel.org/show_bug.cgi?id=59781

           Summary: intel_pstate synchronizes frequencies on wake from
                    suspend
           Product: Power Management
           Version: 2.5
    Kernel Version: 3.10.0rc5, 3.10.0rc6
          Platform: All
        OS/Version: Linux
              Tree: Mainline
            Status: NEW
          Severity: normal
          Priority: P1
         Component: cpufreq
        AssignedTo: cpufreq&amp;lt; at &amp;gt;vger.kernel.org
        ReportedBy: pqwoerituytrueiwoq&amp;lt; at &amp;gt;gmail.com
        Regression: No


Created an attachment (id=104841)
 --&amp;gt; (https://bugzilla.kernel.org/attachment.cgi?id=104841)
Behavior before suspend

When 1st boot both my core's frequencies change independently, but once i wake
from suspend they are synchronized
~$ uname -r # http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.10-rc6-saucy/
3.10.0-031000rc6-generic
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver 
intel_pstate
intel_pstate
$ cat /sys/devices/system/cpu/cpu*/cpuidle/driver/name 
intel_idle
intel_idle
$ cat /proc/cpuinfo # Only showing one core
processor    : 1
vendor_id    : GenuineIntel
cpu family    : 6
model        : 42
model name    : Intel(R) Pentium(R) CPU B970 &amp;lt; at &amp;gt; 2.30GHz
stepping    : 7
microcode    : 0x23
cpu MHz        : 1242.000
cache size    : 2048 KB
physical id    : 0
siblings    : 2
core id        : 1
cpu cores    : 2
apicid        : 2
initial apicid    : 2
fpu        : yes
fpu_exception    : yes
cpuid level    : 13
wp        : yes
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm
constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc
aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr
pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave lahf_lm arat epb
xsaveopt pln pts dtherm
bogomips    : 4589.55
clflush size    : 64
cache_alignment    : 64
address sizes    : 36 bits physical, 48 bits virtual
power management:

&lt;/pre&gt;</description>
    <dc:creator>bugzilla-daemon&lt; at &gt;bugzilla.kernel.org</dc:creator>
    <dc:date>2013-06-16T16:12:15</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10937">
    <title>[PATCH v5] cpufreq: fix governor start/stop race condition</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10937</link>
    <description>&lt;pre&gt;cpufreq governor stop and start should be kept in sequence.
If not, there will be unexpected behavior, for example:

we have 4 cpus and policy-&amp;gt;cpu=cpu0, cpu1/2/3 are linked to cpu0.
the normal sequence is as below:

1) Current governor is userspace, one application tries to set
governor to ondemand. it will call __cpufreq_set_policy in which it
will stop userspace governor and then start ondemand governor.

2) Current governor is userspace, now cpu0 hotplugs in cpu3, it will
call cpufreq_add_policy_cpu. on which it first stops userspace
governor, and then starts userspace governor.

Now if the sequence of above two cases interleaves, it becames
below sequence:

1) application stops userspace governor
2)                                      hotplug stops userspace governor
3) application starts ondemand governor
4)                                      hotplug starts a governor

in step 4, hotplug is supposed to start userspace governor, but now
the governor has been changed by application to ondemand, so hotplug
starts ondemand governor again !!!!

The solution is: do not allow stop one policy's governor multi-times
Governor stop should only do once for one policy, after it is stopped,
no other governor stop should be executed. also add one mutext to
protect __cpufreq_governor so governor operation can be kept in sequence.

Signed-off-by: Xiaoguang Chen &amp;lt;chenxg&amp;lt; at &amp;gt;marvell.com&amp;gt;
---
 drivers/cpufreq/cpufreq.c | 24 ++++++++++++++++++++++++
 include/linux/cpufreq.h   |  1 +
 2 files changed, 25 insertions(+)

diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 2d53f47..b51473e 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -46,6 +46,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data);
 static DEFINE_PER_CPU(char[CPUFREQ_NAME_LEN], cpufreq_cpu_governor);
 #endif
 static DEFINE_RWLOCK(cpufreq_driver_lock);
+static DEFINE_MUTEX(cpufreq_governor_lock);
 
 /*
  * cpu_policy_rwsem is a per CPU reader-writer semaphore designed to cure
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1562,6 +1563,21 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __cpufreq_governor(struct cpufreq_policy *policy,
 
 pr_debug("__cpufreq_governor for CPU %u, event %u\n",
 policy-&amp;gt;cpu, event);
+
+mutex_lock(&amp;amp;cpufreq_governor_lock);
+if ((!policy-&amp;gt;governor_enabled &amp;amp;&amp;amp; (event == CPUFREQ_GOV_STOP)) ||
+    (policy-&amp;gt;governor_enabled &amp;amp;&amp;amp; (event == CPUFREQ_GOV_START))) {
+mutex_unlock(&amp;amp;cpufreq_governor_lock);
+return -EBUSY;
+}
+
+if (event == CPUFREQ_GOV_STOP)
+policy-&amp;gt;governor_enabled = 0;
+else if (event == CPUFREQ_GOV_START)
+policy-&amp;gt;governor_enabled = 1;
+
+mutex_unlock(&amp;amp;cpufreq_governor_lock);
+
 ret = policy-&amp;gt;governor-&amp;gt;governor(policy, event);
 
 if (!ret) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1569,6 +1585,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __cpufreq_governor(struct cpufreq_policy *policy,
 policy-&amp;gt;governor-&amp;gt;initialized++;
 else if (event == CPUFREQ_GOV_POLICY_EXIT)
 policy-&amp;gt;governor-&amp;gt;initialized--;
+} else {
+/* Restore original values */
+mutex_lock(&amp;amp;cpufreq_governor_lock);
+if (event == CPUFREQ_GOV_STOP)
+policy-&amp;gt;governor_enabled = 1;
+else if (event == CPUFREQ_GOV_START)
+policy-&amp;gt;governor_enabled = 0;
+mutex_unlock(&amp;amp;cpufreq_governor_lock);
 }
 
 /* we keep one module reference alive for
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 037d36a..c12db73 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -107,6 +107,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct cpufreq_policy {
 unsigned intpolicy; /* see above */
 struct cpufreq_governor*governor; /* see below */
 void*governor_data;
+intgovernor_enabled; /* governor start/stop flag */
 
 struct work_structupdate; /* if update_policy() needs to be
  * called, but you're in IRQ context */
&lt;/pre&gt;</description>
    <dc:creator>Xiaoguang Chen</dc:creator>
    <dc:date>2013-06-13T09:01:58</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10931">
    <title>Solid Carbide Drills and Routers for PCB Industry</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10931</link>
    <description>&lt;pre&gt;Dear General Manager:

Trading here, exporting standard solid PCB drills (dia 3.20mm-6.50mm) and special PCB drills with chip-removal groove and reground chisel edge (dia 1.5mm-6.5mm) with good quality and reasonable price.  

Looking forward to hearing from you soon
 
--------------------------
Archer Hu
Archer&amp;lt; at &amp;gt;wilsonprecisiontool.com
Shanghai Well-Sun Precision Tool Co., Ltd
Add: No. 3 Building, No. 868 Zhenchen Rd, Baoshan District, Shanghai
Tel:021-36162006
Tex:021-36162016
Website: www.well-sun.net&lt;/pre&gt;</description>
    <dc:creator>Archer</dc:creator>
    <dc:date>2013-06-13T01:38:52</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10899">
    <title>[PATCH 00/11] CPUFreq Kconfig fixes</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10899</link>
    <description>&lt;pre&gt;Hi Rafael,

Recently Arnd sent few fixes where drivers were using APIs from freq_table.c but
haven't selected CPU_FREQ_TABLE. Based on that, I just crossed checked all the
places where it should be selected and where it shouldn't be. These are fixes
around that.

I have applied these in my cpufreq-kconfig-fixes branch. Will send you a pull
request separately once I get some Acks (will wait for few days).

Viresh Kumar (11):
  cpufreq: blackfin: enable driver for CONFIG_BFIN_CPU_FREQ
  cpufreq: cris: select CPU_FREQ_TABLE
  cpufreq: davinci: select CPU_FREQ_TABLE
  cpufreq: exynos: select CPU_FREQ_TABLE
  cpufreq: highbank: remove select CPU_FREQ_TABLE
  cpufreq: imx: select CPU_FREQ_TABLE
  cpufreq: powerpc: CBE_RAS: select CPU_FREQ_TABLE
  cpufreq: pxa: select CPU_FREQ_TABLE
  cpufreq: S3C2416/S3C64XX: select CPU_FREQ_TABLE
  cpufreq: tegra: select CPU_FREQ_TABLE for ARCH_TEGRA
  cpufreq: X86_AMD_FREQ_SENSITIVITY: select CPU_FREQ_TABLE

 arch/arm/mach-davinci/Kconfig   | 1 +
 arch/arm/mach-pxa/Kconfig       | 3 +++
 arch/arm/mach-tegra/Kconfig     | 4 +---
 arch/cris/Kconfig               | 2 ++
 drivers/cpufreq/Kconfig.arm     | 6 +++++-
 drivers/cpufreq/Kconfig.powerpc | 1 +
 drivers/cpufreq/Kconfig.x86     | 1 +
 drivers/cpufreq/Makefile        | 2 +-
 8 files changed, 15 insertions(+), 5 deletions(-)

&lt;/pre&gt;</description>
    <dc:creator>Viresh Kumar</dc:creator>
    <dc:date>2013-06-12T08:15:07</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10875">
    <title>Comfirm Your Winning!</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10875</link>
    <description>&lt;pre&gt;Comfirm Your Winning!

This email is to notify you that you have won an Award Sum of 1000,000:00 Euro (One million Euro) only in an E-mail Postcode Loterij Promotion program held on 10th June 2013 in Amsterdam, The Netherlands. contact the claim officer with your winning Reference and For more information.


1.Reference Number: AZ64213/124/04
2.Ticket Number: KS3421/44/9212
3.Batch Number:  413759371BL
4.Award Number: NL91/84/4937B

Name: Mr.Amson Kooten.
Tel: +31616237220,
E-mail: postcodelotdesk&amp;lt; at &amp;gt;aim.com&amp;lt;mailto:postcodelotdesk&amp;lt; at &amp;gt;aim.com&amp;gt;

(1)Your Full Name:
(2)Your Tel. Number:
(3)Your Nationality:
(4)Your Full Email Address:

Congratulations
Sincerely Yours
Mrs.Verra Montage.
Operations Manager.






--
To unsubscribe from this list: send the line "unsubscribe cpufreq" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Garvey, Sheila</dc:creator>
    <dc:date>2013-06-10T15:30:30</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10864">
    <title>[PATCH v2] cpufreq: fix governor start/stop race condition</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10864</link>
    <description>&lt;pre&gt;cpufreq governor stop and start should be kept in sequence.
If not, there will be unexpected behavior, for example:

we have 4 cpus and policy-&amp;gt;cpu=cpu0, cpu1/2/3 are linked to cpu0.
the normal sequence is as below:

1) Current governor is userspace, one application tries to set
governor to ondemand. it will call __cpufreq_set_policy in which it
will stop userspace governor and then start ondemand governor.

2) Current governor is userspace, now cpu0 hotplugs in cpu3, it will
call cpufreq_add_policy_cpu. on which it first stops userspace
governor, and then starts userspace governor.

Now if the sequence of above two cases interleaves, it becames
below sequence:

1) application stops userspace governor
2)                                      hotplug stops userspace governor
3) application starts ondemand governor
4)                                      hotplug starts a governor

in step 4, hotplug is supposed to start userspace governor, but now
the governor has been changed by application to ondemand, so hotplug
starts ondemand governor again !!!!

The solution is: do not allow stop governor multi-times
Governor stop should only do once, after it is stopped,
no other governor stop should be executed.

Signed-off-by: Xiaoguang Chen &amp;lt;chenxg&amp;lt; at &amp;gt;marvell.com&amp;gt;
---
 drivers/cpufreq/cpufreq.c | 10 +++++++++-
 include/linux/cpufreq.h   |  1 +
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 2d53f47..c8d7cb2 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1562,6 +1562,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __cpufreq_governor(struct cpufreq_policy *policy,
 
 pr_debug("__cpufreq_governor for CPU %u, event %u\n",
 policy-&amp;gt;cpu, event);
+
+if ((!policy-&amp;gt;governor-&amp;gt;enabled &amp;amp;&amp;amp; (event == CPUFREQ_GOV_STOP)) ||
+    (policy-&amp;gt;governor-&amp;gt;enabled &amp;amp;&amp;amp; (event == CPUFREQ_GOV_START)))
+return 0;
+
 ret = policy-&amp;gt;governor-&amp;gt;governor(policy, event);
 
 if (!ret) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1569,6 +1574,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __cpufreq_governor(struct cpufreq_policy *policy,
 policy-&amp;gt;governor-&amp;gt;initialized++;
 else if (event == CPUFREQ_GOV_POLICY_EXIT)
 policy-&amp;gt;governor-&amp;gt;initialized--;
+else if (event == CPUFREQ_GOV_STOP)
+policy-&amp;gt;governor-&amp;gt;enabled = 0;
+else if (event == CPUFREQ_GOV_START)
+policy-&amp;gt;governor-&amp;gt;enabled = 1;
 }
 
 /* we keep one module reference alive for
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1581,7 +1590,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int __cpufreq_governor(struct cpufreq_policy *policy,
 return ret;
 }
 
-
 int cpufreq_register_governor(struct cpufreq_governor *governor)
 {
 int err;
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 037d36a..16c5b70 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -199,6 +199,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct cpufreq_governor {
 will fallback to performance governor */
 struct list_headgovernor_list;
 struct module*owner;
+int enabled;
 };
 
 /*
&lt;/pre&gt;</description>
    <dc:creator>Xiaoguang Chen</dc:creator>
    <dc:date>2013-06-09T07:50:05</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10858">
    <title>[Bug 59481] New: Intel Pstates driver issues, including CPU frequency not stepping up enough</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10858</link>
    <description>&lt;pre&gt;https://bugzilla.kernel.org/show_bug.cgi?id=59481

           Summary: Intel Pstates driver issues, including CPU frequency
                    not stepping up enough
           Product: Power Management
           Version: 2.5
    Kernel Version: 3.10.0-rc4+
          Platform: All
        OS/Version: Linux
              Tree: Mainline
            Status: NEW
          Severity: normal
          Priority: P1
         Component: cpufreq
        AssignedTo: cpufreq&amp;lt; at &amp;gt;vger.kernel.org
        ReportedBy: dsmythies&amp;lt; at &amp;gt;telus.net
        Regression: No


Created an attachment (id=103961)
 --&amp;gt; (https://bugzilla.kernel.org/attachment.cgi?id=103961)
1 of 4 - CPU always under 100% load between samples

Kernel (from: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git)
doug&amp;lt; at &amp;gt;s15:~/temp$ uname -a
Linux s15 3.10.0-rc4+ #1 SMP Sat Jun 8 08:48:15 PDT 2013 x86_64 x86_64 x86_64
GNU/Linux
However, much of my testing work was done on a distro specific version of
3.10rc4, and then I confirmed the same results on the above kernel.

Processor:
vendor_id       : GenuineIntel
cpu family      : 6
model           : 42
model name      : Intel(R) Core(TM) i7-2600K CPU &amp;lt; at &amp;gt; 3.40GHz
stepping        : 7
microcode       : 0x26

maximum frequency, turbo on = 3.8 GHz = 100%
maximum frequency, turbo off = 2.4 GHz = 100% (when turbo disabled, apparently)
minimum frequency = 1.6 GHz = 42% of max, turbo on or 47% of max, turbo off
(see comments about min freq later)

Note 1: Thermal throttling is not the issue in any of these tests.
Note 2: I realize that can use intel_pstate=disable to be able to do some
things mentioned herein, but I am just trying to help with this driver.
Note 3: I have read everything I could find about this new driver, but that
doesn't mean I didn't miss something important.

Issue 1 (the main issue):

pstate driver conditions:
"powersave"
/sys/devices/system/cpu/intel_pstate/max_perf_pct = 100
/sys/devices/system/cpu/intel_pstate/min_perf_pct = 42
/sys/devices/system/cpu/intel_pstate/no_turbo = 0 or 1, it does not matter

Note: problem does not occur under these conditions:
"performance"
/sys/devices/system/cpu/intel_pstate/max_perf_pct = 100
/sys/devices/system/cpu/intel_pstate/min_perf_pct = 100
/sys/devices/system/cpu/intel_pstate/no_turbo = 0 (1 not tested)

Sometimes (approximately 20% of the time, sample size 1000 tests for each
pstate driver conditions listed above), when a CPU intensive single thread task
is started, the CPU only ramps up to 1.768 GHz instead of the maximum
frequency. When this occurs, more load can be added and added until all CPUs
are fully loaded and the CPU frequency will never increase.

Example (issue occurring):

doug&amp;lt; at &amp;gt;s15:~/temp$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq
1768000
1768000
1768000
1768000
1768000
1768000
1768000
1768000

top - 09:56:37 up 51 min,  3 users,  load average: 8.00, 7.99, 6.84
Tasks: 154 total,   9 running, 145 sleeping,   0 stopped,   0 zombie
Cpu0  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  : 99.7%us,  0.3%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Example (issue not occurring, single CPU (7) loaded):

doug&amp;lt; at &amp;gt;s15:~/temp$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq
3672000
3672000
3638000
3774000
3672000
3502000
3604000
3774000  &amp;lt;&amp;lt;&amp;lt;&amp;lt; The active fully loaded CPU

top - 10:00:22 up 55 min,  3 users,  load average: 2.75, 6.29, 6.49
Tasks: 147 total,   2 running, 145 sleeping,   0 stopped,   0 zombie
Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  0.0%sy,  0.0%ni, 99.7%id,  0.3%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Issue 2:

When turbo is turned off, it seems that max_perf_pct = 100 now means 3.4 GHz
(see test result graphs). So, shouldn't min_perf_pct now become 47 percent (for
my case)? Or, min should always be 47 and max should be 100 for turbo off and
112 for turbo on?

Issue 3:

Sometimes it is desirable to lock the CPU frequencies at some value, at least
when it is active. Now, these settings work fine:

"performance"
/sys/devices/system/cpu/intel_pstate/max_perf_pct = 42
/sys/devices/system/cpu/intel_pstate/min_perf_pct = 42
/sys/devices/system/cpu/intel_pstate/no_turbo = 0 (or 1 with both of the above
set to 47, but leaving them at 42 works also)

But some other settings give odd results, and also seem to depend on if the
numbers are increasing or decreasing and if the CPU was unload or loaded before
the change. This is best described by graphs of the experiments done. Attached.
Potentially of particular interest are the cases were the CPU frequency is
always 1.768 GHz when sampled (5 seconds after the CPU becomes 100% loaded).
For example:

"performance"
/sys/devices/system/cpu/intel_pstate/max_perf_pct = 69
/sys/devices/system/cpu/intel_pstate/min_perf_pct = 69
/sys/devices/system/cpu/intel_pstate/no_turbo = 0

Where we would expect something around 2.6 GHz. I also tested loading other
CPUs at the same time, and could never get any other frequency (tested about
100 times, in addition to the 24 done to make the graphs)(Correction: a few
times the CPU kicked up in frequency, but just after the sample was taken, and
I think because of the action of either waking up to take the sample or
whatever).

Sub-experiment: Take another frequency sample after another couple of seconds,
to get an accurate count of how many times out of 100 it kicks up after the
first sample: Results: 3 times out of 100.
Sub-sub-experiment: Does the CPU kick up because the controlling script came
out of sleep, or is it because it reads
/sys/devices/system/cpu/cpu7/cpufreq/cpuinfo_cur_freq? Result: Inconclusive
(Will try to think of a better test and test more later, if required. Might
require a larger sample size).

To be clear, it is not best effieciency wanted here, it is knowing that the
active CPU frequency will always be the same. An example application is the
test procedure to make sure that reported load averages are correct.

Issue 4:

It appears as though there is a slight rounding down effect in the reported
frequencies. Wouldn't we at least expect turbostat to give the same numbers?
Example:

doug&amp;lt; at &amp;gt;s15:~/temp$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq
3468000
3468000
3468000
3468000
3468000
3468000
3468000
3468000

doug&amp;lt; at &amp;gt;s15:~/temp$ sudo ./turbostat
 cr CPU    %c0  GHz  TSC    %c1    %c3    %c6    %c7  %pc2  %pc3  %pc6  %pc7
         100.00 3.51 3.41   0.00   0.00   0.00   0.00  0.00  0.00  0.00  0.00
   0   0 100.00 3.51 3.41   0.00   0.00   0.00   0.00  0.00  0.00  0.00  0.00
   0   4 100.00 3.51 3.41   0.00   0.00   0.00   0.00  0.00  0.00  0.00  0.00
   1   1 100.00 3.51 3.41   0.00   0.00   0.00   0.00  0.00  0.00  0.00  0.00
   1   5 100.00 3.51 3.41   0.00   0.00   0.00   0.00  0.00  0.00  0.00  0.00
   2   2 100.00 3.51 3.41   0.00   0.00   0.00   0.00  0.00  0.00  0.00  0.00
   2   6 100.00 3.51 3.41   0.00   0.00   0.00   0.00  0.00  0.00  0.00  0.00
   3   3 100.00 3.51 3.41   0.00   0.00   0.00   0.00  0.00  0.00  0.00  0.00
   3   7 100.00 3.51 3.41   0.00   0.00   0.00   0.00  0.00  0.00  0.00  0.00

Issue 5: (actually just an opinion, and at the risk of raising an issue that
seems to have been brought up a lot)

Why wasn't what is now called "powersave" called "ondemand" (or "conservative"
if preferred), as it is similar? Then "powersave" could have been as it was,
namely:
"powersave"
/sys/devices/system/cpu/intel_pstate/max_perf_pct = 42
/sys/devices/system/cpu/intel_pstate/min_perf_pct = 42
/sys/devices/system/cpu/intel_pstate/no_turbo = 0 (or 1 with both of the above
set to 47)

&lt;/pre&gt;</description>
    <dc:creator>bugzilla-daemon&lt; at &gt;bugzilla.kernel.org</dc:creator>
    <dc:date>2013-06-08T23:37:16</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10840">
    <title>[GIT PULL RESENT] CPUFreq: ARM Updates for v3.11</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10840</link>
    <description>&lt;pre&gt;Hi Rafael,

The following changes since commit d683b96b072dc4680fc74964eca77e6a23d1fa6e:

  Linux 3.10-rc4 (2013-06-02 17:11:17 +0900)

are available in the git repository at:

  git://git.linaro.org/people/vireshk/linux.git cpufreq-next

for you to fetch changes up to ea61623fe9badd5a195b3a0878e6d89a2f97ac0e:

  cpufreq: kirkwood: Select CPU_FREQ_TABLE option (2013-06-07 16:33:36 +0530)

----------------------------------------------------------------
Arnd Bergmann (2):
      cpufreq: SPEAr needs cpufreq table
      cpufreq: big.LITTLE needs cpufreq table

Ezequiel Garcia (1):
      cpufreq: kirkwood: Select CPU_FREQ_TABLE option

 drivers/cpufreq/Kconfig.arm | 3 +++
 1 file changed, 3 insertions(+)
--
To unsubscribe from this list: send the line "unsubscribe cpufreq" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Viresh Kumar</dc:creator>
    <dc:date>2013-06-07T11:09:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10836">
    <title>[GIT PULL] CPUFreq: ARM Updates for v3.11</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10836</link>
    <description>&lt;pre&gt;Hi Rafael,

The following changes since commit d683b96b072dc4680fc74964eca77e6a23d1fa6e:

  Linux 3.10-rc4 (2013-06-02 17:11:17 +0900)

are available in the git repository at:

  git://git.linaro.org/people/vireshk/linux.git cpufreq-next

for you to fetch changes up to f13ad5d9829c060fffe5bf45b05cc3c689a2e719:

  cpufreq: kirkwood: Select CPU_FREQ_TABLE option (2013-06-07 16:21:13 +0530)

----------------------------------------------------------------
Arnd Bergmann (2):
      cpufreq: SPEAr needs cpufreq table
      cpufreq: bit.LITTLE needs cpufreq table

Ezequiel Garcia (1):
      cpufreq: kirkwood: Select CPU_FREQ_TABLE option

 drivers/cpufreq/Kconfig.arm | 3 +++
 1 file changed, 3 insertions(+)

--
Viresh
--
To unsubscribe from this list: send the line "unsubscribe cpufreq" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Viresh Kumar</dc:creator>
    <dc:date>2013-06-07T10:56:36</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10807">
    <title>PROCES A ODKUPU VAŠÍ VYHRÁL CENU £ 7.500,000LIBRA BRITSKÁ LIBRA { GBP }</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10807</link>
    <description>&lt;pre&gt;www.swisslotto.ch 2013
SWISSLOTTO

Gratulujeme: Toto je oficiálně přinést do vaší pozornosti, že vaše 
e-mailová adresa získal pro vás on-line elektronickou loterii o 
probíhajícím Swisslotto platby loterie on-line přes náhodné 
elektronickým systémem e-mailovou volební qualification.The součet 
7.500,000libra Great British Pounds { CZK} má být udělena vás v 
probíhajícím programu Swislotto, aby vám zpracovávat a využívat své 
vyhrál cenu, musíte jít vykupitelské politiky a strážní linek z vaší 
platební určené banky. V tomto nŘádek Vítězové loterie elektronických 
cvičení se vynořila z 7 kontinentů světa a 2013 vydání Swisslotto je 
zesílený vydání, přičemž vítězové vynořil ze seznamu kontinentech 
Afrika, Antarktida, Asie, Austrálie, Evropy, Severní Ameriky
Jižní Amerika.

Podle náhodné e-mailové adresy sčítací systém e-mailovou kvalifikaci 
vaše e-mailová adresa získal pro Vás součet 7.500,000libra Great 
British liber {GBP}  a získala cenu patří do Vaší tudíž vaše jsou 
oprávněný uživatel e-mailové adresy se svou vítěznou viz níže:

Vítězné číslo: 46689 \ 67 \ 2013k
Směrování číslo: Vítěz # 5657
Výrobní kód: 56579Kl

Vaše přesto je třeba ještě zpracovat, je to vaše právo je šťastným 
výhercem zpracovávat a využívat své vyhrál cenu přes normální 
prohlašovat postupu sami právního příjemce, pro procesí a čerpání 
vašeho vyhrál cenu posílat níže uvedené informace do centrální světa 
Široká agent i.desk1&amp;lt; at &amp;gt;aol.com vám směrnic do průvodu a platební banku

                                                                      
POSKYTNĚTE NÍŽE UVEDENÉ INFORMACE

Příjmení:
Jméno
Druhé jméno:
Pohlaví:
Datum narození:
Povolání:
Číslo mobilního telefonu:
Tel. Číslo:
Národnost:
Domovská adresa:
Úřad nebo Poštovní adresa:
Země:
Současná Země:
Výherní číslo:
Směrovací číslo:
Výrobní kód:

kontakt : i.desk1&amp;lt; at &amp;gt;aol.com

Jste zaslat požadované informace popsané výše procesí a využívat svých 
mandátů získaly prize.Zákon, můžete jako právní příjemci této výhra v 
loterii zpracovávat pro nároky vašeho získal fond od svého určeného 
platebního banky tím, že cituje své vítězné údaje, jakož jak jdou podle 
pravidel a regulace střežících vykupující procesu procedure.Your se 
prosím doporučuje zkontrolovat e-maily denně, což nám pomáhá usnadnit 
průvod vaší cenu.

Poznámka: Není-li přesměrovat informace k této e-mailovou adresu 
i.desk1&amp;lt; at &amp;gt;aol.com nebo zvážit sám automaticky diskvalifikován.


Děkovat
Paní Anna Van
-------------------------------------------------------------------------
-------------------------------------------------------------------------
-------------------------------------------------------------------------
----------------
Copyright © 2013 Swiss loterie! Všechna práva vyhrazena


--
To unsubscribe from this list: send the line "unsubscribe cpufreq" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>www.swisslotto.ch</dc:creator>
    <dc:date>2013-06-06T09:08:05</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10785">
    <title>[PATCH v3 0/3] cpufreq: ondemand: Change the calculation of target frequency</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10785</link>
    <description>&lt;pre&gt;Changes since v2:
- Reorder patches 2/3 and 3/3
- Fix typos in patch changelog

Changes since v1:
- Use policy-&amp;gt;cpuinfo.max_freq in the calculation formula
of target frequency instead of policy-&amp;gt;max
- Split the patch into 3 parts

Stratos Karafotis (3):
  cpufreq: ondemand: Change the calculation of target frequency
  cpufreq: Remove unused APERF/MPERF support
  cpufreq: Remove unused function __cpufreq_driver_getavg

 arch/x86/include/asm/processor.h   | 29 ----------------------
 drivers/cpufreq/Makefile           |  2 +-
 drivers/cpufreq/acpi-cpufreq.c     |  5 ----
 drivers/cpufreq/cpufreq.c          | 12 ---------
 drivers/cpufreq/cpufreq_governor.c | 10 +-------
 drivers/cpufreq/cpufreq_governor.h |  1 -
 drivers/cpufreq/cpufreq_ondemand.c | 39 ++++++-----------------------
 drivers/cpufreq/mperf.c            | 51 --------------------------------------
 drivers/cpufreq/mperf.h            |  9 -------
 include/linux/cpufreq.h            |  6 -----
 10 files changed, 9 insertions(+), 155 deletions(-)
 delete mode 100644 drivers/cpufreq/mperf.c
 delete mode 100644 drivers/cpufreq/mperf.h

&lt;/pre&gt;</description>
    <dc:creator>Stratos Karafotis</dc:creator>
    <dc:date>2013-06-05T16:01:05</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10776">
    <title>[PATCH v5] cpufreq: powerpc: Add cpufreq driver for Freescale e500mc SoCs</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10776</link>
    <description>&lt;pre&gt;From: Tang Yuantian &amp;lt;yuantian.tang&amp;lt; at &amp;gt;freescale.com&amp;gt;

Add cpufreq driver for Freescale e500mc, e5500 and e6500 SoCs
which are capable of changing the CPU frequency dynamically

Signed-off-by: Tang Yuantian &amp;lt;Yuantian.Tang&amp;lt; at &amp;gt;freescale.com&amp;gt;
Signed-off-by: Li Yang &amp;lt;leoli&amp;lt; at &amp;gt;freescale.com&amp;gt;
---
v5:
- enhance the CPU hotplug case
- mask the disallowed CPU frequencies
- remove freqs.cpu = policy-&amp;gt;cpu;
- refine the code style
v4:
- rebase on bleeding-edge branch of Rafael's linux-pm.git 
- #define pr_fmt() for better debug prints
- use newest cpufreq_notify_transition()
- support CPU hotplug
- remove table[i].index as it is not used
- remove cpus_per_cluster
v3:
- change sizeof(struct name).. to sizeof(*p)
- remove the struct cpufreq_data, use global variable instead
- resolve setting policy-&amp;gt;cpus incorrectly
- add CPUFREQ_POSTCHANGE notifier when setting frequency error
v2:
- add depends on OF and COMMON_CLK in Kconfig
- use clk.h instead of clk-provider.h
- change per_cpu variable from struct to pointer

 drivers/cpufreq/Kconfig.powerpc       |  10 +
 drivers/cpufreq/Makefile              |   1 +
 drivers/cpufreq/ppc-corenet-cpufreq.c | 380 ++++++++++++++++++++++++++++++++++
 3 files changed, 391 insertions(+)
 create mode 100644 drivers/cpufreq/ppc-corenet-cpufreq.c

diff --git a/drivers/cpufreq/Kconfig.powerpc b/drivers/cpufreq/Kconfig.powerpc
index 9c926ca..88f629e 100644
--- a/drivers/cpufreq/Kconfig.powerpc
+++ b/drivers/cpufreq/Kconfig.powerpc
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -23,3 +23,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; config CPU_FREQ_MAPLE
 help
   This adds support for frequency switching on Maple 970FX
   Evaluation Board and compatible boards (IBM JS2x blades).
+
+config PPC_CORENET_CPUFREQ
+tristate "CPU frequency scaling driver for Freescale E500MC SoCs"
+depends on PPC_E500MC &amp;amp;&amp;amp; OF &amp;amp;&amp;amp; COMMON_CLK
+select CPU_FREQ_TABLE
+select CLK_PPC_CORENET
+help
+  This adds the CPUFreq driver support for Freescale e500mc,
+  e5500 and e6500 series SoCs which are capable of changing
+  the CPU's frequency dynamically.
diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile
index 315b923..c956094 100644
--- a/drivers/cpufreq/Makefile
+++ b/drivers/cpufreq/Makefile
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -79,6 +79,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; obj-$(CONFIG_CPU_FREQ_CBE)+= ppc-cbe-cpufreq.o
 ppc-cbe-cpufreq-y+= ppc_cbe_cpufreq_pervasive.o ppc_cbe_cpufreq.o
 obj-$(CONFIG_CPU_FREQ_CBE_PMI)+= ppc_cbe_cpufreq_pmi.o
 obj-$(CONFIG_CPU_FREQ_MAPLE)+= maple-cpufreq.o
+obj-$(CONFIG_PPC_CORENET_CPUFREQ)   += ppc-corenet-cpufreq.o
 
 ##################################################################################
 # Other platform drivers
diff --git a/drivers/cpufreq/ppc-corenet-cpufreq.c b/drivers/cpufreq/ppc-corenet-cpufreq.c
new file mode 100644
index 0000000..3cae452
--- /dev/null
+++ b/drivers/cpufreq/ppc-corenet-cpufreq.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,380 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * CPU Frequency Scaling driver for Freescale PowerPC corenet SoCs.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#define pr_fmt(fmt)KBUILD_MODNAME ": " fmt
+
+#include &amp;lt;linux/clk.h&amp;gt;
+#include &amp;lt;linux/cpufreq.h&amp;gt;
+#include &amp;lt;linux/errno.h&amp;gt;
+#include &amp;lt;sysdev/fsl_soc.h&amp;gt;
+#include &amp;lt;linux/init.h&amp;gt;
+#include &amp;lt;linux/kernel.h&amp;gt;
+#include &amp;lt;linux/module.h&amp;gt;
+#include &amp;lt;linux/mutex.h&amp;gt;
+#include &amp;lt;linux/of.h&amp;gt;
+#include &amp;lt;linux/slab.h&amp;gt;
+#include &amp;lt;linux/smp.h&amp;gt;
+
+/**
+ * struct cpu_data - per CPU data struct
+ * &amp;lt; at &amp;gt;clk: the clk of CPU
+ * &amp;lt; at &amp;gt;parent: the parent node of cpu clock
+ * &amp;lt; at &amp;gt;table: frequency table
+ */
+struct cpu_data {
+struct clk *clk;
+struct device_node *parent;
+struct cpufreq_frequency_table *table;
+};
+
+/**
+ * struct soc_data - SoC specific data
+ * &amp;lt; at &amp;gt;freq_mask: mask the disallowed frequencies
+ * &amp;lt; at &amp;gt;flag: unique flags
+ */
+struct soc_data {
+u32 freq_mask[4];
+u32 flag;
+};
+
+#define FREQ_MASK1
+/* see hardware specification for the allowed frqeuencies */
+static const struct soc_data sdata[] = {
+{ /* used by p2041 and p3041 */
+.freq_mask = {0x8, 0x8, 0x2, 0x2},
+.flag = FREQ_MASK,
+},
+{ /* used by p5020 */
+.freq_mask = {0x8, 0x2},
+.flag = FREQ_MASK,
+},
+{ /* used by p4080, p5040 */
+.freq_mask = {0},
+.flag = 0,
+},
+};
+
+/*
+ * the minimum allowed core frequency, in Hz
+ * for chassis v1.0, &amp;gt;= platform frequency
+ * for chassis v2.0, &amp;gt;= platform frequency / 2
+ */
+static u32 min_cpufreq;
+static const u32 *fmask;
+
+/* serialize frequency changes  */
+static DEFINE_MUTEX(cpufreq_lock);
+static DEFINE_PER_CPU(struct cpu_data *, cpu_data);
+
+/* cpumask in a cluster */
+static DEFINE_PER_CPU(cpumask_var_t, cpu_mask);
+
+#ifndef CONFIG_SMP
+static inline const struct cpumask *cpu_core_mask(int cpu)
+{
+return cpumask_of(0);
+}
+#endif
+
+static unsigned int corenet_cpufreq_get_speed(unsigned int cpu)
+{
+struct cpu_data *data = per_cpu(cpu_data, cpu);
+
+return clk_get_rate(data-&amp;gt;clk) / 1000;
+}
+
+/* reduce the duplicated frequencies in frequency table */
+static void freq_table_redup(struct cpufreq_frequency_table *freq_table,
+int count)
+{
+int i, j;
+
+for (i = 1; i &amp;lt; count; i++) {
+for (j = 0; j &amp;lt; i; j++) {
+if (freq_table[j].frequency == CPUFREQ_ENTRY_INVALID ||
+freq_table[j].frequency !=
+freq_table[i].frequency)
+continue;
+
+freq_table[i].frequency = CPUFREQ_ENTRY_INVALID;
+break;
+}
+}
+}
+
+/* sort the frequencies in frequency table in descenting order */
+static void freq_table_sort(struct cpufreq_frequency_table *freq_table,
+int count)
+{
+int i, j, ind;
+unsigned int freq, max_freq;
+struct cpufreq_frequency_table table;
+for (i = 0; i &amp;lt; count - 1; i++) {
+max_freq = freq_table[i].frequency;
+ind = i;
+for (j = i + 1; j &amp;lt; count; j++) {
+freq = freq_table[j].frequency;
+if (freq == CPUFREQ_ENTRY_INVALID ||
+freq &amp;lt;= max_freq)
+continue;
+ind = j;
+max_freq = freq;
+}
+
+if (ind != i) {
+/* exchange the frequencies */
+table.driver_data = freq_table[i].driver_data;
+table.frequency = freq_table[i].frequency;
+freq_table[i].driver_data = freq_table[ind].driver_data;
+freq_table[i].frequency = freq_table[ind].frequency;
+freq_table[ind].driver_data = table.driver_data;
+freq_table[ind].frequency = table.frequency;
+}
+}
+}
+
+static int corenet_cpufreq_cpu_init(struct cpufreq_policy *policy)
+{
+struct device_node *np;
+int i, count, ret;
+u32 freq, mask;
+struct clk *clk;
+struct cpufreq_frequency_table *table;
+struct cpu_data *data;
+unsigned int cpu = policy-&amp;gt;cpu;
+
+np = of_get_cpu_node(cpu, NULL);
+if (!np)
+return -ENODEV;
+
+data = kzalloc(sizeof(*data), GFP_KERNEL);
+if (!data) {
+pr_err("%s: no memory\n", __func__);
+goto err_np;
+}
+
+data-&amp;gt;clk = of_clk_get(np, 0);
+if (IS_ERR(data-&amp;gt;clk)) {
+pr_err("%s: no clock information\n", __func__);
+goto err_nomem2;
+}
+
+data-&amp;gt;parent = of_parse_phandle(np, "clocks", 0);
+if (!data-&amp;gt;parent) {
+pr_err("%s: could not get clock information\n", __func__);
+goto err_nomem2;
+}
+
+count = of_property_count_strings(data-&amp;gt;parent, "clock-names");
+table = kcalloc(count + 1, sizeof(*table), GFP_KERNEL);
+if (!table) {
+pr_err("%s: no memory\n", __func__);
+goto err_node;
+}
+
+if (fmask)
+mask = fmask[get_hard_smp_processor_id(cpu)];
+else
+mask = 0x0;
+
+for (i = 0; i &amp;lt; count; i++) {
+clk = of_clk_get(data-&amp;gt;parent, i);
+freq = clk_get_rate(clk);
+/*
+ * the clock is valid if its frequency is not masked
+ * and large than minimum allowed frequency.
+ */
+if (freq &amp;lt; min_cpufreq || (mask &amp;amp; (1 &amp;lt;&amp;lt; i)))
+table[i].frequency = CPUFREQ_ENTRY_INVALID;
+else
+table[i].frequency = freq / 1000;
+table[i].driver_data = i;
+}
+freq_table_redup(table, count);
+freq_table_sort(table, count);
+table[i].frequency = CPUFREQ_TABLE_END;
+
+/* set the min and max frequency properly */
+ret = cpufreq_frequency_table_cpuinfo(policy, table);
+if (ret) {
+pr_err("invalid frequency table: %d\n", ret);
+goto err_nomem1;
+}
+
+data-&amp;gt;table = table;
+per_cpu(cpu_data, cpu) = data;
+
+/* update -&amp;gt;cpus if we have cluster, no harm if not */
+cpumask_copy(policy-&amp;gt;cpus, per_cpu(cpu_mask, cpu));
+for_each_cpu(i, per_cpu(cpu_mask, cpu))
+per_cpu(cpu_data, i) = data;
+
+policy-&amp;gt;cpuinfo.transition_latency = CPUFREQ_ETERNAL;
+policy-&amp;gt;cur = corenet_cpufreq_get_speed(policy-&amp;gt;cpu);
+
+cpufreq_frequency_table_get_attr(table, cpu);
+of_node_put(np);
+
+return 0;
+
+err_nomem1:
+kfree(table);
+err_node:
+of_node_put(data-&amp;gt;parent);
+err_nomem2:
+per_cpu(cpu_data, cpu) = NULL;
+kfree(data);
+err_np:
+of_node_put(np);
+
+return -ENODEV;
+}
+
+static int __exit corenet_cpufreq_cpu_exit(struct cpufreq_policy *policy)
+{
+struct cpu_data *data = per_cpu(cpu_data, policy-&amp;gt;cpu);
+unsigned int cpu;
+
+cpufreq_frequency_table_put_attr(policy-&amp;gt;cpu);
+of_node_put(data-&amp;gt;parent);
+kfree(data-&amp;gt;table);
+kfree(data);
+
+for_each_cpu(cpu, per_cpu(cpu_mask, policy-&amp;gt;cpu))
+per_cpu(cpu_data, cpu) = NULL;
+
+return 0;
+}
+
+static int corenet_cpufreq_verify(struct cpufreq_policy *policy)
+{
+struct cpufreq_frequency_table *table =
+per_cpu(cpu_data, policy-&amp;gt;cpu)-&amp;gt;table;
+
+return cpufreq_frequency_table_verify(policy, table);
+}
+
+static int corenet_cpufreq_target(struct cpufreq_policy *policy,
+unsigned int target_freq, unsigned int relation)
+{
+struct cpufreq_freqs freqs;
+unsigned int new;
+struct clk *parent;
+int ret;
+struct cpu_data *data = per_cpu(cpu_data, policy-&amp;gt;cpu);
+
+cpufreq_frequency_table_target(policy, data-&amp;gt;table,
+target_freq, relation, &amp;amp;new);
+
+if (policy-&amp;gt;cur == data-&amp;gt;table[new].frequency)
+return 0;
+
+freqs.old = policy-&amp;gt;cur;
+freqs.new = data-&amp;gt;table[new].frequency;
+
+mutex_lock(&amp;amp;cpufreq_lock);
+cpufreq_notify_transition(policy, &amp;amp;freqs, CPUFREQ_PRECHANGE);
+
+parent = of_clk_get(data-&amp;gt;parent, data-&amp;gt;table[new].driver_data);
+ret = clk_set_parent(data-&amp;gt;clk, parent);
+if (ret)
+freqs.new = freqs.old;
+
+cpufreq_notify_transition(policy, &amp;amp;freqs, CPUFREQ_POSTCHANGE);
+mutex_unlock(&amp;amp;cpufreq_lock);
+
+return ret;
+}
+
+static struct freq_attr *corenet_cpufreq_attr[] = {
+&amp;amp;cpufreq_freq_attr_scaling_available_freqs,
+NULL,
+};
+
+static struct cpufreq_driver ppc_corenet_cpufreq_driver = {
+.name= "ppc_cpufreq",
+.owner= THIS_MODULE,
+.flags= CPUFREQ_CONST_LOOPS,
+.init= corenet_cpufreq_cpu_init,
+.exit= __exit_p(corenet_cpufreq_cpu_exit),
+.verify= corenet_cpufreq_verify,
+.target= corenet_cpufreq_target,
+.get= corenet_cpufreq_get_speed,
+.attr= corenet_cpufreq_attr,
+};
+
+static const struct of_device_id node_matches[] __initdata = {
+{ .compatible = "fsl,p2041-clockgen", .data = &amp;amp;sdata[0], },
+{ .compatible = "fsl,p3041-clockgen", .data = &amp;amp;sdata[0], },
+{ .compatible = "fsl,p5020-clockgen", .data = &amp;amp;sdata[1], },
+{ .compatible = "fsl,p4080-clockgen", .data = &amp;amp;sdata[2], },
+{ .compatible = "fsl,p5040-clockgen", .data = &amp;amp;sdata[2], },
+{ .compatible = "fsl,qoriq-clockgen-2.0", },
+{}
+};
+
+static int __init ppc_corenet_cpufreq_init(void)
+{
+int ret;
+struct device_node  *np;
+const struct of_device_id *match;
+const struct soc_data *data;
+unsigned int cpu;
+
+np = of_find_matching_node(NULL, node_matches);
+if (!np)
+return -ENODEV;
+
+for_each_possible_cpu(cpu) {
+if (!alloc_cpumask_var(&amp;amp;per_cpu(cpu_mask, cpu), GFP_KERNEL))
+goto err_mask;
+cpumask_copy(per_cpu(cpu_mask, cpu), cpu_core_mask(cpu));
+}
+
+match = of_match_node(node_matches, np);
+data = match-&amp;gt;data;
+if (data) {
+if (data-&amp;gt;flag)
+fmask = data-&amp;gt;freq_mask;
+min_cpufreq = fsl_get_sys_freq();
+} else {
+min_cpufreq = fsl_get_sys_freq() / 2;
+}
+
+of_node_put(np);
+
+ret = cpufreq_register_driver(&amp;amp;ppc_corenet_cpufreq_driver);
+if (!ret)
+pr_info("Freescale PowerPC corenet CPU frequency scaling driver\n");
+
+return ret;
+
+err_mask:
+for_each_possible_cpu(cpu)
+free_cpumask_var(per_cpu(cpu_mask, cpu));
+
+return -ENOMEM;
+}
+module_init(ppc_corenet_cpufreq_init);
+
+static void __exit ppc_corenet_cpufreq_exit(void)
+{
+unsigned int cpu;
+
+for_each_possible_cpu(cpu)
+free_cpumask_var(per_cpu(cpu_mask, cpu));
+
+cpufreq_unregister_driver(&amp;amp;ppc_corenet_cpufreq_driver);
+}
+module_exit(ppc_corenet_cpufreq_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Tang Yuantian &amp;lt;Yuantian.Tang&amp;lt; at &amp;gt;freescale.com&amp;gt;");
+MODULE_DESCRIPTION("cpufreq driver for Freescale e500mc series SoCs");
&lt;/pre&gt;</description>
    <dc:creator>Yuantian.Tang&lt; at &gt;freescale.com</dc:creator>
    <dc:date>2013-06-05T09:30:48</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10769">
    <title>[RESEND][PATCH] cpufreq: stats: Add 'load_table' sysfs file to show accumulated data of CPU</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10769</link>
    <description>&lt;pre&gt;This patch add new sysfs file to show previous accumulated data of CPU load
as following path. This sysfs file is used to judge the correct system state
or determine suitable system resource on user-space.
- /sys/devices/system/cpu/cpu0/cpufreq/stats/load_table

This sysfs file include following data:
- Measurement point of time
- CPU frequency
- Per-CPU load

Signed-off-by: Chanwoo Choi &amp;lt;cw00.choi&amp;lt; at &amp;gt;samsung.com&amp;gt;
Signed-off-by: Myungjoo Ham &amp;lt;myungjoo.ham&amp;lt; at &amp;gt;samsung.com&amp;gt;
Signed-off-by: Kyungmin Park &amp;lt;kyungmin.park&amp;lt; at &amp;gt;samsung.com&amp;gt;
---

Additionally, I explain an example using 'load_table' sysfs entry.

Exynos4412 series has Quad-core and all cores share the power-line.
I cann't set diffent voltage/frequency to each CPU. To reduce power-
consumption, I certainly have to turn on/off CPU online state
according to CPU load on runtime. As a result, I peridically need to
monitor current cpu state to determine a proper amount of system
resource(necessary number of online cpu) and to delete wasted power.
So, I need 'load_table' sysfs file to monitor current cpu state.

I add a table which show power consumption of target based on
Exynos4412 SoC. This table indicate the difference power-consumption
according to a number of online core and with same number of running task.

[Environment of power estimation]
- cpufreq governor used performance mode to estimate power-consumption on each frequency step.
- Use infinite-loop test program which execute while statement infinitely.
- Always measure the power consumption under same temperature during 1 minutes.
- Unit is mA.
------------------------------------------------------------------------------------------------------------------------------------
A number of Online core| Core 1| Core 2| Core 3| Core 4
A number of nr_running| 01| 012| 0123| 01234
------------------------------------------------------------------------------------------------------------------------------------
 CPU Frequency| 
 800  MHz| 293 330 | 295 338 379 | 300 339 386 433 | 303 341 390 412 482 
 1000 MHz| 312 371 | 316 377 435 | 318 383 454 522 | 322 391 462 526 596 
 1200 MHz| 323 404 | 328 418 504 | 336 423 521 615 | 343 433 499 639 748 
 1600 MHz | 380 525 | 388 556 771 | 399 575 771 1011 | 412 597 822 1172 1684 
------------------------------------------------------------------------------------------------------------------------------------

For example,
The case A/B/C have the same condition except for a number of online core.
- case A: Online core is 2, 1000MHz and nr_running is 1: 377mA
- case B: Online core is 3, 1000MHz and nr_running is 1: 383mA
- case C: Online core is 4, 1000Mz and nr_running is 1: 391mA

If system has only one running task, cpu hotplug policy, by monitoring
cpu state through 'load_table' sysfs file on user-space,
will determine 'case A' state for reducing power-consumption.

Show the result of reading 'load_table sysfs file as following:
- cpufreq governor is ondemand_org governor.

$ cat /sys/devices/system/cpu/cpu0/cpufreq/stats/load_table
       Time  Frequency cpu0 cpu1 cpu2 cpu3
1300500043122   1600000   32    6    0   26
1300600079080    800000   63   10    2   45
1300700065288    800000   51    9    1   42
1300800228747    800000   51    9    1   43
1300900182997    800000   78   11    3   47
1301000106163    800000   96   26    6   48
1301100056247   1600000   45    7    1   27
1301200071373   1000000   55    9    1   37
1301300096082    800000   54   10    0   45
1301400132832    800000   70   11    2   46
1301500082290    800000   61   11    1   43
1301600236415    800000   61    9    2   43
1301700071498    800000   59   10    2   43
1301800159290    800000   55    9    1   42
1301900076332    800000   66   10    2   43
1302000102165    800000   47    9    0   43
1302100086623    800000   75   11    2   50
1302200101082    800000   66   10    4   46
1302300108873    800000   53   10    1   44
1302400373373    600000   63   12    1   54

Please let me know some opinion about this patch.

Best regards and Thanks,
Chanwoo Choi

---
 drivers/cpufreq/cpufreq.c          |  4 +++
 drivers/cpufreq/cpufreq_governor.c | 21 ++++++++++--
 drivers/cpufreq/cpufreq_stats.c    | 70 ++++++++++++++++++++++++++++++++++++++
 include/linux/cpufreq.h            |  6 ++++
 4 files changed, 99 insertions(+), 2 deletions(-)

diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 2d53f47..cbaaff0 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -292,6 +292,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void __cpufreq_notify_transition(struct cpufreq_policy *policy,
 if (likely(policy) &amp;amp;&amp;amp; likely(policy-&amp;gt;cpu == freqs-&amp;gt;cpu))
 policy-&amp;gt;cur = freqs-&amp;gt;new;
 break;
+case CPUFREQ_LOADCHECK:
+srcu_notifier_call_chain(&amp;amp;cpufreq_transition_notifier_list,
+CPUFREQ_LOADCHECK, freqs);
+break;
 }
 }
 /**
diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c
index 5af40ad..bc50624 100644
--- a/drivers/cpufreq/cpufreq_governor.c
+++ b/drivers/cpufreq/cpufreq_governor.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -23,12 +23,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include &amp;lt;linux/kernel_stat.h&amp;gt;
 #include &amp;lt;linux/mutex.h&amp;gt;
 #include &amp;lt;linux/slab.h&amp;gt;
+#include &amp;lt;linux/sched.h&amp;gt;
 #include &amp;lt;linux/tick.h&amp;gt;
 #include &amp;lt;linux/types.h&amp;gt;
 #include &amp;lt;linux/workqueue.h&amp;gt;
 
 #include "cpufreq_governor.h"
 
+#ifdef CONFIG_CPU_FREQ_STAT_DETAILS
+struct cpufreq_freqs freqs;
+#endif
+
 static struct kobject *get_governor_parent_kobj(struct cpufreq_policy *policy)
 {
 if (have_governor_per_policy())
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -143,11 +148,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void dbs_check_cpu(struct dbs_data *dbs_data, int cpu)
 idle_time += jiffies_to_usecs(cur_nice_jiffies);
 }
 
-if (unlikely(!wall_time || wall_time &amp;lt; idle_time))
+if (unlikely(!wall_time || wall_time &amp;lt; idle_time)) {
+#ifdef CONFIG_CPU_FREQ_STAT_DETAILS
+freqs.load[j] = 0;
+#endif
 continue;
+}
 
 load = 100 * (wall_time - idle_time) / wall_time;
-
+#ifdef CONFIG_CPU_FREQ_STAT_DETAILS
+freqs.load[j] = load;
+#endif
 if (dbs_data-&amp;gt;cdata-&amp;gt;governor == GOV_ONDEMAND) {
 int freq_avg = __cpufreq_driver_getavg(policy, j);
 if (freq_avg &amp;lt;= 0)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -160,6 +171,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void dbs_check_cpu(struct dbs_data *dbs_data, int cpu)
 max_load = load;
 }
 
+#ifdef CONFIG_CPU_FREQ_STAT_DETAILS
+freqs.time = ktime_to_ns(ktime_get());
+freqs.old = freqs.new = policy-&amp;gt;cur;
+
+cpufreq_notify_transition(policy, &amp;amp;freqs, CPUFREQ_LOADCHECK);
+#endif
 dbs_data-&amp;gt;cdata-&amp;gt;gov_check_cpu(cpu, max_load);
 }
 EXPORT_SYMBOL_GPL(dbs_check_cpu);
diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c
index fb65dec..2379b1d 100644
--- a/drivers/cpufreq/cpufreq_stats.c
+++ b/drivers/cpufreq/cpufreq_stats.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -22,6 +22,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include &amp;lt;linux/notifier.h&amp;gt;
 #include &amp;lt;asm/cputime.h&amp;gt;
 
+#define CPUFREQ_LOAD_TABLE_MAX20
+
 static spinlock_t cpufreq_stats_lock;
 
 struct cpufreq_stats {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -35,6 +37,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct cpufreq_stats {
 unsigned int *freq_table;
 #ifdef CONFIG_CPU_FREQ_STAT_DETAILS
 unsigned int *trans_table;
+
+struct cpufreq_freqs *load_table;
+unsigned int load_last_index;
+unsigned int load_max_index;
 #endif
 };
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -131,6 +137,38 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static ssize_t show_trans_table(struct cpufreq_policy *policy, char *buf)
 return len;
 }
 cpufreq_freq_attr_ro(trans_table);
+
+static ssize_t show_load_table(struct cpufreq_policy *policy, char *buf)
+{
+struct cpufreq_stats *stat = per_cpu(cpufreq_stats_table, policy-&amp;gt;cpu);
+struct cpufreq_freqs *load_table = stat-&amp;gt;load_table;
+ssize_t len = 0;
+int i;
+int j;
+
+len += sprintf(buf + len, "%11s %10s", "Time", "Frequency");
+for (j = 0; j &amp;lt; NR_CPUS; j++)
+len += sprintf(buf + len, " %3s%d", "cpu", j);
+len += sprintf(buf + len, "\n");
+
+i = stat-&amp;gt;load_last_index;
+do {
+len += sprintf(buf + len, "%lld %9d",
+load_table[i].time,
+load_table[i].old);
+
+for (j = 0; j &amp;lt; NR_CPUS; j++)
+len += sprintf(buf + len, " %4d",
+load_table[i].load[j]);
+len += sprintf(buf + len, "\n");
+
+if (++i == stat-&amp;gt;load_max_index)
+i = 0;
+} while (i != stat-&amp;gt;load_last_index);
+
+return len;
+}
+cpufreq_freq_attr_ro(load_table);
 #endif
 
 cpufreq_freq_attr_ro(total_trans);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -141,6 +179,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static struct attribute *default_attrs[] = {
 &amp;amp;time_in_state.attr,
 #ifdef CONFIG_CPU_FREQ_STAT_DETAILS
 &amp;amp;trans_table.attr,
+&amp;amp;load_table.attr,
 #endif
 NULL
 };
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -167,6 +206,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void cpufreq_stats_free_table(unsigned int cpu)
 
 if (stat) {
 pr_debug("%s: Free stat table\n", __func__);
+#ifdef CONFIG_CPU_FREQ_STAT_DETAILS
+kfree(stat-&amp;gt;load_table);
+#endif
 kfree(stat-&amp;gt;time_in_state);
 kfree(stat);
 per_cpu(cpufreq_stats_table, cpu) = NULL;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -244,6 +286,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int cpufreq_stats_create_table(struct cpufreq_policy *policy,
 
 #ifdef CONFIG_CPU_FREQ_STAT_DETAILS
 stat-&amp;gt;trans_table = stat-&amp;gt;freq_table + count;
+
+stat-&amp;gt;load_max_index = CPUFREQ_LOAD_TABLE_MAX;
+stat-&amp;gt;load_last_index = 0;
+
+alloc_size = sizeof(struct cpufreq_freqs) * stat-&amp;gt;load_max_index;
+stat-&amp;gt;load_table = kzalloc(alloc_size, GFP_KERNEL);
+if (!stat-&amp;gt;load_table) {
+ret = -ENOMEM;
+goto error_out;
+}
 #endif
 j = 0;
 for (i = 0; table[i].frequency != CPUFREQ_TABLE_END; i++) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -312,13 +364,31 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int cpufreq_stat_notifier_trans(struct notifier_block *nb,
 struct cpufreq_stats *stat;
 int old_index, new_index;
 
+#ifdef CONFIG_CPU_FREQ_STAT_DETAILS
+if (val != CPUFREQ_POSTCHANGE &amp;amp;&amp;amp; val != CPUFREQ_LOADCHECK)
+#else
 if (val != CPUFREQ_POSTCHANGE)
+#endif
 return 0;
 
 stat = per_cpu(cpufreq_stats_table, freq-&amp;gt;cpu);
 if (!stat)
 return 0;
 
+#ifdef CONFIG_CPU_FREQ_STAT_DETAILS
+if (val == CPUFREQ_LOADCHECK) {
+struct cpufreq_freqs *dest_freq;
+
+dest_freq = &amp;amp;stat-&amp;gt;load_table[stat-&amp;gt;load_last_index];
+memcpy(dest_freq, freq, sizeof(struct cpufreq_freqs));
+
+if (++stat-&amp;gt;load_last_index == stat-&amp;gt;load_max_index)
+stat-&amp;gt;load_last_index = 0;
+
+return 0;
+}
+#endif
+
 old_index = stat-&amp;gt;last_index;
 new_index = freq_table_get_index(stat, freq-&amp;gt;new);
 
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 037d36a..f780645 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -140,12 +140,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static inline bool policy_is_shared(struct cpufreq_policy *policy)
 #define CPUFREQ_POSTCHANGE(1)
 #define CPUFREQ_RESUMECHANGE(8)
 #define CPUFREQ_SUSPENDCHANGE(9)
+#define CPUFREQ_LOADCHECK(10)
 
 struct cpufreq_freqs {
 unsigned int cpu;/* cpu nr */
 unsigned int old;
 unsigned int new;
 u8 flags;/* flags of cpufreq_driver, see below. */
+
+#ifdef CONFIG_CPU_FREQ_STAT_DETAILS
+int64_t time;
+unsigned int load[NR_CPUS];
+#endif
 };
 
 
&lt;/pre&gt;</description>
    <dc:creator>Chanwoo Choi</dc:creator>
    <dc:date>2013-06-05T08:11:22</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10766">
    <title>Cpufreq userspace governor start/stop issue</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10766</link>
    <description>&lt;pre&gt;Hi, Guys

I met another question for cpufreq governor. When hotplug out one cpu,
cpufreq will remove the cpu device and also call governor stop, if
there are more than 1 cpu and cpu0 is the root for cpufreq, other cpus
are linked to cpu0. then policy-&amp;gt;cpu is 0 always.

in userspace governor, when governor stop is called, it will set
per_cpu(cpu_is_managed, cpu) = 0
but the cpu is policy-&amp;gt;cpu which is 0 always.

       case CPUFREQ_GOV_STOP:
                mutex_lock(&amp;amp;userspace_mutex);
                cpus_using_userspace_governor--;
                if (cpus_using_userspace_governor == 0) {
                        cpufreq_unregister_notifier(
                                        &amp;amp;userspace_cpufreq_notifier_block,
                                        CPUFREQ_TRANSITION_NOTIFIER);
                }

                per_cpu(cpu_is_managed, cpu) = 0;
                per_cpu(cpu_min_freq, cpu) = 0;
                per_cpu(cpu_max_freq, cpu) = 0;
                per_cpu(cpu_set_freq, cpu) = 0;
                pr_debug("managing cpu %u stopped\n", cpu);
                mutex_unlock(&amp;amp;userspace_mutex);
                break;


also in userspace governor store_setspeed function cpufreq_set will
retun error if per_cpu(cpu_is_managed, cpu) is 0 which means it will
not change frequency .

static int cpufreq_set(struct cpufreq_policy *policy, unsigned int freq)
{
int ret = -EINVAL;

pr_debug("cpufreq_set for cpu %u, freq %u kHz\n", policy-&amp;gt;cpu, freq);

mutex_lock(&amp;amp;userspace_mutex);
if (!per_cpu(cpu_is_managed, policy-&amp;gt;cpu))
goto err;

per_cpu(cpu_set_freq, policy-&amp;gt;cpu) = freq;
...........



So consider below case:
1) cpu0 tries to hotplug cpu3, it calls userspace governor stop
function, it should stop cpu3's userspace governor, but it actually
set cpu0's per_cpu(cpu_is_managed, cpu) to 0.
2) cpu0 tries to change cpu freuqency through userspace governor, but
it will never succeed since cpufreq_set will return err if cpu0'
percpu variable cpu_is_managed is 0.
3) unless there is another cpu hotplug in operation, in which it calls
governor start and set cpu_is_managed to 1, then the frequency change
will go on and doesn't report error.

The reason here is policy-&amp;gt;cpu is always 0 if we use managed policy
for all cpus. but we can't see which cpu's governor want's to
start/stop in userspace goveror. we can only get the information from
struct policy, but this policy doesn't include the exact cpu that
wants to do governor start/stop.


Any suggestions for this issue?


Thanks
Xiaoguang
--
To unsubscribe from this list: send the line "unsubscribe cpufreq" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Xiaoguang Chen</dc:creator>
    <dc:date>2013-06-05T03:24:40</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10758">
    <title>[PATCH] cpufreq: bit.LITTLE needs cpufreq table</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10758</link>
    <description>&lt;pre&gt;Like a lot of the other cpufreq drivers, this one needs to
select CONFIG_CPU_FREQ_TABLE to avoid a build error like

built-in.o: In function `bL_cpufreq_set_target':
cpufreq/arm_big_little.c:71: undefined reference to `cpufreq_frequency_table_target'
built-in.o: In function `bL_cpufreq_verify_policy':
cpufreq/arm_big_little.c:55: undefined reference to `cpufreq_frequency_table_verify'
built-in.o: In function `bL_cpufreq_init':
cpufreq/arm_big_little.c:170: undefined reference to `cpufreq_frequency_table_cpuinfo'
cpufreq/arm_big_little.c:178: undefined reference to `cpufreq_frequency_table_get_attr'
built-in.o:(.data+0x5a80c): undefined reference to `cpufreq_freq_attr_scaling_available_freqs'

Signed-off-by: Arnd Bergmann &amp;lt;arnd&amp;lt; at &amp;gt;arndb.de&amp;gt;
Cc: Rafael J. Wysocki &amp;lt;rjw&amp;lt; at &amp;gt;sisk.pl&amp;gt;
Cc: Viresh Kumar &amp;lt;viresh.kumar&amp;lt; at &amp;gt;linaro.org&amp;gt;

diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm
index d3f2c6b..d1486d4 100644
--- a/drivers/cpufreq/Kconfig.arm
+++ b/drivers/cpufreq/Kconfig.arm
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -5,6 +5,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 config ARM_BIG_LITTLE_CPUFREQ
 tristate "Generic ARM big LITTLE CPUfreq driver"
 depends on ARM_CPU_TOPOLOGY &amp;amp;&amp;amp; PM_OPP &amp;amp;&amp;amp; HAVE_CLK
+select CPU_FREQ_TABLE
 help
   This enables the Generic CPUfreq driver for ARM big.LITTLE platforms.
 

--
To unsubscribe from this list: send the line "unsubscribe cpufreq" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Arnd Bergmann</dc:creator>
    <dc:date>2013-06-03T21:41:14</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10753">
    <title>[PATCH v2 0/3] cpufreq: ondemand: Change the calculation of target frequency</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10753</link>
    <description>&lt;pre&gt;Changes since v1:
Use policy-&amp;gt;cpuinfo.max_freq in the calculation formula
of target frequency instead of policy-&amp;gt;max
Split the patch into 3 parts

Stratos Karafotis (3):
  cpufreq: ondemand: Change the calculation of target frequency
  cpufreq: Remove unused function __cpufreq_driver_getavg
  cpufreq: Remove unused APERF/MPERF support

 arch/x86/include/asm/processor.h   | 29 ----------------------
 drivers/cpufreq/Makefile           |  2 +-
 drivers/cpufreq/acpi-cpufreq.c     |  5 ----
 drivers/cpufreq/cpufreq.c          | 12 ---------
 drivers/cpufreq/cpufreq_governor.c | 10 +-------
 drivers/cpufreq/cpufreq_governor.h |  1 -
 drivers/cpufreq/cpufreq_ondemand.c | 39 ++++++-----------------------
 drivers/cpufreq/mperf.c            | 51 --------------------------------------
 drivers/cpufreq/mperf.h            |  9 -------
 include/linux/cpufreq.h            |  6 -----
 10 files changed, 9 insertions(+), 155 deletions(-)
 delete mode 100644 drivers/cpufreq/mperf.c
 delete mode 100644 drivers/cpufreq/mperf.h
--
To unsubscribe from this list: send the line "unsubscribe cpufreq" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Stratos Karafotis</dc:creator>
    <dc:date>2013-06-03T19:47:45</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.kernel.cpufreq/10732">
    <title>[PATCH] acpi-cpufreq: set current frequency based on target P-State</title>
    <link>http://comments.gmane.org/gmane.linux.kernel.cpufreq/10732</link>
    <description>&lt;pre&gt;4b31e774 fixed bug #4634 and caused the driver to always set the
target P-State at least once since the initial P-State may not be the
desired one.  5a1c0228 caused a regression in this behavior.

This fixes the regression by setting policy-&amp;gt;cur based on the CPU's
target frequency rather than the CPU's current reported frequency
(which may be different).  This means the P-State will be set initially
if the CPU's target frequency is different from the governor's target
frequency.

This fixes an issue where setting the default governor to performance
wouldn't correctly enable turbo mode on all cores.

Signed-off-by: Ross Lagerwall &amp;lt;rosslagerwall&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 drivers/cpufreq/acpi-cpufreq.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c
index 11b8b4b..edc089e 100644
--- a/drivers/cpufreq/acpi-cpufreq.c
+++ b/drivers/cpufreq/acpi-cpufreq.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -347,11 +347,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static u32 get_cur_val(const struct cpumask *mask)
 switch (per_cpu(acfreq_data, cpumask_first(mask))-&amp;gt;cpu_feature) {
 case SYSTEM_INTEL_MSR_CAPABLE:
 cmd.type = SYSTEM_INTEL_MSR_CAPABLE;
-cmd.addr.msr.reg = MSR_IA32_PERF_STATUS;
+cmd.addr.msr.reg = MSR_IA32_PERF_CTL;
 break;
 case SYSTEM_AMD_MSR_CAPABLE:
 cmd.type = SYSTEM_AMD_MSR_CAPABLE;
-cmd.addr.msr.reg = MSR_AMD_PERF_STATUS;
+cmd.addr.msr.reg = MSR_AMD_PERF_CTL;
 break;
 case SYSTEM_IO_CAPABLE:
 cmd.type = SYSTEM_IO_CAPABLE;
&lt;/pre&gt;</description>
    <dc:creator>Ross Lagerwall</dc:creator>
    <dc:date>2013-05-31T19:45:17</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.linux.kernel.cpufreq">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.linux.kernel.cpufreq</link>
  </textinput>
</rdf:RDF>
