04 Jul, 2013

1 commit

  • Pull KVM fixes from Paolo Bonzini:
    "On the x86 side, there are some optimizations and documentation
    updates. The big ARM/KVM change for 3.11, support for AArch64, will
    come through Catalin Marinas's tree. s390 and PPC have misc cleanups
    and bugfixes"

    * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (87 commits)
    KVM: PPC: Ignore PIR writes
    KVM: PPC: Book3S PR: Invalidate SLB entries properly
    KVM: PPC: Book3S PR: Allow guest to use 1TB segments
    KVM: PPC: Book3S PR: Don't keep scanning HPTEG after we find a match
    KVM: PPC: Book3S PR: Fix invalidation of SLB entry 0 on guest entry
    KVM: PPC: Book3S PR: Fix proto-VSID calculations
    KVM: PPC: Guard doorbell exception with CONFIG_PPC_DOORBELL
    KVM: Fix RTC interrupt coalescing tracking
    kvm: Add a tracepoint write_tsc_offset
    KVM: MMU: Inform users of mmio generation wraparound
    KVM: MMU: document fast invalidate all mmio sptes
    KVM: MMU: document fast invalidate all pages
    KVM: MMU: document fast page fault
    KVM: MMU: document mmio page fault
    KVM: MMU: document write_flooding_count
    KVM: MMU: document clear_spte_count
    KVM: MMU: drop kvm_mmu_zap_mmio_sptes
    KVM: MMU: init kvm generation close to mmio wrap-around value
    KVM: MMU: add tracepoint for check_mmio_spte
    KVM: MMU: fast invalidate all mmio sptes
    ...

    Linus Torvalds
     

27 Jun, 2013

3 commits

  • KVM/ARM pull request for 3.11 merge window

    * tag 'kvm-arm-3.11' of git://git.linaro.org/people/cdall/linux-kvm-arm.git:
    ARM: kvm: don't include drivers/virtio/Kconfig
    Update MAINTAINERS: KVM/ARM work now funded by Linaro
    arm/kvm: Cleanup KVM_ARM_MAX_VCPUS logic
    ARM: KVM: clear exclusive monitor on all exception returns
    ARM: KVM: add missing dsb before invalidating Stage-2 TLBs
    ARM: KVM: perform save/restore of PAR
    ARM: KVM: get rid of S2_PGD_SIZE
    ARM: KVM: don't special case PC when doing an MMIO
    ARM: KVM: use phys_addr_t instead of unsigned long long for HYP PGDs
    ARM: KVM: remove dead prototype for __kvm_tlb_flush_vmid
    ARM: KVM: Don't handle PSCI calls via SMC
    ARM: KVM: Allow host virt timer irq to be different from guest timer virt irq

    Gleb Natapov
     
  • This reverts most of the f1ed0450a5fac7067590317cbf027f566b6ccbca. After
    the commit kvm_apic_set_irq() no longer returns accurate information
    about interrupt injection status if injection is done into disabled
    APIC. RTC interrupt coalescing tracking relies on the information to be
    accurate and cannot recover if it is not.

    Signed-off-by: Gleb Natapov

    Gleb Natapov
     
  • The arch_timer irq numbers (or PPI numbers) are implementation dependent,
    so the host virtual timer irq number can be different from guest virtual
    timer irq number.

    This patch ensures that host virtual timer irq number is read from DTB and
    guest virtual timer irq is determined based on vcpu target type.

    Signed-off-by: Anup Patel
    Signed-off-by: Pranavkumar Sawargaonkar
    Signed-off-by: Christoffer Dall

    Anup Patel
     

04 Jun, 2013

1 commit

  • We can easily reach the 1000 limit by start VM with a couple
    hundred I/O devices (multifunction=on). The hardcode limit
    already been adjusted 3 times (6 ~ 200 ~ 300 ~ 1000).

    In userspace, we already have maximum file descriptor to
    limit ioeventfd count. But kvm_io_bus devices also are used
    for pit, pic, ioapic, coalesced_mmio. They couldn't be limited
    by maximum file descriptor.

    Currently only ioeventfds take too much kvm_io_bus devices,
    so just exclude it from counting kvm_io_range limit.

    Also fixed one indent issue in kvm_host.h

    Signed-off-by: Amos Kong
    Reviewed-by: Stefan Hajnoczi
    Signed-off-by: Gleb Natapov

    Amos Kong
     

19 May, 2013

1 commit

  • As KVM/arm64 is looming on the horizon, it makes sense to move some
    of the common code to a single location in order to reduce duplication.

    The code could live anywhere. Actually, most of KVM is already built
    with a bunch of ugly ../../.. hacks in the various Makefiles, so we're
    not exactly talking about style here. But maybe it is time to start
    moving into a less ugly direction.

    The include files must be in a "public" location, as they are accessed
    from non-KVM files (arch/arm/kernel/asm-offsets.c).

    For this purpose, introduce two new locations:
    - virt/kvm/arm/ : x86 and ia64 already share the ioapic code in
    virt/kvm, so this could be seen as a (very ugly) precedent.
    - include/kvm/ : there is already an include/xen, and while the
    intent is slightly different, this seems as good a location as
    any

    Eventually, we should probably have independant Makefiles at every
    levels (just like everywhere else in the kernel), but this is just
    the first step.

    Signed-off-by: Marc Zyngier
    Signed-off-by: Gleb Natapov

    Marc Zyngier
     

14 May, 2013

1 commit

  • Since the arrival of posted interrupt support we can no longer guarantee
    that coalesced IRQs are always reported to the IRQ source. Moreover,
    accumulated APIC timer events could cause a busy loop when a VCPU should
    rather be halted. The consensus is to remove coalesced tracking from the
    LAPIC.

    Signed-off-by: Jan Kiszka
    Acked-by: Marcelo Tosatti
    Signed-off-by: Gleb Natapov

    Jan Kiszka
     

12 May, 2013

1 commit


11 May, 2013

1 commit

  • Pull kvm fixes from Gleb Natapov:
    "Most of the fixes are in the emulator since now we emulate more than
    we did before for correctness sake we see more bugs there, but there
    is also an OOPS fixed and corruption of xcr0 register."

    * tag 'kvm-3.10-2' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
    KVM: emulator: emulate SALC
    KVM: emulator: emulate XLAT
    KVM: emulator: emulate AAM
    KVM: VMX: fix halt emulation while emulating invalid guest sate
    KVM: Fix kvm_irqfd_init initialization
    KVM: x86: fix maintenance of guest/host xcr0 state

    Linus Torvalds
     

10 May, 2013

1 commit

  • Pull MIPS updates from Ralf Baechle:

    - More work on DT support for various platforms

    - Various fixes that were to late to make it straight into 3.9

    - Improved platform support, in particular the Netlogic XLR and
    BCM63xx, and the SEAD3 and Malta eval boards.

    - Support for several Ralink SOC families.

    - Complete support for the microMIPS ASE which basically reencodes the
    existing MIPS32/MIPS64 ISA to use non-constant size instructions.

    - Some fallout from LTO work which remove old cruft and will generally
    make the MIPS kernel easier to maintain and resistant to compiler
    optimization, even in absence of LTO.

    - KVM support. While MIPS has announced hardware virtualization
    extensions this KVM extension uses trap and emulate mode for
    virtualization of MIPS32. More KVM work to add support for VZ
    hardware virtualizaiton extensions and MIPS64 will probably already
    be merged for 3.11.

    Most of this has been sitting in -next for a long time. All defconfigs
    have been build or run time tested except three for which fixes are being
    sent by other maintainers.

    Semantic conflict with kvm updates done as per Ralf

    * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (118 commits)
    MIPS: Add new GIC clockevent driver.
    MIPS: Formatting clean-ups for clocksources.
    MIPS: Refactor GIC clocksource code.
    MIPS: Move 'gic_frequency' to common location.
    MIPS: Move 'gic_present' to common location.
    MIPS: MIPS16e: Add unaligned access support.
    MIPS: MIPS16e: Support handling of delay slots.
    MIPS: MIPS16e: Add instruction formats.
    MIPS: microMIPS: Optimise 'strnlen' core library function.
    MIPS: microMIPS: Optimise 'strlen' core library function.
    MIPS: microMIPS: Optimise 'strncpy' core library function.
    MIPS: microMIPS: Optimise 'memset' core library function.
    MIPS: microMIPS: Add configuration option for microMIPS kernel.
    MIPS: microMIPS: Disable LL/SC and fix linker bug.
    MIPS: microMIPS: Add vdso support.
    MIPS: microMIPS: Add unaligned access support.
    MIPS: microMIPS: Support handling of delay slots.
    MIPS: microMIPS: Add support for exception handling.
    MIPS: microMIPS: Floating point support.
    MIPS: microMIPS: Fix macro naming in micro-assembler.
    ...

    Linus Torvalds
     

09 May, 2013

2 commits


08 May, 2013

1 commit

  • In commit a0f155e96 'KVM: Initialize irqfd from kvm_init()', when
    kvm_init() is called the second time (e.g kvm-amd.ko and kvm-intel.ko),
    kvm_arch_init() will fail with -EEXIST, then kvm_irqfd_exit() will be
    called on the error handling path. This way, the kvm_irqfd system will
    not be ready.

    This patch fix the following:

    BUG: unable to handle kernel NULL pointer dereference at (null)
    IP: [] _raw_spin_lock+0xe/0x30
    PGD 0
    Oops: 0002 [#1] SMP
    Modules linked in: vhost_net
    CPU 6
    Pid: 4257, comm: qemu-system-x86 Not tainted 3.9.0-rc3+ #757 Dell Inc. OptiPlex 790/0V5HMK
    RIP: 0010:[] [] _raw_spin_lock+0xe/0x30
    RSP: 0018:ffff880221721cc8 EFLAGS: 00010046
    RAX: 0000000000000100 RBX: ffff88022dcc003f RCX: ffff880221734950
    RDX: ffff8802208f6ca8 RSI: 000000007fffffff RDI: 0000000000000000
    RBP: ffff880221721cc8 R08: 0000000000000002 R09: 0000000000000002
    R10: 00007f7fd01087e0 R11: 0000000000000246 R12: ffff8802208f6ca8
    R13: 0000000000000080 R14: ffff880223e2a900 R15: 0000000000000000
    FS: 00007f7fd38488e0(0000) GS:ffff88022dcc0000(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000000 CR3: 000000022309f000 CR4: 00000000000427e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Process qemu-system-x86 (pid: 4257, threadinfo ffff880221720000, task ffff880222bd5640)
    Stack:
    ffff880221721d08 ffffffff810ac5c5 ffff88022431dc00 0000000000000086
    0000000000000080 ffff880223e2a900 ffff8802208f6ca8 0000000000000000
    ffff880221721d48 ffffffff810ac8fe 0000000000000000 ffff880221734000
    Call Trace:
    [] __queue_work+0x45/0x2d0
    [] queue_work_on+0x8e/0xa0
    [] queue_work+0x19/0x20
    [] irqfd_deactivate+0x4b/0x60
    [] kvm_irqfd+0x39d/0x580
    [] kvm_vm_ioctl+0x207/0x5b0
    [] ? update_curr+0xf5/0x180
    [] do_vfs_ioctl+0x98/0x550
    [] ? finish_task_switch+0x4e/0xe0
    [] ? __schedule+0x2ea/0x710
    [] sys_ioctl+0x57/0x90
    [] ? trace_hardirqs_on_thunk+0x3a/0x3c
    [] system_call_fastpath+0x16/0x1b
    Code: c1 ea 08 38 c2 74 0f 66 0f 1f 44 00 00 f3 90 0f b6 03 38 c2 75 f7 48 83 c4 08 5b c9 c3 55 48 89 e5 66 66 66 66 90 b8 00 01 00 00 66 0f c1 07 89 c2 66 c1 ea 08 38 c2 74 0c 0f 1f 00 f3 90 0f
    RIP [] _raw_spin_lock+0xe/0x30
    RSP
    CR2: 0000000000000000
    ---[ end trace 13fb1e4b6e5ab21f ]---

    Signed-off-by: Asias He
    Acked-by: Cornelia Huck
    Signed-off-by: Gleb Natapov

    Asias He
     

06 May, 2013

1 commit

  • Pull kvm updates from Gleb Natapov:
    "Highlights of the updates are:

    general:
    - new emulated device API
    - legacy device assignment is now optional
    - irqfd interface is more generic and can be shared between arches

    x86:
    - VMCS shadow support and other nested VMX improvements
    - APIC virtualization and Posted Interrupt hardware support
    - Optimize mmio spte zapping

    ppc:
    - BookE: in-kernel MPIC emulation with irqfd support
    - Book3S: in-kernel XICS emulation (incomplete)
    - Book3S: HV: migration fixes
    - BookE: more debug support preparation
    - BookE: e6500 support

    ARM:
    - reworking of Hyp idmaps

    s390:
    - ioeventfd for virtio-ccw

    And many other bug fixes, cleanups and improvements"

    * tag 'kvm-3.10-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (204 commits)
    kvm: Add compat_ioctl for device control API
    KVM: x86: Account for failing enable_irq_window for NMI window request
    KVM: PPC: Book3S: Add API for in-kernel XICS emulation
    kvm/ppc/mpic: fix missing unlock in set_base_addr()
    kvm/ppc: Hold srcu lock when calling kvm_io_bus_read/write
    kvm/ppc/mpic: remove users
    kvm/ppc/mpic: fix mmio region lists when multiple guests used
    kvm/ppc/mpic: remove default routes from documentation
    kvm: KVM_CAP_IOMMU only available with device assignment
    ARM: KVM: iterate over all CPUs for CPU compatibility check
    KVM: ARM: Fix spelling in error message
    ARM: KVM: define KVM_ARM_MAX_VCPUS unconditionally
    KVM: ARM: Fix API documentation for ONE_REG encoding
    ARM: KVM: promote vfp_host pointer to generic host cpu context
    ARM: KVM: add architecture specific hook for capabilities
    ARM: KVM: perform HYP initilization for hotplugged CPUs
    ARM: KVM: switch to a dual-step HYP init code
    ARM: KVM: rework HYP page table freeing
    ARM: KVM: enforce maximum size for identity mapped code
    ARM: KVM: move to a KVM provided HYP idmap
    ...

    Linus Torvalds
     

05 May, 2013

1 commit


02 May, 2013

1 commit

  • This adds the API for userspace to instantiate an XICS device in a VM
    and connect VCPUs to it. The API consists of a new device type for
    the KVM_CREATE_DEVICE ioctl, a new capability KVM_CAP_IRQ_XICS, which
    functions similarly to KVM_CAP_IRQ_MPIC, and the KVM_IRQ_LINE ioctl,
    which is used to assert and deassert interrupt inputs of the XICS.

    The XICS device has one attribute group, KVM_DEV_XICS_GRP_SOURCES.
    Each attribute within this group corresponds to the state of one
    interrupt source. The attribute number is the same as the interrupt
    source number.

    This does not support irq routing or irqfd yet.

    Signed-off-by: Paul Mackerras
    Acked-by: David Gibson
    Signed-off-by: Alexander Graf

    Paul Mackerras
     

27 Apr, 2013

9 commits

  • The hassle of getting refcounting right was greater than the hassle
    of keeping a list of devices to destroy on VM exit.

    Signed-off-by: Scott Wood
    Signed-off-by: Alexander Graf

    Scott Wood
     
  • Hook the MPIC code up to the KVM interfaces, add locking, etc.

    Signed-off-by: Scott Wood
    [agraf: add stub function for kvmppc_mpic_set_epr, non-booke, 64bit]
    Signed-off-by: Alexander Graf

    Scott Wood
     
  • Currently, devices that are emulated inside KVM are configured in a
    hardcoded manner based on an assumption that any given architecture
    only has one way to do it. If there's any need to access device state,
    it is done through inflexible one-purpose-only IOCTLs (e.g.
    KVM_GET/SET_LAPIC). Defining new IOCTLs for every little thing is
    cumbersome and depletes a limited numberspace.

    This API provides a mechanism to instantiate a device of a certain
    type, returning an ID that can be used to set/get attributes of the
    device. Attributes may include configuration parameters (e.g.
    register base address), device state, operational commands, etc. It
    is similar to the ONE_REG API, except that it acts on devices rather
    than vcpus.

    Both device types and individual attributes can be tested without having
    to create the device or get/set the attribute, without the need for
    separately managing enumerated capabilities.

    Signed-off-by: Scott Wood
    Signed-off-by: Alexander Graf

    Scott Wood
     
  • Now that we have most irqfd code completely platform agnostic, let's move
    irqfd's resample capability return to generic code as well.

    Signed-off-by: Alexander Graf
    Acked-by: Michael S. Tsirkin

    Alexander Graf
     
  • Setting up IRQ routes is nothing IOAPIC specific. Extract everything
    that really is generic code into irqchip.c and only leave the ioapic
    specific bits to irq_comm.c.

    Signed-off-by: Alexander Graf
    Acked-by: Michael S. Tsirkin

    Alexander Graf
     
  • The current irq_comm.c file contains pieces of code that are generic
    across different irqchip implementations, as well as code that is
    fully IOAPIC specific.

    Split the generic bits out into irqchip.c.

    Signed-off-by: Alexander Graf
    Acked-by: Michael S. Tsirkin

    Alexander Graf
     
  • The IRQ routing set ioctl lives in the hacky device assignment code inside
    of KVM today. This is definitely the wrong place for it. Move it to the much
    more natural kvm_main.c.

    Signed-off-by: Alexander Graf
    Acked-by: Michael S. Tsirkin

    Alexander Graf
     
  • Quite a bit of code in KVM has been conditionalized on availability of
    IOAPIC emulation. However, most of it is generically applicable to
    platforms that don't have an IOPIC, but a different type of irq chip.

    Make code that only relies on IRQ routing, not an APIC itself, on
    CONFIG_HAVE_KVM_IRQ_ROUTING, so that we can reuse it later.

    Signed-off-by: Alexander Graf
    Acked-by: Michael S. Tsirkin

    Alexander Graf
     
  • The concept of routing interrupt lines to an irqchip is nothing
    that is IOAPIC specific. Every irqchip has a maximum number of pins
    that can be linked to irq lines.

    So let's add a new define that allows us to reuse generic code for
    non-IOAPIC platforms.

    Signed-off-by: Alexander Graf
    Acked-by: Michael S. Tsirkin

    Alexander Graf
     

17 Apr, 2013

3 commits


16 Apr, 2013

7 commits

  • Current interrupt coalescing logci which only used by RTC has conflict
    with Posted Interrupt.
    This patch introduces a new mechinism to use eoi to track interrupt:
    When delivering an interrupt to vcpu, the pending_eoi set to number of
    vcpu that received the interrupt. And decrease it when each vcpu writing
    eoi. No subsequent RTC interrupt can deliver to vcpu until all vcpus
    write eoi.

    Signed-off-by: Yang Zhang
    Reviewed-by: Gleb Natapov
    Signed-off-by: Marcelo Tosatti

    Yang Zhang
     
  • Userspace may deliver RTC interrupt without query the status. So we
    want to track RTC EOI for this case.

    Signed-off-by: Yang Zhang
    Reviewed-by: Gleb Natapov
    Signed-off-by: Marcelo Tosatti

    Yang Zhang
     
  • Need the EOI to track interrupt deliver status, so force vmexit
    on EOI for rtc interrupt when enabling virtual interrupt delivery.

    Signed-off-by: Yang Zhang
    Reviewed-by: Gleb Natapov
    Signed-off-by: Marcelo Tosatti

    Yang Zhang
     
  • restore rtc_status from migration or save/restore

    Signed-off-by: Yang Zhang
    Reviewed-by: Gleb Natapov
    Signed-off-by: Marcelo Tosatti

    Yang Zhang
     
  • Add a new parameter to know vcpus who received the interrupt.

    Signed-off-by: Yang Zhang
    Reviewed-by: Gleb Natapov
    Signed-off-by: Marcelo Tosatti

    Yang Zhang
     
  • rtc_status is used to track RTC interrupt delivery status. The pending_eoi
    will be increased by vcpu who received RTC interrupt and will be decreased
    when EOI to this interrupt.
    Also, we use dest_map to record the destination vcpu to avoid the case that
    vcpu who didn't get the RTC interupt, but issued EOI with same vector of RTC
    and descreased pending_eoi by mistake.

    Signed-off-by: Yang Zhang
    Reviewed-by: Gleb Natapov
    Signed-off-by: Marcelo Tosatti

    Yang Zhang
     
  • Add vcpu info to ioapic_update_eoi, so we can know which vcpu
    issued this EOI.

    Signed-off-by: Yang Zhang
    Reviewed-by: Gleb Natapov
    Signed-off-by: Marcelo Tosatti

    Yang Zhang
     

08 Apr, 2013

2 commits

  • The routine kvm_spurious_fault() is an x86 specific routine, so
    move it from virt/kvm/kvm_main.c to arch/x86/kvm/x86.c.

    Fixes this sparse warning when building on arm64:

    virt/kvm/kvm_main.c:warning: symbol 'kvm_spurious_fault' was not declared. Should it be static?

    Signed-off-by: Geoff Levand
    Signed-off-by: Gleb Natapov

    Geoff Levand
     
  • The routines get_user_page_nowait(), kvm_io_bus_sort_cmp(), kvm_io_bus_insert_dev()
    and kvm_io_bus_get_first_dev() are only referenced within kvm_main.c, so give them
    static linkage.

    Fixes sparse warnings like these:

    virt/kvm/kvm_main.c: warning: symbol 'get_user_page_nowait' was not declared. Should it be static?

    Signed-off-by: Geoff Levand
    Signed-off-by: Gleb Natapov

    Geoff Levand
     

07 Apr, 2013

3 commits