diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-07 16:28:20 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-07 16:28:20 -0500 |
commit | dad2ad82c5f058367df79de022bd12d36afcd065 (patch) | |
tree | 426a1a6ca8762356b375527768bedc2de0bd25e9 | |
parent | 7079060f3e86ea4c1d4e9c1e356592ef9dcaaa1f (diff) | |
parent | b7fb358c7c36a14927d5523ea674e69f90c51d1d (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/cpufreq
-rw-r--r-- | arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c | 3 | ||||
-rw-r--r-- | arch/i386/kernel/cpu/cpufreq/powernow-k7.c | 12 | ||||
-rw-r--r-- | arch/i386/kernel/cpu/cpufreq/powernow-k8.c | 19 | ||||
-rw-r--r-- | arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c | 3 | ||||
-rw-r--r-- | drivers/cpufreq/cpufreq.c | 3 | ||||
-rw-r--r-- | drivers/cpufreq/cpufreq_ondemand.c | 18 | ||||
-rw-r--r-- | drivers/cpufreq/cpufreq_stats.c | 12 |
7 files changed, 29 insertions, 41 deletions
diff --git a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c index caa9f7711343..871366b83b3f 100644 --- a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c | |||
@@ -377,10 +377,9 @@ acpi_cpufreq_cpu_init ( | |||
377 | arg0.buffer.length = 12; | 377 | arg0.buffer.length = 12; |
378 | arg0.buffer.pointer = (u8 *) arg0_buf; | 378 | arg0.buffer.pointer = (u8 *) arg0_buf; |
379 | 379 | ||
380 | data = kmalloc(sizeof(struct cpufreq_acpi_io), GFP_KERNEL); | 380 | data = kzalloc(sizeof(struct cpufreq_acpi_io), GFP_KERNEL); |
381 | if (!data) | 381 | if (!data) |
382 | return (-ENOMEM); | 382 | return (-ENOMEM); |
383 | memset(data, 0, sizeof(struct cpufreq_acpi_io)); | ||
384 | 383 | ||
385 | acpi_io_data[cpu] = data; | 384 | acpi_io_data[cpu] = data; |
386 | 385 | ||
diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k7.c b/arch/i386/kernel/cpu/cpufreq/powernow-k7.c index 73a5dc5b26b8..edcd626001da 100644 --- a/arch/i386/kernel/cpu/cpufreq/powernow-k7.c +++ b/arch/i386/kernel/cpu/cpufreq/powernow-k7.c | |||
@@ -171,10 +171,9 @@ static int get_ranges (unsigned char *pst) | |||
171 | unsigned int speed; | 171 | unsigned int speed; |
172 | u8 fid, vid; | 172 | u8 fid, vid; |
173 | 173 | ||
174 | powernow_table = kmalloc((sizeof(struct cpufreq_frequency_table) * (number_scales + 1)), GFP_KERNEL); | 174 | powernow_table = kzalloc((sizeof(struct cpufreq_frequency_table) * (number_scales + 1)), GFP_KERNEL); |
175 | if (!powernow_table) | 175 | if (!powernow_table) |
176 | return -ENOMEM; | 176 | return -ENOMEM; |
177 | memset(powernow_table, 0, (sizeof(struct cpufreq_frequency_table) * (number_scales + 1))); | ||
178 | 177 | ||
179 | for (j=0 ; j < number_scales; j++) { | 178 | for (j=0 ; j < number_scales; j++) { |
180 | fid = *pst++; | 179 | fid = *pst++; |
@@ -305,16 +304,13 @@ static int powernow_acpi_init(void) | |||
305 | goto err0; | 304 | goto err0; |
306 | } | 305 | } |
307 | 306 | ||
308 | acpi_processor_perf = kmalloc(sizeof(struct acpi_processor_performance), | 307 | acpi_processor_perf = kzalloc(sizeof(struct acpi_processor_performance), |
309 | GFP_KERNEL); | 308 | GFP_KERNEL); |
310 | |||
311 | if (!acpi_processor_perf) { | 309 | if (!acpi_processor_perf) { |
312 | retval = -ENOMEM; | 310 | retval = -ENOMEM; |
313 | goto err0; | 311 | goto err0; |
314 | } | 312 | } |
315 | 313 | ||
316 | memset(acpi_processor_perf, 0, sizeof(struct acpi_processor_performance)); | ||
317 | |||
318 | if (acpi_processor_register_performance(acpi_processor_perf, 0)) { | 314 | if (acpi_processor_register_performance(acpi_processor_perf, 0)) { |
319 | retval = -EIO; | 315 | retval = -EIO; |
320 | goto err1; | 316 | goto err1; |
@@ -337,14 +333,12 @@ static int powernow_acpi_init(void) | |||
337 | goto err2; | 333 | goto err2; |
338 | } | 334 | } |
339 | 335 | ||
340 | powernow_table = kmalloc((number_scales + 1) * (sizeof(struct cpufreq_frequency_table)), GFP_KERNEL); | 336 | powernow_table = kzalloc((number_scales + 1) * (sizeof(struct cpufreq_frequency_table)), GFP_KERNEL); |
341 | if (!powernow_table) { | 337 | if (!powernow_table) { |
342 | retval = -ENOMEM; | 338 | retval = -ENOMEM; |
343 | goto err2; | 339 | goto err2; |
344 | } | 340 | } |
345 | 341 | ||
346 | memset(powernow_table, 0, ((number_scales + 1) * sizeof(struct cpufreq_frequency_table))); | ||
347 | |||
348 | pc.val = (unsigned long) acpi_processor_perf->states[0].control; | 342 | pc.val = (unsigned long) acpi_processor_perf->states[0].control; |
349 | for (i = 0; i < number_scales; i++) { | 343 | for (i = 0; i < number_scales; i++) { |
350 | u8 fid, vid; | 344 | u8 fid, vid; |
diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c index 2d5c9adba0cd..68a1fc87f4ca 100644 --- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c | |||
@@ -462,7 +462,6 @@ static int check_supported_cpu(unsigned int cpu) | |||
462 | 462 | ||
463 | oldmask = current->cpus_allowed; | 463 | oldmask = current->cpus_allowed; |
464 | set_cpus_allowed(current, cpumask_of_cpu(cpu)); | 464 | set_cpus_allowed(current, cpumask_of_cpu(cpu)); |
465 | schedule(); | ||
466 | 465 | ||
467 | if (smp_processor_id() != cpu) { | 466 | if (smp_processor_id() != cpu) { |
468 | printk(KERN_ERR "limiting to cpu %u failed\n", cpu); | 467 | printk(KERN_ERR "limiting to cpu %u failed\n", cpu); |
@@ -497,9 +496,7 @@ static int check_supported_cpu(unsigned int cpu) | |||
497 | 496 | ||
498 | out: | 497 | out: |
499 | set_cpus_allowed(current, oldmask); | 498 | set_cpus_allowed(current, oldmask); |
500 | schedule(); | ||
501 | return rc; | 499 | return rc; |
502 | |||
503 | } | 500 | } |
504 | 501 | ||
505 | static int check_pst_table(struct powernow_k8_data *data, struct pst_s *pst, u8 maxvid) | 502 | static int check_pst_table(struct powernow_k8_data *data, struct pst_s *pst, u8 maxvid) |
@@ -913,7 +910,6 @@ static int powernowk8_target(struct cpufreq_policy *pol, unsigned targfreq, unsi | |||
913 | /* only run on specific CPU from here on */ | 910 | /* only run on specific CPU from here on */ |
914 | oldmask = current->cpus_allowed; | 911 | oldmask = current->cpus_allowed; |
915 | set_cpus_allowed(current, cpumask_of_cpu(pol->cpu)); | 912 | set_cpus_allowed(current, cpumask_of_cpu(pol->cpu)); |
916 | schedule(); | ||
917 | 913 | ||
918 | if (smp_processor_id() != pol->cpu) { | 914 | if (smp_processor_id() != pol->cpu) { |
919 | printk(KERN_ERR "limiting to cpu %u failed\n", pol->cpu); | 915 | printk(KERN_ERR "limiting to cpu %u failed\n", pol->cpu); |
@@ -968,8 +964,6 @@ static int powernowk8_target(struct cpufreq_policy *pol, unsigned targfreq, unsi | |||
968 | 964 | ||
969 | err_out: | 965 | err_out: |
970 | set_cpus_allowed(current, oldmask); | 966 | set_cpus_allowed(current, oldmask); |
971 | schedule(); | ||
972 | |||
973 | return ret; | 967 | return ret; |
974 | } | 968 | } |
975 | 969 | ||
@@ -991,12 +985,11 @@ static int __init powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
991 | if (!check_supported_cpu(pol->cpu)) | 985 | if (!check_supported_cpu(pol->cpu)) |
992 | return -ENODEV; | 986 | return -ENODEV; |
993 | 987 | ||
994 | data = kmalloc(sizeof(struct powernow_k8_data), GFP_KERNEL); | 988 | data = kzalloc(sizeof(struct powernow_k8_data), GFP_KERNEL); |
995 | if (!data) { | 989 | if (!data) { |
996 | printk(KERN_ERR PFX "unable to alloc powernow_k8_data"); | 990 | printk(KERN_ERR PFX "unable to alloc powernow_k8_data"); |
997 | return -ENOMEM; | 991 | return -ENOMEM; |
998 | } | 992 | } |
999 | memset(data,0,sizeof(struct powernow_k8_data)); | ||
1000 | 993 | ||
1001 | data->cpu = pol->cpu; | 994 | data->cpu = pol->cpu; |
1002 | 995 | ||
@@ -1026,7 +1019,6 @@ static int __init powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
1026 | /* only run on specific CPU from here on */ | 1019 | /* only run on specific CPU from here on */ |
1027 | oldmask = current->cpus_allowed; | 1020 | oldmask = current->cpus_allowed; |
1028 | set_cpus_allowed(current, cpumask_of_cpu(pol->cpu)); | 1021 | set_cpus_allowed(current, cpumask_of_cpu(pol->cpu)); |
1029 | schedule(); | ||
1030 | 1022 | ||
1031 | if (smp_processor_id() != pol->cpu) { | 1023 | if (smp_processor_id() != pol->cpu) { |
1032 | printk(KERN_ERR "limiting to cpu %u failed\n", pol->cpu); | 1024 | printk(KERN_ERR "limiting to cpu %u failed\n", pol->cpu); |
@@ -1045,7 +1037,6 @@ static int __init powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
1045 | 1037 | ||
1046 | /* run on any CPU again */ | 1038 | /* run on any CPU again */ |
1047 | set_cpus_allowed(current, oldmask); | 1039 | set_cpus_allowed(current, oldmask); |
1048 | schedule(); | ||
1049 | 1040 | ||
1050 | pol->governor = CPUFREQ_DEFAULT_GOVERNOR; | 1041 | pol->governor = CPUFREQ_DEFAULT_GOVERNOR; |
1051 | pol->cpus = cpu_core_map[pol->cpu]; | 1042 | pol->cpus = cpu_core_map[pol->cpu]; |
@@ -1080,7 +1071,6 @@ static int __init powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
1080 | 1071 | ||
1081 | err_out: | 1072 | err_out: |
1082 | set_cpus_allowed(current, oldmask); | 1073 | set_cpus_allowed(current, oldmask); |
1083 | schedule(); | ||
1084 | powernow_k8_cpu_exit_acpi(data); | 1074 | powernow_k8_cpu_exit_acpi(data); |
1085 | 1075 | ||
1086 | kfree(data); | 1076 | kfree(data); |
@@ -1116,17 +1106,14 @@ static unsigned int powernowk8_get (unsigned int cpu) | |||
1116 | set_cpus_allowed(current, oldmask); | 1106 | set_cpus_allowed(current, oldmask); |
1117 | return 0; | 1107 | return 0; |
1118 | } | 1108 | } |
1119 | preempt_disable(); | 1109 | |
1120 | |||
1121 | if (query_current_values_with_pending_wait(data)) | 1110 | if (query_current_values_with_pending_wait(data)) |
1122 | goto out; | 1111 | goto out; |
1123 | 1112 | ||
1124 | khz = find_khz_freq_from_fid(data->currfid); | 1113 | khz = find_khz_freq_from_fid(data->currfid); |
1125 | 1114 | ||
1126 | out: | 1115 | out: |
1127 | preempt_enable_no_resched(); | ||
1128 | set_cpus_allowed(current, oldmask); | 1116 | set_cpus_allowed(current, oldmask); |
1129 | |||
1130 | return khz; | 1117 | return khz; |
1131 | } | 1118 | } |
1132 | 1119 | ||
diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c index 0ea010a7afb1..edb9873e27e3 100644 --- a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c +++ b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c | |||
@@ -423,12 +423,11 @@ static int centrino_cpu_init_acpi(struct cpufreq_policy *policy) | |||
423 | } | 423 | } |
424 | } | 424 | } |
425 | 425 | ||
426 | centrino_model[cpu] = kmalloc(sizeof(struct cpu_model), GFP_KERNEL); | 426 | centrino_model[cpu] = kzalloc(sizeof(struct cpu_model), GFP_KERNEL); |
427 | if (!centrino_model[cpu]) { | 427 | if (!centrino_model[cpu]) { |
428 | result = -ENOMEM; | 428 | result = -ENOMEM; |
429 | goto err_unreg; | 429 | goto err_unreg; |
430 | } | 430 | } |
431 | memset(centrino_model[cpu], 0, sizeof(struct cpu_model)); | ||
432 | 431 | ||
433 | centrino_model[cpu]->model_name=NULL; | 432 | centrino_model[cpu]->model_name=NULL; |
434 | centrino_model[cpu]->max_freq = p.states[0].core_frequency * 1000; | 433 | centrino_model[cpu]->max_freq = p.states[0].core_frequency * 1000; |
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 6c6121b85a54..25acf478c9e8 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c | |||
@@ -593,12 +593,11 @@ static int cpufreq_add_dev (struct sys_device * sys_dev) | |||
593 | goto module_out; | 593 | goto module_out; |
594 | } | 594 | } |
595 | 595 | ||
596 | policy = kmalloc(sizeof(struct cpufreq_policy), GFP_KERNEL); | 596 | policy = kzalloc(sizeof(struct cpufreq_policy), GFP_KERNEL); |
597 | if (!policy) { | 597 | if (!policy) { |
598 | ret = -ENOMEM; | 598 | ret = -ENOMEM; |
599 | goto nomem_out; | 599 | goto nomem_out; |
600 | } | 600 | } |
601 | memset(policy, 0, sizeof(struct cpufreq_policy)); | ||
602 | 601 | ||
603 | policy->cpu = cpu; | 602 | policy->cpu = cpu; |
604 | policy->cpus = cpumask_of_cpu(cpu); | 603 | policy->cpus = cpumask_of_cpu(cpu); |
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c index c1fc9c62bb51..17741111246b 100644 --- a/drivers/cpufreq/cpufreq_ondemand.c +++ b/drivers/cpufreq/cpufreq_ondemand.c | |||
@@ -48,7 +48,10 @@ | |||
48 | * All times here are in uS. | 48 | * All times here are in uS. |
49 | */ | 49 | */ |
50 | static unsigned int def_sampling_rate; | 50 | static unsigned int def_sampling_rate; |
51 | #define MIN_SAMPLING_RATE (def_sampling_rate / 2) | 51 | #define MIN_SAMPLING_RATE_RATIO (2) |
52 | /* for correct statistics, we need at least 10 ticks between each measure */ | ||
53 | #define MIN_STAT_SAMPLING_RATE (MIN_SAMPLING_RATE_RATIO * jiffies_to_usecs(10)) | ||
54 | #define MIN_SAMPLING_RATE (def_sampling_rate / MIN_SAMPLING_RATE_RATIO) | ||
52 | #define MAX_SAMPLING_RATE (500 * def_sampling_rate) | 55 | #define MAX_SAMPLING_RATE (500 * def_sampling_rate) |
53 | #define DEF_SAMPLING_RATE_LATENCY_MULTIPLIER (1000) | 56 | #define DEF_SAMPLING_RATE_LATENCY_MULTIPLIER (1000) |
54 | #define DEF_SAMPLING_DOWN_FACTOR (1) | 57 | #define DEF_SAMPLING_DOWN_FACTOR (1) |
@@ -416,13 +419,16 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | |||
416 | if (dbs_enable == 1) { | 419 | if (dbs_enable == 1) { |
417 | unsigned int latency; | 420 | unsigned int latency; |
418 | /* policy latency is in nS. Convert it to uS first */ | 421 | /* policy latency is in nS. Convert it to uS first */ |
422 | latency = policy->cpuinfo.transition_latency / 1000; | ||
423 | if (latency == 0) | ||
424 | latency = 1; | ||
419 | 425 | ||
420 | latency = policy->cpuinfo.transition_latency; | 426 | def_sampling_rate = latency * |
421 | if (latency < 1000) | ||
422 | latency = 1000; | ||
423 | |||
424 | def_sampling_rate = (latency / 1000) * | ||
425 | DEF_SAMPLING_RATE_LATENCY_MULTIPLIER; | 427 | DEF_SAMPLING_RATE_LATENCY_MULTIPLIER; |
428 | |||
429 | if (def_sampling_rate < MIN_STAT_SAMPLING_RATE) | ||
430 | def_sampling_rate = MIN_STAT_SAMPLING_RATE; | ||
431 | |||
426 | dbs_tuners_ins.sampling_rate = def_sampling_rate; | 432 | dbs_tuners_ins.sampling_rate = def_sampling_rate; |
427 | dbs_tuners_ins.ignore_nice = 0; | 433 | dbs_tuners_ins.ignore_nice = 0; |
428 | 434 | ||
diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c index 3597f25d5efa..0bddb8e694d9 100644 --- a/drivers/cpufreq/cpufreq_stats.c +++ b/drivers/cpufreq/cpufreq_stats.c | |||
@@ -193,11 +193,15 @@ cpufreq_stats_create_table (struct cpufreq_policy *policy, | |||
193 | unsigned int cpu = policy->cpu; | 193 | unsigned int cpu = policy->cpu; |
194 | if (cpufreq_stats_table[cpu]) | 194 | if (cpufreq_stats_table[cpu]) |
195 | return -EBUSY; | 195 | return -EBUSY; |
196 | if ((stat = kmalloc(sizeof(struct cpufreq_stats), GFP_KERNEL)) == NULL) | 196 | if ((stat = kzalloc(sizeof(struct cpufreq_stats), GFP_KERNEL)) == NULL) |
197 | return -ENOMEM; | 197 | return -ENOMEM; |
198 | memset(stat, 0, sizeof (struct cpufreq_stats)); | ||
199 | 198 | ||
200 | data = cpufreq_cpu_get(cpu); | 199 | data = cpufreq_cpu_get(cpu); |
200 | if (data == NULL) { | ||
201 | ret = -EINVAL; | ||
202 | goto error_get_fail; | ||
203 | } | ||
204 | |||
201 | if ((ret = sysfs_create_group(&data->kobj, &stats_attr_group))) | 205 | if ((ret = sysfs_create_group(&data->kobj, &stats_attr_group))) |
202 | goto error_out; | 206 | goto error_out; |
203 | 207 | ||
@@ -217,12 +221,11 @@ cpufreq_stats_create_table (struct cpufreq_policy *policy, | |||
217 | alloc_size += count * count * sizeof(int); | 221 | alloc_size += count * count * sizeof(int); |
218 | #endif | 222 | #endif |
219 | stat->max_state = count; | 223 | stat->max_state = count; |
220 | stat->time_in_state = kmalloc(alloc_size, GFP_KERNEL); | 224 | stat->time_in_state = kzalloc(alloc_size, GFP_KERNEL); |
221 | if (!stat->time_in_state) { | 225 | if (!stat->time_in_state) { |
222 | ret = -ENOMEM; | 226 | ret = -ENOMEM; |
223 | goto error_out; | 227 | goto error_out; |
224 | } | 228 | } |
225 | memset(stat->time_in_state, 0, alloc_size); | ||
226 | stat->freq_table = (unsigned int *)(stat->time_in_state + count); | 229 | stat->freq_table = (unsigned int *)(stat->time_in_state + count); |
227 | 230 | ||
228 | #ifdef CONFIG_CPU_FREQ_STAT_DETAILS | 231 | #ifdef CONFIG_CPU_FREQ_STAT_DETAILS |
@@ -245,6 +248,7 @@ cpufreq_stats_create_table (struct cpufreq_policy *policy, | |||
245 | return 0; | 248 | return 0; |
246 | error_out: | 249 | error_out: |
247 | cpufreq_cpu_put(data); | 250 | cpufreq_cpu_put(data); |
251 | error_get_fail: | ||
248 | kfree(stat); | 252 | kfree(stat); |
249 | cpufreq_stats_table[cpu] = NULL; | 253 | cpufreq_stats_table[cpu] = NULL; |
250 | return ret; | 254 | return ret; |