• Jinyang He's avatar
    MIPS: Fix unable to reserve memory for Crash kernel · b1ce9716
    Jinyang He authored
    Use 0 as the align parameter in memblock_find_in_range() is
    incorrect when we reserve memory for Crash kernel.
    
    The environment as follows:
    [    0.000000] MIPS: machine is loongson,loongson64c-4core-rs780e
    ...
    [    1.951016]     crashkernel=64M@128M
    
    The warning as follows:
    [    0.000000] Invalid memory region reserved for crash kernel
    
    And the iomem as follows:
    00200000-0effffff : System RAM
      04000000-0484009f : Kernel code
      048400a0-04ad7fff : Kernel data
      04b40000-05c4c6bf : Kernel bss
    1a000000-1bffffff : pci@1a000000
    ...
    
    The align parameter may be finally used by round_down() or round_up().
    Like the following call tree:
    
    mips-next: mm/memblock.c
    
    memblock_find_in_range
    └── memblock_find_in_range_node
        ├── __memblock_find_range_bottom_up
        │   └── round_up
        └── __memblock_find_range_top_down
            └── round_down
    \#define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
    \#define round_down(x, y) ((x) & ~__round_mask(x, y))
    \#define __round_mask(x, y) ((__typeof__(x))((y)-1))
    
    The round_down(or round_up)'s second parameter must be a power of 2.
    If the second parameter is 0, it both will return 0.
    
    Use 1 as the parameter to fix the bug and the iomem as follows:
    00200000-0effffff : System RAM
      04000000-0484009f : Kernel code
      048400a0-04ad7fff : Kernel data
      04b40000-05c4c6bf : Kernel bss
      08000000-0bffffff : Crash kernel
    1a000000-1bffffff : pci@1a000000
    ...
    Signed-off-by: default avatarJinyang He <hejinyang@loongson.cn>
    Reviewed-by: default avatarJiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: default avatarThomas Bogendoerfer <tsbogend@alpha.franken.de>
    b1ce9716
setup.c 21.4 KB