On Tue, Sep 05, 2023 at 09:51:14AM +0800, Meng Li wrote: > +static void amd_pstate_update_highest_perf(unsigned int cpu) > +{ > + struct cpufreq_policy *policy; > + struct amd_cpudata *cpudata; > + u32 prev_high = 0, cur_high = 0; > + u64 highest_perf; > + int ret; > + > + if (!prefcore) > + return; > + > + ret = amd_pstate_get_highest_perf(cpu, &highest_perf); > + if (ret) > + return; > + > + policy = cpufreq_cpu_get(cpu); > + cpudata = policy->driver_data; > + cur_high = highest_perf; > + prev_high = READ_ONCE(cpudata->cppc_highest_perf); > + > + if (prev_high != cur_high) { > + WRITE_ONCE(cpudata->cppc_highest_perf, cur_high); > + sched_set_itmt_core_prio(cur_high, cpu); I just noticed, your cur_high is explicitly 'u32', but sched_set_itmt_core_prio() and the rest of the scheduler use 'int' (aka s32). If you somehow get that top bit set things might not work out as expected. Please double check. > + } > + > + cpufreq_cpu_put(policy); > +}