summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/cpufreq/Kconfig13
-rw-r--r--drivers/cpufreq/acpi-cpufreq.c17
-rw-r--r--drivers/cpufreq/amd_freq_sensitivity.c10
-rw-r--r--drivers/cpufreq/cpufreq.c223
-rw-r--r--drivers/cpufreq/cpufreq_conservative.c88
-rw-r--r--drivers/cpufreq/cpufreq_governor.c73
-rw-r--r--drivers/cpufreq/cpufreq_governor.h24
-rw-r--r--drivers/cpufreq/cpufreq_ondemand.c38
-rw-r--r--drivers/cpufreq/cpufreq_ondemand.h1
-rw-r--r--drivers/cpufreq/cpufreq_performance.c19
-rw-r--r--drivers/cpufreq/cpufreq_powersave.c19
-rw-r--r--drivers/cpufreq/cpufreq_stats.c157
-rw-r--r--drivers/cpufreq/cpufreq_userspace.c104
-rw-r--r--drivers/cpufreq/davinci-cpufreq.c22
-rw-r--r--drivers/cpufreq/freq_table.c106
-rw-r--r--drivers/cpufreq/intel_pstate.c70
-rw-r--r--drivers/cpufreq/mvebu-cpufreq.c2
-rw-r--r--drivers/cpufreq/pcc-cpufreq.c2
-rw-r--r--drivers/cpufreq/powernv-cpufreq.c181
-rw-r--r--drivers/cpufreq/ppc_cbe_cpufreq_pmi.c3
-rw-r--r--drivers/cpufreq/s3c24xx-cpufreq.c33
-rw-r--r--drivers/cpufreq/s5pv210-cpufreq.c7
-rw-r--r--drivers/thermal/cpu_cooling.c24
23 files changed, 562 insertions, 674 deletions
diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig
index b7445b6ae5a4..c822d72629d5 100644
--- a/drivers/cpufreq/Kconfig
+++ b/drivers/cpufreq/Kconfig
@@ -31,23 +31,18 @@ config CPU_FREQ_BOOST_SW
depends on THERMAL
config CPU_FREQ_STAT
- tristate "CPU frequency translation statistics"
+ bool "CPU frequency transition statistics"
default y
help
- This driver exports CPU frequency statistics information through sysfs
- file system.
-
- To compile this driver as a module, choose M here: the
- module will be called cpufreq_stats.
+ Export CPU frequency statistics information through sysfs.
If in doubt, say N.
config CPU_FREQ_STAT_DETAILS
- bool "CPU frequency translation statistics details"
+ bool "CPU frequency transition statistics details"
depends on CPU_FREQ_STAT
help
- This will show detail CPU frequency translation table in sysfs file
- system.
+ Show detailed CPU frequency transition table in sysfs.
If in doubt, say N.
diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c
index 32a15052f363..297e9128fe9f 100644
--- a/drivers/cpufreq/acpi-cpufreq.c
+++ b/drivers/cpufreq/acpi-cpufreq.c
@@ -468,20 +468,17 @@ unsigned int acpi_cpufreq_fast_switch(struct cpufreq_policy *policy,
struct acpi_cpufreq_data *data = policy->driver_data;
struct acpi_processor_performance *perf;
struct cpufreq_frequency_table *entry;
- unsigned int next_perf_state, next_freq, freq;
+ unsigned int next_perf_state, next_freq, index;
/*
* Find the closest frequency above target_freq.
- *
- * The table is sorted in the reverse order with respect to the
- * frequency and all of the entries are valid (see the initialization).
*/
- entry = policy->freq_table;
- do {
- entry++;
- freq = entry->frequency;
- } while (freq >= target_freq && freq != CPUFREQ_TABLE_END);
- entry--;
+ if (policy->cached_target_freq == target_freq)
+ index = policy->cached_resolved_idx;
+ else
+ index = cpufreq_table_find_index_dl(policy, target_freq);
+
+ entry = &policy->freq_table[index];
next_freq = entry->frequency;
next_perf_state = entry->driver_data;
diff --git a/drivers/cpufreq/amd_freq_sensitivity.c b/drivers/cpufreq/amd_freq_sensitivity.c
index 404360cad25c..042023bbbf62 100644
--- a/drivers/cpufreq/amd_freq_sensitivity.c
+++ b/drivers/cpufreq/amd_freq_sensitivity.c
@@ -48,9 +48,8 @@ static unsigned int amd_powersave_bias_target(struct cpufreq_policy *policy,
struct policy_dbs_info *policy_dbs = policy->governor_data;
struct dbs_data *od_data = policy_dbs->dbs_data;
struct od_dbs_tuners *od_tuners = od_data->tuners;
- struct od_policy_dbs_info *od_info = to_dbs_info(policy_dbs);
- if (!od_info->freq_table)
+ if (!policy->freq_table)
return freq_next;
rdmsr_on_cpu(policy->cpu, MSR_AMD64_FREQ_SENSITIVITY_ACTUAL,
@@ -92,10 +91,9 @@ static unsigned int amd_powersave_bias_target(struct cpufreq_policy *policy,
else {
unsigned int index;
- cpufreq_frequency_table_target(policy,
- od_info->freq_table, policy->cur - 1,
- CPUFREQ_RELATION_H, &index);
- freq_next = od_info->freq_table[index].frequency;
+ index = cpufreq_table_find_index_h(policy,
+ policy->cur - 1);
+ freq_next = policy->freq_table[index].frequency;
}
data->freq_prev = freq_next;
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 5617c7087d77..3dd4884c6f9e 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -74,19 +74,12 @@ static inline bool has_target(void)
}
/* internal prototypes */
-static int cpufreq_governor(struct cpufreq_policy *policy, unsigned int event);
static unsigned int __cpufreq_get(struct cpufreq_policy *policy);
+static int cpufreq_init_governor(struct cpufreq_policy *policy);
+static void cpufreq_exit_governor(struct cpufreq_policy *policy);
static int cpufreq_start_governor(struct cpufreq_policy *policy);
-
-static inline void cpufreq_exit_governor(struct cpufreq_policy *policy)
-{
- (void)cpufreq_governor(policy, CPUFREQ_GOV_POLICY_EXIT);
-}
-
-static inline void cpufreq_stop_governor(struct cpufreq_policy *policy)
-{
- (void)cpufreq_governor(policy, CPUFREQ_GOV_STOP);
-}
+static void cpufreq_stop_governor(struct cpufreq_policy *policy);
+static void cpufreq_governor_limits(struct cpufreq_policy *policy);
/**
* Two notifier lists: the "policy" list is involved in the
@@ -133,15 +126,6 @@ struct kobject *get_governor_parent_kobj(struct cpufreq_policy *policy)
}
EXPORT_SYMBOL_GPL(get_governor_parent_kobj);
-struct cpufreq_frequency_table *cpufreq_frequency_get_table(unsigned int cpu)
-{
- struct cpufreq_policy *policy = per_cpu(cpufreq_cpu_data, cpu);
-
- return policy && !policy_is_inactive(policy) ?
- policy->freq_table : NULL;
-}
-EXPORT_SYMBOL_GPL(cpufreq_frequency_get_table);
-
static inline u64 get_cpu_idle_time_jiffy(unsigned int cpu, u64 *wall)
{
u64 idle_time;
@@ -354,6 +338,7 @@ static void __cpufreq_notify_transition(struct cpufreq_policy *policy,
pr_debug("FREQ: %lu - CPU: %lu\n",
(unsigned long)freqs->new, (unsigned long)freqs->cpu);
trace_cpu_frequency(freqs->new, freqs->cpu);
+ cpufreq_stats_record_transition(policy, freqs->new);
srcu_notifier_call_chain(&cpufreq_transition_notifier_list,
CPUFREQ_POSTCHANGE, freqs);
if (likely(policy) && likely(policy->cpu == freqs->cpu))
@@ -507,6 +492,38 @@ void cpufreq_disable_fast_switch(struct cpufreq_policy *policy)
}
EXPORT_SYMBOL_GPL(cpufreq_disable_fast_switch);
+/**
+ * cpufreq_driver_resolve_freq - Map a target frequency to a driver-supported
+ * one.
+ * @target_freq: target frequency to resolve.
+ *
+ * The target to driver frequency mapping is cached in the policy.
+ *
+ * Return: Lowest driver-supported frequency greater than or equal to the
+ * given target_freq, subject to policy (min/max) and driver limitations.
+ */
+unsigned int cpufreq_driver_resolve_freq(struct cpufreq_policy *policy,
+ unsigned int target_freq)
+{
+ target_freq = clamp_val(target_freq, policy->min, policy->max);
+ policy->cached_target_freq = target_freq;
+
+ if (cpufreq_driver->target_index) {
+ int idx;
+
+ idx = cpufreq_frequency_table_target(policy, target_freq,
+ CPUFREQ_RELATION_L);
+ policy->cached_resolved_idx = idx;
+ return policy->freq_table[idx].frequency;
+ }
+
+ if (cpufreq_driver->resolve_freq)
+ return cpufreq_driver->resolve_freq(policy, target_freq);
+
+ return target_freq;
+}
+EXPORT_SYMBOL_GPL(cpufreq_driver_resolve_freq);
+
/*********************************************************************
* SYSFS INTERFACE *
*********************************************************************/
@@ -1115,6 +1132,7 @@ static void cpufreq_policy_put_kobj(struct cpufreq_policy *policy, bool notify)
CPUFREQ_REMOVE_POLICY, policy);
down_write(&policy->rwsem);
+ cpufreq_stats_free_table(policy);
cpufreq_remove_dev_symlink(policy);
kobj = &policy->kobj;
cmp = &policy->kobj_unregister;
@@ -1265,13 +1283,12 @@ static int cpufreq_online(unsigned int cpu)
}
}
- blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
- CPUFREQ_START, policy);
-
if (new_policy) {
ret = cpufreq_add_dev_interface(policy);
if (ret)
goto out_exit_policy;
+
+ cpufreq_stats_create_table(policy);
blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
CPUFREQ_CREATE_POLICY, policy);
@@ -1280,6 +1297,9 @@ static int cpufreq_online(unsigned int cpu)
write_unlock_irqrestore(&cpufreq_driver_lock, flags);
}
+ blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
+ CPUFREQ_START, policy);
+
ret = cpufreq_init_policy(policy);
if (ret) {
pr_err("%s: Failed to initialize policy for cpu: %d (%d)\n",
@@ -1556,9 +1576,6 @@ static unsigned int cpufreq_update_current_freq(struct cpufreq_policy *policy)
{
unsigned int new_freq;
- if (cpufreq_suspended)
- return 0;
-
new_freq = cpufreq_driver->get(policy->cpu);
if (!new_freq)
return 0;
@@ -1864,14 +1881,17 @@ static int __target_intermediate(struct cpufreq_policy *policy,
return ret;
}
-static int __target_index(struct cpufreq_policy *policy,
- struct cpufreq_frequency_table *freq_table, int index)
+static int __target_index(struct cpufreq_policy *policy, int index)
{
struct cpufreq_freqs freqs = {.old = policy->cur, .flags = 0};
unsigned int intermediate_freq = 0;
+ unsigned int newfreq = policy->freq_table[index].frequency;
int retval = -EINVAL;
bool notify;
+ if (newfreq == policy->cur)
+ return 0;
+
notify = !(cpufreq_driver->flags & CPUFREQ_ASYNC_NOTIFICATION);
if (notify) {
/* Handle switching to intermediate frequency */
@@ -1886,7 +1906,7 @@ static int __target_index(struct cpufreq_policy *policy,
freqs.old = freqs.new;
}
- freqs.new = freq_table[index].frequency;
+ freqs.new = newfreq;
pr_debug("%s: cpu: %d, oldfreq: %u, new freq: %u\n",
__func__, policy->cpu, freqs.old, freqs.new);
@@ -1923,17 +1943,13 @@ int __cpufreq_driver_target(struct cpufreq_policy *policy,
unsigned int relation)
{
unsigned int old_target_freq = target_freq;
- struct cpufreq_frequency_table *freq_table;
- int index, retval;
+ int index;
if (cpufreq_disabled())
return -ENODEV;
/* Make sure that target_freq is within supported range */
- if (target_freq > policy->max)
- target_freq = policy->max;
- if (target_freq < policy->min)
- target_freq = policy->min;
+ target_freq = clamp_val(target_freq, policy->min, policy->max);
pr_debug("target for CPU %u: %u kHz, relation %u, requested %u kHz\n",
policy->cpu, target_freq, relation, old_target_freq);
@@ -1956,23 +1972,9 @@ int __cpufreq_driver_target(struct cpufreq_policy *policy,
if (!cpufreq_driver->target_index)
return -EINVAL;
- freq_table = cpufreq_frequency_get_table(policy->cpu);
- if (unlikely(!freq_table)) {
- pr_err("%s: Unable to find freq_table\n", __func__);
- return -EINVAL;
- }
-
- retval = cpufreq_frequency_table_target(policy, freq_table, target_freq,
- relation, &index);
- if (unlikely(retval)) {
- pr_err("%s: Unable to find matching freq\n", __func__);
- return retval;
- }
-
- if (freq_table[index].frequency == policy->cur)
- return 0;
+ index = cpufreq_frequency_table_target(policy, target_freq, relation);
- return __target_index(policy, freq_table, index);
+ return __target_index(policy, index);
}
EXPORT_SYMBOL_GPL(__cpufreq_driver_target);
@@ -1997,7 +1999,7 @@ __weak struct cpufreq_governor *cpufreq_fallback_governor(void)
return NULL;
}
-static int cpufreq_governor(struct cpufreq_policy *policy, unsigned int event)
+static int cpufreq_init_governor(struct cpufreq_policy *policy)
{
int ret;
@@ -2025,36 +2027,82 @@ static int cpufreq_governor(struct cpufreq_policy *policy, unsigned int event)
}
}
- if (event == CPUFREQ_GOV_POLICY_INIT)
- if (!try_module_get(policy->governor->owner))
- return -EINVAL;
-
- pr_debug("%s: for CPU %u, event %u\n", __func__, policy->cpu, event);
+ if (!try_module_get(policy->governor->owner))
+ return -EINVAL;
- ret = policy->governor->governor(policy, event);
+ pr_debug("%s: for CPU %u\n", __func__, policy->cpu);
- if (event == CPUFREQ_GOV_POLICY_INIT) {
- if (ret)
+ if (policy->governor->init) {
+ ret = policy->governor->init(policy);
+ if (ret) {
module_put(policy->governor->owner);
- else
- policy->governor->initialized++;
- } else if (event == CPUFREQ_GOV_POLICY_EXIT) {
- policy->governor->initialized--;
- module_put(policy->governor->owner);
+ return ret;
+ }
}
- return ret;
+ return 0;
+}
+
+static void cpufreq_exit_governor(struct cpufreq_policy *policy)
+{
+ if (cpufreq_suspended || !policy->governor)
+ return;
+
+ pr_debug("%s: for CPU %u\n", __func__, policy->cpu);
+
+ if (policy->governor->exit)
+ policy->governor->exit(policy);
+
+ module_put(policy->governor->owner);
}
static int cpufreq_start_governor(struct cpufreq_policy *policy)
{
int ret;
+ if (cpufreq_suspended)
+ return 0;
+
+ if (!policy->governor)
+ return -EINVAL;
+
+ pr_debug("%s: for CPU %u\n", __func__, policy->cpu);
+
if (cpufreq_driver->get && !cpufreq_driver->setpolicy)
cpufreq_update_current_freq(policy);
- ret = cpufreq_governor(policy, CPUFREQ_GOV_START);
- return ret ? ret : cpufreq_governor(policy, CPUFREQ_GOV_LIMITS);
+ if (policy->governor->start) {
+ ret = policy->governor->start(policy);
+ if (ret)
+ return ret;
+ }
+
+ if (policy->governor->limits)
+ policy->governor->limits(policy);
+
+ return 0;
+}
+
+static void cpufreq_stop_governor(struct cpufreq_policy *policy)
+{
+ if (cpufreq_suspended || !policy->governor)
+ return;
+
+ pr_debug("%s: for CPU %u\n", __func__, policy->cpu);
+
+ if (policy->governor->stop)
+ policy->governor->stop(policy);
+}
+
+static void cpufreq_governor_limits(struct cpufreq_policy *policy)
+{
+ if (cpufreq_suspended || !policy->governor)
+ return;
+
+ pr_debug("%s: for CPU %u\n", __func__, policy->cpu);
+
+ if (policy->governor->limits)
+ policy->governor->limits(policy);
}
int cpufreq_register_governor(struct cpufreq_governor *governor)
@@ -2069,7 +2117,6 @@ int cpufreq_register_governor(struct cpufreq_governor *governor)
mutex_lock(&cpufreq_governor_mutex);
- governor->initialized = 0;
err = -EBUSY;
if (!find_governor(governor->name)) {
err = 0;
@@ -2184,6 +2231,8 @@ static int cpufreq_set_policy(struct cpufreq_policy *policy,
policy->min = new_policy->min;
policy->max = new_policy->max;
+ policy->cached_target_freq = UINT_MAX;
+
pr_debug("new min and max freqs are %u - %u kHz\n",
policy->min, policy->max);
@@ -2195,7 +2244,8 @@ static int cpufreq_set_policy(struct cpufreq_policy *policy,
if (new_policy->governor == policy->governor) {
pr_debug("cpufreq: governor limits update\n");
- return cpufreq_governor(policy, CPUFREQ_GOV_LIMITS);
+ cpufreq_governor_limits(policy);
+ return 0;
}
pr_debug("governor switch\n");
@@ -2210,7 +2260,7 @@ static int cpufreq_set_policy(struct cpufreq_policy *policy,
/* start new governor */
policy->governor = new_policy->governor;
- ret = cpufreq_governor(policy, CPUFREQ_GOV_POLICY_INIT);
+ ret = cpufreq_init_governor(policy);
if (!ret) {
ret = cpufreq_start_governor(policy);
if (!ret) {
@@ -2224,7 +2274,7 @@ static int cpufreq_set_policy(struct cpufreq_policy *policy,
pr_debug("starting governor %s failed\n", policy->governor->name);
if (old_gov) {
policy->governor = old_gov;
- if (cpufreq_governor(policy, CPUFREQ_GOV_POLICY_INIT))
+ if (cpufreq_init_governor(policy))
policy->governor = NULL;
else
cpufreq_start_governor(policy);
@@ -2309,26 +2359,25 @@ static struct notifier_block __refdata cpufreq_cpu_notifier = {
*********************************************************************/
static int cpufreq_boost_set_sw(int state)
{
- struct cpufreq_frequency_table *freq_table;
struct cpufreq_policy *policy;
int ret = -EINVAL;
for_each_active_policy(policy) {
- freq_table = cpufreq_frequency_get_table(policy->cpu);
- if (freq_table) {
- ret = cpufreq_frequency_table_cpuinfo(policy,
- freq_table);
- if (ret) {
- pr_err("%s: Policy frequency update failed\n",
- __func__);
- break;
- }
-
- down_write(&policy->rwsem);
- policy->user_policy.max = policy->max;
- cpufreq_governor(policy, CPUFREQ_GOV_LIMITS);
- up_write(&policy->rwsem);
+ if (!policy->freq_table)
+ continue;
+
+ ret = cpufreq_frequency_table_cpuinfo(policy,
+ policy->freq_table);
+ if (ret) {
+ pr_err("%s: Policy frequency update failed\n",
+ __func__);
+ break;
}
+
+ down_write(&policy->rwsem);
+ policy->user_policy.max = policy->max;
+ cpufreq_governor_limits(policy);
+ up_write(&policy->rwsem);
}
return ret;
diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c
index 316df247e00d..18da4f8051d3 100644
--- a/drivers/cpufreq/cpufreq_conservative.c
+++ b/drivers/cpufreq/cpufreq_conservative.c
@@ -17,7 +17,6 @@
struct cs_policy_dbs_info {
struct policy_dbs_info policy_dbs;
unsigned int down_skip;
- unsigned int requested_freq;
};
static inline struct cs_policy_dbs_info *to_dbs_info(struct policy_dbs_info *policy_dbs)
@@ -75,19 +74,17 @@ static unsigned int cs_dbs_timer(struct cpufreq_policy *policy)
/* Check for frequency increase */
if (load > dbs_data->up_threshold) {
+ unsigned int requested_freq = policy->cur;
+
dbs_info->down_skip = 0;
/* if we are already at full speed then break out early */
- if (dbs_info->requested_freq == policy->max)
+ if (requested_freq == policy->max)
goto out;
- dbs_info->requested_freq += get_freq_target(cs_tuners, policy);
-
- if (dbs_info->requested_freq > policy->max)
- dbs_info->requested_freq = policy->max;
+ requested_freq += get_freq_target(cs_tuners, policy);
- __cpufreq_driver_target(policy, dbs_info->requested_freq,
- CPUFREQ_RELATION_H);
+ __cpufreq_driver_target(policy, requested_freq, CPUFREQ_RELATION_H);
goto out;
}
@@ -98,36 +95,27 @@ static unsigned int cs_dbs_timer(struct cpufreq_policy *policy)
/* Check for frequency decrease */
if (load < cs_tuners->down_threshold) {
- unsigned int freq_target;
+ unsigned int freq_target, requested_freq = policy->cur;
/*
* if we cannot reduce the frequency anymore, break out early
*/
- if (policy->cur == policy->min)
+ if (requested_freq == policy->min)
goto out;
freq_target = get_freq_target(cs_tuners, policy);
- if (dbs_info->requested_freq > freq_target)
- dbs_info->requested_freq -= freq_target;
+ if (requested_freq > freq_target)
+ requested_freq -= freq_target;
else
- dbs_info->requested_freq = policy->min;
+ requested_freq = policy->min;
- __cpufreq_driver_target(policy, dbs_info->requested_freq,
- CPUFREQ_RELATION_L);
+ __cpufreq_driver_target(policy, requested_freq, CPUFREQ_RELATION_L);
}
out:
return dbs_data->sampling_rate;
}
-static int dbs_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
- void *data);
-
-static struct notifier_block cs_cpufreq_notifier_block = {
- .notifier_call = dbs_cpufreq_notifier,
-};
-
/************************** sysfs interface ************************/
-static struct dbs_governor cs_dbs_gov;
static ssize_t store_sampling_down_factor(struct gov_attr_set *attr_set,
const char *buf, size_t count)
@@ -268,15 +256,13 @@ static void cs_free(struct policy_dbs_info *policy_dbs)
kfree(to_dbs_info(policy_dbs));
}
-static int cs_init(struct dbs_data *dbs_data, bool notify)
+static int cs_init(struct dbs_data *dbs_data)
{
struct cs_dbs_tuners *tuners;
tuners = kzalloc(sizeof(*tuners), GFP_KERNEL);
- if (!tuners) {
- pr_err("%s: kzalloc failed\n", __func__);
+ if (!tuners)
return -ENOMEM;
- }
tuners->down_threshold = DEF_FREQUENCY_DOWN_THRESHOLD;
tuners->freq_step = DEF_FREQUENCY_STEP;
@@ -288,19 +274,11 @@ static int cs_init(struct dbs_data *dbs_data, bool notify)
dbs_data->min_sampling_rate = MIN_SAMPLING_RATE_RATIO *
jiffies_to_usecs(10);
- if (notify)
- cpufreq_register_notifier(&cs_cpufreq_notifier_block,
- CPUFREQ_TRANSITION_NOTIFIER);
-
return 0;
}
-static void cs_exit(struct dbs_data *dbs_data, bool notify)
+static void cs_exit(struct dbs_data *dbs_data)
{
- if (notify)
- cpufreq_unregister_notifier(&cs_cpufreq_notifier_block,
- CPUFREQ_TRANSITION_NOTIFIER);
-
kfree(dbs_data->tuners);
}
@@ -309,16 +287,10 @@ static void cs_start(struct cpufreq_policy *policy)
struct cs_policy_dbs_info *dbs_info = to_dbs_info(policy->governor_data);
dbs_info->down_skip = 0;
- dbs_info->requested_freq = policy->cur;
}
-static struct dbs_governor cs_dbs_gov = {
- .gov = {
- .name = "conservative",
- .governor = cpufreq_governor_dbs,
- .max_transition_latency = TRANSITION_LATENCY_LIMIT,
- .owner = THIS_MODULE,
- },
+static struct dbs_governor cs_governor = {
+ .gov = CPUFREQ_DBS_GOVERNOR_INITIALIZER("conservative"),
.kobj_type = { .default_attrs = cs_attributes },
.gov_dbs_timer = cs_dbs_timer,
.alloc = cs_alloc,
@@ -328,33 +300,7 @@ static struct dbs_governor cs_dbs_gov = {
.start = cs_start,
};
-#define CPU_FREQ_GOV_CONSERVATIVE (&cs_dbs_gov.gov)
-
-static int dbs_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
- void *data)
-{
- struct cpufreq_freqs *freq = data;
- struct cpufreq_policy *policy = cpufreq_cpu_get_raw(freq->cpu);
- struct cs_policy_dbs_info *dbs_info;
-
- if (!policy)
- return 0;
-
- /* policy isn't governed by conservative governor */
- if (policy->governor != CPU_FREQ_GOV_CONSERVATIVE)
- return 0;
-
- dbs_info = to_dbs_info(policy->governor_data);
- /*
- * we only care if our internally tracked freq moves outside the 'valid'
- * ranges of frequency available to us otherwise we do not change it
- */
- if (dbs_info->requested_freq > policy->max
- || dbs_info->requested_freq < policy->min)
- dbs_info->requested_freq = freq->new;
-
- return 0;
-}
+#define CPU_FREQ_GOV_CONSERVATIVE (&cs_governor.gov)
static int __init cpufreq_gov_dbs_init(void)
{
diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c
index be498d56dd69..e415349ab31b 100644
--- a/drivers/cpufreq/cpufreq_governor.c
+++ b/drivers/cpufreq/cpufreq_governor.c
@@ -336,17 +336,6 @@ static inline void gov_clear_update_util(struct cpufreq_policy *policy)
synchronize_sched();
}
-static void gov_cancel_work(struct cpufreq_policy *policy)
-{
- struct policy_dbs_info *policy_dbs = policy->governor_data;
-
- gov_clear_update_util(policy_dbs->policy);
- irq_work_sync(&policy_dbs->irq_work);
- cancel_work_sync(&policy_dbs->work);
- atomic_set(&policy_dbs->work_count, 0);
- policy_dbs->work_in_progress = false;
-}
-
static struct policy_dbs_info *alloc_policy_dbs_info(struct cpufreq_policy *policy,
struct dbs_governor *gov)
{
@@ -389,7 +378,7 @@ static void free_policy_dbs_info(struct policy_dbs_info *policy_dbs,
gov->free(policy_dbs);
}
-static int cpufreq_governor_init(struct cpufreq_policy *policy)
+int cpufreq_dbs_governor_init(struct cpufreq_policy *policy)
{
struct dbs_governor *gov = dbs_governor_of(policy);
struct dbs_data *dbs_data;
@@ -429,7 +418,7 @@ static int cpufreq_governor_init(struct cpufreq_policy *policy)
gov_attr_set_init(&dbs_data->attr_set, &policy_dbs->list);
- ret = gov->init(dbs_data, !policy->governor->initialized);
+ ret = gov->init(dbs_data);
if (ret)
goto free_policy_dbs_info;
@@ -458,13 +447,13 @@ static int cpufreq_governor_init(struct cpufreq_policy *policy)
goto out;
/* Failure, so roll back. */
- pr_err("cpufreq: Governor initialization failed (dbs_data kobject init error %d)\n", ret);
+ pr_err("initialization failed (dbs_data kobject init error %d)\n", ret);
policy->governor_data = NULL;
if (!have_governor_per_policy())
gov->gdbs_data = NULL;
- gov->exit(dbs_data, !policy->governor->initialized);
+ gov->exit(dbs_data);
kfree(dbs_data);
free_policy_dbs_info:
@@ -474,8 +463,9 @@ out:
mutex_unlock(&gov_dbs_data_mutex);
return ret;
}
+EXPORT_SYMBOL_GPL(cpufreq_dbs_governor_init);
-static int cpufreq_governor_exit(struct cpufreq_policy *policy)
+void cpufreq_dbs_governor_exit(struct cpufreq_policy *policy)
{
struct dbs_governor *gov = dbs_governor_of(policy);
struct policy_dbs_info *policy_dbs = policy->governor_data;
@@ -493,17 +483,17 @@ static int cpufreq_governor_exit(struct cpufreq_policy *policy)
if (!have_governor_per_policy())
gov->gdbs_data = NULL;
- gov->exit(dbs_data, policy->governor->initialized == 1);
+ gov->exit(dbs_data);
kfree(dbs_data);
}
free_policy_dbs_info(policy_dbs, gov);
mutex_unlock(&gov_dbs_data_mutex);
- return 0;
}
+EXPORT_SYMBOL_GPL(cpufreq_dbs_governor_exit);
-static int cpufreq_governor_start(struct cpufreq_policy *policy)
+int cpufreq_dbs_governor_start(struct cpufreq_policy *policy)
{
struct dbs_governor *gov = dbs_governor_of(policy);
struct policy_dbs_info *policy_dbs = policy->governor_data;
@@ -539,47 +529,28 @@ static int cpufreq_governor_start(struct cpufreq_policy *policy)
gov_set_update_util(policy_dbs, sampling_rate);
return 0;
}
+EXPORT_SYMBOL_GPL(cpufreq_dbs_governor_start);
-static int cpufreq_governor_stop(struct cpufreq_policy *policy)
+void cpufreq_dbs_governor_stop(struct cpufreq_policy *policy)
{
- gov_cancel_work(policy);
- return 0;
+ struct policy_dbs_info *policy_dbs = policy->governor_data;
+
+ gov_clear_update_util(policy_dbs->policy);
+ irq_work_sync(&policy_dbs->irq_work);
+ cancel_work_sync(&policy_dbs->work);
+ atomic_set(&policy_dbs->work_count, 0);
+ policy_dbs->work_in_progress = false;
}
+EXPORT_SYMBOL_GPL(cpufreq_dbs_governor_stop);
-static int cpufreq_governor_limits(struct cpufreq_policy *policy)
+void cpufreq_dbs_governor_limits(struct cpufreq_policy *policy)
{
struct policy_dbs_info *policy_dbs = policy->governor_data;
mutex_lock(&policy_dbs->timer_mutex);
-
- if (policy->max < policy->cur)
- __cpufreq_driver_target(policy, policy->max, CPUFREQ_RELATION_H);
- else if (policy->min > policy->cur)
- __cpufreq_driver_target(policy, policy->min, CPUFREQ_RELATION_L);
-
+ cpufreq_policy_apply_limits(policy);
gov_update_sample_delay(policy_dbs, 0);
mutex_unlock(&policy_dbs->timer_mutex);
-
- return 0;
-}
-
-int cpufreq_governor_dbs(struct cpufreq_policy *policy, unsigned int event)
-{
- if (event == CPUFREQ_GOV_POLICY_INIT) {
- return cpufreq_governor_init(policy);
- } else if (policy->governor_data) {
- switch (event) {
- case CPUFREQ_GOV_POLICY_EXIT:
- return cpufreq_governor_exit(policy);
- case CPUFREQ_GOV_START:
- return cpufreq_governor_start(policy);
- case CPUFREQ_GOV_STOP:
- return cpufreq_governor_stop(policy);
- case CPUFREQ_GOV_LIMITS:
- return cpufreq_governor_limits(policy);
- }
- }
- return -EINVAL;
}
-EXPORT_SYMBOL_GPL(cpufreq_governor_dbs);
+EXPORT_SYMBOL_GPL(cpufreq_dbs_governor_limits);
diff --git a/drivers/cpufreq/cpufreq_governor.h b/drivers/cpufreq/cpufreq_governor.h
index 34eb214b6d57..ef1037e9c92b 100644
--- a/drivers/cpufreq/cpufreq_governor.h
+++ b/drivers/cpufreq/cpufreq_governor.h
@@ -138,8 +138,8 @@ struct dbs_governor {
unsigned int (*gov_dbs_timer)(struct cpufreq_policy *policy);
struct policy_dbs_info *(*alloc)(void);
void (*free)(struct policy_dbs_info *policy_dbs);
- int (*init)(struct dbs_data *dbs_data, bool notify);
- void (*exit)(struct dbs_data *dbs_data, bool notify);
+ int (*init)(struct dbs_data *dbs_data);
+ void (*exit)(struct dbs_data *dbs_data);
void (*start)(struct cpufreq_policy *policy);
};
@@ -148,6 +148,25 @@ static inline struct dbs_governor *dbs_governor_of(struct cpufreq_policy *policy
return container_of(policy->governor, struct dbs_governor, gov);
}
+/* Governor callback routines */
+int cpufreq_dbs_governor_init(struct cpufreq_policy *policy);
+void cpufreq_dbs_governor_exit(struct cpufreq_policy *policy);
+int cpufreq_dbs_governor_start(struct cpufreq_policy *policy);
+void cpufreq_dbs_governor_stop(struct cpufreq_policy *policy);
+void cpufreq_dbs_governor_limits(struct cpufreq_policy *policy);
+
+#define CPUFREQ_DBS_GOVERNOR_INITIALIZER(_name_) \
+ { \
+ .name = _name_, \
+ .max_transition_latency = TRANSITION_LATENCY_LIMIT, \
+ .owner = THIS_MODULE, \
+ .init = cpufreq_dbs_governor_init, \
+ .exit = cpufreq_dbs_governor_exit, \
+ .start = cpufreq_dbs_governor_start, \
+ .stop = cpufreq_dbs_governor_stop, \
+ .limits = cpufreq_dbs_governor_limits, \
+ }
+
/* Governor specific operations */
struct od_ops {
unsigned int (*powersave_bias_target)(struct cpufreq_policy *policy,
@@ -155,7 +174,6 @@ struct od_ops {
};
unsigned int dbs_update(struct cpufreq_policy *policy);
-int cpufreq_governor_dbs(struct cpufreq_policy *policy, unsigned int event);
void od_register_powersave_bias_handler(unsigned int (*f)
(struct cpufreq_policy *, unsigned int, unsigned int),
unsigned int powersave_bias);
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
index 300163430516..3a1f49f5f4c6 100644
--- a/drivers/cpufreq/cpufreq_ondemand.c
+++ b/drivers/cpufreq/cpufreq_ondemand.c
@@ -65,34 +65,30 @@ static unsigned int generic_powersave_bias_target(struct cpufreq_policy *policy,
{
unsigned int freq_req, freq_reduc, freq_avg;
unsigned int freq_hi, freq_lo;
- unsigned int index = 0;
+ unsigned int index;
unsigned int delay_hi_us;
struct policy_dbs_info *policy_dbs = policy->governor_data;
struct od_policy_dbs_info *dbs_info = to_dbs_info(policy_dbs);
struct dbs_data *dbs_data = policy_dbs->dbs_data;
struct od_dbs_tuners *od_tuners = dbs_data->tuners;
+ struct cpufreq_frequency_table *freq_table = policy->freq_table;
- if (!dbs_info->freq_table) {
+ if (!freq_table) {
dbs_info->freq_lo = 0;
dbs_info->freq_lo_delay_us = 0;
return freq_next;
}
- cpufreq_frequency_table_target(policy, dbs_info->freq_table, freq_next,
- relation, &index);
- freq_req = dbs_info->freq_table[index].frequency;
+ index = cpufreq_frequency_table_target(policy, freq_next, relation);
+ freq_req = freq_table[index].frequency;
freq_reduc = freq_req * od_tuners->powersave_bias / 1000;
freq_avg = freq_req - freq_reduc;
/* Find freq bounds for freq_avg in freq_table */
- index = 0;
- cpufreq_frequency_table_target(policy, dbs_info->freq_table, freq_avg,
- CPUFREQ_RELATION_H, &index);
- freq_lo = dbs_info->freq_table[index].frequency;
- index = 0;
- cpufreq_frequency_table_target(policy, dbs_info->freq_table, freq_avg,
- CPUFREQ_RELATION_L, &index);
- freq_hi = dbs_info->freq_table[index].frequency;
+ index = cpufreq_table_find_index_h(policy, freq_avg);
+ freq_lo = freq_table[index].frequency;
+ index = cpufreq_table_find_index_l(policy, freq_avg);
+ freq_hi = freq_table[index].frequency;
/* Find out how long we have to be in hi and lo freqs */
if (freq_hi == freq_lo) {
@@ -113,7 +109,6 @@ static void ondemand_powersave_bias_init(struct cpufreq_policy *policy)
{
struct od_policy_dbs_info *dbs_info = to_dbs_info(policy->governor_data);
- dbs_info->freq_table = cpufreq_frequency_get_table(policy->cpu);
dbs_info->freq_lo = 0;
}
@@ -361,17 +356,15 @@ static void od_free(struct policy_dbs_info *policy_dbs)
kfree(to_dbs_info(policy_dbs));
}
-static int od_init(struct dbs_data *dbs_data, bool notify)
+static int od_init(struct dbs_data *dbs_data)
{
struct od_dbs_tuners *tuners;
u64 idle_time;
int cpu;
tuners = kzalloc(sizeof(*tuners), GFP_KERNEL);
- if (!tuners) {
- pr_err("%s: kzalloc failed\n", __func__);
+ if (!tuners)
return -ENOMEM;
- }
cpu = get_cpu();
idle_time = get_cpu_idle_time_us(cpu, NULL);
@@ -402,7 +395,7 @@ static int od_init(struct dbs_data *dbs_data, bool notify)
return 0;
}
-static void od_exit(struct dbs_data *dbs_data, bool notify)
+static void od_exit(struct dbs_data *dbs_data)
{
kfree(dbs_data->tuners);
}
@@ -420,12 +413,7 @@ static struct od_ops od_ops = {
};
static struct dbs_governor od_dbs_gov = {
- .gov = {
- .name = "ondemand",
- .governor = cpufreq_governor_dbs,
- .max_transition_latency = TRANSITION_LATENCY_LIMIT,
- .owner = THIS_MODULE,
- },
+ .gov = CPUFREQ_DBS_GOVERNOR_INITIALIZER("ondemand"),
.kobj_type = { .default_attrs = od_attributes },
.gov_dbs_timer = od_dbs_timer,
.alloc = od_alloc,
diff --git a/drivers/cpufreq/cpufreq_ondemand.h b/drivers/cpufreq/cpufreq_ondemand.h
index f0121db3cd9e..640ea4e97106 100644
--- a/drivers/cpufreq/cpufreq_ondemand.h
+++ b/drivers/cpufreq/cpufreq_ondemand.h
@@ -13,7 +13,6 @@
struct od_policy_dbs_info {
struct policy_dbs_info policy_dbs;
- struct cpufreq_frequency_table *freq_table;
unsigned int freq_lo;
unsigned int freq_lo_delay_us;
unsigned int freq_hi_delay_us;
diff --git a/drivers/cpufreq/cpufreq_performance.c b/drivers/cpufreq/cpufreq_performance.c
index af9f4b96f5a8..dafb679adc58 100644
--- a/drivers/cpufreq/cpufreq_performance.c
+++ b/drivers/cpufreq/cpufreq_performance.c
@@ -16,27 +16,16 @@
#include <linux/init.h>
#include <linux/module.h>
-static int cpufreq_governor_performance(struct cpufreq_policy *policy,
- unsigned int event)
+static void cpufreq_gov_performance_limits(struct cpufreq_policy *policy)
{
- switch (event) {
- case CPUFREQ_GOV_START:
- case CPUFREQ_GOV_LIMITS:
- pr_debug("setting to %u kHz because of event %u\n",
- policy->max, event);
- __cpufreq_driver_target(policy, policy->max,
- CPUFREQ_RELATION_H);
- break;
- default:
- break;
- }
- return 0;
+ pr_debug("setting to %u kHz\n", policy->max);
+ __cpufreq_driver_target(policy, policy->max, CPUFREQ_RELATION_H);
}
static struct cpufreq_governor cpufreq_gov_performance = {
.name = "performance",
- .governor = cpufreq_governor_performance,
.owner = THIS_MODULE,
+ .limits = cpufreq_gov_performance_limits,
};
static int __init cpufreq_gov_performance_init(void)
diff --git a/drivers/cpufreq/cpufreq_powersave.c b/drivers/cpufreq/cpufreq_powersave.c
index b8b400232a74..78a651038faf 100644
--- a/drivers/cpufreq/cpufreq_powersave.c
+++ b/drivers/cpufreq/cpufreq_powersave.c
@@ -16,26 +16,15 @@
#include <linux/init.h>
#include <linux/module.h>
-static int cpufreq_governor_powersave(struct cpufreq_policy *policy,
- unsigned int event)
+static void cpufreq_gov_powersave_limits(struct cpufreq_policy *policy)
{
- switch (event) {
- case CPUFREQ_GOV_START:
- case CPUFREQ_GOV_LIMITS:
- pr_debug("setting to %u kHz because of event %u\n",
- policy->min, event);
- __cpufreq_driver_target(policy, policy->min,
- CPUFREQ_RELATION_L);
- break;
- default:
- break;
- }
- return 0;
+ pr_debug("setting to %u kHz\n", policy->min);
+ __cpufreq_driver_target(policy, policy->min, CPUFREQ_RELATION_L);
}
static struct cpufreq_governor cpufreq_gov_powersave = {
.name = "powersave",
- .governor = cpufreq_governor_powersave,
+ .limits = cpufreq_gov_powersave_limits,
.owner = THIS_MODULE,
};
diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c
index 5e370a30a964..06d3abdffd3a 100644
--- a/drivers/cpufreq/cpufreq_stats.c
+++ b/drivers/cpufreq/cpufreq_stats.c
@@ -15,7 +15,7 @@
#include <linux/slab.h>
#include <linux/cputime.h>
-static spinlock_t cpufreq_stats_lock;
+static DEFINE_SPINLOCK(cpufreq_stats_lock);
struct cpufreq_stats {
unsigned int total_trans;
@@ -52,6 +52,9 @@ static ssize_t show_time_in_state(struct cpufreq_policy *policy, char *buf)
ssize_t len = 0;
int i;
+ if (policy->fast_switch_enabled)
+ return 0;
+
cpufreq_stats_update(stats);
for (i = 0; i < stats->state_num; i++) {
len += sprintf(buf + len, "%u %llu\n", stats->freq_table[i],
@@ -68,6 +71,9 @@ static ssize_t show_trans_table(struct cpufreq_policy *policy, char *buf)
ssize_t len = 0;
int i, j;
+ if (policy->fast_switch_enabled)
+ return 0;
+
len += snprintf(buf + len, PAGE_SIZE - len, " From : To\n");
len += snprintf(buf + len, PAGE_SIZE - len, " : ");
for (i = 0; i < stats->state_num; i++) {
@@ -130,7 +136,7 @@ static int freq_table_get_index(struct cpufreq_stats *stats, unsigned int freq)
return -1;
}
-static void __cpufreq_stats_free_table(struct cpufreq_policy *policy)
+void cpufreq_stats_free_table(struct cpufreq_policy *policy)
{
struct cpufreq_stats *stats = policy->stats;
@@ -146,39 +152,25 @@ static void __cpufreq_stats_free_table(struct cpufreq_policy *policy)
policy->stats = NULL;
}
-static void cpufreq_stats_free_table(unsigned int cpu)
-{
- struct cpufreq_policy *policy;
-
- policy = cpufreq_cpu_get(cpu);
- if (!policy)
- return;
-
- __cpufreq_stats_free_table(policy);
-
- cpufreq_cpu_put(policy);
-}
-
-static int __cpufreq_stats_create_table(struct cpufreq_policy *policy)
+void cpufreq_stats_create_table(struct cpufreq_policy *policy)
{
unsigned int i = 0, count = 0, ret = -ENOMEM;
struct cpufreq_stats *stats;
unsigned int alloc_size;
- unsigned int cpu = policy->cpu;
struct cpufreq_frequency_table *pos, *table;
/* We need cpufreq table for creating stats table */
- table = cpufreq_frequency_get_table(cpu);
+ table = policy->freq_table;
if (unlikely(!table))
- return 0;
+ return;
/* stats already initialized */
if (policy->stats)
- return -EEXIST;
+ return;
stats = kzalloc(sizeof(*stats), GFP_KERNEL);
if (!stats)
- return -ENOMEM;
+ return;
/* Find total allocation size */
cpufreq_for_each_valid_entry(pos, table)
@@ -215,80 +207,32 @@ static int __cpufreq_stats_create_table(struct cpufreq_policy *policy)
policy->stats = stats;
ret = sysfs_create_group(&policy->kobj, &stats_attr_group);
if (!ret)
- return 0;
+ return;
/* We failed, release resources */
policy->stats = NULL;
kfree(stats->time_in_state);
free_stat:
kfree(stats);
-
- return ret;
-}
-
-static void cpufreq_stats_create_table(unsigned int cpu)
-{
- struct cpufreq_policy *policy;
-
- /*
- * "likely(!policy)" because normally cpufreq_stats will be registered
- * before cpufreq driver
- */
- policy = cpufreq_cpu_get(cpu);
- if (likely(!policy))
- return;
-
- __cpufreq_stats_create_table(policy);
-
- cpufreq_cpu_put(policy);
}
-static int cpufreq_stat_notifier_policy(struct notifier_block *nb,
- unsigned long val, void *data)
+void cpufreq_stats_record_transition(struct cpufreq_policy *policy,
+ unsigned int new_freq)
{
- int ret = 0;
- struct cpufreq_policy *policy = data;
-
- if (val == CPUFREQ_CREATE_POLICY)
- ret = __cpufreq_stats_create_table(policy);
- else if (val == CPUFREQ_REMOVE_POLICY)
- __cpufreq_stats_free_table(policy);
-
- return ret;
-}
-
-static int cpufreq_stat_notifier_trans(struct notifier_block *nb,
- unsigned long val, void *data)
-{
- struct cpufreq_freqs *freq = data;
- struct cpufreq_policy *policy = cpufreq_cpu_get(freq->cpu);
- struct cpufreq_stats *stats;
+ struct cpufreq_stats *stats = policy->stats;
int old_index, new_index;
- if (!policy) {
- pr_err("%s: No policy found\n", __func__);
- return 0;
- }
-
- if (val != CPUFREQ_POSTCHANGE)
- goto put_policy;
-
- if (!policy->stats) {
+ if (!stats) {
pr_debug("%s: No stats found\n", __func__);
- goto put_policy;
+ return;
}
- stats = policy->stats;
-
old_index = stats->last_index;
- new_index = freq_table_get_index(stats, freq->new);
+ new_index = freq_table_get_index(stats, new_freq);
/* We can't do stats->time_in_state[-1]= .. */
- if (old_index == -1 || new_index == -1)
- goto put_policy;
-
- if (old_index == new_index)
- goto put_policy;
+ if (old_index == -1 || new_index == -1 || old_index == new_index)
+ return;
cpufreq_stats_update(stats);
@@ -297,61 +241,4 @@ static int cpufreq_stat_notifier_trans(struct notifier_block *nb,
stats->trans_table[old_index * stats->max_state + new_index]++;
#endif
stats->total_trans++;
-
-put_policy:
- cpufreq_cpu_put(policy);
- return 0;
}
-
-static struct notifier_block notifier_policy_block = {
- .notifier_call = cpufreq_stat_notifier_policy
-};
-
-static struct notifier_block notifier_trans_block = {
- .notifier_call = cpufreq_stat_notifier_trans
-};
-
-static int __init cpufreq_stats_init(void)
-{
- int ret;
- unsigned int cpu;
-
- spin_lock_init(&cpufreq_stats_lock);
- ret = cpufreq_register_notifier(&notifier_policy_block,
- CPUFREQ_POLICY_NOTIFIER);
- if (ret)
- return ret;
-
- for_each_online_cpu(cpu)
- cpufreq_stats_create_table(cpu);
-
- ret = cpufreq_register_notifier(&notifier_trans_block,
- CPUFREQ_TRANSITION_NOTIFIER);
- if (ret) {
- cpufreq_unregister_notifier(&notifier_policy_block,
- CPUFREQ_POLICY_NOTIFIER);
- for_each_online_cpu(cpu)
- cpufreq_stats_free_table(cpu);
- return ret;
- }
-
- return 0;
-}
-static void __exit cpufreq_stats_exit(void)
-{
- unsigned int cpu;
-
- cpufreq_unregister_notifier(&notifier_policy_block,
- CPUFREQ_POLICY_NOTIFIER);
- cpufreq_unregister_notifier(&notifier_trans_block,
- CPUFREQ_TRANSITION_NOTIFIER);
- for_each_online_cpu(cpu)
- cpufreq_stats_free_table(cpu);
-}
-
-MODULE_AUTHOR("Zou Nan hai <nanhai.zou@intel.com>");
-MODULE_DESCRIPTION("Export cpufreq stats via sysfs");
-MODULE_LICENSE("GPL");
-
-module_init(cpufreq_stats_init);
-module_exit(cpufreq_stats_exit);
diff --git a/drivers/cpufreq/cpufreq_userspace.c b/drivers/cpufreq/cpufreq_userspace.c
index 9f3dec9a3f36..bd897e3e134d 100644
--- a/drivers/cpufreq/cpufreq_userspace.c
+++ b/drivers/cpufreq/cpufreq_userspace.c
@@ -65,66 +65,66 @@ static int cpufreq_userspace_policy_init(struct cpufreq_policy *policy)
return 0;
}
-static int cpufreq_governor_userspace(struct cpufreq_policy *policy,
- unsigned int event)
+static void cpufreq_userspace_policy_exit(struct cpufreq_policy *policy)
+{
+ mutex_lock(&userspace_mutex);
+ kfree(policy->governor_data);
+ policy->governor_data = NULL;
+ mutex_unlock(&userspace_mutex);
+}
+
+static int cpufreq_userspace_policy_start(struct cpufreq_policy *policy)
{
unsigned int *setspeed = policy->governor_data;
- unsigned int cpu = policy->cpu;
- int rc = 0;
- if (event == CPUFREQ_GOV_POLICY_INIT)
- return cpufreq_userspace_policy_init(policy);
+ BUG_ON(!policy->cur);
+ pr_debug("started managing cpu %u\n", policy->cpu);
- if (!setspeed)
- return -EINVAL;
-
- switch (event) {
- case CPUFREQ_GOV_POLICY_EXIT:
- mutex_lock(&userspace_mutex);
- policy->governor_data = NULL;
- kfree(setspeed);
- mutex_unlock(&userspace_mutex);
- break;
- case CPUFREQ_GOV_START:
- BUG_ON(!policy->cur);
- pr_debug("started managing cpu %u\n", cpu);
-
- mutex_lock(&userspace_mutex);
- per_cpu(cpu_is_managed, cpu) = 1;
- *setspeed = policy->cur;
- mutex_unlock(&userspace_mutex);
- break;
- case CPUFREQ_GOV_STOP:
- pr_debug("managing cpu %u stopped\n", cpu);
-
- mutex_lock(&userspace_mutex);
- per_cpu(cpu_is_managed, cpu) = 0;
- *setspeed = 0;
- mutex_unlock(&userspace_mutex);
- break;
- case CPUFREQ_GOV_LIMITS:
- mutex_lock(&userspace_mutex);
- pr_debug("limit event for cpu %u: %u - %u kHz, currently %u kHz, last set to %u kHz\n",
- cpu, policy->min, policy->max, policy->cur, *setspeed);
-
- if (policy->max < *setspeed)
- __cpufreq_driver_target(policy, policy->max,
- CPUFREQ_RELATION_H);
- else if (policy->min > *setspeed)
- __cpufreq_driver_target(policy, policy->min,
- CPUFREQ_RELATION_L);
- else
- __cpufreq_driver_target(policy, *setspeed,
- CPUFREQ_RELATION_L);
- mutex_unlock(&userspace_mutex);
- break;
- }
- return rc;
+ mutex_lock(&userspace_mutex);
+ per_cpu(cpu_is_managed, policy->cpu) = 1;
+ *setspeed = policy->cur;
+ mutex_unlock(&userspace_mutex);
+ return 0;
+}
+
+static void cpufreq_userspace_policy_stop(struct cpufreq_policy *policy)
+{
+ unsigned int *setspeed = policy->governor_data;
+
+ pr_debug("managing cpu %u stopped\n", policy->cpu);
+
+ mutex_lock(&userspace_mutex);
+ per_cpu(cpu_is_managed, policy->cpu) = 0;
+ *setspeed = 0;
+ mutex_unlock(&userspace_mutex);
+}
+
+static void cpufreq_userspace_policy_limits(struct cpufreq_policy *policy)
+{
+ unsigned int *setspeed = policy->governor_data;
+
+ mutex_lock(&userspace_mutex);
+
+ pr_debug("limit event for cpu %u: %u - %u kHz, currently %u kHz, last set to %u kHz\n",
+ policy->cpu, policy->min, policy->max, policy->cur, *setspeed);
+
+ if (policy->max < *setspeed)
+ __cpufreq_driver_target(policy, policy->max, CPUFREQ_RELATION_H);
+ else if (policy->min > *setspeed)
+ __cpufreq_driver_target(policy, policy->min, CPUFREQ_RELATION_L);
+ else
+ __cpufreq_driver_target(policy, *setspeed, CPUFREQ_RELATION_L);
+
+ mutex_unlock(&userspace_mutex);
}
static struct cpufreq_governor cpufreq_gov_userspace = {
.name = "userspace",
- .governor = cpufreq_governor_userspace,
+ .init = cpufreq_userspace_policy_init,
+ .exit = cpufreq_userspace_policy_exit,
+ .start = cpufreq_userspace_policy_start,
+ .stop = cpufreq_userspace_policy_stop,
+ .limits = cpufreq_userspace_policy_limits,
.store_setspeed = cpufreq_set,
.show_setspeed = show_speed,
.owner = THIS_MODULE,
diff --git a/drivers/cpufreq/davinci-cpufreq.c b/drivers/cpufreq/davinci-cpufreq.c
index 7e336d20c184..b95a872800ec 100644
--- a/drivers/cpufreq/davinci-cpufreq.c
+++ b/drivers/cpufreq/davinci-cpufreq.c
@@ -38,26 +38,6 @@ struct davinci_cpufreq {
};
static struct davinci_cpufreq cpufreq;
-static int davinci_verify_speed(struct cpufreq_policy *policy)
-{
- struct davinci_cpufreq_config *pdata = cpufreq.dev->platform_data;
- struct cpufreq_frequency_table *freq_table = pdata->freq_table;
- struct clk *armclk = cpufreq.armclk;
-
- if (freq_table)
- return cpufreq_frequency_table_verify(policy, freq_table);
-
- if (policy->cpu)
- return -EINVAL;
-
- cpufreq_verify_within_cpu_limits(policy);
- policy->min = clk_round_rate(armclk, policy->min * 1000) / 1000;
- policy->max = clk_round_rate(armclk, policy->max * 1000) / 1000;
- cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq,
- policy->cpuinfo.max_freq);
- return 0;
-}
-
static int davinci_target(struct cpufreq_policy *policy, unsigned int idx)
{
struct davinci_cpufreq_config *pdata = cpufreq.dev->platform_data;
@@ -121,7 +101,7 @@ static int davinci_cpu_init(struct cpufreq_policy *policy)
static struct cpufreq_driver davinci_driver = {
.flags = CPUFREQ_STICKY | CPUFREQ_NEED_INITIAL_FREQ_CHECK,
- .verify = davinci_verify_speed,
+ .verify = cpufreq_generic_frequency_table_verify,
.target_index = davinci_target,
.get = cpufreq_generic_get,
.init = davinci_cpu_init,
diff --git a/drivers/cpufreq/freq_table.c b/drivers/cpufreq/freq_table.c
index a8f1daffc9bc..3bbbf9e6960c 100644
--- a/drivers/cpufreq/freq_table.c
+++ b/drivers/cpufreq/freq_table.c
@@ -63,8 +63,6 @@ int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,
else
return 0;
}
-EXPORT_SYMBOL_GPL(cpufreq_frequency_table_cpuinfo);
-
int cpufreq_frequency_table_verify(struct cpufreq_policy *policy,
struct cpufreq_frequency_table *table)
@@ -108,20 +106,16 @@ EXPORT_SYMBOL_GPL(cpufreq_frequency_table_verify);
*/
int cpufreq_generic_frequency_table_verify(struct cpufreq_policy *policy)
{
- struct cpufreq_frequency_table *table =
- cpufreq_frequency_get_table(policy->cpu);
- if (!table)
+ if (!policy->freq_table)
return -ENODEV;
- return cpufreq_frequency_table_verify(policy, table);
+ return cpufreq_frequency_table_verify(policy, policy->freq_table);
}
EXPORT_SYMBOL_GPL(cpufreq_generic_frequency_table_verify);
-int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
- struct cpufreq_frequency_table *table,
- unsigned int target_freq,
- unsigned int relation,
- unsigned int *index)
+int cpufreq_table_index_unsorted(struct cpufreq_policy *policy,
+ unsigned int target_freq,
+ unsigned int relation)
{
struct cpufreq_frequency_table optimal = {
.driver_data = ~0,
@@ -132,7 +126,9 @@ int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
.frequency = 0,
};
struct cpufreq_frequency_table *pos;
+ struct cpufreq_frequency_table *table = policy->freq_table;
unsigned int freq, diff, i = 0;
+ int index;
pr_debug("request for target %u kHz (relation: %u) for cpu %u\n",
target_freq, relation, policy->cpu);
@@ -196,25 +192,26 @@ int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
}
}
if (optimal.driver_data > i) {
- if (suboptimal.driver_data > i)
- return -EINVAL;
- *index = suboptimal.driver_data;
- } else
- *index = optimal.driver_data;
+ if (suboptimal.driver_data > i) {
+ WARN(1, "Invalid frequency table: %d\n", policy->cpu);
+ return 0;
+ }
- pr_debug("target index is %u, freq is:%u kHz\n", *index,
- table[*index].frequency);
+ index = suboptimal.driver_data;
+ } else
+ index = optimal.driver_data;
- return 0;
+ pr_debug("target index is %u, freq is:%u kHz\n", index,
+ table[index].frequency);
+ return index;
}
-EXPORT_SYMBOL_GPL(cpufreq_frequency_table_target);
+EXPORT_SYMBOL_GPL(cpufreq_table_index_unsorted);
int cpufreq_frequency_table_get_index(struct cpufreq_policy *policy,
unsigned int freq)
{
- struct cpufreq_frequency_table *pos, *table;
+ struct cpufreq_frequency_table *pos, *table = policy->freq_table;
- table = cpufreq_frequency_get_table(policy->cpu);
if (unlikely(!table)) {
pr_debug("%s: Unable to find frequency table\n", __func__);
return -ENOENT;
@@ -300,15 +297,72 @@ struct freq_attr *cpufreq_generic_attr[] = {
};
EXPORT_SYMBOL_GPL(cpufreq_generic_attr);
+static int set_freq_table_sorted(struct cpufreq_policy *policy)
+{
+ struct cpufreq_frequency_table *pos, *table = policy->freq_table;
+ struct cpufreq_frequency_table *prev = NULL;
+ int ascending = 0;
+
+ policy->freq_table_sorted = CPUFREQ_TABLE_UNSORTED;
+
+ cpufreq_for_each_valid_entry(pos, table) {
+ if (!prev) {
+ prev = pos;
+ continue;
+ }
+
+ if (pos->frequency == prev->frequency) {
+ pr_warn("Duplicate freq-table entries: %u\n",
+ pos->frequency);
+ return -EINVAL;
+ }
+
+ /* Frequency increased from prev to pos */
+ if (pos->frequency > prev->frequency) {
+ /* But frequency was decreasing earlier */
+ if (ascending < 0) {
+ pr_debug("Freq table is unsorted\n");
+ return 0;
+ }
+
+ ascending++;
+ } else {
+ /* Frequency decreased from prev to pos */
+
+ /* But frequency was increasing earlier */
+ if (ascending > 0) {
+ pr_debug("Freq table is unsorted\n");
+ return 0;
+ }
+
+ ascending--;
+ }
+
+ prev = pos;
+ }
+
+ if (ascending > 0)
+ policy->freq_table_sorted = CPUFREQ_TABLE_SORTED_ASCENDING;
+ else
+ policy->freq_table_sorted = CPUFREQ_TABLE_SORTED_DESCENDING;
+
+ pr_debug("Freq table is sorted in %s order\n",
+ ascending > 0 ? "ascending" : "descending");
+
+ return 0;
+}
+
int cpufreq_table_validate_and_show(struct cpufreq_policy *policy,
struct cpufreq_frequency_table *table)
{
- int ret = cpufreq_frequency_table_cpuinfo(policy, table);
+ int ret;
- if (!ret)
- policy->freq_table = table;
+ ret = cpufreq_frequency_table_cpuinfo(policy, table);
+ if (ret)
+ return ret;
- return ret;
+ policy->freq_table = table;
+ return set_freq_table_sorted(policy);
}
EXPORT_SYMBOL_GPL(cpufreq_table_validate_and_show);
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
index 28690b284846..d8028def199d 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -97,7 +97,6 @@ static inline u64 div_ext_fp(u64 x, u64 y)
* read from MPERF MSR between last and current sample
* @tsc: Difference of time stamp counter between last and
* current sample
- * @freq: Effective frequency calculated from APERF/MPERF
* @time: Current time from scheduler
*
* This structure is used in the cpudata structure to store performance sample
@@ -109,7 +108,6 @@ struct sample {
u64 aperf;
u64 mperf;
u64 tsc;
- int freq;
u64 time;
};
@@ -282,9 +280,9 @@ struct cpu_defaults {
static inline int32_t get_target_pstate_use_performance(struct cpudata *cpu);
static inline int32_t get_target_pstate_use_cpu_load(struct cpudata *cpu);
-static struct pstate_adjust_policy pid_params;
-static struct pstate_funcs pstate_funcs;
-static int hwp_active;
+static struct pstate_adjust_policy pid_params __read_mostly;
+static struct pstate_funcs pstate_funcs __read_mostly;
+static int hwp_active __read_mostly;
#ifdef CONFIG_ACPI
static bool acpi_ppc;
@@ -808,7 +806,8 @@ static void __init intel_pstate_sysfs_expose_params(void)
static void intel_pstate_hwp_enable(struct cpudata *cpudata)
{
/* First disable HWP notification interrupt as we don't process them */
- wrmsrl_on_cpu(cpudata->cpu, MSR_HWP_INTERRUPT, 0x00);
+ if (static_cpu_has(X86_FEATURE_HWP_NOTIFY))
+ wrmsrl_on_cpu(cpudata->cpu, MSR_HWP_INTERRUPT, 0x00);
wrmsrl_on_cpu(cpudata->cpu, MSR_PM_ENABLE, 0x1);
}
@@ -945,7 +944,7 @@ static int core_get_max_pstate(void)
if (err)
goto skip_tar;
- tdp_msr = MSR_CONFIG_TDP_NOMINAL + tdp_ctrl;
+ tdp_msr = MSR_CONFIG_TDP_NOMINAL + (tdp_ctrl & 0x3);
err = rdmsrl_safe(tdp_msr, &tdp_ratio);
if (err)
goto skip_tar;
@@ -1092,6 +1091,26 @@ static struct cpu_defaults knl_params = {
},
};
+static struct cpu_defaults bxt_params = {
+ .pid_policy = {
+ .sample_rate_ms = 10,
+ .deadband = 0,
+ .setpoint = 60,
+ .p_gain_pct = 14,
+ .d_gain_pct = 0,
+ .i_gain_pct = 4,
+ },
+ .funcs = {
+ .get_max = core_get_max_pstate,
+ .get_max_physical = core_get_max_pstate_physical,
+ .get_min = core_get_min_pstate,
+ .get_turbo = core_get_turbo_pstate,
+ .get_scaling = core_get_scaling,
+ .get_val = core_get_val,
+ .get_target_pstate = get_target_pstate_use_cpu_load,
+ },
+};
+
static void intel_pstate_get_min_max(struct cpudata *cpu, int *min, int *max)
{
int max_perf = cpu->pstate.turbo_pstate;
@@ -1114,17 +1133,12 @@ static void intel_pstate_get_min_max(struct cpudata *cpu, int *min, int *max)
*min = clamp_t(int, min_perf, cpu->pstate.min_pstate, max_perf);
}
-static inline void intel_pstate_record_pstate(struct cpudata *cpu, int pstate)
-{
- trace_cpu_frequency(pstate * cpu->pstate.scaling, cpu->cpu);
- cpu->pstate.current_pstate = pstate;
-}
-
static void intel_pstate_set_min_pstate(struct cpudata *cpu)
{
int pstate = cpu->pstate.min_pstate;
- intel_pstate_record_pstate(cpu, pstate);
+ trace_cpu_frequency(pstate * cpu->pstate.scaling, cpu->cpu);
+ cpu->pstate.current_pstate = pstate;
/*
* Generally, there is no guarantee that this code will always run on
* the CPU being updated, so force the register update to run on the
@@ -1284,10 +1298,11 @@ static inline void intel_pstate_update_pstate(struct cpudata *cpu, int pstate)
intel_pstate_get_min_max(cpu, &min_perf, &max_perf);
pstate = clamp_t(int, pstate, min_perf, max_perf);
+ trace_cpu_frequency(pstate * cpu->pstate.scaling, cpu->cpu);
if (pstate == cpu->pstate.current_pstate)
return;
- intel_pstate_record_pstate(cpu, pstate);
+ cpu->pstate.current_pstate = pstate;
wrmsrl(MSR_IA32_PERF_CTL, pstate_funcs.get_val(cpu, pstate));
}
@@ -1352,11 +1367,12 @@ static const struct x86_cpu_id intel_pstate_cpu_ids[] = {
ICPU(INTEL_FAM6_SKYLAKE_DESKTOP, core_params),
ICPU(INTEL_FAM6_BROADWELL_XEON_D, core_params),
ICPU(INTEL_FAM6_XEON_PHI_KNL, knl_params),
+ ICPU(INTEL_FAM6_ATOM_GOLDMONT, bxt_params),
{}
};
MODULE_DEVICE_TABLE(x86cpu, intel_pstate_cpu_ids);
-static const struct x86_cpu_id intel_pstate_cpu_oob_ids[] = {
+static const struct x86_cpu_id intel_pstate_cpu_oob_ids[] __initconst = {
ICPU(INTEL_FAM6_BROADWELL_XEON_D, core_params),
{}
};
@@ -1576,12 +1592,12 @@ static struct cpufreq_driver intel_pstate_driver = {
.name = "intel_pstate",
};
-static int __initdata no_load;
-static int __initdata no_hwp;
-static int __initdata hwp_only;
-static unsigned int force_load;
+static int no_load __initdata;
+static int no_hwp __initdata;
+static int hwp_only __initdata;
+static unsigned int force_load __initdata;
-static int intel_pstate_msrs_not_valid(void)
+static int __init intel_pstate_msrs_not_valid(void)
{
if (!pstate_funcs.get_max() ||
!pstate_funcs.get_min() ||
@@ -1591,7 +1607,7 @@ static int intel_pstate_msrs_not_valid(void)
return 0;
}
-static void copy_pid_params(struct pstate_adjust_policy *policy)
+static void __init copy_pid_params(struct pstate_adjust_policy *policy)
{
pid_params.sample_rate_ms = policy->sample_rate_ms;
pid_params.sample_rate_ns = pid_params.sample_rate_ms * NSEC_PER_MSEC;
@@ -1602,7 +1618,7 @@ static void copy_pid_params(struct pstate_adjust_policy *policy)
pid_params.setpoint = policy->setpoint;
}
-static void copy_cpu_funcs(struct pstate_funcs *funcs)
+static void __init copy_cpu_funcs(struct pstate_funcs *funcs)
{
pstate_funcs.get_max = funcs->get_max;
pstate_funcs.get_max_physical = funcs->get_max_physical;
@@ -1617,7 +1633,7 @@ static void copy_cpu_funcs(struct pstate_funcs *funcs)
#ifdef CONFIG_ACPI
-static bool intel_pstate_no_acpi_pss(void)
+static bool __init intel_pstate_no_acpi_pss(void)
{
int i;
@@ -1646,7 +1662,7 @@ static bool intel_pstate_no_acpi_pss(void)
return true;
}
-static bool intel_pstate_has_acpi_ppc(void)
+static bool __init intel_pstate_has_acpi_ppc(void)
{
int i;
@@ -1674,7 +1690,7 @@ struct hw_vendor_info {
};
/* Hardware vendor-specific info that has its own power management modes */
-static struct hw_vendor_info vendor_info[] = {
+static struct hw_vendor_info vendor_info[] __initdata = {
{1, "HP ", "ProLiant", PSS},
{1, "ORACLE", "X4-2 ", PPC},
{1, "ORACLE", "X4-2L ", PPC},
@@ -1693,7 +1709,7 @@ static struct hw_vendor_info vendor_info[] = {
{0, "", ""},
};
-static bool intel_pstate_platform_pwr_mgmt_exists(void)
+static bool __init intel_pstate_platform_pwr_mgmt_exists(void)
{
struct acpi_table_header hdr;
struct hw_vendor_info *v_info;
diff --git a/drivers/cpufreq/mvebu-cpufreq.c b/drivers/cpufreq/mvebu-cpufreq.c
index e920889b9ac2..ed915ee85dd9 100644
--- a/drivers/cpufreq/mvebu-cpufreq.c
+++ b/drivers/cpufreq/mvebu-cpufreq.c
@@ -70,7 +70,7 @@ static int __init armada_xp_pmsu_cpufreq_init(void)
continue;
}
- clk = clk_get(cpu_dev, 0);
+ clk = clk_get(cpu_dev, NULL);
if (IS_ERR(clk)) {
pr_err("Cannot get clock for CPU %d\n", cpu);
return PTR_ERR(clk);
diff --git a/drivers/cpufreq/pcc-cpufreq.c b/drivers/cpufreq/pcc-cpufreq.c
index a7ecb9a84c15..3f0ce2ae35ee 100644
--- a/drivers/cpufreq/pcc-cpufreq.c
+++ b/drivers/cpufreq/pcc-cpufreq.c
@@ -555,8 +555,6 @@ static int pcc_cpufreq_cpu_init(struct cpufreq_policy *policy)
policy->min = policy->cpuinfo.min_freq =
ioread32(&pcch_hdr->minimum_frequency) * 1000;
- policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL;
-
pr_debug("init: policy->max is %d, policy->min is %d\n",
policy->max, policy->min);
out:
diff --git a/drivers/cpufreq/powernv-cpufreq.c b/drivers/cpufreq/powernv-cpufreq.c
index 54c45368e3f1..0f138b050e9a 100644
--- a/drivers/cpufreq/powernv-cpufreq.c
+++ b/drivers/cpufreq/powernv-cpufreq.c
@@ -64,12 +64,14 @@
/**
* struct global_pstate_info - Per policy data structure to maintain history of
* global pstates
- * @highest_lpstate: The local pstate from which we are ramping down
+ * @highest_lpstate_idx: The local pstate index from which we are
+ * ramping down
* @elapsed_time: Time in ms spent in ramping down from
- * highest_lpstate
+ * highest_lpstate_idx
* @last_sampled_time: Time from boot in ms when global pstates were
* last set
- * @last_lpstate,last_gpstate: Last set values for local and global pstates
+ * @last_lpstate_idx, Last set value of local pstate and global
+ * last_gpstate_idx pstate in terms of cpufreq table index
* @timer: Is used for ramping down if cpu goes idle for
* a long time with global pstate held high
* @gpstate_lock: A spinlock to maintain synchronization between
@@ -77,11 +79,11 @@
* governer's target_index calls
*/
struct global_pstate_info {
- int highest_lpstate;
+ int highest_lpstate_idx;
unsigned int elapsed_time;
unsigned int last_sampled_time;
- int last_lpstate;
- int last_gpstate;
+ int last_lpstate_idx;
+ int last_gpstate_idx;
spinlock_t gpstate_lock;
struct timer_list timer;
};
@@ -124,29 +126,47 @@ static int nr_chips;
static DEFINE_PER_CPU(struct chip *, chip_info);
/*
- * Note: The set of pstates consists of contiguous integers, the
- * smallest of which is indicated by powernv_pstate_info.min, the
- * largest of which is indicated by powernv_pstate_info.max.
+ * Note:
+ * The set of pstates consists of contiguous integers.
+ * powernv_pstate_info stores the index of the frequency table for
+ * max, min and nominal frequencies. It also stores number of
+ * available frequencies.
*
- * The nominal pstate is the highest non-turbo pstate in this
- * platform. This is indicated by powernv_pstate_info.nominal.
+ * powernv_pstate_info.nominal indicates the index to the highest
+ * non-turbo frequency.
*/
static struct powernv_pstate_info {
- int min;
- int max;
- int nominal;
- int nr_pstates;
+ unsigned int min;
+ unsigned int max;
+ unsigned int nominal;
+ unsigned int nr_pstates;
} powernv_pstate_info;
+/* Use following macros for conversions between pstate_id and index */
+static inline int idx_to_pstate(unsigned int i)
+{
+ return powernv_freqs[i].driver_data;
+}
+
+static inline unsigned int pstate_to_idx(int pstate)
+{
+ /*
+ * abs() is deliberately used so that is works with
+ * both monotonically increasing and decreasing
+ * pstate values
+ */
+ return abs(pstate - idx_to_pstate(powernv_pstate_info.max));
+}
+
static inline void reset_gpstates(struct cpufreq_policy *policy)
{
struct global_pstate_info *gpstates = policy->driver_data;
- gpstates->highest_lpstate = 0;
+ gpstates->highest_lpstate_idx = 0;
gpstates->elapsed_time = 0;
gpstates->last_sampled_time = 0;
- gpstates->last_lpstate = 0;
- gpstates->last_gpstate = 0;
+ gpstates->last_lpstate_idx = 0;
+ gpstates->last_gpstate_idx = 0;
}
/*
@@ -156,9 +176,10 @@ static inline void reset_gpstates(struct cpufreq_policy *policy)
static int init_powernv_pstates(void)
{
struct device_node *power_mgt;
- int i, pstate_min, pstate_max, pstate_nominal, nr_pstates = 0;
+ int i, nr_pstates = 0;
const __be32 *pstate_ids, *pstate_freqs;
u32 len_ids, len_freqs;
+ u32 pstate_min, pstate_max, pstate_nominal;
power_mgt = of_find_node_by_path("/ibm,opal/power-mgt");
if (!power_mgt) {
@@ -208,6 +229,7 @@ static int init_powernv_pstates(void)
return -ENODEV;
}
+ powernv_pstate_info.nr_pstates = nr_pstates;
pr_debug("NR PStates %d\n", nr_pstates);
for (i = 0; i < nr_pstates; i++) {
u32 id = be32_to_cpu(pstate_ids[i]);
@@ -216,15 +238,17 @@ static int init_powernv_pstates(void)
pr_debug("PState id %d freq %d MHz\n", id, freq);
powernv_freqs[i].frequency = freq * 1000; /* kHz */
powernv_freqs[i].driver_data = id;
+
+ if (id == pstate_max)
+ powernv_pstate_info.max = i;
+ else if (id == pstate_nominal)
+ powernv_pstate_info.nominal = i;
+ else if (id == pstate_min)
+ powernv_pstate_info.min = i;
}
+
/* End of list marker entry */
powernv_freqs[i].frequency = CPUFREQ_TABLE_END;
-
- powernv_pstate_info.min = pstate_min;
- powernv_pstate_info.max = pstate_max;
- powernv_pstate_info.nominal = pstate_nominal;
- powernv_pstate_info.nr_pstates = nr_pstates;
-
return 0;
}
@@ -233,12 +257,12 @@ static unsigned int pstate_id_to_freq(int pstate_id)
{
int i;
- i = powernv_pstate_info.max - pstate_id;
+ i = pstate_to_idx(pstate_id);
if (i >= powernv_pstate_info.nr_pstates || i < 0) {
pr_warn("PState id %d outside of PState table, "
"reporting nominal id %d instead\n",
- pstate_id, powernv_pstate_info.nominal);
- i = powernv_pstate_info.max - powernv_pstate_info.nominal;
+ pstate_id, idx_to_pstate(powernv_pstate_info.nominal));
+ i = powernv_pstate_info.nominal;
}
return powernv_freqs[i].frequency;
@@ -252,7 +276,7 @@ static ssize_t cpuinfo_nominal_freq_show(struct cpufreq_policy *policy,
char *buf)
{
return sprintf(buf, "%u\n",
- pstate_id_to_freq(powernv_pstate_info.nominal));
+ powernv_freqs[powernv_pstate_info.nominal].frequency);
}
struct freq_attr cpufreq_freq_attr_cpuinfo_nominal_freq =
@@ -426,7 +450,7 @@ static void set_pstate(void *data)
*/
static inline unsigned int get_nominal_index(void)
{
- return powernv_pstate_info.max - powernv_pstate_info.nominal;
+ return powernv_pstate_info.nominal;
}
static void powernv_cpufreq_throttle_check(void *data)
@@ -435,20 +459,22 @@ static void powernv_cpufreq_throttle_check(void *data)
unsigned int cpu = smp_processor_id();
unsigned long pmsr;
int pmsr_pmax;
+ unsigned int pmsr_pmax_idx;
pmsr = get_pmspr(SPRN_PMSR);
chip = this_cpu_read(chip_info);
/* Check for Pmax Capping */
pmsr_pmax = (s8)PMSR_MAX(pmsr);
- if (pmsr_pmax != powernv_pstate_info.max) {
+ pmsr_pmax_idx = pstate_to_idx(pmsr_pmax);
+ if (pmsr_pmax_idx != powernv_pstate_info.max) {
if (chip->throttled)
goto next;
chip->throttled = true;
- if (pmsr_pmax < powernv_pstate_info.nominal) {
- pr_warn_once("CPU %d on Chip %u has Pmax reduced below nominal frequency (%d < %d)\n",
+ if (pmsr_pmax_idx > powernv_pstate_info.nominal) {
+ pr_warn_once("CPU %d on Chip %u has Pmax(%d) reduced below nominal frequency(%d)\n",
cpu, chip->id, pmsr_pmax,
- powernv_pstate_info.nominal);
+ idx_to_pstate(powernv_pstate_info.nominal));
chip->throttle_sub_turbo++;
} else {
chip->throttle_turbo++;
@@ -484,34 +510,35 @@ next:
/**
* calc_global_pstate - Calculate global pstate
- * @elapsed_time: Elapsed time in milliseconds
- * @local_pstate: New local pstate
- * @highest_lpstate: pstate from which its ramping down
+ * @elapsed_time: Elapsed time in milliseconds
+ * @local_pstate_idx: New local pstate
+ * @highest_lpstate_idx: pstate from which its ramping down
*
* Finds the appropriate global pstate based on the pstate from which its
* ramping down and the time elapsed in ramping down. It follows a quadratic
* equation which ensures that it reaches ramping down to pmin in 5sec.
*/
static inline int calc_global_pstate(unsigned int elapsed_time,
- int highest_lpstate, int local_pstate)
+ int highest_lpstate_idx,
+ int local_pstate_idx)
{
- int pstate_diff;
+ int index_diff;
/*
* Using ramp_down_percent we get the percentage of rampdown
* that we are expecting to be dropping. Difference between
- * highest_lpstate and powernv_pstate_info.min will give a absolute
+ * highest_lpstate_idx and powernv_pstate_info.min will give a absolute
* number of how many pstates we will drop eventually by the end of
* 5 seconds, then just scale it get the number pstates to be dropped.
*/
- pstate_diff = ((int)ramp_down_percent(elapsed_time) *
- (highest_lpstate - powernv_pstate_info.min)) / 100;
+ index_diff = ((int)ramp_down_percent(elapsed_time) *
+ (powernv_pstate_info.min - highest_lpstate_idx)) / 100;
/* Ensure that global pstate is >= to local pstate */
- if (highest_lpstate - pstate_diff < local_pstate)
- return local_pstate;
+ if (highest_lpstate_idx + index_diff >= local_pstate_idx)
+ return local_pstate_idx;
else
- return highest_lpstate - pstate_diff;
+ return highest_lpstate_idx + index_diff;
}
static inline void queue_gpstate_timer(struct global_pstate_info *gpstates)
@@ -547,7 +574,7 @@ void gpstate_timer_handler(unsigned long data)
{
struct cpufreq_policy *policy = (struct cpufreq_policy *)data;
struct global_pstate_info *gpstates = policy->driver_data;
- int gpstate_id;
+ int gpstate_idx;
unsigned int time_diff = jiffies_to_msecs(jiffies)
- gpstates->last_sampled_time;
struct powernv_smp_call_data freq_data;
@@ -557,29 +584,29 @@ void gpstate_timer_handler(unsigned long data)
gpstates->last_sampled_time += time_diff;
gpstates->elapsed_time += time_diff;
- freq_data.pstate_id = gpstates->last_lpstate;
+ freq_data.pstate_id = idx_to_pstate(gpstates->last_lpstate_idx);
- if ((gpstates->last_gpstate == freq_data.pstate_id) ||
+ if ((gpstates->last_gpstate_idx == gpstates->last_lpstate_idx) ||
(gpstates->elapsed_time > MAX_RAMP_DOWN_TIME)) {
- gpstate_id = freq_data.pstate_id;
+ gpstate_idx = pstate_to_idx(freq_data.pstate_id);
reset_gpstates(policy);
- gpstates->highest_lpstate = freq_data.pstate_id;
+ gpstates->highest_lpstate_idx = gpstate_idx;
} else {
- gpstate_id = calc_global_pstate(gpstates->elapsed_time,
- gpstates->highest_lpstate,
- freq_data.pstate_id);
+ gpstate_idx = calc_global_pstate(gpstates->elapsed_time,
+ gpstates->highest_lpstate_idx,
+ freq_data.pstate_id);
}
/*
* If local pstate is equal to global pstate, rampdown is over
* So timer is not required to be queued.
*/
- if (gpstate_id != freq_data.pstate_id)
+ if (gpstate_idx != gpstates->last_lpstate_idx)
queue_gpstate_timer(gpstates);
- freq_data.gpstate_id = gpstate_id;
- gpstates->last_gpstate = freq_data.gpstate_id;
- gpstates->last_lpstate = freq_data.pstate_id;
+ freq_data.gpstate_id = idx_to_pstate(gpstate_idx);
+ gpstates->last_gpstate_idx = pstate_to_idx(freq_data.gpstate_id);
+ gpstates->last_lpstate_idx = pstate_to_idx(freq_data.pstate_id);
spin_unlock(&gpstates->gpstate_lock);
@@ -596,7 +623,7 @@ static int powernv_cpufreq_target_index(struct cpufreq_policy *policy,
unsigned int new_index)
{
struct powernv_smp_call_data freq_data;
- unsigned int cur_msec, gpstate_id;
+ unsigned int cur_msec, gpstate_idx;
struct global_pstate_info *gpstates = policy->driver_data;
if (unlikely(rebooting) && new_index != get_nominal_index())
@@ -608,15 +635,15 @@ static int powernv_cpufreq_target_index(struct cpufreq_policy *policy,
cur_msec = jiffies_to_msecs(get_jiffies_64());
spin_lock(&gpstates->gpstate_lock);
- freq_data.pstate_id = powernv_freqs[new_index].driver_data;
+ freq_data.pstate_id = idx_to_pstate(new_index);
if (!gpstates->last_sampled_time) {
- gpstate_id = freq_data.pstate_id;
- gpstates->highest_lpstate = freq_data.pstate_id;
+ gpstate_idx = new_index;
+ gpstates->highest_lpstate_idx = new_index;
goto gpstates_done;
}
- if (gpstates->last_gpstate > freq_data.pstate_id) {
+ if (gpstates->last_gpstate_idx < new_index) {
gpstates->elapsed_time += cur_msec -
gpstates->last_sampled_time;
@@ -627,34 +654,34 @@ static int powernv_cpufreq_target_index(struct cpufreq_policy *policy,
*/
if (gpstates->elapsed_time > MAX_RAMP_DOWN_TIME) {
reset_gpstates(policy);
- gpstates->highest_lpstate = freq_data.pstate_id;
- gpstate_id = freq_data.pstate_id;
+ gpstates->highest_lpstate_idx = new_index;
+ gpstate_idx = new_index;
} else {
/* Elaspsed_time is less than 5 seconds, continue to rampdown */
- gpstate_id = calc_global_pstate(gpstates->elapsed_time,
- gpstates->highest_lpstate,
- freq_data.pstate_id);
+ gpstate_idx = calc_global_pstate(gpstates->elapsed_time,
+ gpstates->highest_lpstate_idx,
+ new_index);
}
} else {
reset_gpstates(policy);
- gpstates->highest_lpstate = freq_data.pstate_id;
- gpstate_id = freq_data.pstate_id;
+ gpstates->highest_lpstate_idx = new_index;
+ gpstate_idx = new_index;
}
/*
* If local pstate is equal to global pstate, rampdown is over
* So timer is not required to be queued.
*/
- if (gpstate_id != freq_data.pstate_id)
+ if (gpstate_idx != new_index)
queue_gpstate_timer(gpstates);
else
del_timer_sync(&gpstates->timer);
gpstates_done:
- freq_data.gpstate_id = gpstate_id;
+ freq_data.gpstate_id = idx_to_pstate(gpstate_idx);
gpstates->last_sampled_time = cur_msec;
- gpstates->last_gpstate = freq_data.gpstate_id;
- gpstates->last_lpstate = freq_data.pstate_id;
+ gpstates->last_gpstate_idx = gpstate_idx;
+ gpstates->last_lpstate_idx = new_index;
spin_unlock(&gpstates->gpstate_lock);
@@ -760,9 +787,7 @@ void powernv_cpufreq_work_fn(struct work_struct *work)
struct cpufreq_policy policy;
cpufreq_get_policy(&policy, cpu);
- cpufreq_frequency_table_target(&policy, policy.freq_table,
- policy.cur,
- CPUFREQ_RELATION_C, &index);
+ index = cpufreq_table_find_index_c(&policy, policy.cur);
powernv_cpufreq_target_index(&policy, index);
cpumask_andnot(&mask, &mask, policy.cpus);
}
@@ -848,8 +873,8 @@ static void powernv_cpufreq_stop_cpu(struct cpufreq_policy *policy)
struct powernv_smp_call_data freq_data;
struct global_pstate_info *gpstates = policy->driver_data;
- freq_data.pstate_id = powernv_pstate_info.min;
- freq_data.gpstate_id = powernv_pstate_info.min;
+ freq_data.pstate_id = idx_to_pstate(powernv_pstate_info.min);
+ freq_data.gpstate_id = idx_to_pstate(powernv_pstate_info.min);
smp_call_function_single(policy->cpu, set_pstate, &freq_data, 1);
del_timer_sync(&gpstates->timer);
}
diff --git a/drivers/cpufreq/ppc_cbe_cpufreq_pmi.c b/drivers/cpufreq/ppc_cbe_cpufreq_pmi.c
index 7c4cd5c634f2..dc112481a408 100644
--- a/drivers/cpufreq/ppc_cbe_cpufreq_pmi.c
+++ b/drivers/cpufreq/ppc_cbe_cpufreq_pmi.c
@@ -94,7 +94,7 @@ static int pmi_notifier(struct notifier_block *nb,
unsigned long event, void *data)
{
struct cpufreq_policy *policy = data;
- struct cpufreq_frequency_table *cbe_freqs;
+ struct cpufreq_frequency_table *cbe_freqs = policy->freq_table;
u8 node;
/* Should this really be called for CPUFREQ_ADJUST and CPUFREQ_NOTIFY
@@ -103,7 +103,6 @@ static int pmi_notifier(struct notifier_block *nb,
if (event == CPUFREQ_START)
return 0;
- cbe_freqs = cpufreq_frequency_get_table(policy->cpu);
node = cbe_cpu_to_node(policy->cpu);
pr_debug("got notified, event=%lu, node=%u\n", event, node);
diff --git a/drivers/cpufreq/s3c24xx-cpufreq.c b/drivers/cpufreq/s3c24xx-cpufreq.c
index ae8eaed77b70..7b596fa38ad2 100644
--- a/drivers/cpufreq/s3c24xx-cpufreq.c
+++ b/drivers/cpufreq/s3c24xx-cpufreq.c
@@ -293,12 +293,8 @@ static int s3c_cpufreq_target(struct cpufreq_policy *policy,
__func__, policy, target_freq, relation);
if (ftab) {
- if (cpufreq_frequency_table_target(policy, ftab,
- target_freq, relation,
- &index)) {
- s3c_freq_dbg("%s: table failed\n", __func__);
- return -EINVAL;
- }
+ index = cpufreq_frequency_table_target(policy, target_freq,
+ relation);
s3c_freq_dbg("%s: adjust %d to entry %d (%u)\n", __func__,
target_freq, index, ftab[index].frequency);
@@ -315,7 +311,6 @@ static int s3c_cpufreq_target(struct cpufreq_policy *policy,
pll = NULL;
} else {
struct cpufreq_policy tmp_policy;
- int ret;
/* we keep the cpu pll table in Hz, to ensure we get an
* accurate value for the PLL output. */
@@ -323,20 +318,14 @@ static int s3c_cpufreq_target(struct cpufreq_policy *policy,
tmp_policy.min = policy->min * 1000;
tmp_policy.max = policy->max * 1000;
tmp_policy.cpu = policy->cpu;
+ tmp_policy.freq_table = pll_reg;
- /* cpufreq_frequency_table_target uses a pointer to 'index'
- * which is the number of the table entry, not the value of
+ /* cpufreq_frequency_table_target returns the index
+ * of the table entry, not the value of
* the table entry's index field. */
- ret = cpufreq_frequency_table_target(&tmp_policy, pll_reg,
- target_freq, relation,
- &index);
-
- if (ret < 0) {
- pr_err("%s: no PLL available\n", __func__);
- goto err_notpossible;
- }
-
+ index = cpufreq_frequency_table_target(&tmp_policy, target_freq,
+ relation);
pll = pll_reg + index;
s3c_freq_dbg("%s: target %u => %u\n",
@@ -346,10 +335,6 @@ static int s3c_cpufreq_target(struct cpufreq_policy *policy,
}
return s3c_cpufreq_settarget(policy, target_freq, pll);
-
- err_notpossible:
- pr_err("no compatible settings for %d\n", target_freq);
- return -EINVAL;
}
struct clk *s3c_cpufreq_clk_get(struct device *dev, const char *name)
@@ -571,11 +556,7 @@ static int s3c_cpufreq_build_freq(void)
{
int size, ret;
- if (!cpu_cur.info->calc_freqtable)
- return -EINVAL;
-
kfree(ftab);
- ftab = NULL;
size = cpu_cur.info->calc_freqtable(&cpu_cur, NULL, 0);
size++;
diff --git a/drivers/cpufreq/s5pv210-cpufreq.c b/drivers/cpufreq/s5pv210-cpufreq.c
index 06d85917b6d5..9e07588ea9f5 100644
--- a/drivers/cpufreq/s5pv210-cpufreq.c
+++ b/drivers/cpufreq/s5pv210-cpufreq.c
@@ -246,12 +246,7 @@ static int s5pv210_target(struct cpufreq_policy *policy, unsigned int index)
new_freq = s5pv210_freq_table[index].frequency;
/* Finding current running level index */
- if (cpufreq_frequency_table_target(policy, s5pv210_freq_table,
- old_freq, CPUFREQ_RELATION_H,
- &priv_index)) {
- ret = -EINVAL;
- goto exit;
- }
+ priv_index = cpufreq_table_find_index_h(policy, old_freq);
arm_volt = dvs_conf[index].arm_volt;
int_volt = dvs_conf[index].int_volt;
diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c
index 5b4b47ed948b..3788ed74c9ab 100644
--- a/drivers/thermal/cpu_cooling.c
+++ b/drivers/thermal/cpu_cooling.c
@@ -787,22 +787,34 @@ __cpufreq_cooling_register(struct device_node *np,
const struct cpumask *clip_cpus, u32 capacitance,
get_static_t plat_static_func)
{
+ struct cpufreq_policy *policy;
struct thermal_cooling_device *cool_dev;
struct cpufreq_cooling_device *cpufreq_dev;
char dev_name[THERMAL_NAME_LENGTH];
struct cpufreq_frequency_table *pos, *table;
+ struct cpumask temp_mask;
unsigned int freq, i, num_cpus;
int ret;
- table = cpufreq_frequency_get_table(cpumask_first(clip_cpus));
+ cpumask_and(&temp_mask, clip_cpus, cpu_online_mask);
+ policy = cpufreq_cpu_get(cpumask_first(&temp_mask));
+ if (!policy) {
+ pr_debug("%s: CPUFreq policy not found\n", __func__);
+ return ERR_PTR(-EPROBE_DEFER);
+ }
+
+ table = policy->freq_table;
if (!table) {
pr_debug("%s: CPUFreq table not found\n", __func__);
- return ERR_PTR(-EPROBE_DEFER);
+ cool_dev = ERR_PTR(-ENODEV);
+ goto put_policy;
}
cpufreq_dev = kzalloc(sizeof(*cpufreq_dev), GFP_KERNEL);
- if (!cpufreq_dev)
- return ERR_PTR(-ENOMEM);
+ if (!cpufreq_dev) {
+ cool_dev = ERR_PTR(-ENOMEM);
+ goto put_policy;
+ }
num_cpus = cpumask_weight(clip_cpus);
cpufreq_dev->time_in_idle = kcalloc(num_cpus,
@@ -892,7 +904,7 @@ __cpufreq_cooling_register(struct device_node *np,
CPUFREQ_POLICY_NOTIFIER);
mutex_unlock(&cooling_cpufreq_lock);
- return cool_dev;
+ goto put_policy;
remove_idr:
release_idr(&cpufreq_idr, cpufreq_dev->id);
@@ -906,6 +918,8 @@ free_time_in_idle:
kfree(cpufreq_dev->time_in_idle);
free_cdev:
kfree(cpufreq_dev);
+put_policy:
+ cpufreq_cpu_put(policy);
return cool_dev;
}
tterns' href='/openslx/kernel-qcow2-linux.git/commit/MAINTAINERS?id=679655daffdd2725b66ba2c5a759bbcb316fca5a'>679655daffdd ^
8a61f0135c69 ^
679655daffdd ^
f90b8116032f ^
919ee7dd9a66 ^
e41105687b90 ^
919ee7dd9a66 ^
525b233c7188 ^
e41105687b90 ^
b2c1639135c0 ^

919ee7dd9a66 ^
16423d67936f ^









e7f5b309c9bd ^
943482d07e92 ^
7d2c86b5a048 ^
943482d07e92 ^
73d425fd1dda ^
e7f5b309c9bd ^
45198c7b35c0 ^






284f42b627c0 ^
8b58be884a9f ^
284f42b627c0 ^
bd5f47ec9615 ^
284f42b627c0 ^
f94b533d091a ^
8b58be884a9f ^

e6cc0fd1e31c ^
f94b533d091a ^
679655daffdd ^
f94b533d091a ^
531fca1649da ^





614b438441fc ^






c40ddfa34add ^





531fca1649da ^





c40ddfa34add ^





527a1a83cc1b ^
535bd16f4190 ^
4bdef3bd7e59 ^
a3f531ac556d ^
a4edbc101151 ^
4bdef3bd7e59 ^
39c9d199ce67 ^
cc52688a0888 ^
4bdef3bd7e59 ^
ae48f5efb8b3 ^
4bdef3bd7e59 ^
40216ce7aa88 ^
4bdef3bd7e59 ^
527a1a83cc1b ^
b3fe92b03dd6 ^
527a1a83cc1b ^



7d1f90188a64 ^
4ce72abc6ea7 ^









527a1a83cc1b ^
41c9e95d641a ^









422690636117 ^
8b58be884a9f ^
a4724ed6f084 ^
93711660086d ^
422690636117 ^
679655daffdd ^
422690636117 ^
1da177e4c3f4
81024fc41a93 ^

679655daffdd ^

c117ab842001 ^
81024fc41a93 ^
1da177e4c3f4
bd7aa4b2dafd ^
75dd112aac25 ^
bd7aa4b2dafd ^
75dd112aac25 ^
679655daffdd ^
bd7aa4b2dafd ^
6f2fad748ccc ^
75dd112aac25 ^
d618540fb3e5 ^
75dd112aac25 ^
679655daffdd ^
6f2fad748ccc ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4
679655daffdd ^

1da177e4c3f4
242995026203 ^


242995026203 ^



62a37dc7a273 ^





1154ea7dcd8e ^
8b58be884a9f ^
1154ea7dcd8e ^
8a61f0135c69 ^

1154ea7dcd8e ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4
679655daffdd ^

1da177e4c3f4
6f96521fab97 ^




6f96521fab97 ^



d4275354993e ^
8b58be884a9f ^
efc03ecb9d67 ^
d4275354993e ^



d323c243d9e6 ^

56ca9d98772c ^
d323c243d9e6 ^



cefbf4ea6294 ^







8a61f0135c69 ^
cefbf4ea6294 ^






2761f5c2ea80 ^
08a5c9a2bb5d ^

679655daffdd ^
2f748aaad7f4 ^
2761f5c2ea80 ^
1b4304e5ca4e ^




2761f5c2ea80 ^
cefbf4ea6294 ^





2b7a52a459cb ^
8b58be884a9f ^
efc03ecb9d67 ^
2b7a52a459cb ^

9c784f958d01 ^
8b58be884a9f ^
efc03ecb9d67 ^
9c784f958d01 ^

2b7a52a459cb ^
8b58be884a9f ^
efc03ecb9d67 ^
2b7a52a459cb ^

1b106699647b ^



60b0f380beed ^





1b106699647b ^
7c1e38769fa4 ^



12ddbadf383d ^
7c1e38769fa4 ^

c1fc8675c9e3 ^
8b58be884a9f ^
c1fc8675c9e3 ^

efc03ecb9d67 ^
795fb7e74dff ^
c1fc8675c9e3 ^


f0a0a58e6f46 ^
70e389cc7fed ^



d4a89c7d2788 ^
6e05dd4e1ccb ^




986cf2e91968 ^
5d3ad8a63844 ^
986cf2e91968 ^



d94f944e108d ^
5529c2cdfd87 ^
d94f944e108d ^

d94f944e108d ^
386ab5168bbf ^



b8ba3874b4cf ^
386ab5168bbf ^
2b7a52a459cb ^
ddd559b13f6d ^
1c5454eed85a ^
efc03ecb9d67 ^
2b7a52a459cb ^
d19d36672ee3 ^

2b7a52a459cb ^

8b58be884a9f ^
efc03ecb9d67 ^
2b7a52a459cb ^

d4275354993e ^
8b58be884a9f ^
efc03ecb9d67 ^
37417046b903 ^
d4275354993e ^
4fa2651db463 ^
d4275354993e ^
d48134e709d5 ^
8b58be884a9f ^
efc03ecb9d67 ^
a9da4f7ed6a7 ^

941500954470 ^




a06ae8609b3d ^






7a25ec8e481e ^
a06ae8609b3d ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4

881a95f976e6 ^
162500b3a3ff ^
efc03ecb9d67 ^
162500b3a3ff ^

f49afbb572d5 ^
881a95f976e6 ^
a990cbd88758 ^
5abf58bf4cd0 ^
a990cbd88758 ^
85529d14d58a ^
a990cbd88758 ^

4a9c44f15a73 ^
05f30e8dfa70 ^

f8505ef5c57c ^
a990cbd88758 ^
d4275354993e ^
8b58be884a9f ^
efc03ecb9d67 ^
d4275354993e ^


b955f6ca776f ^
d4275354993e ^
4721f3cec177 ^





a9da4f7ed6a7 ^
8b58be884a9f ^


d66f1886cab1 ^
a9da4f7ed6a7 ^

cafc22658e85 ^

a9da4f7ed6a7 ^
6a915af99fc9 ^
162500b3a3ff ^
efc03ecb9d67 ^
162500b3a3ff ^
1fa7e5473cba ^
f49afbb572d5 ^
6a915af99fc9 ^
d4275354993e ^
8b58be884a9f ^
efc03ecb9d67 ^
d4275354993e ^




86183a5fd0ce ^
5df27823b555 ^
8b58be884a9f ^
efc03ecb9d67 ^
86183a5fd0ce ^
f1c12837220c ^
adf792928d1c ^
ce515a6b8de2 ^
2a82f95c3fb4 ^
e5dafa224f29 ^
86183a5fd0ce ^
2b7a52a459cb ^
8b58be884a9f ^
efc03ecb9d67 ^
2b7a52a459cb ^

90b8fc34968d ^
8b58be884a9f ^
efc03ecb9d67 ^
90b8fc34968d ^

ef47d5f02402 ^
8b58be884a9f ^
12a93f32a3f6 ^

ef47d5f02402 ^


12a93f32a3f6 ^
ef47d5f02402 ^
4dfad0696da3 ^







21f37bc3e51f ^
8b58be884a9f ^
795fb7e74dff ^

084bad91afd0 ^


21f37bc3e51f ^
5e767ab92808 ^





06ff74fd197a ^
5e767ab92808 ^
403d29713e0a ^



ec15408206e6 ^
403d29713e0a ^
2b7a52a459cb ^
8b58be884a9f ^
efc03ecb9d67 ^
f00f510ab33f ^
e2bdb176ffae ^

efc03ecb9d67 ^
08223d80df38 ^
2b7a52a459cb ^

8b58be884a9f ^
efc03ecb9d67 ^
f00f510ab33f ^
2b7a52a459cb ^

8b58be884a9f ^
efc03ecb9d67 ^
f00f510ab33f ^
2b7a52a459cb ^
2b7a52a459cb ^
8b58be884a9f ^
efc03ecb9d67 ^
2b7a52a459cb ^

dfdd8cc90328 ^

5529c2cdfd87 ^
baea7b946f00 ^
dfdd8cc90328 ^


838553c5a151 ^
7f49a7f7011f ^





2b7a52a459cb ^
8b58be884a9f ^
efc03ecb9d67 ^
f00f510ab33f ^
2b7a52a459cb ^

8b58be884a9f ^
efc03ecb9d67 ^
2b7a52a459cb ^

1154f858ab5c ^
97215800e4b7 ^
1154f858ab5c ^


317929cd8ef3 ^
1154f858ab5c ^
bc6aa56680b0 ^
97215800e4b7 ^
bc6aa56680b0 ^




97215800e4b7 ^
bc6aa56680b0 ^





97215800e4b7 ^
bc6aa56680b0 ^




97215800e4b7 ^
bc6aa56680b0 ^



2b7a52a459cb ^
8b58be884a9f ^
efc03ecb9d67 ^
2b7a52a459cb ^

3b8861715a9c ^
8b58be884a9f ^
3b8861715a9c ^

75f41273ec55 ^



dcb7150368ef ^
75f41273ec55 ^



40f4978be3e7 ^





4cfab57e4707 ^
4f1312b023f3 ^

dcb7150368ef ^
efc03ecb9d67 ^
4f1312b023f3 ^

54a246ff21b5 ^


3b8861715a9c ^
d69ac131384a ^






e54951c8585e ^









adcb079f28ec ^


144308139cdc ^
adcb079f28ec ^

d78ff0a50aac ^
8b58be884a9f ^
efc03ecb9d67 ^
d78ff0a50aac ^


9624dfe61658 ^
8b58be884a9f ^
9624dfe61658 ^

e0ee98513d1a ^
28b8e8d4e2e3 ^
e4651a9ff469 ^
28b8e8d4e2e3 ^


ecc265fe9e09 ^
875728807ff0 ^
e4651a9ff469 ^
e0ee98513d1a ^
9d76295ac608 ^
8b58be884a9f ^
9d76295ac608 ^



0c19d21e801b ^

b4c9bfab2ec7 ^
0c19d21e801b ^
c68af41d2dbf ^
0c19d21e801b ^
8a61f0135c69 ^
0c19d21e801b ^

df6212529c64 ^

ea91db527cd7 ^
0a759c6ead84 ^
8cd5c8661df3 ^
0c19d21e801b ^

8459c159f7de ^
8b58be884a9f ^

8459c159f7de ^

5d783a2d592c ^
933d35f00cfa ^
752807871ad2 ^
b5e4ad57eeff ^

933d35f00cfa ^









b5e4ad57eeff ^
b57fe924740b ^
8b58be884a9f ^
752807871ad2 ^
90af5811eb1f ^

b57fe924740b ^

90af5811eb1f ^
c49e1e63a9c7 ^
8b58be884a9f ^
752807871ad2 ^
7d2c86b5a048 ^

933d35f00cfa ^

c49e1e63a9c7 ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4



8b58be884a9f ^
efc03ecb9d67 ^
1da177e4c3f4


8fc1b0f87d9f ^







2b7a52a459cb ^
8b58be884a9f ^
efc03ecb9d67 ^
2b7a52a459cb ^

d4275354993e ^
8b58be884a9f ^
efc03ecb9d67 ^
d4275354993e ^

d4275354993e ^




1a6422f67fbf ^
9e13fbf7af3c ^

d4275354993e ^

08ddbb0a899a ^


00250b529313 ^
08ddbb0a899a ^
541555e95cc9 ^
08ddbb0a899a ^
541555e95cc9 ^

08ddbb0a899a ^
541555e95cc9 ^

08ddbb0a899a ^
5bfb937c6ef9 ^

efc03ecb9d67 ^
7a549d78e7d8 ^
b21477f9d257 ^
6f0589c8fecf ^

482ce512c543 ^
769bbb634f30 ^

5bfb937c6ef9 ^

eb2ffcaf14d0 ^

40c76662a1ae ^

33d43cdddbaa ^
f556cb078a3a ^
10ffa96407b2 ^



004bbd3c01d4 ^
10ffa96407b2 ^
3ce4ccb630ce ^







e6a476fd5f65 ^


6305902c2f87 ^
e6a476fd5f65 ^


934455d7af23 ^
90d72ac6e1c3 ^
e6a476fd5f65 ^






90d72ac6e1c3 ^
e6a476fd5f65 ^
d48d38e87c2c ^
5e2125985045 ^
d48d38e87c2c ^

d48d38e87c2c ^
bbff48f5e9e1 ^
5e2125985045 ^
d48d38e87c2c ^
0b514fdb5207 ^






0b514fdb5207 ^




7a2071c58f36 ^
d48d38e87c2c ^


66314223aa5e ^
ba2b7d0ad59f ^
66314223aa5e ^

ba2b7d0ad59f ^


66314223aa5e ^

ba2b7d0ad59f ^
66314223aa5e ^


71bcada88b0f ^




65ebcc115889 ^
a92177eadfb7 ^


65ebcc115889 ^




a92177eadfb7 ^

a92177eadfb7 ^
346e2e4a8b47 ^
f53b2bffc4e0 ^
6da969a5fe97 ^
26389c78269a ^
346e2e4a8b47 ^


eb11adabcfa0 ^
62f6f0863e5b ^

daac6f8642f7 ^
65ebcc115889 ^
2b7a52a459cb ^
8b58be884a9f ^
efc03ecb9d67 ^
2b7a52a459cb ^

1bbd7089f2ef ^
706e69d67652 ^
1bbd7089f2ef ^


2b7a52a459cb ^
8b58be884a9f ^
efc03ecb9d67 ^
2b7a52a459cb ^

98ad6e3b1f5f ^
8b58be884a9f ^
efc03ecb9d67 ^
7d2c86b5a048 ^

4e89e8f61bcd ^
4e89e8f61bcd ^


679ec0ef08af ^
5351684f4354 ^
4e89e8f61bcd ^
9df92e6c770e ^
4e89e8f61bcd ^
8a61f0135c69 ^
98ad6e3b1f5f ^
54274d71d935 ^
e4651a9ff469 ^
54274d71d935 ^


9affbd2458ec ^
54274d71d935 ^



875728807ff0 ^



54274d71d935 ^
875728807ff0 ^
e4651a9ff469 ^
870725d9fcde ^


e4651a9ff469 ^
875728807ff0 ^
e4651a9ff469 ^
875728807ff0 ^

e4651a9ff469 ^

ecc265fe9e09 ^

875728807ff0 ^
e4651a9ff469 ^
875728807ff0 ^
870725d9fcde ^
e93fde28aa56 ^







740d93b123fc ^








7e8f403fecd3 ^
740d93b123fc ^


d4275354993e ^
8b58be884a9f ^
efc03ecb9d67 ^
d4275354993e ^



e66b6d8e86a6 ^




e0cca11ba60f ^
e66b6d8e86a6 ^
04529fe2a298 ^




41fd91b4df9e ^
560746eb79d3 ^
41fd91b4df9e ^



4f31102bbba3 ^
41fd91b4df9e ^
8a61f0135c69 ^


04529fe2a298 ^
e66b6d8e86a6 ^




6ab2a85545c6 ^
e66b6d8e86a6 ^
51f29d444145 ^

f0fd9ad87e69 ^
51f29d444145 ^




bd2a337a25dd ^
fb9d4959d2fb ^
c2fd4e380322 ^


df8eb5691c48 ^
e3ec3a3d11ad ^
ae9b56e3996d ^
51f29d444145 ^
b8f9879ea9d9 ^





38074229de47 ^

d19766ec5221 ^
38074229de47 ^


d19766ec5221 ^
38074229de47 ^
9d7005f98754 ^







d58de0387282 ^






b229ece9911c ^
5909c654a6f2 ^
1da177e4c3f4
d094485323a1 ^
76593d6fb0a5 ^
85091b718969 ^
b229ece9911c ^

85091b718969 ^
953a64798d82 ^
08223d80df38 ^
b3e5f2634ad6 ^
08223d80df38 ^
679655daffdd ^




b3e5f2634ad6 ^
a1867d36b3bd ^
14d77c4ddfd8 ^
a1867d36b3bd ^


25f73ed5c67d ^
a1867d36b3bd ^
e7839f25df8e ^
8b58be884a9f ^
eecdf2267216 ^
1da177e4c3f4
679655daffdd ^

1da177e4c3f4
9a10a870e09f ^
f726ee65ae61 ^
9a10a870e09f ^



fa1c114fdaa6 ^
8b58be884a9f ^

f726ee65ae61 ^
fa1c114fdaa6 ^
72c706b77577 ^
fa1c114fdaa6 ^
fa451753b6b7 ^
fa1c114fdaa6 ^
12e62d6f7ec4 ^



58cfb681bffb ^
12e62d6f7ec4 ^


2be7d22f0625 ^






dba4b74d2da8 ^
2be7d22f0625 ^
1d7e1e6b1b8e ^






2c2a6172afab ^





6f69a6d776f6 ^
8b58be884a9f ^
6f69a6d776f6 ^
679655daffdd ^
6f69a6d776f6 ^
7ae115b4f50d ^
8b58be884a9f ^
cb2f33e95966 ^
e443e3832428 ^
8d5ca6ec4e5c ^


2b133ad6e9e9 ^
8d5ca6ec4e5c ^
1da177e4c3f4
8b58be884a9f ^
476604de5a9d ^
44ae98b53961 ^
1da177e4c3f4

679655daffdd ^

c117ab842001 ^
1da177e4c3f4
04ac2f46d6ec ^
24e1511f675b ^
04ac2f46d6ec ^



a1cfac48ba4c ^
a02875a67d74 ^
a1cfac48ba4c ^
df6212529c64 ^
a1cfac48ba4c ^
dfae90ed7fb5 ^





b414dc16f6ee ^





6f0d65afd4c5 ^
b414dc16f6ee ^
6bd0f4369973 ^






888f2804e463 ^





155155451837 ^



f2294c2d66d0 ^
155155451837 ^

8f4c79ce79d1 ^
8b58be884a9f ^
c69f677cc852 ^
8f4c79ce79d1 ^
8a61f0135c69 ^
679655daffdd ^
8f4c79ce79d1 ^
89e5785fc8a6 ^
a02875a67d74 ^
89e5785fc8a6 ^
9f2f381f8138 ^
89e5785fc8a6 ^
5cbac98ad146 ^





754ce4f29937 ^
a02875a67d74 ^
754ce4f29937 ^
9df92e6c770e ^
754ce4f29937 ^
0ef090151345 ^






e9cb1c5a5ba9 ^






914a3f3b3754 ^
a02875a67d74 ^

914a3f3b3754 ^
faf2e1dbd874 ^
914a3f3b3754 ^
1da177e4c3f4
8b58be884a9f ^
724c6b35ecff ^
1da177e4c3f4


679655daffdd ^
1da177e4c3f4
26780d9e12ed ^
b75f00507623 ^




26780d9e12ed ^
a92b7b80579f ^
915f389d9c52 ^
8b58be884a9f ^
915f389d9c52 ^
ad3f9a2238e4 ^
915f389d9c52 ^
a92b7b80579f ^
679655daffdd ^
c117ab842001 ^
679655daffdd ^
a92b7b80579f ^
70e840499aae ^
8b58be884a9f ^
450c622e9ff1 ^

70e840499aae ^
679655daffdd ^

70e840499aae ^
5f97f7f9400d ^
e336f61fe238 ^

5f97f7f9400d ^
249d9d9d6b7b ^
5f97f7f9400d ^
e336f61fe238 ^
679655daffdd ^
5f97f7f9400d ^

e336f61fe238 ^


679655daffdd ^
5f97f7f9400d ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4
d34cb28a3718 ^
1da177e4c3f4
c117ab842001 ^
679655daffdd ^

1da177e4c3f4
d5269395f5e2 ^
009a54103372 ^
d5269395f5e2 ^





6777376e0d5b ^







e2d1d6c0a5d3 ^
8b58be884a9f ^
e2d1d6c0a5d3 ^
ed072f9e80f0 ^
491b26b40222 ^
e2d1d6c0a5d3 ^
679655daffdd ^
e2d1d6c0a5d3 ^

8b58be884a9f ^

e2d1d6c0a5d3 ^
ed072f9e80f0 ^
491b26b40222 ^
e2d1d6c0a5d3 ^
679655daffdd ^
e2d1d6c0a5d3 ^
300abeb5490d ^
6212de88f8a2 ^
70d14fcf365c ^
300abeb5490d ^
679655daffdd ^

300abeb5490d ^
c6c8fea29769 ^
207df49e75a8 ^
c679ff8fb246 ^
207df49e75a8 ^
c6c8fea29769 ^




e2d1d6c0a5d3 ^
8b58be884a9f ^
e2d1d6c0a5d3 ^


679655daffdd ^
e2d1d6c0a5d3 ^
cafe56359144 ^
47cd2eb0ee05 ^
cafe56359144 ^




e2d1d6c0a5d3 ^
55817d3d5c48 ^
679655daffdd ^

e2d1d6c0a5d3 ^
564ee3606fe6 ^





e2d1d6c0a5d3 ^
8b58be884a9f ^
e2d1d6c0a5d3 ^
679655daffdd ^

c117ab842001 ^
e2d1d6c0a5d3 ^
1394f0322179 ^
a4edbc101151 ^
b3fe92b03dd6 ^
1443176fd685 ^
e3b2d3f33b3c ^

679655daffdd ^
566da5b2666e ^
e190d6b14007 ^
b3fe92b03dd6 ^
e190d6b14007 ^

7b35f03338a8 ^
e190d6b14007 ^
566da5b2666e ^
b3fe92b03dd6 ^
566da5b2666e ^

679655daffdd ^
1394f0322179 ^
936ed49a540e ^
109ec8c396ea ^
b3fe92b03dd6 ^
936ed49a540e ^



1394f0322179 ^
8b58be884a9f ^
b3fe92b03dd6 ^
e3b2d3f33b3c ^

8460241e4477 ^
1394f0322179 ^
1e6d320f4068 ^
b3fe92b03dd6 ^
1e6d320f4068 ^

679655daffdd ^
1e6d320f4068 ^
d24ecfcc3953 ^
8b58be884a9f ^
b3fe92b03dd6 ^
d24ecfcc3953 ^

679655daffdd ^
d24ecfcc3953 ^
1e2043779d8e ^

b3fe92b03dd6 ^
1e2043779d8e ^





b54cf35a7f65 ^




1da177e4c3f4
8b58be884a9f ^
08deed1ef62d ^
1da177e4c3f4
679655daffdd ^
1da177e4c3f4
2b54aaef7a3a ^
8b58be884a9f ^
2b54aaef7a3a ^

679655daffdd ^
2b54aaef7a3a ^
63fbd24e5102 ^
8b58be884a9f ^
960d4d1ba691 ^
eb491ecac13f ^
781c2844845c ^
63fbd24e5102 ^
22e7a424854b ^

1da177e4c3f4
679655daffdd ^
1da177e4c3f4
63fbd24e5102 ^
8b58be884a9f ^
960d4d1ba691 ^
eb491ecac13f ^
63fbd24e5102 ^

22e7a424854b ^

1da177e4c3f4
679655daffdd ^

1da177e4c3f4

79b30750d99a ^
898602a04950 ^
4cd72c6e72e8 ^
a6c36ee67760 ^
ce00f85c45d7 ^

679655daffdd ^
c117ab842001 ^
1da177e4c3f4
b5f4df3483a1 ^






39105890516b ^
8b58be884a9f ^
39105890516b ^

adfc5217e9db ^
39105890516b ^
32ec90d5d5bb ^





948c51e6a8d7 ^
f1d1baebd1f8 ^

948c51e6a8d7 ^

adfc5217e9db ^

948c51e6a8d7 ^
4d9d2cb026c7 ^
08f6dd89d26f ^
4d9d2cb026c7 ^

adfc5217e9db ^
4d9d2cb026c7 ^
90f4c5944b38 ^
497a045d13dc ^
a3db2bba6d19 ^
f18cf0503872 ^
497a045d13dc ^
90f4c5944b38 ^
af4b8e371b0f ^


90f4c5944b38 ^
af4b8e371b0f ^

e4ef47f2fe33 ^
af4b8e371b0f ^

9209bec4f811 ^
f680f25c635a ^
8bcdd9297d21 ^
f680f25c635a ^
8bcdd9297d21 ^
f680f25c635a ^
9209bec4f811 ^
f680f25c635a ^
a2f6734c5f68 ^







9209bec4f811 ^
5b293ebe7572 ^






e076e96227ef ^







7110e227c86b ^





2df94fd66a11 ^


3b4b6fe94edb ^

2df94fd66a11 ^



e36661e48baa ^
2df94fd66a11 ^
70371cef114c ^











948c51e6a8d7 ^
236294774e24 ^
8b58be884a9f ^
948c51e6a8d7 ^

adfc5217e9db ^
948c51e6a8d7 ^
a9533e7ea3c4 ^

818c07b894df ^
85d63686d892 ^
006a8f148690 ^
a9533e7ea3c4 ^
5615171c935f ^
a9533e7ea3c4 ^
f62ebdd581ea ^
a9533e7ea3c4 ^
9958d6f9a680 ^
3b7f040ac653 ^
9958d6f9a680 ^



6a6b5ad08774 ^
3b7f040ac653 ^
6a6b5ad08774 ^



36c0237f1ae0 ^













7b7f588b50d4 ^
5e163903ba59 ^
7b7f588b50d4 ^




c9678d867216 ^






b83022051a81 ^





7725ccfda597 ^
aa8033705eee ^

455518e7b5ff ^


7725ccfda597 ^
8b230ed8ec96 ^
439e9575e777 ^
8b230ed8ec96 ^

f844a0ead401 ^
8b230ed8ec96 ^
5cdf7f767849 ^
8b58be884a9f ^
5cdf7f767849 ^

679655daffdd ^

c117ab842001 ^
5cdf7f767849 ^
af39917d5a59 ^







ff1d5c2f0268 ^
eb032b9837a9 ^
ff1d5c2f0268 ^

72dbb7051334 ^
ff1d5c2f0268 ^
eb1eb04fdfbd ^
c0778e2534b8 ^

4e0c4a47d723 ^
eb1eb04fdfbd ^

8a6e25357d51 ^
9c106405ddf8 ^
eb1eb04fdfbd ^
679655daffdd ^

eb1eb04fdfbd ^
1da177e4c3f4
009a54103372 ^
661263b55d56 ^
96b6aba08762 ^
275ffde46203 ^
f96236e585e2 ^
679655daffdd ^
90d72ac6e1c3 ^
1da177e4c3f4
1f34923c8a7d ^






af39917d5a59 ^






2141355fcd4d ^







a5432f5ad438 ^
8b58be884a9f ^
a5432f5ad438 ^




c815ca39a0aa ^







77d5140fe78c ^
8b58be884a9f ^
661263b55d56 ^
275ffde46203 ^
77d5140fe78c ^
679655daffdd ^
90d72ac6e1c3 ^
77d5140fe78c ^
201b6bab6798 ^
5c574f501d46 ^
201b6bab6798 ^



c117ab842001 ^
201b6bab6798 ^


77dac90fe4c3 ^
8b58be884a9f ^

77dac90fe4c3 ^

679655daffdd ^



77dac90fe4c3 ^
e2d1d6c0a5d3 ^
8d15d3864a73 ^
1caa60b6d28a ^
ec78213acd6d ^
870482a41900 ^

e2d1d6c0a5d3 ^
f35f6c8f74a0 ^
8d15d3864a73 ^
8d15d3864a73 ^
c117ab842001 ^



e2d1d6c0a5d3 ^
4261a2043f1b ^
8b58be884a9f ^
ec78213acd6d ^
1caa60b6d28a ^
ec78213acd6d ^
870482a41900 ^

4261a2043f1b ^
8d15d3864a73 ^

8d15d3864a73 ^
c117ab842001 ^

4261a2043f1b ^
95d16c7211a5 ^


6305902c2f87 ^
95d16c7211a5 ^
c117ab842001 ^
95d16c7211a5 ^
6305902c2f87 ^
38a94118a69c ^
95d16c7211a5 ^
ef0bbac33dc0 ^







b81545422166 ^
8b58be884a9f ^
a4724ed6f084 ^

b81545422166 ^

679655daffdd ^
679655daffdd ^
c117ab842001 ^
679655daffdd ^

b81545422166 ^
9030aaf9bf0a ^
09d9032751bf ^
82593f87b6c1 ^
09d9032751bf ^
fb99f8810965 ^
9030aaf9bf0a ^

144308139cdc ^



9030aaf9bf0a ^
18332a80c3e2 ^
18332a80c3e2 ^
10c6c9c94c3e ^
679655daffdd ^

355ffe69cb32 ^

679655daffdd ^

18332a80c3e2 ^
70e840499aae ^
8b58be884a9f ^
450c622e9ff1 ^

70e840499aae ^
679655daffdd ^

70e840499aae ^

8b58be884a9f ^
450c622e9ff1 ^

70e840499aae ^
679655daffdd ^

70e840499aae ^
704232c2718c ^
8b58be884a9f ^
704232c2718c ^
ce466579b1c9 ^


704232c2718c ^
c117ab842001 ^
679655daffdd ^


704232c2718c ^
46e642614b36 ^

879a5a001b62 ^
46e642614b36 ^
879a5a001b62 ^
46e642614b36 ^

471322a8f66f ^
46e642614b36 ^
0a920b5b666d ^
8b58be884a9f ^
10d83f07103f ^

679655daffdd ^
0a920b5b666d ^
f8407f26b4c9 ^

9740153c49dc ^
f8407f26b4c9 ^



2721ea2c0f26 ^
eee52f9edd0f ^
cea8321cd7f7 ^
2721ea2c0f26 ^



ab0431059ed0 ^




641cb85e6894 ^
2360d2e8f010 ^
001e1c1d5ec6 ^
c327e8f4863d ^
5c6652f55684 ^
7063fbf22611 ^
a6a5580c4d90 ^
7063fbf22611 ^
e3cf00d0a87f ^
b75f00507623 ^


e3cf00d0a87f ^
2b7a52a459cb ^
5587912fcff1 ^
2b7a52a459cb ^

57d0b7a0d77d ^
2b7a52a459cb ^
3d4cfdc93d6b ^






94574d9a4c23 ^






d4275354993e ^
8b58be884a9f ^
37417046b903 ^
d4275354993e ^

9222d247bcba ^


981c3a4ff859 ^
9222d247bcba ^



5df6d737dd4b ^
8fc89a799728 ^

d7e01dc669e3 ^
5df6d737dd4b ^

2a99921a5570 ^
5df6d737dd4b ^
529aa8cb0a59 ^


d094485323a1 ^
529aa8cb0a59 ^


74425eee71eb ^
26de9c26bf85 ^
74425eee71eb ^
26de9c26bf85 ^
c00b511026eb ^
26de9c26bf85 ^
c00b511026eb ^
74425eee71eb ^

4b92b2aa98d9 ^
74425eee71eb ^


1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4



679655daffdd ^


c117ab842001 ^
1da177e4c3f4
0b14261edc8c ^






7704addb60e2 ^
7704addb60e2 ^
f956165f0783 ^
35c1983ef79f ^
baeb0d9b98c3 ^
7704addb60e2 ^
60bea3b54700 ^

7704addb60e2 ^
60bea3b54700 ^
7704addb60e2 ^
e2d1d6c0a5d3 ^
8b58be884a9f ^
51223df6c33d ^
d1f28953ca33 ^
e2d1d6c0a5d3 ^
bb1d5ddaf962 ^
e2d1d6c0a5d3 ^
ec421a7144d4 ^
679655daffdd ^
e2d1d6c0a5d3 ^
1da177e4c3f4
8b58be884a9f ^
64dab2045018 ^
82c4dfc76200 ^
679655daffdd ^
1da177e4c3f4

8b58be884a9f ^
64dab2045018 ^
82c4dfc76200 ^
679655daffdd ^
1da177e4c3f4

8b58be884a9f ^
64dab2045018 ^
82c4dfc76200 ^
679655daffdd ^
1da177e4c3f4
5411552c707f ^
8b58be884a9f ^
d094485323a1 ^
5411552c707f ^
679655daffdd ^
5411552c707f ^
949be0f7be8d ^
8b58be884a9f ^
9ae5e3bc316e ^

949be0f7be8d ^
679655daffdd ^
949be0f7be8d ^
e2d1d6c0a5d3 ^
d6351db20733 ^

e2d1d6c0a5d3 ^
679655daffdd ^

e2d1d6c0a5d3 ^
acb9c1b2f406 ^
8b58be884a9f ^
acb9c1b2f406 ^



a3e3354d56d8 ^
860ca0e6f72d ^
ad50c15919e8 ^
12340313cf94 ^
860ca0e6f72d ^
fb3a0fb6fd3e ^
a3e3354d56d8 ^
679655daffdd ^

a3e3354d56d8 ^


















5d1ea48bdde6 ^
fb3a0fb6fd3e ^
bebe467823c0 ^
968591298514 ^
bebe467823c0 ^

679655daffdd ^

bebe467823c0 ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4

679655daffdd ^
1da177e4c3f4
4371ee353c3f ^
8b58be884a9f ^
4371ee353c3f ^

b544dbac4121 ^
4371ee353c3f ^
1da177e4c3f4
49db19038fe5 ^
45c009a9a447 ^
a6c072c709b4 ^
1da177e4c3f4
27209d913e51 ^

679655daffdd ^

1da177e4c3f4
8a67f0ef2b68 ^

171d0ba86967 ^
8a67f0ef2b68 ^






14d2c34cfa00 ^
b75f00507623 ^



cea8321cd7f7 ^
b75f00507623 ^

14d2c34cfa00 ^
0c570c183ace ^









a8e39c35b5d0 ^
49db19038fe5 ^
a8e39c35b5d0 ^


cea8321cd7f7 ^
a8e39c35b5d0 ^


1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4
679655daffdd ^

1da177e4c3f4
7fe2f6399a84 ^
7fe2f6399a84 ^
103f1790715e ^
7fe2f6399a84 ^
144308139cdc ^
7fe2f6399a84 ^
1da177e4c3f4
ce00f85c45d7 ^
54886a715335 ^
679655daffdd ^

1da177e4c3f4

8b58be884a9f ^

9937ac0cc087 ^
1da177e4c3f4

679655daffdd ^
df6212529c64 ^
1da177e4c3f4

8b58be884a9f ^

1da177e4c3f4
54e5881d0cd7 ^
1da177e4c3f4
679655daffdd ^




1da177e4c3f4
5b07bd57016f ^
8b58be884a9f ^
5b07bd57016f ^

51a2228a8a58 ^

5b07bd57016f ^
9b4ffa48ae85 ^
8b58be884a9f ^
9b4ffa48ae85 ^
679655daffdd ^
9b4ffa48ae85 ^
a910e4a94f69 ^
b75f00507623 ^


a910e4a94f69 ^
6d8425b1e38f ^
6afdeaf865b7 ^
7b212edf86e2 ^
661263b55d56 ^
275ffde46203 ^
6d8425b1e38f ^
30e10993512c ^
6d8425b1e38f ^
679655daffdd ^
90d72ac6e1c3 ^
6c0f03597595 ^
6d8425b1e38f ^
3f101d916b5b ^





c368360beb82 ^
3f101d916b5b ^

203575784987 ^
009a54103372 ^
203575784987 ^





6d8425b1e38f ^
91952bc0b48a ^








6d8425b1e38f ^
e5ec3789c16e ^
cdc992397432 ^
e5ec3789c16e ^


f7917c009c28 ^
e5ec3789c16e ^
d8ae3c33599a ^






e5ec3789c16e ^
8b58be884a9f ^
e6cc0fd1e31c ^
e5ec3789c16e ^

679655daffdd ^
e5ec3789c16e ^
be4c9bad9d0e ^
56f16c74ca25 ^
be4c9bad9d0e ^


f7917c009c28 ^
be4c9bad9d0e ^
d8ae3c33599a ^






be4c9bad9d0e ^






5c20a5c7105b ^




f7917c009c28 ^
5c20a5c7105b ^
a9282d01cf35 ^











b52b97a339c0 ^




7ac6653a085b ^
b52b97a339c0 ^
1da177e4c3f4
8b58be884a9f ^
efc03ecb9d67 ^
1da177e4c3f4

8a61f0135c69 ^
9fa68eae9f82 ^
1da177e4c3f4
1da177e4c3f4
d459883e6c54 ^
c897401bac2b ^
679655daffdd ^
c117ab842001 ^
1da177e4c3f4

1da177e4c3f4
d459883e6c54 ^
679655daffdd ^
1da177e4c3f4
402f6ae4d52e ^









e3ae3525250b ^
be9a6f4025f7 ^
6305902c2f87 ^
be9a6f4025f7 ^
6305902c2f87 ^

e3ae3525250b ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4



679655daffdd ^






1da177e4c3f4
e2d1d6c0a5d3 ^
e2d1d6c0a5d3 ^
5ff77428e55c ^
679655daffdd ^
0f04e2aa0cbe ^
e2d1d6c0a5d3 ^

71bd849dbac9 ^

e2d1d6c0a5d3 ^
71bd849dbac9 ^
e2d1d6c0a5d3 ^
1da177e4c3f4
61eee9a72e40 ^
8b58be884a9f ^

f5df5881e2a2 ^
cf015e9f279f ^

1da177e4c3f4
679655daffdd ^

1da177e4c3f4
eb8edb085716 ^
a89d030ee46a ^
eb8edb085716 ^
c996d8b9a8f3 ^
eb8edb085716 ^
679655daffdd ^
c117ab842001 ^
679655daffdd ^

eb8edb085716 ^
1da177e4c3f4
1da177e4c3f4

f546444d0b4f ^
679655daffdd ^

1da177e4c3f4
ebff05b9c649 ^








1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4
33f810b2036f ^
1da177e4c3f4
ad8f07ccaddc ^
8b58be884a9f ^
d094485323a1 ^
ad8f07ccaddc ^
679655daffdd ^
ad8f07ccaddc ^
1da177e4c3f4
a1406d877200 ^
679655daffdd ^
c117ab842001 ^
1da177e4c3f4
90563ec4129f ^
8b58be884a9f ^
90563ec4129f ^
679655daffdd ^

90563ec4129f ^
0b3f6109f0c9 ^
8b58be884a9f ^
0b3f6109f0c9 ^
36b3a96f052e ^
0b3f6109f0c9 ^
5efc75e350ce ^


18f340f90e08 ^
5efc75e350ce ^
197ba5f406cc ^
5efc75e350ce ^
94ab23dd254a ^







833c95456a70 ^






89d07767d051 ^


88476d34ea3c ^
89d07767d051 ^


1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4
1da177e4c3f4

e2d1d6c0a5d3 ^
854ecaad8022 ^
8504eed3ac96 ^
854ecaad8022 ^
e2d1d6c0a5d3 ^

8a6e25357d51 ^
41d35d25e9d4 ^
854ecaad8022 ^
e2d1d6c0a5d3 ^
679655daffdd ^

854ecaad8022 ^
679655daffdd ^

8504eed3ac96 ^
e2d1d6c0a5d3 ^
c0d995aafc1d ^
























599aa6975e7a ^

542f3d5af89c ^
599aa6975e7a ^





abeb935f11e1 ^
6d825f794206 ^
599aa6975e7a ^



335d7c58fcc1 ^
ca4620853a5b ^
335d7c58fcc1 ^



e7839f25df8e ^
8b58be884a9f ^
3c5119c05d62 ^
679655daffdd ^


1da177e4c3f4

8b58be884a9f ^
1da177e4c3f4




4480f15b3306 ^
8b58be884a9f ^
1da177e4c3f4
679655daffdd ^


c117ab842001 ^
1da177e4c3f4
702686ad72b8 ^




8a61f0135c69 ^
702686ad72b8 ^


e7839f25df8e ^
8b58be884a9f ^

a46441842519 ^
5be7b50f3227 ^
54e5881d0cd7 ^
5be7b50f3227 ^
679655daffdd ^
5be7b50f3227 ^
53b6b3e00b84 ^




8ada6d2d3063 ^
35fac7e305dc ^
e46d12c65998 ^


53b6b3e00b84 ^


b3e5f2634ad6 ^
4abed0af1e9b ^
17b59560efcf ^

08223d80df38 ^
679655daffdd ^
0ce3c066c49a ^
979a281efe11 ^

248a9dc32a24 ^
b825037d1855 ^
8b58be884a9f ^
b825037d1855 ^

679655daffdd ^

b825037d1855 ^
5b9c9bf6c922 ^
8b58be884a9f ^
5b9c9bf6c922 ^
8b59a454c421 ^
679655daffdd ^
5b9c9bf6c922 ^
7d2c86b5a048 ^
ad3118b98613 ^
795fb7e74dff ^

679655daffdd ^
97be078b87f8 ^


e71e2c6fbbac ^
abbaeff38c00 ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4

679655daffdd ^

1da177e4c3f4
e2d1d6c0a5d3 ^
8b58be884a9f ^
e2d1d6c0a5d3 ^


679655daffdd ^

e2d1d6c0a5d3 ^
b411b3637fa7 ^
28b8e8d4e2e3 ^










b411b3637fa7 ^
87544653abe4 ^
879a5a001b62 ^
08deed1ef62d ^
1da177e4c3f4
679655daffdd ^
7cfc51b9d379 ^
679655daffdd ^
87544653abe4 ^
679655daffdd ^
87544653abe4 ^
679655daffdd ^
1da177e4c3f4

8b58be884a9f ^
4c6a39996517 ^
b0447888dc29 ^
1da177e4c3f4
679655daffdd ^
433e3b3420ad ^
850e94115c5d ^
c117ab842001 ^
1da177e4c3f4
566f59394d7b ^






566f59394d7b ^

03e255b993ff ^









8daf7473203c ^
cbce710709f2 ^
47f956477dc6 ^
362132d228ef ^
8daf7473203c ^
47f956477dc6 ^
89258a975311 ^
8daf7473203c ^
144308139cdc ^
8daf7473203c ^
c117ab842001 ^
8daf7473203c ^
398a6d4a0225 ^

f15013033e2d ^


398a6d4a0225 ^
25a5803037cb ^
398a6d4a0225 ^
144308139cdc ^
398a6d4a0225 ^
c117ab842001 ^
398a6d4a0225 ^
0a3d775fb2c9 ^






bd3b49f25a3e ^
a5ad7a636b2b ^

bd3b49f25a3e ^

a5ad7a636b2b ^
adabdb0cc59e ^
dee8268f8fb2 ^
a5ad7a636b2b ^
e1e906448d2f ^
a5ad7a636b2b ^
bd3b49f25a3e ^

a284e9d14e35 ^










598df1ac2981 ^






1da177e4c3f4
8b58be884a9f ^
01f2073411e0 ^
1da177e4c3f4
679655daffdd ^
1da177e4c3f4
91952bc0b48a ^

















































d099dea2c84e ^







9819da66c81f ^
d099dea2c84e ^
91952bc0b48a ^
91952bc0b48a ^






91952bc0b48a ^
91952bc0b48a ^
5560983b5dc2 ^
91952bc0b48a ^


91952bc0b48a ^


5560983b5dc2 ^
91952bc0b48a ^
8856f5f27cb5 ^









91952bc0b48a ^




















ac0ac38f68be ^
5c4a97d1dabb ^
ac0ac38f68be ^



789c7048bfaa ^
8b58be884a9f ^
789c7048bfaa ^
df6212529c64 ^
789c7048bfaa ^
f17effbe8916 ^







91952bc0b48a ^









1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4

679655daffdd ^
1da177e4c3f4
91952bc0b48a ^









237fead61998 ^
0de9adf284ec ^
a058bfbbeca5 ^
24a923e4e9a2 ^
6dc7516eba9c ^
237fead61998 ^
679655daffdd ^

237fead61998 ^
da9bb1d27b21 ^
8b58be884a9f ^
aa15aa0e869c ^
009a54103372 ^
91445c72cac7 ^
0e438e3f0089 ^
7a85951692eb ^

8c2a6a409023 ^
679655daffdd ^
91445c72cac7 ^
679655daffdd ^
0e438e3f0089 ^
c476c23b45a4 ^
8b58be884a9f ^
487ba8e82ab9 ^
91445c72cac7 ^
c476c23b45a4 ^
487ba8e82ab9 ^
c476c23b45a4 ^

836dae5d0098 ^







f65aad41772f ^








0e438e3f0089 ^
8b58be884a9f ^

91445c72cac7 ^
0e438e3f0089 ^

679655daffdd ^
0e438e3f0089 ^

8b58be884a9f ^
91445c72cac7 ^
0e438e3f0089 ^

679655daffdd ^
0e438e3f0089 ^
77c5f5d2f212 ^
009a54103372 ^
77c5f5d2f212 ^


2caa67a652c9 ^
77c5f5d2f212 ^
6bc7840411b8 ^
8b58be884a9f ^
91445c72cac7 ^
6bc7840411b8 ^

679655daffdd ^
6bc7840411b8 ^

8b58be884a9f ^
91445c72cac7 ^
6bc7840411b8 ^

679655daffdd ^
6bc7840411b8 ^

8b58be884a9f ^
91445c72cac7 ^
ba9a5918c867 ^

679655daffdd ^
ba9a5918c867 ^
44c12cb2f564 ^
009a54103372 ^
67c893167709 ^
44c12cb2f564 ^

679655daffdd ^
44c12cb2f564 ^
3c9c92b6b501 ^
009a54103372 ^
3c9c92b6b501 ^




67c893167709 ^
009a54103372 ^
67c893167709 ^


70aff0ce210f ^
67c893167709 ^
ba9a5918c867 ^
8b58be884a9f ^
25527885e335 ^
91445c72cac7 ^
ba9a5918c867 ^

679655daffdd ^
ba9a5918c867 ^
791b470684c1 ^






ccdfb97972fd ^






ba9a5918c867 ^
8b58be884a9f ^
91445c72cac7 ^
6bc7840411b8 ^

679655daffdd ^
6bc7840411b8 ^
0e438e3f0089 ^
8b58be884a9f ^
91445c72cac7 ^
0e438e3f0089 ^

679655daffdd ^
da9bb1d27b21 ^
4d096ca7e655 ^
009a54103372 ^
4d096ca7e655 ^




af39917d5a59 ^






1f7df953d687 ^


78bef24e8477 ^
1f7df953d687 ^
fb2efb5ce83c ^
1f7df953d687 ^



a9499fa7cd3f ^
1f7df953d687 ^

d68772b7c83f ^








85a00d9bbfb4 ^



8a61f0135c69 ^
85a00d9bbfb4 ^
0bee8d28496a ^


679655daffdd ^
0bee8d28496a ^
4480f15b3306 ^
8b58be884a9f ^

e6cc0fd1e31c ^
fab97220c9e4 ^
679655daffdd ^
fab97220c9e4 ^
aa8a9e25c5e8 ^
34b1901abdf8 ^
aa8a9e25c5e8 ^

9aa328359545 ^
aa8a9e25c5e8 ^
f0319efe1fb7 ^
009a54103372 ^
f0319efe1fb7 ^





3e3a7d666d6d ^
8b58be884a9f ^


3e3a7d666d6d ^


3a1c1d446b7c ^
8b58be884a9f ^
ce00f85c45d7 ^


679655daffdd ^
3a1c1d446b7c ^
5f5bac8272be ^
8b58be884a9f ^
5f5bac8272be ^




931e39a13924 ^


2a8374492b23 ^
931e39a13924 ^
ec207dcc91c6 ^






d5ca90060328 ^
8b58be884a9f ^
d5ca90060328 ^
084bad91afd0 ^
8a61f0135c69 ^
679655daffdd ^
d5ca90060328 ^
38df6492eb51 ^




1da177e4c3f4
adbbf69d1a54 ^
f318a63ba018 ^
4c32531324b8 ^
c996d8b9a8f3 ^
1da177e4c3f4
679655daffdd ^

1da177e4c3f4
22f08ad9721d ^










1da177e4c3f4
019719525820 ^
72be2ccfff0e ^
1da177e4c3f4
679655daffdd ^


1da177e4c3f4

019719525820 ^
8b58be884a9f ^
3c373a5f9395 ^
72be2ccfff0e ^

679655daffdd ^

72be2ccfff0e ^

8b58be884a9f ^
3c373a5f9395 ^
72be2ccfff0e ^
08a225f143bf ^
8a6e25357d51 ^
1da177e4c3f4
679655daffdd ^

1da177e4c3f4
c5532b09bf40 ^
74dd744fd7f7 ^


c5532b09bf40 ^


df6b3cfe20f3 ^



81df63a9a5f9 ^
df6b3cfe20f3 ^



e2a75c446e38 ^





33ad39121d55 ^





8a61f0135c69 ^
33ad39121d55 ^

e53004e20a58 ^
7c81c60f3789 ^
e53004e20a58 ^

679655daffdd ^

e53004e20a58 ^
eea977ed63c1 ^



ccae7af2bf07 ^

eea977ed63c1 ^
91952bc0b48a ^








eea977ed63c1 ^
88b2dbdbed55 ^




c117ab842001 ^
88b2dbdbed55 ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4

679655daffdd ^
1da177e4c3f4
c5408b88ecb8 ^
8b58be884a9f ^
c5408b88ecb8 ^
679655daffdd ^

c5408b88ecb8 ^
cae727db30e9 ^

f4aaea6d5106 ^
cae727db30e9 ^






c117ab842001 ^
cae727db30e9 ^
e2d1d6c0a5d3 ^
8c836fa85beb ^
18156e7e66e5 ^
e2d1d6c0a5d3 ^
1da177e4c3f4
679655daffdd ^

c117ab842001 ^

679655daffdd ^

1da177e4c3f4
e2d1d6c0a5d3 ^
8b58be884a9f ^
e2d1d6c0a5d3 ^
173acc7ce853 ^
679655daffdd ^
173acc7ce853 ^
b26e0ed4936b ^
05576a1e38e2 ^
b26e0ed4936b ^

d5ca6918bc9f ^

b26e0ed4936b ^
a331b0c36655 ^






eb86ec51f839 ^







a511ce339780 ^








7d2c86b5a048 ^
8b58be884a9f ^
e2d1d6c0a5d3 ^
958a29cb1c91 ^
2ca526bf4953 ^
e2d1d6c0a5d3 ^
679655daffdd ^
8f06ce3b5e53 ^

9f6d3c4b7631 ^
e2d1d6c0a5d3 ^

39e68089f6e1 ^


679655daffdd ^


e2d1d6c0a5d3 ^
f730e3dc6dc4 ^
9bb3c4469e31 ^




8206f664bfd7 ^





9c9f32eddee5 ^








e2d1d6c0a5d3 ^
8b58be884a9f ^
e769980feee8 ^
e2d1d6c0a5d3 ^
679655daffdd ^
e2d1d6c0a5d3 ^

e2d1d6c0a5d3 ^
c173bfac2428 ^
679655daffdd ^

e2d1d6c0a5d3 ^

5489e948dc0f ^

c69f677cc852 ^
e2d1d6c0a5d3 ^
b22fe37b9907 ^
5489e948dc0f ^
56be1416453c ^
679655daffdd ^
d958c62c0cf4 ^
b22fe37b9907 ^

679655daffdd ^
c117ab842001 ^

e2d1d6c0a5d3 ^
a57c188e6c34 ^
c4ef9bc4f7e1 ^
a57c188e6c34 ^
c4ef9bc4f7e1 ^
8a61f0135c69 ^
a57c188e6c34 ^
e2d1d6c0a5d3 ^
8b58be884a9f ^

a4724ed6f084 ^
e2d1d6c0a5d3 ^
679655daffdd ^
e2d1d6c0a5d3 ^

8b58be884a9f ^
a4724ed6f084 ^
846557d3ceb6 ^
0d2b405a6283 ^
679655daffdd ^
0d2b405a6283 ^
60e8c5ab0b09 ^
8b58be884a9f ^
c69f677cc852 ^
efc03ecb9d67 ^
60e8c5ab0b09 ^
bad985a16fb8 ^
8a61f0135c69 ^
60e8c5ab0b09 ^
4689a6b1d497 ^
8b58be884a9f ^

a4724ed6f084 ^
4689a6b1d497 ^

ec21e2ec3676 ^
679655daffdd ^
4689a6b1d497 ^
d9e9d82c24e5 ^
a4724ed6f084 ^
c4ef9bc4f7e1 ^
679655daffdd ^

d9e9d82c24e5 ^
b55ef929cb0b ^
8b58be884a9f ^
6372594ac177 ^
a4724ed6f084 ^
a7205b30106a ^
faf2e1dbd874 ^
a7205b30106a ^
beaf53bff798 ^
8b58be884a9f ^
beaf53bff798 ^
a4724ed6f084 ^
beaf53bff798 ^
ec21e2ec3676 ^
beaf53bff798 ^
d9e9d82c24e5 ^
c4ef9bc4f7e1 ^
a4724ed6f084 ^
c4ef9bc4f7e1 ^
df6212529c64 ^
d9e9d82c24e5 ^

c4ef9bc4f7e1 ^
dc85950a1a17 ^
b4b982979eb2 ^
93711660086d ^
a4724ed6f084 ^
c4ef9bc4f7e1 ^
69aefcead5da ^
dc85950a1a17 ^
69aefcead5da ^
d9e9d82c24e5 ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4

679655daffdd ^
1da177e4c3f4
71038f527f36 ^
49db19038fe5 ^
7fb060820acb ^
bf1c138e3501 ^
71038f527f36 ^
679655daffdd ^


71038f527f36 ^
839a1f79ed0c ^






a5432f5ad438 ^
8b58be884a9f ^
a5432f5ad438 ^





f58ad8f51a5a ^
9b29d481b15a ^
f6238a72092c ^
f58ad8f51a5a ^




3bac380c9012 ^
f58ad8f51a5a ^


5ab7ffea5209 ^
8b58be884a9f ^
1da177e4c3f4
679655daffdd ^
1da177e4c3f4
20b937343e55 ^
409a3e98132c ^
d094485323a1 ^
20b937343e55 ^
679655daffdd ^
20b937343e55 ^
4da621b69e5c ^




90d72ac6e1c3 ^
4da621b69e5c ^

2d24c49080af ^





04578f174f43 ^
8b58be884a9f ^
04578f174f43 ^


679655daffdd ^
c117ab842001 ^
04578f174f43 ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4
baaea1dc0bef ^
679655daffdd ^
1da177e4c3f4
d8e2162cf0bb ^





1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4


679655daffdd ^
1da177e4c3f4
3169a1c77f87 ^







1c23af90dc44 ^
880b0e2649b5 ^
1c23af90dc44 ^
679655daffdd ^

1c23af90dc44 ^
92ed1a76ca31 ^



e7065e20d9a6 ^


92ed1a76ca31 ^
9251ce959cab ^
8b58be884a9f ^
1da177e4c3f4

679655daffdd ^






1da177e4c3f4
1527aab617af ^
8b58be884a9f ^
1527aab617af ^


144308139cdc ^

1527aab617af ^
ff764963479a ^







ccb86a6907c9 ^
bda2562c34c3 ^
ccb86a6907c9 ^
ccb86a6907c9 ^


f8f1ec73b5b1 ^




5be7b50f3227 ^
8b58be884a9f ^
a46441842519 ^
5be7b50f3227 ^
08deed1ef62d ^

5be7b50f3227 ^
679655daffdd ^

c117ab842001 ^
5be7b50f3227 ^
0a34eb8f55a7 ^
8b58be884a9f ^

0a34eb8f55a7 ^


679655daffdd ^

c117ab842001 ^
0a34eb8f55a7 ^
7eea35fe3df8 ^





ca96ea86eed4 ^





a0dc00b430b7 ^
e4651a9ff469 ^
f2fa75cdf8b1 ^
d15b71796316 ^
f2fa75cdf8b1 ^


a0dc00b430b7 ^
bdc6e95e1273 ^

9b692346f8e1 ^
a0dc00b430b7 ^
71a6d0af5b03 ^



11c26770eb02 ^

71a6d0af5b03 ^

d4c41139df6e ^



a31a96ad7206 ^
d4c41139df6e ^
e8deeae24f8b ^
8b58be884a9f ^
661263b55d56 ^
275ffde46203 ^
e8deeae24f8b ^
0c0d06cac63e ^
e8deeae24f8b ^
4b3fa3c486f5 ^


275ffde46203 ^
4b3fa3c486f5 ^
0c0d06cac63e ^
4b3fa3c486f5 ^
e8deeae24f8b ^
8b58be884a9f ^
661263b55d56 ^
275ffde46203 ^
e8deeae24f8b ^
0c0d06cac63e ^
e8deeae24f8b ^

8b58be884a9f ^
661263b55d56 ^
275ffde46203 ^
e8deeae24f8b ^
0c0d06cac63e ^
e8deeae24f8b ^
261982f17051 ^
d95c5b0b905a ^
261982f17051 ^
275ffde46203 ^
261982f17051 ^
0c0d06cac63e ^
261982f17051 ^
e8deeae24f8b ^
8b58be884a9f ^
661263b55d56 ^
275ffde46203 ^
e8deeae24f8b ^
0c0d06cac63e ^
e8deeae24f8b ^

fc3f906bce23 ^
661263b55d56 ^
275ffde46203 ^
e8deeae24f8b ^
0c0d06cac63e ^
e8deeae24f8b ^
584ec9794293 ^





aa3c598b0087 ^


275ffde46203 ^
aa3c598b0087 ^

e8deeae24f8b ^
71a6d0af5b03 ^






48fc9e26705f ^





144308139cdc ^
48fc9e26705f ^
71a6d0af5b03 ^
f9625c48ecca ^
71a6d0af5b03 ^
71a6d0af5b03 ^








e5ab1477bc4d ^









5b5439652af7 ^
7c81c60f3789 ^
ca4620853a5b ^
5b5439652af7 ^
595142e04909 ^
9e012c1acc1f ^
885374e37bd7 ^
9e012c1acc1f ^
047f4ec29453 ^
679655daffdd ^
047f4ec29453 ^
5b5439652af7 ^
844dd05fec17 ^
c0d0787b6d47 ^


679655daffdd ^


844dd05fec17 ^
8b37fcfc9b34 ^






1da177e4c3f4
ac6aecbf0541 ^
1da177e4c3f4
679655daffdd ^
1da177e4c3f4
91952bc0b48a ^









e2d1d6c0a5d3 ^
e2d1d6c0a5d3 ^
af9f1b3c7fa9 ^
679655daffdd ^

e2d1d6c0a5d3 ^
9257aa496387 ^
693373db508b ^
9257aa496387 ^
693373db508b ^

9257aa496387 ^



c117ab842001 ^
9257aa496387 ^
e2d1d6c0a5d3 ^
693373db508b ^
e2d1d6c0a5d3 ^
693373db508b ^

e2d1d6c0a5d3 ^
679655daffdd ^


c117ab842001 ^
e2d1d6c0a5d3 ^
1da177e4c3f4
6cf515e113fc ^

679655daffdd ^

1da177e4c3f4
ef575f473634 ^





1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4


8a61f0135c69 ^
1da177e4c3f4
4480f15b3306 ^
49db19038fe5 ^
7fb060820acb ^
bf1c138e3501 ^
e2d1d6c0a5d3 ^
679655daffdd ^





679655daffdd ^
e2d1d6c0a5d3 ^
4ef4caad4163 ^
8b58be884a9f ^
eb76c5c03caa ^
54e5881d0cd7 ^
4ef4caad4163 ^
679655daffdd ^

c117ab842001 ^
4ef4caad4163 ^
38bed5429987 ^
8b58be884a9f ^
981c3a4ff859 ^
75fc2d3797c4 ^
38bed5429987 ^
679655daffdd ^
5cee96459726 ^
88606e80da0e ^


05ed8490812a ^
679655daffdd ^
38bed5429987 ^
1da177e4c3f4
1da177e4c3f4
8b64f2a04190 ^
679655daffdd ^

1da177e4c3f4
ede1e6f8b432 ^
8b58be884a9f ^
ede1e6f8b432 ^

679655daffdd ^

ede1e6f8b432 ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4

679655daffdd ^
c117ab842001 ^
679655daffdd ^
ff5a3b509e4e ^
1da177e4c3f4
ff1d2767d5a4 ^
8b58be884a9f ^
85d32e7b0ea5 ^
724c6b35ecff ^
ff1d2767d5a4 ^

679655daffdd ^
ff1d2767d5a4 ^
dd8cd7793781 ^
d094485323a1 ^
95c702154066 ^
679655daffdd ^
dd8cd7793781 ^
e2d1d6c0a5d3 ^
8b58be884a9f ^
e2d1d6c0a5d3 ^
7e25d72458c6 ^
e2d1d6c0a5d3 ^
7d2c86b5a048 ^
8b58be884a9f ^
b9b0332fcf12 ^
679655daffdd ^


c117ab842001 ^
b9b0332fcf12 ^
e07b5d795aeb ^
9e06f631ecef ^
679655daffdd ^

b9b0332fcf12 ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4

679655daffdd ^
1da177e4c3f4
3441cded6511 ^
56459ea9aada ^

3441cded6511 ^

56459ea9aada ^
3441cded6511 ^



7d2c86b5a048 ^
8b58be884a9f ^
11cd29b028be ^

679655daffdd ^
11cd29b028be ^
19990e29fedc ^





5a18c343a6be ^
8b58be884a9f ^
5a18c343a6be ^

679655daffdd ^
5a18c343a6be ^
1da177e4c3f4
6d49e352ae9a ^
1da177e4c3f4
679655daffdd ^
1da177e4c3f4
05183189ee5d ^




a4162747b796 ^


05183189ee5d ^
a4162747b796 ^
f92ca80b28a0 ^
05183189ee5d ^
a4162747b796 ^
8a61f0135c69 ^
a4162747b796 ^

05183189ee5d ^
d85c8a6ab2bb ^
7c81c60f3789 ^
d85c8a6ab2bb ^







7c81c60f3789 ^
d85c8a6ab2bb ^































cb7f07a4c586 ^






6ea884dbc6ee ^
7c81c60f3789 ^
846557d3ceb6 ^
6ea884dbc6ee ^
8547a5bc1044 ^
6ea884dbc6ee ^
5b5439652af7 ^
14d77c4ddfd8 ^
846557d3ceb6 ^
9d4ea27abbb9 ^

14d77c4ddfd8 ^
1da177e4c3f4
40ed1b4caf76 ^
679655daffdd ^


03b70d625c10 ^
c117ab842001 ^

1da177e4c3f4
4560d6772281 ^




4560d6772281 ^
d85c8a6ab2bb ^
7c81c60f3789 ^
d85c8a6ab2bb ^




e8c76eed2ecd ^
8b58be884a9f ^
846557d3ceb6 ^
932d18729dd0 ^
e8c76eed2ecd ^
679655daffdd ^
e8c76eed2ecd ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4
679655daffdd ^
1da177e4c3f4

8b58be884a9f ^
54e5881d0cd7 ^
1da177e4c3f4

1da177e4c3f4
8b58be884a9f ^

1da177e4c3f4
6b1c70b1ff6f ^
1da177e4c3f4
679655daffdd ^
1da177e4c3f4
956c203c5e37 ^
5b88e270253d ^

956c203c5e37 ^



0e16aafb1204 ^
d1e66e6e4509 ^
0e16aafb1204 ^



1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4
679655daffdd ^
1da177e4c3f4
9d348af47656 ^
eddd63a6704a ^
9d348af47656 ^

9aa328359545 ^
9d348af47656 ^
e6babec6cf63 ^
bcbde52b14b7 ^
4b7652ccb77b ^

e6babec6cf63 ^



44b4dad9b571 ^
e6babec6cf63 ^


4b7652ccb77b ^
1da177e4c3f4
f9213e78c42c ^
679655daffdd ^
1da177e4c3f4
6ed9f9c405f9 ^





1e7106fc7ea6 ^
8b58be884a9f ^
1da177e4c3f4
8a6e25357d51 ^
08deed1ef62d ^
1da177e4c3f4
679655daffdd ^


1da177e4c3f4
6cb8c13da108 ^






1ea4c16120f5 ^






0f861e8c47ed ^
487ba8e82ab9 ^
9c5b0ce43d0e ^
c404c199f711 ^
679655daffdd ^

1da177e4c3f4
27471fdb32e7 ^
8b58be884a9f ^
bf1c138e3501 ^
27471fdb32e7 ^
679655daffdd ^
27471fdb32e7 ^
02cf22863923 ^
b6e195fd4f66 ^
ebef9c123617 ^


02cf22863923 ^

68653359beb5 ^
251741b130c4 ^
580947d395c3 ^






ebef9c123617 ^
02cf22863923 ^
b1c97193c643 ^





40ad4a30299f ^





9545f86e3a3b ^
030a13d7099e ^
f0d611616200 ^


9545f86e3a3b ^

03e7c251533b ^
9545f86e3a3b ^
8fe671fc0b9f ^
9545f86e3a3b ^
65519263df87 ^