[lkml]   [2010]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[30/68] percpu: fix pcpu_last_unit_cpu
    2.6.32-stable review patch.  If anyone has any objections, please let us know.


    From: Tejun Heo <>

    commit 46b30ea9bc3698bc1d1e6fd726c9601d46fa0a91 upstream.

    pcpu_first/last_unit_cpu are used to track which cpu has the first and
    last units assigned. This in turn is used to determine the span of a
    chunk for man/unmap cache flushes and whether an address belongs to
    the first chunk or not in per_cpu_ptr_to_phys().

    When the number of possible CPUs isn't power of two, a chunk may
    contain unassigned units towards the end of a chunk. The logic to
    determine pcpu_last_unit_cpu was incorrect when there was an unused
    unit at the end of a chunk. It failed to ignore the unused unit and
    assigned the unused marker NR_CPUS to pcpu_last_unit_cpu.

    This was discovered through kdump failure which was caused by
    malfunctioning per_cpu_ptr_to_phys() on a kvm setup with 50 possible
    CPUs by CAI Qian.

    Signed-off-by: Tejun Heo <>
    Reported-by: CAI Qian <>
    Signed-off-by: Greg Kroah-Hartman <>

    mm/percpu.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/mm/percpu.c
    +++ b/mm/percpu.c
    @@ -1702,9 +1702,9 @@ int __init pcpu_setup_first_chunk(const

    if (pcpu_first_unit_cpu == NR_CPUS)
    pcpu_first_unit_cpu = cpu;
    + pcpu_last_unit_cpu = cpu;
    - pcpu_last_unit_cpu = cpu;
    pcpu_nr_units = unit;


     \ /
      Last update: 2010-09-27 20:09    [W:0.021 / U:3.248 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site