qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Re: [PATCH v2 13/24] kvm: Set up signal mask also for !CONF


From: Avi Kivity
Subject: [Qemu-devel] Re: [PATCH v2 13/24] kvm: Set up signal mask also for !CONFIG_IOTHREAD
Date: Mon, 28 Feb 2011 18:45:56 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101209 Fedora/3.1.7-0.35.b3pre.fc14 Lightning/1.0b3pre Thunderbird/3.1.7

On 02/28/2011 06:16 PM, Jan Kiszka wrote:
On 2011-02-28 16:55, Avi Kivity wrote:
>  On 02/01/2011 11:15 PM, Jan Kiszka wrote:
>>  From: Jan Kiszka<address@hidden>
>>
>>  Block SIG_IPI, unblock it during KVM_RUN, just like in io-thread mode.
>>  It's unused so far, but this infrastructure will be required for
>>  self-IPIs and to process SIGBUS plus, in KVM mode, SIGIO and SIGALRM. As
>>  Windows doesn't support signal services, we need to provide a stub for
>>  the init function.
>>
>
>  This patch breaks qemu-kvm after merging.  The symptoms are that Windows
>  XP x64 does not respond when netcat connects to some server in it, via
>  -net user,hostfwd.  The vcpu thread loops indefinitely on KVM_EXIT_INTR,
>  which is consistent with signals being messed up.
>
>  I verified that 981085dd465c1 merged with ff48eb5fe79ad works,
>  while 981085dd465c1 merged with ff48eb5fe79ad^ fails.
>
>
>>  diff --git a/cpus.c b/cpus.c
>>  index 42717ba..a33e470 100644
>>  --- a/cpus.c
>>  +++ b/cpus.c
>>  @@ -231,11 +231,9 @@ fail:
>>        return err;
>>    }
>>
>>  -#ifdef CONFIG_IOTHREAD
>>    static void dummy_signal(int sig)
>>    {
>>    }
>>  -#endif
>>
>>    #else /* _WIN32 */
>>
>>  @@ -267,6 +265,32 @@ static void qemu_event_increment(void)
>>    #endif /* _WIN32 */
>>
>>    #ifndef CONFIG_IOTHREAD
>>  +static void qemu_kvm_init_cpu_signals(CPUState *env)
>>  +{
>>  +#ifndef _WIN32
>>  +    int r;
>>  +    sigset_t set;
>>  +    struct sigaction sigact;
>>  +
>>  +    memset(&sigact, 0, sizeof(sigact));
>>  +    sigact.sa_handler = dummy_signal;
>>  +    sigaction(SIG_IPI,&sigact, NULL);
>>  +
>>  +    sigemptyset(&set);
>>  +    sigaddset(&set, SIG_IPI);
>>  +    pthread_sigmask(SIG_BLOCK,&set, NULL);
>>  +
>>  +    pthread_sigmask(SIG_BLOCK, NULL,&set);
>>  +    sigdelset(&set, SIG_IPI);
>>  +    sigdelset(&set, SIGBUS);
>>  +    r = kvm_set_signal_mask(env,&set);
>>  +    if (r) {
>>  +        fprintf(stderr, "kvm_set_signal_mask: %s\n", strerror(-r));
>>  +        exit(1);
>>  +    }
>>  +#endif
>>  +}
>>  +
>>    int qemu_init_main_loop(void)
>>    {
>>        cpu_set_debug_excp_handler(cpu_debug_handler);
>>  @@ -292,6 +316,7 @@ void qemu_init_vcpu(void *_env)
>>                fprintf(stderr, "kvm_init_vcpu failed: %s\n",
>>  strerror(-r));
>>                exit(1);
>>            }
>>  +        qemu_kvm_init_cpu_signals(env);

Just comment that out as long as qemu-kvm is (mis-)using !IOTHREAD mode.
I thought it would run before setup_kernel_sigmask, but it's the other
way around, and then the wrong non-iothread signal setup is applied.

That's what I tried, and it didn't work?! Maybe I forgot to compile or something.

--
error compiling committee.c: too many arguments to function




reply via email to

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