diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2012-05-14 09:30:52 -0400 |
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2012-05-14 09:30:52 -0400 |
| commit | 4f5a9fd341e8ffd825ecf56155df6fe6c3d732b1 (patch) | |
| tree | ac23c7b80154a476db3882d92f079c50c919e2fa /mm | |
| parent | c818f97bc3266f0fbf619f2348d951272f8ac335 (diff) | |
| parent | a0f5e3631b07cabf624e7d818df76d47d9d21017 (diff) | |
Merge branch 'imx/pinctrl' into imx/clock
Conflicts:
drivers/mmc/host/sdhci-esdhc-imx.c
drivers/net/ethernet/freescale/fec.c
drivers/spi/spi-imx.c
drivers/tty/serial/imx.c
This resolves dependencies between the pinctrl and clock changes
in imx.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'mm')
| -rw-r--r-- | mm/hugetlb.c | 2 | ||||
| -rw-r--r-- | mm/memcontrol.c | 17 | ||||
| -rw-r--r-- | mm/mempolicy.c | 11 | ||||
| -rw-r--r-- | mm/migrate.c | 16 | ||||
| -rw-r--r-- | mm/nobootmem.c | 10 | ||||
| -rw-r--r-- | mm/swap_state.c | 2 | ||||
| -rw-r--r-- | mm/vmscan.c | 11 | ||||
| -rw-r--r-- | mm/vmstat.c | 4 |
8 files changed, 40 insertions, 33 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index cd65cb19c941..5a16423a512c 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
| @@ -532,7 +532,7 @@ static struct page *dequeue_huge_page_vma(struct hstate *h, | |||
| 532 | struct vm_area_struct *vma, | 532 | struct vm_area_struct *vma, |
| 533 | unsigned long address, int avoid_reserve) | 533 | unsigned long address, int avoid_reserve) |
| 534 | { | 534 | { |
| 535 | struct page *page; | 535 | struct page *page = NULL; |
| 536 | struct mempolicy *mpol; | 536 | struct mempolicy *mpol; |
| 537 | nodemask_t *nodemask; | 537 | nodemask_t *nodemask; |
| 538 | struct zonelist *zonelist; | 538 | struct zonelist *zonelist; |
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index b868def9bcc1..31ab9c3f0178 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
| @@ -2476,10 +2476,10 @@ struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page) | |||
| 2476 | static void __mem_cgroup_commit_charge(struct mem_cgroup *memcg, | 2476 | static void __mem_cgroup_commit_charge(struct mem_cgroup *memcg, |
| 2477 | struct page *page, | 2477 | struct page *page, |
| 2478 | unsigned int nr_pages, | 2478 | unsigned int nr_pages, |
| 2479 | struct page_cgroup *pc, | ||
| 2480 | enum charge_type ctype, | 2479 | enum charge_type ctype, |
| 2481 | bool lrucare) | 2480 | bool lrucare) |
| 2482 | { | 2481 | { |
| 2482 | struct page_cgroup *pc = lookup_page_cgroup(page); | ||
| 2483 | struct zone *uninitialized_var(zone); | 2483 | struct zone *uninitialized_var(zone); |
| 2484 | bool was_on_lru = false; | 2484 | bool was_on_lru = false; |
| 2485 | bool anon; | 2485 | bool anon; |
| @@ -2716,7 +2716,6 @@ static int mem_cgroup_charge_common(struct page *page, struct mm_struct *mm, | |||
| 2716 | { | 2716 | { |
| 2717 | struct mem_cgroup *memcg = NULL; | 2717 | struct mem_cgroup *memcg = NULL; |
| 2718 | unsigned int nr_pages = 1; | 2718 | unsigned int nr_pages = 1; |
| 2719 | struct page_cgroup *pc; | ||
| 2720 | bool oom = true; | 2719 | bool oom = true; |
| 2721 | int ret; | 2720 | int ret; |
| 2722 | 2721 | ||
| @@ -2730,11 +2729,10 @@ static int mem_cgroup_charge_common(struct page *page, struct mm_struct *mm, | |||
| 2730 | oom = false; | 2729 | oom = false; |
| 2731 | } | 2730 | } |
| 2732 | 2731 | ||
| 2733 | pc = lookup_page_cgroup(page); | ||
| 2734 | ret = __mem_cgroup_try_charge(mm, gfp_mask, nr_pages, &memcg, oom); | 2732 | ret = __mem_cgroup_try_charge(mm, gfp_mask, nr_pages, &memcg, oom); |
| 2735 | if (ret == -ENOMEM) | 2733 | if (ret == -ENOMEM) |
| 2736 | return ret; | 2734 | return ret; |
| 2737 | __mem_cgroup_commit_charge(memcg, page, nr_pages, pc, ctype, false); | 2735 | __mem_cgroup_commit_charge(memcg, page, nr_pages, ctype, false); |
| 2738 | return 0; | 2736 | return 0; |
| 2739 | } | 2737 | } |
| 2740 | 2738 | ||
| @@ -2831,16 +2829,13 @@ static void | |||
| 2831 | __mem_cgroup_commit_charge_swapin(struct page *page, struct mem_cgroup *memcg, | 2829 | __mem_cgroup_commit_charge_swapin(struct page *page, struct mem_cgroup *memcg, |
| 2832 | enum charge_type ctype) | 2830 | enum charge_type ctype) |
| 2833 | { | 2831 | { |
| 2834 | struct page_cgroup *pc; | ||
| 2835 | |||
| 2836 | if (mem_cgroup_disabled()) | 2832 | if (mem_cgroup_disabled()) |
| 2837 | return; | 2833 | return; |
| 2838 | if (!memcg) | 2834 | if (!memcg) |
| 2839 | return; | 2835 | return; |
| 2840 | cgroup_exclude_rmdir(&memcg->css); | 2836 | cgroup_exclude_rmdir(&memcg->css); |
| 2841 | 2837 | ||
| 2842 | pc = lookup_page_cgroup(page); | 2838 | __mem_cgroup_commit_charge(memcg, page, 1, ctype, true); |
| 2843 | __mem_cgroup_commit_charge(memcg, page, 1, pc, ctype, true); | ||
| 2844 | /* | 2839 | /* |
| 2845 | * Now swap is on-memory. This means this page may be | 2840 | * Now swap is on-memory. This means this page may be |
| 2846 | * counted both as mem and swap....double count. | 2841 | * counted both as mem and swap....double count. |
| @@ -3298,14 +3293,13 @@ int mem_cgroup_prepare_migration(struct page *page, | |||
| 3298 | * page. In the case new page is migrated but not remapped, new page's | 3293 | * page. In the case new page is migrated but not remapped, new page's |
| 3299 | * mapcount will be finally 0 and we call uncharge in end_migration(). | 3294 | * mapcount will be finally 0 and we call uncharge in end_migration(). |
| 3300 | */ | 3295 | */ |
| 3301 | pc = lookup_page_cgroup(newpage); | ||
| 3302 | if (PageAnon(page)) | 3296 | if (PageAnon(page)) |
| 3303 | ctype = MEM_CGROUP_CHARGE_TYPE_MAPPED; | 3297 | ctype = MEM_CGROUP_CHARGE_TYPE_MAPPED; |
| 3304 | else if (page_is_file_cache(page)) | 3298 | else if (page_is_file_cache(page)) |
| 3305 | ctype = MEM_CGROUP_CHARGE_TYPE_CACHE; | 3299 | ctype = MEM_CGROUP_CHARGE_TYPE_CACHE; |
| 3306 | else | 3300 | else |
| 3307 | ctype = MEM_CGROUP_CHARGE_TYPE_SHMEM; | 3301 | ctype = MEM_CGROUP_CHARGE_TYPE_SHMEM; |
| 3308 | __mem_cgroup_commit_charge(memcg, newpage, 1, pc, ctype, false); | 3302 | __mem_cgroup_commit_charge(memcg, newpage, 1, ctype, false); |
| 3309 | return ret; | 3303 | return ret; |
| 3310 | } | 3304 | } |
| 3311 | 3305 | ||
| @@ -3392,8 +3386,7 @@ void mem_cgroup_replace_page_cache(struct page *oldpage, | |||
| 3392 | * the newpage may be on LRU(or pagevec for LRU) already. We lock | 3386 | * the newpage may be on LRU(or pagevec for LRU) already. We lock |
| 3393 | * LRU while we overwrite pc->mem_cgroup. | 3387 | * LRU while we overwrite pc->mem_cgroup. |
| 3394 | */ | 3388 | */ |
| 3395 | pc = lookup_page_cgroup(newpage); | 3389 | __mem_cgroup_commit_charge(memcg, newpage, 1, type, true); |
| 3396 | __mem_cgroup_commit_charge(memcg, newpage, 1, pc, type, true); | ||
| 3397 | } | 3390 | } |
| 3398 | 3391 | ||
| 3399 | #ifdef CONFIG_DEBUG_VM | 3392 | #ifdef CONFIG_DEBUG_VM |
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index cfb6c8678754..b19569137529 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c | |||
| @@ -1361,11 +1361,14 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, | |||
| 1361 | 1361 | ||
| 1362 | mm = get_task_mm(task); | 1362 | mm = get_task_mm(task); |
| 1363 | put_task_struct(task); | 1363 | put_task_struct(task); |
| 1364 | if (mm) | 1364 | |
| 1365 | err = do_migrate_pages(mm, old, new, | 1365 | if (!mm) { |
| 1366 | capable(CAP_SYS_NICE) ? MPOL_MF_MOVE_ALL : MPOL_MF_MOVE); | ||
| 1367 | else | ||
| 1368 | err = -EINVAL; | 1366 | err = -EINVAL; |
| 1367 | goto out; | ||
| 1368 | } | ||
| 1369 | |||
| 1370 | err = do_migrate_pages(mm, old, new, | ||
| 1371 | capable(CAP_SYS_NICE) ? MPOL_MF_MOVE_ALL : MPOL_MF_MOVE); | ||
| 1369 | 1372 | ||
| 1370 | mmput(mm); | 1373 | mmput(mm); |
| 1371 | out: | 1374 | out: |
diff --git a/mm/migrate.c b/mm/migrate.c index 51c08a0c6f68..11072383ae12 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
| @@ -1388,14 +1388,14 @@ SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages, | |||
| 1388 | mm = get_task_mm(task); | 1388 | mm = get_task_mm(task); |
| 1389 | put_task_struct(task); | 1389 | put_task_struct(task); |
| 1390 | 1390 | ||
| 1391 | if (mm) { | 1391 | if (!mm) |
| 1392 | if (nodes) | 1392 | return -EINVAL; |
| 1393 | err = do_pages_move(mm, task_nodes, nr_pages, pages, | 1393 | |
| 1394 | nodes, status, flags); | 1394 | if (nodes) |
| 1395 | else | 1395 | err = do_pages_move(mm, task_nodes, nr_pages, pages, |
| 1396 | err = do_pages_stat(mm, nr_pages, pages, status); | 1396 | nodes, status, flags); |
| 1397 | } else | 1397 | else |
| 1398 | err = -EINVAL; | 1398 | err = do_pages_stat(mm, nr_pages, pages, status); |
| 1399 | 1399 | ||
| 1400 | mmput(mm); | 1400 | mmput(mm); |
| 1401 | return err; | 1401 | return err; |
diff --git a/mm/nobootmem.c b/mm/nobootmem.c index 24f0fc1a56d6..e53bb8a256b1 100644 --- a/mm/nobootmem.c +++ b/mm/nobootmem.c | |||
| @@ -298,13 +298,19 @@ void * __init __alloc_bootmem_node(pg_data_t *pgdat, unsigned long size, | |||
| 298 | if (WARN_ON_ONCE(slab_is_available())) | 298 | if (WARN_ON_ONCE(slab_is_available())) |
| 299 | return kzalloc_node(size, GFP_NOWAIT, pgdat->node_id); | 299 | return kzalloc_node(size, GFP_NOWAIT, pgdat->node_id); |
| 300 | 300 | ||
| 301 | again: | ||
| 301 | ptr = __alloc_memory_core_early(pgdat->node_id, size, align, | 302 | ptr = __alloc_memory_core_early(pgdat->node_id, size, align, |
| 302 | goal, -1ULL); | 303 | goal, -1ULL); |
| 303 | if (ptr) | 304 | if (ptr) |
| 304 | return ptr; | 305 | return ptr; |
| 305 | 306 | ||
| 306 | return __alloc_memory_core_early(MAX_NUMNODES, size, align, | 307 | ptr = __alloc_memory_core_early(MAX_NUMNODES, size, align, |
| 307 | goal, -1ULL); | 308 | goal, -1ULL); |
| 309 | if (!ptr && goal) { | ||
| 310 | goal = 0; | ||
| 311 | goto again; | ||
| 312 | } | ||
| 313 | return ptr; | ||
| 308 | } | 314 | } |
| 309 | 315 | ||
| 310 | void * __init __alloc_bootmem_node_high(pg_data_t *pgdat, unsigned long size, | 316 | void * __init __alloc_bootmem_node_high(pg_data_t *pgdat, unsigned long size, |
diff --git a/mm/swap_state.c b/mm/swap_state.c index 9d3dd3763cf7..4c5ff7f284d9 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | */ | 26 | */ |
| 27 | static const struct address_space_operations swap_aops = { | 27 | static const struct address_space_operations swap_aops = { |
| 28 | .writepage = swap_writepage, | 28 | .writepage = swap_writepage, |
| 29 | .set_page_dirty = __set_page_dirty_nobuffers, | 29 | .set_page_dirty = __set_page_dirty_no_writeback, |
| 30 | .migratepage = migrate_page, | 30 | .migratepage = migrate_page, |
| 31 | }; | 31 | }; |
| 32 | 32 | ||
diff --git a/mm/vmscan.c b/mm/vmscan.c index 1a518684a32f..33dc256033b5 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
| @@ -1568,9 +1568,14 @@ shrink_inactive_list(unsigned long nr_to_scan, struct mem_cgroup_zone *mz, | |||
| 1568 | reclaim_stat->recent_scanned[0] += nr_anon; | 1568 | reclaim_stat->recent_scanned[0] += nr_anon; |
| 1569 | reclaim_stat->recent_scanned[1] += nr_file; | 1569 | reclaim_stat->recent_scanned[1] += nr_file; |
| 1570 | 1570 | ||
| 1571 | if (current_is_kswapd()) | 1571 | if (global_reclaim(sc)) { |
| 1572 | __count_vm_events(KSWAPD_STEAL, nr_reclaimed); | 1572 | if (current_is_kswapd()) |
| 1573 | __count_zone_vm_events(PGSTEAL, zone, nr_reclaimed); | 1573 | __count_zone_vm_events(PGSTEAL_KSWAPD, zone, |
| 1574 | nr_reclaimed); | ||
| 1575 | else | ||
| 1576 | __count_zone_vm_events(PGSTEAL_DIRECT, zone, | ||
| 1577 | nr_reclaimed); | ||
| 1578 | } | ||
| 1574 | 1579 | ||
| 1575 | putback_inactive_pages(mz, &page_list); | 1580 | putback_inactive_pages(mz, &page_list); |
| 1576 | 1581 | ||
diff --git a/mm/vmstat.c b/mm/vmstat.c index f600557a7659..7db1b9bab492 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c | |||
| @@ -738,7 +738,8 @@ const char * const vmstat_text[] = { | |||
| 738 | "pgmajfault", | 738 | "pgmajfault", |
| 739 | 739 | ||
| 740 | TEXTS_FOR_ZONES("pgrefill") | 740 | TEXTS_FOR_ZONES("pgrefill") |
| 741 | TEXTS_FOR_ZONES("pgsteal") | 741 | TEXTS_FOR_ZONES("pgsteal_kswapd") |
| 742 | TEXTS_FOR_ZONES("pgsteal_direct") | ||
| 742 | TEXTS_FOR_ZONES("pgscan_kswapd") | 743 | TEXTS_FOR_ZONES("pgscan_kswapd") |
| 743 | TEXTS_FOR_ZONES("pgscan_direct") | 744 | TEXTS_FOR_ZONES("pgscan_direct") |
| 744 | 745 | ||
| @@ -747,7 +748,6 @@ const char * const vmstat_text[] = { | |||
| 747 | #endif | 748 | #endif |
| 748 | "pginodesteal", | 749 | "pginodesteal", |
| 749 | "slabs_scanned", | 750 | "slabs_scanned", |
| 750 | "kswapd_steal", | ||
| 751 | "kswapd_inodesteal", | 751 | "kswapd_inodesteal", |
| 752 | "kswapd_low_wmark_hit_quickly", | 752 | "kswapd_low_wmark_hit_quickly", |
| 753 | "kswapd_high_wmark_hit_quickly", | 753 | "kswapd_high_wmark_hit_quickly", |
