File: /Users/paulross/dev/linux/linux-3.13/include/linux/oom.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: #ifndef __INCLUDE_LINUX_OOM_H
       2: #define __INCLUDE_LINUX_OOM_H
       3: 
       4: 
       5: #include <linux/sched.h>
       6: #include <linux/types.h>
       7: #include <linux/nodemask.h>
       8: #include <uapi/linux/oom.h>
       9: 
      10: struct zonelist;
      11: struct notifier_block;
      12: struct mem_cgroup;
      13: struct task_struct;
      14: 
      15: /*
      16:  * Types of limitations to the nodes from which allocations may occur
      17:  */
      18: enum oom_constraint {
      19:     CONSTRAINT_NONE,
      20:     CONSTRAINT_CPUSET,
      21:     CONSTRAINT_MEMORY_POLICY,
      22:     CONSTRAINT_MEMCG,
      23: };
      24: 
      25: enum oom_scan_t {
      26:     OOM_SCAN_OK,        /* scan thread and find its badness */
      27:     OOM_SCAN_CONTINUE,    /* do not consider thread for oom kill */
      28:     OOM_SCAN_ABORT,        /* abort the iteration and return */
      29:     OOM_SCAN_SELECT,    /* always select this thread first */
      30: };
      31: 
      32: /* Thread is the potential origin of an oom condition; kill first on oom */
      33: #define OOM_FLAG_ORIGIN        ((__force oom_flags_t)0x1)
      34: 
      35: static inline void set_current_oom_origin(void)
      36: {
      37:     current->signal->oom_flags |= OOM_FLAG_ORIGIN;
      38: }
      39: 
      40: static inline void clear_current_oom_origin(void)
      41: {
      42:     current->signal->oom_flags &= ~OOM_FLAG_ORIGIN;
      43: }
      44: 
      45: static inline bool oom_task_origin(const struct task_struct *p)
      46: {
      47:     return !!(p->signal->oom_flags & OOM_FLAG_ORIGIN);
      48: }
      49: 
      50: extern unsigned long oom_badness(struct task_struct *p,
      51:         struct mem_cgroup *memcg, const nodemask_t *nodemask,
      52:         unsigned long totalpages);
      53: extern void oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order,
      54:                  unsigned int points, unsigned long totalpages,
      55:                  struct mem_cgroup *memcg, nodemask_t *nodemask,
      56:                  const char *message);
      57: 
      58: extern int try_set_zonelist_oom(struct zonelist *zonelist, gfp_t gfp_flags);
      59: extern void clear_zonelist_oom(struct zonelist *zonelist, gfp_t gfp_flags);
      60: 
      61: extern void check_panic_on_oom(enum oom_constraint constraint, gfp_t gfp_mask,
      62:                    int order, const nodemask_t *nodemask);
      63: 
      64: extern enum oom_scan_t oom_scan_process_thread(struct task_struct *task,
      65:         unsigned long totalpages, const nodemask_t *nodemask,
      66:         bool force_kill);
      67: 
      68: extern void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask,
      69:         int order, nodemask_t *mask, bool force_kill);
      70: extern int register_oom_notifier(struct notifier_block *nb);
      71: extern int unregister_oom_notifier(struct notifier_block *nb);
      72: 
      73: extern bool oom_killer_disabled;
      74: 
      75: static inline void oom_killer_disable(void)
      76: {
      77:     oom_killer_disabled = true;
      78: }
      79: 
      80: static inline void oom_killer_enable(void)
      81: {
      82:     oom_killer_disabled = false;
      83: }
      84: 
      85: static inline bool oom_gfp_allowed(gfp_t gfp_mask)
      86: {
      87:     return (gfp_mask & __GFP_FS) && !(gfp_mask & __GFP_NORETRY);
      88: }
      89: 
      90: extern struct task_struct *find_lock_task_mm(struct task_struct *p);
      91: 
      92: /* sysctls */
      93: extern int sysctl_oom_dump_tasks;
      94: extern int sysctl_oom_kill_allocating_task;
      95: extern int sysctl_panic_on_oom;
      96: #endif /* _INCLUDE_LINUX_OOM_H */
      97: