• Waiman Long's avatar
    driver/base/cpu: Retry online operation if -EBUSY · 1fd7ab3f
    Waiman Long authored
    Booting the kernel with "maxcpus=1" is a common technique for CPU
    partitioning and isolation. It delays the CPU bringup process until
    when the bootup scripts are ready to bring CPUs online by writing 1 to
    /sys/device/system/cpu/cpu<X>/online. However, it was found that not
    all the CPUs were online after bootup. The collection of offline CPUs
    are different after every reboot.
    
    Further investigation reveals that some "online" write operations
    fail with an -EBUSY error. This error is returned when CPU hotplug is
    temporiarly disabled when cpu_hotplug_disable() is called.
    
    During bootup, the main caller of cpu_hotplug_disable() is
    pci_call_probe() for PCI device initialization. By measuring the times
    spent with cpu_hotplug_disabled set in a typical 2-socket server, most
    of them last less than 10ms.  However, there are a few that can last
    hundreds of ms. Note that the cpu_hotplug_disabled period of different
    devices can overlap leading to longer cpu_hotplug_disabled hold time.
    
    Since the CPU hotplug disable condition is transient and it is not
    that easy to modify all the existing bootup scripts to handle this
    condition, the kernel can help by retrying the online operation when
    an -EBUSY error is returned. This patch retries the online operation
    in cpu_subsys_online() when an -EBUSY error is returned for up to 5
    times after an exponentially increasing delay that can last a total of
    at least 620ms of waiting time by calling msleep().
    
    With this patch in place, booting up the patched kernel with "maxcpus=1"
    does not leave any CPU in an offline state in 10 reboot attempts.
    Reported-by: default avatarVishal Agrawal <vagrawal@redhat.com>
    Signed-off-by: default avatarWaiman Long <longman@redhat.com>
    Link: https://lore.kernel.org/r/20230724143826.3996163-1-longman@redhat.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    1fd7ab3f
cpu.c 16 KB