• Leo Yan's avatar
    ARM: cpuidle: Correct driver unregistration if init fails · 0f87855d
    Leo Yan authored
    If cpuidle init fails, the code misses to unregister the driver for
    current CPU. Furthermore, we also need to rollback to cancel all
    previous CPUs registration; but the code retrieves driver handler by
    using function cpuidle_get_driver(), this function returns back
    current CPU driver handler but not previous CPU's handler, which leads
    to the failure handling code cannot unregister previous CPUs driver.
    
    This commit fixes two mentioned issues, it adds error handling path
    'goto out_unregister_drv' for current CPU driver unregistration; and
    it is to replace cpuidle_get_driver() with cpuidle_get_cpu_driver(),
    the later function can retrieve driver handler for previous CPUs
    according to the CPU device handler so can unregister the driver
    properly.
    
    This patch also adds extra error handling paths 'goto out_kfree_dev'
    and 'goto out_kfree_drv' and adjusts the freeing sentences for previous
    CPUs; so make the code more readable for freeing 'dev' and 'drv'
    structures.
    Suggested-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
    Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
    Fixes: d50a7d8a (ARM: cpuidle: Support asymmetric idle definition)
    Acked-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    0f87855d
cpuidle-arm.c 4.08 KB