• Dirty logs currently get written with native "long" size. On little endian
    it doesn't matter if we use uint64_t instead though, because we'd still end
    up using the right bytes.
    
    On big endian, this does become a bigger problem, so we need to ensure that
    kernel and userspace talk the same language, which means getting rid of "long"
    and using a defined size instead.
    
    So I decided to use 64 bit types at all times. This doesn't break existing
    targets but will in conjunction with a patch I'll send to the KVM ML make
    dirty logs work with 32 bit userspace on 64 kernel with big endian.
    
    Signed-off-by: Alexander Graf <agraf@suse.de>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Alexander Graf authored
     
    Browse Code »

  • KVM can have an in-kernel pit or irqchip. While we don't implement it
    yet, having a way for test for it (that always returns zero) will allow us
    to reuse code in qemu-kvm that tests for it.
    
    Signed-off-by: Glauber Costa <glommer@redhat.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Glauber Costa authored
     
    Browse Code »
  • on_vcpu is a qemu-kvm function that will make sure that a specific
    piece of code will run on a requested cpu. We don't need that because
    we're restricted to -smp 1 right now, but those days are likely to end soon.
    
    So for the benefit of having qemu-kvm share more code with us, I'm
    introducing our own version of on_vcpu(). Right now, we either run
    a function on the current cpu, or abort the execution, because it would
    mean something is seriously wrong.
    
    As an example code, I "ported" kvm_update_guest_debug to use it,
    with some slight differences from qemu-kvm.
    
    This is probably 0.12 material
    
    Signed-off-by: Glauber Costa <glommer@redhat.com>
    CC: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Glauber Costa authored
     
    Browse Code »
  • Some KVM platforms don't support dirty logging yet, like IA64 and PPC,
    so in order to still have screen updates on those, we need to fake it.
    
    This patch just tells the getter function for dirty bitmaps, that all
    pages within a slot are dirty when the slot has dirty logging enabled.
    
    That way we can implement dirty logging on those platforms sometime when
    it drags down performance, but share the rest of the code with dirty
    logging capable platforms.
    
    Signed-off-by: Alexander Graf <agraf@suse.de>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Alexander Graf authored
     
    Browse Code »
  • This fixes a warning I stumbled across while compiling qemu on PPC64.
    
    Signed-off-by: Alexander Graf <agraf@suse.de>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Alexander Graf authored
     
    Browse Code »

  • This reverts commit 8217606e (and
    updates later added users of qemu_register_reset), we solved the
    problem it originally addressed less invasively.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Jan Kiszka authored
     
    Browse Code »
  • During startup and after reset we have to synchronize user space to the
    in-kernel KVM state. Namely, we need to transfer the VCPU registers when
    they change due to VCPU as well as APIC reset.
    
    This patch refactors the required hooks so that kvm_init_vcpu registers
    its own per-VCPU reset handler and adds a cpu_synchronize_state to the
    APIC reset. That way we no longer depend on the new reset order (and can
    drop this disliked interface again) and we can even drop a KVM hook in
    main().
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Jan Kiszka authored
     
    Browse Code »

  • User space may only inject interrupts during kvm_arch_pre_run if
    ready_for_interrupt_injection is set in kvm_run. But that field is
    updated on exit from KVM_RUN, so we must ensure that we enter the
    kernel after potentially queuing an interrupt, otherwise we risk to
    loose one - like it happens with the current code against latest
    kernel modules (since kvm-86) that started to queue only a single
    interrupt.
    
    Fix the problem by reordering kvm_cpu_exec.
    
    Credits go to Gleb Natapov for analyzing the issue in details.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Jan Kiszka authored
     
    Browse Code »


  • Save and restore all so far neglected KVM-specific CPU states. Handling
    the TSC stabilizes migration in KVM mode. The interrupt_bitmap and
    mp_state are currently unused, but will become relevant for in-kernel
    irqchip support. By including proper saving/restoring already, we avoid
    having to increment CPU_SAVE_VERSION later on once again.
    
    v2:
     - initialize mp_state runnable (for the boot CPU)
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Jan Kiszka authored
     
    Browse Code »
  • Use standard callback with highest order to synchronize VCPU on reset
    after all device callbacks were execute. This allows to remove the
    special kvm hook in qemu_system_reset.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Jan Kiszka authored
     
    Browse Code »
  • Extend kvm_physical_sync_dirty_bitmap() so that is can sync across
    multiple slots. Useful for updating the whole dirty log during
    migration. Moreover, properly pass down errors the whole call chain.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Jan Kiszka authored
     
    Browse File »
  • The buffer passed to KVM_GET_DIRTY_LOG requires one bit per page. Fix
    the size calculation in kvm_physical_sync_dirty_bitmap accordingly,
    avoiding allocation of extremly oversized buffers.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Jan Kiszka authored
     
    Browse Code »
  • Introduce a global dirty logging flag that enforces logging for all
    slots. This can be used by the live migration code to enable/disable
    global logging withouth destroying the per-slot setting.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Jan Kiszka authored
     
    Browse Code »
  • Only apply the workaround for broken slot joining in KVM when the
    capability was not found that signals the corresponding fix existence.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Jan Kiszka authored
     
    Browse Code »



  • Avi Kivity wrote:
    > Suggest wrapping in a function and hiding it deep inside kvm-all.c.
    >
    
    Done in v2:
    
    ---------->
    
    If the KVM MMU is asynchronous (kernel does not support MMU_NOTIFIER),
    we have to avoid COW for the guest memory. Otherwise we risk serious
    breakage when guest pages change there physical locations due to COW
    after fork. Seen when forking smbd during runtime via -smb.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Jan Kiszka authored
     
    Browse Code »
  • There is no need to reject an unaligned memory region registration if
    the region will be I/O memory and it will not split an existing KVM
    slot. This fixes KVM support on PPC.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Jan Kiszka authored
     
    Browse File »

  • This reworks the slot management to handle more patterns of
    cpu_register_physical_memory*, finally allowing to reset KVM guests (so
    far address remapping on reset broke the slot management).
    
    We could actually handle all possible ones without failing, but a KVM
    kernel bug in older versions would force us to track all previous
    fragmentations and maintain them (as that bug prevents registering
    larger slots that overlap also deleted ones). To remain backward
    compatible but avoid overly complicated workarounds, we apply a simpler
    workaround that covers all currently used patterns.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7139 c046a42c-6fe2-441c-8c8c-71466251a162
    aliguori authored
     
    Browse Code »
  • Fail loudly if we run out of memory slot.
    
    Make sure that dirty log start/stop works with consistent memory regions
    by reporting invalid parameters. This reveals several inconsistencies in
    the vga code, patch to fix them follows later in this series.
    
    And, for simplicity reasons, also catch and report unaligned memory
    regions passed to kvm_set_phys_mem (KVM works on page basis).
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7138 c046a42c-6fe2-441c-8c8c-71466251a162
    aliguori authored
     
    Browse Code »
  • Testing for TLB_MMIO on unmap makes no sense as A) that flag belongs to
    CPUTLBEntry and not to io_memory slots or physical addresses and B) we
    already use a different condition before mapping. So make this test
    consistent.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7137 c046a42c-6fe2-441c-8c8c-71466251a162
    aliguori authored
     
    Browse Code »


  • This is a backport of the guest debugging support for the KVM
    accelerator that is now part of the KVM tree. It implements the reworked
    KVM kernel API for guest debugging (KVM_CAP_SET_GUEST_DEBUG) which is
    not yet part of any mainline kernel but will probably be 2.6.30 stuff.
    So far supported is x86, but PPC is expected to catch up soon.
    
    Core features are:
     - unlimited soft-breakpoints via code patching
     - hardware-assisted x86 breakpoints and watchpoints
    
    Changes in this version:
     - use generic hook cpu_synchronize_state to transfer registers between
       user space and kvm
     - push kvm_sw_breakpoints into KVMState
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6825 c046a42c-6fe2-441c-8c8c-71466251a162
    aliguori authored
     
    Browse Code »

  • 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 »




  • MMIO exits are more expensive in KVM or Xen than in QEMU because they 
    involve, at least, privilege transitions.  However, MMIO write 
    operations can be effectively batched if those writes do not have side 
    effects.
    
    Good examples of this include VGA pixel operations when in a planar 
    mode.  As it turns out, we can get a nice boost in other areas too.  
    Laurent mentioned a 9.7% performance boost in iperf with the coalesced 
    MMIO changes for the e1000 when he originally posted this work for KVM.
    
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    
    
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5961 c046a42c-6fe2-441c-8c8c-71466251a162
    aliguori authored
     
    Browse Code »
  • Prior to kvm-80, memory slot deletion was broken in the KVM kernel 
    modules.  In kvm-81, a new capability is introduced to signify that this
    problem has been fixed.
    
    Since we rely on being able to delete memory slots, refuse to work with 
    any kernel module that does not have this capability present.
    
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    
    
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5960 c046a42c-6fe2-441c-8c8c-71466251a162
    aliguori authored
     
    Browse Code »




  • KVM keeps track of physical memory based on slots in the kernel.  The current
    code that translates QEMU memory mappings to slots work but is not robust
    in the fact of reregistering partial regions of memory.
    
    This patch does the right thing for reregistering partial regions of memory.  It
    also prevents QEMU from using KVM private slots.
    
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    
    
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5734 c046a42c-6fe2-441c-8c8c-71466251a162
    aliguori authored
     
    Browse Code »