qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@web.de>
To: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Huang Ying <ying.huang@intel.com>, Avi Kivity <avi@redhat.com>,
	kvm@vger.kernel.org, qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH 07/18] kvm: Add MCE signal support for !CONFIG_IOTHREAD
Date: Wed, 26 Jan 2011 13:06:14 +0100	[thread overview]
Message-ID: <4D400E36.6090009@web.de> (raw)
In-Reply-To: <20110126120113.GB25302@amt.cnet>

[-- Attachment #1: Type: text/plain, Size: 3929 bytes --]

On 2011-01-26 13:01, Marcelo Tosatti wrote:
> On Wed, Jan 26, 2011 at 09:09:25AM +0100, Jan Kiszka wrote:
>> On 2011-01-24 13:36, Jan Kiszka wrote:
>>> On 2011-01-24 12:17, Marcelo Tosatti wrote:
>>>> On Mon, Jan 10, 2011 at 09:32:00AM +0100, Jan Kiszka wrote:
>>>>> From: Jan Kiszka <jan.kiszka@siemens.com>
>>>>>
>>>>> Currently, we only configure and process MCE-related SIGBUS events if
>>>>> CONFIG_IOTHREAD is enabled. Fix this by factoring out the required
>>>>> handler registration and system configuration. Make sure that events
>>>>> happening over a VCPU context in non-threaded mode get dispatched as
>>>>> VCPU MCEs.
>>>>>
>>>>> We also need to call qemu_kvm_eat_signals in non-threaded mode now, so
>>>>> move it (unmodified) and add the required Windows stub.
>>>>>
>>>>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
>>>>> CC: Huang Ying <ying.huang@intel.com>
>>>>> ---
>>>>>  cpus.c |  200 +++++++++++++++++++++++++++++++++++++++------------------------
>>>>>  1 files changed, 124 insertions(+), 76 deletions(-)
>>>>>
>>>>> diff --git a/cpus.c b/cpus.c
>>>>> index 6da0f8f..b6f1cfb 100644
>>>>> --- a/cpus.c
>>>>> +++ b/cpus.c
>>>>> @@ -34,9 +34,6 @@
>>>>>  
>>>>>  #include "cpus.h"
>>>>>  #include "compatfd.h"
>>>>> -#ifdef CONFIG_LINUX
>>>>> -#include <sys/prctl.h>
>>>>> -#endif
>>>>>  
>>>>>  #ifdef SIGRTMIN
>>>>>  #define SIG_IPI (SIGRTMIN+4)
>>>>> @@ -44,10 +41,24 @@
>>>>>  #define SIG_IPI SIGUSR1
>>>>>  #endif
>>>>>  
>>>>
>>>>> @@ -912,6 +954,8 @@ static int qemu_cpu_exec(CPUState *env)
>>>>>  
>>>>>  bool cpu_exec_all(void)
>>>>>  {
>>>>> +    int r;
>>>>> +
>>>>>      if (next_cpu == NULL)
>>>>>          next_cpu = first_cpu;
>>>>>      for (; next_cpu != NULL && !exit_request; next_cpu = next_cpu->next_cpu) {
>>>>> @@ -923,7 +967,11 @@ bool cpu_exec_all(void)
>>>>>          if (qemu_alarm_pending())
>>>>>              break;
>>>>>          if (cpu_can_run(env)) {
>>>>> -            if (qemu_cpu_exec(env) == EXCP_DEBUG) {
>>>>> +            r = qemu_cpu_exec(env);
>>>>> +            if (kvm_enabled()) {
>>>>> +                qemu_kvm_eat_signals(env);
>>>>> +            }
>>>>> +            if (r == EXCP_DEBUG) {
>>>>>                  break;
>>>>>              }
>>>>
>>>> SIGBUS should be processed outside of vcpu execution context, think of a
>>>> non MCE SIGBUS while vm is stopped. Could use signalfd for that.
>>>
>>> signalfd - that's the missing bit. I was thinking of how to handle
>>> SIGBUS events raised outside the vcpu context. We need to handle them
>>> synchronously, and signalfd should allow this.
>>
>> This was straightforward. But now I wonder what actually makes this
>> pattern work. Doesn't the kernel force-inject SIGBUS, i.e. ignores any
>> blocking? Or does this only apply to BUS_MCEERR_AR?
> 
> SIGBUS is only forced if BUS_MCEERR_AR and the poisoned memory was not accessed 
> on behalf of the guest (say directly by qemu).

OK. I didn't find this detail in the kernel code on first glance, only
force_sig(SIGBUS, current).

> 
>>>> But the SIGBUS handler for !IOTHREAD case should not ignore Action
>>>> Required, since it might have been generated in vcpu context.
>>>>
>>>
>>> Yes, the sigbus handler will require some rework when we actually start
>>> using it for !IOTHREAD.
>>
>> And this no longer makes sense to me. The current version simply uses
>> the same sigbus handler for both modes, an that forwards the error code
>> properly. What did you mean?
> 
> There are two handlers, kvm_on_sigbus and kvm_on_sigbus_vcpu.
> kvm_on_sigbus, the handler for iothread, dies on BUS_MCEERR_AR (which
> will be generated if poisoned memory is accessed on behalf of vcpu). It
> should be handled with !CONFIG_IOTHREAD.

Just as with iothread, vcpu-triggered SIGBUS events are processes by
qemu_kvm_eat_signals, not the signal handler.

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 259 bytes --]

  reply	other threads:[~2011-01-26 12:06 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-01-10  8:31 [Qemu-devel] [PATCH 00/18] [uq/master] MCE & IO exit fixes, prepare for VCPU loop reuse Jan Kiszka
2011-01-10  8:31 ` [Qemu-devel] [PATCH 01/18] Revert "kvm: Drop return value of kvm_cpu_exec" Jan Kiszka
2011-01-10  8:31 ` [Qemu-devel] [PATCH 02/18] kvm: Drop redundant kvm_enabled from kvm_cpu_thread_fn Jan Kiszka
2011-01-10  8:31 ` [Qemu-devel] [PATCH 03/18] kvm: Provide sigbus services arch-independently Jan Kiszka
2011-01-10 10:13   ` [Qemu-devel] " Paolo Bonzini
2011-01-10 10:30     ` Jan Kiszka
2011-01-10  8:31 ` [Qemu-devel] [PATCH 04/18] Refactor signal setup functions in cpus.c Jan Kiszka
2011-01-10  8:31 ` [Qemu-devel] [PATCH 05/18] kvm: Set up signal mask also for !CONFIG_IOTHREAD Jan Kiszka
2011-01-10  8:31 ` [Qemu-devel] [PATCH 06/18] kvm: Refactor qemu_kvm_eat_signals Jan Kiszka
2011-01-10 10:15   ` [Qemu-devel] " Paolo Bonzini
2011-01-10  8:32 ` [Qemu-devel] [PATCH 07/18] kvm: Add MCE signal support for !CONFIG_IOTHREAD Jan Kiszka
2011-01-24 11:17   ` [Qemu-devel] " Marcelo Tosatti
2011-01-24 12:36     ` Jan Kiszka
2011-01-26  8:09       ` Jan Kiszka
2011-01-26 12:01         ` Marcelo Tosatti
2011-01-26 12:06           ` Jan Kiszka [this message]
2011-01-10  8:32 ` [Qemu-devel] [PATCH 08/18] kvm: Handle kvm_init_vcpu errors Jan Kiszka
2011-01-10  8:32 ` [Qemu-devel] [PATCH 09/18] Refactor kvm&tcg function names in cpus.c Jan Kiszka
2011-01-10  8:32 ` [Qemu-devel] [PATCH 10/18] Fix a few coding style violations " Jan Kiszka
2011-01-10  8:32 ` [Qemu-devel] [PATCH 11/18] Introduce VCPU self-signaling service Jan Kiszka
2011-01-24 11:47   ` [Qemu-devel] " Marcelo Tosatti
2011-01-24 12:36     ` Jan Kiszka
2011-01-10  8:32 ` [Qemu-devel] [PATCH 12/18] kvm: Move irqchip event processing out of inner loop Jan Kiszka
2011-01-10  8:32 ` [Qemu-devel] [PATCH 13/18] kvm: Unconditionally reenter kernel after IO exits Jan Kiszka
2011-01-10  8:32 ` [Qemu-devel] [PATCH 14/18] kvm: Remove static return code of kvm_handle_io Jan Kiszka
2011-01-10  8:32 ` [Qemu-devel] [PATCH 15/18] kvm: Leave kvm_cpu_exec directly after KVM_EXIT_SHUTDOWN Jan Kiszka
2011-01-10  8:32 ` [Qemu-devel] [PATCH 16/18] kvm: Separate TCG from KVM cpu execution Jan Kiszka
2011-01-10  8:32 ` [Qemu-devel] [PATCH 17/18] kvm: x86: Prepare VCPU loop for in-kernel irqchip Jan Kiszka
2011-01-10  8:32 ` [Qemu-devel] [PATCH 18/18] kvm: Drop return values from kvm_arch_pre/post_run Jan Kiszka
2011-01-10 10:10 ` [Qemu-devel] Re: [PATCH 00/18] [uq/master] MCE & IO exit fixes, prepare for VCPU loop reuse Jan Kiszka

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=4D400E36.6090009@web.de \
    --to=jan.kiszka@web.de \
    --cc=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=ying.huang@intel.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).