arm64: dts: qcom: msm8916: Simplify pinctrl configuration
[linux-2.6-microblaze.git] / mm / migrate.c
index fb425d8..f377296 100644 (file)
@@ -490,11 +490,18 @@ int migrate_page_move_mapping(struct address_space *mapping,
         * are mapped to swap space.
         */
        if (newzone != oldzone) {
-               __dec_node_state(oldzone->zone_pgdat, NR_FILE_PAGES);
-               __inc_node_state(newzone->zone_pgdat, NR_FILE_PAGES);
+               struct lruvec *old_lruvec, *new_lruvec;
+               struct mem_cgroup *memcg;
+
+               memcg = page_memcg(page);
+               old_lruvec = mem_cgroup_lruvec(memcg, oldzone->zone_pgdat);
+               new_lruvec = mem_cgroup_lruvec(memcg, newzone->zone_pgdat);
+
+               __dec_lruvec_state(old_lruvec, NR_FILE_PAGES);
+               __inc_lruvec_state(new_lruvec, NR_FILE_PAGES);
                if (PageSwapBacked(page) && !PageSwapCache(page)) {
-                       __dec_node_state(oldzone->zone_pgdat, NR_SHMEM);
-                       __inc_node_state(newzone->zone_pgdat, NR_SHMEM);
+                       __dec_lruvec_state(old_lruvec, NR_SHMEM);
+                       __inc_lruvec_state(new_lruvec, NR_SHMEM);
                }
                if (dirty && mapping_cap_account_dirty(mapping)) {
                        __dec_node_state(oldzone->zone_pgdat, NR_FILE_DIRTY);
@@ -798,7 +805,6 @@ recheck_buffers:
                goto unlock_buffers;
 
        attach_page_private(newpage, detach_page_private(page));
-       get_page(newpage);
 
        bh = head;
        do {
@@ -1549,7 +1555,7 @@ static int add_page_for_migration(struct mm_struct *mm, unsigned long addr,
        unsigned int follflags;
        int err;
 
-       down_read(&mm->mmap_sem);
+       mmap_read_lock(mm);
        err = -EFAULT;
        vma = find_vma(mm, addr);
        if (!vma || addr < vma->vm_start || !vma_migratable(vma))
@@ -1602,7 +1608,7 @@ out_putpage:
         */
        put_page(page);
 out:
-       up_read(&mm->mmap_sem);
+       mmap_read_unlock(mm);
        return err;
 }
 
@@ -1727,7 +1733,7 @@ static void do_pages_stat_array(struct mm_struct *mm, unsigned long nr_pages,
 {
        unsigned long i;
 
-       down_read(&mm->mmap_sem);
+       mmap_read_lock(mm);
 
        for (i = 0; i < nr_pages; i++) {
                unsigned long addr = (unsigned long)(*pages);
@@ -1754,7 +1760,7 @@ set_status:
                status++;
        }
 
-       up_read(&mm->mmap_sem);
+       mmap_read_unlock(mm);
 }
 
 /*
@@ -2114,7 +2120,7 @@ int migrate_misplaced_transhuge_page(struct mm_struct *mm,
         * pmd before doing set_pmd_at(), nor to flush the TLB after
         * set_pmd_at().  Clearing the pmd here would introduce a race
         * condition against MADV_DONTNEED, because MADV_DONTNEED only holds the
-        * mmap_sem for reading.  If the pmd is set to NULL at any given time,
+        * mmap_lock for reading.  If the pmd is set to NULL at any given time,
         * MADV_DONTNEED won't wait on the pmd lock and it'll skip clearing this
         * pmd.
         */
@@ -2669,7 +2675,7 @@ restore:
  * have the MIGRATE_PFN_MIGRATE flag set for their src array entry.
  *
  * It is safe to update device page table after migrate_vma_pages() because
- * both destination and source page are still locked, and the mmap_sem is held
+ * both destination and source page are still locked, and the mmap_lock is held
  * in read mode (hence no one can unmap the range being migrated).
  *
  * Once the caller is done cleaning up things and updating its page table (if it
@@ -2734,7 +2740,6 @@ static void migrate_vma_insert_page(struct migrate_vma *migrate,
 {
        struct vm_area_struct *vma = migrate->vma;
        struct mm_struct *mm = vma->vm_mm;
-       struct mem_cgroup *memcg;
        bool flush = false;
        spinlock_t *ptl;
        pte_t entry;
@@ -2767,10 +2772,10 @@ static void migrate_vma_insert_page(struct migrate_vma *migrate,
         * pte_offset_map() on pmds where a huge pmd might be created
         * from a different thread.
         *
-        * pte_alloc_map() is safe to use under down_write(mmap_sem) or when
+        * pte_alloc_map() is safe to use under mmap_write_lock(mm) or when
         * parallel threads are excluded by other means.
         *
-        * Here we only have down_read(mmap_sem).
+        * Here we only have mmap_read_lock(mm).
         */
        if (pte_alloc(mm, pmdp))
                goto abort;
@@ -2781,7 +2786,7 @@ static void migrate_vma_insert_page(struct migrate_vma *migrate,
 
        if (unlikely(anon_vma_prepare(vma)))
                goto abort;
-       if (mem_cgroup_try_charge(page, vma->vm_mm, GFP_KERNEL, &memcg, false))
+       if (mem_cgroup_charge(page, vma->vm_mm, GFP_KERNEL))
                goto abort;
 
        /*
@@ -2827,7 +2832,6 @@ static void migrate_vma_insert_page(struct migrate_vma *migrate,
 
        inc_mm_counter(mm, MM_ANONPAGES);
        page_add_new_anon_rmap(page, vma, addr, false);
-       mem_cgroup_commit_charge(page, memcg, false, false);
        if (!is_zone_device_page(page))
                lru_cache_add_active_or_unevictable(page, vma);
        get_page(page);
@@ -2849,7 +2853,6 @@ static void migrate_vma_insert_page(struct migrate_vma *migrate,
 
 unlock_abort:
        pte_unmap_unlock(ptep, ptl);
-       mem_cgroup_cancel_charge(page, memcg, false);
 abort:
        *src &= ~MIGRATE_PFN_MIGRATE;
 }