Skip to content

Commit

Permalink
memblock: add assertion for zero allocation alignment
Browse files Browse the repository at this point in the history
This came to light when calling memblock allocator from arc port (for
copying flattended DT).  If a "0" alignment is passed, the allocator
round_up() call incorrectly rounds up the size to 0.

round_up(num, alignto) => ((num - 1) | (alignto -1)) + 1

While the obvious allocation failure causes kernel to panic, it is better
to warn the caller to fix the code.

Tejun suggested that instead of BUG_ON(!align) - which might be
ineffective due to pending console init and such, it is better to WARN_ON,
and continue the boot with a reasonable default align.

Caller passing @SiZe need not be handled similarly as the subsequent
panic will indicate that anyhow.

Signed-off-by: Vineet Gupta <[email protected]>
Cc: Yinghai Lu <[email protected]>
Cc: Wanpeng Li <[email protected]>
Cc: Ingo Molnar <[email protected]>
Acked-by: Tejun Heo <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Vineet Gupta authored and torvalds committed Apr 29, 2013
1 parent 369a713 commit 94f3d3a
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions mm/memblock.c
Original file line number Diff line number Diff line change
Expand Up @@ -771,6 +771,9 @@ static phys_addr_t __init memblock_alloc_base_nid(phys_addr_t size,
{
phys_addr_t found;

if (WARN_ON(!align))
align = __alignof__(long long);

/* align @size to avoid excessive fragmentation on reserved array */
size = round_up(size, align);

Expand Down

0 comments on commit 94f3d3a

Please sign in to comment.