[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110614212827.GH7417@yumi.tdiedrich.de>
Date: Tue, 14 Jun 2011 23:28:27 +0200
From: Tobias Diedrich <ranma+xen@...edrich.de>
To: Konrad Rzeszutek Wilk <konrad.wilk@...cle.com>
Cc: xen-users@...ts.xensource.com, linux-kernel@...r.kernel.org
Subject: 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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists