[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: [PATCH 07/18] kvm: Add MCE signal support for !CONFIG_I
From: |
Marcelo Tosatti |
Subject: |
[Qemu-devel] Re: [PATCH 07/18] kvm: Add MCE signal support for !CONFIG_IOTHREAD |
Date: |
Wed, 26 Jan 2011 10:01:13 -0200 |
User-agent: |
Mutt/1.5.20 (2009-08-17) |
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 <address@hidden>
> >>>
> >>> 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 <address@hidden>
> >>> CC: Huang Ying <address@hidden>
> >>> ---
> >>> 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).
> >> 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.
- [Qemu-devel] Re: [PATCH 11/18] Introduce VCPU self-signaling service, (continued)
- [Qemu-devel] [PATCH 18/18] kvm: Drop return values from kvm_arch_pre/post_run, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 16/18] kvm: Separate TCG from KVM cpu execution, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 14/18] kvm: Remove static return code of kvm_handle_io, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 12/18] kvm: Move irqchip event processing out of inner loop, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 07/18] kvm: Add MCE signal support for !CONFIG_IOTHREAD, Jan Kiszka, 2011/01/10
[Qemu-devel] Re: [PATCH 00/18] [uq/master] MCE & IO exit fixes, prepare for VCPU loop reuse, Jan Kiszka, 2011/01/10