diff options
Diffstat (limited to 'mm/percpu.c')
-rw-r--r-- | mm/percpu.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/mm/percpu.c b/mm/percpu.c index cbddcbdab681..6feac7934904 100644 --- a/mm/percpu.c +++ b/mm/percpu.c | |||
@@ -1497,15 +1497,15 @@ ssize_t __init pcpu_embed_first_chunk(size_t static_size, size_t reserved_size, | |||
1497 | } | 1497 | } |
1498 | 1498 | ||
1499 | /** | 1499 | /** |
1500 | * pcpu_4k_first_chunk - map the first chunk using PAGE_SIZE pages | 1500 | * pcpu_page_first_chunk - map the first chunk using PAGE_SIZE pages |
1501 | * @static_size: the size of static percpu area in bytes | 1501 | * @static_size: the size of static percpu area in bytes |
1502 | * @reserved_size: the size of reserved percpu area in bytes | 1502 | * @reserved_size: the size of reserved percpu area in bytes |
1503 | * @alloc_fn: function to allocate percpu page, always called with PAGE_SIZE | 1503 | * @alloc_fn: function to allocate percpu page, always called with PAGE_SIZE |
1504 | * @free_fn: funtion to free percpu page, always called with PAGE_SIZE | 1504 | * @free_fn: funtion to free percpu page, always called with PAGE_SIZE |
1505 | * @populate_pte_fn: function to populate pte | 1505 | * @populate_pte_fn: function to populate pte |
1506 | * | 1506 | * |
1507 | * This is a helper to ease setting up embedded first percpu chunk and | 1507 | * This is a helper to ease setting up page-remapped first percpu |
1508 | * can be called where pcpu_setup_first_chunk() is expected. | 1508 | * chunk and can be called where pcpu_setup_first_chunk() is expected. |
1509 | * | 1509 | * |
1510 | * This is the basic allocator. Static percpu area is allocated | 1510 | * This is the basic allocator. Static percpu area is allocated |
1511 | * page-by-page into vmalloc area. | 1511 | * page-by-page into vmalloc area. |
@@ -1514,12 +1514,13 @@ ssize_t __init pcpu_embed_first_chunk(size_t static_size, size_t reserved_size, | |||
1514 | * The determined pcpu_unit_size which can be used to initialize | 1514 | * The determined pcpu_unit_size which can be used to initialize |
1515 | * percpu access on success, -errno on failure. | 1515 | * percpu access on success, -errno on failure. |
1516 | */ | 1516 | */ |
1517 | ssize_t __init pcpu_4k_first_chunk(size_t static_size, size_t reserved_size, | 1517 | ssize_t __init pcpu_page_first_chunk(size_t static_size, size_t reserved_size, |
1518 | pcpu_fc_alloc_fn_t alloc_fn, | 1518 | pcpu_fc_alloc_fn_t alloc_fn, |
1519 | pcpu_fc_free_fn_t free_fn, | 1519 | pcpu_fc_free_fn_t free_fn, |
1520 | pcpu_fc_populate_pte_fn_t populate_pte_fn) | 1520 | pcpu_fc_populate_pte_fn_t populate_pte_fn) |
1521 | { | 1521 | { |
1522 | static struct vm_struct vm; | 1522 | static struct vm_struct vm; |
1523 | char psize_str[16]; | ||
1523 | int unit_pages; | 1524 | int unit_pages; |
1524 | size_t pages_size; | 1525 | size_t pages_size; |
1525 | struct page **pages; | 1526 | struct page **pages; |
@@ -1527,6 +1528,8 @@ ssize_t __init pcpu_4k_first_chunk(size_t static_size, size_t reserved_size, | |||
1527 | int i, j; | 1528 | int i, j; |
1528 | ssize_t ret; | 1529 | ssize_t ret; |
1529 | 1530 | ||
1531 | snprintf(psize_str, sizeof(psize_str), "%luK", PAGE_SIZE >> 10); | ||
1532 | |||
1530 | unit_pages = PFN_UP(max_t(size_t, static_size + reserved_size, | 1533 | unit_pages = PFN_UP(max_t(size_t, static_size + reserved_size, |
1531 | PCPU_MIN_UNIT_SIZE)); | 1534 | PCPU_MIN_UNIT_SIZE)); |
1532 | 1535 | ||
@@ -1542,8 +1545,8 @@ ssize_t __init pcpu_4k_first_chunk(size_t static_size, size_t reserved_size, | |||
1542 | 1545 | ||
1543 | ptr = alloc_fn(cpu, PAGE_SIZE); | 1546 | ptr = alloc_fn(cpu, PAGE_SIZE); |
1544 | if (!ptr) { | 1547 | if (!ptr) { |
1545 | pr_warning("PERCPU: failed to allocate " | 1548 | pr_warning("PERCPU: failed to allocate %s page " |
1546 | "4k page for cpu%u\n", cpu); | 1549 | "for cpu%u\n", psize_str, cpu); |
1547 | goto enomem; | 1550 | goto enomem; |
1548 | } | 1551 | } |
1549 | pages[j++] = virt_to_page(ptr); | 1552 | pages[j++] = virt_to_page(ptr); |
@@ -1580,8 +1583,8 @@ ssize_t __init pcpu_4k_first_chunk(size_t static_size, size_t reserved_size, | |||
1580 | } | 1583 | } |
1581 | 1584 | ||
1582 | /* we're ready, commit */ | 1585 | /* we're ready, commit */ |
1583 | pr_info("PERCPU: %d 4k pages/cpu @%p s%zu r%zu\n", | 1586 | pr_info("PERCPU: %d %s pages/cpu @%p s%zu r%zu\n", |
1584 | unit_pages, vm.addr, static_size, reserved_size); | 1587 | unit_pages, psize_str, vm.addr, static_size, reserved_size); |
1585 | 1588 | ||
1586 | ret = pcpu_setup_first_chunk(static_size, reserved_size, -1, | 1589 | ret = pcpu_setup_first_chunk(static_size, reserved_size, -1, |
1587 | unit_pages << PAGE_SHIFT, vm.addr, NULL); | 1590 | unit_pages << PAGE_SHIFT, vm.addr, NULL); |