mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
mwait-idle: allow sparse sub-state numbering, for Bay Trail
Like acpi_idle, mwait-idle compared sub-state numbers to the number of supported sub-states -- discarding sub-states numbers that were numbered >= the number of states. But some Bay Trail SOCs use sparse sub-state numbers, so we can't make such a comparison if we are going to access those states. So now we simply check that _some_ sub-states are supported for the given state, and assume that the sub-state number in our driver is valid. In practice, the driver is correct, and even if it were not, the hardware clips invalid sub-state requests to valid ones. No entries in the driver require this change, but Bay Trail will need it. Signed-off-by: Len Brown <len.brown@intel.com> Signed-off-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
c66a35b837
commit
4d9dfc3803
1 file changed
+4
-5
@@ -555,23 +555,22 @@ static int mwait_idle_cpu_init(struct notifier_block *nfb,
|
||||
dev->count = 1;
|
||||
|
||||
for (cstate = 0; cpuidle_state_table[cstate].target_residency; ++cstate) {
|
||||
unsigned int num_substates, hint, state, substate;
|
||||
unsigned int num_substates, hint, state;
|
||||
struct acpi_processor_cx *cx;
|
||||
|
||||
hint = flg2MWAIT(cpuidle_state_table[cstate].flags);
|
||||
state = MWAIT_HINT2CSTATE(hint) + 1;
|
||||
substate = MWAIT_HINT2SUBSTATE(hint);
|
||||
|
||||
if (state > max_cstate) {
|
||||
printk(PREFIX "max C-state %u reached\n", max_cstate);
|
||||
break;
|
||||
}
|
||||
|
||||
/* Does the state exist in CPUID.MWAIT? */
|
||||
/* Number of sub-states for this state in CPUID.MWAIT. */
|
||||
num_substates = (mwait_substates >> (state * 4))
|
||||
& MWAIT_SUBSTATE_MASK;
|
||||
/* if sub-state in table is not enumerated by CPUID */
|
||||
if (substate >= num_substates)
|
||||
/* If NO sub-states for this state in CPUID, skip it. */
|
||||
if (num_substates == 0)
|
||||
continue;
|
||||
|
||||
if (dev->count >= ACPI_PROCESSOR_MAX_POWER) {
|
||||
|
||||