It’s not just random, it simply does not even work. Because they set this:
+/*Preferred Core featue is supported*/
+static bool prefcore = true;
And later in the code they do the if condition wrong:
+ if (prefcore)
+ WRITE_ONCE(cpudata->highest_perf, AMD_PSTATE_PREFCORE_THRESHOLD);
+ else
+ WRITE_ONCE(cpudata->highest_perf, AMD_CPPC_HIGHEST_PERF(cap1));
if should look like this:
+ if (prefcore)
+ WRITE_ONCE(cpudata->highest_perf, AMD_CPPC_HIGHEST_PERF(cap1));
+ else
+ WRITE_ONCE(cpudata->highest_perf, AMD_PSTATE_PREFCORE_THRESHOLD);
There is probably even more wrong, looking at the code quality, but this at least makes the preferred core work.
I don’t know if it’s random, the CPU scheduler still decides what thread to use. It will have its own semantics, but I don’t know on what those are based.