Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */ 2 : : #ifndef __LINUX_VMPRESSURE_H 3 : : #define __LINUX_VMPRESSURE_H 4 : : 5 : : #include <linux/mutex.h> 6 : : #include <linux/list.h> 7 : : #include <linux/workqueue.h> 8 : : #include <linux/gfp.h> 9 : : #include <linux/types.h> 10 : : #include <linux/cgroup.h> 11 : : #include <linux/eventfd.h> 12 : : 13 : : struct vmpressure { 14 : : unsigned long scanned; 15 : : unsigned long reclaimed; 16 : : 17 : : unsigned long tree_scanned; 18 : : unsigned long tree_reclaimed; 19 : : /* The lock is used to keep the scanned/reclaimed above in sync. */ 20 : : spinlock_t sr_lock; 21 : : 22 : : /* The list of vmpressure_event structs. */ 23 : : struct list_head events; 24 : : /* Have to grab the lock on events traversal or modifications. */ 25 : : struct mutex events_lock; 26 : : 27 : : struct work_struct work; 28 : : }; 29 : : 30 : : struct mem_cgroup; 31 : : 32 : : #ifdef CONFIG_MEMCG 33 : : extern void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, bool tree, 34 : : unsigned long scanned, unsigned long reclaimed); 35 : : extern void vmpressure_prio(gfp_t gfp, struct mem_cgroup *memcg, int prio); 36 : : 37 : : extern void vmpressure_init(struct vmpressure *vmpr); 38 : : extern void vmpressure_cleanup(struct vmpressure *vmpr); 39 : : extern struct vmpressure *memcg_to_vmpressure(struct mem_cgroup *memcg); 40 : : extern struct cgroup_subsys_state *vmpressure_to_css(struct vmpressure *vmpr); 41 : : extern int vmpressure_register_event(struct mem_cgroup *memcg, 42 : : struct eventfd_ctx *eventfd, 43 : : const char *args); 44 : : extern void vmpressure_unregister_event(struct mem_cgroup *memcg, 45 : : struct eventfd_ctx *eventfd); 46 : : #else 47 : 0 : static inline void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, bool tree, 48 [ # # ]: 0 : unsigned long scanned, unsigned long reclaimed) {} 49 : 0 : static inline void vmpressure_prio(gfp_t gfp, struct mem_cgroup *memcg, 50 : 0 : int prio) {} 51 : : #endif /* CONFIG_MEMCG */ 52 : : #endif /* __LINUX_VMPRESSURE_H */