static void cpufreq_allstats_create(unsigned int cpu) { int i , j = 0; size_t alloc_size; unsigned int count = 0; struct cpufreq_frequency_table *table = cpufreq_frequency_get_table(cpu); struct all_cpufreq_stats *all_stat; bool sort_needed = false; if (!table) return; for (i = 0; table[i].frequency != CPUFREQ_TABLE_END; i++) { unsigned int freq = table[i].frequency; if (freq == CPUFREQ_ENTRY_INVALID) continue; count++; } all_stat = kzalloc(sizeof(struct all_cpufreq_stats), GFP_KERNEL); if (!all_stat) { pr_warn("Cannot allocate memory for cpufreq stats\n"); return; } /*Allocate memory for freq table per cpu as well as clockticks per freq*/ alloc_size = count * sizeof(int) + count * sizeof(cputime64_t); all_stat->time_in_state = kzalloc(alloc_size, GFP_KERNEL); if (!all_stat->time_in_state) { pr_warn("Cannot allocate memory for cpufreq time_in_state\n"); kfree(all_stat); all_stat = NULL; return; } all_stat->freq_table = (unsigned int *) (all_stat->time_in_state + count); spin_lock(&cpufreq_stats_lock); for (i = 0; table[i].frequency != CPUFREQ_TABLE_END; i++) { unsigned int freq = table[i].frequency; if (freq == CPUFREQ_ENTRY_INVALID) continue; all_stat->freq_table[j++] = freq; if (all_freq_table && !check_all_freq_table(freq)) { add_all_freq_table(freq); sort_needed = true; } if (cpu == NR_CLUST0_CPUS) add_bL_freq_table(freq); } if (sort_needed) sort(all_freq_table->freq_table, all_freq_table->table_size, sizeof(unsigned int), &compare_for_sort, NULL); all_stat->state_num = j; per_cpu(all_cpufreq_stats, cpu) = all_stat; spin_unlock(&cpufreq_stats_lock); }
static void cpufreq_allstats_create(unsigned int cpu) { int i , j = 0; unsigned int alloc_size, count = 0; struct cpufreq_frequency_table *table = cpufreq_frequency_get_table(cpu); struct all_cpufreq_stats *all_stat; if (!table) return; for (i = 0; table[i].frequency != CPUFREQ_TABLE_END; i++) { unsigned int freq = table[i].frequency; if (freq == CPUFREQ_ENTRY_INVALID) continue; count++; } all_stat = kzalloc(sizeof(struct all_cpufreq_stats), GFP_KERNEL); if (!all_stat) { pr_warn("Cannot allocate memory for cpufreq stats\n"); return; } /*Allocate memory for freq table per cpu as well as clockticks per freq*/ alloc_size = count * sizeof(int) + count * sizeof(cputime64_t); all_stat->time_in_state = kzalloc(alloc_size, GFP_KERNEL); if (!all_stat->time_in_state) { pr_warn("Cannot allocate memory for cpufreq time_in_state\n"); kfree(all_stat); all_stat = NULL; return; } all_stat->freq_table = (unsigned int *) (all_stat->time_in_state + count); for (i = 0; table[i].frequency != CPUFREQ_TABLE_END; i++) { unsigned int freq = table[i].frequency; if (freq == CPUFREQ_ENTRY_INVALID) continue; all_stat->freq_table[j++] = freq; if (all_freq_table && !check_all_freq_table(freq)) add_all_freq_table(freq); } all_stat->state_num = j; per_cpu(all_cpufreq_stats, cpu) = all_stat; }