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

Commit 421fe93c authored by Russell King's avatar Russell King
Browse files

ARM: ZERO_PAGE: Avoid flush_dcache_page() for zero page



The zero page is read-only, and has its cache state cleared during
boot.  No further maintanence for this page is required.

Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent b7dc0b2c
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -151,7 +151,14 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte_t pte)
	if (!pfn_valid(pfn))
		return;

	/*
	 * The zero page is never written to, so never has any dirty
	 * cache lines, and therefore never needs to be flushed.
	 */
	page = pfn_to_page(pfn);
	if (page == ZERO_PAGE(0))
		return;

	mapping = page_mapping(page);
#ifndef CONFIG_SMP
	if (test_and_clear_bit(PG_dcache_dirty, &page->flags))
+10 −1
Original line number Diff line number Diff line
@@ -189,7 +189,16 @@ static void __flush_dcache_aliases(struct address_space *mapping, struct page *p
 */
void flush_dcache_page(struct page *page)
{
	struct address_space *mapping = page_mapping(page);
	struct address_space *mapping;

	/*
	 * The zero page is never written to, so never has any dirty
	 * cache lines, and therefore never needs to be flushed.
	 */
	if (page == ZERO_PAGE(0))
		return;

	mapping = page_mapping(page);

#ifndef CONFIG_SMP
	if (!PageHighMem(page) && mapping && !mapping_mapped(mapping))
+1 −1
Original line number Diff line number Diff line
@@ -1036,7 +1036,7 @@ void __init paging_init(struct machine_desc *mdesc)
	 */
	zero_page = alloc_bootmem_low_pages(PAGE_SIZE);
	empty_zero_page = virt_to_page(zero_page);
	flush_dcache_page(empty_zero_page);
	__flush_dcache_page(NULL, empty_zero_page);
}

/*