28 Oct, 2008

1 commit

  • Every call of kvm_set_irq() should offer an irq_source_id, which is
    allocated by kvm_request_irq_source_id(). Based on irq_source_id, we
    identify the irq source and implement logical OR for shared level
    interrupts.

    The allocated irq_source_id can be freed by kvm_free_irq_source_id().

    Currently, we support at most sizeof(unsigned long) different irq sources.

    [Amit: - rebase to kvm.git HEAD
    - move definition of KVM_USERSPACE_IRQ_SOURCE_ID to common file
    - move kvm_request_irq_source_id to the update_irq ioctl]

    [Xiantao: - Add kvm/ia64 stuff and make it work for kvm/ia64 guests]

    Signed-off-by: Sheng Yang
    Signed-off-by: Amit Shah
    Signed-off-by: Xiantao Zhang
    Signed-off-by: Avi Kivity

    Sheng Yang
     

15 Oct, 2008

19 commits


29 Jul, 2008

2 commits


25 Jul, 2008

1 commit

  • This patch just extends the anon_inode_getfd interface to take an additional
    parameter with a flag value. The flag value is passed on to
    get_unused_fd_flags in anticipation for a use with the O_CLOEXEC flag.

    No actual semantic changes here, the changed callers all pass 0 for now.

    [akpm@linux-foundation.org: KVM fix]
    Signed-off-by: Ulrich Drepper
    Acked-by: Davide Libenzi
    Cc: Michael Kerrisk
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ulrich Drepper
     

20 Jul, 2008

11 commits

  • smp_call_function_mask() now complains when called in a preemptible context;
    adjust its callers accordingly.

    Signed-off-by: Avi Kivity

    Avi Kivity
     
  • Flush the shadow mmu before removing regions to avoid stale entries.

    Signed-off-by: Marcelo Tosatti
    Signed-off-by: Avi Kivity

    Marcelo Tosatti
     
  • This patch #ifdefs the bitmap array for dirty tracking. We don't have dirty
    tracking on s390 today, and we'd love to use our storage keys to store the
    dirty information for migration. Therefore, we won't need this array at all,
    and due to our limited amount of vmalloc space this limits the amount of guests
    we can run.

    Signed-off-by: Carsten Otte
    Signed-off-by: Avi Kivity

    Carsten Otte
     
  • Currently kvmtrace is not portable. This will prevent from copying a
    trace file from big-endian target to little-endian workstation for analysis.
    In the patch, kernel outputs metadata containing a magic number to trace
    log, and changes 64-bit words to be u64 instead of a pair of u32s.

    Signed-off-by: Tan Li
    Acked-by: Jerone Young
    Acked-by: Hollis Blanchard
    Signed-off-by: Avi Kivity

    Tan, Li
     
  • This patch adds all needed structures to coalesce MMIOs.
    Until an architecture uses it, it is not compiled.

    Coalesced MMIO introduces two ioctl() to define where are the MMIO zones that
    can be coalesced:

    - KVM_REGISTER_COALESCED_MMIO registers a coalesced MMIO zone.
    It requests one parameter (struct kvm_coalesced_mmio_zone) which defines
    a memory area where MMIOs can be coalesced until the next switch to
    user space. The maximum number of MMIO zones is KVM_COALESCED_MMIO_ZONE_MAX.

    - KVM_UNREGISTER_COALESCED_MMIO cancels all registered zones inside
    the given bounds (bounds are also given by struct kvm_coalesced_mmio_zone).

    The userspace client can check kernel coalesced MMIO availability by asking
    ioctl(KVM_CHECK_EXTENSION) for the KVM_CAP_COALESCED_MMIO capability.
    The ioctl() call to KVM_CAP_COALESCED_MMIO will return 0 if not supported,
    or the page offset where will be stored the ring buffer.
    The page offset depends on the architecture.

    After an ioctl(KVM_RUN), the first page of the KVM memory mapped points to
    a kvm_run structure. The offset given by KVM_CAP_COALESCED_MMIO is
    an offset to the coalesced MMIO ring expressed in PAGE_SIZE relatively
    to the address of the start of th kvm_run structure. The MMIO ring buffer
    is defined by the structure kvm_coalesced_mmio_ring.

    [akio: fix oops during guest shutdown]

    Signed-off-by: Laurent Vivier
    Signed-off-by: Akio Takebe
    Signed-off-by: Avi Kivity

    Laurent Vivier
     
  • Modify member in_range() of structure kvm_io_device to pass length and the type
    of the I/O (write or read).

    This modification allows to use kvm_io_device with coalesced MMIO.

    Signed-off-by: Laurent Vivier
    Signed-off-by: Avi Kivity

    Laurent Vivier
     
  • [avi: fix ia64 build breakage]

    Signed-off-by: Sheng Yang
    Signed-off-by: Avi Kivity

    Sheng Yang
     
  • Obsoleted by the vmx-specific per-cpu list.

    Signed-off-by: Avi Kivity

    Avi Kivity
     
  • KVM turns off hardware virtualization extensions during reboot, in order
    to disassociate the memory used by the virtualization extensions from the
    processor, and in order to have the system in a consistent state.
    Unfortunately virtual machines may still be running while this goes on,
    and once virtualization extensions are turned off, any virtulization
    instruction will #UD on execution.

    Fix by adding an exception handler to virtualization instructions; if we get
    an exception during reboot, we simply spin waiting for the reset to complete.
    If it's a true exception, BUG() so we can have our stack trace.

    Signed-off-by: Avi Kivity

    Avi Kivity
     
  • This patch allows VMAs that contain no backing page to be used for guest
    memory. This is useful for assigning mmio regions to a guest.

    Signed-off-by: Anthony Liguori
    Signed-off-by: Avi Kivity

    Anthony Liguori
     
  • kvm_dev_ioctl casts the arg value to void __user *, just to recast it
    again to long. This seems unnecessary.

    According to objdump the binary code on x86 is unchanged by this patch.

    Signed-off-by: Christian Borntraeger
    Signed-off-by: Avi Kivity

    Christian Borntraeger
     

16 Jul, 2008

1 commit

  • Conflicts:

    arch/powerpc/Kconfig
    arch/s390/kernel/time.c
    arch/x86/kernel/apic_32.c
    arch/x86/kernel/cpu/perfctr-watchdog.c
    arch/x86/kernel/i8259_64.c
    arch/x86/kernel/ldt.c
    arch/x86/kernel/nmi_64.c
    arch/x86/kernel/smpboot.c
    arch/x86/xen/smp.c
    include/asm-x86/hw_irq_32.h
    include/asm-x86/hw_irq_64.h
    include/asm-x86/mach-default/irq_vectors.h
    include/asm-x86/mach-voyager/irq_vectors.h
    include/asm-x86/smp.h
    kernel/Makefile

    Signed-off-by: Ingo Molnar

    Ingo Molnar
     

06 Jul, 2008

1 commit

  • The "remote_irr" variable is used to indicate an interrupt
    which has been received by the LAPIC, but not acked.

    In our EOI handler, we unset remote_irr and re-inject the
    interrupt if the interrupt line is still asserted.

    However, we do not set remote_irr here, leading to a
    situation where if kvm_ioapic_set_irq() is called, then we go
    ahead and call ioapic_service(). This means that IRR is
    re-asserted even though the interrupt is currently in service
    (i.e. LAPIC IRR is cleared and ISR/TMR set)

    The issue with this is that when the currently executing
    interrupt handler finishes and writes LAPIC EOI, then TMR is
    unset and EOI sent to the IOAPIC. Since IRR is now asserted,
    but TMR is not, then when the second interrupt is handled,
    no EOI is sent and if there is any pending interrupt, it is
    not re-injected.

    This fixes a hang only seen while running mke2fs -j on an
    8Gb virtio disk backed by a fully sparse raw file, with
    aliguori "avoid fragmented virtio-blk transfers by copying"
    changes.

    Signed-off-by: Mark McLoughlin
    Acked-by: Marcelo Tosatti
    Signed-off-by: Avi Kivity

    Mark McLoughlin
     

26 Jun, 2008

2 commits


24 Jun, 2008

1 commit

  • The ioapic acknowledge path translates interrupt vectors to irqs. It
    currently uses a first match algorithm, stopping when it finds the first
    redirection table entry containing the vector. That fails however if the
    guest changes the irq to a different line, leaving the old redirection table
    entry in place (though masked). Result is interrupts not making it to the
    guest.

    Fix by always scanning the entire redirection table.

    Signed-off-by: Avi Kivity

    Avi Kivity
     

07 Jun, 2008

1 commit

  • There's a bug in the IOAPIC code for level-triggered interrupts. Its
    relatively easy to trigger by sharing (virtio-blk + usbtablet was the
    testcase, initially reported by Gerd von Egidy).

    The "remote_irr" variable is used to indicate accepted but not yet acked
    interrupts. Its cleared from the EOI handler.

    Problem is that the EOI handler clears remote_irr unconditionally, even
    if it reinjected another pending interrupt.

    In that case, kvm_ioapic_set_irq() proceeds to ioapic_service() which
    sets remote_irr even if it failed to inject (since the IRR was high due
    to EOI reinjection).

    Since the TMR bit has been cleared by the first EOI, the second one
    fails to clear remote_irr.

    End result is interrupt line dead.

    Fix it by setting remote_irr only if a new pending interrupt has been
    generated (and the TMR bit for vector in question set).

    Signed-off-by: Marcelo Tosatti
    Signed-off-by: Avi Kivity

    Marcelo Tosatti