aboutsummaryrefslogtreecommitdiffstats
path: root/mm/vmalloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/vmalloc.c')
-rw-r--r--mm/vmalloc.c76
1 files changed, 75 insertions, 1 deletions
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index ecf91f8034bf..afa550f66537 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -14,7 +14,7 @@
14#include <linux/slab.h> 14#include <linux/slab.h>
15#include <linux/spinlock.h> 15#include <linux/spinlock.h>
16#include <linux/interrupt.h> 16#include <linux/interrupt.h>
17 17#include <linux/seq_file.h>
18#include <linux/vmalloc.h> 18#include <linux/vmalloc.h>
19 19
20#include <asm/uaccess.h> 20#include <asm/uaccess.h>
@@ -873,3 +873,77 @@ void free_vm_area(struct vm_struct *area)
873 kfree(area); 873 kfree(area);
874} 874}
875EXPORT_SYMBOL_GPL(free_vm_area); 875EXPORT_SYMBOL_GPL(free_vm_area);
876
877
878#ifdef CONFIG_PROC_FS
879static void *s_start(struct seq_file *m, loff_t *pos)
880{
881 loff_t n = *pos;
882 struct vm_struct *v;
883
884 read_lock(&vmlist_lock);
885 v = vmlist;
886 while (n > 0 && v) {
887 n--;
888 v = v->next;
889 }
890 if (!n)
891 return v;
892
893 return NULL;
894
895}
896
897static void *s_next(struct seq_file *m, void *p, loff_t *pos)
898{
899 struct vm_struct *v = p;
900
901 ++*pos;
902 return v->next;
903}
904
905static void s_stop(struct seq_file *m, void *p)
906{
907 read_unlock(&vmlist_lock);
908}
909
910static int s_show(struct seq_file *m, void *p)
911{
912 struct vm_struct *v = p;
913
914 seq_printf(m, "0x%p-0x%p %7ld",
915 v->addr, v->addr + v->size, v->size);
916
917 if (v->nr_pages)
918 seq_printf(m, " pages=%d", v->nr_pages);
919
920 if (v->phys_addr)
921 seq_printf(m, " phys=%lx", v->phys_addr);
922
923 if (v->flags & VM_IOREMAP)
924 seq_printf(m, " ioremap");
925
926 if (v->flags & VM_ALLOC)
927 seq_printf(m, " vmalloc");
928
929 if (v->flags & VM_MAP)
930 seq_printf(m, " vmap");
931
932 if (v->flags & VM_USERMAP)
933 seq_printf(m, " user");
934
935 if (v->flags & VM_VPAGES)
936 seq_printf(m, " vpages");
937
938 seq_putc(m, '\n');
939 return 0;
940}
941
942const struct seq_operations vmalloc_op = {
943 .start = s_start,
944 .next = s_next,
945 .stop = s_stop,
946 .show = s_show,
947};
948#endif
949