summaryrefslogtreecommitdiffstats
path: root/mm/memcontrol.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r--mm/memcontrol.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 597d58101872..f3c15bb07cce 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -25,7 +25,7 @@
25#include <linux/page_counter.h> 25#include <linux/page_counter.h>
26#include <linux/memcontrol.h> 26#include <linux/memcontrol.h>
27#include <linux/cgroup.h> 27#include <linux/cgroup.h>
28#include <linux/mm.h> 28#include <linux/pagewalk.h>
29#include <linux/sched/mm.h> 29#include <linux/sched/mm.h>
30#include <linux/shmem_fs.h> 30#include <linux/shmem_fs.h>
31#include <linux/hugetlb.h> 31#include <linux/hugetlb.h>
@@ -5499,17 +5499,16 @@ static int mem_cgroup_count_precharge_pte_range(pmd_t *pmd,
5499 return 0; 5499 return 0;
5500} 5500}
5501 5501
5502static const struct mm_walk_ops precharge_walk_ops = {
5503 .pmd_entry = mem_cgroup_count_precharge_pte_range,
5504};
5505
5502static unsigned long mem_cgroup_count_precharge(struct mm_struct *mm) 5506static unsigned long mem_cgroup_count_precharge(struct mm_struct *mm)
5503{ 5507{
5504 unsigned long precharge; 5508 unsigned long precharge;
5505 5509
5506 struct mm_walk mem_cgroup_count_precharge_walk = {
5507 .pmd_entry = mem_cgroup_count_precharge_pte_range,
5508 .mm = mm,
5509 };
5510 down_read(&mm->mmap_sem); 5510 down_read(&mm->mmap_sem);
5511 walk_page_range(0, mm->highest_vm_end, 5511 walk_page_range(mm, 0, mm->highest_vm_end, &precharge_walk_ops, NULL);
5512 &mem_cgroup_count_precharge_walk);
5513 up_read(&mm->mmap_sem); 5512 up_read(&mm->mmap_sem);
5514 5513
5515 precharge = mc.precharge; 5514 precharge = mc.precharge;
@@ -5778,13 +5777,12 @@ put: /* get_mctgt_type() gets the page */
5778 return ret; 5777 return ret;
5779} 5778}
5780 5779
5780static const struct mm_walk_ops charge_walk_ops = {
5781 .pmd_entry = mem_cgroup_move_charge_pte_range,
5782};
5783
5781static void mem_cgroup_move_charge(void) 5784static void mem_cgroup_move_charge(void)
5782{ 5785{
5783 struct mm_walk mem_cgroup_move_charge_walk = {
5784 .pmd_entry = mem_cgroup_move_charge_pte_range,
5785 .mm = mc.mm,
5786 };
5787
5788 lru_add_drain_all(); 5786 lru_add_drain_all();
5789 /* 5787 /*
5790 * Signal lock_page_memcg() to take the memcg's move_lock 5788 * Signal lock_page_memcg() to take the memcg's move_lock
@@ -5810,7 +5808,8 @@ retry:
5810 * When we have consumed all precharges and failed in doing 5808 * When we have consumed all precharges and failed in doing
5811 * additional charge, the page walk just aborts. 5809 * additional charge, the page walk just aborts.
5812 */ 5810 */
5813 walk_page_range(0, mc.mm->highest_vm_end, &mem_cgroup_move_charge_walk); 5811 walk_page_range(mc.mm, 0, mc.mm->highest_vm_end, &charge_walk_ops,
5812 NULL);
5814 5813
5815 up_read(&mc.mm->mmap_sem); 5814 up_read(&mc.mm->mmap_sem);
5816 atomic_dec(&mc.from->moving_account); 5815 atomic_dec(&mc.from->moving_account);