• V
    percpu: Fix kdump failure if booted with percpu_alloc=page · 3b034b0d
    Vivek Goyal 提交于
    o kdump functionality reserves a per cpu area at boot time and exports the
      physical address of that area to user space through sys interface. This
      area stores some dump related information like cpu register states etc
      at the time of crash.
    
    o We were assuming that per cpu area always come from linearly mapped meory
      region and using __pa() to determine physical address.
      With percpu_alloc=page, per cpu area can come from vmalloc region also and
      __pa() breaks.
    
    o This patch implments a new function to convert per cpu address to
      physical address.
    
    Before the patch, crash_notes addresses looked as follows.
    
    cpu0 60fffff49800
    cpu1 60fffff60800
    cpu2 60fffff77800
    
    These are bogus phsyical addresses.
    
    After the patch, address are following.
    
    cpu0 13eb44000
    cpu1 13eb43000
    cpu2 13eb42000
    cpu3 13eb41000
    
    These look fine. I got 4G of memory and /proc/iomem tell me following.
    
    100000000-13fffffff : System RAM
    
    tj: * added missing asm/io.h include reported by Stephen Rothwell
        * repositioned per_cpu_ptr_phys() in percpu.c and added comment.
    Signed-off-by: NVivek Goyal <vgoyal@redhat.com>
    Signed-off-by: NTejun Heo <tj@kernel.org>
    Cc: Stephen Rothwell <sfr@canb.auug.org.au>
    3b034b0d
percpu.h 6.7 KB