mm: memcg/percpu: account percpu memory to memory cgroups
[linux-2.6-microblaze.git] / mm / percpu-stats.c
index 3255806..c8400a2 100644 (file)
@@ -34,11 +34,15 @@ static int find_max_nr_alloc(void)
 {
        struct pcpu_chunk *chunk;
        int slot, max_nr_alloc;
+       enum pcpu_chunk_type type;
 
        max_nr_alloc = 0;
-       for (slot = 0; slot < pcpu_nr_slots; slot++)
-               list_for_each_entry(chunk, &pcpu_slot[slot], list)
-                       max_nr_alloc = max(max_nr_alloc, chunk->nr_alloc);
+       for (type = 0; type < PCPU_NR_CHUNK_TYPES; type++)
+               for (slot = 0; slot < pcpu_nr_slots; slot++)
+                       list_for_each_entry(chunk, &pcpu_chunk_list(type)[slot],
+                                           list)
+                               max_nr_alloc = max(max_nr_alloc,
+                                                  chunk->nr_alloc);
 
        return max_nr_alloc;
 }
@@ -129,6 +133,9 @@ static void chunk_map_stats(struct seq_file *m, struct pcpu_chunk *chunk,
        P("cur_min_alloc", cur_min_alloc);
        P("cur_med_alloc", cur_med_alloc);
        P("cur_max_alloc", cur_max_alloc);
+#ifdef CONFIG_MEMCG_KMEM
+       P("memcg_aware", pcpu_is_memcg_chunk(pcpu_chunk_type(chunk)));
+#endif
        seq_putc(m, '\n');
 }
 
@@ -137,6 +144,7 @@ static int percpu_stats_show(struct seq_file *m, void *v)
        struct pcpu_chunk *chunk;
        int slot, max_nr_alloc;
        int *buffer;
+       enum pcpu_chunk_type type;
 
 alloc_buffer:
        spin_lock_irq(&pcpu_lock);
@@ -202,18 +210,18 @@ alloc_buffer:
                chunk_map_stats(m, pcpu_reserved_chunk, buffer);
        }
 
-       for (slot = 0; slot < pcpu_nr_slots; slot++) {
-               list_for_each_entry(chunk, &pcpu_slot[slot], list) {
-                       if (chunk == pcpu_first_chunk) {
-                               seq_puts(m, "Chunk: <- First Chunk\n");
-                               chunk_map_stats(m, chunk, buffer);
-
-
-                       } else {
-                               seq_puts(m, "Chunk:\n");
-                               chunk_map_stats(m, chunk, buffer);
+       for (type = 0; type < PCPU_NR_CHUNK_TYPES; type++) {
+               for (slot = 0; slot < pcpu_nr_slots; slot++) {
+                       list_for_each_entry(chunk, &pcpu_chunk_list(type)[slot],
+                                           list) {
+                               if (chunk == pcpu_first_chunk) {
+                                       seq_puts(m, "Chunk: <- First Chunk\n");
+                                       chunk_map_stats(m, chunk, buffer);
+                               } else {
+                                       seq_puts(m, "Chunk:\n");
+                                       chunk_map_stats(m, chunk, buffer);
+                               }
                        }
-
                }
        }