/* * empty_zero_page is a special page that is used for * zero-initialized data and COW.
*/ struct page *empty_zero_page;
EXPORT_SYMBOL(empty_zero_page);
unsignedlong setup_vectors_base(void)
{ unsignedlong base = 0, reg = get_cr();
set_cr(reg & ~CR_V); if (security_extensions_enabled()) { if (IS_ENABLED(CONFIG_REMAP_VECTORS_TO_RAM))
base = CONFIG_DRAM_BASE;
set_vbar(base);
} elseif (IS_ENABLED(CONFIG_REMAP_VECTORS_TO_RAM)) { if (CONFIG_DRAM_BASE != 0)
pr_err("Security extensions not enabled, vectors cannot be remapped to RAM, vectors base will be 0x00000000\n");
}
void __init arm_mm_memblock_reserve(void)
{ #ifndef CONFIG_CPU_V7M
vectors_base = IS_ENABLED(CONFIG_CPU_CP15) ? setup_vectors_base() : 0; /* * Register the exception vector page. * some architectures which the DRAM is the exception vector to trap, * alloc_page breaks with error, although it is not NULL, but "0."
*/
memblock_reserve(vectors_base, 2 * PAGE_SIZE); #else/* ifndef CONFIG_CPU_V7M */ /* * There is no dedicated vector page on V7-M. So nothing needs to be * reserved here.
*/ #endif /* * In any case, always ensure address 0 is never used as many things * get very confused if 0 is returned as a legitimate address.
*/
memblock_reserve(0, 1);
}
/* * paging_init() sets up the page tables, initialises the zone memory * maps, and sets up the zero page, bad page and bad page tables.
*/ void __init paging_init(conststruct machine_desc *mdesc)
{ void *zero_page;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.