KVM: x86: Clear apic tsc-deadline after deadline
[sfrench/cifs-2.6.git] / mm / oom_kill.c
index 3291e82d4352423cb1cd747eaa589da4b8a07a74..1e11df8fa7ecaecd274a3d0aaa1fe0aea4bb38ab 100644 (file)
@@ -258,8 +258,6 @@ enum oom_scan_t oom_scan_process_thread(struct task_struct *task,
                unsigned long totalpages, const nodemask_t *nodemask,
                bool force_kill)
 {
-       if (task->exit_state)
-               return OOM_SCAN_CONTINUE;
        if (oom_unkillable_task(task, NULL, nodemask))
                return OOM_SCAN_CONTINUE;
 
@@ -559,28 +557,25 @@ EXPORT_SYMBOL_GPL(unregister_oom_notifier);
  * if a parallel OOM killing is already taking place that includes a zone in
  * the zonelist.  Otherwise, locks all zones in the zonelist and returns 1.
  */
-int try_set_zonelist_oom(struct zonelist *zonelist, gfp_t gfp_mask)
+bool oom_zonelist_trylock(struct zonelist *zonelist, gfp_t gfp_mask)
 {
        struct zoneref *z;
        struct zone *zone;
-       int ret = 1;
+       bool ret = true;
 
        spin_lock(&zone_scan_lock);
-       for_each_zone_zonelist(zone, z, zonelist, gfp_zone(gfp_mask)) {
+       for_each_zone_zonelist(zone, z, zonelist, gfp_zone(gfp_mask))
                if (zone_is_oom_locked(zone)) {
-                       ret = 0;
+                       ret = false;
                        goto out;
                }
-       }
 
-       for_each_zone_zonelist(zone, z, zonelist, gfp_zone(gfp_mask)) {
-               /*
-                * Lock each zone in the zonelist under zone_scan_lock so a
-                * parallel invocation of try_set_zonelist_oom() doesn't succeed
-                * when it shouldn't.
-                */
+       /*
+        * Lock each zone in the zonelist under zone_scan_lock so a parallel
+        * call to oom_zonelist_trylock() doesn't succeed when it shouldn't.
+        */
+       for_each_zone_zonelist(zone, z, zonelist, gfp_zone(gfp_mask))
                zone_set_flag(zone, ZONE_OOM_LOCKED);
-       }
 
 out:
        spin_unlock(&zone_scan_lock);
@@ -592,15 +587,14 @@ out:
  * allocation attempts with zonelists containing them may now recall the OOM
  * killer, if necessary.
  */
-void clear_zonelist_oom(struct zonelist *zonelist, gfp_t gfp_mask)
+void oom_zonelist_unlock(struct zonelist *zonelist, gfp_t gfp_mask)
 {
        struct zoneref *z;
        struct zone *zone;
 
        spin_lock(&zone_scan_lock);
-       for_each_zone_zonelist(zone, z, zonelist, gfp_zone(gfp_mask)) {
+       for_each_zone_zonelist(zone, z, zonelist, gfp_zone(gfp_mask))
                zone_clear_flag(zone, ZONE_OOM_LOCKED);
-       }
        spin_unlock(&zone_scan_lock);
 }
 
@@ -694,9 +688,9 @@ void pagefault_out_of_memory(void)
        if (mem_cgroup_oom_synchronize(true))
                return;
 
-       zonelist = node_zonelist(first_online_node, GFP_KERNEL);
-       if (try_set_zonelist_oom(zonelist, GFP_KERNEL)) {
+       zonelist = node_zonelist(first_memory_node, GFP_KERNEL);
+       if (oom_zonelist_trylock(zonelist, GFP_KERNEL)) {
                out_of_memory(NULL, 0, 0, NULL, false);
-               clear_zonelist_oom(zonelist, GFP_KERNEL);
+               oom_zonelist_unlock(zonelist, GFP_KERNEL);
        }
 }