2007-09-17 12:08:06 +08:00
|
|
|
#include <linux/types.h>
|
|
|
|
#include <linux/init.h>
|
|
|
|
#include <linux/slab.h>
|
|
|
|
#include <linux/bootmem.h>
|
2007-10-02 11:37:53 +08:00
|
|
|
#include <linux/string.h>
|
2012-03-29 01:30:02 +08:00
|
|
|
#include <asm/setup.h>
|
2007-09-17 12:08:06 +08:00
|
|
|
|
|
|
|
|
2016-08-03 05:03:33 +08:00
|
|
|
void * __ref zalloc_maybe_bootmem(size_t size, gfp_t mask)
|
2007-10-02 11:37:53 +08:00
|
|
|
{
|
|
|
|
void *p;
|
|
|
|
|
2015-03-30 11:10:37 +08:00
|
|
|
if (slab_is_available())
|
2007-10-02 11:37:53 +08:00
|
|
|
p = kzalloc(size, mask);
|
|
|
|
else {
|
powerpc: Remove more traces of bootmem
Although we are now selecting NO_BOOTMEM, we still have some traces of
bootmem lying around. That is because even with NO_BOOTMEM there is
still a shim that converts bootmem calls into memblock calls, but
ultimately we want to remove all traces of bootmem.
Most of the patch is conversions from alloc_bootmem() to
memblock_virt_alloc(). In general a call such as:
p = (struct foo *)alloc_bootmem(x);
Becomes:
p = memblock_virt_alloc(x, 0);
We don't need the cast because memblock_virt_alloc() returns a void *.
The alignment value of zero tells memblock to use the default alignment,
which is SMP_CACHE_BYTES, the same value alloc_bootmem() uses.
We remove a number of NULL checks on the result of
memblock_virt_alloc(). That is because memblock_virt_alloc() will panic
if it can't allocate, in exactly the same way as alloc_bootmem(), so the
NULL checks are and always have been redundant.
The memory returned by memblock_virt_alloc() is already zeroed, so we
remove several memsets of the result of memblock_virt_alloc().
Finally we convert a few uses of __alloc_bootmem(x, y, MAX_DMA_ADDRESS)
to just plain memblock_virt_alloc(). We don't use memblock_alloc_base()
because MAX_DMA_ADDRESS is ~0ul on powerpc, so limiting the allocation
to that is pointless, 16XB ought to be enough for anyone.
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2014-11-18 13:47:35 +08:00
|
|
|
p = memblock_virt_alloc(size, 0);
|
2007-10-02 11:37:53 +08:00
|
|
|
}
|
|
|
|
return p;
|
|
|
|
}
|