qemu-devel
[Top][All Lists]
Advanced

[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: Jan Kiszka
Subject: [Qemu-devel] Re: [PATCH 07/18] kvm: Add MCE signal support for !CONFIG_IOTHREAD
Date: Mon, 24 Jan 2011 13:36:36 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666

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.

> 
> 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.

Will have a look, thanks,
Jan

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]