• env->interrupt_request is accessed as the bit level from both main code
    and signal handler, making a race condition possible even on CISC CPU.
    This causes freeze of QEMU under high load when running the dyntick
    clock.
    
    The patch below move the bit corresponding to CPU_INTERRUPT_EXIT in a
    separate variable, declared as volatile sig_atomic_t, so it should be
    work even on RISC CPU.
    
    We may want to move the cpu_interrupt(env, CPU_INTERRUPT_EXIT) case in
    its own function and get rid of CPU_INTERRUPT_EXIT. That can be done
    later, I wanted to keep the patch short for easier review.
    
    Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6728 c046a42c-6fe2-441c-8c8c-71466251a162
    aurel32 authored
     
    Browse Code »






  • SVM specifies that the V_IRQ mask is only to be removed, if the
    interrupt that is to be delivered actually is delivered.
    
    As of the SVM rewrite, this mask is always unmasked when the main cpu
    loop is processed, leaving a corner case where calling the interrupt
    handler causes a #PF. In that case (booting Linux / starting gfxboot)
    the current implementation tells the VMM the interrupt is taken, even
    though it is not.
    
    This patch modifies the VIRQ unmasking to occur after do_interrupt,
    making gfxboot work again.
    
    Signed-off-by: Alexander Graf <agraf@suse.de>
    Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6008 c046a42c-6fe2-441c-8c8c-71466251a162
    aurel32 authored
     
    Browse Code »








  • Commit #5620 revealed an issue of the SSTEP_NOIRQ masking that was
    applied on all interrupt sources (including internal ones) when single
    stepping through the guest. Due to that commit, we now ended up in an
    infinite loop when CPU_INTERRUPT_EXIT was pending on SSTEP resume. That
    was due to #5620 eating all TBs while CPU_INTERRUPT_EXIT is pending, but
    SSTEP_NOIRQ preventing CPU_INTERRUPT_EXIT to be processed.
    
    What SSTEP_NOIRQ should actually do is to block the delivery of all
    external, guest visible interrupts. With the fix below applied, single
    stepping now works again.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5643 c046a42c-6fe2-441c-8c8c-71466251a162
    malc authored
     
    Browse Code »
  • No longer used, remove it.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5641 c046a42c-6fe2-441c-8c8c-71466251a162
    aurel32 authored
     
    Browse Code »

  • This patch adds very basic KVM support.  KVM is a kernel module for Linux that
    allows userspace programs to make use of hardware virtualization support.  It
    current supports x86 hardware virtualization using Intel VT-x or AMD-V.  It
    also supports IA64 VT-i, PPC 440, and S390.
    
    This patch only implements the bare minimum support to get a guest booting.  It
    has very little impact the rest of QEMU and attempts to integrate nicely with
    the rest of QEMU.
    
    Even though this implementation is basic, it is significantly faster than TCG.
    Booting and shutting down a Linux guest:
    
    w/TCG:  1:32.36 elapsed  84% CPU
    
    w/KVM:  0:31.14 elapsed  59% CPU
    
    Right now, KVM is disabled by default and must be explicitly enabled with
     -enable-kvm.  We can enable it by default later when we have had better
    testing.
    
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    
    
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5627 c046a42c-6fe2-441c-8c8c-71466251a162
    aliguori authored
     
    Browse Code »

  • cpu_interrupt might be called while translating the TB, but before it
    is linked into a potentially infinite loop and becomes env->current_tb.
    
    Currently this can (and does) cause huge problems only when using
    dyntick clock, with other (periodic) clocks host_alarm_handler will
    eventually be executed resulting in a call to cpu_interrupt which will
    reset the recursion of running TB and the damage is "only" latency.
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5620 c046a42c-6fe2-441c-8c8c-71466251a162
    malc authored
     
    Browse Code »