hugetlb_cgroup: add reservation accounting for private mappings
[platform/kernel/linux-rpi.git] / mm / hugetlb_cgroup.c
index c5c8f8e..3722382 100644 (file)
 #include <linux/hugetlb.h>
 #include <linux/hugetlb_cgroup.h>
 
-enum hugetlb_memory_event {
-       HUGETLB_MAX,
-       HUGETLB_NR_MEMORY_EVENTS,
-};
-
-struct hugetlb_cgroup {
-       struct cgroup_subsys_state css;
-
-       /*
-        * the counter to account for hugepages from hugetlb.
-        */
-       struct page_counter hugepage[HUGE_MAX_HSTATE];
-
-       /*
-        * the counter to account for hugepage reservations from hugetlb.
-        */
-       struct page_counter rsvd_hugepage[HUGE_MAX_HSTATE];
-
-       atomic_long_t events[HUGE_MAX_HSTATE][HUGETLB_NR_MEMORY_EVENTS];
-       atomic_long_t events_local[HUGE_MAX_HSTATE][HUGETLB_NR_MEMORY_EVENTS];
-
-       /* Handle for "hugetlb.events" */
-       struct cgroup_file events_file[HUGE_MAX_HSTATE];
-
-       /* Handle for "hugetlb.events.local" */
-       struct cgroup_file events_local_file[HUGE_MAX_HSTATE];
-};
-
 #define MEMFILE_PRIVATE(x, val)        (((x) << 16) | (val))
 #define MEMFILE_IDX(val)       (((val) >> 16) & 0xffff)
 #define MEMFILE_ATTR(val)      ((val) & 0xffff)
@@ -407,15 +379,16 @@ void hugetlb_cgroup_uncharge_cgroup_rsvd(int idx, unsigned long nr_pages,
        __hugetlb_cgroup_uncharge_cgroup(idx, nr_pages, h_cg, true);
 }
 
-void hugetlb_cgroup_uncharge_counter(struct page_counter *p,
-                                    unsigned long nr_pages,
-                                    struct cgroup_subsys_state *css)
+void hugetlb_cgroup_uncharge_counter(struct resv_map *resv, unsigned long start,
+                                    unsigned long end)
 {
-       if (hugetlb_cgroup_disabled() || !p || !css)
+       if (hugetlb_cgroup_disabled() || !resv || !resv->reservation_counter ||
+           !resv->css)
                return;
 
-       page_counter_uncharge(p, nr_pages);
-       css_put(css);
+       page_counter_uncharge(resv->reservation_counter,
+                             (end - start) * resv->pages_per_hpage);
+       css_put(resv->css);
 }
 
 enum {