aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2010-10-24KVM: MMU: fix compile warning in audit codeXiao Guangrong1-10/+10
fix: arch/x86/kvm/mmu.c: In function ‘kvm_mmu_unprotect_page’: arch/x86/kvm/mmu.c:1741: warning: format ‘%lx’ expects type ‘long unsigned int’, but argument 3 has type ‘gfn_t’ arch/x86/kvm/mmu.c:1745: warning: format ‘%lx’ expects type ‘long unsigned int’, but argument 3 has type ‘gfn_t’ arch/x86/kvm/mmu.c: In function ‘mmu_unshadow’: arch/x86/kvm/mmu.c:1761: warning: format ‘%lx’ expects type ‘long unsigned int’, but argument 3 has type ‘gfn_t’ arch/x86/kvm/mmu.c: In function ‘set_spte’: arch/x86/kvm/mmu.c:2005: warning: format ‘%lx’ expects type ‘long unsigned int’, but argument 3 has type ‘gfn_t’ arch/x86/kvm/mmu.c: In function ‘mmu_set_spte’: arch/x86/kvm/mmu.c:2033: warning: format ‘%lx’ expects type ‘long unsigned int’, but argument 7 has type ‘gfn_t’ Signed-off-by: Xiao Guangrong <[email protected]> Signed-off-by: Avi Kivity <[email protected]>
2010-10-24KVM: pit: Do not check pending pit timer in vcpu threadJason Wang2-15/+1
Pit interrupt injection was done by workqueue, so no need to check pending pit timer in vcpu thread which could lead unnecessary unblocking of vcpu. Signed-off-by: Jason Wang <[email protected]> Signed-off-by: Avi Kivity <[email protected]>
2010-10-24KVM: PPC: Fix CONFIG_KVM_GUEST && !CONFIG_KVM caseAlexander Graf2-4/+3
When CONFIG_KVM_GUEST is selected, but CONFIG_KVM is not, we were missing some defines in asm-offsets.c and included too many headers at other places. This patch makes above configuration work. Reported-by: Stephen Rothwell <[email protected]> Signed-off-by: Alexander Graf <[email protected]> Signed-off-by: Avi Kivity <[email protected]>
2010-10-24KVM: x86 emulator: simplify ALU opcode block decode furtherAvi Kivity1-18/+14
The ALU opcode block is very regular; introduce D6ALU() to define decode flags for 6 instructions at a time. Suggested by Paolo Bonzini. Signed-off-by: Avi Kivity <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: Fix build error due to 64-bit division in nsec_to_cycles()Avi Kivity1-1/+6
Use do_div() instead. Signed-off-by: Avi Kivity <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: trap and propagate #DE from DIV and IDIVAvi Kivity1-4/+16
Signed-off-by: Avi Kivity <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: add macros for executing instructions that may trapAvi Kivity1-0/+43
Like DIV and IDIV. Signed-off-by: Avi Kivity <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: simplify instruction decode flags for opcodes 0F 00-FFAvi Kivity1-2/+2
Use the new byte/word dual opcode decode. Signed-off-by: Avi Kivity <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: simplify instruction decode flags for opcodes E0-FFAvi Kivity1-4/+2
Use the new byte/word dual opcode decode. Signed-off-by: Avi Kivity <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: simplify instruction decode flags for opcodes C0-DFAvi Kivity1-4/+3
Use the new byte/word dual opcode decode. Signed-off-by: Avi Kivity <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: simplify instruction decode flags for opcodes A0-AFAvi Kivity1-3/+3
Use the new byte/word dual opcode decode. Signed-off-by: Avi Kivity <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: simplify instruction decode flags for opcodes 80-8FAvi Kivity1-4/+3
Use the new byte/word dual opcode decode. Signed-off-by: Avi Kivity <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: simplify string instruction decode flagsAvi Kivity1-7/+6
Use the new byte/word dual opcode decode. Signed-off-by: Avi Kivity <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: simplify ALU block (opcodes 00-3F) decode flagsAvi Kivity1-24/+16
Use the new byte/word dual opcode decode. Signed-off-by: Avi Kivity <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: support byte/word opcode pairsAvi Kivity1-0/+6
Many x86 instructions come in byte and word variants distinguished with bit 0 of the opcode. Add macros to aid in defining them. Signed-off-by: Avi Kivity <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: refuse SrcMemFAddr (e.g. LDS) with register operandAvi Kivity1-0/+5
SrcMemFAddr is not defined with the modrm operand designating a register instead of a memory address. Signed-off-by: Avi Kivity <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: get rid of "restart" in emulation context.Gleb Natapov3-33/+30
x86_emulate_insn() will return 1 if instruction can be restarted without re-entering a guest. Signed-off-by: Gleb Natapov <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: move string instruction completion check into separate ↵Gleb Natapov1-13/+24
function Signed-off-by: Gleb Natapov <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: Rename variable that shadows another local variable.Gleb Natapov1-3/+3
Signed-off-by: Gleb Natapov <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: add CALL FAR instruction emulation (opcode 9a)Wei Yongjun1-1/+1
Signed-off-by: Wei Yongjun <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: S390: Export kvm_virtio.hAlexander Graf1-0/+1
As suggested by Christian, we should expose headers to user space with information that might be valuable there. The s390 virtio interface is one of those cases. It defines an ABI between hypervisor and guest, so it should be exposed to user space. Reported-by: Christian Borntraeger <[email protected]> Signed-off-by: Alexander Graf <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: S390: Add virtio hotplug add supportAlexander Graf2-0/+48
The one big missing feature in s390-virtio was hotplugging. This is no more. This patch implements hotplug add support, so you can on the fly add new devices in the guest. Keep in mind that this needs a patch for qemu to actually leverage the functionality. Signed-off-by: Alexander Graf <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: S390: take a full byte as ext_param indicatorAlexander Graf2-6/+19
Currenty the ext_param field only distinguishes between "config change" and "vring interrupt". We can do a lot more with it though, so let's enable a full byte of possible values and constants to #defines while at it. Signed-off-by: Alexander Graf <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: MMU: combine guest pte read between fetch and pte prefetchXiao Guangrong1-19/+21
Combine guest pte read between guest pte check in the fetch path and pte prefetch Signed-off-by: Xiao Guangrong <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: MMU: prefetch ptes when intercepted guest #PFXiao Guangrong2-1/+175
Support prefetch ptes when intercept guest #PF, avoid to #PF by later access If we meet any failure in the prefetch path, we will exit it and not try other ptes to avoid become heavy path Signed-off-by: Xiao Guangrong <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: MMU: introduce gfn_to_page_many_atomic() functionXiao Guangrong2-1/+31
Introduce this function to get consecutive gfn's pages, it can reduce gup's overload, used by later patch Signed-off-by: Xiao Guangrong <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: MMU: introduce hva_to_pfn_atomic functionXiao Guangrong2-11/+26
Introduce hva_to_pfn_atomic(), it's the fast path and can used in atomic context, the later patch will use it Signed-off-by: Xiao Guangrong <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24export __get_user_pages_fast() functionXiao Guangrong1-0/+13
This function is used by KVM to pin process's page in the atomic context. Define the 'weak' function to avoid other architecture not support it Acked-by: Nick Piggin <[email protected]> Signed-off-by: Xiao Guangrong <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86: Add timekeeping documentationZachary Amsden1-0/+612
Basic informational document about x86 timekeeping and how KVM is affected. Signed-off-by: Zachary Amsden <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86: Fix a possible backwards warp of kvmclockZachary Amsden2-2/+44
Kernel time, which advances in discrete steps may progress much slower than TSC. As a result, when kvmclock is adjusted to a new base, the apparent time to the guest, which runs at a much higher, nsec scaled rate based on the current TSC, may have already been observed to have a larger value (kernel_ns + scaled tsc) than the value to which we are setting it (kernel_ns + 0). We must instead compute the clock as potentially observed by the guest for kernel_ns to make sure it does not go backwards. Signed-off-by: Zachary Amsden <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24x86: pvclock: Move scale_delta into common headerZachary Amsden2-1/+40
The scale_delta function for shift / multiply with 31-bit precision moves to a common header so it can be used by both kernel and kvm module. Signed-off-by: Zachary Amsden <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86: Add clock sync request to hardware enableZachary Amsden2-1/+13
If there are active VCPUs which are marked as belonging to a particular hardware CPU, request a clock sync for them when enabling hardware; the TSC could be desynchronized on a newly arriving CPU, and we need to recompute guests system time relative to boot after a suspend event. This covers both cases. Note that it is acceptable to take the spinlock, as either no other tasks will be running and no locks held (BSP after resume), or other tasks will be guaranteed to drop the lock relatively quickly (AP on CPU_STARTING). Noting we now get clock synchronization requests for VCPUs which are starting up (or restarting), it is tempting to attempt to remove the arch/x86/kvm/x86.c CPU hot-notifiers at this time, however it is not correct to do so; they are required for systems with non-constant TSC as the frequency may not be known immediately after the processor has started until the cpufreq driver has had a chance to run and query the chipset. Updated: implement better locking semantics for hardware_enable Removed the hack of dropping and retaking the lock by adding the semantic that we always hold kvm_lock when hardware_enable is called. The one place that doesn't need to worry about it is resume, as resuming a frozen CPU, the spinlock won't be taken. Signed-off-by: Zachary Amsden <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86: Robust TSC compensationZachary Amsden1-4/+10
Make the match of TSC find TSC writes that are close to each other instead of perfectly identical; this allows the compensator to also work in migration / suspend scenarios. Signed-off-by: Zachary Amsden <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86: Add helper functions for time computationZachary Amsden1-20/+28
Add a helper function to compute the kernel time and convert nanoseconds back to CPU specific cycles. Note that these must not be called in preemptible context, as that would mean the kernel could enter software suspend state, which would cause non-atomic operation. Also, convert the KVM_SET_CLOCK / KVM_GET_CLOCK ioctls to use the kernel time helper, these should be bootbased as well. Signed-off-by: Zachary Amsden <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86: Fix deep C-state TSC desynchronizationZachary Amsden1-1/+1
When CPUs with unstable TSCs enter deep C-state, TSC may stop running. This causes us to require resynchronization. Since we can't tell when this may potentially happen, we assume the worst by forcing re-compensation for it at every point the VCPU task is descheduled. Signed-off-by: Zachary Amsden <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86: Unify TSC logicZachary Amsden4-35/+35
Move the TSC control logic from the vendor backends into x86.c by adding adjust_tsc_offset to x86 ops. Now all TSC decisions can be done in one place. Signed-off-by: Zachary Amsden <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86: Warn about unstable TSCZachary Amsden1-0/+4
If creating an SMP guest with unstable host TSC, issue a warning Signed-off-by: Zachary Amsden <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86: Make cpu_tsc_khz updates use local CPUZachary Amsden1-43/+114
This simplifies much of the init code; we can now simply always call tsc_khz_changed, optionally passing it a new value, or letting it figure out the existing value (while interrupts are disabled, and thus, by inference from the rule, not raceful against CPU hotplug or frequency updates, which will issue IPIs to the local CPU to perform this very same task). Signed-off-by: Zachary Amsden <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86: TSC reset compensationZachary Amsden2-1/+33
Attempt to synchronize TSCs which are reset to the same value. In the case of a reliable hardware TSC, we can just re-use the same offset, but on non-reliable hardware, we can get closer by adjusting the offset to match the elapsed time. Signed-off-by: Zachary Amsden <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86: Move TSC offset writes to common codeZachary Amsden5-9/+33
Also, ensure that the storing of the offset and the reading of the TSC are never preempted by taking a spinlock. While the lock is overkill now, it is useful later in this patch series. Signed-off-by: Zachary Amsden <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86: Convert TSC writes to TSC offset writesZachary Amsden2-20/+22
Change svm / vmx to be the same internally and write TSC offset instead of bare TSC in helper functions. Isolated as a single patch to contain code movement. Signed-off-by: Zachary Amsden <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86: Drop vm_init_tscZachary Amsden3-10/+3
This is used only by the VMX code, and is not done properly; if the TSC is indeed backwards, it is out of sync, and will need proper handling in the logic at each and every CPU change. For now, drop this test during init as misguided. Signed-off-by: Zachary Amsden <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: MMU: fix missing percpu counter destroyWei Yongjun1-1/+4
commit ad05c88266b4cce1c820928ce8a0fb7690912ba1 (KVM: create aggregate kvm_total_used_mmu_pages value) introduce percpu counter kvm_total_used_mmu_pages but never destroy it, this may cause oops when rmmod & modprobe. Signed-off-by: Wei Yongjun <[email protected]> Acked-by: Tim Pepper <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: MMU: fix regression from rework mmu_shrink() codeXiaotian Feng1-4/+3
Latest kvm mmu_shrink code rework makes kernel changes kvm->arch.n_used_mmu_pages/ kvm->arch.n_max_mmu_pages at kvm_mmu_free_page/kvm_mmu_alloc_page, which is called by kvm_mmu_commit_zap_page. So the kvm->arch.n_used_mmu_pages or kvm_mmu_available_pages(vcpu->kvm) is unchanged after kvm_mmu_prepare_zap_page(), This caused kvm_mmu_change_mmu_pages/__kvm_mmu_free_some_pages loops forever. Moving kvm_mmu_commit_zap_page would make the while loop performs as normal. Reported-by: Avi Kivity <[email protected]> Signed-off-by: Xiaotian Feng <[email protected]> Tested-by: Avi Kivity <[email protected]> Cc: Marcelo Tosatti <[email protected]> Cc: Dave Hansen <[email protected]> Cc: Tim Pepper <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: add JrCXZ instruction emulationWei Yongjun1-1/+5
Add JrCXZ instruction emulation (opcode 0xe3) Used by FreeBSD boot loader. Signed-off-by: Wei Yongjun <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: x86 emulator: add LDS/LES/LFS/LGS/LSS instruction emulationWei Yongjun1-4/+46
Add LDS/LES/LFS/LGS/LSS instruction emulation. (opcode 0xc4, 0xc5, 0x0f 0xb2, 0x0f 0xb4~0xb5) Signed-off-by: Wei Yongjun <[email protected]> Signed-off-by: Marcelo Tosatti <[email protected]>
2010-10-24KVM: create aggregate kvm_total_used_mmu_pages valueDave Hansen1-10/+24
Of slab shrinkers, the VM code says: * Note that 'shrink' will be passed nr_to_scan == 0 when the VM is * querying the cache size, so a fastpath for that case is appropriate. and it *means* it. Look at how it calls the shrinkers: nr_before = (*shrinker->shrink)(0, gfp_mask); shrink_ret = (*shrinker->shrink)(this_scan, gfp_mask); So, if you do anything stupid in your shrinker, the VM will doubly punish you. The mmu_shrink() function takes the global kvm_lock, then acquires every VM's kvm->mmu_lock in sequence. If we have 100 VMs, then we're going to take 101 locks. We do it twice, so each call takes 202 locks. If we're under memory pressure, we can have each cpu trying to do this. It can get really hairy, and we've seen lock spinning in mmu_shrink() be the dominant entry in profiles. This is guaranteed to optimize at least half of those lock aquisitions away. It removes the need to take any of the locks when simply trying to count objects. A 'percpu_counter' can be a large object, but we only have one of these for the entire system. There are not any better alternatives at the moment, especially ones that handle CPU hotplug. Signed-off-by: Dave Hansen <[email protected]> Signed-off-by: Tim Pepper <[email protected]> Signed-off-by: Avi Kivity <[email protected]>
2010-10-24KVM: replace x86 kvm n_free_mmu_pages with n_used_mmu_pagesDave Hansen3-20/+12
Doing this makes the code much more readable. That's borne out by the fact that this patch removes code. "used" also happens to be the number that we need to return back to the slab code when our shrinker gets called. Keeping this value as opposed to free makes the next patch simpler. So, 'struct kvm' is kzalloc()'d. 'struct kvm_arch' is a structure member (and not a pointer) of 'struct kvm'. That means they start out zeroed. I _think_ they get initialized properly by kvm_mmu_change_mmu_pages(). But, that only happens via kvm ioctls. Another benefit of storing 'used' intead of 'free' is that the values are consistent from the moment the structure is allocated: no negative "used" value. Signed-off-by: Dave Hansen <[email protected]> Signed-off-by: Tim Pepper <[email protected]> Signed-off-by: Avi Kivity <[email protected]>
2010-10-24KVM: rename x86 kvm->arch.n_alloc_mmu_pagesDave Hansen3-6/+6
arch.n_alloc_mmu_pages is a poor choice of name. This value truly means, "the number of pages which _may_ be allocated". But, reading the name, "n_alloc_mmu_pages" implies "the number of allocated mmu pages", which is dead wrong. It's really the high watermark, so let's give it a name to match: nr_max_mmu_pages. This change will make the next few patches much more obvious and easy to read. Signed-off-by: Dave Hansen <[email protected]> Signed-off-by: Tim Pepper <[email protected]> Signed-off-by: Avi Kivity <[email protected]>
2010-10-24KVM: abstract kvm x86 mmu->n_free_mmu_pagesDave Hansen2-8/+10
"free" is a poor name for this value. In this context, it means, "the number of mmu pages which this kvm instance should be able to allocate." But "free" implies much more that the objects are there and ready for use. "available" is a much better description, especially when you see how it is calculated. In this patch, we abstract its use into a function. We'll soon replace the function's contents by calculating the value in a different way. All of the reads of n_free_mmu_pages are taken care of in this patch. The modification sites will be handled in a patch later in the series. Signed-off-by: Dave Hansen <[email protected]> Signed-off-by: Tim Pepper <[email protected]> Signed-off-by: Avi Kivity <[email protected]>