Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.17-rc7 126 lines 3.1 kB view raw
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#include <linux/res_counter.h> 20 21struct hugetlb_cgroup; 22/* 23 * Minimum page order trackable by hugetlb cgroup. 24 * At least 3 pages are necessary for all the tracking information. 25 */ 26#define HUGETLB_CGROUP_MIN_ORDER 2 27 28#ifdef CONFIG_CGROUP_HUGETLB 29 30static inline struct hugetlb_cgroup *hugetlb_cgroup_from_page(struct page *page) 31{ 32 VM_BUG_ON_PAGE(!PageHuge(page), page); 33 34 if (compound_order(page) < HUGETLB_CGROUP_MIN_ORDER) 35 return NULL; 36 return (struct hugetlb_cgroup *)page[2].lru.next; 37} 38 39static inline 40int set_hugetlb_cgroup(struct page *page, struct hugetlb_cgroup *h_cg) 41{ 42 VM_BUG_ON_PAGE(!PageHuge(page), page); 43 44 if (compound_order(page) < HUGETLB_CGROUP_MIN_ORDER) 45 return -1; 46 page[2].lru.next = (void *)h_cg; 47 return 0; 48} 49 50static inline bool hugetlb_cgroup_disabled(void) 51{ 52 if (hugetlb_cgrp_subsys.disabled) 53 return true; 54 return false; 55} 56 57extern int hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages, 58 struct hugetlb_cgroup **ptr); 59extern void hugetlb_cgroup_commit_charge(int idx, unsigned long nr_pages, 60 struct hugetlb_cgroup *h_cg, 61 struct page *page); 62extern void hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages, 63 struct page *page); 64extern void hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages, 65 struct hugetlb_cgroup *h_cg); 66extern void hugetlb_cgroup_file_init(void) __init; 67extern void hugetlb_cgroup_migrate(struct page *oldhpage, 68 struct page *newhpage); 69 70#else 71static inline struct hugetlb_cgroup *hugetlb_cgroup_from_page(struct page *page) 72{ 73 return NULL; 74} 75 76static inline 77int set_hugetlb_cgroup(struct page *page, struct hugetlb_cgroup *h_cg) 78{ 79 return 0; 80} 81 82static inline bool hugetlb_cgroup_disabled(void) 83{ 84 return true; 85} 86 87static inline int 88hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages, 89 struct hugetlb_cgroup **ptr) 90{ 91 return 0; 92} 93 94static inline void 95hugetlb_cgroup_commit_charge(int idx, unsigned long nr_pages, 96 struct hugetlb_cgroup *h_cg, 97 struct page *page) 98{ 99 return; 100} 101 102static inline void 103hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages, struct page *page) 104{ 105 return; 106} 107 108static inline void 109hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages, 110 struct hugetlb_cgroup *h_cg) 111{ 112 return; 113} 114 115static inline void hugetlb_cgroup_file_init(void) 116{ 117} 118 119static inline void hugetlb_cgroup_migrate(struct page *oldhpage, 120 struct page *newhpage) 121{ 122 return; 123} 124 125#endif /* CONFIG_MEM_RES_CTLR_HUGETLB */ 126#endif