|
@@ -127,45 +127,25 @@ static int __cpuinit fake_numa_create_new_node(unsigned long end_pfn,
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
- * get_active_region_work_fn - A helper function for get_node_active_region
|
|
|
|
- * Returns datax set to the start_pfn and end_pfn if they contain
|
|
|
|
- * the initial value of datax->start_pfn between them
|
|
|
|
- * @start_pfn: start page(inclusive) of region to check
|
|
|
|
- * @end_pfn: end page(exclusive) of region to check
|
|
|
|
- * @datax: comes in with ->start_pfn set to value to search for and
|
|
|
|
- * goes out with active range if it contains it
|
|
|
|
- * Returns 1 if search value is in range else 0
|
|
|
|
- */
|
|
|
|
-static int __init get_active_region_work_fn(unsigned long start_pfn,
|
|
|
|
- unsigned long end_pfn, void *datax)
|
|
|
|
-{
|
|
|
|
- struct node_active_region *data;
|
|
|
|
- data = (struct node_active_region *)datax;
|
|
|
|
-
|
|
|
|
- if (start_pfn <= data->start_pfn && end_pfn > data->start_pfn) {
|
|
|
|
- data->start_pfn = start_pfn;
|
|
|
|
- data->end_pfn = end_pfn;
|
|
|
|
- return 1;
|
|
|
|
- }
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/*
|
|
|
|
- * get_node_active_region - Return active region containing start_pfn
|
|
|
|
|
|
+ * get_node_active_region - Return active region containing pfn
|
|
* Active range returned is empty if none found.
|
|
* Active range returned is empty if none found.
|
|
- * @start_pfn: The page to return the region for.
|
|
|
|
- * @node_ar: Returned set to the active region containing start_pfn
|
|
|
|
|
|
+ * @pfn: The page to return the region for
|
|
|
|
+ * @node_ar: Returned set to the active region containing @pfn
|
|
*/
|
|
*/
|
|
-static void __init get_node_active_region(unsigned long start_pfn,
|
|
|
|
- struct node_active_region *node_ar)
|
|
|
|
|
|
+static void __init get_node_active_region(unsigned long pfn,
|
|
|
|
+ struct node_active_region *node_ar)
|
|
{
|
|
{
|
|
- int nid = early_pfn_to_nid(start_pfn);
|
|
|
|
|
|
+ unsigned long start_pfn, end_pfn;
|
|
|
|
+ int i, nid;
|
|
|
|
|
|
- node_ar->nid = nid;
|
|
|
|
- node_ar->start_pfn = start_pfn;
|
|
|
|
- node_ar->end_pfn = start_pfn;
|
|
|
|
- work_with_active_regions(nid, get_active_region_work_fn, node_ar);
|
|
|
|
|
|
+ for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) {
|
|
|
|
+ if (pfn >= start_pfn && pfn < end_pfn) {
|
|
|
|
+ node_ar->nid = nid;
|
|
|
|
+ node_ar->start_pfn = start_pfn;
|
|
|
|
+ node_ar->end_pfn = end_pfn;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
static void map_cpu_to_node(int cpu, int node)
|
|
static void map_cpu_to_node(int cpu, int node)
|