x86-32, numa: Update remap allocator comments
Now that remap allocator is cleaned up, update comments such that they are in docbook function description format and reflect the actual implementation. Signed-off-by: Tejun Heo <tj@kernel.org> Link: http://lkml.kernel.org/r/1301955840-7246-15-git-send-email-tj@kernel.org Acked-by: Yinghai Lu <yinghai@kernel.org> Cc: David Rientjes <rientjes@google.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
parent
198bd06bbf
commit
993ba1585c
1 changed files with 42 additions and 14 deletions
|
@ -176,17 +176,31 @@ static void __init allocate_pgdat(int nid)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In the DISCONTIGMEM and SPARSEMEM memory model, a portion of the kernel
|
* Remap memory allocator
|
||||||
* virtual address space (KVA) is reserved and portions of nodes are mapped
|
|
||||||
* using it. This is to allow node-local memory to be allocated for
|
|
||||||
* structures that would normally require ZONE_NORMAL. The memory is
|
|
||||||
* allocated with alloc_remap() and callers should be prepared to allocate
|
|
||||||
* from the bootmem allocator instead.
|
|
||||||
*/
|
*/
|
||||||
static unsigned long node_remap_start_pfn[MAX_NUMNODES];
|
static unsigned long node_remap_start_pfn[MAX_NUMNODES];
|
||||||
static void *node_remap_end_vaddr[MAX_NUMNODES];
|
static void *node_remap_end_vaddr[MAX_NUMNODES];
|
||||||
static void *node_remap_alloc_vaddr[MAX_NUMNODES];
|
static void *node_remap_alloc_vaddr[MAX_NUMNODES];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* alloc_remap - Allocate remapped memory
|
||||||
|
* @nid: NUMA node to allocate memory from
|
||||||
|
* @size: The size of allocation
|
||||||
|
*
|
||||||
|
* Allocate @size bytes from the remap area of NUMA node @nid. The
|
||||||
|
* size of the remap area is predetermined by init_alloc_remap() and
|
||||||
|
* only the callers considered there should call this function. For
|
||||||
|
* more info, please read the comment on top of init_alloc_remap().
|
||||||
|
*
|
||||||
|
* The caller must be ready to handle allocation failure from this
|
||||||
|
* function and fall back to regular memory allocator in such cases.
|
||||||
|
*
|
||||||
|
* CONTEXT:
|
||||||
|
* Single CPU early boot context.
|
||||||
|
*
|
||||||
|
* RETURNS:
|
||||||
|
* Pointer to the allocated memory on success, %NULL on failure.
|
||||||
|
*/
|
||||||
void *alloc_remap(int nid, unsigned long size)
|
void *alloc_remap(int nid, unsigned long size)
|
||||||
{
|
{
|
||||||
void *allocation = node_remap_alloc_vaddr[nid];
|
void *allocation = node_remap_alloc_vaddr[nid];
|
||||||
|
@ -238,6 +252,28 @@ void resume_map_numa_kva(pgd_t *pgd_base)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* init_alloc_remap - Initialize remap allocator for a NUMA node
|
||||||
|
* @nid: NUMA node to initizlie remap allocator for
|
||||||
|
*
|
||||||
|
* NUMA nodes may end up without any lowmem. As allocating pgdat and
|
||||||
|
* memmap on a different node with lowmem is inefficient, a special
|
||||||
|
* remap allocator is implemented which can be used by alloc_remap().
|
||||||
|
*
|
||||||
|
* For each node, the amount of memory which will be necessary for
|
||||||
|
* pgdat and memmap is calculated and two memory areas of the size are
|
||||||
|
* allocated - one in the node and the other in lowmem; then, the area
|
||||||
|
* in the node is remapped to the lowmem area.
|
||||||
|
*
|
||||||
|
* As pgdat and memmap must be allocated in lowmem anyway, this
|
||||||
|
* doesn't waste lowmem address space; however, the actual lowmem
|
||||||
|
* which gets remapped over is wasted. The amount shouldn't be
|
||||||
|
* problematic on machines this feature will be used.
|
||||||
|
*
|
||||||
|
* Initialization failure isn't fatal. alloc_remap() is used
|
||||||
|
* opportunistically and the callers will fall back to other memory
|
||||||
|
* allocation mechanisms on failure.
|
||||||
|
*/
|
||||||
static __init void init_alloc_remap(int nid)
|
static __init void init_alloc_remap(int nid)
|
||||||
{
|
{
|
||||||
unsigned long size, pfn;
|
unsigned long size, pfn;
|
||||||
|
@ -306,14 +342,6 @@ void __init initmem_init(void)
|
||||||
{
|
{
|
||||||
int nid;
|
int nid;
|
||||||
|
|
||||||
/*
|
|
||||||
* When mapping a NUMA machine we allocate the node_mem_map arrays
|
|
||||||
* from node local memory. They are then mapped directly into KVA
|
|
||||||
* between zone normal and vmalloc space. Calculate the size of
|
|
||||||
* this space and use it to adjust the boundary between ZONE_NORMAL
|
|
||||||
* and ZONE_HIGHMEM.
|
|
||||||
*/
|
|
||||||
|
|
||||||
get_memcfg_numa();
|
get_memcfg_numa();
|
||||||
numa_init_array();
|
numa_init_array();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue