[PATCH] Profiling: require buffer allocation on the correct node
Profiling really suffers with off node buffers. Fail if no memory is available on the nodes. The profiling code can deal with these failures should they occur. Signed-off-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
1192d52641
commit
fbd98167e6
1 changed files with 12 additions and 4 deletions
|
@ -309,13 +309,17 @@ static int __devinit profile_cpu_callback(struct notifier_block *info,
|
|||
node = cpu_to_node(cpu);
|
||||
per_cpu(cpu_profile_flip, cpu) = 0;
|
||||
if (!per_cpu(cpu_profile_hits, cpu)[1]) {
|
||||
page = alloc_pages_node(node, GFP_KERNEL | __GFP_ZERO, 0);
|
||||
page = alloc_pages_node(node,
|
||||
GFP_KERNEL | __GFP_ZERO | GFP_THISNODE,
|
||||
0);
|
||||
if (!page)
|
||||
return NOTIFY_BAD;
|
||||
per_cpu(cpu_profile_hits, cpu)[1] = page_address(page);
|
||||
}
|
||||
if (!per_cpu(cpu_profile_hits, cpu)[0]) {
|
||||
page = alloc_pages_node(node, GFP_KERNEL | __GFP_ZERO, 0);
|
||||
page = alloc_pages_node(node,
|
||||
GFP_KERNEL | __GFP_ZERO | GFP_THISNODE,
|
||||
0);
|
||||
if (!page)
|
||||
goto out_free;
|
||||
per_cpu(cpu_profile_hits, cpu)[0] = page_address(page);
|
||||
|
@ -491,12 +495,16 @@ static int __init create_hash_tables(void)
|
|||
int node = cpu_to_node(cpu);
|
||||
struct page *page;
|
||||
|
||||
page = alloc_pages_node(node, GFP_KERNEL | __GFP_ZERO, 0);
|
||||
page = alloc_pages_node(node,
|
||||
GFP_KERNEL | __GFP_ZERO | GFP_THISNODE,
|
||||
0);
|
||||
if (!page)
|
||||
goto out_cleanup;
|
||||
per_cpu(cpu_profile_hits, cpu)[1]
|
||||
= (struct profile_hit *)page_address(page);
|
||||
page = alloc_pages_node(node, GFP_KERNEL | __GFP_ZERO, 0);
|
||||
page = alloc_pages_node(node,
|
||||
GFP_KERNEL | __GFP_ZERO | GFP_THISNODE,
|
||||
0);
|
||||
if (!page)
|
||||
goto out_cleanup;
|
||||
per_cpu(cpu_profile_hits, cpu)[0]
|
||||
|
|
Loading…
Reference in a new issue