diff options
-rw-r--r-- | arch/powerpc/platforms/cell/ras.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/arch/powerpc/platforms/cell/ras.c b/arch/powerpc/platforms/cell/ras.c index 5f961c464cc4..296b5268754e 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) | |||
122 | 122 | ||
123 | area->nid = nid; | 123 | area->nid = nid; |
124 | area->order = order; | 124 | area->order = order; |
125 | area->pages = alloc_pages_node(area->nid, GFP_KERNEL, area->order); | 125 | area->pages = alloc_pages_node(area->nid, GFP_KERNEL | GFP_THISNODE, |
126 | area->order); | ||
126 | 127 | ||
127 | if (!area->pages) | 128 | if (!area->pages) { |
129 | printk(KERN_WARNING "%s: no page on node %d\n", | ||
130 | __func__, area->nid); | ||
128 | goto out_free_area; | 131 | goto out_free_area; |
132 | } | ||
129 | 133 | ||
130 | addr = __pa(page_address(area->pages)); | 134 | /* |
135 | * We move the ptcal area to the middle of the allocated | ||
136 | * page, in order to avoid prefetches in memcpy and similar | ||
137 | * functions stepping on it. | ||
138 | */ | ||
139 | addr = __pa(page_address(area->pages)) + (PAGE_SIZE >> 1); | ||
140 | printk(KERN_DEBUG "%s: enabling PTCAL on node %d address=0x%016lx\n", | ||
141 | __func__, area->nid, addr); | ||
131 | 142 | ||
132 | ret = -EIO; | 143 | ret = -EIO; |
133 | if (rtas_call(ptcal_start_tok, 3, 1, NULL, area->nid, | 144 | if (rtas_call(ptcal_start_tok, 3, 1, NULL, area->nid, |