[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] Odd code in cpus.c
From: |
Jan Kiszka |
Subject: |
Re: [Qemu-devel] Odd code in cpus.c |
Date: |
Fri, 29 Jul 2011 10:49:01 +0200 |
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-07-29 10:34, Frediano Ziglio wrote:
> I don't know that much this code however qemu_kvm_init_cpu_signals
> seems a bit strange and duplicate to me, in cpus.c
>
>
> static void qemu_kvm_init_cpu_signals(CPUState *env)
> {
> int r;
> sigset_t set;
> struct sigaction sigact;
>
> memset(&sigact, 0, sizeof(sigact));
> sigact.sa_handler = dummy_signal;
> sigaction(SIG_IPI, &sigact, NULL);
>
> #ifdef CONFIG_IOTHREAD
> 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);
> }
> #else
> sigemptyset(&set);
> sigaddset(&set, SIG_IPI);
> sigaddset(&set, SIGIO);
> sigaddset(&set, SIGALRM);
> pthread_sigmask(SIG_BLOCK, &set, NULL);
>
> pthread_sigmask(SIG_BLOCK, NULL, &set);
> sigdelset(&set, SIGIO);
> sigdelset(&set, SIGALRM);
> #endif
> 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);
> }
> }
>
>
> if CONFIG_IOTHREAD is set you get
>
>
> static void qemu_kvm_init_cpu_signals(CPUState *env)
> {
> int r;
> sigset_t set;
> struct sigaction sigact;
>
> memset(&sigact, 0, sizeof(sigact));
> sigact.sa_handler = dummy_signal;
> sigaction(SIG_IPI, &sigact, 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);
> }
> 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);
> }
> }
>
>
> which seems to set kvm signal twice with same values (taking into
> account that in kvm_set_signal_mask the set is copied before the call
> to kvm_vcpu_ioctl).
Indeed. Harmless fortunately. I suspect the duplicate bits in the #ifdef
CONFIG_IOTHREAD block were simply forgotten. Paolo?
Jan
--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux