Lines Matching refs:oc

70 static inline bool is_memcg_oom(struct oom_control *oc)
72 return oc->memcg != NULL;
79 * @oc: pointer to struct oom_control
89 struct oom_control *oc)
93 const nodemask_t *mask = oc->nodemask;
95 if (is_memcg_oom(oc))
123 static bool oom_cpuset_eligible(struct task_struct *tsk, struct oom_control *oc)
158 static inline bool is_sysrq_oom(struct oom_control *oc)
160 return oc->order == -1;
251 static enum oom_constraint constrained_alloc(struct oom_control *oc)
255 enum zone_type highest_zoneidx = gfp_zone(oc->gfp_mask);
259 if (is_memcg_oom(oc)) {
260 oc->totalpages = mem_cgroup_get_max(oc->memcg) ?: 1;
265 oc->totalpages = totalram_pages() + total_swap_pages;
270 if (!oc->zonelist)
277 if (oc->gfp_mask & __GFP_THISNODE)
285 if (oc->nodemask &&
286 !nodes_subset(node_states[N_MEMORY], *oc->nodemask)) {
287 oc->totalpages = total_swap_pages;
288 for_each_node_mask(nid, *oc->nodemask)
289 oc->totalpages += node_present_pages(nid);
294 for_each_zone_zonelist_nodemask(zone, z, oc->zonelist,
295 highest_zoneidx, oc->nodemask)
296 if (!cpuset_zone_allowed(zone, oc->gfp_mask))
300 oc->totalpages = total_swap_pages;
302 oc->totalpages += node_present_pages(nid);
310 struct oom_control *oc = arg;
317 if (!is_memcg_oom(oc) && !oom_cpuset_eligible(task, oc))
326 if (!is_sysrq_oom(oc) && tsk_is_oom_victim(task)) {
341 points = oom_badness(task, oc->totalpages);
342 if (points == LONG_MIN || points < oc->chosen_points)
346 if (oc->chosen)
347 put_task_struct(oc->chosen);
349 oc->chosen = task;
350 oc->chosen_points = points;
354 if (oc->chosen)
355 put_task_struct(oc->chosen);
356 oc->chosen = (void *)-1UL;
362 * 'points'. In case scan was aborted, oc->chosen is set to -1.
364 static void select_bad_process(struct oom_control *oc)
366 oc->chosen_points = LONG_MIN;
368 if (is_memcg_oom(oc))
369 mem_cgroup_scan_tasks(oc->memcg, oom_evaluate_task, oc);
375 if (oom_evaluate_task(p, oc))
383 struct oom_control *oc = arg;
390 if (!is_memcg_oom(oc) && !oom_cpuset_eligible(p, oc))
416 * @oc: pointer to struct oom_control
424 static void dump_tasks(struct oom_control *oc)
429 if (is_memcg_oom(oc))
430 mem_cgroup_scan_tasks(oc->memcg, dump_task, oc);
436 dump_task(p, oc);
441 static void dump_oom_summary(struct oom_control *oc, struct task_struct *victim)
445 oom_constraint_text[oc->constraint],
446 nodemask_pr_args(oc->nodemask));
448 mem_cgroup_print_oom_context(oc->memcg, victim);
453 static void dump_header(struct oom_control *oc, struct task_struct *p)
456 current->comm, oc->gfp_mask, &oc->gfp_mask, oc->order,
458 if (!IS_ENABLED(CONFIG_COMPACTION) && oc->order)
462 if (is_memcg_oom(oc))
463 mem_cgroup_print_oom_meminfo(oc->memcg);
465 show_mem(SHOW_MEM_FILTER_NODES, oc->nodemask);
470 dump_tasks(oc);
472 dump_oom_summary(oc, p);
981 static void oom_kill_process(struct oom_control *oc, const char *message)
983 struct task_struct *victim = oc->chosen;
1004 dump_header(oc, victim);
1011 oom_group = mem_cgroup_get_oom_group(victim, oc->memcg);
1029 static void check_panic_on_oom(struct oom_control *oc)
1039 if (oc->constraint != CONSTRAINT_NONE)
1043 if (is_sysrq_oom(oc))
1045 dump_header(oc, NULL);
1066 * @oc: pointer to struct oom_control
1073 bool out_of_memory(struct oom_control *oc)
1080 if (!is_memcg_oom(oc)) {
1105 if (oc->gfp_mask && !(oc->gfp_mask & __GFP_FS) && !is_memcg_oom(oc))
1112 oc->constraint = constrained_alloc(oc);
1113 if (oc->constraint != CONSTRAINT_MEMORY_POLICY)
1114 oc->nodemask = NULL;
1115 check_panic_on_oom(oc);
1117 if (!is_memcg_oom(oc) && sysctl_oom_kill_allocating_task &&
1119 oom_cpuset_eligible(current, oc) &&
1122 oc->chosen = current;
1123 oom_kill_process(oc, "Out of memory (oom_kill_allocating_task)");
1127 select_bad_process(oc);
1129 if (!oc->chosen) {
1130 dump_header(oc, NULL);
1137 if (!is_sysrq_oom(oc) && !is_memcg_oom(oc))
1140 if (oc->chosen && oc->chosen != (void *)-1UL)
1141 oom_kill_process(oc, !is_memcg_oom(oc) ? "Out of memory" :
1143 return !!oc->chosen;