sparse-vmemmap: specify vmemmap population range in bytes
[linux-2.6-block.git] / arch / s390 / mm / vmem.c
index ffab84db69071f3ea24e0a446889bcc2036414f2..35837054f73461f371f0a2e2ff311093f4e7e846 100644 (file)
@@ -191,19 +191,16 @@ static void vmem_remove_range(unsigned long start, unsigned long size)
 /*
  * Add a backed mem_map array to the virtual mem_map array.
  */
-int __meminit vmemmap_populate(struct page *start, unsigned long nr, int node)
+int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node)
 {
-       unsigned long address, start_addr, end_addr;
+       unsigned long address = start;
        pgd_t *pg_dir;
        pud_t *pu_dir;
        pmd_t *pm_dir;
        pte_t *pt_dir;
        int ret = -ENOMEM;
 
-       start_addr = (unsigned long) start;
-       end_addr = (unsigned long) (start + nr);
-
-       for (address = start_addr; address < end_addr;) {
+       for (address = start; address < end;) {
                pg_dir = pgd_offset_k(address);
                if (pgd_none(*pg_dir)) {
                        pu_dir = vmem_pud_alloc();
@@ -262,14 +259,14 @@ int __meminit vmemmap_populate(struct page *start, unsigned long nr, int node)
                }
                address += PAGE_SIZE;
        }
-       memset(start, 0, nr * sizeof(struct page));
+       memset((void *)start, 0, end - start);
        ret = 0;
 out:
-       flush_tlb_kernel_range(start_addr, end_addr);
+       flush_tlb_kernel_range(start, end);
        return ret;
 }
 
-void vmemmap_free(struct page *memmap, unsigned long nr_pages)
+void vmemmap_free(unsigned long start, unsigned long end)
 {
 }