[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] coroutine-ucontext broken for x86-32
From: |
Michael Tokarev |
Subject: |
Re: [Qemu-devel] coroutine-ucontext broken for x86-32 |
Date: |
Wed, 09 May 2012 22:05:47 +0400 |
User-agent: |
Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.3) Gecko/20120329 Icedove/10.0.3 |
On 08.05.2012 23:35, Jan Kiszka wrote:
> Hi,
>
> I hunted down a fairly subtle corruption of the VCPU thread signal mask
> in KVM mode when using the ucontext version of coroutines:
>
> coroutine_new calls getcontext, makecontext, swapcontext. Those
> functions get/set also the signal mask of the caller. Unfortunately,
> they only use the sigprocmask syscall on i386, not the rt_sigprocmask
> version. So they do not properly save/restore the blocked RT signals,
> namely our SIG_IPI - it becomes unblocke this way. And this will sooner
> or later make the kernel actually deliver a SIG_IPI to our
> dummy_handler, and we miss a wakeup, which means losing control over
> VCPU thread - qemu hangs.
>
> I was able to reproduce the issue very reliably with virtio-block
> enabled, 32-bit qemu userspace on a 64-bit host, using a 32-bit WinXP
> guest.
>
> Simple workaround:
>
> diff --git a/main-loop.h b/main-loop.h
> index c06b8bc..dce1cd9 100644
> --- a/main-loop.h
> +++ b/main-loop.h
> @@ -25,11 +25,7 @@
> #ifndef QEMU_MAIN_LOOP_H
> #define QEMU_MAIN_LOOP_H 1
>
> -#ifdef SIGRTMIN
> -#define SIG_IPI (SIGRTMIN+4)
> -#else
> #define SIG_IPI SIGUSR1
> -#endif
[]
> Michael, maybe this also relates to the issue you saw. I'm not able to
> reproduce any VAPIC problems after make Windows bootable by switching
> to SIGUSR1.
FWIW, this fixes both the STOP 0x5c during reboot of windows 32bit
guest and my other issue, with qemu stalling on 32/64bit environment.
So yes indeed, that's the same thing apparently...
Nice catch!
/mjt
- Re: [Qemu-devel] coroutine-ucontext broken for x86-32, (continued)
- Re: [Qemu-devel] coroutine-ucontext broken for x86-32, Kevin Wolf, 2012/05/09
- Re: [Qemu-devel] coroutine-ucontext broken for x86-32, Jan Kiszka, 2012/05/09
- Re: [Qemu-devel] coroutine-ucontext broken for x86-32, Peter Maydell, 2012/05/09
- Re: [Qemu-devel] coroutine-ucontext broken for x86-32, Jan Kiszka, 2012/05/09
- Re: [Qemu-devel] coroutine-ucontext broken for x86-32, Anthony Liguori, 2012/05/09
- Re: [Qemu-devel] coroutine-ucontext broken for x86-32, Jan Kiszka, 2012/05/09
- Re: [Qemu-devel] coroutine-ucontext broken for x86-32, Anthony Liguori, 2012/05/09
- Re: [Qemu-devel] coroutine-ucontext broken for x86-32, Jan Kiszka, 2012/05/09
- Re: [Qemu-devel] coroutine-ucontext broken for x86-32, Avi Kivity, 2012/05/09
Re: [Qemu-devel] coroutine-ucontext broken for x86-32,
Michael Tokarev <=