aboutsummaryrefslogtreecommitdiff
path: root/arch/powerpc/platforms/cell/ras.c
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2009-05-23 16:42:19 -0700
committerH. Peter Anvin <hpa@zytor.com>2009-05-23 16:42:19 -0700
commitee0736627d3347be0be2769fa7b26431f9726c9d (patch)
tree203e2204daaec4cf005463fdf2c7bf380d6eef36 /arch/powerpc/platforms/cell/ras.c
parentcf9972a921470b0a2da7906104bcd540b20e33bf (diff)
parent0af48f42df15b97080b450d24219dd95db7b929a (diff)
Merge branch 'x86/urgent' into x86/setup
Resolved conflicts: arch/x86/boot/memory.c Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/powerpc/platforms/cell/ras.c')
-rw-r--r--arch/powerpc/platforms/cell/ras.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/arch/powerpc/platforms/cell/ras.c b/arch/powerpc/platforms/cell/ras.c
index 5f961c464cc..296b5268754 100644
--- a/arch/powerpc/platforms/cell/ras.c
+++ b/arch/powerpc/platforms/cell/ras.c
@@ -122,12 +122,23 @@ static int __init cbe_ptcal_enable_on_node(int nid, int order)
area->nid = nid;
area->order = order;
- area->pages = alloc_pages_node(area->nid, GFP_KERNEL, area->order);
+ area->pages = alloc_pages_node(area->nid, GFP_KERNEL | GFP_THISNODE,
+ area->order);
- if (!area->pages)
+ if (!area->pages) {
+ printk(KERN_WARNING "%s: no page on node %d\n",
+ __func__, area->nid);
goto out_free_area;
+ }
- addr = __pa(page_address(area->pages));
+ /*
+ * We move the ptcal area to the middle of the allocated
+ * page, in order to avoid prefetches in memcpy and similar
+ * functions stepping on it.
+ */
+ addr = __pa(page_address(area->pages)) + (PAGE_SIZE >> 1);
+ printk(KERN_DEBUG "%s: enabling PTCAL on node %d address=0x%016lx\n",
+ __func__, area->nid, addr);
ret = -EIO;
if (rtas_call(ptcal_start_tok, 3, 1, NULL, area->nid,