]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/base/node.c
mm: vmstat: move slab statistics from zone to node counters
[karo-tx-linux.git] / drivers / base / node.c
index 0440d95c9b5be421118fd519e360338f042d1531..6b1ee371ee9723cd234a0e284e4c5aea0dc8eb38 100644 (file)
@@ -129,11 +129,11 @@ static ssize_t node_read_meminfo(struct device *dev,
                       nid, K(node_page_state(pgdat, NR_UNSTABLE_NFS)),
                       nid, K(sum_zone_node_page_state(nid, NR_BOUNCE)),
                       nid, K(node_page_state(pgdat, NR_WRITEBACK_TEMP)),
-                      nid, K(sum_zone_node_page_state(nid, NR_SLAB_RECLAIMABLE) +
-                               sum_zone_node_page_state(nid, NR_SLAB_UNRECLAIMABLE)),
-                      nid, K(sum_zone_node_page_state(nid, NR_SLAB_RECLAIMABLE)),
+                      nid, K(node_page_state(pgdat, NR_SLAB_RECLAIMABLE) +
+                             node_page_state(pgdat, NR_SLAB_UNRECLAIMABLE)),
+                      nid, K(node_page_state(pgdat, NR_SLAB_RECLAIMABLE)),
 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
-                      nid, K(sum_zone_node_page_state(nid, NR_SLAB_UNRECLAIMABLE)),
+                      nid, K(node_page_state(pgdat, NR_SLAB_UNRECLAIMABLE)),
                       nid, K(node_page_state(pgdat, NR_ANON_THPS) *
                                       HPAGE_PMD_NR),
                       nid, K(node_page_state(pgdat, NR_SHMEM_THPS) *
@@ -141,7 +141,7 @@ static ssize_t node_read_meminfo(struct device *dev,
                       nid, K(node_page_state(pgdat, NR_SHMEM_PMDMAPPED) *
                                       HPAGE_PMD_NR));
 #else
-                      nid, K(sum_zone_node_page_state(nid, NR_SLAB_UNRECLAIMABLE)));
+                      nid, K(node_page_state(pgdat, NR_SLAB_UNRECLAIMABLE)));
 #endif
        n += hugetlb_report_node_meminfo(nid, buf + n);
        return n;
@@ -368,21 +368,14 @@ int unregister_cpu_under_node(unsigned int cpu, unsigned int nid)
 }
 
 #ifdef CONFIG_MEMORY_HOTPLUG_SPARSE
-#define page_initialized(page)  (page->lru.next)
-
 static int __ref get_nid_for_pfn(unsigned long pfn)
 {
-       struct page *page;
-
        if (!pfn_valid_within(pfn))
                return -1;
 #ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
        if (system_state < SYSTEM_RUNNING)
                return early_pfn_to_nid(pfn);
 #endif
-       page = pfn_to_page(pfn);
-       if (!page_initialized(page))
-               return -1;
        return pfn_to_nid(pfn);
 }
 
@@ -468,10 +461,9 @@ int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
        return 0;
 }
 
-static int link_mem_sections(int nid)
+int link_mem_sections(int nid, unsigned long start_pfn, unsigned long nr_pages)
 {
-       unsigned long start_pfn = NODE_DATA(nid)->node_start_pfn;
-       unsigned long end_pfn = start_pfn + NODE_DATA(nid)->node_spanned_pages;
+       unsigned long end_pfn = start_pfn + nr_pages;
        unsigned long pfn;
        struct memory_block *mem_blk = NULL;
        int err = 0;
@@ -559,10 +551,7 @@ static int node_memory_callback(struct notifier_block *self,
        return NOTIFY_OK;
 }
 #endif /* CONFIG_HUGETLBFS */
-#else  /* !CONFIG_MEMORY_HOTPLUG_SPARSE */
-
-static int link_mem_sections(int nid) { return 0; }
-#endif /* CONFIG_MEMORY_HOTPLUG_SPARSE */
+#endif /* CONFIG_MEMORY_HOTPLUG_SPARSE */
 
 #if !defined(CONFIG_MEMORY_HOTPLUG_SPARSE) || \
     !defined(CONFIG_HUGETLBFS)
@@ -576,39 +565,32 @@ static void init_node_hugetlb_work(int nid) { }
 
 #endif
 
-int register_one_node(int nid)
+int __register_one_node(int nid)
 {
-       int error = 0;
+       int p_node = parent_node(nid);
+       struct node *parent = NULL;
+       int error;
        int cpu;
 
-       if (node_online(nid)) {
-               int p_node = parent_node(nid);
-               struct node *parent = NULL;
-
-               if (p_node != nid)
-                       parent = node_devices[p_node];
-
-               node_devices[nid] = kzalloc(sizeof(struct node), GFP_KERNEL);
-               if (!node_devices[nid])
-                       return -ENOMEM;
+       if (p_node != nid)
+               parent = node_devices[p_node];
 
-               error = register_node(node_devices[nid], nid, parent);
-
-               /* link cpu under this node */
-               for_each_present_cpu(cpu) {
-                       if (cpu_to_node(cpu) == nid)
-                               register_cpu_under_node(cpu, nid);
-               }
+       node_devices[nid] = kzalloc(sizeof(struct node), GFP_KERNEL);
+       if (!node_devices[nid])
+               return -ENOMEM;
 
-               /* link memory sections under this node */
-               error = link_mem_sections(nid);
+       error = register_node(node_devices[nid], nid, parent);
 
-               /* initialize work queue for memory hot plug */
-               init_node_hugetlb_work(nid);
+       /* link cpu under this node */
+       for_each_present_cpu(cpu) {
+               if (cpu_to_node(cpu) == nid)
+                       register_cpu_under_node(cpu, nid);
        }
 
-       return error;
+       /* initialize work queue for memory hot plug */
+       init_node_hugetlb_work(nid);
 
+       return error;
 }
 
 void unregister_one_node(int nid)