1 #include <linux/atomic.h>
2 #include "debug.h"
3
4 ssize_t ramster_foreign_eph_pages;
5 ssize_t ramster_foreign_pers_pages;
6 #ifdef CONFIG_DEBUG_FS
7 #include <linux/debugfs.h>
8
9 ssize_t ramster_eph_pages_remoted;
10 ssize_t ramster_pers_pages_remoted;
11 ssize_t ramster_eph_pages_remote_failed;
12 ssize_t ramster_pers_pages_remote_failed;
13 ssize_t ramster_remote_eph_pages_succ_get;
14 ssize_t ramster_remote_pers_pages_succ_get;
15 ssize_t ramster_remote_eph_pages_unsucc_get;
16 ssize_t ramster_remote_pers_pages_unsucc_get;
17 ssize_t ramster_pers_pages_remote_nomem;
18 ssize_t ramster_remote_objects_flushed;
19 ssize_t ramster_remote_object_flushes_failed;
20 ssize_t ramster_remote_pages_flushed;
21 ssize_t ramster_remote_page_flushes_failed;
22
23 #define ATTR(x) { .name = #x, .val = &ramster_##x, }
24 static struct debug_entry {
25 const char *name;
26 ssize_t *val;
27 } attrs[] = {
28 ATTR(eph_pages_remoted),
29 ATTR(pers_pages_remoted),
30 ATTR(eph_pages_remote_failed),
31 ATTR(pers_pages_remote_failed),
32 ATTR(remote_eph_pages_succ_get),
33 ATTR(remote_pers_pages_succ_get),
34 ATTR(remote_eph_pages_unsucc_get),
35 ATTR(remote_pers_pages_unsucc_get),
36 ATTR(pers_pages_remote_nomem),
37 ATTR(remote_objects_flushed),
38 ATTR(remote_pages_flushed),
39 ATTR(remote_object_flushes_failed),
40 ATTR(remote_page_flushes_failed),
41 ATTR(foreign_eph_pages),
42 ATTR(foreign_eph_pages_max),
43 ATTR(foreign_pers_pages),
44 ATTR(foreign_pers_pages_max),
45 };
46 #undef ATTR
47
ramster_debugfs_init(void)48 int ramster_debugfs_init(void)
49 {
50 int i;
51 struct dentry *root = debugfs_create_dir("ramster", NULL);
52 if (root == NULL)
53 return -ENXIO;
54
55 for (i = 0; i < ARRAY_SIZE(attrs); i++)
56 if (!debugfs_create_size_t(attrs[i].name,
57 S_IRUGO, root, attrs[i].val))
58 goto out;
59 return 0;
60 out:
61 return -ENODEV;
62 }
63 #else
ramster_debugfs_init(void)64 static inline int ramster_debugfs_init(void)
65 {
66 return 0;
67 }
68 #endif
69