vmpressure.h (1724B)
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 13struct 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 30struct mem_cgroup; 31 32#ifdef CONFIG_MEMCG 33extern void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, bool tree, 34 unsigned long scanned, unsigned long reclaimed); 35extern void vmpressure_prio(gfp_t gfp, struct mem_cgroup *memcg, int prio); 36 37extern void vmpressure_init(struct vmpressure *vmpr); 38extern void vmpressure_cleanup(struct vmpressure *vmpr); 39extern struct vmpressure *memcg_to_vmpressure(struct mem_cgroup *memcg); 40extern struct mem_cgroup *vmpressure_to_memcg(struct vmpressure *vmpr); 41extern int vmpressure_register_event(struct mem_cgroup *memcg, 42 struct eventfd_ctx *eventfd, 43 const char *args); 44extern void vmpressure_unregister_event(struct mem_cgroup *memcg, 45 struct eventfd_ctx *eventfd); 46#else 47static inline void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, bool tree, 48 unsigned long scanned, unsigned long reclaimed) {} 49static inline void vmpressure_prio(gfp_t gfp, struct mem_cgroup *memcg, 50 int prio) {} 51#endif /* CONFIG_MEMCG */ 52#endif /* __LINUX_VMPRESSURE_H */