.. | .. |
---|
11 | 11 | #include <linux/sched.h> |
---|
12 | 12 | #include <linux/string.h> |
---|
13 | 13 | #include <linux/init.h> |
---|
14 | | -#include <linux/bootmem.h> |
---|
| 14 | +#include <linux/memblock.h> |
---|
15 | 15 | #include <linux/mm.h> |
---|
16 | 16 | #include <linux/hugetlb.h> |
---|
17 | 17 | #include <linux/initrd.h> |
---|
.. | .. |
---|
25 | 25 | #include <linux/sort.h> |
---|
26 | 26 | #include <linux/ioport.h> |
---|
27 | 27 | #include <linux/percpu.h> |
---|
28 | | -#include <linux/memblock.h> |
---|
29 | 28 | #include <linux/mmzone.h> |
---|
30 | 29 | #include <linux/gfp.h> |
---|
31 | 30 | |
---|
32 | 31 | #include <asm/head.h> |
---|
33 | 32 | #include <asm/page.h> |
---|
34 | 33 | #include <asm/pgalloc.h> |
---|
35 | | -#include <asm/pgtable.h> |
---|
36 | 34 | #include <asm/oplib.h> |
---|
37 | 35 | #include <asm/iommu.h> |
---|
38 | 36 | #include <asm/io.h> |
---|
.. | .. |
---|
326 | 324 | } |
---|
327 | 325 | |
---|
328 | 326 | #ifdef CONFIG_HUGETLB_PAGE |
---|
329 | | -static void __init add_huge_page_size(unsigned long size) |
---|
330 | | -{ |
---|
331 | | - unsigned int order; |
---|
332 | | - |
---|
333 | | - if (size_to_hstate(size)) |
---|
334 | | - return; |
---|
335 | | - |
---|
336 | | - order = ilog2(size) - PAGE_SHIFT; |
---|
337 | | - hugetlb_add_hstate(order); |
---|
338 | | -} |
---|
339 | | - |
---|
340 | 327 | static int __init hugetlbpage_init(void) |
---|
341 | 328 | { |
---|
342 | | - add_huge_page_size(1UL << HPAGE_64K_SHIFT); |
---|
343 | | - add_huge_page_size(1UL << HPAGE_SHIFT); |
---|
344 | | - add_huge_page_size(1UL << HPAGE_256MB_SHIFT); |
---|
345 | | - add_huge_page_size(1UL << HPAGE_2GB_SHIFT); |
---|
| 329 | + hugetlb_add_hstate(HPAGE_64K_SHIFT - PAGE_SHIFT); |
---|
| 330 | + hugetlb_add_hstate(HPAGE_SHIFT - PAGE_SHIFT); |
---|
| 331 | + hugetlb_add_hstate(HPAGE_256MB_SHIFT - PAGE_SHIFT); |
---|
| 332 | + hugetlb_add_hstate(HPAGE_2GB_SHIFT - PAGE_SHIFT); |
---|
346 | 333 | |
---|
347 | 334 | return 0; |
---|
348 | 335 | } |
---|
.. | .. |
---|
361 | 348 | __asm__ __volatile__("flush %0" : : "r" (addr)); |
---|
362 | 349 | } |
---|
363 | 350 | |
---|
364 | | -static int __init setup_hugepagesz(char *string) |
---|
| 351 | +bool __init arch_hugetlb_valid_size(unsigned long size) |
---|
365 | 352 | { |
---|
366 | | - unsigned long long hugepage_size; |
---|
367 | | - unsigned int hugepage_shift; |
---|
| 353 | + unsigned int hugepage_shift = ilog2(size); |
---|
368 | 354 | unsigned short hv_pgsz_idx; |
---|
369 | 355 | unsigned int hv_pgsz_mask; |
---|
370 | | - int rc = 0; |
---|
371 | | - |
---|
372 | | - hugepage_size = memparse(string, &string); |
---|
373 | | - hugepage_shift = ilog2(hugepage_size); |
---|
374 | 356 | |
---|
375 | 357 | switch (hugepage_shift) { |
---|
376 | 358 | case HPAGE_16GB_SHIFT: |
---|
.. | .. |
---|
398 | 380 | hv_pgsz_mask = 0; |
---|
399 | 381 | } |
---|
400 | 382 | |
---|
401 | | - if ((hv_pgsz_mask & cpu_pgsz_mask) == 0U) { |
---|
402 | | - hugetlb_bad_size(); |
---|
403 | | - pr_err("hugepagesz=%llu not supported by MMU.\n", |
---|
404 | | - hugepage_size); |
---|
405 | | - goto out; |
---|
406 | | - } |
---|
| 383 | + if ((hv_pgsz_mask & cpu_pgsz_mask) == 0U) |
---|
| 384 | + return false; |
---|
407 | 385 | |
---|
408 | | - add_huge_page_size(hugepage_size); |
---|
409 | | - rc = 1; |
---|
410 | | - |
---|
411 | | -out: |
---|
412 | | - return rc; |
---|
| 386 | + return true; |
---|
413 | 387 | } |
---|
414 | | -__setup("hugepagesz=", setup_hugepagesz); |
---|
415 | 388 | #endif /* CONFIG_HUGETLB_PAGE */ |
---|
416 | 389 | |
---|
417 | 390 | void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t *ptep) |
---|
.. | .. |
---|
530 | 503 | if (kaddr >= PAGE_OFFSET) |
---|
531 | 504 | paddr = kaddr & mask; |
---|
532 | 505 | else { |
---|
533 | | - pgd_t *pgdp = pgd_offset_k(kaddr); |
---|
534 | | - pud_t *pudp = pud_offset(pgdp, kaddr); |
---|
535 | | - pmd_t *pmdp = pmd_offset(pudp, kaddr); |
---|
536 | | - pte_t *ptep = pte_offset_kernel(pmdp, kaddr); |
---|
| 506 | + pte_t *ptep = virt_to_kpte(kaddr); |
---|
537 | 507 | |
---|
538 | 508 | paddr = pte_val(*ptep) & mask; |
---|
539 | 509 | } |
---|
.. | .. |
---|
977 | 947 | { |
---|
978 | 948 | int prev_nid, new_nid; |
---|
979 | 949 | |
---|
980 | | - prev_nid = -1; |
---|
| 950 | + prev_nid = NUMA_NO_NODE; |
---|
981 | 951 | for ( ; start < end; start += PAGE_SIZE) { |
---|
982 | 952 | for (new_nid = 0; new_nid < num_node_masks; new_nid++) { |
---|
983 | 953 | struct node_mem_mask *p = &node_masks[new_nid]; |
---|
984 | 954 | |
---|
985 | 955 | if ((start & p->mask) == p->match) { |
---|
986 | | - if (prev_nid == -1) |
---|
| 956 | + if (prev_nid == NUMA_NO_NODE) |
---|
987 | 957 | prev_nid = new_nid; |
---|
988 | 958 | break; |
---|
989 | 959 | } |
---|
.. | .. |
---|
1090 | 1060 | struct pglist_data *p; |
---|
1091 | 1061 | unsigned long start_pfn, end_pfn; |
---|
1092 | 1062 | #ifdef CONFIG_NEED_MULTIPLE_NODES |
---|
1093 | | - unsigned long paddr; |
---|
1094 | 1063 | |
---|
1095 | | - paddr = memblock_alloc_try_nid(sizeof(struct pglist_data), SMP_CACHE_BYTES, nid); |
---|
1096 | | - if (!paddr) { |
---|
| 1064 | + NODE_DATA(nid) = memblock_alloc_node(sizeof(struct pglist_data), |
---|
| 1065 | + SMP_CACHE_BYTES, nid); |
---|
| 1066 | + if (!NODE_DATA(nid)) { |
---|
1097 | 1067 | prom_printf("Cannot allocate pglist_data for nid[%d]\n", nid); |
---|
1098 | 1068 | prom_halt(); |
---|
1099 | 1069 | } |
---|
1100 | | - NODE_DATA(nid) = __va(paddr); |
---|
1101 | | - memset(NODE_DATA(nid), 0, sizeof(struct pglist_data)); |
---|
1102 | 1070 | |
---|
1103 | 1071 | NODE_DATA(nid)->node_id = nid; |
---|
1104 | 1072 | #endif |
---|
.. | .. |
---|
1208 | 1176 | md = mdesc_grab(); |
---|
1209 | 1177 | |
---|
1210 | 1178 | count = 0; |
---|
1211 | | - nid = -1; |
---|
| 1179 | + nid = NUMA_NO_NODE; |
---|
1212 | 1180 | mdesc_for_each_node_by_name(md, grp, "group") { |
---|
1213 | 1181 | if (!scan_arcs_for_cfg_handle(md, grp, cfg_handle)) { |
---|
1214 | 1182 | nid = count; |
---|
.. | .. |
---|
1224 | 1192 | |
---|
1225 | 1193 | static void __init add_node_ranges(void) |
---|
1226 | 1194 | { |
---|
1227 | | - struct memblock_region *reg; |
---|
| 1195 | + phys_addr_t start, end; |
---|
1228 | 1196 | unsigned long prev_max; |
---|
| 1197 | + u64 i; |
---|
1229 | 1198 | |
---|
1230 | 1199 | memblock_resized: |
---|
1231 | 1200 | prev_max = memblock.memory.max; |
---|
1232 | 1201 | |
---|
1233 | | - for_each_memblock(memory, reg) { |
---|
1234 | | - unsigned long size = reg->size; |
---|
1235 | | - unsigned long start, end; |
---|
1236 | | - |
---|
1237 | | - start = reg->base; |
---|
1238 | | - end = start + size; |
---|
| 1202 | + for_each_mem_range(i, &start, &end) { |
---|
1239 | 1203 | while (start < end) { |
---|
1240 | 1204 | unsigned long this_end; |
---|
1241 | 1205 | int nid; |
---|
.. | .. |
---|
1243 | 1207 | this_end = memblock_nid_range(start, end, &nid); |
---|
1244 | 1208 | |
---|
1245 | 1209 | numadbg("Setting memblock NUMA node nid[%d] " |
---|
1246 | | - "start[%lx] end[%lx]\n", |
---|
| 1210 | + "start[%llx] end[%lx]\n", |
---|
1247 | 1211 | nid, start, this_end); |
---|
1248 | 1212 | |
---|
1249 | 1213 | memblock_set_node(start, this_end - start, |
---|
.. | .. |
---|
1266 | 1230 | if (!count) |
---|
1267 | 1231 | return -ENOENT; |
---|
1268 | 1232 | |
---|
1269 | | - paddr = memblock_alloc(count * sizeof(struct mdesc_mlgroup), |
---|
1270 | | - SMP_CACHE_BYTES); |
---|
| 1233 | + paddr = memblock_phys_alloc(count * sizeof(struct mdesc_mlgroup), |
---|
| 1234 | + SMP_CACHE_BYTES); |
---|
1271 | 1235 | if (!paddr) |
---|
1272 | 1236 | return -ENOMEM; |
---|
1273 | 1237 | |
---|
.. | .. |
---|
1307 | 1271 | if (!count) |
---|
1308 | 1272 | return -ENOENT; |
---|
1309 | 1273 | |
---|
1310 | | - paddr = memblock_alloc(count * sizeof(struct mdesc_mblock), |
---|
1311 | | - SMP_CACHE_BYTES); |
---|
| 1274 | + paddr = memblock_phys_alloc(count * sizeof(struct mdesc_mblock), |
---|
| 1275 | + SMP_CACHE_BYTES); |
---|
1312 | 1276 | if (!paddr) |
---|
1313 | 1277 | return -ENOMEM; |
---|
1314 | 1278 | |
---|
.. | .. |
---|
1642 | 1606 | |
---|
1643 | 1607 | /* XXX cpu notifier XXX */ |
---|
1644 | 1608 | |
---|
1645 | | - sparse_memory_present_with_active_regions(MAX_NUMNODES); |
---|
1646 | 1609 | sparse_init(); |
---|
1647 | 1610 | |
---|
1648 | 1611 | return end_pfn; |
---|
.. | .. |
---|
1656 | 1619 | bool kern_addr_valid(unsigned long addr) |
---|
1657 | 1620 | { |
---|
1658 | 1621 | pgd_t *pgd; |
---|
| 1622 | + p4d_t *p4d; |
---|
1659 | 1623 | pud_t *pud; |
---|
1660 | 1624 | pmd_t *pmd; |
---|
1661 | 1625 | pte_t *pte; |
---|
.. | .. |
---|
1675 | 1639 | |
---|
1676 | 1640 | pgd = pgd_offset_k(addr); |
---|
1677 | 1641 | if (pgd_none(*pgd)) |
---|
1678 | | - return 0; |
---|
| 1642 | + return false; |
---|
1679 | 1643 | |
---|
1680 | | - pud = pud_offset(pgd, addr); |
---|
| 1644 | + p4d = p4d_offset(pgd, addr); |
---|
| 1645 | + if (p4d_none(*p4d)) |
---|
| 1646 | + return false; |
---|
| 1647 | + |
---|
| 1648 | + pud = pud_offset(p4d, addr); |
---|
1681 | 1649 | if (pud_none(*pud)) |
---|
1682 | | - return 0; |
---|
| 1650 | + return false; |
---|
1683 | 1651 | |
---|
1684 | 1652 | if (pud_large(*pud)) |
---|
1685 | 1653 | return pfn_valid(pud_pfn(*pud)); |
---|
1686 | 1654 | |
---|
1687 | 1655 | pmd = pmd_offset(pud, addr); |
---|
1688 | 1656 | if (pmd_none(*pmd)) |
---|
1689 | | - return 0; |
---|
| 1657 | + return false; |
---|
1690 | 1658 | |
---|
1691 | 1659 | if (pmd_large(*pmd)) |
---|
1692 | 1660 | return pfn_valid(pmd_pfn(*pmd)); |
---|
1693 | 1661 | |
---|
1694 | 1662 | pte = pte_offset_kernel(pmd, addr); |
---|
1695 | 1663 | if (pte_none(*pte)) |
---|
1696 | | - return 0; |
---|
| 1664 | + return false; |
---|
1697 | 1665 | |
---|
1698 | 1666 | return pfn_valid(pte_pfn(*pte)); |
---|
1699 | 1667 | } |
---|
.. | .. |
---|
1803 | 1771 | while (vstart < vend) { |
---|
1804 | 1772 | unsigned long this_end, paddr = __pa(vstart); |
---|
1805 | 1773 | pgd_t *pgd = pgd_offset_k(vstart); |
---|
| 1774 | + p4d_t *p4d; |
---|
1806 | 1775 | pud_t *pud; |
---|
1807 | 1776 | pmd_t *pmd; |
---|
1808 | 1777 | pte_t *pte; |
---|
.. | .. |
---|
1810 | 1779 | if (pgd_none(*pgd)) { |
---|
1811 | 1780 | pud_t *new; |
---|
1812 | 1781 | |
---|
1813 | | - new = __alloc_bootmem(PAGE_SIZE, PAGE_SIZE, PAGE_SIZE); |
---|
| 1782 | + new = memblock_alloc_from(PAGE_SIZE, PAGE_SIZE, |
---|
| 1783 | + PAGE_SIZE); |
---|
| 1784 | + if (!new) |
---|
| 1785 | + goto err_alloc; |
---|
1814 | 1786 | alloc_bytes += PAGE_SIZE; |
---|
1815 | 1787 | pgd_populate(&init_mm, pgd, new); |
---|
1816 | 1788 | } |
---|
1817 | | - pud = pud_offset(pgd, vstart); |
---|
| 1789 | + |
---|
| 1790 | + p4d = p4d_offset(pgd, vstart); |
---|
| 1791 | + if (p4d_none(*p4d)) { |
---|
| 1792 | + pud_t *new; |
---|
| 1793 | + |
---|
| 1794 | + new = memblock_alloc_from(PAGE_SIZE, PAGE_SIZE, |
---|
| 1795 | + PAGE_SIZE); |
---|
| 1796 | + if (!new) |
---|
| 1797 | + goto err_alloc; |
---|
| 1798 | + alloc_bytes += PAGE_SIZE; |
---|
| 1799 | + p4d_populate(&init_mm, p4d, new); |
---|
| 1800 | + } |
---|
| 1801 | + |
---|
| 1802 | + pud = pud_offset(p4d, vstart); |
---|
1818 | 1803 | if (pud_none(*pud)) { |
---|
1819 | 1804 | pmd_t *new; |
---|
1820 | 1805 | |
---|
.. | .. |
---|
1822 | 1807 | vstart = kernel_map_hugepud(vstart, vend, pud); |
---|
1823 | 1808 | continue; |
---|
1824 | 1809 | } |
---|
1825 | | - new = __alloc_bootmem(PAGE_SIZE, PAGE_SIZE, PAGE_SIZE); |
---|
| 1810 | + new = memblock_alloc_from(PAGE_SIZE, PAGE_SIZE, |
---|
| 1811 | + PAGE_SIZE); |
---|
| 1812 | + if (!new) |
---|
| 1813 | + goto err_alloc; |
---|
1826 | 1814 | alloc_bytes += PAGE_SIZE; |
---|
1827 | 1815 | pud_populate(&init_mm, pud, new); |
---|
1828 | 1816 | } |
---|
.. | .. |
---|
1835 | 1823 | vstart = kernel_map_hugepmd(vstart, vend, pmd); |
---|
1836 | 1824 | continue; |
---|
1837 | 1825 | } |
---|
1838 | | - new = __alloc_bootmem(PAGE_SIZE, PAGE_SIZE, PAGE_SIZE); |
---|
| 1826 | + new = memblock_alloc_from(PAGE_SIZE, PAGE_SIZE, |
---|
| 1827 | + PAGE_SIZE); |
---|
| 1828 | + if (!new) |
---|
| 1829 | + goto err_alloc; |
---|
1839 | 1830 | alloc_bytes += PAGE_SIZE; |
---|
1840 | 1831 | pmd_populate_kernel(&init_mm, pmd, new); |
---|
1841 | 1832 | } |
---|
.. | .. |
---|
1855 | 1846 | } |
---|
1856 | 1847 | |
---|
1857 | 1848 | return alloc_bytes; |
---|
| 1849 | + |
---|
| 1850 | +err_alloc: |
---|
| 1851 | + panic("%s: Failed to allocate %lu bytes align=%lx from=%lx\n", |
---|
| 1852 | + __func__, PAGE_SIZE, PAGE_SIZE, PAGE_SIZE); |
---|
| 1853 | + return -ENOMEM; |
---|
1858 | 1854 | } |
---|
1859 | 1855 | |
---|
1860 | 1856 | static void __init flush_all_kernel_tsbs(void) |
---|
.. | .. |
---|
2258 | 2254 | static void sun4u_pgprot_init(void); |
---|
2259 | 2255 | static void sun4v_pgprot_init(void); |
---|
2260 | 2256 | |
---|
2261 | | -static phys_addr_t __init available_memory(void) |
---|
2262 | | -{ |
---|
2263 | | - phys_addr_t available = 0ULL; |
---|
2264 | | - phys_addr_t pa_start, pa_end; |
---|
2265 | | - u64 i; |
---|
2266 | | - |
---|
2267 | | - for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE, &pa_start, |
---|
2268 | | - &pa_end, NULL) |
---|
2269 | | - available = available + (pa_end - pa_start); |
---|
2270 | | - |
---|
2271 | | - return available; |
---|
2272 | | -} |
---|
2273 | | - |
---|
2274 | 2257 | #define _PAGE_CACHE_4U (_PAGE_CP_4U | _PAGE_CV_4U) |
---|
2275 | 2258 | #define _PAGE_CACHE_4V (_PAGE_CP_4V | _PAGE_CV_4V) |
---|
2276 | 2259 | #define __DIRTY_BITS_4U (_PAGE_MODIFIED_4U | _PAGE_WRITE_4U | _PAGE_W_4U) |
---|
.. | .. |
---|
2284 | 2267 | */ |
---|
2285 | 2268 | static void __init reduce_memory(phys_addr_t limit_ram) |
---|
2286 | 2269 | { |
---|
2287 | | - phys_addr_t avail_ram = available_memory(); |
---|
2288 | | - phys_addr_t pa_start, pa_end; |
---|
2289 | | - u64 i; |
---|
2290 | | - |
---|
2291 | | - if (limit_ram >= avail_ram) |
---|
2292 | | - return; |
---|
2293 | | - |
---|
2294 | | - for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE, &pa_start, |
---|
2295 | | - &pa_end, NULL) { |
---|
2296 | | - phys_addr_t region_size = pa_end - pa_start; |
---|
2297 | | - phys_addr_t clip_start = pa_start; |
---|
2298 | | - |
---|
2299 | | - avail_ram = avail_ram - region_size; |
---|
2300 | | - /* Are we consuming too much? */ |
---|
2301 | | - if (avail_ram < limit_ram) { |
---|
2302 | | - phys_addr_t give_back = limit_ram - avail_ram; |
---|
2303 | | - |
---|
2304 | | - region_size = region_size - give_back; |
---|
2305 | | - clip_start = clip_start + give_back; |
---|
2306 | | - } |
---|
2307 | | - |
---|
2308 | | - memblock_remove(clip_start, region_size); |
---|
2309 | | - |
---|
2310 | | - if (avail_ram <= limit_ram) |
---|
2311 | | - break; |
---|
2312 | | - i = 0UL; |
---|
2313 | | - } |
---|
| 2270 | + limit_ram += memblock_reserved_size(); |
---|
| 2271 | + memblock_enforce_memory_limit(limit_ram); |
---|
2314 | 2272 | } |
---|
2315 | 2273 | |
---|
2316 | 2274 | void __init paging_init(void) |
---|
.. | .. |
---|
2495 | 2453 | |
---|
2496 | 2454 | max_zone_pfns[ZONE_NORMAL] = end_pfn; |
---|
2497 | 2455 | |
---|
2498 | | - free_area_init_nodes(max_zone_pfns); |
---|
| 2456 | + free_area_init(max_zone_pfns); |
---|
2499 | 2457 | } |
---|
2500 | 2458 | |
---|
2501 | 2459 | printk("Booting Linux...\n"); |
---|
.. | .. |
---|
2541 | 2499 | { |
---|
2542 | 2500 | high_memory = __va(last_valid_pfn << PAGE_SHIFT); |
---|
2543 | 2501 | |
---|
2544 | | - free_all_bootmem(); |
---|
| 2502 | + memblock_free_all(); |
---|
2545 | 2503 | |
---|
2546 | 2504 | /* |
---|
2547 | 2505 | * Must be done after boot memory is put on freelist, because here we |
---|
2548 | 2506 | * might set fields in deferred struct pages that have not yet been |
---|
2549 | | - * initialized, and free_all_bootmem() initializes all the reserved |
---|
| 2507 | + * initialized, and memblock_free_all() initializes all the reserved |
---|
2550 | 2508 | * deferred pages for us. |
---|
2551 | 2509 | */ |
---|
2552 | 2510 | register_page_bootmem_info(); |
---|
.. | .. |
---|
2599 | 2557 | } |
---|
2600 | 2558 | } |
---|
2601 | 2559 | |
---|
2602 | | -#ifdef CONFIG_BLK_DEV_INITRD |
---|
2603 | | -void free_initrd_mem(unsigned long start, unsigned long end) |
---|
2604 | | -{ |
---|
2605 | | - free_reserved_area((void *)start, (void *)end, POISON_FREE_INITMEM, |
---|
2606 | | - "initrd"); |
---|
2607 | | -} |
---|
2608 | | -#endif |
---|
2609 | | - |
---|
2610 | 2560 | pgprot_t PAGE_KERNEL __read_mostly; |
---|
2611 | 2561 | EXPORT_SYMBOL(PAGE_KERNEL); |
---|
2612 | 2562 | |
---|
.. | .. |
---|
2647 | 2597 | for (; vstart < vend; vstart += PMD_SIZE) { |
---|
2648 | 2598 | pgd_t *pgd = vmemmap_pgd_populate(vstart, node); |
---|
2649 | 2599 | unsigned long pte; |
---|
| 2600 | + p4d_t *p4d; |
---|
2650 | 2601 | pud_t *pud; |
---|
2651 | 2602 | pmd_t *pmd; |
---|
2652 | 2603 | |
---|
2653 | 2604 | if (!pgd) |
---|
2654 | 2605 | return -ENOMEM; |
---|
2655 | 2606 | |
---|
2656 | | - pud = vmemmap_pud_populate(pgd, vstart, node); |
---|
| 2607 | + p4d = vmemmap_p4d_populate(pgd, vstart, node); |
---|
| 2608 | + if (!p4d) |
---|
| 2609 | + return -ENOMEM; |
---|
| 2610 | + |
---|
| 2611 | + pud = vmemmap_pud_populate(p4d, vstart, node); |
---|
2657 | 2612 | if (!pud) |
---|
2658 | 2613 | return -ENOMEM; |
---|
2659 | 2614 | |
---|
.. | .. |
---|
2922 | 2877 | : : "r" (pstate)); |
---|
2923 | 2878 | } |
---|
2924 | 2879 | |
---|
2925 | | -pte_t *pte_alloc_one_kernel(struct mm_struct *mm, |
---|
2926 | | - unsigned long address) |
---|
| 2880 | +pte_t *pte_alloc_one_kernel(struct mm_struct *mm) |
---|
2927 | 2881 | { |
---|
2928 | 2882 | struct page *page = alloc_page(GFP_KERNEL | __GFP_ZERO); |
---|
2929 | 2883 | pte_t *pte = NULL; |
---|
.. | .. |
---|
2934 | 2888 | return pte; |
---|
2935 | 2889 | } |
---|
2936 | 2890 | |
---|
2937 | | -pgtable_t pte_alloc_one(struct mm_struct *mm, |
---|
2938 | | - unsigned long address) |
---|
| 2891 | +pgtable_t pte_alloc_one(struct mm_struct *mm) |
---|
2939 | 2892 | { |
---|
2940 | 2893 | struct page *page = alloc_page(GFP_KERNEL | __GFP_ZERO); |
---|
2941 | 2894 | if (!page) |
---|
2942 | 2895 | return NULL; |
---|
2943 | | - if (!pgtable_page_ctor(page)) { |
---|
2944 | | - free_unref_page(page); |
---|
| 2896 | + if (!pgtable_pte_page_ctor(page)) { |
---|
| 2897 | + __free_page(page); |
---|
2945 | 2898 | return NULL; |
---|
2946 | 2899 | } |
---|
2947 | 2900 | return (pte_t *) page_address(page); |
---|
.. | .. |
---|
2956 | 2909 | { |
---|
2957 | 2910 | struct page *page = virt_to_page(pte); |
---|
2958 | 2911 | |
---|
2959 | | - pgtable_page_dtor(page); |
---|
| 2912 | + pgtable_pte_page_dtor(page); |
---|
2960 | 2913 | __free_page(page); |
---|
2961 | 2914 | } |
---|
2962 | 2915 | |
---|