lkml.org 
[lkml]   [2016]   [Nov]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 5/6] hwmon/coretemp: Use proper error codes in cpu online callback
    The cpu online callback returns success unconditionally even when the
    device has no support, micro code mismatches or device allocation fails.
    Only if CPU_HOTPLUG is disabled, the init function checks whether the
    device list is empty and removes the driver.

    This does not make sense. If CPU HOTPLUG is enabled then there is no point
    to keep the driver around when it failed to initialize on the already
    online cpus. The chance that not yet online CPUs will provide a functional
    interface later is very close to zero.

    Add proper error return codes, so the setup of the cpu hotplug states fails
    when the device cannot be initialized and remove all the magic cruft.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    ---
    drivers/hwmon/coretemp.c | 24 +++++-------------------
    1 file changed, 5 insertions(+), 19 deletions(-)

    --- a/drivers/hwmon/coretemp.c
    +++ b/drivers/hwmon/coretemp.c
    @@ -662,12 +662,12 @@ static int coretemp_cpu_online(unsigned
    * without thermal sensors will be filtered out.
    */
    if (!cpu_has(c, X86_FEATURE_DTHERM))
    - return 0;
    + return -ENODEV;

    if (!pdev) {
    /* Check the microcode version of the CPU */
    if (chk_ucode_version(cpu))
    - return 0;
    + return -EINVAL;

    /*
    * Alright, we have DTS support.
    @@ -677,7 +677,7 @@ static int coretemp_cpu_online(unsigned
    */
    err = coretemp_device_add(cpu);
    if (err)
    - return 0;
    + return err;

    pdev = coretemp_get_pdev(cpu);
    /*
    @@ -782,28 +782,14 @@ static int __init coretemp_init(void)
    if (err)
    return err;

    - get_online_cpus();
    err = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "hwmon/coretemp:online",
    coretemp_cpu_online, coretemp_cpu_offline);
    if (err < 0)
    - goto exit_driver_unreg;
    + goto outdrv;
    coretemp_hp_online = err;
    -
    -#ifndef CONFIG_HOTPLUG_CPU
    - if (list_empty(&pdev_list)) {
    - err = -ENODEV;
    - goto exit_hp_unreg;
    - }
    -#endif
    - put_online_cpus();
    return 0;

    -#ifndef CONFIG_HOTPLUG_CPU
    -exit_hp_unreg:
    - cpuhp_remove_state(coretemp_hp_online);
    - put_online_cpus();
    -#endif
    -exit_driver_unreg:
    +outdrv:
    platform_driver_unregister(&coretemp_driver);
    return err;
    }

    \
     
     \ /
      Last update: 2016-11-22 18:45    [W:2.474 / U:0.408 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site