diff options
author | Arnd Bergmann <arnd@arndb.de> | 2012-05-02 11:07:03 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2012-05-02 11:07:03 -0400 |
commit | ced62c33fc434b9d44118c9f35803af8088cc3fe (patch) | |
tree | 34d1145899e0e5853c4d5b45162f86bbe46941ea /mm | |
parent | 3ff80abce7d0d3c1eacda53e73c94a57ade2e0a5 (diff) | |
parent | 6838e601e6dc63440fd4315c1c2f3a2ef4ccdd6e (diff) |
Merge tag 'imx-cleanup' of git://git.pengutronix.de/git/imx/linux-2.6 into next/cleanup
From: Sascha Hauer <s.hauer@pengutronix.de>
ARM: i.MX cleanups for 3.5
* tag 'imx-cleanup' of git://git.pengutronix.de/git/imx/linux-2.6: (5 commits)
ARM: mx53: fix pad definitions for MX53_PAD_EIM_D28__I2C1_SDA and MX53_PAD_GPIO_8__CAN1_RXCAN
ARM: imx/eukrea_mbimx27-baseboard: fix typo in error message
ARM: i.MX51 iomux: add missed definitions for SION-bit and mode for some pads
arm: imx: add missing select IMX_HAVE_PLATFORM for MACH_MX35_3DS in Kconfig
arm: imx: make various struct sys_timer static
Includes an update to 3.4-rc4
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/memblock.c | 7 | ||||
-rw-r--r-- | mm/memcontrol.c | 1 | ||||
-rw-r--r-- | mm/mmap.c | 59 | ||||
-rw-r--r-- | mm/nommu.c | 41 |
4 files changed, 93 insertions, 15 deletions
diff --git a/mm/memblock.c b/mm/memblock.c index 99f285599501..a44eab3157f8 100644 --- a/mm/memblock.c +++ b/mm/memblock.c | |||
@@ -330,6 +330,9 @@ static int __init_memblock memblock_add_region(struct memblock_type *type, | |||
330 | phys_addr_t end = base + memblock_cap_size(base, &size); | 330 | phys_addr_t end = base + memblock_cap_size(base, &size); |
331 | int i, nr_new; | 331 | int i, nr_new; |
332 | 332 | ||
333 | if (!size) | ||
334 | return 0; | ||
335 | |||
333 | /* special case for empty array */ | 336 | /* special case for empty array */ |
334 | if (type->regions[0].size == 0) { | 337 | if (type->regions[0].size == 0) { |
335 | WARN_ON(type->cnt != 1 || type->total_size); | 338 | WARN_ON(type->cnt != 1 || type->total_size); |
@@ -430,6 +433,9 @@ static int __init_memblock memblock_isolate_range(struct memblock_type *type, | |||
430 | 433 | ||
431 | *start_rgn = *end_rgn = 0; | 434 | *start_rgn = *end_rgn = 0; |
432 | 435 | ||
436 | if (!size) | ||
437 | return 0; | ||
438 | |||
433 | /* we'll create at most two more regions */ | 439 | /* we'll create at most two more regions */ |
434 | while (type->cnt + 2 > type->max) | 440 | while (type->cnt + 2 > type->max) |
435 | if (memblock_double_array(type) < 0) | 441 | if (memblock_double_array(type) < 0) |
@@ -514,7 +520,6 @@ int __init_memblock memblock_reserve(phys_addr_t base, phys_addr_t size) | |||
514 | (unsigned long long)base, | 520 | (unsigned long long)base, |
515 | (unsigned long long)base + size, | 521 | (unsigned long long)base + size, |
516 | (void *)_RET_IP_); | 522 | (void *)_RET_IP_); |
517 | BUG_ON(0 == size); | ||
518 | 523 | ||
519 | return memblock_add_region(_rgn, base, size, MAX_NUMNODES); | 524 | return memblock_add_region(_rgn, base, size, MAX_NUMNODES); |
520 | } | 525 | } |
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index a7165a60d0a7..b868def9bcc1 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -3392,6 +3392,7 @@ void mem_cgroup_replace_page_cache(struct page *oldpage, | |||
3392 | * the newpage may be on LRU(or pagevec for LRU) already. We lock | 3392 | * the newpage may be on LRU(or pagevec for LRU) already. We lock |
3393 | * LRU while we overwrite pc->mem_cgroup. | 3393 | * LRU while we overwrite pc->mem_cgroup. |
3394 | */ | 3394 | */ |
3395 | pc = lookup_page_cgroup(newpage); | ||
3395 | __mem_cgroup_commit_charge(memcg, newpage, 1, pc, type, true); | 3396 | __mem_cgroup_commit_charge(memcg, newpage, 1, pc, type, true); |
3396 | } | 3397 | } |
3397 | 3398 | ||
@@ -240,6 +240,8 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma) | |||
240 | return next; | 240 | return next; |
241 | } | 241 | } |
242 | 242 | ||
243 | static unsigned long do_brk(unsigned long addr, unsigned long len); | ||
244 | |||
243 | SYSCALL_DEFINE1(brk, unsigned long, brk) | 245 | SYSCALL_DEFINE1(brk, unsigned long, brk) |
244 | { | 246 | { |
245 | unsigned long rlim, retval; | 247 | unsigned long rlim, retval; |
@@ -951,7 +953,7 @@ static inline unsigned long round_hint_to_min(unsigned long hint) | |||
951 | * The caller must hold down_write(¤t->mm->mmap_sem). | 953 | * The caller must hold down_write(¤t->mm->mmap_sem). |
952 | */ | 954 | */ |
953 | 955 | ||
954 | unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, | 956 | static unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, |
955 | unsigned long len, unsigned long prot, | 957 | unsigned long len, unsigned long prot, |
956 | unsigned long flags, unsigned long pgoff) | 958 | unsigned long flags, unsigned long pgoff) |
957 | { | 959 | { |
@@ -1087,7 +1089,32 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, | |||
1087 | 1089 | ||
1088 | return mmap_region(file, addr, len, flags, vm_flags, pgoff); | 1090 | return mmap_region(file, addr, len, flags, vm_flags, pgoff); |
1089 | } | 1091 | } |
1090 | EXPORT_SYMBOL(do_mmap_pgoff); | 1092 | |
1093 | unsigned long do_mmap(struct file *file, unsigned long addr, | ||
1094 | unsigned long len, unsigned long prot, | ||
1095 | unsigned long flag, unsigned long offset) | ||
1096 | { | ||
1097 | if (unlikely(offset + PAGE_ALIGN(len) < offset)) | ||
1098 | return -EINVAL; | ||
1099 | if (unlikely(offset & ~PAGE_MASK)) | ||
1100 | return -EINVAL; | ||
1101 | return do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT); | ||
1102 | } | ||
1103 | EXPORT_SYMBOL(do_mmap); | ||
1104 | |||
1105 | unsigned long vm_mmap(struct file *file, unsigned long addr, | ||
1106 | unsigned long len, unsigned long prot, | ||
1107 | unsigned long flag, unsigned long offset) | ||
1108 | { | ||
1109 | unsigned long ret; | ||
1110 | struct mm_struct *mm = current->mm; | ||
1111 | |||
1112 | down_write(&mm->mmap_sem); | ||
1113 | ret = do_mmap(file, addr, len, prot, flag, offset); | ||
1114 | up_write(&mm->mmap_sem); | ||
1115 | return ret; | ||
1116 | } | ||
1117 | EXPORT_SYMBOL(vm_mmap); | ||
1091 | 1118 | ||
1092 | SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, | 1119 | SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, |
1093 | unsigned long, prot, unsigned long, flags, | 1120 | unsigned long, prot, unsigned long, flags, |
@@ -2105,21 +2132,25 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len) | |||
2105 | 2132 | ||
2106 | return 0; | 2133 | return 0; |
2107 | } | 2134 | } |
2108 | |||
2109 | EXPORT_SYMBOL(do_munmap); | 2135 | EXPORT_SYMBOL(do_munmap); |
2110 | 2136 | ||
2111 | SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) | 2137 | int vm_munmap(unsigned long start, size_t len) |
2112 | { | 2138 | { |
2113 | int ret; | 2139 | int ret; |
2114 | struct mm_struct *mm = current->mm; | 2140 | struct mm_struct *mm = current->mm; |
2115 | 2141 | ||
2116 | profile_munmap(addr); | ||
2117 | |||
2118 | down_write(&mm->mmap_sem); | 2142 | down_write(&mm->mmap_sem); |
2119 | ret = do_munmap(mm, addr, len); | 2143 | ret = do_munmap(mm, start, len); |
2120 | up_write(&mm->mmap_sem); | 2144 | up_write(&mm->mmap_sem); |
2121 | return ret; | 2145 | return ret; |
2122 | } | 2146 | } |
2147 | EXPORT_SYMBOL(vm_munmap); | ||
2148 | |||
2149 | SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) | ||
2150 | { | ||
2151 | profile_munmap(addr); | ||
2152 | return vm_munmap(addr, len); | ||
2153 | } | ||
2123 | 2154 | ||
2124 | static inline void verify_mm_writelocked(struct mm_struct *mm) | 2155 | static inline void verify_mm_writelocked(struct mm_struct *mm) |
2125 | { | 2156 | { |
@@ -2136,7 +2167,7 @@ static inline void verify_mm_writelocked(struct mm_struct *mm) | |||
2136 | * anonymous maps. eventually we may be able to do some | 2167 | * anonymous maps. eventually we may be able to do some |
2137 | * brk-specific accounting here. | 2168 | * brk-specific accounting here. |
2138 | */ | 2169 | */ |
2139 | unsigned long do_brk(unsigned long addr, unsigned long len) | 2170 | static unsigned long do_brk(unsigned long addr, unsigned long len) |
2140 | { | 2171 | { |
2141 | struct mm_struct * mm = current->mm; | 2172 | struct mm_struct * mm = current->mm; |
2142 | struct vm_area_struct * vma, * prev; | 2173 | struct vm_area_struct * vma, * prev; |
@@ -2232,7 +2263,17 @@ out: | |||
2232 | return addr; | 2263 | return addr; |
2233 | } | 2264 | } |
2234 | 2265 | ||
2235 | EXPORT_SYMBOL(do_brk); | 2266 | unsigned long vm_brk(unsigned long addr, unsigned long len) |
2267 | { | ||
2268 | struct mm_struct *mm = current->mm; | ||
2269 | unsigned long ret; | ||
2270 | |||
2271 | down_write(&mm->mmap_sem); | ||
2272 | ret = do_brk(addr, len); | ||
2273 | up_write(&mm->mmap_sem); | ||
2274 | return ret; | ||
2275 | } | ||
2276 | EXPORT_SYMBOL(vm_brk); | ||
2236 | 2277 | ||
2237 | /* Release all mmaps. */ | 2278 | /* Release all mmaps. */ |
2238 | void exit_mmap(struct mm_struct *mm) | 2279 | void exit_mmap(struct mm_struct *mm) |
diff --git a/mm/nommu.c b/mm/nommu.c index f59e170fceb4..bb8f4f004a82 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
@@ -1233,7 +1233,7 @@ enomem: | |||
1233 | /* | 1233 | /* |
1234 | * handle mapping creation for uClinux | 1234 | * handle mapping creation for uClinux |
1235 | */ | 1235 | */ |
1236 | unsigned long do_mmap_pgoff(struct file *file, | 1236 | static unsigned long do_mmap_pgoff(struct file *file, |
1237 | unsigned long addr, | 1237 | unsigned long addr, |
1238 | unsigned long len, | 1238 | unsigned long len, |
1239 | unsigned long prot, | 1239 | unsigned long prot, |
@@ -1470,7 +1470,32 @@ error_getting_region: | |||
1470 | show_free_areas(0); | 1470 | show_free_areas(0); |
1471 | return -ENOMEM; | 1471 | return -ENOMEM; |
1472 | } | 1472 | } |
1473 | EXPORT_SYMBOL(do_mmap_pgoff); | 1473 | |
1474 | unsigned long do_mmap(struct file *file, unsigned long addr, | ||
1475 | unsigned long len, unsigned long prot, | ||
1476 | unsigned long flag, unsigned long offset) | ||
1477 | { | ||
1478 | if (unlikely(offset + PAGE_ALIGN(len) < offset)) | ||
1479 | return -EINVAL; | ||
1480 | if (unlikely(offset & ~PAGE_MASK)) | ||
1481 | return -EINVAL; | ||
1482 | return do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT); | ||
1483 | } | ||
1484 | EXPORT_SYMBOL(do_mmap); | ||
1485 | |||
1486 | unsigned long vm_mmap(struct file *file, unsigned long addr, | ||
1487 | unsigned long len, unsigned long prot, | ||
1488 | unsigned long flag, unsigned long offset) | ||
1489 | { | ||
1490 | unsigned long ret; | ||
1491 | struct mm_struct *mm = current->mm; | ||
1492 | |||
1493 | down_write(&mm->mmap_sem); | ||
1494 | ret = do_mmap(file, addr, len, prot, flag, offset); | ||
1495 | up_write(&mm->mmap_sem); | ||
1496 | return ret; | ||
1497 | } | ||
1498 | EXPORT_SYMBOL(vm_mmap); | ||
1474 | 1499 | ||
1475 | SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, | 1500 | SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, |
1476 | unsigned long, prot, unsigned long, flags, | 1501 | unsigned long, prot, unsigned long, flags, |
@@ -1709,16 +1734,22 @@ erase_whole_vma: | |||
1709 | } | 1734 | } |
1710 | EXPORT_SYMBOL(do_munmap); | 1735 | EXPORT_SYMBOL(do_munmap); |
1711 | 1736 | ||
1712 | SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) | 1737 | int vm_munmap(unsigned long addr, size_t len) |
1713 | { | 1738 | { |
1714 | int ret; | ||
1715 | struct mm_struct *mm = current->mm; | 1739 | struct mm_struct *mm = current->mm; |
1740 | int ret; | ||
1716 | 1741 | ||
1717 | down_write(&mm->mmap_sem); | 1742 | down_write(&mm->mmap_sem); |
1718 | ret = do_munmap(mm, addr, len); | 1743 | ret = do_munmap(mm, addr, len); |
1719 | up_write(&mm->mmap_sem); | 1744 | up_write(&mm->mmap_sem); |
1720 | return ret; | 1745 | return ret; |
1721 | } | 1746 | } |
1747 | EXPORT_SYMBOL(vm_munmap); | ||
1748 | |||
1749 | SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) | ||
1750 | { | ||
1751 | return vm_munmap(addr, len); | ||
1752 | } | ||
1722 | 1753 | ||
1723 | /* | 1754 | /* |
1724 | * release all the mappings made in a process's VM space | 1755 | * release all the mappings made in a process's VM space |
@@ -1744,7 +1775,7 @@ void exit_mmap(struct mm_struct *mm) | |||
1744 | kleave(""); | 1775 | kleave(""); |
1745 | } | 1776 | } |
1746 | 1777 | ||
1747 | unsigned long do_brk(unsigned long addr, unsigned long len) | 1778 | unsigned long vm_brk(unsigned long addr, unsigned long len) |
1748 | { | 1779 | { |
1749 | return -ENOMEM; | 1780 | return -ENOMEM; |
1750 | } | 1781 | } |