]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - mm/memblock.c
mm: vmscan: do not swap anon pages just because free+file is low
[mirror_ubuntu-bionic-kernel.git] / mm / memblock.c
index 7fe5354e7552c0507eb6a6b778eee42d1c2182af..e9d6ca9a01a9a3e0b1f56029a332b51c9202455e 100644 (file)
@@ -1253,7 +1253,7 @@ phys_addr_t __init memblock_mem_size(unsigned long limit_pfn)
                pages += end_pfn - start_pfn;
        }
 
-       return (phys_addr_t)pages << PAGE_SHIFT;
+       return PFN_PHYS(pages);
 }
 
 /* lowest address */
@@ -1271,16 +1271,14 @@ phys_addr_t __init_memblock memblock_end_of_DRAM(void)
 
 void __init memblock_enforce_memory_limit(phys_addr_t limit)
 {
-       unsigned long i;
        phys_addr_t max_addr = (phys_addr_t)ULLONG_MAX;
+       struct memblock_region *r;
 
        if (!limit)
                return;
 
        /* find out max address */
-       for (i = 0; i < memblock.memory.cnt; i++) {
-               struct memblock_region *r = &memblock.memory.regions[i];
-
+       for_each_memblock(memory, r) {
                if (limit <= r->size) {
                        max_addr = r->base + limit;
                        break;
@@ -1326,7 +1324,7 @@ int __init_memblock memblock_search_pfn_nid(unsigned long pfn,
                         unsigned long *start_pfn, unsigned long *end_pfn)
 {
        struct memblock_type *type = &memblock.memory;
-       int mid = memblock_search(type, (phys_addr_t)pfn << PAGE_SHIFT);
+       int mid = memblock_search(type, PFN_PHYS(pfn));
 
        if (mid == -1)
                return -1;
@@ -1379,13 +1377,12 @@ int __init_memblock memblock_is_region_reserved(phys_addr_t base, phys_addr_t si
 
 void __init_memblock memblock_trim_memory(phys_addr_t align)
 {
-       int i;
        phys_addr_t start, end, orig_start, orig_end;
-       struct memblock_type *mem = &memblock.memory;
+       struct memblock_region *r;
 
-       for (i = 0; i < mem->cnt; i++) {
-               orig_start = mem->regions[i].base;
-               orig_end = mem->regions[i].base + mem->regions[i].size;
+       for_each_memblock(memory, r) {
+               orig_start = r->base;
+               orig_end = r->base + r->size;
                start = round_up(orig_start, align);
                end = round_down(orig_end, align);
 
@@ -1393,11 +1390,12 @@ void __init_memblock memblock_trim_memory(phys_addr_t align)
                        continue;
 
                if (start < end) {
-                       mem->regions[i].base = start;
-                       mem->regions[i].size = end - start;
+                       r->base = start;
+                       r->size = end - start;
                } else {
-                       memblock_remove_region(mem, i);
-                       i--;
+                       memblock_remove_region(&memblock.memory,
+                                              r - memblock.memory.regions);
+                       r--;
                }
        }
 }