powerpc/32s: Fix kasan_early_hash_table() for CONFIG_VMAP_STACK

On book3s/32 CPUs that are handling MMU through a hash table,
MMU_init_hw() function was adapted for VMAP_STACK in order to
handle virtual addresses instead of physical addresses in the
low level hash functions.

When using KASAN, the same adaptations are required for the
early hash table set up by kasan_early_hash_table() function.

Fixes: cd08f109e2 ("powerpc/32s: Enable CONFIG_VMAP_STACK")
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/fc8390a33c2a470105f01abbcbdc7916c30c0a54.1580301269.git.christophe.leroy@c-s.fr
This commit is contained in:
Christophe Leroy 2020-01-29 12:34:36 +00:00 committed by Michael Ellerman
parent 76be4414be
commit 4119622488
1 changed files with 5 additions and 2 deletions

View File

@ -185,8 +185,11 @@ u8 __initdata early_hash[256 << 10] __aligned(256 << 10) = {0};
static void __init kasan_early_hash_table(void) static void __init kasan_early_hash_table(void)
{ {
modify_instruction_site(&patch__hash_page_A0, 0xffff, __pa(early_hash) >> 16); unsigned int hash = IS_ENABLED(CONFIG_VMAP_STACK) ? (unsigned int)early_hash :
modify_instruction_site(&patch__flush_hash_A0, 0xffff, __pa(early_hash) >> 16); __pa(early_hash);
modify_instruction_site(&patch__hash_page_A0, 0xffff, hash >> 16);
modify_instruction_site(&patch__flush_hash_A0, 0xffff, hash >> 16);
Hash = (struct hash_pte *)early_hash; Hash = (struct hash_pte *)early_hash;
} }