1 /* SPDX-License-Identifier: MIT */
2 /*
3 * Copyright © 2023-2024 Intel Corporation
4 */
5
6 #ifndef _CGROUP_DMEM_H
7 #define _CGROUP_DMEM_H
8
9 #include <linux/types.h>
10 #include <linux/llist.h>
11
12 struct dmem_cgroup_pool_state;
13
14 /* Opaque definition of a cgroup region, used internally */
15 struct dmem_cgroup_region;
16
17 #if IS_ENABLED(CONFIG_CGROUP_DMEM)
18 struct dmem_cgroup_region *dmem_cgroup_register_region(u64 size, const char *name_fmt, ...) __printf(2,3);
19 void dmem_cgroup_unregister_region(struct dmem_cgroup_region *region);
20 int dmem_cgroup_try_charge(struct dmem_cgroup_region *region, u64 size,
21 struct dmem_cgroup_pool_state **ret_pool,
22 struct dmem_cgroup_pool_state **ret_limit_pool);
23 void dmem_cgroup_uncharge(struct dmem_cgroup_pool_state *pool, u64 size);
24 bool dmem_cgroup_state_evict_valuable(struct dmem_cgroup_pool_state *limit_pool,
25 struct dmem_cgroup_pool_state *test_pool,
26 bool ignore_low, bool *ret_hit_low);
27
28 void dmem_cgroup_pool_state_put(struct dmem_cgroup_pool_state *pool);
29 #else
30 static inline __printf(2,3) struct dmem_cgroup_region *
dmem_cgroup_register_region(u64 size,const char * name_fmt,...)31 dmem_cgroup_register_region(u64 size, const char *name_fmt, ...)
32 {
33 return NULL;
34 }
35
dmem_cgroup_unregister_region(struct dmem_cgroup_region * region)36 static inline void dmem_cgroup_unregister_region(struct dmem_cgroup_region *region)
37 { }
38
dmem_cgroup_try_charge(struct dmem_cgroup_region * region,u64 size,struct dmem_cgroup_pool_state ** ret_pool,struct dmem_cgroup_pool_state ** ret_limit_pool)39 static inline int dmem_cgroup_try_charge(struct dmem_cgroup_region *region, u64 size,
40 struct dmem_cgroup_pool_state **ret_pool,
41 struct dmem_cgroup_pool_state **ret_limit_pool)
42 {
43 *ret_pool = NULL;
44
45 if (ret_limit_pool)
46 *ret_limit_pool = NULL;
47
48 return 0;
49 }
50
dmem_cgroup_uncharge(struct dmem_cgroup_pool_state * pool,u64 size)51 static inline void dmem_cgroup_uncharge(struct dmem_cgroup_pool_state *pool, u64 size)
52 { }
53
54 static inline
dmem_cgroup_state_evict_valuable(struct dmem_cgroup_pool_state * limit_pool,struct dmem_cgroup_pool_state * test_pool,bool ignore_low,bool * ret_hit_low)55 bool dmem_cgroup_state_evict_valuable(struct dmem_cgroup_pool_state *limit_pool,
56 struct dmem_cgroup_pool_state *test_pool,
57 bool ignore_low, bool *ret_hit_low)
58 {
59 return true;
60 }
61
dmem_cgroup_pool_state_put(struct dmem_cgroup_pool_state * pool)62 static inline void dmem_cgroup_pool_state_put(struct dmem_cgroup_pool_state *pool)
63 { }
64
65 #endif
66 #endif /* _CGROUP_DMEM_H */
67