• Lai Jiangshan's avatar
    x86/proc: fix /proc/cpuinfo cpu offline bug · bc8bcc79
    Lai Jiangshan authored
    Impact: fix missing CPUs in /proc/cpuinfo after CPU hotunplug/hotreplug
    
    In my test, I found that if a cpu has been offline,
    the next cpus may not be shown in the /proc/cpuinfo.
    
    if one read() cannot consume the whole /proc/cpuinfo,
    c_start() will be called again in the next read() calls.
    And *pos has been increased by 1 by the caller(seq_read()).
    if this time the cpu#*pos is offline, c_start() will return
    NULL, and the next cpus can not be shown.
    
    this fix use next_cpu_nr(*pos - 1, cpu_online_map) to
    search the next unshown cpu.
    
    the most easy way to reproduce this bug:
    1) offline cpu#1             (cpu#0 is online)
    2) dd ibs=2 if=/proc/cpuinfo
       the result is that only cpu#0 is shown.
       cpu#2 and cpu#3 .... cannot be shown in /proc/cpuinfo
       it's bug.
    Signed-off-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    bc8bcc79
proc.c 4.67 KB