1 /* SPDX-License-Identifier: GPL-2.0 */ << 2 #ifndef __LINUX_VMPRESSURE_H 1 #ifndef __LINUX_VMPRESSURE_H 3 #define __LINUX_VMPRESSURE_H 2 #define __LINUX_VMPRESSURE_H 4 3 5 #include <linux/mutex.h> 4 #include <linux/mutex.h> 6 #include <linux/list.h> 5 #include <linux/list.h> 7 #include <linux/workqueue.h> 6 #include <linux/workqueue.h> 8 #include <linux/gfp.h> 7 #include <linux/gfp.h> 9 #include <linux/types.h> 8 #include <linux/types.h> 10 #include <linux/cgroup.h> 9 #include <linux/cgroup.h> 11 #include <linux/eventfd.h> << 12 10 13 struct vmpressure { 11 struct vmpressure { 14 unsigned long scanned; 12 unsigned long scanned; 15 unsigned long reclaimed; 13 unsigned long reclaimed; 16 << 17 unsigned long tree_scanned; << 18 unsigned long tree_reclaimed; << 19 /* The lock is used to keep the scanne 14 /* The lock is used to keep the scanned/reclaimed above in sync. */ 20 spinlock_t sr_lock; !! 15 struct mutex sr_lock; 21 16 22 /* The list of vmpressure_event struct 17 /* The list of vmpressure_event structs. */ 23 struct list_head events; 18 struct list_head events; 24 /* Have to grab the lock on events tra 19 /* Have to grab the lock on events traversal or modifications. */ 25 struct mutex events_lock; 20 struct mutex events_lock; 26 21 27 struct work_struct work; 22 struct work_struct work; 28 }; 23 }; 29 24 30 struct mem_cgroup; 25 struct mem_cgroup; 31 26 32 #ifdef CONFIG_MEMCG 27 #ifdef CONFIG_MEMCG 33 extern void vmpressure(gfp_t gfp, struct mem_c !! 28 extern void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, 34 unsigned long scanned, 29 unsigned long scanned, unsigned long reclaimed); 35 extern void vmpressure_prio(gfp_t gfp, struct 30 extern void vmpressure_prio(gfp_t gfp, struct mem_cgroup *memcg, int prio); 36 31 37 extern void vmpressure_init(struct vmpressure 32 extern void vmpressure_init(struct vmpressure *vmpr); 38 extern void vmpressure_cleanup(struct vmpressu << 39 extern struct vmpressure *memcg_to_vmpressure( 33 extern struct vmpressure *memcg_to_vmpressure(struct mem_cgroup *memcg); 40 extern struct mem_cgroup *vmpressure_to_memcg( !! 34 extern struct cgroup_subsys_state *vmpressure_to_css(struct vmpressure *vmpr); 41 extern int vmpressure_register_event(struct me !! 35 extern struct vmpressure *css_to_vmpressure(struct cgroup_subsys_state *css); >> 36 extern int vmpressure_register_event(struct cgroup *cg, struct cftype *cft, 42 struct ev 37 struct eventfd_ctx *eventfd, 43 const cha 38 const char *args); 44 extern void vmpressure_unregister_event(struct !! 39 extern void vmpressure_unregister_event(struct cgroup *cg, struct cftype *cft, 45 struct 40 struct eventfd_ctx *eventfd); 46 #else 41 #else 47 static inline void vmpressure(gfp_t gfp, struc !! 42 static inline void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, 48 unsigned long sc 43 unsigned long scanned, unsigned long reclaimed) {} 49 static inline void vmpressure_prio(gfp_t gfp, 44 static inline void vmpressure_prio(gfp_t gfp, struct mem_cgroup *memcg, 50 int prio) { 45 int prio) {} 51 #endif /* CONFIG_MEMCG */ 46 #endif /* CONFIG_MEMCG */ 52 #endif /* __LINUX_VMPRESSURE_H */ 47 #endif /* __LINUX_VMPRESSURE_H */ 53 48
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.