• B
    ACPI / cpuidle: fix max idle state handling with hotplug CPU support · 7ca380f6
    Bartlomiej Zolnierkiewicz 提交于
    acpi_processor_hotplug() calls acpi_processor_setup_cpuidle_cx()
    without calling acpi_processor_setup_cpuidle_states() first so it
    is possible that dev->state_count becomes different from
    drv->state_count (in case of SMP system with unsupported C2/C3
    states + enabled CPU hotplug and num_online_cpus() becoming > 1).
    
    The driver code assumes that cpuidle core will handle such cases
    but currently this is untrue (dev->state_count is used only for
    handling cpuidle state sysfs entries and drv->state_count is used
    for all other cases) and will not be fixed in the future as
    dev->state_count is planned to be removed.
    
    Fix the issue by checking for the max supported idle state in
    C2/C3 state's ->enter handler (acpi_idle_enter_simple() for C2/C3
    and acpi_idle_enter_bm() for C3 + bm_check flag set) and setting
    the C1 state (instead of higher states) when needed.
    
    Also remove no longer needed max idle state checks from
    acpi_processor_setup_cpuidle_[states,cx]().
    Signed-off-by: NBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
    Signed-off-by: NKyungmin Park <kyungmin.park@samsung.com>
    Cc: Len Brown <lenb@kernel.org>
    Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
    7ca380f6
processor_idle.c 30.8 KB