01 Mar, 2010
23 commits
-
The code relies on kvm->requests_lock inhibiting preemption.
Noted by Jan Kiszka.
Signed-off-by: Avi Kivity
-
wqh is unused, so we do not need to store it in irqfd anymore
Signed-off-by: Michael S. Tsirkin
Signed-off-by: Avi Kivity -
If we fail to init ioapic device or the fail to setup the default irq
routing, the device register by kvm_create_pic() and kvm_ioapic_init()
remain unregister. This patch fixed to do this.Signed-off-by: Wei Yongjun
Signed-off-by: Avi Kivity -
kvm->arch.vioapic should be NULL in case of kvm_ioapic_init() failure
due to cannot register io dev.Signed-off-by: Wei Yongjun
Signed-off-by: Avi Kivity -
Fixed 2 codestyle issues in virt/kvm/coalesced_mmio.c
Signed-off-by: Jochen Maes
Signed-off-by: Avi Kivity -
This patch introduces a generic function to find out the
host page size for a given gfn. This function is needed by
the kvm iommu code. This patch also simplifies the x86
host_mapping_level function.Signed-off-by: Joerg Roedel
Signed-off-by: Avi Kivity -
Enable optional parameter (default 0) - PCI segment (or domain) besides
BDF, when assigning PCI device to guest.Signed-off-by: Zhai Edwin
Acked-by: Chris Wright
Signed-off-by: Marcelo Tosatti -
The commit 0953ca73 "KVM: Simplify coalesced mmio initialization"
allocate kvm_coalesced_mmio_ring in the kvm_coalesced_mmio_init(), but
didn't discard the original allocation...Signed-off-by: Sheng Yang
Signed-off-by: Marcelo Tosatti -
cleanup_srcu_struct on VM destruction remains broken:
BUG: unable to handle kernel paging request at ffffffffffffffff
IP: [] srcu_read_lock+0x16/0x21
RIP: 0010:[] [] srcu_read_lock+0x16/0x21
Call Trace:
[] kvm_arch_vcpu_uninit+0x1b/0x48 [kvm]
[] kvm_vcpu_uninit+0x9/0x15 [kvm]
[] vmx_free_vcpu+0x7f/0x8f [kvm_intel]
[] kvm_arch_destroy_vm+0x78/0x111 [kvm]
[] kvm_put_kvm+0xd4/0xfe [kvm]Move it to kvm_arch_destroy_vm.
Signed-off-by: Marcelo Tosatti
Reported-by: Jan Kiszka -
When the guest acknowledges an interrupt, it sends an EOI message to the local
apic, which broadcasts it to the ioapic. To handle the EOI, we need to take
the ioapic mutex.On large guests, this causes a lot of contention on this mutex. Since large
guests usually don't route interrupts via the ioapic (they use msi instead),
this is completely unnecessary.Avoid taking the mutex by introducing a handled_vectors bitmap. Before taking
the mutex, check if the ioapic was actually responsible for the acked vector.
If not, we can return early.Signed-off-by: Avi Kivity
Signed-off-by: Marcelo Tosatti -
Signed-off-by: Marcelo Tosatti
-
Signed-off-by: Marcelo Tosatti
-
Using a similar two-step procedure as for memslots.
Signed-off-by: Marcelo Tosatti
-
Use two steps for memslot deletion: mark the slot invalid (which stops
instantiation of new shadow pages for that slot, but allows destruction),
then instantiate the new empty slot.Also simplifies kvm_handle_hva locking.
Signed-off-by: Marcelo Tosatti
-
So its possible to iommu map a memslot before making it visible to
kvm.Signed-off-by: Marcelo Tosatti
-
Which takes a memslot pointer instead of using kvm->memslots.
To be used by SRCU convertion later.
Signed-off-by: Marcelo Tosatti
-
Required for SRCU convertion later.
Signed-off-by: Marcelo Tosatti
-
Have a pointer to an allocated region inside struct kvm.
[alex: fix ppc book 3s]
Signed-off-by: Alexander Graf
Signed-off-by: Marcelo Tosatti -
- add destructor function
- move related allocation into constructor
- add stubs for !CONFIG_KVM_MMIOSigned-off-by: Avi Kivity
-
s390 doesn't have mmio, this will simplify ifdefing it out.
Signed-off-by: Avi Kivity
-
Signed-off-by: Avi Kivity
-
Signed-off-by: Avi Kivity
-
They aren't related.
Signed-off-by: Avi Kivity
25 Jan, 2010
3 commits
-
kvm didn't clear irqfd counter on deassign, as a result we could get a
spurious interrupt when irqfd is assigned back. this leads to poor
performance and, in theory, guest crash.Signed-off-by: Michael S. Tsirkin
Signed-off-by: Avi Kivity -
Otherwise memory beyond irq_states[16] might be accessed.
Noticed by Juan Quintela.
Cc: stable@kernel.org
Signed-off-by: Marcelo Tosatti
Acked-by: Juan Quintela
Signed-off-by: Avi Kivity -
Looks like repeatedly binding same fd to multiple gsi's with irqfd can
use up a ton of kernel memory for irqfd structures.A simple fix is to allow each fd to only trigger one gsi: triggering a
storm of interrupts in guest is likely useless anyway, and we can do it
by binding a single gsi to many interrupts if we really want to.Cc: stable@kernel.org
Signed-off-by: Michael S. Tsirkin
Acked-by: Acked-by: Gregory Haskins
Signed-off-by: Avi Kivity
27 Dec, 2009
2 commits
-
arch/s390/kvm/../../../virt/kvm/kvm_main.c: In function 'kvm_create_vm':
arch/s390/kvm/../../../virt/kvm/kvm_main.c:409: warning: label 'out_err' defined but not usedSigned-off-by: Heiko Carstens
Signed-off-by: Avi Kivity -
One possible order is:
KVM_CREATE_IRQCHIP ioctl(took kvm->lock) -> kvm_iobus_register_dev() ->
down_write(kvm->slots_lock).The other one is in kvm_vm_ioctl_assign_device(), which take kvm->slots_lock
first, then kvm->lock.Update the comment of lock order as well.
Observe it due to kernel locking debug warnings.
Cc: stable@kernel.org
Signed-off-by: Sheng Yang
Signed-off-by: Avi Kivity
23 Dec, 2009
1 commit
-
It seems a couple places such as arch/ia64/kernel/perfmon.c and
drivers/infiniband/core/uverbs_main.c could use anon_inode_getfile()
instead of a private pseudo-fs + alloc_file(), if only there were a way
to get a read-only file. So provide this by having anon_inode_getfile()
create a read-only file if we pass O_RDONLY in flags.Signed-off-by: Roland Dreier
Signed-off-by: Al Viro
09 Dec, 2009
1 commit
-
Conflicts:
include/linux/kvm.h
03 Dec, 2009
10 commits
-
Usually userspace will freeze the guest so we can inspect it, but some
internal state is not available. Add extra data to internal error
reporting so we can expose it to the debugger. Extra data is specific
to the suberror.Signed-off-by: Avi Kivity
-
Otherwise kvm might attempt to dereference a NULL pointer.
Signed-off-by: Marcelo Tosatti
Signed-off-by: Avi Kivity -
With big endian userspace, we can't quite figure out if a pointer
is 32 bit (shifted >> 32) or 64 bit when we read a 64 bit pointer.This is what happens with dirty logging. To get the pointer interpreted
correctly, we thus need Arnd's patch to implement a compat layer for
the ioctl:A better way to do this is to add a separate compat_ioctl() method that
converts this for you.Based on initial patch from Arnd Bergmann.
Signed-off-by: Arnd Bergmann
Signed-off-by: Alexander Graf
Signed-off-by: Marcelo Tosatti
Signed-off-by: Avi Kivity -
find_first_zero_bit works with bit numbers, not bytes.
Fixes
https://sourceforge.net/tracker/?func=detail&aid=2847560&group_id=180599&atid=893831
Reported-by: "Xu, Jiajun"
Cc: stable@kernel.org
Signed-off-by: Marcelo Tosatti -
Introduce kvm_vcpu_on_spin, to be used by VMX/SVM to yield processing
once the cpu detects pause-based looping.Signed-off-by: "Zhai, Edwin"
Signed-off-by: Marcelo Tosatti -
Stanse found 2 lock imbalances in kvm_request_irq_source_id and
kvm_free_irq_source_id. They omit to unlock kvm->irq_lock on fail paths.Fix that by adding unlock labels at the end of the functions and jump
there from the fail paths.Signed-off-by: Jiri Slaby
Cc: Marcelo Tosatti
Signed-off-by: Avi Kivity -
X86 CPUs need to have some magic happening to enable the virtualization
extensions on them. This magic can result in unpleasant results for
users, like blocking other VMMs from working (vmx) or using invalid TLB
entries (svm).Currently KVM activates virtualization when the respective kernel module
is loaded. This blocks us from autoloading KVM modules without breaking
other VMMs.To circumvent this problem at least a bit, this patch introduces on
demand activation of virtualization. This means, that instead
virtualization is enabled on creation of the first virtual machine
and disabled on destruction of the last one.So using this, KVM can be easily autoloaded, while keeping other
hypervisors usable.Signed-off-by: Alexander Graf
Signed-off-by: Marcelo Tosatti
Signed-off-by: Avi Kivity -
Signed-off-by: Avi Kivity
-
The only thing it protects now is interrupt injection into lapic and
this can work lockless. Even now with kvm->irq_lock in place access
to lapic is not entirely serialized since vcpu access doesn't take
kvm->irq_lock.Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
The allows removal of irq_lock from the injection path.
Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity