Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef __LINUX_VMPRESSURE_H
0003 #define __LINUX_VMPRESSURE_H
0004 
0005 #include <linux/mutex.h>
0006 #include <linux/list.h>
0007 #include <linux/workqueue.h>
0008 #include <linux/gfp.h>
0009 #include <linux/types.h>
0010 #include <linux/cgroup.h>
0011 #include <linux/eventfd.h>
0012 
0013 struct vmpressure {
0014     unsigned long scanned;
0015     unsigned long reclaimed;
0016 
0017     unsigned long tree_scanned;
0018     unsigned long tree_reclaimed;
0019     /* The lock is used to keep the scanned/reclaimed above in sync. */
0020     spinlock_t sr_lock;
0021 
0022     /* The list of vmpressure_event structs. */
0023     struct list_head events;
0024     /* Have to grab the lock on events traversal or modifications. */
0025     struct mutex events_lock;
0026 
0027     struct work_struct work;
0028 };
0029 
0030 struct mem_cgroup;
0031 
0032 #ifdef CONFIG_MEMCG
0033 extern void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, bool tree,
0034                unsigned long scanned, unsigned long reclaimed);
0035 extern void vmpressure_prio(gfp_t gfp, struct mem_cgroup *memcg, int prio);
0036 
0037 extern void vmpressure_init(struct vmpressure *vmpr);
0038 extern void vmpressure_cleanup(struct vmpressure *vmpr);
0039 extern struct vmpressure *memcg_to_vmpressure(struct mem_cgroup *memcg);
0040 extern struct mem_cgroup *vmpressure_to_memcg(struct vmpressure *vmpr);
0041 extern int vmpressure_register_event(struct mem_cgroup *memcg,
0042                      struct eventfd_ctx *eventfd,
0043                      const char *args);
0044 extern void vmpressure_unregister_event(struct mem_cgroup *memcg,
0045                     struct eventfd_ctx *eventfd);
0046 #else
0047 static inline void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, bool tree,
0048                   unsigned long scanned, unsigned long reclaimed) {}
0049 static inline void vmpressure_prio(gfp_t gfp, struct mem_cgroup *memcg,
0050                    int prio) {}
0051 #endif /* CONFIG_MEMCG */
0052 #endif /* __LINUX_VMPRESSURE_H */