]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
percpu: migrate percpu data structures to internal header
authorDennis Zhou <dennisz@fb.com>
Mon, 19 Jun 2017 23:28:30 +0000 (19:28 -0400)
committerTejun Heo <tj@kernel.org>
Tue, 20 Jun 2017 19:31:28 +0000 (15:31 -0400)
Migrates pcpu_chunk definition and a few percpu static variables to an
internal header file from mm/percpu.c. These will be used with debugfs
to expose statistics about percpu memory improving visibility regarding
allocations and fragmentation.

Signed-off-by: Dennis Zhou <dennisz@fb.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
mm/percpu-internal.h [new file with mode: 0644]
mm/percpu.c

diff --git a/mm/percpu-internal.h b/mm/percpu-internal.h
new file mode 100644 (file)
index 0000000..68bf185
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _MM_PERCPU_INTERNAL_H
+#define _MM_PERCPU_INTERNAL_H
+
+#include <linux/types.h>
+#include <linux/percpu.h>
+
+struct pcpu_chunk {
+       struct list_head        list;           /* linked to pcpu_slot lists */
+       int                     free_size;      /* free bytes in the chunk */
+       int                     contig_hint;    /* max contiguous size hint */
+       void                    *base_addr;     /* base address of this chunk */
+
+       int                     map_used;       /* # of map entries used before the sentry */
+       int                     map_alloc;      /* # of map entries allocated */
+       int                     *map;           /* allocation map */
+       struct list_head        map_extend_list;/* on pcpu_map_extend_chunks */
+
+       void                    *data;          /* chunk data */
+       int                     first_free;     /* no free below this */
+       bool                    immutable;      /* no [de]population allowed */
+       int                     nr_populated;   /* # of populated pages */
+       unsigned long           populated[];    /* populated bitmap */
+};
+
+extern spinlock_t pcpu_lock;
+
+extern struct list_head *pcpu_slot;
+extern int pcpu_nr_slots;
+
+extern struct pcpu_chunk *pcpu_first_chunk;
+extern struct pcpu_chunk *pcpu_reserved_chunk;
+
+#endif
index be95d3192acba2d962cc086ce0cdaed73d79f46d..75ac982c19df2257a27c05a0b55024f0dbab2ae0 100644 (file)
@@ -76,6 +76,8 @@
 #include <asm/tlbflush.h>
 #include <asm/io.h>
 
+#include "percpu-internal.h"
+
 #define PCPU_SLOT_BASE_SHIFT           5       /* 1-31 shares the same slot */
 #define PCPU_DFL_MAP_ALLOC             16      /* start a map with 16 ents */
 #define PCPU_ATOMIC_MAP_MARGIN_LOW     32
 #define __pcpu_ptr_to_addr(ptr)                (void __force *)(ptr)
 #endif /* CONFIG_SMP */
 
-struct pcpu_chunk {
-       struct list_head        list;           /* linked to pcpu_slot lists */
-       int                     free_size;      /* free bytes in the chunk */
-       int                     contig_hint;    /* max contiguous size hint */
-       void                    *base_addr;     /* base address of this chunk */
-
-       int                     map_used;       /* # of map entries used before the sentry */
-       int                     map_alloc;      /* # of map entries allocated */
-       int                     *map;           /* allocation map */
-       struct list_head        map_extend_list;/* on pcpu_map_extend_chunks */
-
-       void                    *data;          /* chunk data */
-       int                     first_free;     /* no free below this */
-       bool                    immutable;      /* no [de]population allowed */
-       int                     nr_populated;   /* # of populated pages */
-       unsigned long           populated[];    /* populated bitmap */
-};
-
 static int pcpu_unit_pages __ro_after_init;
 static int pcpu_unit_size __ro_after_init;
 static int pcpu_nr_units __ro_after_init;
 static int pcpu_atom_size __ro_after_init;
-static int pcpu_nr_slots __ro_after_init;
+int pcpu_nr_slots __ro_after_init;
 static size_t pcpu_chunk_struct_size __ro_after_init;
 
 /* cpus with the lowest and highest unit addresses */
@@ -149,7 +133,7 @@ static const size_t *pcpu_group_sizes __ro_after_init;
  * chunks, this one can be allocated and mapped in several different
  * ways and thus often doesn't live in the vmalloc area.
  */
-static struct pcpu_chunk *pcpu_first_chunk __ro_after_init;
+struct pcpu_chunk *pcpu_first_chunk __ro_after_init;
 
 /*
  * Optional reserved chunk.  This chunk reserves part of the first
@@ -158,13 +142,13 @@ static struct pcpu_chunk *pcpu_first_chunk __ro_after_init;
  * area doesn't exist, the following variables contain NULL and 0
  * respectively.
  */
-static struct pcpu_chunk *pcpu_reserved_chunk __ro_after_init;
+struct pcpu_chunk *pcpu_reserved_chunk __ro_after_init;
 static int pcpu_reserved_chunk_limit __ro_after_init;
 
-static DEFINE_SPINLOCK(pcpu_lock);     /* all internal data structures */
+DEFINE_SPINLOCK(pcpu_lock);    /* all internal data structures */
 static DEFINE_MUTEX(pcpu_alloc_mutex); /* chunk create/destroy, [de]pop, map ext */
 
-static struct list_head *pcpu_slot __ro_after_init; /* chunk list slots */
+struct list_head *pcpu_slot __ro_after_init; /* chunk list slots */
 
 /* chunks which need their map areas extended, protected by pcpu_lock */
 static LIST_HEAD(pcpu_map_extend_chunks);