12bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V/* 22bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V * Copyright IBM Corporation, 2012 32bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V * Author Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> 42bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V * 52bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V * This program is free software; you can redistribute it and/or modify it 62bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V * under the terms of version 2.1 of the GNU Lesser General Public License 72bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V * as published by the Free Software Foundation. 82bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V * 92bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V * This program is distributed in the hope that it would be useful, but 102bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V * WITHOUT ANY WARRANTY; without even the implied warranty of 112bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 122bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V * 132bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V */ 142bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V 152bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V#ifndef _LINUX_HUGETLB_CGROUP_H 162bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V#define _LINUX_HUGETLB_CGROUP_H 172bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V 18309381feaee564281c3d9e90fbca8963bb7428adSasha Levin#include <linux/mmdebug.h> 192bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V#include <linux/res_counter.h> 202bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V 212bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.Vstruct hugetlb_cgroup; 229dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V/* 239dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V * Minimum page order trackable by hugetlb cgroup. 249dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V * At least 3 pages are necessary for all the tracking information. 259dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V */ 269dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V#define HUGETLB_CGROUP_MIN_ORDER 2 272bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V 282bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V#ifdef CONFIG_CGROUP_HUGETLB 299dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V 309dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.Vstatic inline struct hugetlb_cgroup *hugetlb_cgroup_from_page(struct page *page) 319dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V{ 32309381feaee564281c3d9e90fbca8963bb7428adSasha Levin VM_BUG_ON_PAGE(!PageHuge(page), page); 339dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V 349dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V if (compound_order(page) < HUGETLB_CGROUP_MIN_ORDER) 359dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V return NULL; 369dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V return (struct hugetlb_cgroup *)page[2].lru.next; 379dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V} 389dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V 399dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.Vstatic inline 409dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.Vint set_hugetlb_cgroup(struct page *page, struct hugetlb_cgroup *h_cg) 419dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V{ 42309381feaee564281c3d9e90fbca8963bb7428adSasha Levin VM_BUG_ON_PAGE(!PageHuge(page), page); 439dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V 449dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V if (compound_order(page) < HUGETLB_CGROUP_MIN_ORDER) 459dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V return -1; 469dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V page[2].lru.next = (void *)h_cg; 479dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V return 0; 489dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V} 499dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V 502bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.Vstatic inline bool hugetlb_cgroup_disabled(void) 512bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V{ 52073219e995b4a3f8cf1ce8228b7ef440b6994ac0Tejun Heo if (hugetlb_cgrp_subsys.disabled) 532bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V return true; 542bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V return false; 552bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V} 562bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V 576d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.Vextern int hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages, 586d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V struct hugetlb_cgroup **ptr); 596d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.Vextern void hugetlb_cgroup_commit_charge(int idx, unsigned long nr_pages, 606d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V struct hugetlb_cgroup *h_cg, 616d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V struct page *page); 626d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.Vextern void hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages, 636d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V struct page *page); 646d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.Vextern void hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages, 656d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V struct hugetlb_cgroup *h_cg); 667179e7bf4592ac5a7b30257a7df6259ee81e51daJianguo Wuextern void hugetlb_cgroup_file_init(void) __init; 678e6ac7fab374816de9a8b0a8fbb02ef761a30ff4Aneesh Kumar K.Vextern void hugetlb_cgroup_migrate(struct page *oldhpage, 688e6ac7fab374816de9a8b0a8fbb02ef761a30ff4Aneesh Kumar K.V struct page *newhpage); 696d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V 702bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V#else 719dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.Vstatic inline struct hugetlb_cgroup *hugetlb_cgroup_from_page(struct page *page) 729dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V{ 739dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V return NULL; 749dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V} 759dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V 769dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.Vstatic inline 779dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.Vint set_hugetlb_cgroup(struct page *page, struct hugetlb_cgroup *h_cg) 789dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V{ 799dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V return 0; 809dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V} 819dd540e23111d8884773ab942a736f3aba4040d4Aneesh Kumar K.V 822bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.Vstatic inline bool hugetlb_cgroup_disabled(void) 832bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V{ 842bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V return true; 852bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V} 862bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V 876d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.Vstatic inline int 886d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.Vhugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages, 896d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V struct hugetlb_cgroup **ptr) 906d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V{ 916d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V return 0; 926d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V} 936d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V 946d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.Vstatic inline void 956d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.Vhugetlb_cgroup_commit_charge(int idx, unsigned long nr_pages, 966d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V struct hugetlb_cgroup *h_cg, 976d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V struct page *page) 986d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V{ 996d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V return; 1006d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V} 1016d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V 1026d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.Vstatic inline void 1036d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.Vhugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages, struct page *page) 1046d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V{ 1056d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V return; 1066d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V} 1076d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V 1086d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.Vstatic inline void 1096d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.Vhugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages, 1106d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V struct hugetlb_cgroup *h_cg) 1116d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V{ 1126d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V return; 1136d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V} 1146d76dcf40405144a448040a350fd214ddc243d5eAneesh Kumar K.V 1157179e7bf4592ac5a7b30257a7df6259ee81e51daJianguo Wustatic inline void hugetlb_cgroup_file_init(void) 116abb8206cb07734d0b7bf033c715995d6371a94c3Aneesh Kumar K.V{ 117abb8206cb07734d0b7bf033c715995d6371a94c3Aneesh Kumar K.V} 118abb8206cb07734d0b7bf033c715995d6371a94c3Aneesh Kumar K.V 1198e6ac7fab374816de9a8b0a8fbb02ef761a30ff4Aneesh Kumar K.Vstatic inline void hugetlb_cgroup_migrate(struct page *oldhpage, 1208e6ac7fab374816de9a8b0a8fbb02ef761a30ff4Aneesh Kumar K.V struct page *newhpage) 1218e6ac7fab374816de9a8b0a8fbb02ef761a30ff4Aneesh Kumar K.V{ 1228e6ac7fab374816de9a8b0a8fbb02ef761a30ff4Aneesh Kumar K.V return; 1238e6ac7fab374816de9a8b0a8fbb02ef761a30ff4Aneesh Kumar K.V} 1248e6ac7fab374816de9a8b0a8fbb02ef761a30ff4Aneesh Kumar K.V 1252bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V#endif /* CONFIG_MEM_RES_CTLR_HUGETLB */ 1262bc64a2046975410505bb119bba32705892b9255Aneesh Kumar K.V#endif 127