[bug] KVM: Unrecoverable TM Unavailable Exception f60
Benjamin Herrenschmidt
benh at kernel.crashing.org
Fri Jul 14 06:59:36 AEST 2017
On Thu, 2017-07-13 at 11:46 -0300, Gustavo Romero wrote:
> Hi Jan
> Looks like that TM unavailable exception will only able to recover
> properly if it comes from problem state and since the trigger comes
> from kernel space (kvm module) it does not match
> "if (user_mode(regs))" in tm_unavailable().
>
> I'm able to avoid this problem using the following patch:
I think the KVM exit path should be enabling TM if necessary rather
than taking the fault.
> diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
> index d4e545d27ef9..1091dc4f4274 100644
> --- a/arch/powerpc/kernel/traps.c
> +++ b/arch/powerpc/kernel/traps.c
> @@ -1433,13 +1433,11 @@ void vsx_unavailable_exception(struct pt_regs *regs)
> static void tm_unavailable(struct pt_regs *regs)
> {
> #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
> - if (user_mode(regs)) {
> - current->thread.load_tm++;
> - regs->msr |= MSR_TM;
> - tm_enable();
> - tm_restore_sprs(¤t->thread);
> - return;
> - }
> + current->thread.load_tm++;
> + regs->msr |= MSR_TM;
> + tm_enable();
> + tm_restore_sprs(¤t->thread);
> + return;
> #endif
> pr_emerg("Unrecoverable TM Unavailable Exception "
> "%lx at %lx\n", regs->trap, regs->nip);
>
> Regards,
> Gustavo
More information about the Linuxppc-dev
mailing list