diff options
| -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; |
