linux/include/linux/hugetlb_cgroup.h
<<
>>
Prefs
   1/*
   2 * Copyright IBM Corporation, 2012
   3 * Author Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
   4 *
   5 * This program is free software; you can redistribute it and/or modify it
   6 * under the terms of version 2.1 of the GNU Lesser General Public License
   7 * as published by the Free Software Foundation.
   8 *
   9 * This program is distributed in the hope that it would be useful, but
  10 * WITHOUT ANY WARRANTY; without even the implied warranty of
  11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  12 *
  13 */
  14
  15#ifndef _LINUX_HUGETLB_CGROUP_H
  16#define _LINUX_HUGETLB_CGROUP_H
  17
  18#include <linux/mmdebug.h>
  19
  20struct hugetlb_cgroup;
  21/*
  22 * Minimum page order trackable by hugetlb cgroup.
  23 * At least 3 pages are necessary for all the tracking information.
  24 */
  25#define HUGETLB_CGROUP_MIN_ORDER        2
  26
  27#ifdef CONFIG_CGROUP_HUGETLB
  28
  29static inline struct hugetlb_cgroup *hugetlb_cgroup_from_page(struct page *page)
  30{
  31        VM_BUG_ON_PAGE(!PageHuge(page), page);
  32
  33        if (compound_order(page) < HUGETLB_CGROUP_MIN_ORDER)
  34                return NULL;
  35        return (struct hugetlb_cgroup *)page[2].private;
  36}
  37
  38static inline
  39int set_hugetlb_cgroup(struct page *page, struct hugetlb_cgroup *h_cg)
  40{
  41        VM_BUG_ON_PAGE(!PageHuge(page), page);
  42
  43        if (compound_order(page) < HUGETLB_CGROUP_MIN_ORDER)
  44                return -1;
  45        page[2].private = (unsigned long)h_cg;
  46        return 0;
  47}
  48
  49static inline bool hugetlb_cgroup_disabled(void)
  50{
  51        return !cgroup_subsys_enabled(hugetlb_cgrp_subsys);
  52}
  53
  54extern int hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages,
  55                                        struct hugetlb_cgroup **ptr);
  56extern void hugetlb_cgroup_commit_charge(int idx, unsigned long nr_pages,
  57                                         struct hugetlb_cgroup *h_cg,
  58                                         struct page *page);
  59extern void hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages,
  60                                         struct page *page);
  61extern void hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages,
  62                                           struct hugetlb_cgroup *h_cg);
  63extern void hugetlb_cgroup_file_init(void) __init;
  64extern void hugetlb_cgroup_migrate(struct page *oldhpage,
  65                                   struct page *newhpage);
  66
  67#else
  68static inline struct hugetlb_cgroup *hugetlb_cgroup_from_page(struct page *page)
  69{
  70        return NULL;
  71}
  72
  73static inline
  74int set_hugetlb_cgroup(struct page *page, struct hugetlb_cgroup *h_cg)
  75{
  76        return 0;
  77}
  78
  79static inline bool hugetlb_cgroup_disabled(void)
  80{
  81        return true;
  82}
  83
  84static inline int
  85hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages,
  86                             struct hugetlb_cgroup **ptr)
  87{
  88        return 0;
  89}
  90
  91static inline void
  92hugetlb_cgroup_commit_charge(int idx, unsigned long nr_pages,
  93                             struct hugetlb_cgroup *h_cg,
  94                             struct page *page)
  95{
  96}
  97
  98static inline void
  99hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages, struct page *page)
 100{
 101}
 102
 103static inline void
 104hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages,
 105                               struct hugetlb_cgroup *h_cg)
 106{
 107}
 108
 109static inline void hugetlb_cgroup_file_init(void)
 110{
 111}
 112
 113static inline void hugetlb_cgroup_migrate(struct page *oldhpage,
 114                                          struct page *newhpage)
 115{
 116}
 117
 118#endif  /* CONFIG_MEM_RES_CTLR_HUGETLB */
 119#endif
 120