linux/include/linux/vmpressure.h
<<
>>
Prefs
   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        struct spinlock 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 cgroup_subsys_state *vmpressure_to_css(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 */
  53