All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Ellerman <patch-notifications@ellerman.id.au>
To: Michael Ellerman <mpe@ellerman.id.au>, linuxppc-dev@ozlabs.org
Cc: paulus@samba.org, npiggin@gmail.com
Subject: Re: powerpc/kvm: Fix lockups when running KVM guests on Power8
Date: Thu, 19 Apr 2018 23:42:09 +1000 (AEST)	[thread overview]
Message-ID: <40RgC76JV0z9s3D@ozlabs.org> (raw)
In-Reply-To: <20180419132950.16752-1-mpe@ellerman.id.au>

On Thu, 2018-04-19 at 13:29:50 UTC, Michael Ellerman wrote:
> When running KVM guests on Power8 we can see a lockup where one CPU
> stops responding. This often leads to a message such as:
> 
>   watchdog: CPU 136 detected hard LOCKUP on other CPUs 72
>   Task dump for CPU 72:
>   qemu-system-ppc R  running task    10560 20917  20908 0x00040004
> 
> And then backtraces on other CPUs, such as:
> 
>   Task dump for CPU 48:
>   ksmd            R  running task    10032  1519      2 0x00000804
>   Call Trace:
>     ...
>     --- interrupt: 901 at smp_call_function_many+0x3c8/0x460
>         LR = smp_call_function_many+0x37c/0x460
>     pmdp_invalidate+0x100/0x1b0
>     __split_huge_pmd+0x52c/0xdb0
>     try_to_unmap_one+0x764/0x8b0
>     rmap_walk_anon+0x15c/0x370
>     try_to_unmap+0xb4/0x170
>     split_huge_page_to_list+0x148/0xa30
>     try_to_merge_one_page+0xc8/0x990
>     try_to_merge_with_ksm_page+0x74/0xf0
>     ksm_scan_thread+0x10ec/0x1ac0
>     kthread+0x160/0x1a0
>     ret_from_kernel_thread+0x5c/0x78
> 
> This is caused by commit 8c1c7fb0b5ec ("powerpc/64s/idle: avoid sync
> for KVM state when waking from idle"), which added a check in
> pnv_powersave_wakeup() to see if the kvm_hstate.hwthread_state is
> already set to KVM_HWTHREAD_IN_KERNEL, and if so to skip the store and
> test of kvm_hstate.hwthread_req.
> 
> The problem is that the primary does not set KVM_HWTHREAD_IN_KVM when
> entering the guest, so it can then come out to cede with
> KVM_HWTHREAD_IN_KERNEL set. It can then go idle in kvm_do_nap after
> setting hwthread_req to 1, but because hwthread_state is still
> KVM_HWTHREAD_IN_KERNEL we will skip the test of hwthread_req when we
> wake up from idle and won't go to kvm_start_guest. From there the
> thread will return somewhere garbage and crash.
> 
> Fix it by skipping the store of hwthread_state, but not the test of
> hwthread_req, when coming out of idle. It's OK to skip the sync in
> that case because hwthread_req will have been set on the same thread,
> so there is no synchronisation required.
> 
> Fixes: 8c1c7fb0b5ec ("powerpc/64s/idle: avoid sync for KVM state when waking from idle")
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>

Applied to powerpc fixes.

https://git.kernel.org/powerpc/c/56376c5864f8ff4ba7c78a80ae857e

cheers

      reply	other threads:[~2018-04-19 13:42 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-19 13:29 [PATCH] powerpc/kvm: Fix lockups when running KVM guests on Power8 Michael Ellerman
2018-04-19 13:42 ` Michael Ellerman [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=40RgC76JV0z9s3D@ozlabs.org \
    --to=patch-notifications@ellerman.id.au \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=npiggin@gmail.com \
    --cc=paulus@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.