Patchwork [1.1] Switch SIG_IPI to SIGUSR1

login
register
mail settings
Submitter Jan Kiszka
Date May 9, 2012, 10:14 p.m.
Message ID <4FAAEC41.70608@siemens.com>
Download mbox | patch
Permalink /patch/158053/
State New
Headers show

Comments

Jan Kiszka - May 9, 2012, 10:14 p.m.
Use SIGUSR1 unconditionally as SIG_IPI. First, ucontext coroutines tend
to corrupt RT signal masks due to a 32-on-64-bit Linux kernel bug. And,
second, there appears to be no advantage in using RT signals for VCPU
kicking.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---

As people prefer to stick with ucontext, this replaces the backend
switch for i386-linux.

Avi, you once committed the RT signal based SIG_IPI version to
qemu-kvm. Can you confirm that SIGUSR1 comes with no downside?

This is also stable material.

 main-loop.h |    4 ----
 1 files changed, 0 insertions(+), 4 deletions(-)
Andreas Färber - May 9, 2012, 10:36 p.m.
Am 10.05.2012 00:14, schrieb Jan Kiszka:
> Use SIGUSR1 unconditionally as SIG_IPI. First, ucontext coroutines tend
> to corrupt RT signal masks due to a 32-on-64-bit Linux kernel bug. And,
> second, there appears to be no advantage in using RT signals for VCPU
> kicking.
> 
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
[...]
> This is also stable material.

Please cc qemu-stable then. When omitting that in the original patch
submission, stable maintainers won't notice when the patch gets a
"Thanks, applied" reply.

/-F
Avi Kivity - May 10, 2012, 9:35 a.m.
On 05/10/2012 01:14 AM, Jan Kiszka wrote:
> Use SIGUSR1 unconditionally as SIG_IPI. First, ucontext coroutines tend
> to corrupt RT signal masks due to a 32-on-64-bit Linux kernel bug. And,
> second, there appears to be no advantage in using RT signals for VCPU
> kicking.
>
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>
> As people prefer to stick with ucontext, this replaces the backend
> switch for i386-linux.
>
> Avi, you once committed the RT signal based SIG_IPI version to
> qemu-kvm. Can you confirm that SIGUSR1 comes with no downside?
>

In fact SIGUSR1 would be better in that real-time signals are queued, so
two IPIs are delivered twice with the old SIG_IPI and only once with
SIGUSR1.

I have some vague recollection that real time signals are handled faster
in the kernel.  Even if this is true, it's meaningless with kernel
irqchip since signalling is only used heavily with userspace APIC.
Anthony Liguori - May 14, 2012, 3:04 p.m.
On 05/09/2012 05:14 PM, Jan Kiszka wrote:
> Use SIGUSR1 unconditionally as SIG_IPI. First, ucontext coroutines tend
> to corrupt RT signal masks due to a 32-on-64-bit Linux kernel bug. And,
> second, there appears to be no advantage in using RT signals for VCPU
> kicking.
>
> Signed-off-by: Jan Kiszka<jan.kiszka@siemens.com>

Applied.  Thanks.

Regards,

Anthony Liguori

> ---
>
> As people prefer to stick with ucontext, this replaces the backend
> switch for i386-linux.
>
> Avi, you once committed the RT signal based SIG_IPI version to
> qemu-kvm. Can you confirm that SIGUSR1 comes with no downside?
>
> This is also stable material.
>
>   main-loop.h |    4 ----
>   1 files changed, 0 insertions(+), 4 deletions(-)
>
> 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
>
>   /**
>    * qemu_init_main_loop: Set up the process so that it can run the main loop.

Patch

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
 
 /**
  * qemu_init_main_loop: Set up the process so that it can run the main loop.