Commit 70c9d296 authored by Heiko Carstens's avatar Heiko Carstens Committed by Martin Schwidefsky

s390/vmemmap: remove memset call from vmemmap_populate()

If the vmemmap array gets filled with large pages we allocate those
pages with vmemmap_alloc_block(), which returns cleared pages.
Only for single 4k pages we call our own vmem_alloc_pages() which does
not return cleared pages. However we can also call vmemmap_alloc_block()
to allocate the 4k pages.
This way we can also make sure the vmemmap array is cleared after its
population.
Therefore we can remove the memset at the end of the function which
would clear the vmmemmap array a second time on machines which do
support EDAT1.

On very large configurations this can save us several seconds.
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent b881dcfb
...@@ -253,9 +253,9 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node) ...@@ -253,9 +253,9 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node)
pt_dir = pte_offset_kernel(pm_dir, address); pt_dir = pte_offset_kernel(pm_dir, address);
if (pte_none(*pt_dir)) { if (pte_none(*pt_dir)) {
unsigned long new_page; void *new_page;
new_page =__pa(vmem_alloc_pages(0)); new_page = vmemmap_alloc_block(PAGE_SIZE, node);
if (!new_page) if (!new_page)
goto out; goto out;
pte_val(*pt_dir) = pte_val(*pt_dir) =
...@@ -263,7 +263,6 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node) ...@@ -263,7 +263,6 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node)
} }
address += PAGE_SIZE; address += PAGE_SIZE;
} }
memset((void *)start, 0, end - start);
ret = 0; ret = 0;
out: out:
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment