ARM: ensure initial page tables are setup for SMP systems
Mapping the same memory using two different attributes (memory type, shareability, cacheability) is unpredictable. During boot, we encounter a situation when we're updating the kernel's page tables which can lead to dirty cache lines existing in the cache which are subsequently missed. This causes stack corruption, and therefore a crash. Therefore, ensure that the shared and cacheability settings matches the configuration that will be used later; this together with the restriction in early_cachepolicy() ensures that we won't create a mismatch during boot. Acked-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
@ -117,6 +117,13 @@ static void __init early_cachepolicy(char **p)
|
||||
}
|
||||
if (i == ARRAY_SIZE(cache_policies))
|
||||
printk(KERN_ERR "ERROR: unknown or unsupported cache policy\n");
|
||||
/*
|
||||
* This restriction is partly to do with the way we boot; it is
|
||||
* unpredictable to have memory mapped using two different sets of
|
||||
* memory attributes (shared, type, and cache attribs). We can not
|
||||
* change these attributes once the initial assembly has setup the
|
||||
* page tables.
|
||||
*/
|
||||
if (cpu_architecture() >= CPU_ARCH_ARMv6) {
|
||||
printk(KERN_WARNING "Only cachepolicy=writeback supported on ARMv6 and later\n");
|
||||
cachepolicy = CPOLICY_WRITEBACK;
|
||||
|
Reference in New Issue
Block a user