Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d96221ab authored by Heiko Carstens's avatar Heiko Carstens Committed by Martin Schwidefsky
Browse files

[S390] free_initmem: reduce code duplication



free_initmem() and free_initrd_mem() are nearly identical. So make them
call a common function.
Also fixes a bug: if the initrd wouldn't start on a page boundary also
memory after the initrd would be initialized with the poison value.

Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent b8e660b8
Loading
Loading
Loading
Loading
+17 −16
Original line number Original line Diff line number Diff line
@@ -143,33 +143,34 @@ void kernel_map_pages(struct page *page, int numpages, int enable)
}
}
#endif
#endif


void free_initmem(void)
void free_init_pages(char *what, unsigned long begin, unsigned long end)
{
{
        unsigned long addr;
	unsigned long addr = begin;


        addr = (unsigned long)(&__init_begin);
	if (begin >= end)
        for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
		return;
	for (; addr < end; addr += PAGE_SIZE) {
		ClearPageReserved(virt_to_page(addr));
		ClearPageReserved(virt_to_page(addr));
		init_page_count(virt_to_page(addr));
		init_page_count(virt_to_page(addr));
		memset((void *)addr, POISON_FREE_INITMEM, PAGE_SIZE);
		memset((void *)(addr & PAGE_MASK), POISON_FREE_INITMEM,
		       PAGE_SIZE);
		free_page(addr);
		free_page(addr);
		totalram_pages++;
		totalram_pages++;
	}
	}
        printk ("Freeing unused kernel memory: %ldk freed\n",
	printk(KERN_INFO "Freeing %s: %luk freed\n", what, (end - begin) >> 10);
		((unsigned long)&__init_end - (unsigned long)&__init_begin) >> 10);
}

void free_initmem(void)
{
	free_init_pages("unused kernel memory",
			(unsigned long)&__init_begin,
			(unsigned long)&__init_end);
}
}


#ifdef CONFIG_BLK_DEV_INITRD
#ifdef CONFIG_BLK_DEV_INITRD
void free_initrd_mem(unsigned long start, unsigned long end)
void free_initrd_mem(unsigned long start, unsigned long end)
{
{
        if (start < end)
	free_init_pages("initrd memory", start, end);
                printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
        for (; start < end; start += PAGE_SIZE) {
                ClearPageReserved(virt_to_page(start));
                init_page_count(virt_to_page(start));
                free_page(start);
                totalram_pages++;
        }
}
}
#endif
#endif