mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
cpufreq: don't leave stale statistics pointer
Error paths of cpufreq_statistic_init() correctly free the base structure pointer, but the per-CPU variable would still hold it, mis- guiding e.g. cpufreq_statistic_update(). Defer installing of the pointer there until the structure was fully populated. Fixes:755af07edb("x86/cpufreq: don't use static array for large per-CPU data structures") Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com> master commit:a1ce987411master date: 2025-04-30 08:47:49 +0200
This commit is contained in:
1 parent
68506161ef
commit
b1eeea44cd
1 file changed
+2
-1
@@ -113,7 +113,6 @@ int cpufreq_statistic_init(unsigned int cpu)
|
||||
spin_unlock(cpufreq_statistic_lock);
|
||||
return -ENOMEM;
|
||||
}
|
||||
per_cpu(cpufreq_statistic_data, cpu) = pxpt;
|
||||
|
||||
pxpt->u.trans_pt = xzalloc_array(uint64_t, count * count);
|
||||
if (!pxpt->u.trans_pt) {
|
||||
@@ -139,6 +138,8 @@ int cpufreq_statistic_init(unsigned int cpu)
|
||||
pxpt->prev_state_wall = NOW();
|
||||
pxpt->prev_idle_wall = get_cpu_idle_time(cpu);
|
||||
|
||||
per_cpu(cpufreq_statistic_data, cpu) = pxpt;
|
||||
|
||||
spin_unlock(cpufreq_statistic_lock);
|
||||
|
||||
return 0;
|
||||
|
||||