at v3.10 47 lines 1.6 kB view raw
1#ifndef __LINUX_VMPRESSURE_H 2#define __LINUX_VMPRESSURE_H 3 4#include <linux/mutex.h> 5#include <linux/list.h> 6#include <linux/workqueue.h> 7#include <linux/gfp.h> 8#include <linux/types.h> 9#include <linux/cgroup.h> 10 11struct vmpressure { 12 unsigned long scanned; 13 unsigned long reclaimed; 14 /* The lock is used to keep the scanned/reclaimed above in sync. */ 15 struct mutex sr_lock; 16 17 /* The list of vmpressure_event structs. */ 18 struct list_head events; 19 /* Have to grab the lock on events traversal or modifications. */ 20 struct mutex events_lock; 21 22 struct work_struct work; 23}; 24 25struct mem_cgroup; 26 27#ifdef CONFIG_MEMCG 28extern void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, 29 unsigned long scanned, unsigned long reclaimed); 30extern void vmpressure_prio(gfp_t gfp, struct mem_cgroup *memcg, int prio); 31 32extern void vmpressure_init(struct vmpressure *vmpr); 33extern struct vmpressure *memcg_to_vmpressure(struct mem_cgroup *memcg); 34extern struct cgroup_subsys_state *vmpressure_to_css(struct vmpressure *vmpr); 35extern struct vmpressure *css_to_vmpressure(struct cgroup_subsys_state *css); 36extern int vmpressure_register_event(struct cgroup *cg, struct cftype *cft, 37 struct eventfd_ctx *eventfd, 38 const char *args); 39extern void vmpressure_unregister_event(struct cgroup *cg, struct cftype *cft, 40 struct eventfd_ctx *eventfd); 41#else 42static inline void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, 43 unsigned long scanned, unsigned long reclaimed) {} 44static inline void vmpressure_prio(gfp_t gfp, struct mem_cgroup *memcg, 45 int prio) {} 46#endif /* CONFIG_MEMCG */ 47#endif /* __LINUX_VMPRESSURE_H */