page_alloc.c (756a025f00091918d9d09ca3229defb160b409c0) page_alloc.c (1170532bb49f9468aedabdc1d5a560e2521a2bcc)
1/*
2 * linux/mm/page_alloc.c
3 *
4 * Manages the free list, the system allocates free pages here.
5 * Note that kmalloc() lives in slab.c
6 *
7 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds
8 * Swap reorganised 29.12.95, Stephen Tweedie

--- 530 unchanged lines hidden (view full) ---

539 .init = init_debug_guardpage,
540};
541
542static int __init debug_guardpage_minorder_setup(char *buf)
543{
544 unsigned long res;
545
546 if (kstrtoul(buf, 10, &res) < 0 || res > MAX_ORDER / 2) {
1/*
2 * linux/mm/page_alloc.c
3 *
4 * Manages the free list, the system allocates free pages here.
5 * Note that kmalloc() lives in slab.c
6 *
7 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds
8 * Swap reorganised 29.12.95, Stephen Tweedie

--- 530 unchanged lines hidden (view full) ---

539 .init = init_debug_guardpage,
540};
541
542static int __init debug_guardpage_minorder_setup(char *buf)
543{
544 unsigned long res;
545
546 if (kstrtoul(buf, 10, &res) < 0 || res > MAX_ORDER / 2) {
547 printk(KERN_ERR "Bad debug_guardpage_minorder value\n");
547 pr_err("Bad debug_guardpage_minorder value\n");
548 return 0;
549 }
550 _debug_guardpage_minorder = res;
548 return 0;
549 }
550 _debug_guardpage_minorder = res;
551 printk(KERN_INFO "Setting debug_guardpage_minorder to %lu\n", res);
551 pr_info("Setting debug_guardpage_minorder to %lu\n", res);
552 return 0;
553}
554__setup("debug_guardpage_minorder=", debug_guardpage_minorder_setup);
555
556static inline void set_page_guard(struct zone *zone, struct page *page,
557 unsigned int order, int migratetype)
558{
559 struct page_ext *page_ext;

--- 3508 unchanged lines hidden (view full) ---

4068{
4069 if (*s == 'd' || *s == 'D') {
4070 user_zonelist_order = ZONELIST_ORDER_DEFAULT;
4071 } else if (*s == 'n' || *s == 'N') {
4072 user_zonelist_order = ZONELIST_ORDER_NODE;
4073 } else if (*s == 'z' || *s == 'Z') {
4074 user_zonelist_order = ZONELIST_ORDER_ZONE;
4075 } else {
552 return 0;
553}
554__setup("debug_guardpage_minorder=", debug_guardpage_minorder_setup);
555
556static inline void set_page_guard(struct zone *zone, struct page *page,
557 unsigned int order, int migratetype)
558{
559 struct page_ext *page_ext;

--- 3508 unchanged lines hidden (view full) ---

4068{
4069 if (*s == 'd' || *s == 'D') {
4070 user_zonelist_order = ZONELIST_ORDER_DEFAULT;
4071 } else if (*s == 'n' || *s == 'N') {
4072 user_zonelist_order = ZONELIST_ORDER_NODE;
4073 } else if (*s == 'z' || *s == 'Z') {
4074 user_zonelist_order = ZONELIST_ORDER_ZONE;
4075 } else {
4076 printk(KERN_WARNING
4077 "Ignoring invalid numa_zonelist_order value: %s\n", s);
4076 pr_warn("Ignoring invalid numa_zonelist_order value: %s\n", s);
4078 return -EINVAL;
4079 }
4080 return 0;
4081}
4082
4083static __init int setup_numa_zonelist_order(char *s)
4084{
4085 int ret;

--- 1367 unchanged lines hidden (view full) ---

5453 if (!is_highmem_idx(j)) {
5454 if (freesize >= memmap_pages) {
5455 freesize -= memmap_pages;
5456 if (memmap_pages)
5457 printk(KERN_DEBUG
5458 " %s zone: %lu pages used for memmap\n",
5459 zone_names[j], memmap_pages);
5460 } else
4077 return -EINVAL;
4078 }
4079 return 0;
4080}
4081
4082static __init int setup_numa_zonelist_order(char *s)
4083{
4084 int ret;

--- 1367 unchanged lines hidden (view full) ---

5452 if (!is_highmem_idx(j)) {
5453 if (freesize >= memmap_pages) {
5454 freesize -= memmap_pages;
5455 if (memmap_pages)
5456 printk(KERN_DEBUG
5457 " %s zone: %lu pages used for memmap\n",
5458 zone_names[j], memmap_pages);
5459 } else
5461 printk(KERN_WARNING
5462 " %s zone: %lu pages exceeds freesize %lu\n",
5460 pr_warn(" %s zone: %lu pages exceeds freesize %lu\n",
5463 zone_names[j], memmap_pages, freesize);
5464 }
5465
5466 /* Account for reserved pages */
5467 if (j == 0 && freesize > dma_reserve) {
5468 freesize -= dma_reserve;
5469 printk(KERN_DEBUG " %s zone: %lu pages reserved\n",
5470 zone_names[0], dma_reserve);

--- 191 unchanged lines hidden (view full) ---

5662 unsigned long min_pfn = ULONG_MAX;
5663 unsigned long start_pfn;
5664 int i;
5665
5666 for_each_mem_pfn_range(i, nid, &start_pfn, NULL, NULL)
5667 min_pfn = min(min_pfn, start_pfn);
5668
5669 if (min_pfn == ULONG_MAX) {
5461 zone_names[j], memmap_pages, freesize);
5462 }
5463
5464 /* Account for reserved pages */
5465 if (j == 0 && freesize > dma_reserve) {
5466 freesize -= dma_reserve;
5467 printk(KERN_DEBUG " %s zone: %lu pages reserved\n",
5468 zone_names[0], dma_reserve);

--- 191 unchanged lines hidden (view full) ---

5660 unsigned long min_pfn = ULONG_MAX;
5661 unsigned long start_pfn;
5662 int i;
5663
5664 for_each_mem_pfn_range(i, nid, &start_pfn, NULL, NULL)
5665 min_pfn = min(min_pfn, start_pfn);
5666
5667 if (min_pfn == ULONG_MAX) {
5670 printk(KERN_WARNING
5671 "Could not find start_pfn for node %d\n", nid);
5668 pr_warn("Could not find start_pfn for node %d\n", nid);
5672 return 0;
5673 }
5674
5675 return min_pfn;
5676}
5677
5678/**
5679 * find_min_pfn_with_active_regions - Find the minimum PFN registered

--- 1001 unchanged lines hidden (view full) ---

6681 kmemleak_alloc(table, size, 1, GFP_ATOMIC);
6682 }
6683 }
6684 } while (!table && size > PAGE_SIZE && --log2qty);
6685
6686 if (!table)
6687 panic("Failed to allocate %s hash table\n", tablename);
6688
5669 return 0;
5670 }
5671
5672 return min_pfn;
5673}
5674
5675/**
5676 * find_min_pfn_with_active_regions - Find the minimum PFN registered

--- 1001 unchanged lines hidden (view full) ---

6678 kmemleak_alloc(table, size, 1, GFP_ATOMIC);
6679 }
6680 }
6681 } while (!table && size > PAGE_SIZE && --log2qty);
6682
6683 if (!table)
6684 panic("Failed to allocate %s hash table\n", tablename);
6685
6689 printk(KERN_INFO "%s hash table entries: %ld (order: %d, %lu bytes)\n",
6690 tablename,
6691 (1UL << log2qty),
6692 ilog2(size) - PAGE_SHIFT,
6693 size);
6686 pr_info("%s hash table entries: %ld (order: %d, %lu bytes)\n",
6687 tablename, 1UL << log2qty, ilog2(size) - PAGE_SHIFT, size);
6694
6695 if (_hash_shift)
6696 *_hash_shift = log2qty;
6697 if (_hash_mask)
6698 *_hash_mask = (1 << log2qty) - 1;
6699
6700 return table;
6701}

--- 484 unchanged lines hidden (view full) ---

7186 SetPageReserved(page);
7187 continue;
7188 }
7189
7190 BUG_ON(page_count(page));
7191 BUG_ON(!PageBuddy(page));
7192 order = page_order(page);
7193#ifdef CONFIG_DEBUG_VM
6688
6689 if (_hash_shift)
6690 *_hash_shift = log2qty;
6691 if (_hash_mask)
6692 *_hash_mask = (1 << log2qty) - 1;
6693
6694 return table;
6695}

--- 484 unchanged lines hidden (view full) ---

7180 SetPageReserved(page);
7181 continue;
7182 }
7183
7184 BUG_ON(page_count(page));
7185 BUG_ON(!PageBuddy(page));
7186 order = page_order(page);
7187#ifdef CONFIG_DEBUG_VM
7194 printk(KERN_INFO "remove from free list %lx %d %lx\n",
7195 pfn, 1 << order, end_pfn);
7188 pr_info("remove from free list %lx %d %lx\n",
7189 pfn, 1 << order, end_pfn);
7196#endif
7197 list_del(&page->lru);
7198 rmv_page_order(page);
7199 zone->free_area[order].nr_free--;
7200 for (i = 0; i < (1 << order); i++)
7201 SetPageReserved((page+i));
7202 pfn += (1 << order);
7203 }

--- 22 unchanged lines hidden ---
7190#endif
7191 list_del(&page->lru);
7192 rmv_page_order(page);
7193 zone->free_area[order].nr_free--;
7194 for (i = 0; i < (1 << order); i++)
7195 SetPageReserved((page+i));
7196 pfn += (1 << order);
7197 }

--- 22 unchanged lines hidden ---