random: Remove kernel blocking API
[firefly-linux-kernel-4.4.55.git] / mm / migrate.c
index 85e04268603143826e8cd80c533419feb221ad56..f53838fe3dfe6e84868b86eb98fedf7abd384ffb 100644 (file)
@@ -537,7 +537,8 @@ void migrate_page_copy(struct page *newpage, struct page *page)
         * Please do not reorder this without considering how mm/ksm.c's
         * get_ksm_page() depends upon ksm_migrate_page() and PageSwapCache().
         */
-       ClearPageSwapCache(page);
+       if (PageSwapCache(page))
+               ClearPageSwapCache(page);
        ClearPagePrivate(page);
        set_page_private(page, 0);
 
@@ -900,13 +901,24 @@ out:
        return rc;
 }
 
+/*
+ * gcc 4.7 and 4.8 on arm get an ICEs when inlining unmap_and_move().  Work
+ * around it.
+ */
+#if (GCC_VERSION >= 40700 && GCC_VERSION < 40900) && defined(CONFIG_ARM)
+#define ICE_noinline noinline
+#else
+#define ICE_noinline
+#endif
+
 /*
  * Obtain the lock on page, remove all ptes and migrate the page
  * to the newly allocated page in newpage.
  */
-static int unmap_and_move(new_page_t get_new_page, free_page_t put_new_page,
-                       unsigned long private, struct page *page, int force,
-                       enum migrate_mode mode)
+static ICE_noinline int unmap_and_move(new_page_t get_new_page,
+                                  free_page_t put_new_page,
+                                  unsigned long private, struct page *page,
+                                  int force, enum migrate_mode mode)
 {
        int rc = 0;
        int *result = NULL;
@@ -1554,30 +1566,10 @@ static struct page *alloc_misplaced_dst_page(struct page *page,
  * page migration rate limiting control.
  * Do not migrate more than @pages_to_migrate in a @migrate_interval_millisecs
  * window of time. Default here says do not migrate more than 1280M per second.
- * If a node is rate-limited then PTE NUMA updates are also rate-limited. However
- * as it is faults that reset the window, pte updates will happen unconditionally
- * if there has not been a fault since @pteupdate_interval_millisecs after the
- * throttle window closed.
  */
 static unsigned int migrate_interval_millisecs __read_mostly = 100;
-static unsigned int pteupdate_interval_millisecs __read_mostly = 1000;
 static unsigned int ratelimit_pages __read_mostly = 128 << (20 - PAGE_SHIFT);
 
-/* Returns true if NUMA migration is currently rate limited */
-bool migrate_ratelimited(int node)
-{
-       pg_data_t *pgdat = NODE_DATA(node);
-
-       if (time_after(jiffies, pgdat->numabalancing_migrate_next_window +
-                               msecs_to_jiffies(pteupdate_interval_millisecs)))
-               return false;
-
-       if (pgdat->numabalancing_migrate_nr_pages < ratelimit_pages)
-               return false;
-
-       return true;
-}
-
 /* Returns true if the node is migrate rate-limited after the update */
 static bool numamigrate_update_ratelimit(pg_data_t *pgdat,
                                        unsigned long nr_pages)