[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-users] Re: 3.0.0-rc2: Xen: powernow-k8: Kernel panic - not syncing: Attempted to kill init!
Konrad Rzeszutek Wilk wrote: > On Tue, Jun 14, 2011 at 03:46:34PM +0200, Tobias Diedrich wrote: > > [ 5.740826] powernow-k8: fid 0x2 (1000 MHz), vid 0x12 > > [ 5.740941] powernow-k8: fid 0xa (1800 MHz), vid 0xa > > [ 5.741057] powernow-k8: fid 0xc (2000 MHz), vid 0x8 > > [ 5.741170] powernow-k8: fid 0xe (2200 MHz), vid 0x8 > > [ 5.741304] cpufreq_stats_create_table: policy->cur is 800000 > > [ 5.741475] last_index set to -1 in cpufreq_stats_create_table! > > > > I think policy->cur used here probably set in powernowk8_cpu_init. > > Yup, and there is not much that can be done there. Lets try this patch Thanks, this works fine for suppressing the crash. > diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c > b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c > index 2368e38..7e4a664 100644 > --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c > +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c > @@ -1079,8 +1079,10 @@ static int transition_frequency_fidvid(struct > powernow_k8_data *data, > } > > res = transition_fid_vid(data, fid, vid); > - freqs.new = find_khz_freq_from_fid(data->currfid); > + if (res) > + return res; > > + freqs.new = find_khz_freq_from_fid(data->currfid); > for_each_cpu(i, data->available_cores) { > freqs.cpu = i; > cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); > @@ -1112,6 +1114,9 @@ static int transition_frequency_pstate(struct > powernow_k8_data *data, > } > > res = transition_pstate(data, pstate); > + if (res) > + return res; > + > freqs.new = find_khz_freq_from_pstate(data->powernow_table, pstate); > > for_each_cpu(i, data->available_cores) { > diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c > index 4f1b8de..0ecb1e2 100644 > --- a/drivers/cpufreq/cpufreq_stats.c > +++ b/drivers/cpufreq/cpufreq_stats.c > @@ -298,11 +298,13 @@ static int cpufreq_stat_notifier_trans(struct > notifier_block *nb, > old_index = stat->last_index; > new_index = freq_table_get_index(stat, freq->new); > > - cpufreq_stats_update(freq->cpu); > - if (old_index == new_index) > + /* We can't do stat->time_in_state[-1]= .. */ > + if (old_index == -1 || new_index == -1) > return 0; > > - if (old_index == -1 || new_index == -1) > + cpufreq_stats_update(freq->cpu); > + > + if (old_index == new_index) > return 0; > > spin_lock(&cpufreq_stats_lock); -- Tobias PGP: http://8ef7ddba.uguu.de _______________________________________________ Xen-users mailing list Xen-users@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-users
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |