Re: [RFC/PATCH 2/4] powerpc/64/kexec: Fix MMU cleanup on radix
From: Balbir Singh <bsingharora@gmail.com>
Date: 2016-07-08 02:55:17
On 06/07/16 14:34, Benjamin Herrenschmidt wrote:
Just using the hash ops won't work anymore since radix will have NULL in there. Instead create an mmu_cleanup_all() function which will do the right thing based on the MMU mode. For Radix, for now I clear UPRT and the PTCR, effectively switching back to Radix with no partition table setup. Currently set it to NULL on BookE thought it might be a good idea to wipe the TLB there (Scott ?) Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
<snip>
+
+/* For use by kexec */
+void mmu_cleanup_all(void)
+{
+ if (radix_enabled())
+ radix__mmu_cleanup_all();Should this be more than just radix -- cpu_has_feature(CPU_FTR_ARCH_300)?
quoted hunk ↗ jump to hunk
+ else if (mmu_hash_ops.hpte_clear_all) + mmu_hash_ops.hpte_clear_all(); +}diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c index 3ababda..f127baa 100644 --- a/arch/powerpc/mm/pgtable-radix.c +++ b/arch/powerpc/mm/pgtable-radix.c@@ -366,6 +366,16 @@ void radix__early_init_mmu_secondary(void) } } +void radix__mmu_cleanup_all(void) +{ + unsigned long lpcr; + if (!firmware_has_feature(FW_FEATURE_LPAR)) { + lpcr = mfspr(SPRN_LPCR); + mtspr(SPRN_LPCR, lpcr & ~LPCR_UPRT); + mtspr(SPRN_PTCR, 0);
Free up the patb data structure here? We also need tlbie's to invalidate any caches pointing to the patb entries Balbir Singh.