Merge tag 'powerpc-4.14-4' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
Pull powerpc fixes from Michael Ellerman: "Nine small fixes, really nothing that stands out. A work-around for a spurious MCE on Power9. A CXL fault handling fix, some fixes to the new XIVE code, and a fix to the new 32-bit STRICT_KERNEL_RWX code. Fixes for old code/stable: an fix to an incorrect TLB flush on boot but not on any current machines, a compile error on 4xx and a fix to memory hotplug when using radix (Power9). Thanks to: Anton Blanchard, Cédric Le Goater, Christian Lamparter, Christophe Leroy, Christophe Lombard, Guenter Roeck, Jeremy Kerr, Michael Neuling, Nicholas Piggin" * tag 'powerpc-4.14-4' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: powerpc/powernv: Increase memory block size to 1GB on radix powerpc/mm: Call flush_tlb_kernel_range with interrupts enabled powerpc/xive: Clear XIVE internal structures when a CPU is removed powerpc/xive: Fix IPI reset powerpc/4xx: Fix compile error with 64K pages on 40x, 44x powerpc: Fix action argument for cpufeatures-based TLB flush cxl: Fix memory page not handled powerpc: Fix workaround for spurious MCE on POWER9 powerpc: Handle MCE on POWER9 with only DSISR bit 30 set
This commit is contained in:
@@ -102,10 +102,10 @@ static void cpufeatures_flush_tlb(void)
|
||||
case PVR_POWER8:
|
||||
case PVR_POWER8E:
|
||||
case PVR_POWER8NVL:
|
||||
__flush_tlb_power8(POWER8_TLB_SETS);
|
||||
__flush_tlb_power8(TLB_INVAL_SCOPE_GLOBAL);
|
||||
break;
|
||||
case PVR_POWER9:
|
||||
__flush_tlb_power9(POWER9_TLB_SETS_HASH);
|
||||
__flush_tlb_power9(TLB_INVAL_SCOPE_GLOBAL);
|
||||
break;
|
||||
default:
|
||||
pr_err("unknown CPU version for boot TLB flush\n");
|
||||
|
@@ -624,5 +624,18 @@ long __machine_check_early_realmode_p8(struct pt_regs *regs)
|
||||
|
||||
long __machine_check_early_realmode_p9(struct pt_regs *regs)
|
||||
{
|
||||
/*
|
||||
* On POWER9 DD2.1 and below, it's possible to get a machine check
|
||||
* caused by a paste instruction where only DSISR bit 25 is set. This
|
||||
* will result in the MCE handler seeing an unknown event and the kernel
|
||||
* crashing. An MCE that occurs like this is spurious, so we don't need
|
||||
* to do anything in terms of servicing it. If there is something that
|
||||
* needs to be serviced, the CPU will raise the MCE again with the
|
||||
* correct DSISR so that it can be serviced properly. So detect this
|
||||
* case and mark it as handled.
|
||||
*/
|
||||
if (SRR1_MC_LOADSTORE(regs->msr) && regs->dsisr == 0x02000000)
|
||||
return 1;
|
||||
|
||||
return mce_handle_error(regs, mce_p9_derror_table, mce_p9_ierror_table);
|
||||
}
|
||||
|
@@ -904,9 +904,6 @@ void __init setup_arch(char **cmdline_p)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PPC_64K_PAGES
|
||||
init_mm.context.pte_frag = NULL;
|
||||
#endif
|
||||
#ifdef CONFIG_SPAPR_TCE_IOMMU
|
||||
mm_iommu_init(&init_mm);
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user