0001
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
0020 spinlock_t sr_lock;
0021
0022
0023 struct list_head events;
0024
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
0052 #endif