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